@pathrule/cli 0.0.12 → 0.0.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/dist/index.js +303 -285
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1,20 +1,20 @@
1
1
  #!/usr/bin/env node
2
- import {randomUUID,randomBytes,createHash}from'crypto';import {homedir,tmpdir}from'os';import Xe,{dirname,join,basename,normalize,resolve,relative,isAbsolute,sep,posix,win32}from'path';import {rm as rm$1,mkdir,chmod,appendFile,writeFile,unlink,readFile,stat,rename,access,mkdtemp,readdir,open,realpath,rmdir}from'fs/promises';import {createServer}from'http';import {execFile,spawn,execFileSync}from'child_process';import {createRequire}from'module';import {emitKeypressEvents}from'readline';import {createInterface}from'readline/promises';import {promisify}from'util';import {constants,promises}from'fs';import {fileURLToPath}from'url';var rh=Object.create;var Gi=Object.defineProperty;var nh=Object.getOwnPropertyDescriptor;var ih=Object.getOwnPropertyNames;var sh=Object.getPrototypeOf,oh=Object.prototype.hasOwnProperty;var R=(t,e)=>()=>(t&&(e=t(t=0)),e);var ah=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),lh=(t,e)=>{for(var r in e)Gi(t,r,{get:e[r],enumerable:true});},ch=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of ih(e))!oh.call(t,i)&&i!==r&&Gi(t,i,{get:()=>e[i],enumerable:!(n=nh(e,i))||n.enumerable});return t};var uh=(t,e,r)=>(r=t!=null?rh(sh(t)):{},ch(Gi(r,"default",{value:t,enumerable:true}),t));var La=ah((FE,Ma)=>{var{hasOwnProperty:Yi}=Object.prototype,Xi=(t,e={})=>{typeof e=="string"&&(e={section:e}),e.align=e.align===true,e.newline=e.newline===true,e.sort=e.sort===true,e.whitespace=e.whitespace===true||e.align===true,e.platform=e.platform||typeof process<"u"&&process.platform,e.bracketedArray=e.bracketedArray!==false;let r=e.platform==="win32"?`\r
2
+ import {randomUUID,randomBytes,createHash}from'crypto';import {homedir,tmpdir}from'os';import Xe,{dirname,join,relative,sep,extname,basename,normalize,resolve,isAbsolute,posix,win32}from'path';import {rm as rm$1,mkdir,chmod,appendFile,writeFile,unlink,readFile,stat,rename,access,mkdtemp,readdir,open,realpath,rmdir}from'fs/promises';import {createServer}from'http';import {execFile,spawn,execFileSync}from'child_process';import {createRequire}from'module';import {emitKeypressEvents}from'readline';import {createInterface}from'readline/promises';import {promisify}from'util';import {promises,constants}from'fs';import {fileURLToPath}from'url';var _f=Object.create;var Zs=Object.defineProperty;var wf=Object.getOwnPropertyDescriptor;var yf=Object.getOwnPropertyNames;var kf=Object.getPrototypeOf,bf=Object.prototype.hasOwnProperty;var R=(t,e)=>()=>(t&&(e=t(t=0)),e);var vf=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),Sf=(t,e)=>{for(var r in e)Zs(t,r,{get:e[r],enumerable:true});},Cf=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of yf(e))!bf.call(t,s)&&s!==r&&Zs(t,s,{get:()=>e[s],enumerable:!(n=wf(e,s))||n.enumerable});return t};var Ef=(t,e,r)=>(r=t!=null?_f(kf(t)):{},Cf(Zs(r,"default",{value:t,enumerable:true}),t));var za=vf((xR,qa)=>{var{hasOwnProperty:Qs}=Object.prototype,ei=(t,e={})=>{typeof e=="string"&&(e={section:e}),e.align=e.align===true,e.newline=e.newline===true,e.sort=e.sort===true,e.whitespace=e.whitespace===true||e.align===true,e.platform=e.platform||typeof process<"u"&&process.platform,e.bracketedArray=e.bracketedArray!==false;let r=e.platform==="win32"?`\r
3
3
  `:`
4
- `,n=e.whitespace?" = ":"=",i=[],s=e.sort?Object.keys(t).sort():Object.keys(t),o=0;e.align&&(o=Oe(s.filter(c=>t[c]===null||Array.isArray(t[c])||typeof t[c]!="object").map(c=>Array.isArray(t[c])?`${c}[]`:c).concat([""]).reduce((c,u)=>Oe(c).length>=Oe(u).length?c:u)).length);let a="",l=e.bracketedArray?"[]":"";for(let c of s){let u=t[c];if(u&&Array.isArray(u))for(let d of u)a+=Oe(`${c}${l}`).padEnd(o," ")+n+Oe(d)+r;else u&&typeof u=="object"?i.push(c):a+=Oe(c).padEnd(o," ")+n+Oe(u)+r;}e.section&&a.length&&(a="["+Oe(e.section)+"]"+(e.newline?r+r:r)+a);for(let c of i){let u=Da(c,".").join("\\."),d=(e.section?e.section+".":"")+u,p=Xi(t[c],{...e,section:d});a.length&&p.length&&(a+=r),a+=p;}return a};function Da(t,e){var r=0,n=0,i=0,s=[];do if(i=t.indexOf(e,r),i!==-1){if(r=i+e.length,i>0&&t[i-1]==="\\")continue;s.push(t.slice(n,i)),n=i+e.length;}while(i!==-1);return s.push(t.slice(n)),s}var Na=(t,e={})=>{e.bracketedArray=e.bracketedArray!==false;let r=Object.create(null),n=r,i=null,s=/^\[([^\]]*)\]\s*$|^([^=]+)(=(.*))?$/i,o=t.split(/[\r\n]+/g),a={};for(let c of o){if(!c||c.match(/^\s*[;#]/)||c.match(/^\s*$/))continue;let u=c.match(s);if(!u)continue;if(u[1]!==void 0){if(i=bn(u[1]),i==="__proto__"){n=Object.create(null);continue}n=r[i]=r[i]||Object.create(null);continue}let d=bn(u[2]),p;e.bracketedArray?p=d.length>2&&d.slice(-2)==="[]":(a[d]=(a?.[d]||0)+1,p=a[d]>1);let f=p&&d.endsWith("[]")?d.slice(0,-2):d;if(f==="__proto__")continue;let h=u[3]?bn(u[4]):true,m=h==="true"||h==="false"||h==="null"?JSON.parse(h):h;p&&(Yi.call(n,f)?Array.isArray(n[f])||(n[f]=[n[f]]):n[f]=[]),Array.isArray(n[f])?n[f].push(m):n[f]=m;}let l=[];for(let c of Object.keys(r)){if(!Yi.call(r,c)||typeof r[c]!="object"||Array.isArray(r[c]))continue;let u=Da(c,".");n=r;let d=u.pop(),p=d.replace(/\\\./g,".");for(let f of u)f!=="__proto__"&&((!Yi.call(n,f)||typeof n[f]!="object")&&(n[f]=Object.create(null)),n=n[f]);n===r&&p===d||(n[p]=r[c],l.push(c));}for(let c of l)delete r[c];return r},ja=t=>t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"),Oe=t=>typeof t!="string"||t.match(/[=\r\n]/)||t.match(/^\[/)||t.length>1&&ja(t)||t!==t.trim()?JSON.stringify(t):t.split(";").join("\\;").split("#").join("\\#"),bn=t=>{if(t=(t||"").trim(),ja(t)){t.charAt(0)==="'"&&(t=t.slice(1,-1));try{t=JSON.parse(t);}catch{}}else {let e=false,r="";for(let n=0,i=t.length;n<i;n++){let s=t.charAt(n);if(e)"\\;#".indexOf(s)!==-1?r+=s:r+="\\"+s,e=false;else {if(";#".indexOf(s)!==-1)break;s==="\\"?e=true:r+=s;}}return e&&(r+="\\"),r.trim()}return t};Ma.exports={parse:Na,decode:Na,stringify:Xi,encode:Xi,safe:Oe,unsafe:bn};});function dg(t){return createHash("sha256").update(t,"utf8").digest("hex").slice(0,32)}function xl(t=process.env){return t.PATHRULE_HOME&&t.PATHRULE_HOME.trim()!==""?t.PATHRULE_HOME:join(homedir(),".pathrule")}function A(t=process.env){let e=xl(t);return {home:e,activeUserFile:join(e,"active-user"),credentialsFile:join(e,"credentials.json"),desktopFile:join(e,"desktop.json"),daemonFile:join(e,"daemon.json"),bridgePairFile:join(e,"bridge-pair.json"),tokenLockFile:join(e,".token-lock"),logsDir:join(e,"logs"),supportDir:join(e,"support")}}function it(t,e=0,r=process.env){let n=xl(r),i=dg(t),s=join(n,"config","users",i),o=join(n,"cache","users",i),a=join(o,`epoch-${e}`);return {userHash:i,userConfigDir:s,userConfigFile:join(s,"config.json"),userCacheDir:o,epochCacheDir:a}}var j,O,K=R(()=>{j=448,O=384;});function st(t=process.env){let e=A(t);async function r(){try{let i=await readFile(e.credentialsFile,"utf8"),s=JSON.parse(i);return s&&typeof s=="object"&&!Array.isArray(s)?s:{}}catch(i){if(i.code==="ENOENT")return {};throw i}}async function n(i){let s=dirname(e.credentialsFile);await mkdir(s,{recursive:true,mode:j}),await chmod(s,j).catch(()=>{});let o=`${e.credentialsFile}.tmp`;await writeFile(o,JSON.stringify(i),{encoding:"utf8",mode:O}),await chmod(o,O).catch(()=>{}),await rename(o,e.credentialsFile);}return {paths:e,async set(i,s){let o=await r();o[i]=s,await n(o);},async get(i){return (await r())[i]??null},async delete(i){let s=await r();return i in s?(delete s[i],Object.keys(s).length===0?await rm$1(e.credentialsFile,{force:true}):await n(s),true):false},async findAll(){let i=await r();return Object.entries(i).map(([s,o])=>({account:s,value:o}))}}}var _s=R(()=>{K();});function ot(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var i=0,n=Object.getOwnPropertySymbols(t);i<n.length;i++)e.indexOf(n[i])<0&&Object.prototype.propertyIsEnumerable.call(t,n[i])&&(r[n[i]]=t[n[i]]);return r}function Tl(t,e,r,n){function i(s){return s instanceof r?s:new r(function(o){o(s);})}return new(r||(r=Promise))(function(s,o){function a(u){try{c(n.next(u));}catch(d){o(d);}}function l(u){try{c(n.throw(u));}catch(d){o(d);}}function c(u){u.done?s(u.value):i(u.value).then(a,l);}c((n=n.apply(t,e||[])).next());})}var kr=R(()=>{});var Al,Il=R(()=>{Al=t=>t?(...e)=>t(...e):(...e)=>fetch(...e);});var Wt,br,Bt,Ft,vr,Ol=R(()=>{Wt=class extends Error{constructor(e,r="FunctionsError",n){super(e),this.name=r,this.context=n;}toJSON(){return {name:this.name,message:this.message,context:this.context}}},br=class extends Wt{constructor(e){super("Failed to send a request to the Edge Function","FunctionsFetchError",e);}},Bt=class extends Wt{constructor(e){super("Relay Error invoking the Edge Function","FunctionsRelayError",e);}},Ft=class extends Wt{constructor(e){super("Edge Function returned a non-2xx status code","FunctionsHttpError",e);}};(function(t){t.Any="any",t.ApNortheast1="ap-northeast-1",t.ApNortheast2="ap-northeast-2",t.ApSouth1="ap-south-1",t.ApSoutheast1="ap-southeast-1",t.ApSoutheast2="ap-southeast-2",t.CaCentral1="ca-central-1",t.EuCentral1="eu-central-1",t.EuWest1="eu-west-1",t.EuWest2="eu-west-2",t.EuWest3="eu-west-3",t.SaEast1="sa-east-1",t.UsEast1="us-east-1",t.UsWest1="us-west-1",t.UsWest2="us-west-2";})(vr||(vr={}));});var Sr,$l=R(()=>{kr();Il();Ol();Sr=class{constructor(e,{headers:r={},customFetch:n,region:i=vr.Any}={}){this.url=e,this.headers=r,this.region=i,this.fetch=Al(n);}setAuth(e){this.headers.Authorization=`Bearer ${e}`;}invoke(e){return Tl(this,arguments,void 0,function*(r,n={}){var i;let s,o;try{let{headers:a,method:l,body:c,signal:u,timeout:d}=n,p={},{region:f}=n;f||(f=this.region);let h=new URL(`${this.url}/${r}`);f&&f!=="any"&&(p["x-region"]=f,h.searchParams.set("forceFunctionRegion",f));let m;c&&(a&&!Object.prototype.hasOwnProperty.call(a,"Content-Type")||!a)?typeof Blob<"u"&&c instanceof Blob||c instanceof ArrayBuffer?(p["Content-Type"]="application/octet-stream",m=c):typeof c=="string"?(p["Content-Type"]="text/plain",m=c):typeof FormData<"u"&&c instanceof FormData?m=c:(p["Content-Type"]="application/json",m=JSON.stringify(c)):c&&typeof c!="string"&&!(typeof Blob<"u"&&c instanceof Blob)&&!(c instanceof ArrayBuffer)&&!(typeof FormData<"u"&&c instanceof FormData)?m=JSON.stringify(c):m=c;let _=u;d&&(o=new AbortController,s=setTimeout(()=>o.abort(),d),u?(_=o.signal,u.addEventListener("abort",()=>o.abort())):_=o.signal);let b=yield this.fetch(h.toString(),{method:l||"POST",headers:Object.assign(Object.assign(Object.assign({},p),this.headers),a),body:m,signal:_}).catch(Z=>{throw new br(Z)}),w=b.headers.get("x-relay-error");if(w&&w==="true")throw new Bt(b);if(!b.ok)throw new Ft(b);let y=((i=b.headers.get("Content-Type"))!==null&&i!==void 0?i:"text/plain").split(";")[0].trim(),I;return y==="application/json"?I=yield b.json():y==="application/octet-stream"||y==="application/pdf"?I=yield b.blob():y==="text/event-stream"?I=b:y==="multipart/form-data"?I=yield b.formData():I=yield b.text(),{data:I,error:null,response:b}}catch(a){return {data:null,error:a,response:a instanceof Ft||a instanceof Bt?a.context:void 0}}finally{s&&clearTimeout(s);}})}};});var Nl=R(()=>{$l();});function jl(t,e){return new Promise(r=>{if(e?.aborted){r();return}let n=setTimeout(()=>{e?.removeEventListener("abort",i),r();},t);function i(){clearTimeout(n),r();}e?.addEventListener("abort",i);})}function Cg(t,e,r,n){return !(!n||r>=3||!Ul.includes(t)||!Sg.includes(e))}function Cr(t){"@babel/helpers - typeof";return Cr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Cr(t)}function Pg(t,e){if(Cr(t)!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e);if(Cr(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return (e==="string"?String:Number)(t)}function Tg(t){var e=Pg(t,"string");return Cr(e)=="symbol"?e:e+""}function Ag(t,e,r){return (e=Tg(e))in t?Object.defineProperty(t,e,{value:r,enumerable:true,configurable:true,writable:true}):t[e]=r,t}function Ll(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),r.push.apply(r,n);}return r}function On(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?Ll(Object(r),true).forEach(function(n){Ag(t,n,r[n]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):Ll(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n));});}return t}var Dl,Sg,Ul,Wl,Eg,Rg,Ml,Ht,xg,Bl,Hl=R(()=>{Dl=t=>Math.min(1e3*2**t,3e4),Sg=[520,503],Ul=["GET","HEAD","OPTIONS"],Wl=class extends Error{constructor(t){super(t.message),this.name="PostgrestError",this.details=t.details,this.hint=t.hint,this.code=t.code;}toJSON(){return {name:this.name,message:this.message,details:this.details,hint:this.hint,code:this.code}}};Eg=class{constructor(t){var e,r,n,i,s;this.shouldThrowOnError=false,this.retryEnabled=true,this.method=t.method,this.url=t.url,this.headers=new Headers(t.headers),this.schema=t.schema,this.body=t.body,this.shouldThrowOnError=(e=t.shouldThrowOnError)!==null&&e!==void 0?e:false,this.signal=t.signal,this.isMaybeSingle=(r=t.isMaybeSingle)!==null&&r!==void 0?r:false,this.shouldStripNulls=(n=t.shouldStripNulls)!==null&&n!==void 0?n:false,this.urlLengthLimit=(i=t.urlLengthLimit)!==null&&i!==void 0?i:8e3,this.retryEnabled=(s=t.retry)!==null&&s!==void 0?s:true,t.fetch?this.fetch=t.fetch:this.fetch=fetch;}throwOnError(){return this.shouldThrowOnError=true,this}stripNulls(){if(this.headers.get("Accept")==="text/csv")throw new Error("stripNulls() cannot be used with csv()");return this.shouldStripNulls=true,this}setHeader(t,e){return this.headers=new Headers(this.headers),this.headers.set(t,e),this}retry(t){return this.retryEnabled=t,this}then(t,e){var r=this;if(this.schema===void 0||(["GET","HEAD"].includes(this.method)?this.headers.set("Accept-Profile",this.schema):this.headers.set("Content-Profile",this.schema)),this.method!=="GET"&&this.method!=="HEAD"&&this.headers.set("Content-Type","application/json"),this.shouldStripNulls){let o=this.headers.get("Accept");o==="application/vnd.pgrst.object+json"?this.headers.set("Accept","application/vnd.pgrst.object+json;nulls=stripped"):(!o||o==="application/json")&&this.headers.set("Accept","application/vnd.pgrst.array+json;nulls=stripped");}let n=this.fetch,s=(async()=>{let o=0;for(;;){let c=new Headers(r.headers);o>0&&c.set("X-Retry-Count",String(o));let u;try{u=await n(r.url.toString(),{method:r.method,headers:c,body:JSON.stringify(r.body,(d,p)=>typeof p=="bigint"?p.toString():p),signal:r.signal});}catch(d){if(d?.name==="AbortError"||d?.code==="ABORT_ERR"||!Ul.includes(r.method))throw d;if(r.retryEnabled&&o<3){let p=Dl(o);o++,await jl(p,r.signal);continue}throw d}if(Cg(r.method,u.status,o,r.retryEnabled)){var a,l;let d=(a=(l=u.headers)===null||l===void 0?void 0:l.get("Retry-After"))!==null&&a!==void 0?a:null,p=d!==null?Math.max(0,parseInt(d,10)||0)*1e3:Dl(o);await u.text(),o++,await jl(p,r.signal);continue}return await r.processResponse(u)}})();return this.shouldThrowOnError||(s=s.catch(o=>{var a;let l="",c="",u="",d=o?.cause;if(d){var p,f,h,m;let w=(p=d?.message)!==null&&p!==void 0?p:"",y=(f=d?.code)!==null&&f!==void 0?f:"";l=`${(h=o?.name)!==null&&h!==void 0?h:"FetchError"}: ${o?.message}`,l+=`
4
+ `,n=e.whitespace?" = ":"=",s=[],i=e.sort?Object.keys(t).sort():Object.keys(t),o=0;e.align&&(o=Oe(i.filter(c=>t[c]===null||Array.isArray(t[c])||typeof t[c]!="object").map(c=>Array.isArray(t[c])?`${c}[]`:c).concat([""]).reduce((c,u)=>Oe(c).length>=Oe(u).length?c:u)).length);let a="",l=e.bracketedArray?"[]":"";for(let c of i){let u=t[c];if(u&&Array.isArray(u))for(let d of u)a+=Oe(`${c}${l}`).padEnd(o," ")+n+Oe(d)+r;else u&&typeof u=="object"?s.push(c):a+=Oe(c).padEnd(o," ")+n+Oe(u)+r;}e.section&&a.length&&(a="["+Oe(e.section)+"]"+(e.newline?r+r:r)+a);for(let c of s){let u=Fa(c,".").join("\\."),d=(e.section?e.section+".":"")+u,p=ei(t[c],{...e,section:d});a.length&&p.length&&(a+=r),a+=p;}return a};function Fa(t,e){var r=0,n=0,s=0,i=[];do if(s=t.indexOf(e,r),s!==-1){if(r=s+e.length,s>0&&t[s-1]==="\\")continue;i.push(t.slice(n,s)),n=s+e.length;}while(s!==-1);return i.push(t.slice(n)),i}var Ba=(t,e={})=>{e.bracketedArray=e.bracketedArray!==false;let r=Object.create(null),n=r,s=null,i=/^\[([^\]]*)\]\s*$|^([^=]+)(=(.*))?$/i,o=t.split(/[\r\n]+/g),a={};for(let c of o){if(!c||c.match(/^\s*[;#]/)||c.match(/^\s*$/))continue;let u=c.match(i);if(!u)continue;if(u[1]!==void 0){if(s=Cn(u[1]),s==="__proto__"){n=Object.create(null);continue}n=r[s]=r[s]||Object.create(null);continue}let d=Cn(u[2]),p;e.bracketedArray?p=d.length>2&&d.slice(-2)==="[]":(a[d]=(a?.[d]||0)+1,p=a[d]>1);let h=p&&d.endsWith("[]")?d.slice(0,-2):d;if(h==="__proto__")continue;let f=u[3]?Cn(u[4]):true,m=f==="true"||f==="false"||f==="null"?JSON.parse(f):f;p&&(Qs.call(n,h)?Array.isArray(n[h])||(n[h]=[n[h]]):n[h]=[]),Array.isArray(n[h])?n[h].push(m):n[h]=m;}let l=[];for(let c of Object.keys(r)){if(!Qs.call(r,c)||typeof r[c]!="object"||Array.isArray(r[c]))continue;let u=Fa(c,".");n=r;let d=u.pop(),p=d.replace(/\\\./g,".");for(let h of u)h!=="__proto__"&&((!Qs.call(n,h)||typeof n[h]!="object")&&(n[h]=Object.create(null)),n=n[h]);n===r&&p===d||(n[p]=r[c],l.push(c));}for(let c of l)delete r[c];return r},Ha=t=>t.startsWith('"')&&t.endsWith('"')||t.startsWith("'")&&t.endsWith("'"),Oe=t=>typeof t!="string"||t.match(/[=\r\n]/)||t.match(/^\[/)||t.length>1&&Ha(t)||t!==t.trim()?JSON.stringify(t):t.split(";").join("\\;").split("#").join("\\#"),Cn=t=>{if(t=(t||"").trim(),Ha(t)){t.charAt(0)==="'"&&(t=t.slice(1,-1));try{t=JSON.parse(t);}catch{}}else {let e=false,r="";for(let n=0,s=t.length;n<s;n++){let i=t.charAt(n);if(e)"\\;#".indexOf(i)!==-1?r+=i:r+="\\"+i,e=false;else {if(";#".indexOf(i)!==-1)break;i==="\\"?e=true:r+=i;}}return e&&(r+="\\"),r.trim()}return t};qa.exports={parse:Ba,decode:Ba,stringify:ei,encode:ei,safe:Oe,unsafe:Cn};});function Rg(t){return createHash("sha256").update(t,"utf8").digest("hex").slice(0,32)}function Nl(t=process.env){return t.PATHRULE_HOME&&t.PATHRULE_HOME.trim()!==""?t.PATHRULE_HOME:join(homedir(),".pathrule")}function A(t=process.env){let e=Nl(t);return {home:e,activeUserFile:join(e,"active-user"),credentialsFile:join(e,"credentials.json"),desktopFile:join(e,"desktop.json"),daemonFile:join(e,"daemon.json"),bridgePairFile:join(e,"bridge-pair.json"),tokenLockFile:join(e,".token-lock"),logsDir:join(e,"logs"),supportDir:join(e,"support")}}function it(t,e=0,r=process.env){let n=Nl(r),s=Rg(t),i=join(n,"config","users",s),o=join(n,"cache","users",s),a=join(o,`epoch-${e}`);return {userHash:s,userConfigDir:i,userConfigFile:join(i,"config.json"),userCacheDir:o,epochCacheDir:a}}var M,O,K=R(()=>{M=448,O=384;});function ot(t=process.env){let e=A(t);async function r(){try{let s=await readFile(e.credentialsFile,"utf8"),i=JSON.parse(s);return i&&typeof i=="object"&&!Array.isArray(i)?i:{}}catch(s){if(s.code==="ENOENT")return {};throw s}}async function n(s){let i=dirname(e.credentialsFile);await mkdir(i,{recursive:true,mode:M}),await chmod(i,M).catch(()=>{});let o=`${e.credentialsFile}.tmp`;await writeFile(o,JSON.stringify(s),{encoding:"utf8",mode:O}),await chmod(o,O).catch(()=>{}),await rename(o,e.credentialsFile);}return {paths:e,async set(s,i){let o=await r();o[s]=i,await n(o);},async get(s){return (await r())[s]??null},async delete(s){let i=await r();return s in i?(delete i[s],Object.keys(i).length===0?await rm$1(e.credentialsFile,{force:true}):await n(i),true):false},async findAll(){let s=await r();return Object.entries(s).map(([i,o])=>({account:i,value:o}))}}}var ki=R(()=>{K();});function at(t,e){var r={};for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&e.indexOf(n)<0&&(r[n]=t[n]);if(t!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,n=Object.getOwnPropertySymbols(t);s<n.length;s++)e.indexOf(n[s])<0&&Object.prototype.propertyIsEnumerable.call(t,n[s])&&(r[n[s]]=t[n[s]]);return r}function jl(t,e,r,n){function s(i){return i instanceof r?i:new r(function(o){o(i);})}return new(r||(r=Promise))(function(i,o){function a(u){try{c(n.next(u));}catch(d){o(d);}}function l(u){try{c(n.throw(u));}catch(d){o(d);}}function c(u){u.done?i(u.value):s(u.value).then(a,l);}c((n=n.apply(t,e||[])).next());})}var vr=R(()=>{});var Ml,Ll=R(()=>{Ml=t=>t?(...e)=>t(...e):(...e)=>fetch(...e);});var Bt,Sr,Ft,Ht,Cr,Ul=R(()=>{Bt=class extends Error{constructor(e,r="FunctionsError",n){super(e),this.name=r,this.context=n;}toJSON(){return {name:this.name,message:this.message,context:this.context}}},Sr=class extends Bt{constructor(e){super("Failed to send a request to the Edge Function","FunctionsFetchError",e);}},Ft=class extends Bt{constructor(e){super("Relay Error invoking the Edge Function","FunctionsRelayError",e);}},Ht=class extends Bt{constructor(e){super("Edge Function returned a non-2xx status code","FunctionsHttpError",e);}};(function(t){t.Any="any",t.ApNortheast1="ap-northeast-1",t.ApNortheast2="ap-northeast-2",t.ApSouth1="ap-south-1",t.ApSoutheast1="ap-southeast-1",t.ApSoutheast2="ap-southeast-2",t.CaCentral1="ca-central-1",t.EuCentral1="eu-central-1",t.EuWest1="eu-west-1",t.EuWest2="eu-west-2",t.EuWest3="eu-west-3",t.SaEast1="sa-east-1",t.UsEast1="us-east-1",t.UsWest1="us-west-1",t.UsWest2="us-west-2";})(Cr||(Cr={}));});var Er,Wl=R(()=>{vr();Ll();Ul();Er=class{constructor(e,{headers:r={},customFetch:n,region:s=Cr.Any}={}){this.url=e,this.headers=r,this.region=s,this.fetch=Ml(n);}setAuth(e){this.headers.Authorization=`Bearer ${e}`;}invoke(e){return jl(this,arguments,void 0,function*(r,n={}){var s;let i,o;try{let{headers:a,method:l,body:c,signal:u,timeout:d}=n,p={},{region:h}=n;h||(h=this.region);let f=new URL(`${this.url}/${r}`);h&&h!=="any"&&(p["x-region"]=h,f.searchParams.set("forceFunctionRegion",h));let m;c&&(a&&!Object.prototype.hasOwnProperty.call(a,"Content-Type")||!a)?typeof Blob<"u"&&c instanceof Blob||c instanceof ArrayBuffer?(p["Content-Type"]="application/octet-stream",m=c):typeof c=="string"?(p["Content-Type"]="text/plain",m=c):typeof FormData<"u"&&c instanceof FormData?m=c:(p["Content-Type"]="application/json",m=JSON.stringify(c)):c&&typeof c!="string"&&!(typeof Blob<"u"&&c instanceof Blob)&&!(c instanceof ArrayBuffer)&&!(typeof FormData<"u"&&c instanceof FormData)?m=JSON.stringify(c):m=c;let _=u;d&&(o=new AbortController,i=setTimeout(()=>o.abort(),d),u?(_=o.signal,u.addEventListener("abort",()=>o.abort())):_=o.signal);let b=yield this.fetch(f.toString(),{method:l||"POST",headers:Object.assign(Object.assign(Object.assign({},p),this.headers),a),body:m,signal:_}).catch(Z=>{throw new Sr(Z)}),w=b.headers.get("x-relay-error");if(w&&w==="true")throw new Ft(b);if(!b.ok)throw new Ht(b);let k=((s=b.headers.get("Content-Type"))!==null&&s!==void 0?s:"text/plain").split(";")[0].trim(),I;return k==="application/json"?I=yield b.json():k==="application/octet-stream"||k==="application/pdf"?I=yield b.blob():k==="text/event-stream"?I=b:k==="multipart/form-data"?I=yield b.formData():I=yield b.text(),{data:I,error:null,response:b}}catch(a){return {data:null,error:a,response:a instanceof Ht||a instanceof Ft?a.context:void 0}}finally{i&&clearTimeout(i);}})}};});var Bl=R(()=>{Wl();});function Hl(t,e){return new Promise(r=>{if(e?.aborted){r();return}let n=setTimeout(()=>{e?.removeEventListener("abort",s),r();},t);function s(){clearTimeout(n),r();}e?.addEventListener("abort",s);})}function Ug(t,e,r,n){return !(!n||r>=3||!Jl.includes(t)||!Lg.includes(e))}function Rr(t){"@babel/helpers - typeof";return Rr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Rr(t)}function Hg(t,e){if(Rr(t)!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e);if(Rr(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return (e==="string"?String:Number)(t)}function qg(t){var e=Hg(t,"string");return Rr(e)=="symbol"?e:e+""}function zg(t,e,r){return (e=qg(e))in t?Object.defineProperty(t,e,{value:r,enumerable:true,configurable:true,writable:true}):t[e]=r,t}function zl(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(s){return Object.getOwnPropertyDescriptor(t,s).enumerable})),r.push.apply(r,n);}return r}function Dn(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?zl(Object(r),true).forEach(function(n){zg(t,n,r[n]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):zl(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n));});}return t}var Fl,Lg,Jl,Kl,Wg,Bg,ql,qt,Fg,Vl,Yl=R(()=>{Fl=t=>Math.min(1e3*2**t,3e4),Lg=[520,503],Jl=["GET","HEAD","OPTIONS"],Kl=class extends Error{constructor(t){super(t.message),this.name="PostgrestError",this.details=t.details,this.hint=t.hint,this.code=t.code;}toJSON(){return {name:this.name,message:this.message,details:this.details,hint:this.hint,code:this.code}}};Wg=class{constructor(t){var e,r,n,s,i;this.shouldThrowOnError=false,this.retryEnabled=true,this.method=t.method,this.url=t.url,this.headers=new Headers(t.headers),this.schema=t.schema,this.body=t.body,this.shouldThrowOnError=(e=t.shouldThrowOnError)!==null&&e!==void 0?e:false,this.signal=t.signal,this.isMaybeSingle=(r=t.isMaybeSingle)!==null&&r!==void 0?r:false,this.shouldStripNulls=(n=t.shouldStripNulls)!==null&&n!==void 0?n:false,this.urlLengthLimit=(s=t.urlLengthLimit)!==null&&s!==void 0?s:8e3,this.retryEnabled=(i=t.retry)!==null&&i!==void 0?i:true,t.fetch?this.fetch=t.fetch:this.fetch=fetch;}throwOnError(){return this.shouldThrowOnError=true,this}stripNulls(){if(this.headers.get("Accept")==="text/csv")throw new Error("stripNulls() cannot be used with csv()");return this.shouldStripNulls=true,this}setHeader(t,e){return this.headers=new Headers(this.headers),this.headers.set(t,e),this}retry(t){return this.retryEnabled=t,this}then(t,e){var r=this;if(this.schema===void 0||(["GET","HEAD"].includes(this.method)?this.headers.set("Accept-Profile",this.schema):this.headers.set("Content-Profile",this.schema)),this.method!=="GET"&&this.method!=="HEAD"&&this.headers.set("Content-Type","application/json"),this.shouldStripNulls){let o=this.headers.get("Accept");o==="application/vnd.pgrst.object+json"?this.headers.set("Accept","application/vnd.pgrst.object+json;nulls=stripped"):(!o||o==="application/json")&&this.headers.set("Accept","application/vnd.pgrst.array+json;nulls=stripped");}let n=this.fetch,i=(async()=>{let o=0;for(;;){let c=new Headers(r.headers);o>0&&c.set("X-Retry-Count",String(o));let u;try{u=await n(r.url.toString(),{method:r.method,headers:c,body:JSON.stringify(r.body,(d,p)=>typeof p=="bigint"?p.toString():p),signal:r.signal});}catch(d){if(d?.name==="AbortError"||d?.code==="ABORT_ERR"||!Jl.includes(r.method))throw d;if(r.retryEnabled&&o<3){let p=Fl(o);o++,await Hl(p,r.signal);continue}throw d}if(Ug(r.method,u.status,o,r.retryEnabled)){var a,l;let d=(a=(l=u.headers)===null||l===void 0?void 0:l.get("Retry-After"))!==null&&a!==void 0?a:null,p=d!==null?Math.max(0,parseInt(d,10)||0)*1e3:Fl(o);await u.text(),o++,await Hl(p,r.signal);continue}return await r.processResponse(u)}})();return this.shouldThrowOnError||(i=i.catch(o=>{var a;let l="",c="",u="",d=o?.cause;if(d){var p,h,f,m;let w=(p=d?.message)!==null&&p!==void 0?p:"",k=(h=d?.code)!==null&&h!==void 0?h:"";l=`${(f=o?.name)!==null&&f!==void 0?f:"FetchError"}: ${o?.message}`,l+=`
5
5
 
6
- Caused by: ${(m=d?.name)!==null&&m!==void 0?m:"Error"}: ${w}`,y&&(l+=` (${y})`),d?.stack&&(l+=`
7
- ${d.stack}`);}else {var _;l=(_=o?.stack)!==null&&_!==void 0?_:"";}let b=this.url.toString().length;return o?.name==="AbortError"||o?.code==="ABORT_ERR"?(u="",c="Request was aborted (timeout or manual cancellation)",b>this.urlLengthLimit&&(c+=`. Note: Your request URL is ${b} characters, which may exceed server limits. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [many IDs])), consider using an RPC function to pass values server-side.`)):(d?.name==="HeadersOverflowError"||d?.code==="UND_ERR_HEADERS_OVERFLOW")&&(u="",c="HTTP headers exceeded server limits (typically 16KB)",b>this.urlLengthLimit&&(c+=`. Your request URL is ${b} characters. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [200+ IDs])), consider using an RPC function instead.`)),{success:false,error:{message:`${(a=o?.name)!==null&&a!==void 0?a:"FetchError"}: ${o?.message}`,details:l,hint:c,code:u},data:null,count:null,status:0,statusText:""}})),s.then(t,e)}async processResponse(t){var e=this;let r=null,n=null,i=null,s=t.status,o=t.statusText;if(t.ok){var a,l;if(e.method!=="HEAD"){var c;let p=await t.text();p===""||(e.headers.get("Accept")==="text/csv"||e.headers.get("Accept")&&(!((c=e.headers.get("Accept"))===null||c===void 0)&&c.includes("application/vnd.pgrst.plan+text"))?n=p:n=JSON.parse(p));}let u=(a=e.headers.get("Prefer"))===null||a===void 0?void 0:a.match(/count=(exact|planned|estimated)/),d=(l=t.headers.get("content-range"))===null||l===void 0?void 0:l.split("/");u&&d&&d.length>1&&(i=parseInt(d[1])),e.isMaybeSingle&&Array.isArray(n)&&(n.length>1?(r={code:"PGRST116",details:`Results contain ${n.length} rows, application/vnd.pgrst.object+json requires 1 row`,hint:null,message:"JSON object requested, multiple (or no) rows returned"},n=null,i=null,s=406,o="Not Acceptable"):n.length===1?n=n[0]:n=null);}else {let u=await t.text();try{r=JSON.parse(u),Array.isArray(r)&&t.status===404&&(n=[],r=null,s=200,o="OK");}catch{t.status===404&&u===""?(s=204,o="No Content"):r={message:u};}if(r&&e.shouldThrowOnError)throw new Wl(r)}return {success:r===null,error:r,data:n,count:i,status:s,statusText:o}}returns(){return this}overrideTypes(){return this}},Rg=class extends Eg{select(t){let e=false,r=(t??"*").split("").map(n=>/\s/.test(n)&&!e?"":(n==='"'&&(e=!e),n)).join("");return this.url.searchParams.set("select",r),this.headers.append("Prefer","return=representation"),this}order(t,{ascending:e=true,nullsFirst:r,foreignTable:n,referencedTable:i=n}={}){let s=i?`${i}.order`:"order",o=this.url.searchParams.get(s);return this.url.searchParams.set(s,`${o?`${o},`:""}${t}.${e?"asc":"desc"}${r===void 0?"":r?".nullsfirst":".nullslast"}`),this}limit(t,{foreignTable:e,referencedTable:r=e}={}){let n=typeof r>"u"?"limit":`${r}.limit`;return this.url.searchParams.set(n,`${t}`),this}range(t,e,{foreignTable:r,referencedTable:n=r}={}){let i=typeof n>"u"?"offset":`${n}.offset`,s=typeof n>"u"?"limit":`${n}.limit`;return this.url.searchParams.set(i,`${t}`),this.url.searchParams.set(s,`${e-t+1}`),this}abortSignal(t){return this.signal=t,this}single(){return this.headers.set("Accept","application/vnd.pgrst.object+json"),this}maybeSingle(){return this.isMaybeSingle=true,this}csv(){return this.headers.set("Accept","text/csv"),this}geojson(){return this.headers.set("Accept","application/geo+json"),this}explain({analyze:t=false,verbose:e=false,settings:r=false,buffers:n=false,wal:i=false,format:s="text"}={}){var o;let a=[t?"analyze":null,e?"verbose":null,r?"settings":null,n?"buffers":null,i?"wal":null].filter(Boolean).join("|"),l=(o=this.headers.get("Accept"))!==null&&o!==void 0?o:"application/json";return this.headers.set("Accept",`application/vnd.pgrst.plan+${s}; for="${l}"; options=${a};`),s==="json"?this:this}rollback(){return this.headers.append("Prefer","tx=rollback"),this}returns(){return this}maxAffected(t){return this.headers.append("Prefer","handling=strict"),this.headers.append("Prefer",`max-affected=${t}`),this}},Ml=new RegExp("[,()]"),Ht=class extends Rg{eq(t,e){return this.url.searchParams.append(t,`eq.${e}`),this}neq(t,e){return this.url.searchParams.append(t,`neq.${e}`),this}gt(t,e){return this.url.searchParams.append(t,`gt.${e}`),this}gte(t,e){return this.url.searchParams.append(t,`gte.${e}`),this}lt(t,e){return this.url.searchParams.append(t,`lt.${e}`),this}lte(t,e){return this.url.searchParams.append(t,`lte.${e}`),this}like(t,e){return this.url.searchParams.append(t,`like.${e}`),this}likeAllOf(t,e){return this.url.searchParams.append(t,`like(all).{${e.join(",")}}`),this}likeAnyOf(t,e){return this.url.searchParams.append(t,`like(any).{${e.join(",")}}`),this}ilike(t,e){return this.url.searchParams.append(t,`ilike.${e}`),this}ilikeAllOf(t,e){return this.url.searchParams.append(t,`ilike(all).{${e.join(",")}}`),this}ilikeAnyOf(t,e){return this.url.searchParams.append(t,`ilike(any).{${e.join(",")}}`),this}regexMatch(t,e){return this.url.searchParams.append(t,`match.${e}`),this}regexIMatch(t,e){return this.url.searchParams.append(t,`imatch.${e}`),this}is(t,e){return this.url.searchParams.append(t,`is.${e}`),this}isDistinct(t,e){return this.url.searchParams.append(t,`isdistinct.${e}`),this}in(t,e){let r=Array.from(new Set(e)).map(n=>typeof n=="string"&&Ml.test(n)?`"${n}"`:`${n}`).join(",");return this.url.searchParams.append(t,`in.(${r})`),this}notIn(t,e){let r=Array.from(new Set(e)).map(n=>typeof n=="string"&&Ml.test(n)?`"${n}"`:`${n}`).join(",");return this.url.searchParams.append(t,`not.in.(${r})`),this}contains(t,e){return typeof e=="string"?this.url.searchParams.append(t,`cs.${e}`):Array.isArray(e)?this.url.searchParams.append(t,`cs.{${e.join(",")}}`):this.url.searchParams.append(t,`cs.${JSON.stringify(e)}`),this}containedBy(t,e){return typeof e=="string"?this.url.searchParams.append(t,`cd.${e}`):Array.isArray(e)?this.url.searchParams.append(t,`cd.{${e.join(",")}}`):this.url.searchParams.append(t,`cd.${JSON.stringify(e)}`),this}rangeGt(t,e){return this.url.searchParams.append(t,`sr.${e}`),this}rangeGte(t,e){return this.url.searchParams.append(t,`nxl.${e}`),this}rangeLt(t,e){return this.url.searchParams.append(t,`sl.${e}`),this}rangeLte(t,e){return this.url.searchParams.append(t,`nxr.${e}`),this}rangeAdjacent(t,e){return this.url.searchParams.append(t,`adj.${e}`),this}overlaps(t,e){return typeof e=="string"?this.url.searchParams.append(t,`ov.${e}`):this.url.searchParams.append(t,`ov.{${e.join(",")}}`),this}textSearch(t,e,{config:r,type:n}={}){let i="";n==="plain"?i="pl":n==="phrase"?i="ph":n==="websearch"&&(i="w");let s=r===void 0?"":`(${r})`;return this.url.searchParams.append(t,`${i}fts${s}.${e}`),this}match(t){return Object.entries(t).filter(([e,r])=>r!==void 0).forEach(([e,r])=>{this.url.searchParams.append(e,`eq.${r}`);}),this}not(t,e,r){return this.url.searchParams.append(t,`not.${e}.${r}`),this}or(t,{foreignTable:e,referencedTable:r=e}={}){let n=r?`${r}.or`:"or";return this.url.searchParams.append(n,`(${t})`),this}filter(t,e,r){return this.url.searchParams.append(t,`${e}.${r}`),this}},xg=class{constructor(t,{headers:e={},schema:r,fetch:n,urlLengthLimit:i=8e3,retry:s}){this.url=t,this.headers=new Headers(e),this.schema=r,this.fetch=n,this.urlLengthLimit=i,this.retry=s;}cloneRequestState(){return {url:new URL(this.url.toString()),headers:new Headers(this.headers)}}select(t,e){let{head:r=false,count:n}=e??{},i=r?"HEAD":"GET",s=false,o=(t??"*").split("").map(c=>/\s/.test(c)&&!s?"":(c==='"'&&(s=!s),c)).join(""),{url:a,headers:l}=this.cloneRequestState();return a.searchParams.set("select",o),n&&l.append("Prefer",`count=${n}`),new Ht({method:i,url:a,headers:l,schema:this.schema,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}insert(t,{count:e,defaultToNull:r=true}={}){var n;let i="POST",{url:s,headers:o}=this.cloneRequestState();if(e&&o.append("Prefer",`count=${e}`),r||o.append("Prefer","missing=default"),Array.isArray(t)){let a=t.reduce((l,c)=>l.concat(Object.keys(c)),[]);if(a.length>0){let l=[...new Set(a)].map(c=>`"${c}"`);s.searchParams.set("columns",l.join(","));}}return new Ht({method:i,url:s,headers:o,schema:this.schema,body:t,fetch:(n=this.fetch)!==null&&n!==void 0?n:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}upsert(t,{onConflict:e,ignoreDuplicates:r=false,count:n,defaultToNull:i=true}={}){var s;let o="POST",{url:a,headers:l}=this.cloneRequestState();if(l.append("Prefer",`resolution=${r?"ignore":"merge"}-duplicates`),e!==void 0&&a.searchParams.set("on_conflict",e),n&&l.append("Prefer",`count=${n}`),i||l.append("Prefer","missing=default"),Array.isArray(t)){let c=t.reduce((u,d)=>u.concat(Object.keys(d)),[]);if(c.length>0){let u=[...new Set(c)].map(d=>`"${d}"`);a.searchParams.set("columns",u.join(","));}}return new Ht({method:o,url:a,headers:l,schema:this.schema,body:t,fetch:(s=this.fetch)!==null&&s!==void 0?s:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}update(t,{count:e}={}){var r;let n="PATCH",{url:i,headers:s}=this.cloneRequestState();return e&&s.append("Prefer",`count=${e}`),new Ht({method:n,url:i,headers:s,schema:this.schema,body:t,fetch:(r=this.fetch)!==null&&r!==void 0?r:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}delete({count:t}={}){var e;let r="DELETE",{url:n,headers:i}=this.cloneRequestState();return t&&i.append("Prefer",`count=${t}`),new Ht({method:r,url:n,headers:i,schema:this.schema,fetch:(e=this.fetch)!==null&&e!==void 0?e:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}};Bl=class Fl{constructor(e,{headers:r={},schema:n,fetch:i,timeout:s,urlLengthLimit:o=8e3,retry:a}={}){this.url=e,this.headers=new Headers(r),this.schemaName=n,this.urlLengthLimit=o;let l=i??globalThis.fetch;s!==void 0&&s>0?this.fetch=(c,u)=>{let d=new AbortController,p=setTimeout(()=>d.abort(),s),f=u?.signal;if(f){if(f.aborted)return clearTimeout(p),l(c,u);let h=()=>{clearTimeout(p),d.abort();};return f.addEventListener("abort",h,{once:true}),l(c,On(On({},u),{},{signal:d.signal})).finally(()=>{clearTimeout(p),f.removeEventListener("abort",h);})}return l(c,On(On({},u),{},{signal:d.signal})).finally(()=>clearTimeout(p))}:this.fetch=l,this.retry=a;}from(e){if(!e||typeof e!="string"||e.trim()==="")throw new Error("Invalid relation name: relation must be a non-empty string.");return new xg(new URL(`${this.url}/${e}`),{headers:new Headers(this.headers),schema:this.schemaName,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}schema(e){return new Fl(this.url,{headers:this.headers,schema:e,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}rpc(e,r={},{head:n=false,get:i=false,count:s}={}){var o;let a,l=new URL(`${this.url}/rpc/${e}`),c,u=f=>f!==null&&typeof f=="object"&&(!Array.isArray(f)||f.some(u)),d=n&&Object.values(r).some(u);d?(a="POST",c=r):n||i?(a=n?"HEAD":"GET",Object.entries(r).filter(([f,h])=>h!==void 0).map(([f,h])=>[f,Array.isArray(h)?`{${h.join(",")}}`:`${h}`]).forEach(([f,h])=>{l.searchParams.append(f,h);})):(a="POST",c=r);let p=new Headers(this.headers);return d?p.set("Prefer",s?`count=${s},return=minimal`:"return=minimal"):s&&p.set("Prefer",`count=${s}`),new Ht({method:a,url:l,headers:p,schema:this.schemaName,body:c,fetch:(o=this.fetch)!==null&&o!==void 0?o:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}};});var ws,ys,ks=R(()=>{ws=class{constructor(){}static detectEnvironment(){var e;if(typeof WebSocket<"u")return {type:"native",constructor:WebSocket};if(typeof globalThis<"u"&&typeof globalThis.WebSocket<"u")return {type:"native",constructor:globalThis.WebSocket};if(typeof global<"u"&&typeof global.WebSocket<"u")return {type:"native",constructor:global.WebSocket};if(typeof globalThis<"u"&&typeof globalThis.WebSocketPair<"u"&&typeof globalThis.WebSocket>"u")return {type:"cloudflare",error:"Cloudflare Workers detected. WebSocket clients are not supported in Cloudflare Workers.",workaround:"Use Cloudflare Workers WebSocket API for server-side WebSocket handling, or deploy to a different runtime."};if(typeof globalThis<"u"&&globalThis.EdgeRuntime||typeof navigator<"u"&&(!((e=navigator.userAgent)===null||e===void 0)&&e.includes("Vercel-Edge")))return {type:"unsupported",error:"Edge runtime detected (Vercel Edge/Netlify Edge). WebSockets are not supported in edge functions.",workaround:"Use serverless functions or a different deployment target for WebSocket functionality."};let r=globalThis.process;if(r){let n=r.versions;if(n&&n.node){let i=n.node,s=parseInt(i.replace(/^v/,"").split(".")[0]);return s>=22?typeof globalThis.WebSocket<"u"?{type:"native",constructor:globalThis.WebSocket}:{type:"unsupported",error:`Node.js ${s} detected but native WebSocket not found.`,workaround:"Provide a WebSocket implementation via the transport option."}:{type:"unsupported",error:`Node.js ${s} detected without native WebSocket support.`,workaround:`For Node.js < 22, install "ws" package and provide it via the transport option:
6
+ Caused by: ${(m=d?.name)!==null&&m!==void 0?m:"Error"}: ${w}`,k&&(l+=` (${k})`),d?.stack&&(l+=`
7
+ ${d.stack}`);}else {var _;l=(_=o?.stack)!==null&&_!==void 0?_:"";}let b=this.url.toString().length;return o?.name==="AbortError"||o?.code==="ABORT_ERR"?(u="",c="Request was aborted (timeout or manual cancellation)",b>this.urlLengthLimit&&(c+=`. Note: Your request URL is ${b} characters, which may exceed server limits. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [many IDs])), consider using an RPC function to pass values server-side.`)):(d?.name==="HeadersOverflowError"||d?.code==="UND_ERR_HEADERS_OVERFLOW")&&(u="",c="HTTP headers exceeded server limits (typically 16KB)",b>this.urlLengthLimit&&(c+=`. Your request URL is ${b} characters. If selecting many fields, consider using views. If filtering with large arrays (e.g., .in('id', [200+ IDs])), consider using an RPC function instead.`)),{success:false,error:{message:`${(a=o?.name)!==null&&a!==void 0?a:"FetchError"}: ${o?.message}`,details:l,hint:c,code:u},data:null,count:null,status:0,statusText:""}})),i.then(t,e)}async processResponse(t){var e=this;let r=null,n=null,s=null,i=t.status,o=t.statusText;if(t.ok){var a,l;if(e.method!=="HEAD"){var c;let p=await t.text();p===""||(e.headers.get("Accept")==="text/csv"||e.headers.get("Accept")&&(!((c=e.headers.get("Accept"))===null||c===void 0)&&c.includes("application/vnd.pgrst.plan+text"))?n=p:n=JSON.parse(p));}let u=(a=e.headers.get("Prefer"))===null||a===void 0?void 0:a.match(/count=(exact|planned|estimated)/),d=(l=t.headers.get("content-range"))===null||l===void 0?void 0:l.split("/");u&&d&&d.length>1&&(s=parseInt(d[1])),e.isMaybeSingle&&Array.isArray(n)&&(n.length>1?(r={code:"PGRST116",details:`Results contain ${n.length} rows, application/vnd.pgrst.object+json requires 1 row`,hint:null,message:"JSON object requested, multiple (or no) rows returned"},n=null,s=null,i=406,o="Not Acceptable"):n.length===1?n=n[0]:n=null);}else {let u=await t.text();try{r=JSON.parse(u),Array.isArray(r)&&t.status===404&&(n=[],r=null,i=200,o="OK");}catch{t.status===404&&u===""?(i=204,o="No Content"):r={message:u};}if(r&&e.shouldThrowOnError)throw new Kl(r)}return {success:r===null,error:r,data:n,count:s,status:i,statusText:o}}returns(){return this}overrideTypes(){return this}},Bg=class extends Wg{select(t){let e=false,r=(t??"*").split("").map(n=>/\s/.test(n)&&!e?"":(n==='"'&&(e=!e),n)).join("");return this.url.searchParams.set("select",r),this.headers.append("Prefer","return=representation"),this}order(t,{ascending:e=true,nullsFirst:r,foreignTable:n,referencedTable:s=n}={}){let i=s?`${s}.order`:"order",o=this.url.searchParams.get(i);return this.url.searchParams.set(i,`${o?`${o},`:""}${t}.${e?"asc":"desc"}${r===void 0?"":r?".nullsfirst":".nullslast"}`),this}limit(t,{foreignTable:e,referencedTable:r=e}={}){let n=typeof r>"u"?"limit":`${r}.limit`;return this.url.searchParams.set(n,`${t}`),this}range(t,e,{foreignTable:r,referencedTable:n=r}={}){let s=typeof n>"u"?"offset":`${n}.offset`,i=typeof n>"u"?"limit":`${n}.limit`;return this.url.searchParams.set(s,`${t}`),this.url.searchParams.set(i,`${e-t+1}`),this}abortSignal(t){return this.signal=t,this}single(){return this.headers.set("Accept","application/vnd.pgrst.object+json"),this}maybeSingle(){return this.isMaybeSingle=true,this}csv(){return this.headers.set("Accept","text/csv"),this}geojson(){return this.headers.set("Accept","application/geo+json"),this}explain({analyze:t=false,verbose:e=false,settings:r=false,buffers:n=false,wal:s=false,format:i="text"}={}){var o;let a=[t?"analyze":null,e?"verbose":null,r?"settings":null,n?"buffers":null,s?"wal":null].filter(Boolean).join("|"),l=(o=this.headers.get("Accept"))!==null&&o!==void 0?o:"application/json";return this.headers.set("Accept",`application/vnd.pgrst.plan+${i}; for="${l}"; options=${a};`),i==="json"?this:this}rollback(){return this.headers.append("Prefer","tx=rollback"),this}returns(){return this}maxAffected(t){return this.headers.append("Prefer","handling=strict"),this.headers.append("Prefer",`max-affected=${t}`),this}},ql=new RegExp("[,()]"),qt=class extends Bg{eq(t,e){return this.url.searchParams.append(t,`eq.${e}`),this}neq(t,e){return this.url.searchParams.append(t,`neq.${e}`),this}gt(t,e){return this.url.searchParams.append(t,`gt.${e}`),this}gte(t,e){return this.url.searchParams.append(t,`gte.${e}`),this}lt(t,e){return this.url.searchParams.append(t,`lt.${e}`),this}lte(t,e){return this.url.searchParams.append(t,`lte.${e}`),this}like(t,e){return this.url.searchParams.append(t,`like.${e}`),this}likeAllOf(t,e){return this.url.searchParams.append(t,`like(all).{${e.join(",")}}`),this}likeAnyOf(t,e){return this.url.searchParams.append(t,`like(any).{${e.join(",")}}`),this}ilike(t,e){return this.url.searchParams.append(t,`ilike.${e}`),this}ilikeAllOf(t,e){return this.url.searchParams.append(t,`ilike(all).{${e.join(",")}}`),this}ilikeAnyOf(t,e){return this.url.searchParams.append(t,`ilike(any).{${e.join(",")}}`),this}regexMatch(t,e){return this.url.searchParams.append(t,`match.${e}`),this}regexIMatch(t,e){return this.url.searchParams.append(t,`imatch.${e}`),this}is(t,e){return this.url.searchParams.append(t,`is.${e}`),this}isDistinct(t,e){return this.url.searchParams.append(t,`isdistinct.${e}`),this}in(t,e){let r=Array.from(new Set(e)).map(n=>typeof n=="string"&&ql.test(n)?`"${n}"`:`${n}`).join(",");return this.url.searchParams.append(t,`in.(${r})`),this}notIn(t,e){let r=Array.from(new Set(e)).map(n=>typeof n=="string"&&ql.test(n)?`"${n}"`:`${n}`).join(",");return this.url.searchParams.append(t,`not.in.(${r})`),this}contains(t,e){return typeof e=="string"?this.url.searchParams.append(t,`cs.${e}`):Array.isArray(e)?this.url.searchParams.append(t,`cs.{${e.join(",")}}`):this.url.searchParams.append(t,`cs.${JSON.stringify(e)}`),this}containedBy(t,e){return typeof e=="string"?this.url.searchParams.append(t,`cd.${e}`):Array.isArray(e)?this.url.searchParams.append(t,`cd.{${e.join(",")}}`):this.url.searchParams.append(t,`cd.${JSON.stringify(e)}`),this}rangeGt(t,e){return this.url.searchParams.append(t,`sr.${e}`),this}rangeGte(t,e){return this.url.searchParams.append(t,`nxl.${e}`),this}rangeLt(t,e){return this.url.searchParams.append(t,`sl.${e}`),this}rangeLte(t,e){return this.url.searchParams.append(t,`nxr.${e}`),this}rangeAdjacent(t,e){return this.url.searchParams.append(t,`adj.${e}`),this}overlaps(t,e){return typeof e=="string"?this.url.searchParams.append(t,`ov.${e}`):this.url.searchParams.append(t,`ov.{${e.join(",")}}`),this}textSearch(t,e,{config:r,type:n}={}){let s="";n==="plain"?s="pl":n==="phrase"?s="ph":n==="websearch"&&(s="w");let i=r===void 0?"":`(${r})`;return this.url.searchParams.append(t,`${s}fts${i}.${e}`),this}match(t){return Object.entries(t).filter(([e,r])=>r!==void 0).forEach(([e,r])=>{this.url.searchParams.append(e,`eq.${r}`);}),this}not(t,e,r){return this.url.searchParams.append(t,`not.${e}.${r}`),this}or(t,{foreignTable:e,referencedTable:r=e}={}){let n=r?`${r}.or`:"or";return this.url.searchParams.append(n,`(${t})`),this}filter(t,e,r){return this.url.searchParams.append(t,`${e}.${r}`),this}},Fg=class{constructor(t,{headers:e={},schema:r,fetch:n,urlLengthLimit:s=8e3,retry:i}){this.url=t,this.headers=new Headers(e),this.schema=r,this.fetch=n,this.urlLengthLimit=s,this.retry=i;}cloneRequestState(){return {url:new URL(this.url.toString()),headers:new Headers(this.headers)}}select(t,e){let{head:r=false,count:n}=e??{},s=r?"HEAD":"GET",i=false,o=(t??"*").split("").map(c=>/\s/.test(c)&&!i?"":(c==='"'&&(i=!i),c)).join(""),{url:a,headers:l}=this.cloneRequestState();return a.searchParams.set("select",o),n&&l.append("Prefer",`count=${n}`),new qt({method:s,url:a,headers:l,schema:this.schema,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}insert(t,{count:e,defaultToNull:r=true}={}){var n;let s="POST",{url:i,headers:o}=this.cloneRequestState();if(e&&o.append("Prefer",`count=${e}`),r||o.append("Prefer","missing=default"),Array.isArray(t)){let a=t.reduce((l,c)=>l.concat(Object.keys(c)),[]);if(a.length>0){let l=[...new Set(a)].map(c=>`"${c}"`);i.searchParams.set("columns",l.join(","));}}return new qt({method:s,url:i,headers:o,schema:this.schema,body:t,fetch:(n=this.fetch)!==null&&n!==void 0?n:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}upsert(t,{onConflict:e,ignoreDuplicates:r=false,count:n,defaultToNull:s=true}={}){var i;let o="POST",{url:a,headers:l}=this.cloneRequestState();if(l.append("Prefer",`resolution=${r?"ignore":"merge"}-duplicates`),e!==void 0&&a.searchParams.set("on_conflict",e),n&&l.append("Prefer",`count=${n}`),s||l.append("Prefer","missing=default"),Array.isArray(t)){let c=t.reduce((u,d)=>u.concat(Object.keys(d)),[]);if(c.length>0){let u=[...new Set(c)].map(d=>`"${d}"`);a.searchParams.set("columns",u.join(","));}}return new qt({method:o,url:a,headers:l,schema:this.schema,body:t,fetch:(i=this.fetch)!==null&&i!==void 0?i:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}update(t,{count:e}={}){var r;let n="PATCH",{url:s,headers:i}=this.cloneRequestState();return e&&i.append("Prefer",`count=${e}`),new qt({method:n,url:s,headers:i,schema:this.schema,body:t,fetch:(r=this.fetch)!==null&&r!==void 0?r:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}delete({count:t}={}){var e;let r="DELETE",{url:n,headers:s}=this.cloneRequestState();return t&&s.append("Prefer",`count=${t}`),new qt({method:r,url:n,headers:s,schema:this.schema,fetch:(e=this.fetch)!==null&&e!==void 0?e:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}};Vl=class Gl{constructor(e,{headers:r={},schema:n,fetch:s,timeout:i,urlLengthLimit:o=8e3,retry:a}={}){this.url=e,this.headers=new Headers(r),this.schemaName=n,this.urlLengthLimit=o;let l=s??globalThis.fetch;i!==void 0&&i>0?this.fetch=(c,u)=>{let d=new AbortController,p=setTimeout(()=>d.abort(),i),h=u?.signal;if(h){if(h.aborted)return clearTimeout(p),l(c,u);let f=()=>{clearTimeout(p),d.abort();};return h.addEventListener("abort",f,{once:true}),l(c,Dn(Dn({},u),{},{signal:d.signal})).finally(()=>{clearTimeout(p),h.removeEventListener("abort",f);})}return l(c,Dn(Dn({},u),{},{signal:d.signal})).finally(()=>clearTimeout(p))}:this.fetch=l,this.retry=a;}from(e){if(!e||typeof e!="string"||e.trim()==="")throw new Error("Invalid relation name: relation must be a non-empty string.");return new Fg(new URL(`${this.url}/${e}`),{headers:new Headers(this.headers),schema:this.schemaName,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}schema(e){return new Gl(this.url,{headers:this.headers,schema:e,fetch:this.fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}rpc(e,r={},{head:n=false,get:s=false,count:i}={}){var o;let a,l=new URL(`${this.url}/rpc/${e}`),c,u=h=>h!==null&&typeof h=="object"&&(!Array.isArray(h)||h.some(u)),d=n&&Object.values(r).some(u);d?(a="POST",c=r):n||s?(a=n?"HEAD":"GET",Object.entries(r).filter(([h,f])=>f!==void 0).map(([h,f])=>[h,Array.isArray(f)?`{${f.join(",")}}`:`${f}`]).forEach(([h,f])=>{l.searchParams.append(h,f);})):(a="POST",c=r);let p=new Headers(this.headers);return d?p.set("Prefer",i?`count=${i},return=minimal`:"return=minimal"):i&&p.set("Prefer",`count=${i}`),new qt({method:a,url:l,headers:p,schema:this.schemaName,body:c,fetch:(o=this.fetch)!==null&&o!==void 0?o:fetch,urlLengthLimit:this.urlLengthLimit,retry:this.retry})}};});var bi,vi,Si=R(()=>{bi=class{constructor(){}static detectEnvironment(){var e;if(typeof WebSocket<"u")return {type:"native",constructor:WebSocket};if(typeof globalThis<"u"&&typeof globalThis.WebSocket<"u")return {type:"native",constructor:globalThis.WebSocket};if(typeof global<"u"&&typeof global.WebSocket<"u")return {type:"native",constructor:global.WebSocket};if(typeof globalThis<"u"&&typeof globalThis.WebSocketPair<"u"&&typeof globalThis.WebSocket>"u")return {type:"cloudflare",error:"Cloudflare Workers detected. WebSocket clients are not supported in Cloudflare Workers.",workaround:"Use Cloudflare Workers WebSocket API for server-side WebSocket handling, or deploy to a different runtime."};if(typeof globalThis<"u"&&globalThis.EdgeRuntime||typeof navigator<"u"&&(!((e=navigator.userAgent)===null||e===void 0)&&e.includes("Vercel-Edge")))return {type:"unsupported",error:"Edge runtime detected (Vercel Edge/Netlify Edge). WebSockets are not supported in edge functions.",workaround:"Use serverless functions or a different deployment target for WebSocket functionality."};let r=globalThis.process;if(r){let n=r.versions;if(n&&n.node){let s=n.node,i=parseInt(s.replace(/^v/,"").split(".")[0]);return i>=22?typeof globalThis.WebSocket<"u"?{type:"native",constructor:globalThis.WebSocket}:{type:"unsupported",error:`Node.js ${i} detected but native WebSocket not found.`,workaround:"Provide a WebSocket implementation via the transport option."}:{type:"unsupported",error:`Node.js ${i} detected without native WebSocket support.`,workaround:`For Node.js < 22, install "ws" package and provide it via the transport option:
8
8
  import ws from "ws"
9
9
  new RealtimeClient(url, { transport: ws })`}}}return {type:"unsupported",error:"Unknown JavaScript runtime without WebSocket support.",workaround:"Ensure you're running in a supported environment (browser, Node.js, Deno) or provide a custom WebSocket implementation."}}static getWebSocketConstructor(){let e=this.detectEnvironment();if(e.constructor)return e.constructor;let r=e.error||"WebSocket not supported in this environment.";throw e.workaround&&(r+=`
10
10
 
11
- Suggested solution: ${e.workaround}`),new Error(r)}static isWebSocketSupported(){try{let e=this.detectEnvironment();return e.type==="native"||e.type==="ws"}catch{return false}}},ys=ws;});var ql,zl=R(()=>{ql="2.103.2";});var Jl,Kl,bs,Vl,Gl,Yl,ye,$n,Er,Rr=R(()=>{zl();Jl=`realtime-js/${ql}`,Kl="1.0.0",bs="2.0.0",Vl=bs,Gl=1e4,Yl=100,ye={closed:"closed",errored:"errored",joined:"joined",joining:"joining",leaving:"leaving"},$n={close:"phx_close",error:"phx_error",join:"phx_join",reply:"phx_reply",leave:"phx_leave",access_token:"access_token"},Er={connecting:"connecting",open:"open",closing:"closing",closed:"closed"};});var xr,Xl=R(()=>{xr=class{constructor(e){this.HEADER_LENGTH=1,this.USER_BROADCAST_PUSH_META_LENGTH=6,this.KINDS={userBroadcastPush:3,userBroadcast:4},this.BINARY_ENCODING=0,this.JSON_ENCODING=1,this.BROADCAST_EVENT="broadcast",this.allowedMetadataKeys=[],this.allowedMetadataKeys=e??[];}encode(e,r){if(e.event===this.BROADCAST_EVENT&&!(e.payload instanceof ArrayBuffer)&&typeof e.payload.event=="string")return r(this._binaryEncodeUserBroadcastPush(e));let n=[e.join_ref,e.ref,e.topic,e.event,e.payload];return r(JSON.stringify(n))}_binaryEncodeUserBroadcastPush(e){var r;return this._isArrayBuffer((r=e.payload)===null||r===void 0?void 0:r.payload)?this._encodeBinaryUserBroadcastPush(e):this._encodeJsonUserBroadcastPush(e)}_encodeBinaryUserBroadcastPush(e){var r,n;let i=(n=(r=e.payload)===null||r===void 0?void 0:r.payload)!==null&&n!==void 0?n:new ArrayBuffer(0);return this._encodeUserBroadcastPush(e,this.BINARY_ENCODING,i)}_encodeJsonUserBroadcastPush(e){var r,n;let i=(n=(r=e.payload)===null||r===void 0?void 0:r.payload)!==null&&n!==void 0?n:{},o=new TextEncoder().encode(JSON.stringify(i)).buffer;return this._encodeUserBroadcastPush(e,this.JSON_ENCODING,o)}_encodeUserBroadcastPush(e,r,n){var i,s;let o=e.topic,a=(i=e.ref)!==null&&i!==void 0?i:"",l=(s=e.join_ref)!==null&&s!==void 0?s:"",c=e.payload.event,u=this.allowedMetadataKeys?this._pick(e.payload,this.allowedMetadataKeys):{},d=Object.keys(u).length===0?"":JSON.stringify(u);if(l.length>255)throw new Error(`joinRef length ${l.length} exceeds maximum of 255`);if(a.length>255)throw new Error(`ref length ${a.length} exceeds maximum of 255`);if(o.length>255)throw new Error(`topic length ${o.length} exceeds maximum of 255`);if(c.length>255)throw new Error(`userEvent length ${c.length} exceeds maximum of 255`);if(d.length>255)throw new Error(`metadata length ${d.length} exceeds maximum of 255`);let p=this.USER_BROADCAST_PUSH_META_LENGTH+l.length+a.length+o.length+c.length+d.length,f=new ArrayBuffer(this.HEADER_LENGTH+p),h=new DataView(f),m=0;h.setUint8(m++,this.KINDS.userBroadcastPush),h.setUint8(m++,l.length),h.setUint8(m++,a.length),h.setUint8(m++,o.length),h.setUint8(m++,c.length),h.setUint8(m++,d.length),h.setUint8(m++,r),Array.from(l,b=>h.setUint8(m++,b.charCodeAt(0))),Array.from(a,b=>h.setUint8(m++,b.charCodeAt(0))),Array.from(o,b=>h.setUint8(m++,b.charCodeAt(0))),Array.from(c,b=>h.setUint8(m++,b.charCodeAt(0))),Array.from(d,b=>h.setUint8(m++,b.charCodeAt(0)));var _=new Uint8Array(f.byteLength+n.byteLength);return _.set(new Uint8Array(f),0),_.set(new Uint8Array(n),f.byteLength),_.buffer}decode(e,r){if(this._isArrayBuffer(e)){let n=this._binaryDecode(e);return r(n)}if(typeof e=="string"){let n=JSON.parse(e),[i,s,o,a,l]=n;return r({join_ref:i,ref:s,topic:o,event:a,payload:l})}return r({})}_binaryDecode(e){let r=new DataView(e),n=r.getUint8(0),i=new TextDecoder;if(n===this.KINDS.userBroadcast)return this._decodeUserBroadcast(e,r,i)}_decodeUserBroadcast(e,r,n){let i=r.getUint8(1),s=r.getUint8(2),o=r.getUint8(3),a=r.getUint8(4),l=this.HEADER_LENGTH+4,c=n.decode(e.slice(l,l+i));l=l+i;let u=n.decode(e.slice(l,l+s));l=l+s;let d=n.decode(e.slice(l,l+o));l=l+o;let p=e.slice(l,e.byteLength),f=a===this.JSON_ENCODING?JSON.parse(n.decode(p)):p,h={type:this.BROADCAST_EVENT,event:u,payload:f};return o>0&&(h.meta=JSON.parse(d)),{join_ref:null,ref:null,topic:c,event:this.BROADCAST_EVENT,payload:h}}_isArrayBuffer(e){var r;return e instanceof ArrayBuffer||((r=e?.constructor)===null||r===void 0?void 0:r.name)==="ArrayBuffer"}_pick(e,r){return !e||typeof e!="object"?{}:Object.fromEntries(Object.entries(e).filter(([n])=>r.includes(n)))}};});var N,Ss,Ig,Zl,vs,Og,$g,Ng,Dg,jg,Nn,Dn=R(()=>{(function(t){t.abstime="abstime",t.bool="bool",t.date="date",t.daterange="daterange",t.float4="float4",t.float8="float8",t.int2="int2",t.int4="int4",t.int4range="int4range",t.int8="int8",t.int8range="int8range",t.json="json",t.jsonb="jsonb",t.money="money",t.numeric="numeric",t.oid="oid",t.reltime="reltime",t.text="text",t.time="time",t.timestamp="timestamp",t.timestamptz="timestamptz",t.timetz="timetz",t.tsrange="tsrange",t.tstzrange="tstzrange";})(N||(N={}));Ss=(t,e,r={})=>{var n;let i=(n=r.skipTypes)!==null&&n!==void 0?n:[];return e?Object.keys(e).reduce((s,o)=>(s[o]=Ig(o,t,e,i),s),{}):{}},Ig=(t,e,r,n)=>{let i=e.find(a=>a.name===t),s=i?.type,o=r[t];return s&&!n.includes(s)?Zl(s,o):vs(o)},Zl=(t,e)=>{if(t.charAt(0)==="_"){let r=t.slice(1,t.length);return Dg(e,r)}switch(t){case N.bool:return Og(e);case N.float4:case N.float8:case N.int2:case N.int4:case N.int8:case N.numeric:case N.oid:return $g(e);case N.json:case N.jsonb:return Ng(e);case N.timestamp:return jg(e);case N.abstime:case N.date:case N.daterange:case N.int4range:case N.int8range:case N.money:case N.reltime:case N.text:case N.time:case N.timestamptz:case N.timetz:case N.tsrange:case N.tstzrange:return vs(e);default:return vs(e)}},vs=t=>t,Og=t=>{switch(t){case "t":return true;case "f":return false;default:return t}},$g=t=>{if(typeof t=="string"){let e=parseFloat(t);if(!Number.isNaN(e))return e}return t},Ng=t=>{if(typeof t=="string")try{return JSON.parse(t)}catch{return t}return t},Dg=(t,e)=>{if(typeof t!="string")return t;let r=t.length-1,n=t[r];if(t[0]==="{"&&n==="}"){let s,o=t.slice(1,r);try{s=JSON.parse("["+o+"]");}catch{s=o?o.split(","):[];}return s.map(a=>Zl(e,a))}return t},jg=t=>typeof t=="string"?t.replace(" ","T"):t,Nn=t=>{let e=new URL(t);return e.protocol=e.protocol.replace(/^ws/i,"http"),e.pathname=e.pathname.replace(/\/+$/,"").replace(/\/socket\/websocket$/i,"").replace(/\/socket$/i,"").replace(/\/websocket$/i,""),e.pathname===""||e.pathname==="/"?e.pathname="/api/broadcast":e.pathname=e.pathname+"/api/broadcast",e.href};});var Tr,Lg,zt,ke,Ug,Wg,Bg,be,Q,$e,Cs,Fg,Es,jn,Ql,Hg,Ln,qg,qt,ec,Mn,tc,Rs=R(()=>{Tr=t=>typeof t=="function"?t:function(){return t},Lg=typeof self<"u"?self:null,zt=typeof window<"u"?window:null,ke=Lg||zt||globalThis,Ug="2.0.0",Wg=1e4,Bg=1e3,be={connecting:0,open:1,closing:2,closed:3},Q={closed:"closed",errored:"errored",joined:"joined",joining:"joining",leaving:"leaving"},$e={close:"phx_close",error:"phx_error",join:"phx_join",reply:"phx_reply",leave:"phx_leave"},Cs={longpoll:"longpoll",websocket:"websocket"},Fg={complete:4},Es="base64url.bearer.phx.",jn=class{constructor(t,e,r,n){this.channel=t,this.event=e,this.payload=r||function(){return {}},this.receivedResp=null,this.timeout=n,this.timeoutTimer=null,this.recHooks=[],this.sent=false,this.ref=void 0;}resend(t){this.timeout=t,this.reset(),this.send();}send(){this.hasReceived("timeout")||(this.startTimeout(),this.sent=true,this.channel.socket.push({topic:this.channel.topic,event:this.event,payload:this.payload(),ref:this.ref,join_ref:this.channel.joinRef()}));}receive(t,e){return this.hasReceived(t)&&e(this.receivedResp.response),this.recHooks.push({status:t,callback:e}),this}reset(){this.cancelRefEvent(),this.ref=null,this.refEvent=null,this.receivedResp=null,this.sent=false;}destroy(){this.cancelRefEvent(),this.cancelTimeout();}matchReceive({status:t,response:e,_ref:r}){this.recHooks.filter(n=>n.status===t).forEach(n=>n.callback(e));}cancelRefEvent(){this.refEvent&&this.channel.off(this.refEvent);}cancelTimeout(){clearTimeout(this.timeoutTimer),this.timeoutTimer=null;}startTimeout(){this.timeoutTimer&&this.cancelTimeout(),this.ref=this.channel.socket.makeRef(),this.refEvent=this.channel.replyEventName(this.ref),this.channel.on(this.refEvent,t=>{this.cancelRefEvent(),this.cancelTimeout(),this.receivedResp=t,this.matchReceive(t);}),this.timeoutTimer=setTimeout(()=>{this.trigger("timeout",{});},this.timeout);}hasReceived(t){return this.receivedResp&&this.receivedResp.status===t}trigger(t,e){this.channel.trigger(this.refEvent,{status:t,response:e});}},Ql=class{constructor(t,e){this.callback=t,this.timerCalc=e,this.timer=void 0,this.tries=0;}reset(){this.tries=0,clearTimeout(this.timer);}scheduleTimeout(){clearTimeout(this.timer),this.timer=setTimeout(()=>{this.tries=this.tries+1,this.callback();},this.timerCalc(this.tries+1));}},Hg=class{constructor(t,e,r){this.state=Q.closed,this.topic=t,this.params=Tr(e||{}),this.socket=r,this.bindings=[],this.bindingRef=0,this.timeout=this.socket.timeout,this.joinedOnce=false,this.joinPush=new jn(this,$e.join,this.params,this.timeout),this.pushBuffer=[],this.stateChangeRefs=[],this.rejoinTimer=new Ql(()=>{this.socket.isConnected()&&this.rejoin();},this.socket.rejoinAfterMs),this.stateChangeRefs.push(this.socket.onError(()=>this.rejoinTimer.reset())),this.stateChangeRefs.push(this.socket.onOpen(()=>{this.rejoinTimer.reset(),this.isErrored()&&this.rejoin();})),this.joinPush.receive("ok",()=>{this.state=Q.joined,this.rejoinTimer.reset(),this.pushBuffer.forEach(n=>n.send()),this.pushBuffer=[];}),this.joinPush.receive("error",n=>{this.state=Q.errored,this.socket.hasLogger()&&this.socket.log("channel",`error ${this.topic}`,n),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout();}),this.onClose(()=>{this.rejoinTimer.reset(),this.socket.hasLogger()&&this.socket.log("channel",`close ${this.topic}`),this.state=Q.closed,this.socket.remove(this);}),this.onError(n=>{this.socket.hasLogger()&&this.socket.log("channel",`error ${this.topic}`,n),this.isJoining()&&this.joinPush.reset(),this.state=Q.errored,this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout();}),this.joinPush.receive("timeout",()=>{this.socket.hasLogger()&&this.socket.log("channel",`timeout ${this.topic}`,this.joinPush.timeout),new jn(this,$e.leave,Tr({}),this.timeout).send(),this.state=Q.errored,this.joinPush.reset(),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout();}),this.on($e.reply,(n,i)=>{this.trigger(this.replyEventName(i),n);});}join(t=this.timeout){if(this.joinedOnce)throw new Error("tried to join multiple times. 'join' can only be called a single time per channel instance");return this.timeout=t,this.joinedOnce=true,this.rejoin(),this.joinPush}teardown(){this.pushBuffer.forEach(t=>t.destroy()),this.pushBuffer=[],this.rejoinTimer.reset(),this.joinPush.destroy(),this.state=Q.closed,this.bindings=[];}onClose(t){this.on($e.close,t);}onError(t){return this.on($e.error,e=>t(e))}on(t,e){let r=this.bindingRef++;return this.bindings.push({event:t,ref:r,callback:e}),r}off(t,e){this.bindings=this.bindings.filter(r=>!(r.event===t&&(typeof e>"u"||e===r.ref)));}canPush(){return this.socket.isConnected()&&this.isJoined()}push(t,e,r=this.timeout){if(e=e||{},!this.joinedOnce)throw new Error(`tried to push '${t}' to '${this.topic}' before joining. Use channel.join() before pushing events`);let n=new jn(this,t,function(){return e},r);return this.canPush()?n.send():(n.startTimeout(),this.pushBuffer.push(n)),n}leave(t=this.timeout){this.rejoinTimer.reset(),this.joinPush.cancelTimeout(),this.state=Q.leaving;let e=()=>{this.socket.hasLogger()&&this.socket.log("channel",`leave ${this.topic}`),this.trigger($e.close,"leave");},r=new jn(this,$e.leave,Tr({}),t);return r.receive("ok",()=>e()).receive("timeout",()=>e()),r.send(),this.canPush()||r.trigger("ok",{}),r}onMessage(t,e,r){return e}filterBindings(t,e,r){return true}isMember(t,e,r,n){return this.topic!==t?false:n&&n!==this.joinRef()?(this.socket.hasLogger()&&this.socket.log("channel","dropping outdated message",{topic:t,event:e,payload:r,joinRef:n}),false):true}joinRef(){return this.joinPush.ref}rejoin(t=this.timeout){this.isLeaving()||(this.socket.leaveOpenTopic(this.topic),this.state=Q.joining,this.joinPush.resend(t));}trigger(t,e,r,n){let i=this.onMessage(t,e,r,n);if(e&&!i)throw new Error("channel onMessage callbacks must return the payload, modified or unmodified");let s=this.bindings.filter(o=>o.event===t&&this.filterBindings(o,e,r));for(let o=0;o<s.length;o++)s[o].callback(i,r,n||this.joinRef());}replyEventName(t){return `chan_reply_${t}`}isClosed(){return this.state===Q.closed}isErrored(){return this.state===Q.errored}isJoined(){return this.state===Q.joined}isJoining(){return this.state===Q.joining}isLeaving(){return this.state===Q.leaving}},Ln=class{static request(t,e,r,n,i,s,o){if(ke.XDomainRequest){let a=new ke.XDomainRequest;return this.xdomainRequest(a,t,e,n,i,s,o)}else if(ke.XMLHttpRequest){let a=new ke.XMLHttpRequest;return this.xhrRequest(a,t,e,r,n,i,s,o)}else {if(ke.fetch&&ke.AbortController)return this.fetchRequest(t,e,r,n,i,s,o);throw new Error("No suitable XMLHttpRequest implementation found")}}static fetchRequest(t,e,r,n,i,s,o){let a={method:t,headers:r,body:n},l=null;if(i){l=new AbortController;setTimeout(()=>l.abort(),i);a.signal=l.signal;}return ke.fetch(e,a).then(c=>c.text()).then(c=>this.parseJSON(c)).then(c=>o&&o(c)).catch(c=>{c.name==="AbortError"&&s?s():o&&o(null);}),l}static xdomainRequest(t,e,r,n,i,s,o){return t.timeout=i,t.open(e,r),t.onload=()=>{let a=this.parseJSON(t.responseText);o&&o(a);},s&&(t.ontimeout=s),t.onprogress=()=>{},t.send(n),t}static xhrRequest(t,e,r,n,i,s,o,a){t.open(e,r,true),t.timeout=s;for(let[l,c]of Object.entries(n))t.setRequestHeader(l,c);return t.onerror=()=>a&&a(null),t.onreadystatechange=()=>{if(t.readyState===Fg.complete&&a){let l=this.parseJSON(t.responseText);a(l);}},o&&(t.ontimeout=o),t.send(i),t}static parseJSON(t){if(!t||t==="")return null;try{return JSON.parse(t)}catch{return console&&console.log("failed to parse JSON response",t),null}}static serialize(t,e){let r=[];for(var n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;let i=e?`${e}[${n}]`:n,s=t[n];typeof s=="object"?r.push(this.serialize(s,i)):r.push(encodeURIComponent(i)+"="+encodeURIComponent(s));}return r.join("&")}static appendParams(t,e){if(Object.keys(e).length===0)return t;let r=t.match(/\?/)?"&":"?";return `${t}${r}${this.serialize(e)}`}},qg=t=>{let e="",r=new Uint8Array(t),n=r.byteLength;for(let i=0;i<n;i++)e+=String.fromCharCode(r[i]);return btoa(e)},qt=class{constructor(t,e){e&&e.length===2&&e[1].startsWith(Es)&&(this.authToken=atob(e[1].slice(Es.length))),this.endPoint=null,this.token=null,this.skipHeartbeat=true,this.reqs=new Set,this.awaitingBatchAck=false,this.currentBatch=null,this.currentBatchTimer=null,this.batchBuffer=[],this.onopen=function(){},this.onerror=function(){},this.onmessage=function(){},this.onclose=function(){},this.pollEndpoint=this.normalizeEndpoint(t),this.readyState=be.connecting,setTimeout(()=>this.poll(),0);}normalizeEndpoint(t){return t.replace("ws://","http://").replace("wss://","https://").replace(new RegExp("(.*)/"+Cs.websocket),"$1/"+Cs.longpoll)}endpointURL(){return Ln.appendParams(this.pollEndpoint,{token:this.token})}closeAndRetry(t,e,r){this.close(t,e,r),this.readyState=be.connecting;}ontimeout(){this.onerror("timeout"),this.closeAndRetry(1005,"timeout",false);}isActive(){return this.readyState===be.open||this.readyState===be.connecting}poll(){let t={Accept:"application/json"};this.authToken&&(t["X-Phoenix-AuthToken"]=this.authToken),this.ajax("GET",t,null,()=>this.ontimeout(),e=>{if(e){var{status:r,token:n,messages:i}=e;if(r===410&&this.token!==null){this.onerror(410),this.closeAndRetry(3410,"session_gone",false);return}this.token=n;}else r=0;switch(r){case 200:i.forEach(s=>{setTimeout(()=>this.onmessage({data:s}),0);}),this.poll();break;case 204:this.poll();break;case 410:this.readyState=be.open,this.onopen({}),this.poll();break;case 403:this.onerror(403),this.close(1008,"forbidden",false);break;case 0:case 500:this.onerror(500),this.closeAndRetry(1011,"internal server error",500);break;default:throw new Error(`unhandled poll status ${r}`)}});}send(t){typeof t!="string"&&(t=qg(t)),this.currentBatch?this.currentBatch.push(t):this.awaitingBatchAck?this.batchBuffer.push(t):(this.currentBatch=[t],this.currentBatchTimer=setTimeout(()=>{this.batchSend(this.currentBatch),this.currentBatch=null;},0));}batchSend(t){this.awaitingBatchAck=true,this.ajax("POST",{"Content-Type":"application/x-ndjson"},t.join(`
12
- `),()=>this.onerror("timeout"),e=>{this.awaitingBatchAck=false,!e||e.status!==200?(this.onerror(e&&e.status),this.closeAndRetry(1011,"internal server error",false)):this.batchBuffer.length>0&&(this.batchSend(this.batchBuffer),this.batchBuffer=[]);});}close(t,e,r){for(let i of this.reqs)i.abort();this.readyState=be.closed;let n=Object.assign({code:1e3,reason:void 0,wasClean:true},{code:t,reason:e,wasClean:r});this.batchBuffer=[],clearTimeout(this.currentBatchTimer),this.currentBatchTimer=null,typeof CloseEvent<"u"?this.onclose(new CloseEvent("close",n)):this.onclose(n);}ajax(t,e,r,n,i){let s,o=()=>{this.reqs.delete(s),n();};s=Ln.request(t,this.endpointURL(),e,r,this.timeout,o,a=>{this.reqs.delete(s),this.isActive()&&i(a);}),this.reqs.add(s);}},ec=class Pr{constructor(e,r={}){let n=r.events||{state:"presence_state",diff:"presence_diff"};this.state={},this.pendingDiffs=[],this.channel=e,this.joinRef=null,this.caller={onJoin:function(){},onLeave:function(){},onSync:function(){}},this.channel.on(n.state,i=>{let{onJoin:s,onLeave:o,onSync:a}=this.caller;this.joinRef=this.channel.joinRef(),this.state=Pr.syncState(this.state,i,s,o),this.pendingDiffs.forEach(l=>{this.state=Pr.syncDiff(this.state,l,s,o);}),this.pendingDiffs=[],a();}),this.channel.on(n.diff,i=>{let{onJoin:s,onLeave:o,onSync:a}=this.caller;this.inPendingSyncState()?this.pendingDiffs.push(i):(this.state=Pr.syncDiff(this.state,i,s,o),a());});}onJoin(e){this.caller.onJoin=e;}onLeave(e){this.caller.onLeave=e;}onSync(e){this.caller.onSync=e;}list(e){return Pr.list(this.state,e)}inPendingSyncState(){return !this.joinRef||this.joinRef!==this.channel.joinRef()}static syncState(e,r,n,i){let s=this.clone(e),o={},a={};return this.map(s,(l,c)=>{r[l]||(a[l]=c);}),this.map(r,(l,c)=>{let u=s[l];if(u){let d=c.metas.map(m=>m.phx_ref),p=u.metas.map(m=>m.phx_ref),f=c.metas.filter(m=>p.indexOf(m.phx_ref)<0),h=u.metas.filter(m=>d.indexOf(m.phx_ref)<0);f.length>0&&(o[l]=c,o[l].metas=f),h.length>0&&(a[l]=this.clone(u),a[l].metas=h);}else o[l]=c;}),this.syncDiff(s,{joins:o,leaves:a},n,i)}static syncDiff(e,r,n,i){let{joins:s,leaves:o}=this.clone(r);return n||(n=function(){}),i||(i=function(){}),this.map(s,(a,l)=>{let c=e[a];if(e[a]=this.clone(l),c){let u=e[a].metas.map(p=>p.phx_ref),d=c.metas.filter(p=>u.indexOf(p.phx_ref)<0);e[a].metas.unshift(...d);}n(a,c,l);}),this.map(o,(a,l)=>{let c=e[a];if(!c)return;let u=l.metas.map(d=>d.phx_ref);c.metas=c.metas.filter(d=>u.indexOf(d.phx_ref)<0),i(a,c,l),c.metas.length===0&&delete e[a];}),e}static list(e,r){return r||(r=function(n,i){return i}),this.map(e,(n,i)=>r(n,i))}static map(e,r){return Object.getOwnPropertyNames(e).map(n=>r(n,e[n]))}static clone(e){return JSON.parse(JSON.stringify(e))}},Mn={HEADER_LENGTH:1,META_LENGTH:4,KINDS:{push:0,reply:1,broadcast:2},encode(t,e){if(t.payload.constructor===ArrayBuffer)return e(this.binaryEncode(t));{let r=[t.join_ref,t.ref,t.topic,t.event,t.payload];return e(JSON.stringify(r))}},decode(t,e){if(t.constructor===ArrayBuffer)return e(this.binaryDecode(t));{let[r,n,i,s,o]=JSON.parse(t);return e({join_ref:r,ref:n,topic:i,event:s,payload:o})}},binaryEncode(t){let{join_ref:e,ref:r,event:n,topic:i,payload:s}=t,o=this.META_LENGTH+e.length+r.length+i.length+n.length,a=new ArrayBuffer(this.HEADER_LENGTH+o),l=new DataView(a),c=0;l.setUint8(c++,this.KINDS.push),l.setUint8(c++,e.length),l.setUint8(c++,r.length),l.setUint8(c++,i.length),l.setUint8(c++,n.length),Array.from(e,d=>l.setUint8(c++,d.charCodeAt(0))),Array.from(r,d=>l.setUint8(c++,d.charCodeAt(0))),Array.from(i,d=>l.setUint8(c++,d.charCodeAt(0))),Array.from(n,d=>l.setUint8(c++,d.charCodeAt(0)));var u=new Uint8Array(a.byteLength+s.byteLength);return u.set(new Uint8Array(a),0),u.set(new Uint8Array(s),a.byteLength),u.buffer},binaryDecode(t){let e=new DataView(t),r=e.getUint8(0),n=new TextDecoder;switch(r){case this.KINDS.push:return this.decodePush(t,e,n);case this.KINDS.reply:return this.decodeReply(t,e,n);case this.KINDS.broadcast:return this.decodeBroadcast(t,e,n)}},decodePush(t,e,r){let n=e.getUint8(1),i=e.getUint8(2),s=e.getUint8(3),o=this.HEADER_LENGTH+this.META_LENGTH-1,a=r.decode(t.slice(o,o+n));o=o+n;let l=r.decode(t.slice(o,o+i));o=o+i;let c=r.decode(t.slice(o,o+s));o=o+s;let u=t.slice(o,t.byteLength);return {join_ref:a,ref:null,topic:l,event:c,payload:u}},decodeReply(t,e,r){let n=e.getUint8(1),i=e.getUint8(2),s=e.getUint8(3),o=e.getUint8(4),a=this.HEADER_LENGTH+this.META_LENGTH,l=r.decode(t.slice(a,a+n));a=a+n;let c=r.decode(t.slice(a,a+i));a=a+i;let u=r.decode(t.slice(a,a+s));a=a+s;let d=r.decode(t.slice(a,a+o));a=a+o;let p=t.slice(a,t.byteLength),f={status:d,response:p};return {join_ref:l,ref:c,topic:u,event:$e.reply,payload:f}},decodeBroadcast(t,e,r){let n=e.getUint8(1),i=e.getUint8(2),s=this.HEADER_LENGTH+2,o=r.decode(t.slice(s,s+n));s=s+n;let a=r.decode(t.slice(s,s+i));s=s+i;let l=t.slice(s,t.byteLength);return {join_ref:null,ref:null,topic:o,event:a,payload:l}}},tc=class{constructor(t,e={}){this.stateChangeCallbacks={open:[],close:[],error:[],message:[]},this.channels=[],this.sendBuffer=[],this.ref=0,this.fallbackRef=null,this.timeout=e.timeout||Wg,this.transport=e.transport||ke.WebSocket||qt,this.conn=void 0,this.primaryPassedHealthCheck=false,this.longPollFallbackMs=e.longPollFallbackMs,this.fallbackTimer=null,this.sessionStore=e.sessionStorage||ke&&ke.sessionStorage,this.establishedConnections=0,this.defaultEncoder=Mn.encode.bind(Mn),this.defaultDecoder=Mn.decode.bind(Mn),this.closeWasClean=true,this.disconnecting=false,this.binaryType=e.binaryType||"arraybuffer",this.connectClock=1,this.pageHidden=false,this.encode=void 0,this.decode=void 0,this.transport!==qt?(this.encode=e.encode||this.defaultEncoder,this.decode=e.decode||this.defaultDecoder):(this.encode=this.defaultEncoder,this.decode=this.defaultDecoder);let r=null;zt&&zt.addEventListener&&(zt.addEventListener("pagehide",n=>{this.conn&&(this.disconnect(),r=this.connectClock);}),zt.addEventListener("pageshow",n=>{r===this.connectClock&&(r=null,this.connect());}),zt.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"?this.pageHidden=true:(this.pageHidden=false,!this.isConnected()&&!this.closeWasClean&&this.teardown(()=>this.connect()));})),this.heartbeatIntervalMs=e.heartbeatIntervalMs||3e4,this.autoSendHeartbeat=e.autoSendHeartbeat??true,this.heartbeatCallback=e.heartbeatCallback??(()=>{}),this.rejoinAfterMs=n=>e.rejoinAfterMs?e.rejoinAfterMs(n):[1e3,2e3,5e3][n-1]||1e4,this.reconnectAfterMs=n=>e.reconnectAfterMs?e.reconnectAfterMs(n):[10,50,100,150,200,250,500,1e3,2e3][n-1]||5e3,this.logger=e.logger||null,!this.logger&&e.debug&&(this.logger=(n,i,s)=>{console.log(`${n}: ${i}`,s);}),this.longpollerTimeout=e.longpollerTimeout||2e4,this.params=Tr(e.params||{}),this.endPoint=`${t}/${Cs.websocket}`,this.vsn=e.vsn||Ug,this.heartbeatTimeoutTimer=null,this.heartbeatTimer=null,this.heartbeatSentAt=null,this.pendingHeartbeatRef=null,this.reconnectTimer=new Ql(()=>{if(this.pageHidden){this.log("Not reconnecting as page is hidden!"),this.teardown();return}this.teardown(async()=>{e.beforeReconnect&&await e.beforeReconnect(),this.connect();});},this.reconnectAfterMs),this.authToken=e.authToken;}getLongPollTransport(){return qt}replaceTransport(t){this.connectClock++,this.closeWasClean=true,clearTimeout(this.fallbackTimer),this.reconnectTimer.reset(),this.conn&&(this.conn.close(),this.conn=null),this.transport=t;}protocol(){return location.protocol.match(/^https/)?"wss":"ws"}endPointURL(){let t=Ln.appendParams(Ln.appendParams(this.endPoint,this.params()),{vsn:this.vsn});return t.charAt(0)!=="/"?t:t.charAt(1)==="/"?`${this.protocol()}:${t}`:`${this.protocol()}://${location.host}${t}`}disconnect(t,e,r){this.connectClock++,this.disconnecting=true,this.closeWasClean=true,clearTimeout(this.fallbackTimer),this.reconnectTimer.reset(),this.teardown(()=>{this.disconnecting=false,t&&t();},e,r);}connect(t){t&&(console&&console.log("passing params to connect is deprecated. Instead pass :params to the Socket constructor"),this.params=Tr(t)),!(this.conn&&!this.disconnecting)&&(this.longPollFallbackMs&&this.transport!==qt?this.connectWithFallback(qt,this.longPollFallbackMs):this.transportConnect());}log(t,e,r){this.logger&&this.logger(t,e,r);}hasLogger(){return this.logger!==null}onOpen(t){let e=this.makeRef();return this.stateChangeCallbacks.open.push([e,t]),e}onClose(t){let e=this.makeRef();return this.stateChangeCallbacks.close.push([e,t]),e}onError(t){let e=this.makeRef();return this.stateChangeCallbacks.error.push([e,t]),e}onMessage(t){let e=this.makeRef();return this.stateChangeCallbacks.message.push([e,t]),e}onHeartbeat(t){this.heartbeatCallback=t;}ping(t){if(!this.isConnected())return false;let e=this.makeRef(),r=Date.now();this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:e});let n=this.onMessage(i=>{i.ref===e&&(this.off([n]),t(Date.now()-r));});return true}transportName(t){return t===qt?"LongPoll":t.name}transportConnect(){this.connectClock++,this.closeWasClean=false;let t;this.authToken&&(t=["phoenix",`${Es}${btoa(this.authToken).replace(/=/g,"")}`]),this.conn=new this.transport(this.endPointURL(),t),this.conn.binaryType=this.binaryType,this.conn.timeout=this.longpollerTimeout,this.conn.onopen=()=>this.onConnOpen(),this.conn.onerror=e=>this.onConnError(e),this.conn.onmessage=e=>this.onConnMessage(e),this.conn.onclose=e=>this.onConnClose(e);}getSession(t){return this.sessionStore&&this.sessionStore.getItem(t)}storeSession(t,e){this.sessionStore&&this.sessionStore.setItem(t,e);}connectWithFallback(t,e=2500){clearTimeout(this.fallbackTimer);let r=false,n=true,i,s,o=this.transportName(t),a=l=>{this.log("transport",`falling back to ${o}...`,l),this.off([i,s]),n=false,this.replaceTransport(t),this.transportConnect();};if(this.getSession(`phx:fallback:${o}`))return a("memorized");this.fallbackTimer=setTimeout(a,e),s=this.onError(l=>{this.log("transport","error",l),n&&!r&&(clearTimeout(this.fallbackTimer),a(l));}),this.fallbackRef&&this.off([this.fallbackRef]),this.fallbackRef=this.onOpen(()=>{if(r=true,!n){let l=this.transportName(t);return this.primaryPassedHealthCheck||this.storeSession(`phx:fallback:${l}`,"true"),this.log("transport",`established ${l} fallback`)}clearTimeout(this.fallbackTimer),this.fallbackTimer=setTimeout(a,e),this.ping(l=>{this.log("transport","connected to primary after",l),this.primaryPassedHealthCheck=true,clearTimeout(this.fallbackTimer);});}),this.transportConnect();}clearHeartbeats(){clearTimeout(this.heartbeatTimer),clearTimeout(this.heartbeatTimeoutTimer);}onConnOpen(){this.hasLogger()&&this.log("transport",`connected to ${this.endPointURL()}`),this.closeWasClean=false,this.disconnecting=false,this.establishedConnections++,this.flushSendBuffer(),this.reconnectTimer.reset(),this.autoSendHeartbeat&&this.resetHeartbeat(),this.triggerStateCallbacks("open");}heartbeatTimeout(){if(this.pendingHeartbeatRef){this.pendingHeartbeatRef=null,this.heartbeatSentAt=null,this.hasLogger()&&this.log("transport","heartbeat timeout. Attempting to re-establish connection");try{this.heartbeatCallback("timeout");}catch(t){this.log("error","error in heartbeat callback",t);}this.triggerChanError(),this.closeWasClean=false,this.teardown(()=>this.reconnectTimer.scheduleTimeout(),Bg,"heartbeat timeout");}}resetHeartbeat(){this.conn&&this.conn.skipHeartbeat||(this.pendingHeartbeatRef=null,this.clearHeartbeats(),this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs));}teardown(t,e,r){if(!this.conn)return t&&t();let n=this.conn;this.waitForBufferDone(n,()=>{e?n.close(e,r||""):n.close(),this.waitForSocketClosed(n,()=>{this.conn===n&&(this.conn.onopen=function(){},this.conn.onerror=function(){},this.conn.onmessage=function(){},this.conn.onclose=function(){},this.conn=null),t&&t();});});}waitForBufferDone(t,e,r=1){if(r===5||!t.bufferedAmount){e();return}setTimeout(()=>{this.waitForBufferDone(t,e,r+1);},150*r);}waitForSocketClosed(t,e,r=1){if(r===5||t.readyState===be.closed){e();return}setTimeout(()=>{this.waitForSocketClosed(t,e,r+1);},150*r);}onConnClose(t){this.conn&&(this.conn.onclose=()=>{}),this.hasLogger()&&this.log("transport","close",t),this.triggerChanError(),this.clearHeartbeats(),this.closeWasClean||this.reconnectTimer.scheduleTimeout(),this.triggerStateCallbacks("close",t);}onConnError(t){this.hasLogger()&&this.log("transport",t);let e=this.transport,r=this.establishedConnections;this.triggerStateCallbacks("error",t,e,r),(e===this.transport||r>0)&&this.triggerChanError();}triggerChanError(){this.channels.forEach(t=>{t.isErrored()||t.isLeaving()||t.isClosed()||t.trigger($e.error);});}connectionState(){switch(this.conn&&this.conn.readyState){case be.connecting:return "connecting";case be.open:return "open";case be.closing:return "closing";default:return "closed"}}isConnected(){return this.connectionState()==="open"}remove(t){this.off(t.stateChangeRefs),this.channels=this.channels.filter(e=>e!==t);}off(t){for(let e in this.stateChangeCallbacks)this.stateChangeCallbacks[e]=this.stateChangeCallbacks[e].filter(([r])=>t.indexOf(r)===-1);}channel(t,e={}){let r=new Hg(t,e,this);return this.channels.push(r),r}push(t){if(this.hasLogger()){let{topic:e,event:r,payload:n,ref:i,join_ref:s}=t;this.log("push",`${e} ${r} (${s}, ${i})`,n);}this.isConnected()?this.encode(t,e=>this.conn.send(e)):this.sendBuffer.push(()=>this.encode(t,e=>this.conn.send(e)));}makeRef(){let t=this.ref+1;return t===this.ref?this.ref=0:this.ref=t,this.ref.toString()}sendHeartbeat(){if(!this.isConnected()){try{this.heartbeatCallback("disconnected");}catch(t){this.log("error","error in heartbeat callback",t);}return}if(this.pendingHeartbeatRef){this.heartbeatTimeout();return}this.pendingHeartbeatRef=this.makeRef(),this.heartbeatSentAt=Date.now(),this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:this.pendingHeartbeatRef});try{this.heartbeatCallback("sent");}catch(t){this.log("error","error in heartbeat callback",t);}this.heartbeatTimeoutTimer=setTimeout(()=>this.heartbeatTimeout(),this.heartbeatIntervalMs);}flushSendBuffer(){this.isConnected()&&this.sendBuffer.length>0&&(this.sendBuffer.forEach(t=>t()),this.sendBuffer=[]);}onConnMessage(t){this.decode(t.data,e=>{let{topic:r,event:n,payload:i,ref:s,join_ref:o}=e;if(s&&s===this.pendingHeartbeatRef){let a=this.heartbeatSentAt?Date.now()-this.heartbeatSentAt:void 0;this.clearHeartbeats();try{this.heartbeatCallback(i.status==="ok"?"ok":"error",a);}catch(l){this.log("error","error in heartbeat callback",l);}this.pendingHeartbeatRef=null,this.heartbeatSentAt=null,this.autoSendHeartbeat&&(this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs));}this.hasLogger()&&this.log("receive",`${i.status||""} ${r} ${n} ${s&&"("+s+")"||""}`.trim(),i);for(let a=0;a<this.channels.length;a++){let l=this.channels[a];l.isMember(r,n,i,o)&&l.trigger(n,i,s,o);}this.triggerStateCallbacks("message",e);});}triggerStateCallbacks(t,...e){try{this.stateChangeCallbacks[t].forEach(([r,n])=>{try{n(...e);}catch(i){this.log("error",`error in ${t} callback`,i);}});}catch(r){this.log("error",`error triggering ${t} callbacks`,r);}}leaveOpenTopic(t){let e=this.channels.find(r=>r.topic===t&&(r.isJoined()||r.isJoining()));e&&(this.hasLogger()&&this.log("transport",`leaving duplicate topic "${t}"`),e.leave());}};});function Un(t){return t.metas.map(e=>(e.presence_ref=e.phx_ref,delete e.phx_ref,delete e.phx_ref_prev,e))}function zg(t){return JSON.parse(JSON.stringify(t))}function Jg(t){return t?.events&&{events:t.events}}function rc(t){return t?.metas?Un(t):[]}var Ar,nc=R(()=>{Rs();Ar=class t{constructor(e,r){let n=Jg(r);this.presence=new ec(e.getChannel(),n),this.presence.onJoin((i,s,o)=>{let a=t.onJoinPayload(i,s,o);e.getChannel().trigger("presence",a);}),this.presence.onLeave((i,s,o)=>{let a=t.onLeavePayload(i,s,o);e.getChannel().trigger("presence",a);}),this.presence.onSync(()=>{e.getChannel().trigger("presence",{event:"sync"});});}get state(){return t.transformState(this.presence.state)}static transformState(e){return e=zg(e),Object.getOwnPropertyNames(e).reduce((r,n)=>{let i=e[n];return r[n]=Un(i),r},{})}static onJoinPayload(e,r,n){let i=rc(r),s=Un(n);return {event:"join",key:e,currentPresences:i,newPresences:s}}static onLeavePayload(e,r,n){let i=rc(r),s=Un(n);return {event:"leave",key:e,currentPresences:i,leftPresences:s}}};});var xs,Jt,Ps=R(()=>{nc();(function(t){t.SYNC="sync",t.JOIN="join",t.LEAVE="leave";})(xs||(xs={}));Jt=class{get state(){return this.presenceAdapter.state}constructor(e,r){this.channel=e,this.presenceAdapter=new Ar(this.channel.channelAdapter,r);}};});function Kg(t){return {config:Object.assign({broadcast:{ack:false,self:false},presence:{key:"",enabled:false},private:false},t.config)}}var Ir,ic=R(()=>{Rr();Ir=class{constructor(e,r,n){let i=Kg(n);this.channel=e.getSocket().channel(r,i),this.socket=e;}get state(){return this.channel.state}set state(e){this.channel.state=e;}get joinedOnce(){return this.channel.joinedOnce}get joinPush(){return this.channel.joinPush}get rejoinTimer(){return this.channel.rejoinTimer}on(e,r){return this.channel.on(e,r)}off(e,r){this.channel.off(e,r);}subscribe(e){return this.channel.join(e)}unsubscribe(e){return this.channel.leave(e)}teardown(){this.channel.teardown();}onClose(e){this.channel.onClose(e);}onError(e){return this.channel.onError(e)}push(e,r,n){let i;try{i=this.channel.push(e,r,n);}catch{throw `tried to push '${e}' to '${this.channel.topic}' before joining. Use channel.subscribe() before pushing events`}if(this.channel.pushBuffer.length>Yl){let s=this.channel.pushBuffer.shift();s.cancelTimeout(),this.socket.log("channel",`discarded push due to buffer overflow: ${s.event}`,s.payload());}return i}updateJoinPayload(e){let r=this.channel.joinPush.payload();this.channel.joinPush.payload=()=>Object.assign(Object.assign({},r),e);}canPush(){return this.socket.isConnected()&&this.state===ye.joined}isJoined(){return this.state===ye.joined}isJoining(){return this.state===ye.joining}isClosed(){return this.state===ye.closed}isLeaving(){return this.state===ye.leaving}updateFilterBindings(e){this.channel.filterBindings=e;}updatePayloadTransform(e){this.channel.onMessage=e;}getChannel(){return this.channel}};});var Ts,at,ve,Kt,As=R(()=>{Rr();Ps();Dn();Dn();ic();(function(t){t.ALL="*",t.INSERT="INSERT",t.UPDATE="UPDATE",t.DELETE="DELETE";})(Ts||(Ts={}));(function(t){t.BROADCAST="broadcast",t.PRESENCE="presence",t.POSTGRES_CHANGES="postgres_changes",t.SYSTEM="system";})(at||(at={}));(function(t){t.SUBSCRIBED="SUBSCRIBED",t.TIMED_OUT="TIMED_OUT",t.CLOSED="CLOSED",t.CHANNEL_ERROR="CHANNEL_ERROR";})(ve||(ve={}));Kt=class t{get state(){return this.channelAdapter.state}set state(e){this.channelAdapter.state=e;}get joinedOnce(){return this.channelAdapter.joinedOnce}get timeout(){return this.socket.timeout}get joinPush(){return this.channelAdapter.joinPush}get rejoinTimer(){return this.channelAdapter.rejoinTimer}constructor(e,r={config:{}},n){var i,s;if(this.topic=e,this.params=r,this.socket=n,this.bindings={},this.subTopic=e.replace(/^realtime:/i,""),this.params.config=Object.assign({broadcast:{ack:false,self:false},presence:{key:"",enabled:false},private:false},r.config),this.channelAdapter=new Ir(this.socket.socketAdapter,e,this.params),this.presence=new Jt(this),this._onClose(()=>{this.socket._remove(this);}),this._updateFilterTransform(),this.broadcastEndpointURL=Nn(this.socket.socketAdapter.endPointURL()),this.private=this.params.config.private||false,!this.private&&(!((s=(i=this.params.config)===null||i===void 0?void 0:i.broadcast)===null||s===void 0)&&s.replay))throw `tried to use replay on public channel '${this.topic}'. It must be a private channel.`}subscribe(e,r=this.timeout){var n,i,s;if(this.socket.isConnected()||this.socket.connect(),this.channelAdapter.isClosed()){let{config:{broadcast:o,presence:a,private:l}}=this.params,c=(i=(n=this.bindings.postgres_changes)===null||n===void 0?void 0:n.map(f=>f.filter))!==null&&i!==void 0?i:[],u=!!this.bindings[at.PRESENCE]&&this.bindings[at.PRESENCE].length>0||((s=this.params.config.presence)===null||s===void 0?void 0:s.enabled)===true,d={},p={broadcast:o,presence:Object.assign(Object.assign({},a),{enabled:u}),postgres_changes:c,private:l};this.socket.accessTokenValue&&(d.access_token=this.socket.accessTokenValue),this._onError(f=>{e?.(ve.CHANNEL_ERROR,f);}),this._onClose(()=>e?.(ve.CLOSED)),this.updateJoinPayload(Object.assign({config:p},d)),this._updateFilterMessage(),this.channelAdapter.subscribe(r).receive("ok",async({postgres_changes:f})=>{if(this.socket._isManualToken()||this.socket.setAuth(),f===void 0){e?.(ve.SUBSCRIBED);return}this._updatePostgresBindings(f,e);}).receive("error",f=>{this.state=ye.errored,e?.(ve.CHANNEL_ERROR,new Error(JSON.stringify(Object.values(f).join(", ")||"error")));}).receive("timeout",()=>{e?.(ve.TIMED_OUT);});}return this}_updatePostgresBindings(e,r){var n;let i=this.bindings.postgres_changes,s=(n=i?.length)!==null&&n!==void 0?n:0,o=[];for(let a=0;a<s;a++){let l=i[a],{filter:{event:c,schema:u,table:d,filter:p}}=l,f=e&&e[a];if(f&&f.event===c&&t.isFilterValueEqual(f.schema,u)&&t.isFilterValueEqual(f.table,d)&&t.isFilterValueEqual(f.filter,p))o.push(Object.assign(Object.assign({},l),{id:f.id}));else {this.unsubscribe(),this.state=ye.errored,r?.(ve.CHANNEL_ERROR,new Error("mismatch between server and client bindings for postgres changes"));return}}this.bindings.postgres_changes=o,this.state!=ye.errored&&r&&r(ve.SUBSCRIBED);}presenceState(){return this.presence.state}async track(e,r={}){return await this.send({type:"presence",event:"track",payload:e},r.timeout||this.timeout)}async untrack(e={}){return await this.send({type:"presence",event:"untrack"},e)}on(e,r,n){let i=this.channelAdapter.isJoined()||this.channelAdapter.isJoining(),s=e===at.PRESENCE||e===at.POSTGRES_CHANGES;if(i&&s)throw this.socket.log("channel",`cannot add \`${e}\` callbacks for ${this.topic} after \`subscribe()\`.`),new Error(`cannot add \`${e}\` callbacks for ${this.topic} after \`subscribe()\`.`);return this._on(e,r,n)}async httpSend(e,r,n={}){var i;if(r==null)return Promise.reject("Payload is required for httpSend()");let s={apikey:this.socket.apiKey?this.socket.apiKey:"","Content-Type":"application/json"};this.socket.accessTokenValue&&(s.Authorization=`Bearer ${this.socket.accessTokenValue}`);let o={method:"POST",headers:s,body:JSON.stringify({messages:[{topic:this.subTopic,event:e,payload:r,private:this.private}]})},a=await this._fetchWithTimeout(this.broadcastEndpointURL,o,(i=n.timeout)!==null&&i!==void 0?i:this.timeout);if(a.status===202)return {success:true};let l=a.statusText;try{let c=await a.json();l=c.error||c.message||l;}catch{}return Promise.reject(new Error(l))}async send(e,r={}){var n,i;if(!this.channelAdapter.canPush()&&e.type==="broadcast"){console.warn("Realtime send() is automatically falling back to REST API. This behavior will be deprecated in the future. Please use httpSend() explicitly for REST delivery.");let{event:s,payload:o}=e,a={apikey:this.socket.apiKey?this.socket.apiKey:"","Content-Type":"application/json"};this.socket.accessTokenValue&&(a.Authorization=`Bearer ${this.socket.accessTokenValue}`);let l={method:"POST",headers:a,body:JSON.stringify({messages:[{topic:this.subTopic,event:s,payload:o,private:this.private}]})};try{let c=await this._fetchWithTimeout(this.broadcastEndpointURL,l,(n=r.timeout)!==null&&n!==void 0?n:this.timeout);return await((i=c.body)===null||i===void 0?void 0:i.cancel()),c.ok?"ok":"error"}catch(c){return c.name==="AbortError"?"timed out":"error"}}else return new Promise(s=>{var o,a,l;let c=this.channelAdapter.push(e.type,e,r.timeout||this.timeout);e.type==="broadcast"&&!(!((l=(a=(o=this.params)===null||o===void 0?void 0:o.config)===null||a===void 0?void 0:a.broadcast)===null||l===void 0)&&l.ack)&&s("ok"),c.receive("ok",()=>s("ok")),c.receive("error",()=>s("error")),c.receive("timeout",()=>s("timed out"));})}updateJoinPayload(e){this.channelAdapter.updateJoinPayload(e);}async unsubscribe(e=this.timeout){return new Promise(r=>{this.channelAdapter.unsubscribe(e).receive("ok",()=>r("ok")).receive("timeout",()=>r("timed out")).receive("error",()=>r("error"));})}teardown(){this.channelAdapter.teardown();}async _fetchWithTimeout(e,r,n){let i=new AbortController,s=setTimeout(()=>i.abort(),n),o=await this.socket.fetch(e,Object.assign(Object.assign({},r),{signal:i.signal}));return clearTimeout(s),o}_on(e,r,n){let i=e.toLocaleLowerCase(),s=this.channelAdapter.on(e,n),o={type:i,filter:r,callback:n,ref:s};return this.bindings[i]?this.bindings[i].push(o):this.bindings[i]=[o],this._updateFilterMessage(),this}_onClose(e){this.channelAdapter.onClose(e);}_onError(e){this.channelAdapter.onError(e);}_updateFilterMessage(){this.channelAdapter.updateFilterBindings((e,r,n)=>{var i,s,o,a,l,c,u;let d=e.event.toLocaleLowerCase();if(this._notThisChannelEvent(d,n))return false;let p=(i=this.bindings[d])===null||i===void 0?void 0:i.find(f=>f.ref===e.ref);if(!p)return true;if(["broadcast","presence","postgres_changes"].includes(d))if("id"in p){let f=p.id,h=(s=p.filter)===null||s===void 0?void 0:s.event;return f&&((o=r.ids)===null||o===void 0?void 0:o.includes(f))&&(h==="*"||h?.toLocaleLowerCase()===((a=r.data)===null||a===void 0?void 0:a.type.toLocaleLowerCase()))}else {let f=(c=(l=p?.filter)===null||l===void 0?void 0:l.event)===null||c===void 0?void 0:c.toLocaleLowerCase();return f==="*"||f===((u=r?.event)===null||u===void 0?void 0:u.toLocaleLowerCase())}else return p.type.toLocaleLowerCase()===d});}_notThisChannelEvent(e,r){let{close:n,error:i,leave:s,join:o}=$n;return r&&[n,i,s,o].includes(e)&&r!==this.joinPush.ref}_updateFilterTransform(){this.channelAdapter.updatePayloadTransform((e,r,n)=>{if(typeof r=="object"&&"ids"in r){let i=r.data,{schema:s,table:o,commit_timestamp:a,type:l,errors:c}=i;return Object.assign(Object.assign({},{schema:s,table:o,commit_timestamp:a,eventType:l,new:{},old:{},errors:c}),this._getPayloadRecords(i))}return r});}copyBindings(e){if(this.joinedOnce)throw new Error("cannot copy bindings into joined channel");for(let r in e.bindings)for(let n of e.bindings[r])this._on(n.type,n.filter,n.callback);}static isFilterValueEqual(e,r){return (e??void 0)===(r??void 0)}_getPayloadRecords(e){let r={new:{},old:{}};return (e.type==="INSERT"||e.type==="UPDATE")&&(r.new=Ss(e.columns,e.record)),(e.type==="UPDATE"||e.type==="DELETE")&&(r.old=Ss(e.columns,e.old_record)),r}};});var Or,sc=R(()=>{Rs();Rr();Or=class{constructor(e,r){this.socket=new tc(e,r);}get timeout(){return this.socket.timeout}get endPoint(){return this.socket.endPoint}get transport(){return this.socket.transport}get heartbeatIntervalMs(){return this.socket.heartbeatIntervalMs}get heartbeatCallback(){return this.socket.heartbeatCallback}set heartbeatCallback(e){this.socket.heartbeatCallback=e;}get heartbeatTimer(){return this.socket.heartbeatTimer}get pendingHeartbeatRef(){return this.socket.pendingHeartbeatRef}get reconnectTimer(){return this.socket.reconnectTimer}get vsn(){return this.socket.vsn}get encode(){return this.socket.encode}get decode(){return this.socket.decode}get reconnectAfterMs(){return this.socket.reconnectAfterMs}get sendBuffer(){return this.socket.sendBuffer}get stateChangeCallbacks(){return this.socket.stateChangeCallbacks}connect(){this.socket.connect();}disconnect(e,r,n,i=1e4){return new Promise(s=>{setTimeout(()=>s("timeout"),i),this.socket.disconnect(()=>{e(),s("ok");},r,n);})}push(e){this.socket.push(e);}log(e,r,n){this.socket.log(e,r,n);}makeRef(){return this.socket.makeRef()}onOpen(e){this.socket.onOpen(e);}onClose(e){this.socket.onClose(e);}onError(e){this.socket.onError(e);}onMessage(e){this.socket.onMessage(e);}isConnected(){return this.socket.isConnected()}isConnecting(){return this.socket.connectionState()==Er.connecting}isDisconnecting(){return this.socket.connectionState()==Er.closing}connectionState(){return this.socket.connectionState()}endPointURL(){return this.socket.endPointURL()}sendHeartbeat(){this.socket.sendHeartbeat();}getSocket(){return this.socket}};});var Vg,Gg,Yg,Xg,Vt,oc=R(()=>{ks();Rr();Xl();Dn();As();sc();Vg={HEARTBEAT_INTERVAL:25e3,RECONNECT_DELAY:10,HEARTBEAT_TIMEOUT_FALLBACK:100},Gg=[1e3,2e3,5e3,1e4],Yg=1e4,Xg=`
11
+ Suggested solution: ${e.workaround}`),new Error(r)}static isWebSocketSupported(){try{let e=this.detectEnvironment();return e.type==="native"||e.type==="ws"}catch{return false}}},vi=bi;});var Xl,Zl=R(()=>{Xl="2.103.2";});var Ql,ec,Ci,tc,rc,nc,ye,jn,xr,Pr=R(()=>{Zl();Ql=`realtime-js/${Xl}`,ec="1.0.0",Ci="2.0.0",tc=Ci,rc=1e4,nc=100,ye={closed:"closed",errored:"errored",joined:"joined",joining:"joining",leaving:"leaving"},jn={close:"phx_close",error:"phx_error",join:"phx_join",reply:"phx_reply",leave:"phx_leave",access_token:"access_token"},xr={connecting:"connecting",open:"open",closing:"closing",closed:"closed"};});var Tr,sc=R(()=>{Tr=class{constructor(e){this.HEADER_LENGTH=1,this.USER_BROADCAST_PUSH_META_LENGTH=6,this.KINDS={userBroadcastPush:3,userBroadcast:4},this.BINARY_ENCODING=0,this.JSON_ENCODING=1,this.BROADCAST_EVENT="broadcast",this.allowedMetadataKeys=[],this.allowedMetadataKeys=e??[];}encode(e,r){if(e.event===this.BROADCAST_EVENT&&!(e.payload instanceof ArrayBuffer)&&typeof e.payload.event=="string")return r(this._binaryEncodeUserBroadcastPush(e));let n=[e.join_ref,e.ref,e.topic,e.event,e.payload];return r(JSON.stringify(n))}_binaryEncodeUserBroadcastPush(e){var r;return this._isArrayBuffer((r=e.payload)===null||r===void 0?void 0:r.payload)?this._encodeBinaryUserBroadcastPush(e):this._encodeJsonUserBroadcastPush(e)}_encodeBinaryUserBroadcastPush(e){var r,n;let s=(n=(r=e.payload)===null||r===void 0?void 0:r.payload)!==null&&n!==void 0?n:new ArrayBuffer(0);return this._encodeUserBroadcastPush(e,this.BINARY_ENCODING,s)}_encodeJsonUserBroadcastPush(e){var r,n;let s=(n=(r=e.payload)===null||r===void 0?void 0:r.payload)!==null&&n!==void 0?n:{},o=new TextEncoder().encode(JSON.stringify(s)).buffer;return this._encodeUserBroadcastPush(e,this.JSON_ENCODING,o)}_encodeUserBroadcastPush(e,r,n){var s,i;let o=e.topic,a=(s=e.ref)!==null&&s!==void 0?s:"",l=(i=e.join_ref)!==null&&i!==void 0?i:"",c=e.payload.event,u=this.allowedMetadataKeys?this._pick(e.payload,this.allowedMetadataKeys):{},d=Object.keys(u).length===0?"":JSON.stringify(u);if(l.length>255)throw new Error(`joinRef length ${l.length} exceeds maximum of 255`);if(a.length>255)throw new Error(`ref length ${a.length} exceeds maximum of 255`);if(o.length>255)throw new Error(`topic length ${o.length} exceeds maximum of 255`);if(c.length>255)throw new Error(`userEvent length ${c.length} exceeds maximum of 255`);if(d.length>255)throw new Error(`metadata length ${d.length} exceeds maximum of 255`);let p=this.USER_BROADCAST_PUSH_META_LENGTH+l.length+a.length+o.length+c.length+d.length,h=new ArrayBuffer(this.HEADER_LENGTH+p),f=new DataView(h),m=0;f.setUint8(m++,this.KINDS.userBroadcastPush),f.setUint8(m++,l.length),f.setUint8(m++,a.length),f.setUint8(m++,o.length),f.setUint8(m++,c.length),f.setUint8(m++,d.length),f.setUint8(m++,r),Array.from(l,b=>f.setUint8(m++,b.charCodeAt(0))),Array.from(a,b=>f.setUint8(m++,b.charCodeAt(0))),Array.from(o,b=>f.setUint8(m++,b.charCodeAt(0))),Array.from(c,b=>f.setUint8(m++,b.charCodeAt(0))),Array.from(d,b=>f.setUint8(m++,b.charCodeAt(0)));var _=new Uint8Array(h.byteLength+n.byteLength);return _.set(new Uint8Array(h),0),_.set(new Uint8Array(n),h.byteLength),_.buffer}decode(e,r){if(this._isArrayBuffer(e)){let n=this._binaryDecode(e);return r(n)}if(typeof e=="string"){let n=JSON.parse(e),[s,i,o,a,l]=n;return r({join_ref:s,ref:i,topic:o,event:a,payload:l})}return r({})}_binaryDecode(e){let r=new DataView(e),n=r.getUint8(0),s=new TextDecoder;if(n===this.KINDS.userBroadcast)return this._decodeUserBroadcast(e,r,s)}_decodeUserBroadcast(e,r,n){let s=r.getUint8(1),i=r.getUint8(2),o=r.getUint8(3),a=r.getUint8(4),l=this.HEADER_LENGTH+4,c=n.decode(e.slice(l,l+s));l=l+s;let u=n.decode(e.slice(l,l+i));l=l+i;let d=n.decode(e.slice(l,l+o));l=l+o;let p=e.slice(l,e.byteLength),h=a===this.JSON_ENCODING?JSON.parse(n.decode(p)):p,f={type:this.BROADCAST_EVENT,event:u,payload:h};return o>0&&(f.meta=JSON.parse(d)),{join_ref:null,ref:null,topic:c,event:this.BROADCAST_EVENT,payload:f}}_isArrayBuffer(e){var r;return e instanceof ArrayBuffer||((r=e?.constructor)===null||r===void 0?void 0:r.name)==="ArrayBuffer"}_pick(e,r){return !e||typeof e!="object"?{}:Object.fromEntries(Object.entries(e).filter(([n])=>r.includes(n)))}};});var D,Ri,Jg,ic,Ei,Kg,Vg,Gg,Yg,Xg,Mn,Ln=R(()=>{(function(t){t.abstime="abstime",t.bool="bool",t.date="date",t.daterange="daterange",t.float4="float4",t.float8="float8",t.int2="int2",t.int4="int4",t.int4range="int4range",t.int8="int8",t.int8range="int8range",t.json="json",t.jsonb="jsonb",t.money="money",t.numeric="numeric",t.oid="oid",t.reltime="reltime",t.text="text",t.time="time",t.timestamp="timestamp",t.timestamptz="timestamptz",t.timetz="timetz",t.tsrange="tsrange",t.tstzrange="tstzrange";})(D||(D={}));Ri=(t,e,r={})=>{var n;let s=(n=r.skipTypes)!==null&&n!==void 0?n:[];return e?Object.keys(e).reduce((i,o)=>(i[o]=Jg(o,t,e,s),i),{}):{}},Jg=(t,e,r,n)=>{let s=e.find(a=>a.name===t),i=s?.type,o=r[t];return i&&!n.includes(i)?ic(i,o):Ei(o)},ic=(t,e)=>{if(t.charAt(0)==="_"){let r=t.slice(1,t.length);return Yg(e,r)}switch(t){case D.bool:return Kg(e);case D.float4:case D.float8:case D.int2:case D.int4:case D.int8:case D.numeric:case D.oid:return Vg(e);case D.json:case D.jsonb:return Gg(e);case D.timestamp:return Xg(e);case D.abstime:case D.date:case D.daterange:case D.int4range:case D.int8range:case D.money:case D.reltime:case D.text:case D.time:case D.timestamptz:case D.timetz:case D.tsrange:case D.tstzrange:return Ei(e);default:return Ei(e)}},Ei=t=>t,Kg=t=>{switch(t){case "t":return true;case "f":return false;default:return t}},Vg=t=>{if(typeof t=="string"){let e=parseFloat(t);if(!Number.isNaN(e))return e}return t},Gg=t=>{if(typeof t=="string")try{return JSON.parse(t)}catch{return t}return t},Yg=(t,e)=>{if(typeof t!="string")return t;let r=t.length-1,n=t[r];if(t[0]==="{"&&n==="}"){let i,o=t.slice(1,r);try{i=JSON.parse("["+o+"]");}catch{i=o?o.split(","):[];}return i.map(a=>ic(e,a))}return t},Xg=t=>typeof t=="string"?t.replace(" ","T"):t,Mn=t=>{let e=new URL(t);return e.protocol=e.protocol.replace(/^ws/i,"http"),e.pathname=e.pathname.replace(/\/+$/,"").replace(/\/socket\/websocket$/i,"").replace(/\/socket$/i,"").replace(/\/websocket$/i,""),e.pathname===""||e.pathname==="/"?e.pathname="/api/broadcast":e.pathname=e.pathname+"/api/broadcast",e.href};});var Ir,Qg,Jt,ke,em,tm,rm,be,Q,$e,xi,nm,Pi,Un,oc,sm,Bn,im,zt,ac,Wn,lc,Ti=R(()=>{Ir=t=>typeof t=="function"?t:function(){return t},Qg=typeof self<"u"?self:null,Jt=typeof window<"u"?window:null,ke=Qg||Jt||globalThis,em="2.0.0",tm=1e4,rm=1e3,be={connecting:0,open:1,closing:2,closed:3},Q={closed:"closed",errored:"errored",joined:"joined",joining:"joining",leaving:"leaving"},$e={close:"phx_close",error:"phx_error",join:"phx_join",reply:"phx_reply",leave:"phx_leave"},xi={longpoll:"longpoll",websocket:"websocket"},nm={complete:4},Pi="base64url.bearer.phx.",Un=class{constructor(t,e,r,n){this.channel=t,this.event=e,this.payload=r||function(){return {}},this.receivedResp=null,this.timeout=n,this.timeoutTimer=null,this.recHooks=[],this.sent=false,this.ref=void 0;}resend(t){this.timeout=t,this.reset(),this.send();}send(){this.hasReceived("timeout")||(this.startTimeout(),this.sent=true,this.channel.socket.push({topic:this.channel.topic,event:this.event,payload:this.payload(),ref:this.ref,join_ref:this.channel.joinRef()}));}receive(t,e){return this.hasReceived(t)&&e(this.receivedResp.response),this.recHooks.push({status:t,callback:e}),this}reset(){this.cancelRefEvent(),this.ref=null,this.refEvent=null,this.receivedResp=null,this.sent=false;}destroy(){this.cancelRefEvent(),this.cancelTimeout();}matchReceive({status:t,response:e,_ref:r}){this.recHooks.filter(n=>n.status===t).forEach(n=>n.callback(e));}cancelRefEvent(){this.refEvent&&this.channel.off(this.refEvent);}cancelTimeout(){clearTimeout(this.timeoutTimer),this.timeoutTimer=null;}startTimeout(){this.timeoutTimer&&this.cancelTimeout(),this.ref=this.channel.socket.makeRef(),this.refEvent=this.channel.replyEventName(this.ref),this.channel.on(this.refEvent,t=>{this.cancelRefEvent(),this.cancelTimeout(),this.receivedResp=t,this.matchReceive(t);}),this.timeoutTimer=setTimeout(()=>{this.trigger("timeout",{});},this.timeout);}hasReceived(t){return this.receivedResp&&this.receivedResp.status===t}trigger(t,e){this.channel.trigger(this.refEvent,{status:t,response:e});}},oc=class{constructor(t,e){this.callback=t,this.timerCalc=e,this.timer=void 0,this.tries=0;}reset(){this.tries=0,clearTimeout(this.timer);}scheduleTimeout(){clearTimeout(this.timer),this.timer=setTimeout(()=>{this.tries=this.tries+1,this.callback();},this.timerCalc(this.tries+1));}},sm=class{constructor(t,e,r){this.state=Q.closed,this.topic=t,this.params=Ir(e||{}),this.socket=r,this.bindings=[],this.bindingRef=0,this.timeout=this.socket.timeout,this.joinedOnce=false,this.joinPush=new Un(this,$e.join,this.params,this.timeout),this.pushBuffer=[],this.stateChangeRefs=[],this.rejoinTimer=new oc(()=>{this.socket.isConnected()&&this.rejoin();},this.socket.rejoinAfterMs),this.stateChangeRefs.push(this.socket.onError(()=>this.rejoinTimer.reset())),this.stateChangeRefs.push(this.socket.onOpen(()=>{this.rejoinTimer.reset(),this.isErrored()&&this.rejoin();})),this.joinPush.receive("ok",()=>{this.state=Q.joined,this.rejoinTimer.reset(),this.pushBuffer.forEach(n=>n.send()),this.pushBuffer=[];}),this.joinPush.receive("error",n=>{this.state=Q.errored,this.socket.hasLogger()&&this.socket.log("channel",`error ${this.topic}`,n),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout();}),this.onClose(()=>{this.rejoinTimer.reset(),this.socket.hasLogger()&&this.socket.log("channel",`close ${this.topic}`),this.state=Q.closed,this.socket.remove(this);}),this.onError(n=>{this.socket.hasLogger()&&this.socket.log("channel",`error ${this.topic}`,n),this.isJoining()&&this.joinPush.reset(),this.state=Q.errored,this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout();}),this.joinPush.receive("timeout",()=>{this.socket.hasLogger()&&this.socket.log("channel",`timeout ${this.topic}`,this.joinPush.timeout),new Un(this,$e.leave,Ir({}),this.timeout).send(),this.state=Q.errored,this.joinPush.reset(),this.socket.isConnected()&&this.rejoinTimer.scheduleTimeout();}),this.on($e.reply,(n,s)=>{this.trigger(this.replyEventName(s),n);});}join(t=this.timeout){if(this.joinedOnce)throw new Error("tried to join multiple times. 'join' can only be called a single time per channel instance");return this.timeout=t,this.joinedOnce=true,this.rejoin(),this.joinPush}teardown(){this.pushBuffer.forEach(t=>t.destroy()),this.pushBuffer=[],this.rejoinTimer.reset(),this.joinPush.destroy(),this.state=Q.closed,this.bindings=[];}onClose(t){this.on($e.close,t);}onError(t){return this.on($e.error,e=>t(e))}on(t,e){let r=this.bindingRef++;return this.bindings.push({event:t,ref:r,callback:e}),r}off(t,e){this.bindings=this.bindings.filter(r=>!(r.event===t&&(typeof e>"u"||e===r.ref)));}canPush(){return this.socket.isConnected()&&this.isJoined()}push(t,e,r=this.timeout){if(e=e||{},!this.joinedOnce)throw new Error(`tried to push '${t}' to '${this.topic}' before joining. Use channel.join() before pushing events`);let n=new Un(this,t,function(){return e},r);return this.canPush()?n.send():(n.startTimeout(),this.pushBuffer.push(n)),n}leave(t=this.timeout){this.rejoinTimer.reset(),this.joinPush.cancelTimeout(),this.state=Q.leaving;let e=()=>{this.socket.hasLogger()&&this.socket.log("channel",`leave ${this.topic}`),this.trigger($e.close,"leave");},r=new Un(this,$e.leave,Ir({}),t);return r.receive("ok",()=>e()).receive("timeout",()=>e()),r.send(),this.canPush()||r.trigger("ok",{}),r}onMessage(t,e,r){return e}filterBindings(t,e,r){return true}isMember(t,e,r,n){return this.topic!==t?false:n&&n!==this.joinRef()?(this.socket.hasLogger()&&this.socket.log("channel","dropping outdated message",{topic:t,event:e,payload:r,joinRef:n}),false):true}joinRef(){return this.joinPush.ref}rejoin(t=this.timeout){this.isLeaving()||(this.socket.leaveOpenTopic(this.topic),this.state=Q.joining,this.joinPush.resend(t));}trigger(t,e,r,n){let s=this.onMessage(t,e,r,n);if(e&&!s)throw new Error("channel onMessage callbacks must return the payload, modified or unmodified");let i=this.bindings.filter(o=>o.event===t&&this.filterBindings(o,e,r));for(let o=0;o<i.length;o++)i[o].callback(s,r,n||this.joinRef());}replyEventName(t){return `chan_reply_${t}`}isClosed(){return this.state===Q.closed}isErrored(){return this.state===Q.errored}isJoined(){return this.state===Q.joined}isJoining(){return this.state===Q.joining}isLeaving(){return this.state===Q.leaving}},Bn=class{static request(t,e,r,n,s,i,o){if(ke.XDomainRequest){let a=new ke.XDomainRequest;return this.xdomainRequest(a,t,e,n,s,i,o)}else if(ke.XMLHttpRequest){let a=new ke.XMLHttpRequest;return this.xhrRequest(a,t,e,r,n,s,i,o)}else {if(ke.fetch&&ke.AbortController)return this.fetchRequest(t,e,r,n,s,i,o);throw new Error("No suitable XMLHttpRequest implementation found")}}static fetchRequest(t,e,r,n,s,i,o){let a={method:t,headers:r,body:n},l=null;if(s){l=new AbortController;setTimeout(()=>l.abort(),s);a.signal=l.signal;}return ke.fetch(e,a).then(c=>c.text()).then(c=>this.parseJSON(c)).then(c=>o&&o(c)).catch(c=>{c.name==="AbortError"&&i?i():o&&o(null);}),l}static xdomainRequest(t,e,r,n,s,i,o){return t.timeout=s,t.open(e,r),t.onload=()=>{let a=this.parseJSON(t.responseText);o&&o(a);},i&&(t.ontimeout=i),t.onprogress=()=>{},t.send(n),t}static xhrRequest(t,e,r,n,s,i,o,a){t.open(e,r,true),t.timeout=i;for(let[l,c]of Object.entries(n))t.setRequestHeader(l,c);return t.onerror=()=>a&&a(null),t.onreadystatechange=()=>{if(t.readyState===nm.complete&&a){let l=this.parseJSON(t.responseText);a(l);}},o&&(t.ontimeout=o),t.send(s),t}static parseJSON(t){if(!t||t==="")return null;try{return JSON.parse(t)}catch{return console&&console.log("failed to parse JSON response",t),null}}static serialize(t,e){let r=[];for(var n in t){if(!Object.prototype.hasOwnProperty.call(t,n))continue;let s=e?`${e}[${n}]`:n,i=t[n];typeof i=="object"?r.push(this.serialize(i,s)):r.push(encodeURIComponent(s)+"="+encodeURIComponent(i));}return r.join("&")}static appendParams(t,e){if(Object.keys(e).length===0)return t;let r=t.match(/\?/)?"&":"?";return `${t}${r}${this.serialize(e)}`}},im=t=>{let e="",r=new Uint8Array(t),n=r.byteLength;for(let s=0;s<n;s++)e+=String.fromCharCode(r[s]);return btoa(e)},zt=class{constructor(t,e){e&&e.length===2&&e[1].startsWith(Pi)&&(this.authToken=atob(e[1].slice(Pi.length))),this.endPoint=null,this.token=null,this.skipHeartbeat=true,this.reqs=new Set,this.awaitingBatchAck=false,this.currentBatch=null,this.currentBatchTimer=null,this.batchBuffer=[],this.onopen=function(){},this.onerror=function(){},this.onmessage=function(){},this.onclose=function(){},this.pollEndpoint=this.normalizeEndpoint(t),this.readyState=be.connecting,setTimeout(()=>this.poll(),0);}normalizeEndpoint(t){return t.replace("ws://","http://").replace("wss://","https://").replace(new RegExp("(.*)/"+xi.websocket),"$1/"+xi.longpoll)}endpointURL(){return Bn.appendParams(this.pollEndpoint,{token:this.token})}closeAndRetry(t,e,r){this.close(t,e,r),this.readyState=be.connecting;}ontimeout(){this.onerror("timeout"),this.closeAndRetry(1005,"timeout",false);}isActive(){return this.readyState===be.open||this.readyState===be.connecting}poll(){let t={Accept:"application/json"};this.authToken&&(t["X-Phoenix-AuthToken"]=this.authToken),this.ajax("GET",t,null,()=>this.ontimeout(),e=>{if(e){var{status:r,token:n,messages:s}=e;if(r===410&&this.token!==null){this.onerror(410),this.closeAndRetry(3410,"session_gone",false);return}this.token=n;}else r=0;switch(r){case 200:s.forEach(i=>{setTimeout(()=>this.onmessage({data:i}),0);}),this.poll();break;case 204:this.poll();break;case 410:this.readyState=be.open,this.onopen({}),this.poll();break;case 403:this.onerror(403),this.close(1008,"forbidden",false);break;case 0:case 500:this.onerror(500),this.closeAndRetry(1011,"internal server error",500);break;default:throw new Error(`unhandled poll status ${r}`)}});}send(t){typeof t!="string"&&(t=im(t)),this.currentBatch?this.currentBatch.push(t):this.awaitingBatchAck?this.batchBuffer.push(t):(this.currentBatch=[t],this.currentBatchTimer=setTimeout(()=>{this.batchSend(this.currentBatch),this.currentBatch=null;},0));}batchSend(t){this.awaitingBatchAck=true,this.ajax("POST",{"Content-Type":"application/x-ndjson"},t.join(`
12
+ `),()=>this.onerror("timeout"),e=>{this.awaitingBatchAck=false,!e||e.status!==200?(this.onerror(e&&e.status),this.closeAndRetry(1011,"internal server error",false)):this.batchBuffer.length>0&&(this.batchSend(this.batchBuffer),this.batchBuffer=[]);});}close(t,e,r){for(let s of this.reqs)s.abort();this.readyState=be.closed;let n=Object.assign({code:1e3,reason:void 0,wasClean:true},{code:t,reason:e,wasClean:r});this.batchBuffer=[],clearTimeout(this.currentBatchTimer),this.currentBatchTimer=null,typeof CloseEvent<"u"?this.onclose(new CloseEvent("close",n)):this.onclose(n);}ajax(t,e,r,n,s){let i,o=()=>{this.reqs.delete(i),n();};i=Bn.request(t,this.endpointURL(),e,r,this.timeout,o,a=>{this.reqs.delete(i),this.isActive()&&s(a);}),this.reqs.add(i);}},ac=class Ar{constructor(e,r={}){let n=r.events||{state:"presence_state",diff:"presence_diff"};this.state={},this.pendingDiffs=[],this.channel=e,this.joinRef=null,this.caller={onJoin:function(){},onLeave:function(){},onSync:function(){}},this.channel.on(n.state,s=>{let{onJoin:i,onLeave:o,onSync:a}=this.caller;this.joinRef=this.channel.joinRef(),this.state=Ar.syncState(this.state,s,i,o),this.pendingDiffs.forEach(l=>{this.state=Ar.syncDiff(this.state,l,i,o);}),this.pendingDiffs=[],a();}),this.channel.on(n.diff,s=>{let{onJoin:i,onLeave:o,onSync:a}=this.caller;this.inPendingSyncState()?this.pendingDiffs.push(s):(this.state=Ar.syncDiff(this.state,s,i,o),a());});}onJoin(e){this.caller.onJoin=e;}onLeave(e){this.caller.onLeave=e;}onSync(e){this.caller.onSync=e;}list(e){return Ar.list(this.state,e)}inPendingSyncState(){return !this.joinRef||this.joinRef!==this.channel.joinRef()}static syncState(e,r,n,s){let i=this.clone(e),o={},a={};return this.map(i,(l,c)=>{r[l]||(a[l]=c);}),this.map(r,(l,c)=>{let u=i[l];if(u){let d=c.metas.map(m=>m.phx_ref),p=u.metas.map(m=>m.phx_ref),h=c.metas.filter(m=>p.indexOf(m.phx_ref)<0),f=u.metas.filter(m=>d.indexOf(m.phx_ref)<0);h.length>0&&(o[l]=c,o[l].metas=h),f.length>0&&(a[l]=this.clone(u),a[l].metas=f);}else o[l]=c;}),this.syncDiff(i,{joins:o,leaves:a},n,s)}static syncDiff(e,r,n,s){let{joins:i,leaves:o}=this.clone(r);return n||(n=function(){}),s||(s=function(){}),this.map(i,(a,l)=>{let c=e[a];if(e[a]=this.clone(l),c){let u=e[a].metas.map(p=>p.phx_ref),d=c.metas.filter(p=>u.indexOf(p.phx_ref)<0);e[a].metas.unshift(...d);}n(a,c,l);}),this.map(o,(a,l)=>{let c=e[a];if(!c)return;let u=l.metas.map(d=>d.phx_ref);c.metas=c.metas.filter(d=>u.indexOf(d.phx_ref)<0),s(a,c,l),c.metas.length===0&&delete e[a];}),e}static list(e,r){return r||(r=function(n,s){return s}),this.map(e,(n,s)=>r(n,s))}static map(e,r){return Object.getOwnPropertyNames(e).map(n=>r(n,e[n]))}static clone(e){return JSON.parse(JSON.stringify(e))}},Wn={HEADER_LENGTH:1,META_LENGTH:4,KINDS:{push:0,reply:1,broadcast:2},encode(t,e){if(t.payload.constructor===ArrayBuffer)return e(this.binaryEncode(t));{let r=[t.join_ref,t.ref,t.topic,t.event,t.payload];return e(JSON.stringify(r))}},decode(t,e){if(t.constructor===ArrayBuffer)return e(this.binaryDecode(t));{let[r,n,s,i,o]=JSON.parse(t);return e({join_ref:r,ref:n,topic:s,event:i,payload:o})}},binaryEncode(t){let{join_ref:e,ref:r,event:n,topic:s,payload:i}=t,o=this.META_LENGTH+e.length+r.length+s.length+n.length,a=new ArrayBuffer(this.HEADER_LENGTH+o),l=new DataView(a),c=0;l.setUint8(c++,this.KINDS.push),l.setUint8(c++,e.length),l.setUint8(c++,r.length),l.setUint8(c++,s.length),l.setUint8(c++,n.length),Array.from(e,d=>l.setUint8(c++,d.charCodeAt(0))),Array.from(r,d=>l.setUint8(c++,d.charCodeAt(0))),Array.from(s,d=>l.setUint8(c++,d.charCodeAt(0))),Array.from(n,d=>l.setUint8(c++,d.charCodeAt(0)));var u=new Uint8Array(a.byteLength+i.byteLength);return u.set(new Uint8Array(a),0),u.set(new Uint8Array(i),a.byteLength),u.buffer},binaryDecode(t){let e=new DataView(t),r=e.getUint8(0),n=new TextDecoder;switch(r){case this.KINDS.push:return this.decodePush(t,e,n);case this.KINDS.reply:return this.decodeReply(t,e,n);case this.KINDS.broadcast:return this.decodeBroadcast(t,e,n)}},decodePush(t,e,r){let n=e.getUint8(1),s=e.getUint8(2),i=e.getUint8(3),o=this.HEADER_LENGTH+this.META_LENGTH-1,a=r.decode(t.slice(o,o+n));o=o+n;let l=r.decode(t.slice(o,o+s));o=o+s;let c=r.decode(t.slice(o,o+i));o=o+i;let u=t.slice(o,t.byteLength);return {join_ref:a,ref:null,topic:l,event:c,payload:u}},decodeReply(t,e,r){let n=e.getUint8(1),s=e.getUint8(2),i=e.getUint8(3),o=e.getUint8(4),a=this.HEADER_LENGTH+this.META_LENGTH,l=r.decode(t.slice(a,a+n));a=a+n;let c=r.decode(t.slice(a,a+s));a=a+s;let u=r.decode(t.slice(a,a+i));a=a+i;let d=r.decode(t.slice(a,a+o));a=a+o;let p=t.slice(a,t.byteLength),h={status:d,response:p};return {join_ref:l,ref:c,topic:u,event:$e.reply,payload:h}},decodeBroadcast(t,e,r){let n=e.getUint8(1),s=e.getUint8(2),i=this.HEADER_LENGTH+2,o=r.decode(t.slice(i,i+n));i=i+n;let a=r.decode(t.slice(i,i+s));i=i+s;let l=t.slice(i,t.byteLength);return {join_ref:null,ref:null,topic:o,event:a,payload:l}}},lc=class{constructor(t,e={}){this.stateChangeCallbacks={open:[],close:[],error:[],message:[]},this.channels=[],this.sendBuffer=[],this.ref=0,this.fallbackRef=null,this.timeout=e.timeout||tm,this.transport=e.transport||ke.WebSocket||zt,this.conn=void 0,this.primaryPassedHealthCheck=false,this.longPollFallbackMs=e.longPollFallbackMs,this.fallbackTimer=null,this.sessionStore=e.sessionStorage||ke&&ke.sessionStorage,this.establishedConnections=0,this.defaultEncoder=Wn.encode.bind(Wn),this.defaultDecoder=Wn.decode.bind(Wn),this.closeWasClean=true,this.disconnecting=false,this.binaryType=e.binaryType||"arraybuffer",this.connectClock=1,this.pageHidden=false,this.encode=void 0,this.decode=void 0,this.transport!==zt?(this.encode=e.encode||this.defaultEncoder,this.decode=e.decode||this.defaultDecoder):(this.encode=this.defaultEncoder,this.decode=this.defaultDecoder);let r=null;Jt&&Jt.addEventListener&&(Jt.addEventListener("pagehide",n=>{this.conn&&(this.disconnect(),r=this.connectClock);}),Jt.addEventListener("pageshow",n=>{r===this.connectClock&&(r=null,this.connect());}),Jt.addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"?this.pageHidden=true:(this.pageHidden=false,!this.isConnected()&&!this.closeWasClean&&this.teardown(()=>this.connect()));})),this.heartbeatIntervalMs=e.heartbeatIntervalMs||3e4,this.autoSendHeartbeat=e.autoSendHeartbeat??true,this.heartbeatCallback=e.heartbeatCallback??(()=>{}),this.rejoinAfterMs=n=>e.rejoinAfterMs?e.rejoinAfterMs(n):[1e3,2e3,5e3][n-1]||1e4,this.reconnectAfterMs=n=>e.reconnectAfterMs?e.reconnectAfterMs(n):[10,50,100,150,200,250,500,1e3,2e3][n-1]||5e3,this.logger=e.logger||null,!this.logger&&e.debug&&(this.logger=(n,s,i)=>{console.log(`${n}: ${s}`,i);}),this.longpollerTimeout=e.longpollerTimeout||2e4,this.params=Ir(e.params||{}),this.endPoint=`${t}/${xi.websocket}`,this.vsn=e.vsn||em,this.heartbeatTimeoutTimer=null,this.heartbeatTimer=null,this.heartbeatSentAt=null,this.pendingHeartbeatRef=null,this.reconnectTimer=new oc(()=>{if(this.pageHidden){this.log("Not reconnecting as page is hidden!"),this.teardown();return}this.teardown(async()=>{e.beforeReconnect&&await e.beforeReconnect(),this.connect();});},this.reconnectAfterMs),this.authToken=e.authToken;}getLongPollTransport(){return zt}replaceTransport(t){this.connectClock++,this.closeWasClean=true,clearTimeout(this.fallbackTimer),this.reconnectTimer.reset(),this.conn&&(this.conn.close(),this.conn=null),this.transport=t;}protocol(){return location.protocol.match(/^https/)?"wss":"ws"}endPointURL(){let t=Bn.appendParams(Bn.appendParams(this.endPoint,this.params()),{vsn:this.vsn});return t.charAt(0)!=="/"?t:t.charAt(1)==="/"?`${this.protocol()}:${t}`:`${this.protocol()}://${location.host}${t}`}disconnect(t,e,r){this.connectClock++,this.disconnecting=true,this.closeWasClean=true,clearTimeout(this.fallbackTimer),this.reconnectTimer.reset(),this.teardown(()=>{this.disconnecting=false,t&&t();},e,r);}connect(t){t&&(console&&console.log("passing params to connect is deprecated. Instead pass :params to the Socket constructor"),this.params=Ir(t)),!(this.conn&&!this.disconnecting)&&(this.longPollFallbackMs&&this.transport!==zt?this.connectWithFallback(zt,this.longPollFallbackMs):this.transportConnect());}log(t,e,r){this.logger&&this.logger(t,e,r);}hasLogger(){return this.logger!==null}onOpen(t){let e=this.makeRef();return this.stateChangeCallbacks.open.push([e,t]),e}onClose(t){let e=this.makeRef();return this.stateChangeCallbacks.close.push([e,t]),e}onError(t){let e=this.makeRef();return this.stateChangeCallbacks.error.push([e,t]),e}onMessage(t){let e=this.makeRef();return this.stateChangeCallbacks.message.push([e,t]),e}onHeartbeat(t){this.heartbeatCallback=t;}ping(t){if(!this.isConnected())return false;let e=this.makeRef(),r=Date.now();this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:e});let n=this.onMessage(s=>{s.ref===e&&(this.off([n]),t(Date.now()-r));});return true}transportName(t){return t===zt?"LongPoll":t.name}transportConnect(){this.connectClock++,this.closeWasClean=false;let t;this.authToken&&(t=["phoenix",`${Pi}${btoa(this.authToken).replace(/=/g,"")}`]),this.conn=new this.transport(this.endPointURL(),t),this.conn.binaryType=this.binaryType,this.conn.timeout=this.longpollerTimeout,this.conn.onopen=()=>this.onConnOpen(),this.conn.onerror=e=>this.onConnError(e),this.conn.onmessage=e=>this.onConnMessage(e),this.conn.onclose=e=>this.onConnClose(e);}getSession(t){return this.sessionStore&&this.sessionStore.getItem(t)}storeSession(t,e){this.sessionStore&&this.sessionStore.setItem(t,e);}connectWithFallback(t,e=2500){clearTimeout(this.fallbackTimer);let r=false,n=true,s,i,o=this.transportName(t),a=l=>{this.log("transport",`falling back to ${o}...`,l),this.off([s,i]),n=false,this.replaceTransport(t),this.transportConnect();};if(this.getSession(`phx:fallback:${o}`))return a("memorized");this.fallbackTimer=setTimeout(a,e),i=this.onError(l=>{this.log("transport","error",l),n&&!r&&(clearTimeout(this.fallbackTimer),a(l));}),this.fallbackRef&&this.off([this.fallbackRef]),this.fallbackRef=this.onOpen(()=>{if(r=true,!n){let l=this.transportName(t);return this.primaryPassedHealthCheck||this.storeSession(`phx:fallback:${l}`,"true"),this.log("transport",`established ${l} fallback`)}clearTimeout(this.fallbackTimer),this.fallbackTimer=setTimeout(a,e),this.ping(l=>{this.log("transport","connected to primary after",l),this.primaryPassedHealthCheck=true,clearTimeout(this.fallbackTimer);});}),this.transportConnect();}clearHeartbeats(){clearTimeout(this.heartbeatTimer),clearTimeout(this.heartbeatTimeoutTimer);}onConnOpen(){this.hasLogger()&&this.log("transport",`connected to ${this.endPointURL()}`),this.closeWasClean=false,this.disconnecting=false,this.establishedConnections++,this.flushSendBuffer(),this.reconnectTimer.reset(),this.autoSendHeartbeat&&this.resetHeartbeat(),this.triggerStateCallbacks("open");}heartbeatTimeout(){if(this.pendingHeartbeatRef){this.pendingHeartbeatRef=null,this.heartbeatSentAt=null,this.hasLogger()&&this.log("transport","heartbeat timeout. Attempting to re-establish connection");try{this.heartbeatCallback("timeout");}catch(t){this.log("error","error in heartbeat callback",t);}this.triggerChanError(),this.closeWasClean=false,this.teardown(()=>this.reconnectTimer.scheduleTimeout(),rm,"heartbeat timeout");}}resetHeartbeat(){this.conn&&this.conn.skipHeartbeat||(this.pendingHeartbeatRef=null,this.clearHeartbeats(),this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs));}teardown(t,e,r){if(!this.conn)return t&&t();let n=this.conn;this.waitForBufferDone(n,()=>{e?n.close(e,r||""):n.close(),this.waitForSocketClosed(n,()=>{this.conn===n&&(this.conn.onopen=function(){},this.conn.onerror=function(){},this.conn.onmessage=function(){},this.conn.onclose=function(){},this.conn=null),t&&t();});});}waitForBufferDone(t,e,r=1){if(r===5||!t.bufferedAmount){e();return}setTimeout(()=>{this.waitForBufferDone(t,e,r+1);},150*r);}waitForSocketClosed(t,e,r=1){if(r===5||t.readyState===be.closed){e();return}setTimeout(()=>{this.waitForSocketClosed(t,e,r+1);},150*r);}onConnClose(t){this.conn&&(this.conn.onclose=()=>{}),this.hasLogger()&&this.log("transport","close",t),this.triggerChanError(),this.clearHeartbeats(),this.closeWasClean||this.reconnectTimer.scheduleTimeout(),this.triggerStateCallbacks("close",t);}onConnError(t){this.hasLogger()&&this.log("transport",t);let e=this.transport,r=this.establishedConnections;this.triggerStateCallbacks("error",t,e,r),(e===this.transport||r>0)&&this.triggerChanError();}triggerChanError(){this.channels.forEach(t=>{t.isErrored()||t.isLeaving()||t.isClosed()||t.trigger($e.error);});}connectionState(){switch(this.conn&&this.conn.readyState){case be.connecting:return "connecting";case be.open:return "open";case be.closing:return "closing";default:return "closed"}}isConnected(){return this.connectionState()==="open"}remove(t){this.off(t.stateChangeRefs),this.channels=this.channels.filter(e=>e!==t);}off(t){for(let e in this.stateChangeCallbacks)this.stateChangeCallbacks[e]=this.stateChangeCallbacks[e].filter(([r])=>t.indexOf(r)===-1);}channel(t,e={}){let r=new sm(t,e,this);return this.channels.push(r),r}push(t){if(this.hasLogger()){let{topic:e,event:r,payload:n,ref:s,join_ref:i}=t;this.log("push",`${e} ${r} (${i}, ${s})`,n);}this.isConnected()?this.encode(t,e=>this.conn.send(e)):this.sendBuffer.push(()=>this.encode(t,e=>this.conn.send(e)));}makeRef(){let t=this.ref+1;return t===this.ref?this.ref=0:this.ref=t,this.ref.toString()}sendHeartbeat(){if(!this.isConnected()){try{this.heartbeatCallback("disconnected");}catch(t){this.log("error","error in heartbeat callback",t);}return}if(this.pendingHeartbeatRef){this.heartbeatTimeout();return}this.pendingHeartbeatRef=this.makeRef(),this.heartbeatSentAt=Date.now(),this.push({topic:"phoenix",event:"heartbeat",payload:{},ref:this.pendingHeartbeatRef});try{this.heartbeatCallback("sent");}catch(t){this.log("error","error in heartbeat callback",t);}this.heartbeatTimeoutTimer=setTimeout(()=>this.heartbeatTimeout(),this.heartbeatIntervalMs);}flushSendBuffer(){this.isConnected()&&this.sendBuffer.length>0&&(this.sendBuffer.forEach(t=>t()),this.sendBuffer=[]);}onConnMessage(t){this.decode(t.data,e=>{let{topic:r,event:n,payload:s,ref:i,join_ref:o}=e;if(i&&i===this.pendingHeartbeatRef){let a=this.heartbeatSentAt?Date.now()-this.heartbeatSentAt:void 0;this.clearHeartbeats();try{this.heartbeatCallback(s.status==="ok"?"ok":"error",a);}catch(l){this.log("error","error in heartbeat callback",l);}this.pendingHeartbeatRef=null,this.heartbeatSentAt=null,this.autoSendHeartbeat&&(this.heartbeatTimer=setTimeout(()=>this.sendHeartbeat(),this.heartbeatIntervalMs));}this.hasLogger()&&this.log("receive",`${s.status||""} ${r} ${n} ${i&&"("+i+")"||""}`.trim(),s);for(let a=0;a<this.channels.length;a++){let l=this.channels[a];l.isMember(r,n,s,o)&&l.trigger(n,s,i,o);}this.triggerStateCallbacks("message",e);});}triggerStateCallbacks(t,...e){try{this.stateChangeCallbacks[t].forEach(([r,n])=>{try{n(...e);}catch(s){this.log("error",`error in ${t} callback`,s);}});}catch(r){this.log("error",`error triggering ${t} callbacks`,r);}}leaveOpenTopic(t){let e=this.channels.find(r=>r.topic===t&&(r.isJoined()||r.isJoining()));e&&(this.hasLogger()&&this.log("transport",`leaving duplicate topic "${t}"`),e.leave());}};});function Fn(t){return t.metas.map(e=>(e.presence_ref=e.phx_ref,delete e.phx_ref,delete e.phx_ref_prev,e))}function om(t){return JSON.parse(JSON.stringify(t))}function am(t){return t?.events&&{events:t.events}}function cc(t){return t?.metas?Fn(t):[]}var Or,uc=R(()=>{Ti();Or=class t{constructor(e,r){let n=am(r);this.presence=new ac(e.getChannel(),n),this.presence.onJoin((s,i,o)=>{let a=t.onJoinPayload(s,i,o);e.getChannel().trigger("presence",a);}),this.presence.onLeave((s,i,o)=>{let a=t.onLeavePayload(s,i,o);e.getChannel().trigger("presence",a);}),this.presence.onSync(()=>{e.getChannel().trigger("presence",{event:"sync"});});}get state(){return t.transformState(this.presence.state)}static transformState(e){return e=om(e),Object.getOwnPropertyNames(e).reduce((r,n)=>{let s=e[n];return r[n]=Fn(s),r},{})}static onJoinPayload(e,r,n){let s=cc(r),i=Fn(n);return {event:"join",key:e,currentPresences:s,newPresences:i}}static onLeavePayload(e,r,n){let s=cc(r),i=Fn(n);return {event:"leave",key:e,currentPresences:s,leftPresences:i}}};});var Ai,Kt,Ii=R(()=>{uc();(function(t){t.SYNC="sync",t.JOIN="join",t.LEAVE="leave";})(Ai||(Ai={}));Kt=class{get state(){return this.presenceAdapter.state}constructor(e,r){this.channel=e,this.presenceAdapter=new Or(this.channel.channelAdapter,r);}};});function lm(t){return {config:Object.assign({broadcast:{ack:false,self:false},presence:{key:"",enabled:false},private:false},t.config)}}var $r,dc=R(()=>{Pr();$r=class{constructor(e,r,n){let s=lm(n);this.channel=e.getSocket().channel(r,s),this.socket=e;}get state(){return this.channel.state}set state(e){this.channel.state=e;}get joinedOnce(){return this.channel.joinedOnce}get joinPush(){return this.channel.joinPush}get rejoinTimer(){return this.channel.rejoinTimer}on(e,r){return this.channel.on(e,r)}off(e,r){this.channel.off(e,r);}subscribe(e){return this.channel.join(e)}unsubscribe(e){return this.channel.leave(e)}teardown(){this.channel.teardown();}onClose(e){this.channel.onClose(e);}onError(e){return this.channel.onError(e)}push(e,r,n){let s;try{s=this.channel.push(e,r,n);}catch{throw `tried to push '${e}' to '${this.channel.topic}' before joining. Use channel.subscribe() before pushing events`}if(this.channel.pushBuffer.length>nc){let i=this.channel.pushBuffer.shift();i.cancelTimeout(),this.socket.log("channel",`discarded push due to buffer overflow: ${i.event}`,i.payload());}return s}updateJoinPayload(e){let r=this.channel.joinPush.payload();this.channel.joinPush.payload=()=>Object.assign(Object.assign({},r),e);}canPush(){return this.socket.isConnected()&&this.state===ye.joined}isJoined(){return this.state===ye.joined}isJoining(){return this.state===ye.joining}isClosed(){return this.state===ye.closed}isLeaving(){return this.state===ye.leaving}updateFilterBindings(e){this.channel.filterBindings=e;}updatePayloadTransform(e){this.channel.onMessage=e;}getChannel(){return this.channel}};});var Oi,lt,ve,Vt,$i=R(()=>{Pr();Ii();Ln();Ln();dc();(function(t){t.ALL="*",t.INSERT="INSERT",t.UPDATE="UPDATE",t.DELETE="DELETE";})(Oi||(Oi={}));(function(t){t.BROADCAST="broadcast",t.PRESENCE="presence",t.POSTGRES_CHANGES="postgres_changes",t.SYSTEM="system";})(lt||(lt={}));(function(t){t.SUBSCRIBED="SUBSCRIBED",t.TIMED_OUT="TIMED_OUT",t.CLOSED="CLOSED",t.CHANNEL_ERROR="CHANNEL_ERROR";})(ve||(ve={}));Vt=class t{get state(){return this.channelAdapter.state}set state(e){this.channelAdapter.state=e;}get joinedOnce(){return this.channelAdapter.joinedOnce}get timeout(){return this.socket.timeout}get joinPush(){return this.channelAdapter.joinPush}get rejoinTimer(){return this.channelAdapter.rejoinTimer}constructor(e,r={config:{}},n){var s,i;if(this.topic=e,this.params=r,this.socket=n,this.bindings={},this.subTopic=e.replace(/^realtime:/i,""),this.params.config=Object.assign({broadcast:{ack:false,self:false},presence:{key:"",enabled:false},private:false},r.config),this.channelAdapter=new $r(this.socket.socketAdapter,e,this.params),this.presence=new Kt(this),this._onClose(()=>{this.socket._remove(this);}),this._updateFilterTransform(),this.broadcastEndpointURL=Mn(this.socket.socketAdapter.endPointURL()),this.private=this.params.config.private||false,!this.private&&(!((i=(s=this.params.config)===null||s===void 0?void 0:s.broadcast)===null||i===void 0)&&i.replay))throw `tried to use replay on public channel '${this.topic}'. It must be a private channel.`}subscribe(e,r=this.timeout){var n,s,i;if(this.socket.isConnected()||this.socket.connect(),this.channelAdapter.isClosed()){let{config:{broadcast:o,presence:a,private:l}}=this.params,c=(s=(n=this.bindings.postgres_changes)===null||n===void 0?void 0:n.map(h=>h.filter))!==null&&s!==void 0?s:[],u=!!this.bindings[lt.PRESENCE]&&this.bindings[lt.PRESENCE].length>0||((i=this.params.config.presence)===null||i===void 0?void 0:i.enabled)===true,d={},p={broadcast:o,presence:Object.assign(Object.assign({},a),{enabled:u}),postgres_changes:c,private:l};this.socket.accessTokenValue&&(d.access_token=this.socket.accessTokenValue),this._onError(h=>{e?.(ve.CHANNEL_ERROR,h);}),this._onClose(()=>e?.(ve.CLOSED)),this.updateJoinPayload(Object.assign({config:p},d)),this._updateFilterMessage(),this.channelAdapter.subscribe(r).receive("ok",async({postgres_changes:h})=>{if(this.socket._isManualToken()||this.socket.setAuth(),h===void 0){e?.(ve.SUBSCRIBED);return}this._updatePostgresBindings(h,e);}).receive("error",h=>{this.state=ye.errored,e?.(ve.CHANNEL_ERROR,new Error(JSON.stringify(Object.values(h).join(", ")||"error")));}).receive("timeout",()=>{e?.(ve.TIMED_OUT);});}return this}_updatePostgresBindings(e,r){var n;let s=this.bindings.postgres_changes,i=(n=s?.length)!==null&&n!==void 0?n:0,o=[];for(let a=0;a<i;a++){let l=s[a],{filter:{event:c,schema:u,table:d,filter:p}}=l,h=e&&e[a];if(h&&h.event===c&&t.isFilterValueEqual(h.schema,u)&&t.isFilterValueEqual(h.table,d)&&t.isFilterValueEqual(h.filter,p))o.push(Object.assign(Object.assign({},l),{id:h.id}));else {this.unsubscribe(),this.state=ye.errored,r?.(ve.CHANNEL_ERROR,new Error("mismatch between server and client bindings for postgres changes"));return}}this.bindings.postgres_changes=o,this.state!=ye.errored&&r&&r(ve.SUBSCRIBED);}presenceState(){return this.presence.state}async track(e,r={}){return await this.send({type:"presence",event:"track",payload:e},r.timeout||this.timeout)}async untrack(e={}){return await this.send({type:"presence",event:"untrack"},e)}on(e,r,n){let s=this.channelAdapter.isJoined()||this.channelAdapter.isJoining(),i=e===lt.PRESENCE||e===lt.POSTGRES_CHANGES;if(s&&i)throw this.socket.log("channel",`cannot add \`${e}\` callbacks for ${this.topic} after \`subscribe()\`.`),new Error(`cannot add \`${e}\` callbacks for ${this.topic} after \`subscribe()\`.`);return this._on(e,r,n)}async httpSend(e,r,n={}){var s;if(r==null)return Promise.reject("Payload is required for httpSend()");let i={apikey:this.socket.apiKey?this.socket.apiKey:"","Content-Type":"application/json"};this.socket.accessTokenValue&&(i.Authorization=`Bearer ${this.socket.accessTokenValue}`);let o={method:"POST",headers:i,body:JSON.stringify({messages:[{topic:this.subTopic,event:e,payload:r,private:this.private}]})},a=await this._fetchWithTimeout(this.broadcastEndpointURL,o,(s=n.timeout)!==null&&s!==void 0?s:this.timeout);if(a.status===202)return {success:true};let l=a.statusText;try{let c=await a.json();l=c.error||c.message||l;}catch{}return Promise.reject(new Error(l))}async send(e,r={}){var n,s;if(!this.channelAdapter.canPush()&&e.type==="broadcast"){console.warn("Realtime send() is automatically falling back to REST API. This behavior will be deprecated in the future. Please use httpSend() explicitly for REST delivery.");let{event:i,payload:o}=e,a={apikey:this.socket.apiKey?this.socket.apiKey:"","Content-Type":"application/json"};this.socket.accessTokenValue&&(a.Authorization=`Bearer ${this.socket.accessTokenValue}`);let l={method:"POST",headers:a,body:JSON.stringify({messages:[{topic:this.subTopic,event:i,payload:o,private:this.private}]})};try{let c=await this._fetchWithTimeout(this.broadcastEndpointURL,l,(n=r.timeout)!==null&&n!==void 0?n:this.timeout);return await((s=c.body)===null||s===void 0?void 0:s.cancel()),c.ok?"ok":"error"}catch(c){return c.name==="AbortError"?"timed out":"error"}}else return new Promise(i=>{var o,a,l;let c=this.channelAdapter.push(e.type,e,r.timeout||this.timeout);e.type==="broadcast"&&!(!((l=(a=(o=this.params)===null||o===void 0?void 0:o.config)===null||a===void 0?void 0:a.broadcast)===null||l===void 0)&&l.ack)&&i("ok"),c.receive("ok",()=>i("ok")),c.receive("error",()=>i("error")),c.receive("timeout",()=>i("timed out"));})}updateJoinPayload(e){this.channelAdapter.updateJoinPayload(e);}async unsubscribe(e=this.timeout){return new Promise(r=>{this.channelAdapter.unsubscribe(e).receive("ok",()=>r("ok")).receive("timeout",()=>r("timed out")).receive("error",()=>r("error"));})}teardown(){this.channelAdapter.teardown();}async _fetchWithTimeout(e,r,n){let s=new AbortController,i=setTimeout(()=>s.abort(),n),o=await this.socket.fetch(e,Object.assign(Object.assign({},r),{signal:s.signal}));return clearTimeout(i),o}_on(e,r,n){let s=e.toLocaleLowerCase(),i=this.channelAdapter.on(e,n),o={type:s,filter:r,callback:n,ref:i};return this.bindings[s]?this.bindings[s].push(o):this.bindings[s]=[o],this._updateFilterMessage(),this}_onClose(e){this.channelAdapter.onClose(e);}_onError(e){this.channelAdapter.onError(e);}_updateFilterMessage(){this.channelAdapter.updateFilterBindings((e,r,n)=>{var s,i,o,a,l,c,u;let d=e.event.toLocaleLowerCase();if(this._notThisChannelEvent(d,n))return false;let p=(s=this.bindings[d])===null||s===void 0?void 0:s.find(h=>h.ref===e.ref);if(!p)return true;if(["broadcast","presence","postgres_changes"].includes(d))if("id"in p){let h=p.id,f=(i=p.filter)===null||i===void 0?void 0:i.event;return h&&((o=r.ids)===null||o===void 0?void 0:o.includes(h))&&(f==="*"||f?.toLocaleLowerCase()===((a=r.data)===null||a===void 0?void 0:a.type.toLocaleLowerCase()))}else {let h=(c=(l=p?.filter)===null||l===void 0?void 0:l.event)===null||c===void 0?void 0:c.toLocaleLowerCase();return h==="*"||h===((u=r?.event)===null||u===void 0?void 0:u.toLocaleLowerCase())}else return p.type.toLocaleLowerCase()===d});}_notThisChannelEvent(e,r){let{close:n,error:s,leave:i,join:o}=jn;return r&&[n,s,i,o].includes(e)&&r!==this.joinPush.ref}_updateFilterTransform(){this.channelAdapter.updatePayloadTransform((e,r,n)=>{if(typeof r=="object"&&"ids"in r){let s=r.data,{schema:i,table:o,commit_timestamp:a,type:l,errors:c}=s;return Object.assign(Object.assign({},{schema:i,table:o,commit_timestamp:a,eventType:l,new:{},old:{},errors:c}),this._getPayloadRecords(s))}return r});}copyBindings(e){if(this.joinedOnce)throw new Error("cannot copy bindings into joined channel");for(let r in e.bindings)for(let n of e.bindings[r])this._on(n.type,n.filter,n.callback);}static isFilterValueEqual(e,r){return (e??void 0)===(r??void 0)}_getPayloadRecords(e){let r={new:{},old:{}};return (e.type==="INSERT"||e.type==="UPDATE")&&(r.new=Ri(e.columns,e.record)),(e.type==="UPDATE"||e.type==="DELETE")&&(r.old=Ri(e.columns,e.old_record)),r}};});var Nr,pc=R(()=>{Ti();Pr();Nr=class{constructor(e,r){this.socket=new lc(e,r);}get timeout(){return this.socket.timeout}get endPoint(){return this.socket.endPoint}get transport(){return this.socket.transport}get heartbeatIntervalMs(){return this.socket.heartbeatIntervalMs}get heartbeatCallback(){return this.socket.heartbeatCallback}set heartbeatCallback(e){this.socket.heartbeatCallback=e;}get heartbeatTimer(){return this.socket.heartbeatTimer}get pendingHeartbeatRef(){return this.socket.pendingHeartbeatRef}get reconnectTimer(){return this.socket.reconnectTimer}get vsn(){return this.socket.vsn}get encode(){return this.socket.encode}get decode(){return this.socket.decode}get reconnectAfterMs(){return this.socket.reconnectAfterMs}get sendBuffer(){return this.socket.sendBuffer}get stateChangeCallbacks(){return this.socket.stateChangeCallbacks}connect(){this.socket.connect();}disconnect(e,r,n,s=1e4){return new Promise(i=>{setTimeout(()=>i("timeout"),s),this.socket.disconnect(()=>{e(),i("ok");},r,n);})}push(e){this.socket.push(e);}log(e,r,n){this.socket.log(e,r,n);}makeRef(){return this.socket.makeRef()}onOpen(e){this.socket.onOpen(e);}onClose(e){this.socket.onClose(e);}onError(e){this.socket.onError(e);}onMessage(e){this.socket.onMessage(e);}isConnected(){return this.socket.isConnected()}isConnecting(){return this.socket.connectionState()==xr.connecting}isDisconnecting(){return this.socket.connectionState()==xr.closing}connectionState(){return this.socket.connectionState()}endPointURL(){return this.socket.endPointURL()}sendHeartbeat(){this.socket.sendHeartbeat();}getSocket(){return this.socket}};});var cm,um,dm,pm,Gt,hc=R(()=>{Si();Pr();sc();Ln();$i();pc();cm={HEARTBEAT_INTERVAL:25e3,RECONNECT_DELAY:10,HEARTBEAT_TIMEOUT_FALLBACK:100},um=[1e3,2e3,5e3,1e4],dm=1e4,pm=`
13
13
  addEventListener("message", (e) => {
14
14
  if (e.data.event === "start") {
15
15
  setInterval(() => postMessage({ event: "keepAlive" }), e.data.interval);
16
16
  }
17
- });`,Vt=class{get endPoint(){return this.socketAdapter.endPoint}get timeout(){return this.socketAdapter.timeout}get transport(){return this.socketAdapter.transport}get heartbeatCallback(){return this.socketAdapter.heartbeatCallback}get heartbeatIntervalMs(){return this.socketAdapter.heartbeatIntervalMs}get heartbeatTimer(){return this.worker?this._workerHeartbeatTimer:this.socketAdapter.heartbeatTimer}get pendingHeartbeatRef(){return this.worker?this._pendingWorkerHeartbeatRef:this.socketAdapter.pendingHeartbeatRef}get reconnectTimer(){return this.socketAdapter.reconnectTimer}get vsn(){return this.socketAdapter.vsn}get encode(){return this.socketAdapter.encode}get decode(){return this.socketAdapter.decode}get reconnectAfterMs(){return this.socketAdapter.reconnectAfterMs}get sendBuffer(){return this.socketAdapter.sendBuffer}get stateChangeCallbacks(){return this.socketAdapter.stateChangeCallbacks}constructor(e,r){var n;if(this.channels=new Array,this.accessTokenValue=null,this.accessToken=null,this.apiKey=null,this.httpEndpoint="",this.headers={},this.params={},this.ref=0,this.serializer=new xr,this._manuallySetToken=false,this._authPromise=null,this._workerHeartbeatTimer=void 0,this._pendingWorkerHeartbeatRef=null,this._resolveFetch=s=>s?(...o)=>s(...o):(...o)=>fetch(...o),!(!((n=r?.params)===null||n===void 0)&&n.apikey))throw new Error("API key is required to connect to Realtime");this.apiKey=r.params.apikey;let i=this._initializeOptions(r);this.socketAdapter=new Or(e,i),this.httpEndpoint=Nn(e),this.fetch=this._resolveFetch(r?.fetch);}connect(){if(!(this.isConnecting()||this.isDisconnecting()||this.isConnected())){this.accessToken&&!this._authPromise&&this._setAuthSafely("connect"),this._setupConnectionHandlers();try{this.socketAdapter.connect();}catch(e){let r=e.message;throw r.includes("Node.js")?new Error(`${r}
17
+ });`,Gt=class{get endPoint(){return this.socketAdapter.endPoint}get timeout(){return this.socketAdapter.timeout}get transport(){return this.socketAdapter.transport}get heartbeatCallback(){return this.socketAdapter.heartbeatCallback}get heartbeatIntervalMs(){return this.socketAdapter.heartbeatIntervalMs}get heartbeatTimer(){return this.worker?this._workerHeartbeatTimer:this.socketAdapter.heartbeatTimer}get pendingHeartbeatRef(){return this.worker?this._pendingWorkerHeartbeatRef:this.socketAdapter.pendingHeartbeatRef}get reconnectTimer(){return this.socketAdapter.reconnectTimer}get vsn(){return this.socketAdapter.vsn}get encode(){return this.socketAdapter.encode}get decode(){return this.socketAdapter.decode}get reconnectAfterMs(){return this.socketAdapter.reconnectAfterMs}get sendBuffer(){return this.socketAdapter.sendBuffer}get stateChangeCallbacks(){return this.socketAdapter.stateChangeCallbacks}constructor(e,r){var n;if(this.channels=new Array,this.accessTokenValue=null,this.accessToken=null,this.apiKey=null,this.httpEndpoint="",this.headers={},this.params={},this.ref=0,this.serializer=new Tr,this._manuallySetToken=false,this._authPromise=null,this._workerHeartbeatTimer=void 0,this._pendingWorkerHeartbeatRef=null,this._resolveFetch=i=>i?(...o)=>i(...o):(...o)=>fetch(...o),!(!((n=r?.params)===null||n===void 0)&&n.apikey))throw new Error("API key is required to connect to Realtime");this.apiKey=r.params.apikey;let s=this._initializeOptions(r);this.socketAdapter=new Nr(e,s),this.httpEndpoint=Mn(e),this.fetch=this._resolveFetch(r?.fetch);}connect(){if(!(this.isConnecting()||this.isDisconnecting()||this.isConnected())){this.accessToken&&!this._authPromise&&this._setAuthSafely("connect"),this._setupConnectionHandlers();try{this.socketAdapter.connect();}catch(e){let r=e.message;throw r.includes("Node.js")?new Error(`${r}
18
18
 
19
19
  To use Realtime in Node.js, you need to provide a WebSocket implementation:
20
20
 
@@ -27,99 +27,99 @@ Option 2: Install and provide the "ws" package:
27
27
  const client = new RealtimeClient(url, {
28
28
  ...options,
29
29
  transport: ws
30
- })`):new Error(`WebSocket not available: ${r}`)}this._handleNodeJsRaceCondition();}}endpointURL(){return this.socketAdapter.endPointURL()}async disconnect(e,r){return this.isDisconnecting()?"ok":await this.socketAdapter.disconnect(()=>{clearInterval(this._workerHeartbeatTimer),this._terminateWorker();},e,r)}getChannels(){return this.channels}async removeChannel(e){let r=await e.unsubscribe();return r==="ok"&&e.teardown(),this.channels.length===0&&this.disconnect(),r}async removeAllChannels(){let e=this.channels.map(async n=>{let i=await n.unsubscribe();return n.teardown(),i}),r=await Promise.all(e);return this.disconnect(),r}log(e,r,n){this.socketAdapter.log(e,r,n);}connectionState(){return this.socketAdapter.connectionState()||Er.closed}isConnected(){return this.socketAdapter.isConnected()}isConnecting(){return this.socketAdapter.isConnecting()}isDisconnecting(){return this.socketAdapter.isDisconnecting()}channel(e,r={config:{}}){let n=`realtime:${e}`,i=this.getChannels().find(s=>s.topic===n);if(i)return i;{let s=new Kt(`realtime:${e}`,r,this);return this.channels.push(s),s}}push(e){this.socketAdapter.push(e);}async setAuth(e=null){this._authPromise=this._performAuth(e);try{await this._authPromise;}finally{this._authPromise=null;}}_isManualToken(){return this._manuallySetToken}async sendHeartbeat(){this.socketAdapter.sendHeartbeat();}onHeartbeat(e){this.socketAdapter.heartbeatCallback=this._wrapHeartbeatCallback(e);}_makeRef(){return this.socketAdapter.makeRef()}_remove(e){this.channels=this.channels.filter(r=>r.topic!==e.topic);}async _performAuth(e=null){let r,n=false;if(e)r=e,n=true;else if(this.accessToken)try{r=await this.accessToken();}catch(i){this.log("error","Error fetching access token from callback",i),r=this.accessTokenValue;}else r=this.accessTokenValue;n?this._manuallySetToken=true:this.accessToken&&(this._manuallySetToken=false),this.accessTokenValue!=r&&(this.accessTokenValue=r,this.channels.forEach(i=>{let s={access_token:r,version:Jl};r&&i.updateJoinPayload(s),i.joinedOnce&&i.channelAdapter.isJoined()&&i.channelAdapter.push($n.access_token,{access_token:r});}));}async _waitForAuthIfNeeded(){this._authPromise&&await this._authPromise;}_setAuthSafely(e="general"){this._isManualToken()||this.setAuth().catch(r=>{this.log("error",`Error setting auth in ${e}`,r);});}_setupConnectionHandlers(){this.socketAdapter.onOpen(()=>{(this._authPromise||(this.accessToken&&!this.accessTokenValue?this.setAuth():Promise.resolve())).catch(r=>{this.log("error","error waiting for auth on connect",r);}),this.worker&&!this.workerRef&&this._startWorkerHeartbeat();}),this.socketAdapter.onClose(()=>{this.worker&&this.workerRef&&this._terminateWorker();}),this.socketAdapter.onMessage(e=>{e.ref&&e.ref===this._pendingWorkerHeartbeatRef&&(this._pendingWorkerHeartbeatRef=null);});}_handleNodeJsRaceCondition(){this.socketAdapter.isConnected()&&this.socketAdapter.getSocket().onConnOpen();}_wrapHeartbeatCallback(e){return (r,n)=>{r=="sent"&&this._setAuthSafely(),e&&e(r,n);}}_startWorkerHeartbeat(){this.workerUrl?this.log("worker",`starting worker for from ${this.workerUrl}`):this.log("worker","starting default worker");let e=this._workerObjectUrl(this.workerUrl);this.workerRef=new Worker(e),this.workerRef.onerror=r=>{this.log("worker","worker error",r.message),this._terminateWorker(),this.disconnect();},this.workerRef.onmessage=r=>{r.data.event==="keepAlive"&&this.sendHeartbeat();},this.workerRef.postMessage({event:"start",interval:this.heartbeatIntervalMs});}_terminateWorker(){this.workerRef&&(this.log("worker","terminating worker"),this.workerRef.terminate(),this.workerRef=void 0);}_workerObjectUrl(e){let r;if(e)r=e;else {let n=new Blob([Xg],{type:"application/javascript"});r=URL.createObjectURL(n);}return r}_initializeOptions(e){var r,n,i,s,o,a,l,c,u;this.worker=(r=e?.worker)!==null&&r!==void 0?r:false,this.accessToken=(n=e?.accessToken)!==null&&n!==void 0?n:null;let d={};d.timeout=(i=e?.timeout)!==null&&i!==void 0?i:Gl,d.heartbeatIntervalMs=(s=e?.heartbeatIntervalMs)!==null&&s!==void 0?s:Vg.HEARTBEAT_INTERVAL,d.transport=(o=e?.transport)!==null&&o!==void 0?o:ys.getWebSocketConstructor(),d.params=e?.params,d.logger=e?.logger,d.heartbeatCallback=this._wrapHeartbeatCallback(e?.heartbeatCallback),d.reconnectAfterMs=(a=e?.reconnectAfterMs)!==null&&a!==void 0?a:(m=>Gg[m-1]||Yg);let p,f,h=(l=e?.vsn)!==null&&l!==void 0?l:Vl;switch(h){case Kl:p=(m,_)=>_(JSON.stringify(m)),f=(m,_)=>_(JSON.parse(m));break;case bs:p=this.serializer.encode.bind(this.serializer),f=this.serializer.decode.bind(this.serializer);break;default:throw new Error(`Unsupported serializer version: ${d.vsn}`)}if(d.vsn=h,d.encode=(c=e?.encode)!==null&&c!==void 0?c:p,d.decode=(u=e?.decode)!==null&&u!==void 0?u:f,d.beforeReconnect=this._reconnectAuth.bind(this),(e?.logLevel||e?.log_level)&&(this.logLevel=e.logLevel||e.log_level,d.params=Object.assign(Object.assign({},d.params),{log_level:this.logLevel})),this.worker){if(typeof window<"u"&&!window.Worker)throw new Error("Web Worker is not supported");this.workerUrl=e?.workerUrl,d.autoSendHeartbeat=!this.worker;}return d}async _reconnectAuth(){await this._waitForAuthIfNeeded(),this.isConnected()||this.connect();}};});var Is=R(()=>{oc();As();Ps();ks();});function Zg(t,e,r){let n=new URL(e,t);if(r)for(let[i,s]of Object.entries(r))s!==void 0&&n.searchParams.set(i,s);return n.toString()}async function Qg(t){return !t||t.type==="none"?{}:t.type==="bearer"?{Authorization:`Bearer ${t.token}`}:t.type==="header"?{[t.name]:t.value}:t.type==="custom"?await t.getHeaders():{}}function em(t){let e=t.fetchImpl??globalThis.fetch;return {async request({method:r,path:n,query:i,body:s,headers:o}){let a=Zg(t.baseUrl,n,i),l=await Qg(t.auth),c=await e(a,{method:r,headers:{...s?{"Content-Type":"application/json"}:{},...l,...o},body:s?JSON.stringify(s):void 0}),u=await c.text(),d=(c.headers.get("content-type")||"").includes("application/json"),p=d&&u?JSON.parse(u):u;if(!c.ok){let f=d?p:void 0,h=f?.error;throw new $r(h?.message??`Request failed with status ${c.status}`,{status:c.status,icebergType:h?.type,icebergCode:h?.code,details:f})}return {status:c.status,headers:c.headers,data:p}}}}function Wn(t){return t.join("")}function Gt(t){return t.join("")}var $r,tm,rm,ac,lc=R(()=>{$r=class extends Error{constructor(t,e){super(t),this.name="IcebergError",this.status=e.status,this.icebergType=e.icebergType,this.icebergCode=e.icebergCode,this.details=e.details,this.isCommitStateUnknown=e.icebergType==="CommitStateUnknownException"||[500,502,504].includes(e.status)&&e.icebergType?.includes("CommitState")===true;}isNotFound(){return this.status===404}isConflict(){return this.status===409}isAuthenticationTimeout(){return this.status===419}};tm=class{constructor(t,e=""){this.client=t,this.prefix=e;}async listNamespaces(t){let e=t?{parent:Wn(t.namespace)}:void 0;return (await this.client.request({method:"GET",path:`${this.prefix}/namespaces`,query:e})).data.namespaces.map(n=>({namespace:n}))}async createNamespace(t,e){let r={namespace:t.namespace,properties:e?.properties};return (await this.client.request({method:"POST",path:`${this.prefix}/namespaces`,body:r})).data}async dropNamespace(t){await this.client.request({method:"DELETE",path:`${this.prefix}/namespaces/${Wn(t.namespace)}`});}async loadNamespaceMetadata(t){return {properties:(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${Wn(t.namespace)}`})).data.properties}}async namespaceExists(t){try{return await this.client.request({method:"HEAD",path:`${this.prefix}/namespaces/${Wn(t.namespace)}`}),!0}catch(e){if(e instanceof $r&&e.status===404)return false;throw e}}async createNamespaceIfNotExists(t,e){try{return await this.createNamespace(t,e)}catch(r){if(r instanceof $r&&r.status===409)return;throw r}}};rm=class{constructor(t,e="",r){this.client=t,this.prefix=e,this.accessDelegation=r;}async listTables(t){return (await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${Gt(t.namespace)}/tables`})).data.identifiers}async createTable(t,e){let r={};return this.accessDelegation&&(r["X-Iceberg-Access-Delegation"]=this.accessDelegation),(await this.client.request({method:"POST",path:`${this.prefix}/namespaces/${Gt(t.namespace)}/tables`,body:e,headers:r})).data.metadata}async updateTable(t,e){let r=await this.client.request({method:"POST",path:`${this.prefix}/namespaces/${Gt(t.namespace)}/tables/${t.name}`,body:e});return {"metadata-location":r.data["metadata-location"],metadata:r.data.metadata}}async dropTable(t,e){await this.client.request({method:"DELETE",path:`${this.prefix}/namespaces/${Gt(t.namespace)}/tables/${t.name}`,query:{purgeRequested:String(e?.purge??false)}});}async loadTable(t){let e={};return this.accessDelegation&&(e["X-Iceberg-Access-Delegation"]=this.accessDelegation),(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${Gt(t.namespace)}/tables/${t.name}`,headers:e})).data.metadata}async tableExists(t){let e={};this.accessDelegation&&(e["X-Iceberg-Access-Delegation"]=this.accessDelegation);try{return await this.client.request({method:"HEAD",path:`${this.prefix}/namespaces/${Gt(t.namespace)}/tables/${t.name}`,headers:e}),!0}catch(r){if(r instanceof $r&&r.status===404)return false;throw r}}async createTableIfNotExists(t,e){try{return await this.createTable(t,e)}catch(r){if(r instanceof $r&&r.status===409)return await this.loadTable({namespace:t.namespace,name:e.name});throw r}}},ac=class{constructor(t){let e="v1";t.catalogName&&(e+=`/${t.catalogName}`);let r=t.baseUrl.endsWith("/")?t.baseUrl:`${t.baseUrl}/`;this.client=em({baseUrl:r,auth:t.auth,fetchImpl:t.fetch}),this.accessDelegation=t.accessDelegation?.join(","),this.namespaceOps=new tm(this.client,e),this.tableOps=new rm(this.client,e,this.accessDelegation);}async listNamespaces(t){return this.namespaceOps.listNamespaces(t)}async createNamespace(t,e){return this.namespaceOps.createNamespace(t,e)}async dropNamespace(t){await this.namespaceOps.dropNamespace(t);}async loadNamespaceMetadata(t){return this.namespaceOps.loadNamespaceMetadata(t)}async listTables(t){return this.tableOps.listTables(t)}async createTable(t,e){return this.tableOps.createTable(t,e)}async updateTable(t,e){return this.tableOps.updateTable(t,e)}async dropTable(t,e){await this.tableOps.dropTable(t,e);}async loadTable(t){return this.tableOps.loadTable(t)}async namespaceExists(t){return this.namespaceOps.namespaceExists(t)}async tableExists(t){return this.tableOps.tableExists(t)}async createNamespaceIfNotExists(t,e){return this.namespaceOps.createNamespaceIfNotExists(t,e)}async createTableIfNotExists(t,e){return this.tableOps.createTableIfNotExists(t,e)}};});function Dr(t){"@babel/helpers - typeof";return Dr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Dr(t)}function nm(t,e){if(Dr(t)!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e);if(Dr(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return (e==="string"?String:Number)(t)}function im(t){var e=nm(t,"string");return Dr(e)=="symbol"?e:e+""}function sm(t,e,r){return (e=im(e))in t?Object.defineProperty(t,e,{value:r,enumerable:true,configurable:true,writable:true}):t[e]=r,t}function cc(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),r.push.apply(r,n);}return r}function E(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?cc(Object(r),true).forEach(function(n){sm(t,n,r[n]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):cc(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n));});}return t}function Hn(t){return typeof t=="object"&&t!==null&&"__isStorageError"in t}function dm(t,e,r){let n=E({},t);for(let i of Object.keys(n))i.toLowerCase()===e.toLowerCase()&&delete n[i];return n[e]=r,n}async function Nr(t,e,r,n,i,s,o){return new Promise((a,l)=>{t(r,um(e,n,i,s)).then(c=>{if(!c.ok)throw c;if(n?.noResolveJson)return c;if(o==="vectors"){let u=c.headers.get("content-type");if(c.headers.get("content-length")==="0"||c.status===204)return {};if(!u||!u.includes("application/json"))return {}}return c.json()}).then(c=>a(c)).catch(c=>cm(c,l,n,o));})}function fc(t="storage"){return {get:async(e,r,n,i)=>Nr(e,"GET",r,n,i,void 0,t),post:async(e,r,n,i,s)=>Nr(e,"POST",r,i,s,n,t),put:async(e,r,n,i,s)=>Nr(e,"PUT",r,i,s,n,t),head:async(e,r,n,i)=>Nr(e,"HEAD",r,E(E({},n),{},{noResolveJson:true}),i,void 0,t),remove:async(e,r,n,i,s)=>Nr(e,"DELETE",r,i,s,n,t)}}var Fn,Bn,pc,om,am,Os,lm,uc,cm,um,pm,jr,ge,$s,fm,Ns,re,Yt,hm,hc,gm,mm,dc,_m,wm,Mr,ym,km,bm,vm,Sm,Cm,Em,Rm,gc,mc=R(()=>{lc();Fn=class extends Error{constructor(t,e="storage",r,n){super(t),this.__isStorageError=true,this.namespace=e,this.name=e==="vectors"?"StorageVectorsError":"StorageError",this.status=r,this.statusCode=n;}toJSON(){return {name:this.name,message:this.message,status:this.status,statusCode:this.statusCode}}};Bn=class extends Fn{constructor(t,e,r,n="storage"){super(t,n,e,r),this.name=n==="vectors"?"StorageVectorsApiError":"StorageApiError",this.status=e,this.statusCode=r;}toJSON(){return E({},super.toJSON())}},pc=class extends Fn{constructor(t,e,r="storage"){super(t,r),this.name=r==="vectors"?"StorageVectorsUnknownError":"StorageUnknownError",this.originalError=e;}},om=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),am=t=>{if(typeof t!="object"||t===null)return false;let e=Object.getPrototypeOf(t);return (e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Symbol.toStringTag in t)&&!(Symbol.iterator in t)},Os=t=>{if(Array.isArray(t))return t.map(r=>Os(r));if(typeof t=="function"||t!==Object(t))return t;let e={};return Object.entries(t).forEach(([r,n])=>{let i=r.replace(/([-_][a-z])/gi,s=>s.toUpperCase().replace(/[-_]/g,""));e[i]=Os(n);}),e},lm=t=>!t||typeof t!="string"||t.length===0||t.length>100||t.trim()!==t||t.includes("/")||t.includes("\\")?false:/^[\w!.\*'() &$@=;:+,?-]+$/.test(t),uc=t=>{var e;return t.msg||t.message||t.error_description||(typeof t.error=="string"?t.error:(e=t.error)===null||e===void 0?void 0:e.message)||JSON.stringify(t)},cm=async(t,e,r,n)=>{if(t!==null&&typeof t=="object"&&typeof t.json=="function"){let i=t,s=parseInt(i.status,10);Number.isFinite(s)||(s=500),i.json().then(o=>{let a=o?.statusCode||o?.code||s+"";e(new Bn(uc(o),s,a,n));}).catch(()=>{let o=s+"";e(new Bn(i.statusText||`HTTP ${s} error`,s,o,n));});}else e(new pc(uc(t),t,n));},um=(t,e,r,n)=>{let i={method:t,headers:e?.headers||{}};if(t==="GET"||t==="HEAD"||!n)return E(E({},i),r);if(am(n)){var s;let o=e?.headers||{},a;for(let[l,c]of Object.entries(o))l.toLowerCase()==="content-type"&&(a=c);i.headers=dm(o,"Content-Type",(s=a)!==null&&s!==void 0?s:"application/json"),i.body=JSON.stringify(n);}else i.body=n;return e?.duplex&&(i.duplex=e.duplex),E(E({},i),r)};pm=fc("storage"),{get:jr,post:ge,put:$s,head:fm,remove:Ns}=pm,re=fc("vectors"),Yt=class{constructor(t,e={},r,n="storage"){this.shouldThrowOnError=false,this.url=t,this.headers=Object.fromEntries(Object.entries(e).map(([i,s])=>[i.toLowerCase(),s])),this.fetch=om(r),this.namespace=n;}throwOnError(){return this.shouldThrowOnError=true,this}setHeader(t,e){return this.headers=E(E({},this.headers),{},{[t.toLowerCase()]:e}),this}async handleOperation(t){var e=this;try{return {data:await t(),error:null}}catch(r){if(e.shouldThrowOnError)throw r;if(Hn(r))return {data:null,error:r};throw r}}},hm=class{constructor(t,e){this.downloadFn=t,this.shouldThrowOnError=e;}then(t,e){return this.execute().then(t,e)}async execute(){var t=this;try{return {data:(await t.downloadFn()).body,error:null}}catch(e){if(t.shouldThrowOnError)throw e;if(Hn(e))return {data:null,error:e};throw e}}};hc=Symbol.toStringTag;gm=class{constructor(t,e){this.downloadFn=t,this.shouldThrowOnError=e,this[hc]="BlobDownloadBuilder",this.promise=null;}asStream(){return new hm(this.downloadFn,this.shouldThrowOnError)}then(t,e){return this.getPromise().then(t,e)}catch(t){return this.getPromise().catch(t)}finally(t){return this.getPromise().finally(t)}getPromise(){return this.promise||(this.promise=this.execute()),this.promise}async execute(){var t=this;try{return {data:await(await t.downloadFn()).blob(),error:null}}catch(e){if(t.shouldThrowOnError)throw e;if(Hn(e))return {data:null,error:e};throw e}}},mm={limit:100,offset:0,sortBy:{column:"name",order:"asc"}},dc={cacheControl:"3600",contentType:"text/plain;charset=UTF-8",upsert:false},_m=class extends Yt{constructor(t,e={},r,n){super(t,e,n,"storage"),this.bucketId=r;}async uploadOrUpdate(t,e,r,n){var i=this;return i.handleOperation(async()=>{let s,o=E(E({},dc),n),a=E(E({},i.headers),t==="POST"&&{"x-upsert":String(o.upsert)}),l=o.metadata;typeof Blob<"u"&&r instanceof Blob?(s=new FormData,s.append("cacheControl",o.cacheControl),l&&s.append("metadata",i.encodeMetadata(l)),s.append("",r)):typeof FormData<"u"&&r instanceof FormData?(s=r,s.has("cacheControl")||s.append("cacheControl",o.cacheControl),l&&!s.has("metadata")&&s.append("metadata",i.encodeMetadata(l))):(s=r,a["cache-control"]=`max-age=${o.cacheControl}`,a["content-type"]=o.contentType,l&&(a["x-metadata"]=i.toBase64(i.encodeMetadata(l))),(typeof ReadableStream<"u"&&s instanceof ReadableStream||s&&typeof s=="object"&&"pipe"in s&&typeof s.pipe=="function")&&!o.duplex&&(o.duplex="half")),n?.headers&&(a=E(E({},a),n.headers));let c=i._removeEmptyFolders(e),u=i._getFinalPath(c),d=await(t=="PUT"?$s:ge)(i.fetch,`${i.url}/object/${u}`,s,E({headers:a},o?.duplex?{duplex:o.duplex}:{}));return {path:c,id:d.Id,fullPath:d.Key}})}async upload(t,e,r){return this.uploadOrUpdate("POST",t,e,r)}async uploadToSignedUrl(t,e,r,n){var i=this;let s=i._removeEmptyFolders(t),o=i._getFinalPath(s),a=new URL(i.url+`/object/upload/sign/${o}`);return a.searchParams.set("token",e),i.handleOperation(async()=>{let l,c=E(E({},dc),n),u=E(E({},i.headers),{"x-upsert":String(c.upsert)});return typeof Blob<"u"&&r instanceof Blob?(l=new FormData,l.append("cacheControl",c.cacheControl),l.append("",r)):typeof FormData<"u"&&r instanceof FormData?(l=r,l.append("cacheControl",c.cacheControl)):(l=r,u["cache-control"]=`max-age=${c.cacheControl}`,u["content-type"]=c.contentType),{path:s,fullPath:(await $s(i.fetch,a.toString(),l,{headers:u})).Key}})}async createSignedUploadUrl(t,e){var r=this;return r.handleOperation(async()=>{let n=r._getFinalPath(t),i=E({},r.headers);e?.upsert&&(i["x-upsert"]="true");let s=await ge(r.fetch,`${r.url}/object/upload/sign/${n}`,{},{headers:i}),o=new URL(r.url+s.url),a=o.searchParams.get("token");if(!a)throw new Fn("No token returned by API");return {signedUrl:o.toString(),path:t,token:a}})}async update(t,e,r){return this.uploadOrUpdate("PUT",t,e,r)}async move(t,e,r){var n=this;return n.handleOperation(async()=>await ge(n.fetch,`${n.url}/object/move`,{bucketId:n.bucketId,sourceKey:t,destinationKey:e,destinationBucket:r?.destinationBucket},{headers:n.headers}))}async copy(t,e,r){var n=this;return n.handleOperation(async()=>({path:(await ge(n.fetch,`${n.url}/object/copy`,{bucketId:n.bucketId,sourceKey:t,destinationKey:e,destinationBucket:r?.destinationBucket},{headers:n.headers})).Key}))}async createSignedUrl(t,e,r){var n=this;return n.handleOperation(async()=>{let i=n._getFinalPath(t),s=typeof r?.transform=="object"&&r.transform!==null&&Object.keys(r.transform).length>0,o=await ge(n.fetch,`${n.url}/object/sign/${i}`,E({expiresIn:e},s?{transform:r.transform}:{}),{headers:n.headers}),a=new URLSearchParams;r?.download&&a.set("download",r.download===true?"":r.download),r?.cacheNonce!=null&&a.set("cacheNonce",String(r.cacheNonce));let l=a.toString();return {signedUrl:encodeURI(`${n.url}${o.signedURL}${l?`&${l}`:""}`)}})}async createSignedUrls(t,e,r){var n=this;return n.handleOperation(async()=>{let i=await ge(n.fetch,`${n.url}/object/sign/${n.bucketId}`,{expiresIn:e,paths:t},{headers:n.headers}),s=new URLSearchParams;r?.download&&s.set("download",r.download===true?"":r.download),r?.cacheNonce!=null&&s.set("cacheNonce",String(r.cacheNonce));let o=s.toString();return i.map(a=>E(E({},a),{},{signedUrl:a.signedURL?encodeURI(`${n.url}${a.signedURL}${o?`&${o}`:""}`):null}))})}download(t,e,r){let n=typeof e?.transform=="object"&&e.transform!==null&&Object.keys(e.transform).length>0?"render/image/authenticated":"object",i=new URLSearchParams;e?.transform&&this.applyTransformOptsToQuery(i,e.transform),e?.cacheNonce!=null&&i.set("cacheNonce",String(e.cacheNonce));let s=i.toString(),o=this._getFinalPath(t),a=()=>jr(this.fetch,`${this.url}/${n}/${o}${s?`?${s}`:""}`,{headers:this.headers,noResolveJson:true},r);return new gm(a,this.shouldThrowOnError)}async info(t){var e=this;let r=e._getFinalPath(t);return e.handleOperation(async()=>Os(await jr(e.fetch,`${e.url}/object/info/${r}`,{headers:e.headers})))}async exists(t){var e=this;let r=e._getFinalPath(t);try{return await fm(e.fetch,`${e.url}/object/${r}`,{headers:e.headers}),{data:!0,error:null}}catch(i){if(e.shouldThrowOnError)throw i;if(Hn(i)){var n;let s=i instanceof Bn?i.status:i instanceof pc?(n=i.originalError)===null||n===void 0?void 0:n.status:void 0;if(s!==void 0&&[400,404].includes(s))return {data:false,error:i}}throw i}}getPublicUrl(t,e){let r=this._getFinalPath(t),n=new URLSearchParams;e?.download&&n.set("download",e.download===true?"":e.download),e?.transform&&this.applyTransformOptsToQuery(n,e.transform),e?.cacheNonce!=null&&n.set("cacheNonce",String(e.cacheNonce));let i=n.toString(),s=typeof e?.transform=="object"&&e.transform!==null&&Object.keys(e.transform).length>0?"render/image":"object";return {data:{publicUrl:encodeURI(`${this.url}/${s}/public/${r}`)+(i?`?${i}`:"")}}}async remove(t){var e=this;return e.handleOperation(async()=>await Ns(e.fetch,`${e.url}/object/${e.bucketId}`,{prefixes:t},{headers:e.headers}))}async list(t,e,r){var n=this;return n.handleOperation(async()=>{let i=E(E(E({},mm),e),{},{prefix:t||""});return await ge(n.fetch,`${n.url}/object/list/${n.bucketId}`,i,{headers:n.headers},r)})}async listV2(t,e){var r=this;return r.handleOperation(async()=>{let n=E({},t);return await ge(r.fetch,`${r.url}/object/list-v2/${r.bucketId}`,n,{headers:r.headers},e)})}encodeMetadata(t){return JSON.stringify(t)}toBase64(t){return typeof Buffer<"u"?Buffer.from(t).toString("base64"):btoa(t)}_getFinalPath(t){return `${this.bucketId}/${t.replace(/^\/+/,"")}`}_removeEmptyFolders(t){return t.replace(/^\/|\/$/g,"").replace(/\/+/g,"/")}applyTransformOptsToQuery(t,e){return e.width&&t.set("width",e.width.toString()),e.height&&t.set("height",e.height.toString()),e.resize&&t.set("resize",e.resize),e.format&&t.set("format",e.format),e.quality&&t.set("quality",e.quality.toString()),t}},wm="2.103.2",Mr={"X-Client-Info":`storage-js/${wm}`},ym=class extends Yt{constructor(t,e={},r,n){let i=new URL(t);n?.useNewHostname&&/supabase\.(co|in|red)$/.test(i.hostname)&&!i.hostname.includes("storage.supabase.")&&(i.hostname=i.hostname.replace("supabase.","storage.supabase."));let s=i.href.replace(/\/$/,""),o=E(E({},Mr),e);super(s,o,r,"storage");}async listBuckets(t){var e=this;return e.handleOperation(async()=>{let r=e.listBucketOptionsToQueryString(t);return await jr(e.fetch,`${e.url}/bucket${r}`,{headers:e.headers})})}async getBucket(t){var e=this;return e.handleOperation(async()=>await jr(e.fetch,`${e.url}/bucket/${t}`,{headers:e.headers}))}async createBucket(t,e={public:false}){var r=this;return r.handleOperation(async()=>await ge(r.fetch,`${r.url}/bucket`,{id:t,name:t,type:e.type,public:e.public,file_size_limit:e.fileSizeLimit,allowed_mime_types:e.allowedMimeTypes},{headers:r.headers}))}async updateBucket(t,e){var r=this;return r.handleOperation(async()=>await $s(r.fetch,`${r.url}/bucket/${t}`,{id:t,name:t,public:e.public,file_size_limit:e.fileSizeLimit,allowed_mime_types:e.allowedMimeTypes},{headers:r.headers}))}async emptyBucket(t){var e=this;return e.handleOperation(async()=>await ge(e.fetch,`${e.url}/bucket/${t}/empty`,{},{headers:e.headers}))}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await Ns(e.fetch,`${e.url}/bucket/${t}`,{},{headers:e.headers}))}listBucketOptionsToQueryString(t){let e={};return t&&("limit"in t&&(e.limit=String(t.limit)),"offset"in t&&(e.offset=String(t.offset)),t.search&&(e.search=t.search),t.sortColumn&&(e.sortColumn=t.sortColumn),t.sortOrder&&(e.sortOrder=t.sortOrder)),Object.keys(e).length>0?"?"+new URLSearchParams(e).toString():""}},km=class extends Yt{constructor(t,e={},r){let n=t.replace(/\/$/,""),i=E(E({},Mr),e);super(n,i,r,"storage");}async createBucket(t){var e=this;return e.handleOperation(async()=>await ge(e.fetch,`${e.url}/bucket`,{name:t},{headers:e.headers}))}async listBuckets(t){var e=this;return e.handleOperation(async()=>{let r=new URLSearchParams;t?.limit!==void 0&&r.set("limit",t.limit.toString()),t?.offset!==void 0&&r.set("offset",t.offset.toString()),t?.sortColumn&&r.set("sortColumn",t.sortColumn),t?.sortOrder&&r.set("sortOrder",t.sortOrder),t?.search&&r.set("search",t.search);let n=r.toString(),i=n?`${e.url}/bucket?${n}`:`${e.url}/bucket`;return await jr(e.fetch,i,{headers:e.headers})})}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await Ns(e.fetch,`${e.url}/bucket/${t}`,{},{headers:e.headers}))}from(t){var e=this;if(!lm(t))throw new Fn("Invalid bucket name: File, folder, and bucket names must follow AWS object key naming guidelines and should avoid the use of any other characters.");let r=new ac({baseUrl:this.url,catalogName:t,auth:{type:"custom",getHeaders:async()=>e.headers},fetch:this.fetch}),n=this.shouldThrowOnError;return new Proxy(r,{get(i,s){let o=i[s];return typeof o!="function"?o:async(...a)=>{try{return {data:await o.apply(i,a),error:null}}catch(l){if(n)throw l;return {data:null,error:l}}}}})}},bm=class extends Yt{constructor(t,e={},r){let n=t.replace(/\/$/,""),i=E(E({},Mr),{},{"Content-Type":"application/json"},e);super(n,i,r,"vectors");}async createIndex(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/CreateIndex`,t,{headers:e.headers})||{})}async getIndex(t,e){var r=this;return r.handleOperation(async()=>await re.post(r.fetch,`${r.url}/GetIndex`,{vectorBucketName:t,indexName:e},{headers:r.headers}))}async listIndexes(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/ListIndexes`,t,{headers:e.headers}))}async deleteIndex(t,e){var r=this;return r.handleOperation(async()=>await re.post(r.fetch,`${r.url}/DeleteIndex`,{vectorBucketName:t,indexName:e},{headers:r.headers})||{})}},vm=class extends Yt{constructor(t,e={},r){let n=t.replace(/\/$/,""),i=E(E({},Mr),{},{"Content-Type":"application/json"},e);super(n,i,r,"vectors");}async putVectors(t){var e=this;if(t.vectors.length<1||t.vectors.length>500)throw new Error("Vector batch size must be between 1 and 500 items");return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/PutVectors`,t,{headers:e.headers})||{})}async getVectors(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/GetVectors`,t,{headers:e.headers}))}async listVectors(t){var e=this;if(t.segmentCount!==void 0){if(t.segmentCount<1||t.segmentCount>16)throw new Error("segmentCount must be between 1 and 16");if(t.segmentIndex!==void 0&&(t.segmentIndex<0||t.segmentIndex>=t.segmentCount))throw new Error(`segmentIndex must be between 0 and ${t.segmentCount-1}`)}return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/ListVectors`,t,{headers:e.headers}))}async queryVectors(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/QueryVectors`,t,{headers:e.headers}))}async deleteVectors(t){var e=this;if(t.keys.length<1||t.keys.length>500)throw new Error("Keys batch size must be between 1 and 500 items");return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/DeleteVectors`,t,{headers:e.headers})||{})}},Sm=class extends Yt{constructor(t,e={},r){let n=t.replace(/\/$/,""),i=E(E({},Mr),{},{"Content-Type":"application/json"},e);super(n,i,r,"vectors");}async createBucket(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/CreateVectorBucket`,{vectorBucketName:t},{headers:e.headers})||{})}async getBucket(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/GetVectorBucket`,{vectorBucketName:t},{headers:e.headers}))}async listBuckets(t={}){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/ListVectorBuckets`,t,{headers:e.headers}))}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/DeleteVectorBucket`,{vectorBucketName:t},{headers:e.headers})||{})}},Cm=class extends Sm{constructor(t,e={}){super(t,e.headers||{},e.fetch);}from(t){return new Em(this.url,this.headers,t,this.fetch)}async createBucket(t){var e=()=>super.createBucket,r=this;return e().call(r,t)}async getBucket(t){var e=()=>super.getBucket,r=this;return e().call(r,t)}async listBuckets(t={}){var e=()=>super.listBuckets,r=this;return e().call(r,t)}async deleteBucket(t){var e=()=>super.deleteBucket,r=this;return e().call(r,t)}},Em=class extends bm{constructor(t,e,r,n){super(t,e,n),this.vectorBucketName=r;}async createIndex(t){var e=()=>super.createIndex,r=this;return e().call(r,E(E({},t),{},{vectorBucketName:r.vectorBucketName}))}async listIndexes(t={}){var e=()=>super.listIndexes,r=this;return e().call(r,E(E({},t),{},{vectorBucketName:r.vectorBucketName}))}async getIndex(t){var e=()=>super.getIndex,r=this;return e().call(r,r.vectorBucketName,t)}async deleteIndex(t){var e=()=>super.deleteIndex,r=this;return e().call(r,r.vectorBucketName,t)}index(t){return new Rm(this.url,this.headers,this.vectorBucketName,t,this.fetch)}},Rm=class extends vm{constructor(t,e,r,n,i){super(t,e,i),this.vectorBucketName=r,this.indexName=n;}async putVectors(t){var e=()=>super.putVectors,r=this;return e().call(r,E(E({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}async getVectors(t){var e=()=>super.getVectors,r=this;return e().call(r,E(E({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}async listVectors(t={}){var e=()=>super.listVectors,r=this;return e().call(r,E(E({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}async queryVectors(t){var e=()=>super.queryVectors,r=this;return e().call(r,E(E({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}async deleteVectors(t){var e=()=>super.deleteVectors,r=this;return e().call(r,E(E({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}},gc=class extends ym{constructor(t,e={},r,n){super(t,e,r,n);}from(t){return new _m(this.url,this.headers,t,this.fetch)}get vectors(){return new Cm(this.url+"/vector",{headers:this.headers,fetch:this.fetch})}get analytics(){return new km(this.url+"/iceberg",this.headers,this.fetch)}};});var qn,Ds=R(()=>{qn="2.103.2";});var lt,zn,Jn,_c,wc,yc,Lr,js,kc,bc,Kn=R(()=>{Ds();lt=30*1e3,zn=3,Jn=zn*lt,_c="http://localhost:9999",wc="supabase.auth.token",yc={"X-Client-Info":`gotrue-js/${qn}`},Lr="X-Supabase-Api-Version",js={"2024-01-01":{timestamp:Date.parse("2024-01-01T00:00:00.0Z"),name:"2024-01-01"}},kc=/^([a-z0-9_-]{4})*($|[a-z0-9_-]{3}$|[a-z0-9_-]{2}$)$/i,bc=600*1e3;});function v(t){return typeof t=="object"&&t!==null&&"__isAuthError"in t}function vc(t){return v(t)&&t.name==="AuthApiError"}function Br(t){return v(t)&&t.name==="AuthSessionMissingError"}function Sc(t){return v(t)&&t.name==="AuthImplicitGrantRedirectError"}function Yn(t){return v(t)&&t.name==="AuthRetryableFetchError"}var Je,Vn,ue,me,J,Ne,ct,ut,Ur,Gn,Xt,Wr,dt,pt=R(()=>{Je=class extends Error{constructor(e,r,n){super(e),this.__isAuthError=true,this.name="AuthError",this.status=r,this.code=n;}toJSON(){return {name:this.name,message:this.message,status:this.status,code:this.code}}};Vn=class extends Je{constructor(e,r,n){super(e,r,n),this.name="AuthApiError",this.status=r,this.code=n;}};ue=class extends Je{constructor(e,r){super(e),this.name="AuthUnknownError",this.originalError=r;}},me=class extends Je{constructor(e,r,n,i){super(e,n,i),this.name=r,this.status=n;}},J=class extends me{constructor(){super("Auth session missing!","AuthSessionMissingError",400,void 0);}};Ne=class extends me{constructor(){super("Auth session or user missing","AuthInvalidTokenResponseError",500,void 0);}},ct=class extends me{constructor(e){super(e,"AuthInvalidCredentialsError",400,void 0);}},ut=class extends me{constructor(e,r=null){super(e,"AuthImplicitGrantRedirectError",500,void 0),this.details=null,this.details=r;}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{details:this.details})}};Ur=class extends me{constructor(e,r=null){super(e,"AuthPKCEGrantCodeExchangeError",500,void 0),this.details=null,this.details=r;}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{details:this.details})}},Gn=class extends me{constructor(){super("PKCE code verifier not found in storage. This can happen if the auth flow was initiated in a different browser or device, or if the storage was cleared. For SSR frameworks (Next.js, SvelteKit, etc.), use @supabase/ssr on both the server and client to store the code verifier in cookies.","AuthPKCECodeVerifierMissingError",400,"pkce_code_verifier_not_found");}},Xt=class extends me{constructor(e,r){super(e,"AuthRetryableFetchError",r,void 0);}};Wr=class extends me{constructor(e,r,n){super(e,"AuthWeakPasswordError",r,"weak_password"),this.reasons=n;}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{reasons:this.reasons})}},dt=class extends me{constructor(e){super(e,"AuthInvalidJwtError",400,"invalid_jwt");}};});function Ec(t,e,r){if(t!==null)for(e.queue=e.queue<<8|t,e.queuedBits+=8;e.queuedBits>=6;){let n=e.queue>>e.queuedBits-6&63;r(Xn[n]),e.queuedBits-=6;}else if(e.queuedBits>0)for(e.queue=e.queue<<6-e.queuedBits,e.queuedBits=6;e.queuedBits>=6;){let n=e.queue>>e.queuedBits-6&63;r(Xn[n]),e.queuedBits-=6;}}function Rc(t,e,r){let n=xm[t];if(n>-1)for(e.queue=e.queue<<6|n,e.queuedBits+=6;e.queuedBits>=8;)r(e.queue>>e.queuedBits-8&255),e.queuedBits-=8;else {if(n===-2)return;throw new Error(`Invalid Base64-URL character "${String.fromCharCode(t)}"`)}}function Ms(t){let e=[],r=o=>{e.push(String.fromCodePoint(o));},n={utf8seq:0,codepoint:0},i={queue:0,queuedBits:0},s=o=>{Am(o,n,r);};for(let o=0;o<t.length;o+=1)Rc(t.charCodeAt(o),i,s);return e.join("")}function Pm(t,e){if(t<=127){e(t);return}else if(t<=2047){e(192|t>>6),e(128|t&63);return}else if(t<=65535){e(224|t>>12),e(128|t>>6&63),e(128|t&63);return}else if(t<=1114111){e(240|t>>18),e(128|t>>12&63),e(128|t>>6&63),e(128|t&63);return}throw new Error(`Unrecognized Unicode codepoint: ${t.toString(16)}`)}function Tm(t,e){for(let r=0;r<t.length;r+=1){let n=t.charCodeAt(r);if(n>55295&&n<=56319){let i=(n-55296)*1024&65535;n=(t.charCodeAt(r+1)-56320&65535|i)+65536,r+=1;}Pm(n,e);}}function Am(t,e,r){if(e.utf8seq===0){if(t<=127){r(t);return}for(let n=1;n<6;n+=1)if((t>>7-n&1)===0){e.utf8seq=n;break}if(e.utf8seq===2)e.codepoint=t&31;else if(e.utf8seq===3)e.codepoint=t&15;else if(e.utf8seq===4)e.codepoint=t&7;else throw new Error("Invalid UTF-8 sequence");e.utf8seq-=1;}else if(e.utf8seq>0){if(t<=127)throw new Error("Invalid UTF-8 sequence");e.codepoint=e.codepoint<<6|t&63,e.utf8seq-=1,e.utf8seq===0&&r(e.codepoint);}}function Ke(t){let e=[],r={queue:0,queuedBits:0},n=i=>{e.push(i);};for(let i=0;i<t.length;i+=1)Rc(t.charCodeAt(i),r,n);return new Uint8Array(e)}function xc(t){let e=[];return Tm(t,r=>e.push(r)),new Uint8Array(e)}function De(t){let e=[],r={queue:0,queuedBits:0},n=i=>{e.push(i);};return t.forEach(i=>Ec(i,r,n)),Ec(null,r,n),e.join("")}var Xn,Cc,xm,Zn=R(()=>{Xn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".split(""),Cc=`
31
- \r=`.split(""),xm=(()=>{let t=new Array(128);for(let e=0;e<t.length;e+=1)t[e]=-1;for(let e=0;e<Cc.length;e+=1)t[Cc[e].charCodeAt(0)]=-2;for(let e=0;e<Xn.length;e+=1)t[Xn[e].charCodeAt(0)]=e;return t})();});function Pc(t){return Math.round(Date.now()/1e3)+t}function Tc(){return Symbol("auth-callback")}function Ac(t){let e={},r=new URL(t);if(r.hash&&r.hash[0]==="#")try{new URLSearchParams(r.hash.substring(1)).forEach((i,s)=>{e[s]=i;});}catch{}return r.searchParams.forEach((n,i)=>{e[i]=n;}),e}function Hr(t){let e=t.split(".");if(e.length!==3)throw new dt("Invalid JWT structure");for(let n=0;n<e.length;n++)if(!kc.test(e[n]))throw new dt("JWT not in base64url format");return {header:JSON.parse(Ms(e[0])),payload:JSON.parse(Ms(e[1])),signature:Ke(e[2]),raw:{header:e[0],payload:e[1]}}}async function Oc(t){return await new Promise(e=>{setTimeout(()=>e(null),t);})}function $c(t,e){return new Promise((n,i)=>{(async()=>{for(let s=0;s<1/0;s++)try{let o=await t(s);if(!e(s,null,o)){n(o);return}}catch(o){if(!e(s,o)){i(o);return}}})();})}function Im(t){return ("0"+t.toString(16)).substr(-2)}function Om(){let e=new Uint32Array(56);if(typeof crypto>"u"){let r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~",n=r.length,i="";for(let s=0;s<56;s++)i+=r.charAt(Math.floor(Math.random()*n));return i}return crypto.getRandomValues(e),Array.from(e,Im).join("")}async function $m(t){let r=new TextEncoder().encode(t),n=await crypto.subtle.digest("SHA-256",r),i=new Uint8Array(n);return Array.from(i).map(s=>String.fromCharCode(s)).join("")}async function Nm(t){if(!(typeof crypto<"u"&&typeof crypto.subtle<"u"&&typeof TextEncoder<"u"))return console.warn("WebCrypto API is not supported. Code challenge method will default to use plain instead of sha256."),t;let r=await $m(t);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}async function gt(t,e,r=false){let n=Om(),i=n;r&&(i+="/PASSWORD_RECOVERY"),await ht(t,`${e}-code-verifier`,i);let s=await Nm(n);return [s,n===s?"plain":"s256"]}function Nc(t){let e=t.headers.get(Lr);if(!e||!e.match(Dm))return null;try{return new Date(`${e}T00:00:00.0Z`)}catch{return null}}function Dc(t){if(!t)throw new Error("Missing exp claim");let e=Math.floor(Date.now()/1e3);if(t<=e)throw new Error("JWT has expired")}function jc(t){switch(t){case "RS256":return {name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}};case "ES256":return {name:"ECDSA",namedCurve:"P-256",hash:{name:"SHA-256"}};default:throw new Error("Invalid alg claim")}}function mt(t){if(!jm.test(t))throw new Error("@supabase/auth-js: Expected parameter to be UUID but is not")}function ti(){let t={};return new Proxy(t,{get:(e,r)=>{if(r==="__isUserNotAvailableProxy")return true;if(typeof r=="symbol"){let n=r.toString();if(n==="Symbol(Symbol.toPrimitive)"||n==="Symbol(Symbol.toStringTag)"||n==="Symbol(util.inspect.custom)")return}throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Accessing the "${r}" property of the session object is not supported. Please use getUser() instead.`)},set:(e,r)=>{throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Setting the "${r}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)},deleteProperty:(e,r)=>{throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Deleting the "${r}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)}})}function Mc(t,e){return new Proxy(t,{get:(r,n,i)=>{if(n==="__isInsecureUserWarningProxy")return true;if(typeof n=="symbol"){let s=n.toString();if(s==="Symbol(Symbol.toPrimitive)"||s==="Symbol(Symbol.toStringTag)"||s==="Symbol(util.inspect.custom)"||s==="Symbol(nodejs.util.inspect.custom)")return Reflect.get(r,n,i)}return !e.value&&typeof n=="string"&&(console.warn("Using the user object as returned from supabase.auth.getSession() or from some supabase.auth.onAuthStateChange() events could be insecure! This value comes directly from the storage medium (usually cookies on the server) and may not be authentic. Use supabase.auth.getUser() instead which authenticates the data by contacting the Supabase Auth server."),e.value=true),Reflect.get(r,n,i)}})}function Ls(t){return JSON.parse(JSON.stringify(t))}var q,ft,Qn,ei,Ic,ht,Ve,z,Fr,Dm,jm,Zt=R(()=>{Kn();pt();Zn();q=()=>typeof window<"u"&&typeof document<"u",ft={tested:false,writable:false},Qn=()=>{if(!q())return false;try{if(typeof globalThis.localStorage!="object")return !1}catch{return false}if(ft.tested)return ft.writable;let t=`lswt-${Math.random()}${Math.random()}`;try{globalThis.localStorage.setItem(t,t),globalThis.localStorage.removeItem(t),ft.tested=!0,ft.writable=!0;}catch{ft.tested=true,ft.writable=false;}return ft.writable};ei=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),Ic=t=>typeof t=="object"&&t!==null&&"status"in t&&"ok"in t&&"json"in t&&typeof t.json=="function",ht=async(t,e,r)=>{await t.setItem(e,JSON.stringify(r));},Ve=async(t,e)=>{let r=await t.getItem(e);if(!r)return null;try{return JSON.parse(r)}catch{return r}},z=async(t,e)=>{await t.removeItem(e);},Fr=class t{constructor(){this.promise=new t.promiseConstructor((e,r)=>{this.resolve=e,this.reject=r;});}};Fr.promiseConstructor=Promise;Dm=/^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/i;jm=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;});async function Lc(t){var e;if(!Ic(t))throw new Xt(_t(t),0);if(Mm.includes(t.status))throw new Xt(_t(t),t.status);let r;try{r=await t.json();}catch(s){throw new ue(_t(s),s)}let n,i=Nc(t);if(i&&i.getTime()>=js["2024-01-01"].timestamp&&typeof r=="object"&&r&&typeof r.code=="string"?n=r.code:typeof r=="object"&&r&&typeof r.error_code=="string"&&(n=r.error_code),n){if(n==="weak_password")throw new Wr(_t(r),t.status,((e=r.weak_password)===null||e===void 0?void 0:e.reasons)||[]);if(n==="session_not_found")throw new J}else if(typeof r=="object"&&r&&typeof r.weak_password=="object"&&r.weak_password&&Array.isArray(r.weak_password.reasons)&&r.weak_password.reasons.length&&r.weak_password.reasons.reduce((s,o)=>s&&typeof o=="string",true))throw new Wr(_t(r),t.status,r.weak_password.reasons);throw new Vn(_t(r),t.status||500,n)}async function S(t,e,r,n){var i;let s=Object.assign({},n?.headers);s[Lr]||(s[Lr]=js["2024-01-01"].name),n?.jwt&&(s.Authorization=`Bearer ${n.jwt}`);let o=(i=n?.query)!==null&&i!==void 0?i:{};n?.redirectTo&&(o.redirect_to=n.redirectTo);let a=Object.keys(o).length?"?"+new URLSearchParams(o).toString():"",l=await Um(t,e,r+a,{headers:s,noResolveJson:n?.noResolveJson},{},n?.body);return n?.xform?n?.xform(l):{data:Object.assign({},l),error:null}}async function Um(t,e,r,n,i,s){let o=Lm(e,n,i,s),a;try{a=await t(r,Object.assign({},o));}catch(l){throw console.error(l),new Xt(_t(l),0)}if(a.ok||await Lc(a),n?.noResolveJson)return a;try{return await a.json()}catch(l){await Lc(l);}}function de(t){var e;let r=null;Wm(t)&&(r=Object.assign({},t),t.expires_at||(r.expires_at=Pc(t.expires_in)));let n=(e=t.user)!==null&&e!==void 0?e:t;return {data:{session:r,user:n},error:null}}function Us(t){let e=de(t);return !e.error&&t.weak_password&&typeof t.weak_password=="object"&&Array.isArray(t.weak_password.reasons)&&t.weak_password.reasons.length&&t.weak_password.message&&typeof t.weak_password.message=="string"&&t.weak_password.reasons.reduce((r,n)=>r&&typeof n=="string",true)&&(e.data.weak_password=t.weak_password),e}function Se(t){var e;return {data:{user:(e=t.user)!==null&&e!==void 0?e:t},error:null}}function Uc(t){return {data:t,error:null}}function Wc(t){let{action_link:e,email_otp:r,hashed_token:n,redirect_to:i,verification_type:s}=t,o=ot(t,["action_link","email_otp","hashed_token","redirect_to","verification_type"]),a={action_link:e,email_otp:r,hashed_token:n,redirect_to:i,verification_type:s},l=Object.assign({},o);return {data:{properties:a,user:l},error:null}}function Ws(t){return t}function Wm(t){return t.access_token&&t.refresh_token&&t.expires_in}var _t,Mm,Lm,Bs=R(()=>{kr();Kn();Zt();pt();_t=t=>t.msg||t.message||t.error_description||t.error||JSON.stringify(t),Mm=[502,503,504,520,521,522,523,524,530];Lm=(t,e,r,n)=>{let i={method:t,headers:e?.headers||{}};return t==="GET"?i:(i.headers=Object.assign({"Content-Type":"application/json;charset=UTF-8"},e?.headers),i.body=JSON.stringify(n),Object.assign(Object.assign({},i),r))};});var ri,Fs=R(()=>{ri=["global","local","others"];});var wt,ni=R(()=>{kr();Bs();Zt();Fs();pt();wt=class{constructor({url:e="",headers:r={},fetch:n}){this.url=e,this.headers=r,this.fetch=ei(n),this.mfa={listFactors:this._listFactors.bind(this),deleteFactor:this._deleteFactor.bind(this)},this.oauth={listClients:this._listOAuthClients.bind(this),createClient:this._createOAuthClient.bind(this),getClient:this._getOAuthClient.bind(this),updateClient:this._updateOAuthClient.bind(this),deleteClient:this._deleteOAuthClient.bind(this),regenerateClientSecret:this._regenerateOAuthClientSecret.bind(this)},this.customProviders={listProviders:this._listCustomProviders.bind(this),createProvider:this._createCustomProvider.bind(this),getProvider:this._getCustomProvider.bind(this),updateProvider:this._updateCustomProvider.bind(this),deleteProvider:this._deleteCustomProvider.bind(this)};}async signOut(e,r=ri[0]){if(ri.indexOf(r)<0)throw new Error(`@supabase/auth-js: Parameter scope must be one of ${ri.join(", ")}`);try{return await S(this.fetch,"POST",`${this.url}/logout?scope=${r}`,{headers:this.headers,jwt:e,noResolveJson:!0}),{data:null,error:null}}catch(n){if(v(n))return {data:null,error:n};throw n}}async inviteUserByEmail(e,r={}){try{return await S(this.fetch,"POST",`${this.url}/invite`,{body:{email:e,data:r.data},headers:this.headers,redirectTo:r.redirectTo,xform:Se})}catch(n){if(v(n))return {data:{user:null},error:n};throw n}}async generateLink(e){try{let{options:r}=e,n=ot(e,["options"]),i=Object.assign(Object.assign({},n),r);return "newEmail"in n&&(i.new_email=n?.newEmail,delete i.newEmail),await S(this.fetch,"POST",`${this.url}/admin/generate_link`,{body:i,headers:this.headers,xform:Wc,redirectTo:r?.redirectTo})}catch(r){if(v(r))return {data:{properties:null,user:null},error:r};throw r}}async createUser(e){try{return await S(this.fetch,"POST",`${this.url}/admin/users`,{body:e,headers:this.headers,xform:Se})}catch(r){if(v(r))return {data:{user:null},error:r};throw r}}async listUsers(e){var r,n,i,s,o,a,l;try{let c={nextPage:null,lastPage:0,total:0},u=await S(this.fetch,"GET",`${this.url}/admin/users`,{headers:this.headers,noResolveJson:!0,query:{page:(n=(r=e?.page)===null||r===void 0?void 0:r.toString())!==null&&n!==void 0?n:"",per_page:(s=(i=e?.perPage)===null||i===void 0?void 0:i.toString())!==null&&s!==void 0?s:""},xform:Ws});if(u.error)throw u.error;let d=await u.json(),p=(o=u.headers.get("x-total-count"))!==null&&o!==void 0?o:0,f=(l=(a=u.headers.get("link"))===null||a===void 0?void 0:a.split(","))!==null&&l!==void 0?l:[];return f.length>0&&(f.forEach(h=>{let m=parseInt(h.split(";")[0].split("=")[1].substring(0,1)),_=JSON.parse(h.split(";")[1].split("=")[1]);c[`${_}Page`]=m;}),c.total=parseInt(p)),{data:Object.assign(Object.assign({},d),c),error:null}}catch(c){if(v(c))return {data:{users:[]},error:c};throw c}}async getUserById(e){mt(e);try{return await S(this.fetch,"GET",`${this.url}/admin/users/${e}`,{headers:this.headers,xform:Se})}catch(r){if(v(r))return {data:{user:null},error:r};throw r}}async updateUserById(e,r){mt(e);try{return await S(this.fetch,"PUT",`${this.url}/admin/users/${e}`,{body:r,headers:this.headers,xform:Se})}catch(n){if(v(n))return {data:{user:null},error:n};throw n}}async deleteUser(e,r=false){mt(e);try{return await S(this.fetch,"DELETE",`${this.url}/admin/users/${e}`,{headers:this.headers,body:{should_soft_delete:r},xform:Se})}catch(n){if(v(n))return {data:{user:null},error:n};throw n}}async _listFactors(e){mt(e.userId);try{let{data:r,error:n}=await S(this.fetch,"GET",`${this.url}/admin/users/${e.userId}/factors`,{headers:this.headers,xform:i=>({data:{factors:i},error:null})});return {data:r,error:n}}catch(r){if(v(r))return {data:null,error:r};throw r}}async _deleteFactor(e){mt(e.userId),mt(e.id);try{return {data:await S(this.fetch,"DELETE",`${this.url}/admin/users/${e.userId}/factors/${e.id}`,{headers:this.headers}),error:null}}catch(r){if(v(r))return {data:null,error:r};throw r}}async _listOAuthClients(e){var r,n,i,s,o,a,l;try{let c={nextPage:null,lastPage:0,total:0},u=await S(this.fetch,"GET",`${this.url}/admin/oauth/clients`,{headers:this.headers,noResolveJson:!0,query:{page:(n=(r=e?.page)===null||r===void 0?void 0:r.toString())!==null&&n!==void 0?n:"",per_page:(s=(i=e?.perPage)===null||i===void 0?void 0:i.toString())!==null&&s!==void 0?s:""},xform:Ws});if(u.error)throw u.error;let d=await u.json(),p=(o=u.headers.get("x-total-count"))!==null&&o!==void 0?o:0,f=(l=(a=u.headers.get("link"))===null||a===void 0?void 0:a.split(","))!==null&&l!==void 0?l:[];return f.length>0&&(f.forEach(h=>{let m=parseInt(h.split(";")[0].split("=")[1].substring(0,1)),_=JSON.parse(h.split(";")[1].split("=")[1]);c[`${_}Page`]=m;}),c.total=parseInt(p)),{data:Object.assign(Object.assign({},d),c),error:null}}catch(c){if(v(c))return {data:{clients:[]},error:c};throw c}}async _createOAuthClient(e){try{return await S(this.fetch,"POST",`${this.url}/admin/oauth/clients`,{body:e,headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _getOAuthClient(e){try{return await S(this.fetch,"GET",`${this.url}/admin/oauth/clients/${e}`,{headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _updateOAuthClient(e,r){try{return await S(this.fetch,"PUT",`${this.url}/admin/oauth/clients/${e}`,{body:r,headers:this.headers,xform:n=>({data:n,error:null})})}catch(n){if(v(n))return {data:null,error:n};throw n}}async _deleteOAuthClient(e){try{return await S(this.fetch,"DELETE",`${this.url}/admin/oauth/clients/${e}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(r){if(v(r))return {data:null,error:r};throw r}}async _regenerateOAuthClientSecret(e){try{return await S(this.fetch,"POST",`${this.url}/admin/oauth/clients/${e}/regenerate_secret`,{headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _listCustomProviders(e){try{let r={};return e?.type&&(r.type=e.type),await S(this.fetch,"GET",`${this.url}/admin/custom-providers`,{headers:this.headers,query:r,xform:n=>{var i;return {data:{providers:(i=n?.providers)!==null&&i!==void 0?i:[]},error:null}}})}catch(r){if(v(r))return {data:{providers:[]},error:r};throw r}}async _createCustomProvider(e){try{return await S(this.fetch,"POST",`${this.url}/admin/custom-providers`,{body:e,headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _getCustomProvider(e){try{return await S(this.fetch,"GET",`${this.url}/admin/custom-providers/${e}`,{headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _updateCustomProvider(e,r){try{return await S(this.fetch,"PUT",`${this.url}/admin/custom-providers/${e}`,{body:r,headers:this.headers,xform:n=>({data:n,error:null})})}catch(n){if(v(n))return {data:null,error:n};throw n}}async _deleteCustomProvider(e){try{return await S(this.fetch,"DELETE",`${this.url}/admin/custom-providers/${e}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(r){if(v(r))return {data:null,error:r};throw r}}};});function Hs(t={}){return {getItem:e=>t[e]||null,setItem:(e,r)=>{t[e]=r;},removeItem:e=>{delete t[e];}}}var Bc=R(()=>{});async function qs(t,e,r){_e.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquire lock",t,e);let n=new globalThis.AbortController,i;e>0&&(i=setTimeout(()=>{n.abort(),_e.debug&&console.log("@supabase/gotrue-js: navigatorLock acquire timed out",t);},e)),await Promise.resolve();try{return await globalThis.navigator.locks.request(t,e===0?{mode:"exclusive",ifAvailable:!0}:{mode:"exclusive",signal:n.signal},async s=>{if(s){clearTimeout(i),_e.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquired",t,s.name);try{return await r()}finally{_e.debug&&console.log("@supabase/gotrue-js: navigatorLock: released",t,s.name);}}else {if(e===0)throw _e.debug&&console.log("@supabase/gotrue-js: navigatorLock: not immediately available",t),new zr(`Acquiring an exclusive Navigator LockManager lock "${t}" immediately failed`);if(_e.debug)try{let o=await globalThis.navigator.locks.query();console.log("@supabase/gotrue-js: Navigator LockManager state",JSON.stringify(o,null," "));}catch(o){console.warn("@supabase/gotrue-js: Error when querying Navigator LockManager state",o);}return console.warn("@supabase/gotrue-js: Navigator LockManager returned a null lock when using #request without ifAvailable set to true, it appears this browser is not following the LockManager spec https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request"),clearTimeout(i),await r()}})}catch(s){if(e>0&&clearTimeout(i),s?.name==="AbortError"&&e>0){if(n.signal.aborted)return _e.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquire timeout, recovering by stealing lock",t),console.warn(`@supabase/gotrue-js: Lock "${t}" was not released within ${e}ms. This may indicate an orphaned lock from a component unmount (e.g., React Strict Mode). Forcefully acquiring the lock to recover.`),await Promise.resolve().then(()=>globalThis.navigator.locks.request(t,{mode:"exclusive",steal:true},async o=>{if(o){_e.debug&&console.log("@supabase/gotrue-js: navigatorLock: recovered (stolen)",t,o.name);try{return await r()}finally{_e.debug&&console.log("@supabase/gotrue-js: navigatorLock: released (stolen)",t,o.name);}}else return console.warn("@supabase/gotrue-js: Navigator LockManager returned null lock even with steal: true"),await r()}));throw _e.debug&&console.log("@supabase/gotrue-js: navigatorLock: lock was stolen by another request",t),new zr(`Lock "${t}" was released because another request stole it`)}throw s}}var _e,qr,zr,zs=R(()=>{Zt();_e={debug:!!(globalThis&&Qn()&&globalThis.localStorage&&globalThis.localStorage.getItem("supabase.gotrue-js.locks.debug")==="true")},qr=class extends Error{constructor(e){super(e),this.isAcquireTimeout=true;}},zr=class extends qr{};});function Fc(){if(typeof globalThis!="object")try{Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__;}catch{typeof self<"u"&&(self.globalThis=self);}}var Hc=R(()=>{});function Js(t){if(!/^0x[a-fA-F0-9]{40}$/.test(t))throw new Error(`@supabase/auth-js: Address "${t}" is invalid.`);return t.toLowerCase()}function qc(t){return parseInt(t,16)}function zc(t){let e=new TextEncoder().encode(t);return "0x"+Array.from(e,n=>n.toString(16).padStart(2,"0")).join("")}function Jc(t){var e;let{chainId:r,domain:n,expirationTime:i,issuedAt:s=new Date,nonce:o,notBefore:a,requestId:l,resources:c,scheme:u,uri:d,version:p}=t;{if(!Number.isInteger(r))throw new Error(`@supabase/auth-js: Invalid SIWE message field "chainId". Chain ID must be a EIP-155 chain ID. Provided value: ${r}`);if(!n)throw new Error('@supabase/auth-js: Invalid SIWE message field "domain". Domain must be provided.');if(o&&o.length<8)throw new Error(`@supabase/auth-js: Invalid SIWE message field "nonce". Nonce must be at least 8 characters. Provided value: ${o}`);if(!d)throw new Error('@supabase/auth-js: Invalid SIWE message field "uri". URI must be provided.');if(p!=="1")throw new Error(`@supabase/auth-js: Invalid SIWE message field "version". Version must be '1'. Provided value: ${p}`);if(!((e=t.statement)===null||e===void 0)&&e.includes(`
32
- `))throw new Error(`@supabase/auth-js: Invalid SIWE message field "statement". Statement must not include '\\n'. Provided value: ${t.statement}`)}let f=Js(t.address),h=u?`${u}://${n}`:n,m=t.statement?`${t.statement}
33
- `:"",_=`${h} wants you to sign in with your Ethereum account:
34
- ${f}
30
+ })`):new Error(`WebSocket not available: ${r}`)}this._handleNodeJsRaceCondition();}}endpointURL(){return this.socketAdapter.endPointURL()}async disconnect(e,r){return this.isDisconnecting()?"ok":await this.socketAdapter.disconnect(()=>{clearInterval(this._workerHeartbeatTimer),this._terminateWorker();},e,r)}getChannels(){return this.channels}async removeChannel(e){let r=await e.unsubscribe();return r==="ok"&&e.teardown(),this.channels.length===0&&this.disconnect(),r}async removeAllChannels(){let e=this.channels.map(async n=>{let s=await n.unsubscribe();return n.teardown(),s}),r=await Promise.all(e);return this.disconnect(),r}log(e,r,n){this.socketAdapter.log(e,r,n);}connectionState(){return this.socketAdapter.connectionState()||xr.closed}isConnected(){return this.socketAdapter.isConnected()}isConnecting(){return this.socketAdapter.isConnecting()}isDisconnecting(){return this.socketAdapter.isDisconnecting()}channel(e,r={config:{}}){let n=`realtime:${e}`,s=this.getChannels().find(i=>i.topic===n);if(s)return s;{let i=new Vt(`realtime:${e}`,r,this);return this.channels.push(i),i}}push(e){this.socketAdapter.push(e);}async setAuth(e=null){this._authPromise=this._performAuth(e);try{await this._authPromise;}finally{this._authPromise=null;}}_isManualToken(){return this._manuallySetToken}async sendHeartbeat(){this.socketAdapter.sendHeartbeat();}onHeartbeat(e){this.socketAdapter.heartbeatCallback=this._wrapHeartbeatCallback(e);}_makeRef(){return this.socketAdapter.makeRef()}_remove(e){this.channels=this.channels.filter(r=>r.topic!==e.topic);}async _performAuth(e=null){let r,n=false;if(e)r=e,n=true;else if(this.accessToken)try{r=await this.accessToken();}catch(s){this.log("error","Error fetching access token from callback",s),r=this.accessTokenValue;}else r=this.accessTokenValue;n?this._manuallySetToken=true:this.accessToken&&(this._manuallySetToken=false),this.accessTokenValue!=r&&(this.accessTokenValue=r,this.channels.forEach(s=>{let i={access_token:r,version:Ql};r&&s.updateJoinPayload(i),s.joinedOnce&&s.channelAdapter.isJoined()&&s.channelAdapter.push(jn.access_token,{access_token:r});}));}async _waitForAuthIfNeeded(){this._authPromise&&await this._authPromise;}_setAuthSafely(e="general"){this._isManualToken()||this.setAuth().catch(r=>{this.log("error",`Error setting auth in ${e}`,r);});}_setupConnectionHandlers(){this.socketAdapter.onOpen(()=>{(this._authPromise||(this.accessToken&&!this.accessTokenValue?this.setAuth():Promise.resolve())).catch(r=>{this.log("error","error waiting for auth on connect",r);}),this.worker&&!this.workerRef&&this._startWorkerHeartbeat();}),this.socketAdapter.onClose(()=>{this.worker&&this.workerRef&&this._terminateWorker();}),this.socketAdapter.onMessage(e=>{e.ref&&e.ref===this._pendingWorkerHeartbeatRef&&(this._pendingWorkerHeartbeatRef=null);});}_handleNodeJsRaceCondition(){this.socketAdapter.isConnected()&&this.socketAdapter.getSocket().onConnOpen();}_wrapHeartbeatCallback(e){return (r,n)=>{r=="sent"&&this._setAuthSafely(),e&&e(r,n);}}_startWorkerHeartbeat(){this.workerUrl?this.log("worker",`starting worker for from ${this.workerUrl}`):this.log("worker","starting default worker");let e=this._workerObjectUrl(this.workerUrl);this.workerRef=new Worker(e),this.workerRef.onerror=r=>{this.log("worker","worker error",r.message),this._terminateWorker(),this.disconnect();},this.workerRef.onmessage=r=>{r.data.event==="keepAlive"&&this.sendHeartbeat();},this.workerRef.postMessage({event:"start",interval:this.heartbeatIntervalMs});}_terminateWorker(){this.workerRef&&(this.log("worker","terminating worker"),this.workerRef.terminate(),this.workerRef=void 0);}_workerObjectUrl(e){let r;if(e)r=e;else {let n=new Blob([pm],{type:"application/javascript"});r=URL.createObjectURL(n);}return r}_initializeOptions(e){var r,n,s,i,o,a,l,c,u;this.worker=(r=e?.worker)!==null&&r!==void 0?r:false,this.accessToken=(n=e?.accessToken)!==null&&n!==void 0?n:null;let d={};d.timeout=(s=e?.timeout)!==null&&s!==void 0?s:rc,d.heartbeatIntervalMs=(i=e?.heartbeatIntervalMs)!==null&&i!==void 0?i:cm.HEARTBEAT_INTERVAL,d.transport=(o=e?.transport)!==null&&o!==void 0?o:vi.getWebSocketConstructor(),d.params=e?.params,d.logger=e?.logger,d.heartbeatCallback=this._wrapHeartbeatCallback(e?.heartbeatCallback),d.reconnectAfterMs=(a=e?.reconnectAfterMs)!==null&&a!==void 0?a:(m=>um[m-1]||dm);let p,h,f=(l=e?.vsn)!==null&&l!==void 0?l:tc;switch(f){case ec:p=(m,_)=>_(JSON.stringify(m)),h=(m,_)=>_(JSON.parse(m));break;case Ci:p=this.serializer.encode.bind(this.serializer),h=this.serializer.decode.bind(this.serializer);break;default:throw new Error(`Unsupported serializer version: ${d.vsn}`)}if(d.vsn=f,d.encode=(c=e?.encode)!==null&&c!==void 0?c:p,d.decode=(u=e?.decode)!==null&&u!==void 0?u:h,d.beforeReconnect=this._reconnectAuth.bind(this),(e?.logLevel||e?.log_level)&&(this.logLevel=e.logLevel||e.log_level,d.params=Object.assign(Object.assign({},d.params),{log_level:this.logLevel})),this.worker){if(typeof window<"u"&&!window.Worker)throw new Error("Web Worker is not supported");this.workerUrl=e?.workerUrl,d.autoSendHeartbeat=!this.worker;}return d}async _reconnectAuth(){await this._waitForAuthIfNeeded(),this.isConnected()||this.connect();}};});var Ni=R(()=>{hc();$i();Ii();Si();});function hm(t,e,r){let n=new URL(e,t);if(r)for(let[s,i]of Object.entries(r))i!==void 0&&n.searchParams.set(s,i);return n.toString()}async function fm(t){return !t||t.type==="none"?{}:t.type==="bearer"?{Authorization:`Bearer ${t.token}`}:t.type==="header"?{[t.name]:t.value}:t.type==="custom"?await t.getHeaders():{}}function gm(t){let e=t.fetchImpl??globalThis.fetch;return {async request({method:r,path:n,query:s,body:i,headers:o}){let a=hm(t.baseUrl,n,s),l=await fm(t.auth),c=await e(a,{method:r,headers:{...i?{"Content-Type":"application/json"}:{},...l,...o},body:i?JSON.stringify(i):void 0}),u=await c.text(),d=(c.headers.get("content-type")||"").includes("application/json"),p=d&&u?JSON.parse(u):u;if(!c.ok){let h=d?p:void 0,f=h?.error;throw new Dr(f?.message??`Request failed with status ${c.status}`,{status:c.status,icebergType:f?.type,icebergCode:f?.code,details:h})}return {status:c.status,headers:c.headers,data:p}}}}function Hn(t){return t.join("")}function Yt(t){return t.join("")}var Dr,mm,_m,fc,gc=R(()=>{Dr=class extends Error{constructor(t,e){super(t),this.name="IcebergError",this.status=e.status,this.icebergType=e.icebergType,this.icebergCode=e.icebergCode,this.details=e.details,this.isCommitStateUnknown=e.icebergType==="CommitStateUnknownException"||[500,502,504].includes(e.status)&&e.icebergType?.includes("CommitState")===true;}isNotFound(){return this.status===404}isConflict(){return this.status===409}isAuthenticationTimeout(){return this.status===419}};mm=class{constructor(t,e=""){this.client=t,this.prefix=e;}async listNamespaces(t){let e=t?{parent:Hn(t.namespace)}:void 0;return (await this.client.request({method:"GET",path:`${this.prefix}/namespaces`,query:e})).data.namespaces.map(n=>({namespace:n}))}async createNamespace(t,e){let r={namespace:t.namespace,properties:e?.properties};return (await this.client.request({method:"POST",path:`${this.prefix}/namespaces`,body:r})).data}async dropNamespace(t){await this.client.request({method:"DELETE",path:`${this.prefix}/namespaces/${Hn(t.namespace)}`});}async loadNamespaceMetadata(t){return {properties:(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${Hn(t.namespace)}`})).data.properties}}async namespaceExists(t){try{return await this.client.request({method:"HEAD",path:`${this.prefix}/namespaces/${Hn(t.namespace)}`}),!0}catch(e){if(e instanceof Dr&&e.status===404)return false;throw e}}async createNamespaceIfNotExists(t,e){try{return await this.createNamespace(t,e)}catch(r){if(r instanceof Dr&&r.status===409)return;throw r}}};_m=class{constructor(t,e="",r){this.client=t,this.prefix=e,this.accessDelegation=r;}async listTables(t){return (await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${Yt(t.namespace)}/tables`})).data.identifiers}async createTable(t,e){let r={};return this.accessDelegation&&(r["X-Iceberg-Access-Delegation"]=this.accessDelegation),(await this.client.request({method:"POST",path:`${this.prefix}/namespaces/${Yt(t.namespace)}/tables`,body:e,headers:r})).data.metadata}async updateTable(t,e){let r=await this.client.request({method:"POST",path:`${this.prefix}/namespaces/${Yt(t.namespace)}/tables/${t.name}`,body:e});return {"metadata-location":r.data["metadata-location"],metadata:r.data.metadata}}async dropTable(t,e){await this.client.request({method:"DELETE",path:`${this.prefix}/namespaces/${Yt(t.namespace)}/tables/${t.name}`,query:{purgeRequested:String(e?.purge??false)}});}async loadTable(t){let e={};return this.accessDelegation&&(e["X-Iceberg-Access-Delegation"]=this.accessDelegation),(await this.client.request({method:"GET",path:`${this.prefix}/namespaces/${Yt(t.namespace)}/tables/${t.name}`,headers:e})).data.metadata}async tableExists(t){let e={};this.accessDelegation&&(e["X-Iceberg-Access-Delegation"]=this.accessDelegation);try{return await this.client.request({method:"HEAD",path:`${this.prefix}/namespaces/${Yt(t.namespace)}/tables/${t.name}`,headers:e}),!0}catch(r){if(r instanceof Dr&&r.status===404)return false;throw r}}async createTableIfNotExists(t,e){try{return await this.createTable(t,e)}catch(r){if(r instanceof Dr&&r.status===409)return await this.loadTable({namespace:t.namespace,name:e.name});throw r}}},fc=class{constructor(t){let e="v1";t.catalogName&&(e+=`/${t.catalogName}`);let r=t.baseUrl.endsWith("/")?t.baseUrl:`${t.baseUrl}/`;this.client=gm({baseUrl:r,auth:t.auth,fetchImpl:t.fetch}),this.accessDelegation=t.accessDelegation?.join(","),this.namespaceOps=new mm(this.client,e),this.tableOps=new _m(this.client,e,this.accessDelegation);}async listNamespaces(t){return this.namespaceOps.listNamespaces(t)}async createNamespace(t,e){return this.namespaceOps.createNamespace(t,e)}async dropNamespace(t){await this.namespaceOps.dropNamespace(t);}async loadNamespaceMetadata(t){return this.namespaceOps.loadNamespaceMetadata(t)}async listTables(t){return this.tableOps.listTables(t)}async createTable(t,e){return this.tableOps.createTable(t,e)}async updateTable(t,e){return this.tableOps.updateTable(t,e)}async dropTable(t,e){await this.tableOps.dropTable(t,e);}async loadTable(t){return this.tableOps.loadTable(t)}async namespaceExists(t){return this.namespaceOps.namespaceExists(t)}async tableExists(t){return this.tableOps.tableExists(t)}async createNamespaceIfNotExists(t,e){return this.namespaceOps.createNamespaceIfNotExists(t,e)}async createTableIfNotExists(t,e){return this.tableOps.createTableIfNotExists(t,e)}};});function Mr(t){"@babel/helpers - typeof";return Mr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Mr(t)}function wm(t,e){if(Mr(t)!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e);if(Mr(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return (e==="string"?String:Number)(t)}function ym(t){var e=wm(t,"string");return Mr(e)=="symbol"?e:e+""}function km(t,e,r){return (e=ym(e))in t?Object.defineProperty(t,e,{value:r,enumerable:true,configurable:true,writable:true}):t[e]=r,t}function mc(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(s){return Object.getOwnPropertyDescriptor(t,s).enumerable})),r.push.apply(r,n);}return r}function E(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?mc(Object(r),true).forEach(function(n){km(t,n,r[n]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):mc(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n));});}return t}function Jn(t){return typeof t=="object"&&t!==null&&"__isStorageError"in t}function Rm(t,e,r){let n=E({},t);for(let s of Object.keys(n))s.toLowerCase()===e.toLowerCase()&&delete n[s];return n[e]=r,n}async function jr(t,e,r,n,s,i,o){return new Promise((a,l)=>{t(r,Em(e,n,s,i)).then(c=>{if(!c.ok)throw c;if(n?.noResolveJson)return c;if(o==="vectors"){let u=c.headers.get("content-type");if(c.headers.get("content-length")==="0"||c.status===204)return {};if(!u||!u.includes("application/json"))return {}}return c.json()}).then(c=>a(c)).catch(c=>Cm(c,l,n,o));})}function kc(t="storage"){return {get:async(e,r,n,s)=>jr(e,"GET",r,n,s,void 0,t),post:async(e,r,n,s,i)=>jr(e,"POST",r,s,i,n,t),put:async(e,r,n,s,i)=>jr(e,"PUT",r,s,i,n,t),head:async(e,r,n,s)=>jr(e,"HEAD",r,E(E({},n),{},{noResolveJson:true}),s,void 0,t),remove:async(e,r,n,s,i)=>jr(e,"DELETE",r,s,i,n,t)}}var zn,qn,yc,bm,vm,Di,Sm,_c,Cm,Em,xm,Lr,ge,ji,Pm,Mi,re,Xt,Tm,bc,Am,Im,wc,Om,$m,Ur,Nm,Dm,jm,Mm,Lm,Um,Wm,Bm,vc,Sc=R(()=>{gc();zn=class extends Error{constructor(t,e="storage",r,n){super(t),this.__isStorageError=true,this.namespace=e,this.name=e==="vectors"?"StorageVectorsError":"StorageError",this.status=r,this.statusCode=n;}toJSON(){return {name:this.name,message:this.message,status:this.status,statusCode:this.statusCode}}};qn=class extends zn{constructor(t,e,r,n="storage"){super(t,n,e,r),this.name=n==="vectors"?"StorageVectorsApiError":"StorageApiError",this.status=e,this.statusCode=r;}toJSON(){return E({},super.toJSON())}},yc=class extends zn{constructor(t,e,r="storage"){super(t,r),this.name=r==="vectors"?"StorageVectorsUnknownError":"StorageUnknownError",this.originalError=e;}},bm=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),vm=t=>{if(typeof t!="object"||t===null)return false;let e=Object.getPrototypeOf(t);return (e===null||e===Object.prototype||Object.getPrototypeOf(e)===null)&&!(Symbol.toStringTag in t)&&!(Symbol.iterator in t)},Di=t=>{if(Array.isArray(t))return t.map(r=>Di(r));if(typeof t=="function"||t!==Object(t))return t;let e={};return Object.entries(t).forEach(([r,n])=>{let s=r.replace(/([-_][a-z])/gi,i=>i.toUpperCase().replace(/[-_]/g,""));e[s]=Di(n);}),e},Sm=t=>!t||typeof t!="string"||t.length===0||t.length>100||t.trim()!==t||t.includes("/")||t.includes("\\")?false:/^[\w!.\*'() &$@=;:+,?-]+$/.test(t),_c=t=>{var e;return t.msg||t.message||t.error_description||(typeof t.error=="string"?t.error:(e=t.error)===null||e===void 0?void 0:e.message)||JSON.stringify(t)},Cm=async(t,e,r,n)=>{if(t!==null&&typeof t=="object"&&typeof t.json=="function"){let s=t,i=parseInt(s.status,10);Number.isFinite(i)||(i=500),s.json().then(o=>{let a=o?.statusCode||o?.code||i+"";e(new qn(_c(o),i,a,n));}).catch(()=>{let o=i+"";e(new qn(s.statusText||`HTTP ${i} error`,i,o,n));});}else e(new yc(_c(t),t,n));},Em=(t,e,r,n)=>{let s={method:t,headers:e?.headers||{}};if(t==="GET"||t==="HEAD"||!n)return E(E({},s),r);if(vm(n)){var i;let o=e?.headers||{},a;for(let[l,c]of Object.entries(o))l.toLowerCase()==="content-type"&&(a=c);s.headers=Rm(o,"Content-Type",(i=a)!==null&&i!==void 0?i:"application/json"),s.body=JSON.stringify(n);}else s.body=n;return e?.duplex&&(s.duplex=e.duplex),E(E({},s),r)};xm=kc("storage"),{get:Lr,post:ge,put:ji,head:Pm,remove:Mi}=xm,re=kc("vectors"),Xt=class{constructor(t,e={},r,n="storage"){this.shouldThrowOnError=false,this.url=t,this.headers=Object.fromEntries(Object.entries(e).map(([s,i])=>[s.toLowerCase(),i])),this.fetch=bm(r),this.namespace=n;}throwOnError(){return this.shouldThrowOnError=true,this}setHeader(t,e){return this.headers=E(E({},this.headers),{},{[t.toLowerCase()]:e}),this}async handleOperation(t){var e=this;try{return {data:await t(),error:null}}catch(r){if(e.shouldThrowOnError)throw r;if(Jn(r))return {data:null,error:r};throw r}}},Tm=class{constructor(t,e){this.downloadFn=t,this.shouldThrowOnError=e;}then(t,e){return this.execute().then(t,e)}async execute(){var t=this;try{return {data:(await t.downloadFn()).body,error:null}}catch(e){if(t.shouldThrowOnError)throw e;if(Jn(e))return {data:null,error:e};throw e}}};bc=Symbol.toStringTag;Am=class{constructor(t,e){this.downloadFn=t,this.shouldThrowOnError=e,this[bc]="BlobDownloadBuilder",this.promise=null;}asStream(){return new Tm(this.downloadFn,this.shouldThrowOnError)}then(t,e){return this.getPromise().then(t,e)}catch(t){return this.getPromise().catch(t)}finally(t){return this.getPromise().finally(t)}getPromise(){return this.promise||(this.promise=this.execute()),this.promise}async execute(){var t=this;try{return {data:await(await t.downloadFn()).blob(),error:null}}catch(e){if(t.shouldThrowOnError)throw e;if(Jn(e))return {data:null,error:e};throw e}}},Im={limit:100,offset:0,sortBy:{column:"name",order:"asc"}},wc={cacheControl:"3600",contentType:"text/plain;charset=UTF-8",upsert:false},Om=class extends Xt{constructor(t,e={},r,n){super(t,e,n,"storage"),this.bucketId=r;}async uploadOrUpdate(t,e,r,n){var s=this;return s.handleOperation(async()=>{let i,o=E(E({},wc),n),a=E(E({},s.headers),t==="POST"&&{"x-upsert":String(o.upsert)}),l=o.metadata;typeof Blob<"u"&&r instanceof Blob?(i=new FormData,i.append("cacheControl",o.cacheControl),l&&i.append("metadata",s.encodeMetadata(l)),i.append("",r)):typeof FormData<"u"&&r instanceof FormData?(i=r,i.has("cacheControl")||i.append("cacheControl",o.cacheControl),l&&!i.has("metadata")&&i.append("metadata",s.encodeMetadata(l))):(i=r,a["cache-control"]=`max-age=${o.cacheControl}`,a["content-type"]=o.contentType,l&&(a["x-metadata"]=s.toBase64(s.encodeMetadata(l))),(typeof ReadableStream<"u"&&i instanceof ReadableStream||i&&typeof i=="object"&&"pipe"in i&&typeof i.pipe=="function")&&!o.duplex&&(o.duplex="half")),n?.headers&&(a=E(E({},a),n.headers));let c=s._removeEmptyFolders(e),u=s._getFinalPath(c),d=await(t=="PUT"?ji:ge)(s.fetch,`${s.url}/object/${u}`,i,E({headers:a},o?.duplex?{duplex:o.duplex}:{}));return {path:c,id:d.Id,fullPath:d.Key}})}async upload(t,e,r){return this.uploadOrUpdate("POST",t,e,r)}async uploadToSignedUrl(t,e,r,n){var s=this;let i=s._removeEmptyFolders(t),o=s._getFinalPath(i),a=new URL(s.url+`/object/upload/sign/${o}`);return a.searchParams.set("token",e),s.handleOperation(async()=>{let l,c=E(E({},wc),n),u=E(E({},s.headers),{"x-upsert":String(c.upsert)});return typeof Blob<"u"&&r instanceof Blob?(l=new FormData,l.append("cacheControl",c.cacheControl),l.append("",r)):typeof FormData<"u"&&r instanceof FormData?(l=r,l.append("cacheControl",c.cacheControl)):(l=r,u["cache-control"]=`max-age=${c.cacheControl}`,u["content-type"]=c.contentType),{path:i,fullPath:(await ji(s.fetch,a.toString(),l,{headers:u})).Key}})}async createSignedUploadUrl(t,e){var r=this;return r.handleOperation(async()=>{let n=r._getFinalPath(t),s=E({},r.headers);e?.upsert&&(s["x-upsert"]="true");let i=await ge(r.fetch,`${r.url}/object/upload/sign/${n}`,{},{headers:s}),o=new URL(r.url+i.url),a=o.searchParams.get("token");if(!a)throw new zn("No token returned by API");return {signedUrl:o.toString(),path:t,token:a}})}async update(t,e,r){return this.uploadOrUpdate("PUT",t,e,r)}async move(t,e,r){var n=this;return n.handleOperation(async()=>await ge(n.fetch,`${n.url}/object/move`,{bucketId:n.bucketId,sourceKey:t,destinationKey:e,destinationBucket:r?.destinationBucket},{headers:n.headers}))}async copy(t,e,r){var n=this;return n.handleOperation(async()=>({path:(await ge(n.fetch,`${n.url}/object/copy`,{bucketId:n.bucketId,sourceKey:t,destinationKey:e,destinationBucket:r?.destinationBucket},{headers:n.headers})).Key}))}async createSignedUrl(t,e,r){var n=this;return n.handleOperation(async()=>{let s=n._getFinalPath(t),i=typeof r?.transform=="object"&&r.transform!==null&&Object.keys(r.transform).length>0,o=await ge(n.fetch,`${n.url}/object/sign/${s}`,E({expiresIn:e},i?{transform:r.transform}:{}),{headers:n.headers}),a=new URLSearchParams;r?.download&&a.set("download",r.download===true?"":r.download),r?.cacheNonce!=null&&a.set("cacheNonce",String(r.cacheNonce));let l=a.toString();return {signedUrl:encodeURI(`${n.url}${o.signedURL}${l?`&${l}`:""}`)}})}async createSignedUrls(t,e,r){var n=this;return n.handleOperation(async()=>{let s=await ge(n.fetch,`${n.url}/object/sign/${n.bucketId}`,{expiresIn:e,paths:t},{headers:n.headers}),i=new URLSearchParams;r?.download&&i.set("download",r.download===true?"":r.download),r?.cacheNonce!=null&&i.set("cacheNonce",String(r.cacheNonce));let o=i.toString();return s.map(a=>E(E({},a),{},{signedUrl:a.signedURL?encodeURI(`${n.url}${a.signedURL}${o?`&${o}`:""}`):null}))})}download(t,e,r){let n=typeof e?.transform=="object"&&e.transform!==null&&Object.keys(e.transform).length>0?"render/image/authenticated":"object",s=new URLSearchParams;e?.transform&&this.applyTransformOptsToQuery(s,e.transform),e?.cacheNonce!=null&&s.set("cacheNonce",String(e.cacheNonce));let i=s.toString(),o=this._getFinalPath(t),a=()=>Lr(this.fetch,`${this.url}/${n}/${o}${i?`?${i}`:""}`,{headers:this.headers,noResolveJson:true},r);return new Am(a,this.shouldThrowOnError)}async info(t){var e=this;let r=e._getFinalPath(t);return e.handleOperation(async()=>Di(await Lr(e.fetch,`${e.url}/object/info/${r}`,{headers:e.headers})))}async exists(t){var e=this;let r=e._getFinalPath(t);try{return await Pm(e.fetch,`${e.url}/object/${r}`,{headers:e.headers}),{data:!0,error:null}}catch(s){if(e.shouldThrowOnError)throw s;if(Jn(s)){var n;let i=s instanceof qn?s.status:s instanceof yc?(n=s.originalError)===null||n===void 0?void 0:n.status:void 0;if(i!==void 0&&[400,404].includes(i))return {data:false,error:s}}throw s}}getPublicUrl(t,e){let r=this._getFinalPath(t),n=new URLSearchParams;e?.download&&n.set("download",e.download===true?"":e.download),e?.transform&&this.applyTransformOptsToQuery(n,e.transform),e?.cacheNonce!=null&&n.set("cacheNonce",String(e.cacheNonce));let s=n.toString(),i=typeof e?.transform=="object"&&e.transform!==null&&Object.keys(e.transform).length>0?"render/image":"object";return {data:{publicUrl:encodeURI(`${this.url}/${i}/public/${r}`)+(s?`?${s}`:"")}}}async remove(t){var e=this;return e.handleOperation(async()=>await Mi(e.fetch,`${e.url}/object/${e.bucketId}`,{prefixes:t},{headers:e.headers}))}async list(t,e,r){var n=this;return n.handleOperation(async()=>{let s=E(E(E({},Im),e),{},{prefix:t||""});return await ge(n.fetch,`${n.url}/object/list/${n.bucketId}`,s,{headers:n.headers},r)})}async listV2(t,e){var r=this;return r.handleOperation(async()=>{let n=E({},t);return await ge(r.fetch,`${r.url}/object/list-v2/${r.bucketId}`,n,{headers:r.headers},e)})}encodeMetadata(t){return JSON.stringify(t)}toBase64(t){return typeof Buffer<"u"?Buffer.from(t).toString("base64"):btoa(t)}_getFinalPath(t){return `${this.bucketId}/${t.replace(/^\/+/,"")}`}_removeEmptyFolders(t){return t.replace(/^\/|\/$/g,"").replace(/\/+/g,"/")}applyTransformOptsToQuery(t,e){return e.width&&t.set("width",e.width.toString()),e.height&&t.set("height",e.height.toString()),e.resize&&t.set("resize",e.resize),e.format&&t.set("format",e.format),e.quality&&t.set("quality",e.quality.toString()),t}},$m="2.103.2",Ur={"X-Client-Info":`storage-js/${$m}`},Nm=class extends Xt{constructor(t,e={},r,n){let s=new URL(t);n?.useNewHostname&&/supabase\.(co|in|red)$/.test(s.hostname)&&!s.hostname.includes("storage.supabase.")&&(s.hostname=s.hostname.replace("supabase.","storage.supabase."));let i=s.href.replace(/\/$/,""),o=E(E({},Ur),e);super(i,o,r,"storage");}async listBuckets(t){var e=this;return e.handleOperation(async()=>{let r=e.listBucketOptionsToQueryString(t);return await Lr(e.fetch,`${e.url}/bucket${r}`,{headers:e.headers})})}async getBucket(t){var e=this;return e.handleOperation(async()=>await Lr(e.fetch,`${e.url}/bucket/${t}`,{headers:e.headers}))}async createBucket(t,e={public:false}){var r=this;return r.handleOperation(async()=>await ge(r.fetch,`${r.url}/bucket`,{id:t,name:t,type:e.type,public:e.public,file_size_limit:e.fileSizeLimit,allowed_mime_types:e.allowedMimeTypes},{headers:r.headers}))}async updateBucket(t,e){var r=this;return r.handleOperation(async()=>await ji(r.fetch,`${r.url}/bucket/${t}`,{id:t,name:t,public:e.public,file_size_limit:e.fileSizeLimit,allowed_mime_types:e.allowedMimeTypes},{headers:r.headers}))}async emptyBucket(t){var e=this;return e.handleOperation(async()=>await ge(e.fetch,`${e.url}/bucket/${t}/empty`,{},{headers:e.headers}))}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await Mi(e.fetch,`${e.url}/bucket/${t}`,{},{headers:e.headers}))}listBucketOptionsToQueryString(t){let e={};return t&&("limit"in t&&(e.limit=String(t.limit)),"offset"in t&&(e.offset=String(t.offset)),t.search&&(e.search=t.search),t.sortColumn&&(e.sortColumn=t.sortColumn),t.sortOrder&&(e.sortOrder=t.sortOrder)),Object.keys(e).length>0?"?"+new URLSearchParams(e).toString():""}},Dm=class extends Xt{constructor(t,e={},r){let n=t.replace(/\/$/,""),s=E(E({},Ur),e);super(n,s,r,"storage");}async createBucket(t){var e=this;return e.handleOperation(async()=>await ge(e.fetch,`${e.url}/bucket`,{name:t},{headers:e.headers}))}async listBuckets(t){var e=this;return e.handleOperation(async()=>{let r=new URLSearchParams;t?.limit!==void 0&&r.set("limit",t.limit.toString()),t?.offset!==void 0&&r.set("offset",t.offset.toString()),t?.sortColumn&&r.set("sortColumn",t.sortColumn),t?.sortOrder&&r.set("sortOrder",t.sortOrder),t?.search&&r.set("search",t.search);let n=r.toString(),s=n?`${e.url}/bucket?${n}`:`${e.url}/bucket`;return await Lr(e.fetch,s,{headers:e.headers})})}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await Mi(e.fetch,`${e.url}/bucket/${t}`,{},{headers:e.headers}))}from(t){var e=this;if(!Sm(t))throw new zn("Invalid bucket name: File, folder, and bucket names must follow AWS object key naming guidelines and should avoid the use of any other characters.");let r=new fc({baseUrl:this.url,catalogName:t,auth:{type:"custom",getHeaders:async()=>e.headers},fetch:this.fetch}),n=this.shouldThrowOnError;return new Proxy(r,{get(s,i){let o=s[i];return typeof o!="function"?o:async(...a)=>{try{return {data:await o.apply(s,a),error:null}}catch(l){if(n)throw l;return {data:null,error:l}}}}})}},jm=class extends Xt{constructor(t,e={},r){let n=t.replace(/\/$/,""),s=E(E({},Ur),{},{"Content-Type":"application/json"},e);super(n,s,r,"vectors");}async createIndex(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/CreateIndex`,t,{headers:e.headers})||{})}async getIndex(t,e){var r=this;return r.handleOperation(async()=>await re.post(r.fetch,`${r.url}/GetIndex`,{vectorBucketName:t,indexName:e},{headers:r.headers}))}async listIndexes(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/ListIndexes`,t,{headers:e.headers}))}async deleteIndex(t,e){var r=this;return r.handleOperation(async()=>await re.post(r.fetch,`${r.url}/DeleteIndex`,{vectorBucketName:t,indexName:e},{headers:r.headers})||{})}},Mm=class extends Xt{constructor(t,e={},r){let n=t.replace(/\/$/,""),s=E(E({},Ur),{},{"Content-Type":"application/json"},e);super(n,s,r,"vectors");}async putVectors(t){var e=this;if(t.vectors.length<1||t.vectors.length>500)throw new Error("Vector batch size must be between 1 and 500 items");return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/PutVectors`,t,{headers:e.headers})||{})}async getVectors(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/GetVectors`,t,{headers:e.headers}))}async listVectors(t){var e=this;if(t.segmentCount!==void 0){if(t.segmentCount<1||t.segmentCount>16)throw new Error("segmentCount must be between 1 and 16");if(t.segmentIndex!==void 0&&(t.segmentIndex<0||t.segmentIndex>=t.segmentCount))throw new Error(`segmentIndex must be between 0 and ${t.segmentCount-1}`)}return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/ListVectors`,t,{headers:e.headers}))}async queryVectors(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/QueryVectors`,t,{headers:e.headers}))}async deleteVectors(t){var e=this;if(t.keys.length<1||t.keys.length>500)throw new Error("Keys batch size must be between 1 and 500 items");return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/DeleteVectors`,t,{headers:e.headers})||{})}},Lm=class extends Xt{constructor(t,e={},r){let n=t.replace(/\/$/,""),s=E(E({},Ur),{},{"Content-Type":"application/json"},e);super(n,s,r,"vectors");}async createBucket(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/CreateVectorBucket`,{vectorBucketName:t},{headers:e.headers})||{})}async getBucket(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/GetVectorBucket`,{vectorBucketName:t},{headers:e.headers}))}async listBuckets(t={}){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/ListVectorBuckets`,t,{headers:e.headers}))}async deleteBucket(t){var e=this;return e.handleOperation(async()=>await re.post(e.fetch,`${e.url}/DeleteVectorBucket`,{vectorBucketName:t},{headers:e.headers})||{})}},Um=class extends Lm{constructor(t,e={}){super(t,e.headers||{},e.fetch);}from(t){return new Wm(this.url,this.headers,t,this.fetch)}async createBucket(t){var e=()=>super.createBucket,r=this;return e().call(r,t)}async getBucket(t){var e=()=>super.getBucket,r=this;return e().call(r,t)}async listBuckets(t={}){var e=()=>super.listBuckets,r=this;return e().call(r,t)}async deleteBucket(t){var e=()=>super.deleteBucket,r=this;return e().call(r,t)}},Wm=class extends jm{constructor(t,e,r,n){super(t,e,n),this.vectorBucketName=r;}async createIndex(t){var e=()=>super.createIndex,r=this;return e().call(r,E(E({},t),{},{vectorBucketName:r.vectorBucketName}))}async listIndexes(t={}){var e=()=>super.listIndexes,r=this;return e().call(r,E(E({},t),{},{vectorBucketName:r.vectorBucketName}))}async getIndex(t){var e=()=>super.getIndex,r=this;return e().call(r,r.vectorBucketName,t)}async deleteIndex(t){var e=()=>super.deleteIndex,r=this;return e().call(r,r.vectorBucketName,t)}index(t){return new Bm(this.url,this.headers,this.vectorBucketName,t,this.fetch)}},Bm=class extends Mm{constructor(t,e,r,n,s){super(t,e,s),this.vectorBucketName=r,this.indexName=n;}async putVectors(t){var e=()=>super.putVectors,r=this;return e().call(r,E(E({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}async getVectors(t){var e=()=>super.getVectors,r=this;return e().call(r,E(E({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}async listVectors(t={}){var e=()=>super.listVectors,r=this;return e().call(r,E(E({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}async queryVectors(t){var e=()=>super.queryVectors,r=this;return e().call(r,E(E({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}async deleteVectors(t){var e=()=>super.deleteVectors,r=this;return e().call(r,E(E({},t),{},{vectorBucketName:r.vectorBucketName,indexName:r.indexName}))}},vc=class extends Nm{constructor(t,e={},r,n){super(t,e,r,n);}from(t){return new Om(this.url,this.headers,t,this.fetch)}get vectors(){return new Um(this.url+"/vector",{headers:this.headers,fetch:this.fetch})}get analytics(){return new Dm(this.url+"/iceberg",this.headers,this.fetch)}};});var Kn,Li=R(()=>{Kn="2.103.2";});var ct,Vn,Gn,Cc,Ec,Rc,Wr,Ui,xc,Pc,Yn=R(()=>{Li();ct=30*1e3,Vn=3,Gn=Vn*ct,Cc="http://localhost:9999",Ec="supabase.auth.token",Rc={"X-Client-Info":`gotrue-js/${Kn}`},Wr="X-Supabase-Api-Version",Ui={"2024-01-01":{timestamp:Date.parse("2024-01-01T00:00:00.0Z"),name:"2024-01-01"}},xc=/^([a-z0-9_-]{4})*($|[a-z0-9_-]{3}$|[a-z0-9_-]{2}$)$/i,Pc=600*1e3;});function v(t){return typeof t=="object"&&t!==null&&"__isAuthError"in t}function Tc(t){return v(t)&&t.name==="AuthApiError"}function Hr(t){return v(t)&&t.name==="AuthSessionMissingError"}function Ac(t){return v(t)&&t.name==="AuthImplicitGrantRedirectError"}function Qn(t){return v(t)&&t.name==="AuthRetryableFetchError"}var Je,Xn,ue,me,J,Ne,ut,dt,Br,Zn,Zt,Fr,pt,ht=R(()=>{Je=class extends Error{constructor(e,r,n){super(e),this.__isAuthError=true,this.name="AuthError",this.status=r,this.code=n;}toJSON(){return {name:this.name,message:this.message,status:this.status,code:this.code}}};Xn=class extends Je{constructor(e,r,n){super(e,r,n),this.name="AuthApiError",this.status=r,this.code=n;}};ue=class extends Je{constructor(e,r){super(e),this.name="AuthUnknownError",this.originalError=r;}},me=class extends Je{constructor(e,r,n,s){super(e,n,s),this.name=r,this.status=n;}},J=class extends me{constructor(){super("Auth session missing!","AuthSessionMissingError",400,void 0);}};Ne=class extends me{constructor(){super("Auth session or user missing","AuthInvalidTokenResponseError",500,void 0);}},ut=class extends me{constructor(e){super(e,"AuthInvalidCredentialsError",400,void 0);}},dt=class extends me{constructor(e,r=null){super(e,"AuthImplicitGrantRedirectError",500,void 0),this.details=null,this.details=r;}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{details:this.details})}};Br=class extends me{constructor(e,r=null){super(e,"AuthPKCEGrantCodeExchangeError",500,void 0),this.details=null,this.details=r;}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{details:this.details})}},Zn=class extends me{constructor(){super("PKCE code verifier not found in storage. This can happen if the auth flow was initiated in a different browser or device, or if the storage was cleared. For SSR frameworks (Next.js, SvelteKit, etc.), use @supabase/ssr on both the server and client to store the code verifier in cookies.","AuthPKCECodeVerifierMissingError",400,"pkce_code_verifier_not_found");}},Zt=class extends me{constructor(e,r){super(e,"AuthRetryableFetchError",r,void 0);}};Fr=class extends me{constructor(e,r,n){super(e,"AuthWeakPasswordError",r,"weak_password"),this.reasons=n;}toJSON(){return Object.assign(Object.assign({},super.toJSON()),{reasons:this.reasons})}},pt=class extends me{constructor(e){super(e,"AuthInvalidJwtError",400,"invalid_jwt");}};});function Oc(t,e,r){if(t!==null)for(e.queue=e.queue<<8|t,e.queuedBits+=8;e.queuedBits>=6;){let n=e.queue>>e.queuedBits-6&63;r(es[n]),e.queuedBits-=6;}else if(e.queuedBits>0)for(e.queue=e.queue<<6-e.queuedBits,e.queuedBits=6;e.queuedBits>=6;){let n=e.queue>>e.queuedBits-6&63;r(es[n]),e.queuedBits-=6;}}function $c(t,e,r){let n=Fm[t];if(n>-1)for(e.queue=e.queue<<6|n,e.queuedBits+=6;e.queuedBits>=8;)r(e.queue>>e.queuedBits-8&255),e.queuedBits-=8;else {if(n===-2)return;throw new Error(`Invalid Base64-URL character "${String.fromCharCode(t)}"`)}}function Wi(t){let e=[],r=o=>{e.push(String.fromCodePoint(o));},n={utf8seq:0,codepoint:0},s={queue:0,queuedBits:0},i=o=>{zm(o,n,r);};for(let o=0;o<t.length;o+=1)$c(t.charCodeAt(o),s,i);return e.join("")}function Hm(t,e){if(t<=127){e(t);return}else if(t<=2047){e(192|t>>6),e(128|t&63);return}else if(t<=65535){e(224|t>>12),e(128|t>>6&63),e(128|t&63);return}else if(t<=1114111){e(240|t>>18),e(128|t>>12&63),e(128|t>>6&63),e(128|t&63);return}throw new Error(`Unrecognized Unicode codepoint: ${t.toString(16)}`)}function qm(t,e){for(let r=0;r<t.length;r+=1){let n=t.charCodeAt(r);if(n>55295&&n<=56319){let s=(n-55296)*1024&65535;n=(t.charCodeAt(r+1)-56320&65535|s)+65536,r+=1;}Hm(n,e);}}function zm(t,e,r){if(e.utf8seq===0){if(t<=127){r(t);return}for(let n=1;n<6;n+=1)if((t>>7-n&1)===0){e.utf8seq=n;break}if(e.utf8seq===2)e.codepoint=t&31;else if(e.utf8seq===3)e.codepoint=t&15;else if(e.utf8seq===4)e.codepoint=t&7;else throw new Error("Invalid UTF-8 sequence");e.utf8seq-=1;}else if(e.utf8seq>0){if(t<=127)throw new Error("Invalid UTF-8 sequence");e.codepoint=e.codepoint<<6|t&63,e.utf8seq-=1,e.utf8seq===0&&r(e.codepoint);}}function Ke(t){let e=[],r={queue:0,queuedBits:0},n=s=>{e.push(s);};for(let s=0;s<t.length;s+=1)$c(t.charCodeAt(s),r,n);return new Uint8Array(e)}function Nc(t){let e=[];return qm(t,r=>e.push(r)),new Uint8Array(e)}function De(t){let e=[],r={queue:0,queuedBits:0},n=s=>{e.push(s);};return t.forEach(s=>Oc(s,r,n)),Oc(null,r,n),e.join("")}var es,Ic,Fm,ts=R(()=>{es="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_".split(""),Ic=`
31
+ \r=`.split(""),Fm=(()=>{let t=new Array(128);for(let e=0;e<t.length;e+=1)t[e]=-1;for(let e=0;e<Ic.length;e+=1)t[Ic[e].charCodeAt(0)]=-2;for(let e=0;e<es.length;e+=1)t[es[e].charCodeAt(0)]=e;return t})();});function Dc(t){return Math.round(Date.now()/1e3)+t}function jc(){return Symbol("auth-callback")}function Mc(t){let e={},r=new URL(t);if(r.hash&&r.hash[0]==="#")try{new URLSearchParams(r.hash.substring(1)).forEach((s,i)=>{e[i]=s;});}catch{}return r.searchParams.forEach((n,s)=>{e[s]=n;}),e}function zr(t){let e=t.split(".");if(e.length!==3)throw new pt("Invalid JWT structure");for(let n=0;n<e.length;n++)if(!xc.test(e[n]))throw new pt("JWT not in base64url format");return {header:JSON.parse(Wi(e[0])),payload:JSON.parse(Wi(e[1])),signature:Ke(e[2]),raw:{header:e[0],payload:e[1]}}}async function Uc(t){return await new Promise(e=>{setTimeout(()=>e(null),t);})}function Wc(t,e){return new Promise((n,s)=>{(async()=>{for(let i=0;i<1/0;i++)try{let o=await t(i);if(!e(i,null,o)){n(o);return}}catch(o){if(!e(i,o)){s(o);return}}})();})}function Jm(t){return ("0"+t.toString(16)).substr(-2)}function Km(){let e=new Uint32Array(56);if(typeof crypto>"u"){let r="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~",n=r.length,s="";for(let i=0;i<56;i++)s+=r.charAt(Math.floor(Math.random()*n));return s}return crypto.getRandomValues(e),Array.from(e,Jm).join("")}async function Vm(t){let r=new TextEncoder().encode(t),n=await crypto.subtle.digest("SHA-256",r),s=new Uint8Array(n);return Array.from(s).map(i=>String.fromCharCode(i)).join("")}async function Gm(t){if(!(typeof crypto<"u"&&typeof crypto.subtle<"u"&&typeof TextEncoder<"u"))return console.warn("WebCrypto API is not supported. Code challenge method will default to use plain instead of sha256."),t;let r=await Vm(t);return btoa(r).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}async function mt(t,e,r=false){let n=Km(),s=n;r&&(s+="/PASSWORD_RECOVERY"),await gt(t,`${e}-code-verifier`,s);let i=await Gm(n);return [i,n===i?"plain":"s256"]}function Bc(t){let e=t.headers.get(Wr);if(!e||!e.match(Ym))return null;try{return new Date(`${e}T00:00:00.0Z`)}catch{return null}}function Fc(t){if(!t)throw new Error("Missing exp claim");let e=Math.floor(Date.now()/1e3);if(t<=e)throw new Error("JWT has expired")}function Hc(t){switch(t){case "RS256":return {name:"RSASSA-PKCS1-v1_5",hash:{name:"SHA-256"}};case "ES256":return {name:"ECDSA",namedCurve:"P-256",hash:{name:"SHA-256"}};default:throw new Error("Invalid alg claim")}}function _t(t){if(!Xm.test(t))throw new Error("@supabase/auth-js: Expected parameter to be UUID but is not")}function ss(){let t={};return new Proxy(t,{get:(e,r)=>{if(r==="__isUserNotAvailableProxy")return true;if(typeof r=="symbol"){let n=r.toString();if(n==="Symbol(Symbol.toPrimitive)"||n==="Symbol(Symbol.toStringTag)"||n==="Symbol(util.inspect.custom)")return}throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Accessing the "${r}" property of the session object is not supported. Please use getUser() instead.`)},set:(e,r)=>{throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Setting the "${r}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)},deleteProperty:(e,r)=>{throw new Error(`@supabase/auth-js: client was created with userStorage option and there was no user stored in the user storage. Deleting the "${r}" property of the session object is not supported. Please use getUser() to fetch a user object you can manipulate.`)}})}function qc(t,e){return new Proxy(t,{get:(r,n,s)=>{if(n==="__isInsecureUserWarningProxy")return true;if(typeof n=="symbol"){let i=n.toString();if(i==="Symbol(Symbol.toPrimitive)"||i==="Symbol(Symbol.toStringTag)"||i==="Symbol(util.inspect.custom)"||i==="Symbol(nodejs.util.inspect.custom)")return Reflect.get(r,n,s)}return !e.value&&typeof n=="string"&&(console.warn("Using the user object as returned from supabase.auth.getSession() or from some supabase.auth.onAuthStateChange() events could be insecure! This value comes directly from the storage medium (usually cookies on the server) and may not be authentic. Use supabase.auth.getUser() instead which authenticates the data by contacting the Supabase Auth server."),e.value=true),Reflect.get(r,n,s)}})}function Bi(t){return JSON.parse(JSON.stringify(t))}var q,ft,rs,ns,Lc,gt,Ve,z,qr,Ym,Xm,Qt=R(()=>{Yn();ht();ts();q=()=>typeof window<"u"&&typeof document<"u",ft={tested:false,writable:false},rs=()=>{if(!q())return false;try{if(typeof globalThis.localStorage!="object")return !1}catch{return false}if(ft.tested)return ft.writable;let t=`lswt-${Math.random()}${Math.random()}`;try{globalThis.localStorage.setItem(t,t),globalThis.localStorage.removeItem(t),ft.tested=!0,ft.writable=!0;}catch{ft.tested=true,ft.writable=false;}return ft.writable};ns=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),Lc=t=>typeof t=="object"&&t!==null&&"status"in t&&"ok"in t&&"json"in t&&typeof t.json=="function",gt=async(t,e,r)=>{await t.setItem(e,JSON.stringify(r));},Ve=async(t,e)=>{let r=await t.getItem(e);if(!r)return null;try{return JSON.parse(r)}catch{return r}},z=async(t,e)=>{await t.removeItem(e);},qr=class t{constructor(){this.promise=new t.promiseConstructor((e,r)=>{this.resolve=e,this.reject=r;});}};qr.promiseConstructor=Promise;Ym=/^2[0-9]{3}-(0[1-9]|1[0-2])-(0[1-9]|1[0-9]|2[0-9]|3[0-1])$/i;Xm=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;});async function zc(t){var e;if(!Lc(t))throw new Zt(wt(t),0);if(Zm.includes(t.status))throw new Zt(wt(t),t.status);let r;try{r=await t.json();}catch(i){throw new ue(wt(i),i)}let n,s=Bc(t);if(s&&s.getTime()>=Ui["2024-01-01"].timestamp&&typeof r=="object"&&r&&typeof r.code=="string"?n=r.code:typeof r=="object"&&r&&typeof r.error_code=="string"&&(n=r.error_code),n){if(n==="weak_password")throw new Fr(wt(r),t.status,((e=r.weak_password)===null||e===void 0?void 0:e.reasons)||[]);if(n==="session_not_found")throw new J}else if(typeof r=="object"&&r&&typeof r.weak_password=="object"&&r.weak_password&&Array.isArray(r.weak_password.reasons)&&r.weak_password.reasons.length&&r.weak_password.reasons.reduce((i,o)=>i&&typeof o=="string",true))throw new Fr(wt(r),t.status,r.weak_password.reasons);throw new Xn(wt(r),t.status||500,n)}async function C(t,e,r,n){var s;let i=Object.assign({},n?.headers);i[Wr]||(i[Wr]=Ui["2024-01-01"].name),n?.jwt&&(i.Authorization=`Bearer ${n.jwt}`);let o=(s=n?.query)!==null&&s!==void 0?s:{};n?.redirectTo&&(o.redirect_to=n.redirectTo);let a=Object.keys(o).length?"?"+new URLSearchParams(o).toString():"",l=await e_(t,e,r+a,{headers:i,noResolveJson:n?.noResolveJson},{},n?.body);return n?.xform?n?.xform(l):{data:Object.assign({},l),error:null}}async function e_(t,e,r,n,s,i){let o=Qm(e,n,s,i),a;try{a=await t(r,Object.assign({},o));}catch(l){throw console.error(l),new Zt(wt(l),0)}if(a.ok||await zc(a),n?.noResolveJson)return a;try{return await a.json()}catch(l){await zc(l);}}function de(t){var e;let r=null;t_(t)&&(r=Object.assign({},t),t.expires_at||(r.expires_at=Dc(t.expires_in)));let n=(e=t.user)!==null&&e!==void 0?e:t;return {data:{session:r,user:n},error:null}}function Fi(t){let e=de(t);return !e.error&&t.weak_password&&typeof t.weak_password=="object"&&Array.isArray(t.weak_password.reasons)&&t.weak_password.reasons.length&&t.weak_password.message&&typeof t.weak_password.message=="string"&&t.weak_password.reasons.reduce((r,n)=>r&&typeof n=="string",true)&&(e.data.weak_password=t.weak_password),e}function Se(t){var e;return {data:{user:(e=t.user)!==null&&e!==void 0?e:t},error:null}}function Jc(t){return {data:t,error:null}}function Kc(t){let{action_link:e,email_otp:r,hashed_token:n,redirect_to:s,verification_type:i}=t,o=at(t,["action_link","email_otp","hashed_token","redirect_to","verification_type"]),a={action_link:e,email_otp:r,hashed_token:n,redirect_to:s,verification_type:i},l=Object.assign({},o);return {data:{properties:a,user:l},error:null}}function Hi(t){return t}function t_(t){return t.access_token&&t.refresh_token&&t.expires_in}var wt,Zm,Qm,qi=R(()=>{vr();Yn();Qt();ht();wt=t=>t.msg||t.message||t.error_description||t.error||JSON.stringify(t),Zm=[502,503,504,520,521,522,523,524,530];Qm=(t,e,r,n)=>{let s={method:t,headers:e?.headers||{}};return t==="GET"?s:(s.headers=Object.assign({"Content-Type":"application/json;charset=UTF-8"},e?.headers),s.body=JSON.stringify(n),Object.assign(Object.assign({},s),r))};});var is,zi=R(()=>{is=["global","local","others"];});var yt,os=R(()=>{vr();qi();Qt();zi();ht();yt=class{constructor({url:e="",headers:r={},fetch:n}){this.url=e,this.headers=r,this.fetch=ns(n),this.mfa={listFactors:this._listFactors.bind(this),deleteFactor:this._deleteFactor.bind(this)},this.oauth={listClients:this._listOAuthClients.bind(this),createClient:this._createOAuthClient.bind(this),getClient:this._getOAuthClient.bind(this),updateClient:this._updateOAuthClient.bind(this),deleteClient:this._deleteOAuthClient.bind(this),regenerateClientSecret:this._regenerateOAuthClientSecret.bind(this)},this.customProviders={listProviders:this._listCustomProviders.bind(this),createProvider:this._createCustomProvider.bind(this),getProvider:this._getCustomProvider.bind(this),updateProvider:this._updateCustomProvider.bind(this),deleteProvider:this._deleteCustomProvider.bind(this)};}async signOut(e,r=is[0]){if(is.indexOf(r)<0)throw new Error(`@supabase/auth-js: Parameter scope must be one of ${is.join(", ")}`);try{return await C(this.fetch,"POST",`${this.url}/logout?scope=${r}`,{headers:this.headers,jwt:e,noResolveJson:!0}),{data:null,error:null}}catch(n){if(v(n))return {data:null,error:n};throw n}}async inviteUserByEmail(e,r={}){try{return await C(this.fetch,"POST",`${this.url}/invite`,{body:{email:e,data:r.data},headers:this.headers,redirectTo:r.redirectTo,xform:Se})}catch(n){if(v(n))return {data:{user:null},error:n};throw n}}async generateLink(e){try{let{options:r}=e,n=at(e,["options"]),s=Object.assign(Object.assign({},n),r);return "newEmail"in n&&(s.new_email=n?.newEmail,delete s.newEmail),await C(this.fetch,"POST",`${this.url}/admin/generate_link`,{body:s,headers:this.headers,xform:Kc,redirectTo:r?.redirectTo})}catch(r){if(v(r))return {data:{properties:null,user:null},error:r};throw r}}async createUser(e){try{return await C(this.fetch,"POST",`${this.url}/admin/users`,{body:e,headers:this.headers,xform:Se})}catch(r){if(v(r))return {data:{user:null},error:r};throw r}}async listUsers(e){var r,n,s,i,o,a,l;try{let c={nextPage:null,lastPage:0,total:0},u=await C(this.fetch,"GET",`${this.url}/admin/users`,{headers:this.headers,noResolveJson:!0,query:{page:(n=(r=e?.page)===null||r===void 0?void 0:r.toString())!==null&&n!==void 0?n:"",per_page:(i=(s=e?.perPage)===null||s===void 0?void 0:s.toString())!==null&&i!==void 0?i:""},xform:Hi});if(u.error)throw u.error;let d=await u.json(),p=(o=u.headers.get("x-total-count"))!==null&&o!==void 0?o:0,h=(l=(a=u.headers.get("link"))===null||a===void 0?void 0:a.split(","))!==null&&l!==void 0?l:[];return h.length>0&&(h.forEach(f=>{let m=parseInt(f.split(";")[0].split("=")[1].substring(0,1)),_=JSON.parse(f.split(";")[1].split("=")[1]);c[`${_}Page`]=m;}),c.total=parseInt(p)),{data:Object.assign(Object.assign({},d),c),error:null}}catch(c){if(v(c))return {data:{users:[]},error:c};throw c}}async getUserById(e){_t(e);try{return await C(this.fetch,"GET",`${this.url}/admin/users/${e}`,{headers:this.headers,xform:Se})}catch(r){if(v(r))return {data:{user:null},error:r};throw r}}async updateUserById(e,r){_t(e);try{return await C(this.fetch,"PUT",`${this.url}/admin/users/${e}`,{body:r,headers:this.headers,xform:Se})}catch(n){if(v(n))return {data:{user:null},error:n};throw n}}async deleteUser(e,r=false){_t(e);try{return await C(this.fetch,"DELETE",`${this.url}/admin/users/${e}`,{headers:this.headers,body:{should_soft_delete:r},xform:Se})}catch(n){if(v(n))return {data:{user:null},error:n};throw n}}async _listFactors(e){_t(e.userId);try{let{data:r,error:n}=await C(this.fetch,"GET",`${this.url}/admin/users/${e.userId}/factors`,{headers:this.headers,xform:s=>({data:{factors:s},error:null})});return {data:r,error:n}}catch(r){if(v(r))return {data:null,error:r};throw r}}async _deleteFactor(e){_t(e.userId),_t(e.id);try{return {data:await C(this.fetch,"DELETE",`${this.url}/admin/users/${e.userId}/factors/${e.id}`,{headers:this.headers}),error:null}}catch(r){if(v(r))return {data:null,error:r};throw r}}async _listOAuthClients(e){var r,n,s,i,o,a,l;try{let c={nextPage:null,lastPage:0,total:0},u=await C(this.fetch,"GET",`${this.url}/admin/oauth/clients`,{headers:this.headers,noResolveJson:!0,query:{page:(n=(r=e?.page)===null||r===void 0?void 0:r.toString())!==null&&n!==void 0?n:"",per_page:(i=(s=e?.perPage)===null||s===void 0?void 0:s.toString())!==null&&i!==void 0?i:""},xform:Hi});if(u.error)throw u.error;let d=await u.json(),p=(o=u.headers.get("x-total-count"))!==null&&o!==void 0?o:0,h=(l=(a=u.headers.get("link"))===null||a===void 0?void 0:a.split(","))!==null&&l!==void 0?l:[];return h.length>0&&(h.forEach(f=>{let m=parseInt(f.split(";")[0].split("=")[1].substring(0,1)),_=JSON.parse(f.split(";")[1].split("=")[1]);c[`${_}Page`]=m;}),c.total=parseInt(p)),{data:Object.assign(Object.assign({},d),c),error:null}}catch(c){if(v(c))return {data:{clients:[]},error:c};throw c}}async _createOAuthClient(e){try{return await C(this.fetch,"POST",`${this.url}/admin/oauth/clients`,{body:e,headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _getOAuthClient(e){try{return await C(this.fetch,"GET",`${this.url}/admin/oauth/clients/${e}`,{headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _updateOAuthClient(e,r){try{return await C(this.fetch,"PUT",`${this.url}/admin/oauth/clients/${e}`,{body:r,headers:this.headers,xform:n=>({data:n,error:null})})}catch(n){if(v(n))return {data:null,error:n};throw n}}async _deleteOAuthClient(e){try{return await C(this.fetch,"DELETE",`${this.url}/admin/oauth/clients/${e}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(r){if(v(r))return {data:null,error:r};throw r}}async _regenerateOAuthClientSecret(e){try{return await C(this.fetch,"POST",`${this.url}/admin/oauth/clients/${e}/regenerate_secret`,{headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _listCustomProviders(e){try{let r={};return e?.type&&(r.type=e.type),await C(this.fetch,"GET",`${this.url}/admin/custom-providers`,{headers:this.headers,query:r,xform:n=>{var s;return {data:{providers:(s=n?.providers)!==null&&s!==void 0?s:[]},error:null}}})}catch(r){if(v(r))return {data:{providers:[]},error:r};throw r}}async _createCustomProvider(e){try{return await C(this.fetch,"POST",`${this.url}/admin/custom-providers`,{body:e,headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _getCustomProvider(e){try{return await C(this.fetch,"GET",`${this.url}/admin/custom-providers/${e}`,{headers:this.headers,xform:r=>({data:r,error:null})})}catch(r){if(v(r))return {data:null,error:r};throw r}}async _updateCustomProvider(e,r){try{return await C(this.fetch,"PUT",`${this.url}/admin/custom-providers/${e}`,{body:r,headers:this.headers,xform:n=>({data:n,error:null})})}catch(n){if(v(n))return {data:null,error:n};throw n}}async _deleteCustomProvider(e){try{return await C(this.fetch,"DELETE",`${this.url}/admin/custom-providers/${e}`,{headers:this.headers,noResolveJson:!0}),{data:null,error:null}}catch(r){if(v(r))return {data:null,error:r};throw r}}};});function Ji(t={}){return {getItem:e=>t[e]||null,setItem:(e,r)=>{t[e]=r;},removeItem:e=>{delete t[e];}}}var Vc=R(()=>{});async function Ki(t,e,r){_e.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquire lock",t,e);let n=new globalThis.AbortController,s;e>0&&(s=setTimeout(()=>{n.abort(),_e.debug&&console.log("@supabase/gotrue-js: navigatorLock acquire timed out",t);},e)),await Promise.resolve();try{return await globalThis.navigator.locks.request(t,e===0?{mode:"exclusive",ifAvailable:!0}:{mode:"exclusive",signal:n.signal},async i=>{if(i){clearTimeout(s),_e.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquired",t,i.name);try{return await r()}finally{_e.debug&&console.log("@supabase/gotrue-js: navigatorLock: released",t,i.name);}}else {if(e===0)throw _e.debug&&console.log("@supabase/gotrue-js: navigatorLock: not immediately available",t),new Kr(`Acquiring an exclusive Navigator LockManager lock "${t}" immediately failed`);if(_e.debug)try{let o=await globalThis.navigator.locks.query();console.log("@supabase/gotrue-js: Navigator LockManager state",JSON.stringify(o,null," "));}catch(o){console.warn("@supabase/gotrue-js: Error when querying Navigator LockManager state",o);}return console.warn("@supabase/gotrue-js: Navigator LockManager returned a null lock when using #request without ifAvailable set to true, it appears this browser is not following the LockManager spec https://developer.mozilla.org/en-US/docs/Web/API/LockManager/request"),clearTimeout(s),await r()}})}catch(i){if(e>0&&clearTimeout(s),i?.name==="AbortError"&&e>0){if(n.signal.aborted)return _e.debug&&console.log("@supabase/gotrue-js: navigatorLock: acquire timeout, recovering by stealing lock",t),console.warn(`@supabase/gotrue-js: Lock "${t}" was not released within ${e}ms. This may indicate an orphaned lock from a component unmount (e.g., React Strict Mode). Forcefully acquiring the lock to recover.`),await Promise.resolve().then(()=>globalThis.navigator.locks.request(t,{mode:"exclusive",steal:true},async o=>{if(o){_e.debug&&console.log("@supabase/gotrue-js: navigatorLock: recovered (stolen)",t,o.name);try{return await r()}finally{_e.debug&&console.log("@supabase/gotrue-js: navigatorLock: released (stolen)",t,o.name);}}else return console.warn("@supabase/gotrue-js: Navigator LockManager returned null lock even with steal: true"),await r()}));throw _e.debug&&console.log("@supabase/gotrue-js: navigatorLock: lock was stolen by another request",t),new Kr(`Lock "${t}" was released because another request stole it`)}throw i}}var _e,Jr,Kr,Vi=R(()=>{Qt();_e={debug:!!(globalThis&&rs()&&globalThis.localStorage&&globalThis.localStorage.getItem("supabase.gotrue-js.locks.debug")==="true")},Jr=class extends Error{constructor(e){super(e),this.isAcquireTimeout=true;}},Kr=class extends Jr{};});function Gc(){if(typeof globalThis!="object")try{Object.defineProperty(Object.prototype,"__magic__",{get:function(){return this},configurable:!0}),__magic__.globalThis=__magic__,delete Object.prototype.__magic__;}catch{typeof self<"u"&&(self.globalThis=self);}}var Yc=R(()=>{});function Gi(t){if(!/^0x[a-fA-F0-9]{40}$/.test(t))throw new Error(`@supabase/auth-js: Address "${t}" is invalid.`);return t.toLowerCase()}function Xc(t){return parseInt(t,16)}function Zc(t){let e=new TextEncoder().encode(t);return "0x"+Array.from(e,n=>n.toString(16).padStart(2,"0")).join("")}function Qc(t){var e;let{chainId:r,domain:n,expirationTime:s,issuedAt:i=new Date,nonce:o,notBefore:a,requestId:l,resources:c,scheme:u,uri:d,version:p}=t;{if(!Number.isInteger(r))throw new Error(`@supabase/auth-js: Invalid SIWE message field "chainId". Chain ID must be a EIP-155 chain ID. Provided value: ${r}`);if(!n)throw new Error('@supabase/auth-js: Invalid SIWE message field "domain". Domain must be provided.');if(o&&o.length<8)throw new Error(`@supabase/auth-js: Invalid SIWE message field "nonce". Nonce must be at least 8 characters. Provided value: ${o}`);if(!d)throw new Error('@supabase/auth-js: Invalid SIWE message field "uri". URI must be provided.');if(p!=="1")throw new Error(`@supabase/auth-js: Invalid SIWE message field "version". Version must be '1'. Provided value: ${p}`);if(!((e=t.statement)===null||e===void 0)&&e.includes(`
32
+ `))throw new Error(`@supabase/auth-js: Invalid SIWE message field "statement". Statement must not include '\\n'. Provided value: ${t.statement}`)}let h=Gi(t.address),f=u?`${u}://${n}`:n,m=t.statement?`${t.statement}
33
+ `:"",_=`${f} wants you to sign in with your Ethereum account:
34
+ ${h}
35
35
 
36
36
  ${m}`,b=`URI: ${d}
37
37
  Version: ${p}
38
38
  Chain ID: ${r}${o?`
39
39
  Nonce: ${o}`:""}
40
- Issued At: ${s.toISOString()}`;if(i&&(b+=`
41
- Expiration Time: ${i.toISOString()}`),a&&(b+=`
40
+ Issued At: ${i.toISOString()}`;if(s&&(b+=`
41
+ Expiration Time: ${s.toISOString()}`),a&&(b+=`
42
42
  Not Before: ${a.toISOString()}`),l&&(b+=`
43
43
  Request ID: ${l}`),c){let w=`
44
- Resources:`;for(let y of c){if(!y||typeof y!="string")throw new Error(`@supabase/auth-js: Invalid SIWE message field "resources". Every resource must be a valid string. Provided value: ${y}`);w+=`
45
- - ${y}`;}b+=w;}return `${_}
46
- ${b}`}var Kc=R(()=>{});function Vc({error:t,options:e}){var r,n,i;let{publicKey:s}=e;if(!s)throw Error("options was missing required publicKey property");if(t.name==="AbortError"){if(e.signal instanceof AbortSignal)return new L({message:"Registration ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:t})}else if(t.name==="ConstraintError"){if(((r=s.authenticatorSelection)===null||r===void 0?void 0:r.requireResidentKey)===true)return new L({message:"Discoverable credentials were required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT",cause:t});if(e.mediation==="conditional"&&((n=s.authenticatorSelection)===null||n===void 0?void 0:n.userVerification)==="required")return new L({message:"User verification was required during automatic registration but it could not be performed",code:"ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE",cause:t});if(((i=s.authenticatorSelection)===null||i===void 0?void 0:i.userVerification)==="required")return new L({message:"User verification was required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT",cause:t})}else {if(t.name==="InvalidStateError")return new L({message:"The authenticator was previously registered",code:"ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED",cause:t});if(t.name==="NotAllowedError")return new L({message:t.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t});if(t.name==="NotSupportedError")return s.pubKeyCredParams.filter(a=>a.type==="public-key").length===0?new L({message:'No entry in pubKeyCredParams was of type "public-key"',code:"ERROR_MALFORMED_PUBKEYCREDPARAMS",cause:t}):new L({message:"No available authenticator supported any of the specified pubKeyCredParams algorithms",code:"ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG",cause:t});if(t.name==="SecurityError"){let o=window.location.hostname;if(Ks(o)){if(s.rp.id!==o)return new L({message:`The RP ID "${s.rp.id}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:t})}else return new L({message:`${window.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:t})}else if(t.name==="TypeError"){if(s.user.id.byteLength<1||s.user.id.byteLength>64)return new L({message:"User ID was not between 1 and 64 characters",code:"ERROR_INVALID_USER_ID_LENGTH",cause:t})}else if(t.name==="UnknownError")return new L({message:"The authenticator was unable to process the specified options, or could not create a new credential",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:t})}return new L({message:"a Non-Webauthn related error has occurred",code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t})}function Gc({error:t,options:e}){let{publicKey:r}=e;if(!r)throw Error("options was missing required publicKey property");if(t.name==="AbortError"){if(e.signal instanceof AbortSignal)return new L({message:"Authentication ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:t})}else {if(t.name==="NotAllowedError")return new L({message:t.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t});if(t.name==="SecurityError"){let n=window.location.hostname;if(Ks(n)){if(r.rpId!==n)return new L({message:`The RP ID "${r.rpId}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:t})}else return new L({message:`${window.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:t})}else if(t.name==="UnknownError")return new L({message:"The authenticator was unable to process the specified options, or could not create a new assertion signature",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:t})}return new L({message:"a Non-Webauthn related error has occurred",code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t})}var L,yt,Yc=R(()=>{Vs();L=class extends Error{constructor({message:e,code:r,cause:n,name:i}){var s;super(e,{cause:n}),this.__isWebAuthnError=true,this.name=(s=i??(n instanceof Error?n.name:void 0))!==null&&s!==void 0?s:"Unknown Error",this.code=r;}},yt=class extends L{constructor(e,r){super({code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:r,message:e}),this.name="WebAuthnUnknownError",this.originalError=r;}};});function Zc(t){if(!t)throw new Error("Credential creation options are required");if(typeof PublicKeyCredential<"u"&&"parseCreationOptionsFromJSON"in PublicKeyCredential&&typeof PublicKeyCredential.parseCreationOptionsFromJSON=="function")return PublicKeyCredential.parseCreationOptionsFromJSON(t);let{challenge:e,user:r,excludeCredentials:n}=t,i=ot(t,["challenge","user","excludeCredentials"]),s=Ke(e).buffer,o=Object.assign(Object.assign({},r),{id:Ke(r.id).buffer}),a=Object.assign(Object.assign({},i),{challenge:s,user:o});if(n&&n.length>0){a.excludeCredentials=new Array(n.length);for(let l=0;l<n.length;l++){let c=n[l];a.excludeCredentials[l]=Object.assign(Object.assign({},c),{id:Ke(c.id).buffer,type:c.type||"public-key",transports:c.transports});}}return a}function Qc(t){if(!t)throw new Error("Credential request options are required");if(typeof PublicKeyCredential<"u"&&"parseRequestOptionsFromJSON"in PublicKeyCredential&&typeof PublicKeyCredential.parseRequestOptionsFromJSON=="function")return PublicKeyCredential.parseRequestOptionsFromJSON(t);let{challenge:e,allowCredentials:r}=t,n=ot(t,["challenge","allowCredentials"]),i=Ke(e).buffer,s=Object.assign(Object.assign({},n),{challenge:i});if(r&&r.length>0){s.allowCredentials=new Array(r.length);for(let o=0;o<r.length;o++){let a=r[o];s.allowCredentials[o]=Object.assign(Object.assign({},a),{id:Ke(a.id).buffer,type:a.type||"public-key",transports:a.transports});}}return s}function eu(t){var e;if("toJSON"in t&&typeof t.toJSON=="function")return t.toJSON();let r=t;return {id:t.id,rawId:t.id,response:{attestationObject:De(new Uint8Array(t.response.attestationObject)),clientDataJSON:De(new Uint8Array(t.response.clientDataJSON))},type:"public-key",clientExtensionResults:t.getClientExtensionResults(),authenticatorAttachment:(e=r.authenticatorAttachment)!==null&&e!==void 0?e:void 0}}function tu(t){var e;if("toJSON"in t&&typeof t.toJSON=="function")return t.toJSON();let r=t,n=t.getClientExtensionResults(),i=t.response;return {id:t.id,rawId:t.id,response:{authenticatorData:De(new Uint8Array(i.authenticatorData)),clientDataJSON:De(new Uint8Array(i.clientDataJSON)),signature:De(new Uint8Array(i.signature)),userHandle:i.userHandle?De(new Uint8Array(i.userHandle)):void 0},type:"public-key",clientExtensionResults:n,authenticatorAttachment:(e=r.authenticatorAttachment)!==null&&e!==void 0?e:void 0}}function Ks(t){return t==="localhost"||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(t)}function Xc(){var t,e;return !!(q()&&"PublicKeyCredential"in window&&window.PublicKeyCredential&&"credentials"in navigator&&typeof((t=navigator?.credentials)===null||t===void 0?void 0:t.create)=="function"&&typeof((e=navigator?.credentials)===null||e===void 0?void 0:e.get)=="function")}async function Fm(t){try{let e=await navigator.credentials.create(t);return e?e instanceof PublicKeyCredential?{data:e,error:null}:{data:null,error:new yt("Browser returned unexpected credential type",e)}:{data:null,error:new yt("Empty credential response",e)}}catch(e){return {data:null,error:Vc({error:e,options:t})}}}async function Hm(t){try{let e=await navigator.credentials.get(t);return e?e instanceof PublicKeyCredential?{data:e,error:null}:{data:null,error:new yt("Browser returned unexpected credential type",e)}:{data:null,error:new yt("Empty credential response",e)}}catch(e){return {data:null,error:Gc({error:e,options:t})}}}function ii(...t){let e=i=>i!==null&&typeof i=="object"&&!Array.isArray(i),r=i=>i instanceof ArrayBuffer||ArrayBuffer.isView(i),n={};for(let i of t)if(i)for(let s in i){let o=i[s];if(o!==void 0)if(Array.isArray(o))n[s]=o;else if(r(o))n[s]=o;else if(e(o)){let a=n[s];e(a)?n[s]=ii(a,o):n[s]=ii(o);}else n[s]=o;}return n}function Jm(t,e){return ii(qm,t,e||{})}function Km(t,e){return ii(zm,t,e||{})}var Gs,Bm,qm,zm,si,Vs=R(()=>{kr();Zn();pt();Zt();Yc();Gs=class{createNewAbortSignal(){if(this.controller){let r=new Error("Cancelling existing WebAuthn API call for new one");r.name="AbortError",this.controller.abort(r);}let e=new AbortController;return this.controller=e,e.signal}cancelCeremony(){if(this.controller){let e=new Error("Manually cancelling existing WebAuthn API call");e.name="AbortError",this.controller.abort(e),this.controller=void 0;}}},Bm=new Gs;qm={hints:["security-key"],authenticatorSelection:{authenticatorAttachment:"cross-platform",requireResidentKey:false,userVerification:"preferred",residentKey:"discouraged"},attestation:"direct"},zm={userVerification:"preferred",hints:["security-key"],attestation:"direct"};si=class{constructor(e){this.client=e,this.enroll=this._enroll.bind(this),this.challenge=this._challenge.bind(this),this.verify=this._verify.bind(this),this.authenticate=this._authenticate.bind(this),this.register=this._register.bind(this);}async _enroll(e){return this.client.mfa.enroll(Object.assign(Object.assign({},e),{factorType:"webauthn"}))}async _challenge({factorId:e,webauthn:r,friendlyName:n,signal:i},s){var o;try{let{data:a,error:l}=await this.client.mfa.challenge({factorId:e,webauthn:r});if(!a)return {data:null,error:l};let c=i??Bm.createNewAbortSignal();if(a.webauthn.type==="create"){let{user:u}=a.webauthn.credential_options.publicKey;if(!u.name){let d=n;if(d)u.name=`${u.id}:${d}`;else {let f=(await this.client.getUser()).data.user,h=((o=f?.user_metadata)===null||o===void 0?void 0:o.name)||f?.email||f?.id||"User";u.name=`${u.id}:${h}`;}}u.displayName||(u.displayName=u.name);}switch(a.webauthn.type){case "create":{let u=Jm(a.webauthn.credential_options.publicKey,s?.create),{data:d,error:p}=await Fm({publicKey:u,signal:c});return d?{data:{factorId:e,challengeId:a.id,webauthn:{type:a.webauthn.type,credential_response:d}},error:null}:{data:null,error:p}}case "request":{let u=Km(a.webauthn.credential_options.publicKey,s?.request),{data:d,error:p}=await Hm(Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:u,signal:c}));return d?{data:{factorId:e,challengeId:a.id,webauthn:{type:a.webauthn.type,credential_response:d}},error:null}:{data:null,error:p}}}}catch(a){return v(a)?{data:null,error:a}:{data:null,error:new ue("Unexpected error in challenge",a)}}}async _verify({challengeId:e,factorId:r,webauthn:n}){return this.client.mfa.verify({factorId:r,challengeId:e,webauthn:n})}async _authenticate({factorId:e,webauthn:{rpId:r=typeof window<"u"?window.location.hostname:void 0,rpOrigins:n=typeof window<"u"?[window.location.origin]:void 0,signal:i}={}},s){if(!r)return {data:null,error:new Je("rpId is required for WebAuthn authentication")};try{if(!Xc())return {data:null,error:new ue("Browser does not support WebAuthn",null)};let{data:o,error:a}=await this.challenge({factorId:e,webauthn:{rpId:r,rpOrigins:n},signal:i},{request:s});if(!o)return {data:null,error:a};let{webauthn:l}=o;return this._verify({factorId:e,challengeId:o.challengeId,webauthn:{type:l.type,rpId:r,rpOrigins:n,credential_response:l.credential_response}})}catch(o){return v(o)?{data:null,error:o}:{data:null,error:new ue("Unexpected error in authenticate",o)}}}async _register({friendlyName:e,webauthn:{rpId:r=typeof window<"u"?window.location.hostname:void 0,rpOrigins:n=typeof window<"u"?[window.location.origin]:void 0,signal:i}={}},s){if(!r)return {data:null,error:new Je("rpId is required for WebAuthn registration")};try{if(!Xc())return {data:null,error:new ue("Browser does not support WebAuthn",null)};let{data:o,error:a}=await this._enroll({friendlyName:e});if(!o)return await this.client.mfa.listFactors().then(u=>{var d;return (d=u.data)===null||d===void 0?void 0:d.all.find(p=>p.factor_type==="webauthn"&&p.friendly_name===e&&p.status!=="unverified")}).then(u=>u?this.client.mfa.unenroll({factorId:u?.id}):void 0),{data:null,error:a};let{data:l,error:c}=await this._challenge({factorId:o.id,friendlyName:o.friendly_name,webauthn:{rpId:r,rpOrigins:n},signal:i},{create:s});return l?this._verify({factorId:o.id,challengeId:l.challengeId,webauthn:{rpId:r,rpOrigins:n,type:l.webauthn.type,credential_response:l.webauthn.credential_response}}):{data:null,error:c}}catch(o){return v(o)?{data:null,error:o}:{data:null,error:new ue("Unexpected error in register",o)}}}};});async function ru(t,e,r){return await r()}var Vm,Qt,oi,Ys,Xs=R(()=>{ni();Kn();pt();Bs();Zt();Bc();zs();Hc();Ds();Zn();Kc();Vs();Fc();Vm={url:_c,storageKey:wc,autoRefreshToken:true,persistSession:true,detectSessionInUrl:true,headers:yc,flowType:"implicit",debug:false,hasCustomAuthorizationHeader:false,throwOnError:false,lockAcquireTimeout:5e3,skipAutoInitialize:false};Qt={},oi=class t{get jwks(){var e,r;return (r=(e=Qt[this.storageKey])===null||e===void 0?void 0:e.jwks)!==null&&r!==void 0?r:{keys:[]}}set jwks(e){Qt[this.storageKey]=Object.assign(Object.assign({},Qt[this.storageKey]),{jwks:e});}get jwks_cached_at(){var e,r;return (r=(e=Qt[this.storageKey])===null||e===void 0?void 0:e.cachedAt)!==null&&r!==void 0?r:Number.MIN_SAFE_INTEGER}set jwks_cached_at(e){Qt[this.storageKey]=Object.assign(Object.assign({},Qt[this.storageKey]),{cachedAt:e});}constructor(e){var r,n,i;this.userStorage=null,this.memoryStorage=null,this.stateChangeEmitters=new Map,this.autoRefreshTicker=null,this.autoRefreshTickTimeout=null,this.visibilityChangedCallback=null,this.refreshingDeferred=null,this.initializePromise=null,this.detectSessionInUrl=true,this.hasCustomAuthorizationHeader=false,this.suppressGetSessionWarning=false,this.lockAcquired=false,this.pendingInLock=[],this.broadcastChannel=null,this.logger=console.log;let s=Object.assign(Object.assign({},Vm),e);if(this.storageKey=s.storageKey,this.instanceID=(r=t.nextInstanceID[this.storageKey])!==null&&r!==void 0?r:0,t.nextInstanceID[this.storageKey]=this.instanceID+1,this.logDebugMessages=!!s.debug,typeof s.debug=="function"&&(this.logger=s.debug),this.instanceID>0&&q()){let o=`${this._logPrefix()} Multiple GoTrueClient instances detected in the same browser context. It is not an error, but this should be avoided as it may produce undefined behavior when used concurrently under the same storage key.`;console.warn(o),this.logDebugMessages&&console.trace(o);}if(this.persistSession=s.persistSession,this.autoRefreshToken=s.autoRefreshToken,this.admin=new wt({url:s.url,headers:s.headers,fetch:s.fetch}),this.url=s.url,this.headers=s.headers,this.fetch=ei(s.fetch),this.lock=s.lock||ru,this.detectSessionInUrl=s.detectSessionInUrl,this.flowType=s.flowType,this.hasCustomAuthorizationHeader=s.hasCustomAuthorizationHeader,this.throwOnError=s.throwOnError,this.lockAcquireTimeout=s.lockAcquireTimeout,s.lock?this.lock=s.lock:this.persistSession&&q()&&(!((n=globalThis?.navigator)===null||n===void 0)&&n.locks)?this.lock=qs:this.lock=ru,this.jwks||(this.jwks={keys:[]},this.jwks_cached_at=Number.MIN_SAFE_INTEGER),this.mfa={verify:this._verify.bind(this),enroll:this._enroll.bind(this),unenroll:this._unenroll.bind(this),challenge:this._challenge.bind(this),listFactors:this._listFactors.bind(this),challengeAndVerify:this._challengeAndVerify.bind(this),getAuthenticatorAssuranceLevel:this._getAuthenticatorAssuranceLevel.bind(this),webauthn:new si(this)},this.oauth={getAuthorizationDetails:this._getAuthorizationDetails.bind(this),approveAuthorization:this._approveAuthorization.bind(this),denyAuthorization:this._denyAuthorization.bind(this),listGrants:this._listOAuthGrants.bind(this),revokeGrant:this._revokeOAuthGrant.bind(this)},this.persistSession?(s.storage?this.storage=s.storage:Qn()?this.storage=globalThis.localStorage:(this.memoryStorage={},this.storage=Hs(this.memoryStorage)),s.userStorage&&(this.userStorage=s.userStorage)):(this.memoryStorage={},this.storage=Hs(this.memoryStorage)),q()&&globalThis.BroadcastChannel&&this.persistSession&&this.storageKey){try{this.broadcastChannel=new globalThis.BroadcastChannel(this.storageKey);}catch(o){console.error("Failed to create a new BroadcastChannel, multi-tab state changes will not be available",o);}(i=this.broadcastChannel)===null||i===void 0||i.addEventListener("message",async o=>{this._debug("received broadcast notification from other tab or client",o);try{await this._notifyAllSubscribers(o.data.event,o.data.session,!1);}catch(a){this._debug("#broadcastChannel","error",a);}});}s.skipAutoInitialize||this.initialize().catch(o=>{this._debug("#initialize()","error",o);});}isThrowOnErrorEnabled(){return this.throwOnError}_returnResult(e){if(this.throwOnError&&e&&e.error)throw e.error;return e}_logPrefix(){return `GoTrueClient@${this.storageKey}:${this.instanceID} (${qn}) ${new Date().toISOString()}`}_debug(...e){return this.logDebugMessages&&this.logger(this._logPrefix(),...e),this}async initialize(){return this.initializePromise?await this.initializePromise:(this.initializePromise=(async()=>await this._acquireLock(this.lockAcquireTimeout,async()=>await this._initialize()))(),await this.initializePromise)}async _initialize(){var e;try{let r={},n="none";if(q()&&(r=Ac(window.location.href),this._isImplicitGrantCallback(r)?n="implicit":await this._isPKCECallback(r)&&(n="pkce")),q()&&this.detectSessionInUrl&&n!=="none"){let{data:i,error:s}=await this._getSessionFromURL(r,n);if(s){if(this._debug("#_initialize()","error detecting session from URL",s),Sc(s)){let l=(e=s.details)===null||e===void 0?void 0:e.code;if(l==="identity_already_exists"||l==="identity_not_found"||l==="single_identity_not_deletable")return {error:s}}return {error:s}}let{session:o,redirectType:a}=i;return this._debug("#_initialize()","detected session in URL",o,"redirect type",a),await this._saveSession(o),setTimeout(async()=>{a==="recovery"?await this._notifyAllSubscribers("PASSWORD_RECOVERY",o):await this._notifyAllSubscribers("SIGNED_IN",o);},0),{error:null}}return await this._recoverAndRefresh(),{error:null}}catch(r){return v(r)?this._returnResult({error:r}):this._returnResult({error:new ue("Unexpected error during initialization",r)})}finally{await this._handleVisibilityChange(),this._debug("#_initialize()","end");}}async signInAnonymously(e){var r,n,i;try{let s=await S(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,body:{data:(n=(r=e?.options)===null||r===void 0?void 0:r.data)!==null&&n!==void 0?n:{},gotrue_meta_security:{captcha_token:(i=e?.options)===null||i===void 0?void 0:i.captchaToken}},xform:de}),{data:o,error:a}=s;if(a||!o)return this._returnResult({data:{user:null,session:null},error:a});let l=o.session,c=o.user;return o.session&&(await this._saveSession(o.session),await this._notifyAllSubscribers("SIGNED_IN",l)),this._returnResult({data:{user:c,session:l},error:null})}catch(s){if(v(s))return this._returnResult({data:{user:null,session:null},error:s});throw s}}async signUp(e){var r,n,i;try{let s;if("email"in e){let{email:u,password:d,options:p}=e,f=null,h=null;this.flowType==="pkce"&&([f,h]=await gt(this.storage,this.storageKey)),s=await S(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,redirectTo:p?.emailRedirectTo,body:{email:u,password:d,data:(r=p?.data)!==null&&r!==void 0?r:{},gotrue_meta_security:{captcha_token:p?.captchaToken},code_challenge:f,code_challenge_method:h},xform:de});}else if("phone"in e){let{phone:u,password:d,options:p}=e;s=await S(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,body:{phone:u,password:d,data:(n=p?.data)!==null&&n!==void 0?n:{},channel:(i=p?.channel)!==null&&i!==void 0?i:"sms",gotrue_meta_security:{captcha_token:p?.captchaToken}},xform:de});}else throw new ct("You must provide either an email or phone number and a password");let{data:o,error:a}=s;if(a||!o)return await z(this.storage,`${this.storageKey}-code-verifier`),this._returnResult({data:{user:null,session:null},error:a});let l=o.session,c=o.user;return o.session&&(await this._saveSession(o.session),await this._notifyAllSubscribers("SIGNED_IN",l)),this._returnResult({data:{user:c,session:l},error:null})}catch(s){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(s))return this._returnResult({data:{user:null,session:null},error:s});throw s}}async signInWithPassword(e){try{let r;if("email"in e){let{email:s,password:o,options:a}=e;r=await S(this.fetch,"POST",`${this.url}/token?grant_type=password`,{headers:this.headers,body:{email:s,password:o,gotrue_meta_security:{captcha_token:a?.captchaToken}},xform:Us});}else if("phone"in e){let{phone:s,password:o,options:a}=e;r=await S(this.fetch,"POST",`${this.url}/token?grant_type=password`,{headers:this.headers,body:{phone:s,password:o,gotrue_meta_security:{captcha_token:a?.captchaToken}},xform:Us});}else throw new ct("You must provide either an email or phone number and a password");let{data:n,error:i}=r;if(i)return this._returnResult({data:{user:null,session:null},error:i});if(!n||!n.session||!n.user){let s=new Ne;return this._returnResult({data:{user:null,session:null},error:s})}return n.session&&(await this._saveSession(n.session),await this._notifyAllSubscribers("SIGNED_IN",n.session)),this._returnResult({data:Object.assign({user:n.user,session:n.session},n.weak_password?{weakPassword:n.weak_password}:null),error:i})}catch(r){if(v(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async signInWithOAuth(e){var r,n,i,s;return await this._handleProviderSignIn(e.provider,{redirectTo:(r=e.options)===null||r===void 0?void 0:r.redirectTo,scopes:(n=e.options)===null||n===void 0?void 0:n.scopes,queryParams:(i=e.options)===null||i===void 0?void 0:i.queryParams,skipBrowserRedirect:(s=e.options)===null||s===void 0?void 0:s.skipBrowserRedirect})}async exchangeCodeForSession(e){return await this.initializePromise,this._acquireLock(this.lockAcquireTimeout,async()=>this._exchangeCodeForSession(e))}async signInWithWeb3(e){let{chain:r}=e;switch(r){case "ethereum":return await this.signInWithEthereum(e);case "solana":return await this.signInWithSolana(e);default:throw new Error(`@supabase/auth-js: Unsupported chain "${r}"`)}}async signInWithEthereum(e){var r,n,i,s,o,a,l,c,u,d,p;let f,h;if("message"in e)f=e.message,h=e.signature;else {let{chain:m,wallet:_,statement:b,options:w}=e,y;if(q())if(typeof _=="object")y=_;else {let le=window;if("ethereum"in le&&typeof le.ethereum=="object"&&"request"in le.ethereum&&typeof le.ethereum.request=="function")y=le.ethereum;else throw new Error("@supabase/auth-js: No compatible Ethereum wallet interface on the window object (window.ethereum) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'ethereum', wallet: resolvedUserWallet }) instead.")}else {if(typeof _!="object"||!w?.url)throw new Error("@supabase/auth-js: Both wallet and url must be specified in non-browser environments.");y=_;}let I=new URL((r=w?.url)!==null&&r!==void 0?r:window.location.href),Z=await y.request({method:"eth_requestAccounts"}).then(le=>le).catch(()=>{throw new Error("@supabase/auth-js: Wallet method eth_requestAccounts is missing or invalid")});if(!Z||Z.length===0)throw new Error("@supabase/auth-js: No accounts available. Please ensure the wallet is connected.");let T=Js(Z[0]),$=(n=w?.signInWithEthereum)===null||n===void 0?void 0:n.chainId;if(!$){let le=await y.request({method:"eth_chainId"});$=qc(le);}let Ie={domain:I.host,address:T,statement:b,uri:I.href,version:"1",chainId:$,nonce:(i=w?.signInWithEthereum)===null||i===void 0?void 0:i.nonce,issuedAt:(o=(s=w?.signInWithEthereum)===null||s===void 0?void 0:s.issuedAt)!==null&&o!==void 0?o:new Date,expirationTime:(a=w?.signInWithEthereum)===null||a===void 0?void 0:a.expirationTime,notBefore:(l=w?.signInWithEthereum)===null||l===void 0?void 0:l.notBefore,requestId:(c=w?.signInWithEthereum)===null||c===void 0?void 0:c.requestId,resources:(u=w?.signInWithEthereum)===null||u===void 0?void 0:u.resources};f=Jc(Ie),h=await y.request({method:"personal_sign",params:[zc(f),T]});}try{let{data:m,error:_}=await S(this.fetch,"POST",`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:"ethereum",message:f,signature:h},!((d=e.options)===null||d===void 0)&&d.captchaToken?{gotrue_meta_security:{captcha_token:(p=e.options)===null||p===void 0?void 0:p.captchaToken}}:null),xform:de});if(_)throw _;if(!m||!m.session||!m.user){let b=new Ne;return this._returnResult({data:{user:null,session:null},error:b})}return m.session&&(await this._saveSession(m.session),await this._notifyAllSubscribers("SIGNED_IN",m.session)),this._returnResult({data:Object.assign({},m),error:_})}catch(m){if(v(m))return this._returnResult({data:{user:null,session:null},error:m});throw m}}async signInWithSolana(e){var r,n,i,s,o,a,l,c,u,d,p,f;let h,m;if("message"in e)h=e.message,m=e.signature;else {let{chain:_,wallet:b,statement:w,options:y}=e,I;if(q())if(typeof b=="object")I=b;else {let T=window;if("solana"in T&&typeof T.solana=="object"&&("signIn"in T.solana&&typeof T.solana.signIn=="function"||"signMessage"in T.solana&&typeof T.solana.signMessage=="function"))I=T.solana;else throw new Error("@supabase/auth-js: No compatible Solana wallet interface on the window object (window.solana) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'solana', wallet: resolvedUserWallet }) instead.")}else {if(typeof b!="object"||!y?.url)throw new Error("@supabase/auth-js: Both wallet and url must be specified in non-browser environments.");I=b;}let Z=new URL((r=y?.url)!==null&&r!==void 0?r:window.location.href);if("signIn"in I&&I.signIn){let T=await I.signIn(Object.assign(Object.assign(Object.assign({issuedAt:new Date().toISOString()},y?.signInWithSolana),{version:"1",domain:Z.host,uri:Z.href}),w?{statement:w}:null)),$;if(Array.isArray(T)&&T[0]&&typeof T[0]=="object")$=T[0];else if(T&&typeof T=="object"&&"signedMessage"in T&&"signature"in T)$=T;else throw new Error("@supabase/auth-js: Wallet method signIn() returned unrecognized value");if("signedMessage"in $&&"signature"in $&&(typeof $.signedMessage=="string"||$.signedMessage instanceof Uint8Array)&&$.signature instanceof Uint8Array)h=typeof $.signedMessage=="string"?$.signedMessage:new TextDecoder().decode($.signedMessage),m=$.signature;else throw new Error("@supabase/auth-js: Wallet method signIn() API returned object without signedMessage and signature fields")}else {if(!("signMessage"in I)||typeof I.signMessage!="function"||!("publicKey"in I)||typeof I!="object"||!I.publicKey||!("toBase58"in I.publicKey)||typeof I.publicKey.toBase58!="function")throw new Error("@supabase/auth-js: Wallet does not have a compatible signMessage() and publicKey.toBase58() API");h=[`${Z.host} wants you to sign in with your Solana account:`,I.publicKey.toBase58(),...w?["",w,""]:[""],"Version: 1",`URI: ${Z.href}`,`Issued At: ${(i=(n=y?.signInWithSolana)===null||n===void 0?void 0:n.issuedAt)!==null&&i!==void 0?i:new Date().toISOString()}`,...!((s=y?.signInWithSolana)===null||s===void 0)&&s.notBefore?[`Not Before: ${y.signInWithSolana.notBefore}`]:[],...!((o=y?.signInWithSolana)===null||o===void 0)&&o.expirationTime?[`Expiration Time: ${y.signInWithSolana.expirationTime}`]:[],...!((a=y?.signInWithSolana)===null||a===void 0)&&a.chainId?[`Chain ID: ${y.signInWithSolana.chainId}`]:[],...!((l=y?.signInWithSolana)===null||l===void 0)&&l.nonce?[`Nonce: ${y.signInWithSolana.nonce}`]:[],...!((c=y?.signInWithSolana)===null||c===void 0)&&c.requestId?[`Request ID: ${y.signInWithSolana.requestId}`]:[],...!((d=(u=y?.signInWithSolana)===null||u===void 0?void 0:u.resources)===null||d===void 0)&&d.length?["Resources",...y.signInWithSolana.resources.map($=>`- ${$}`)]:[]].join(`
47
- `);let T=await I.signMessage(new TextEncoder().encode(h),"utf8");if(!T||!(T instanceof Uint8Array))throw new Error("@supabase/auth-js: Wallet signMessage() API returned an recognized value");m=T;}}try{let{data:_,error:b}=await S(this.fetch,"POST",`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:"solana",message:h,signature:De(m)},!((p=e.options)===null||p===void 0)&&p.captchaToken?{gotrue_meta_security:{captcha_token:(f=e.options)===null||f===void 0?void 0:f.captchaToken}}:null),xform:de});if(b)throw b;if(!_||!_.session||!_.user){let w=new Ne;return this._returnResult({data:{user:null,session:null},error:w})}return _.session&&(await this._saveSession(_.session),await this._notifyAllSubscribers("SIGNED_IN",_.session)),this._returnResult({data:Object.assign({},_),error:b})}catch(_){if(v(_))return this._returnResult({data:{user:null,session:null},error:_});throw _}}async _exchangeCodeForSession(e){let r=await Ve(this.storage,`${this.storageKey}-code-verifier`),[n,i]=(r??"").split("/");try{if(!n&&this.flowType==="pkce")throw new Gn;let{data:s,error:o}=await S(this.fetch,"POST",`${this.url}/token?grant_type=pkce`,{headers:this.headers,body:{auth_code:e,code_verifier:n},xform:de});if(await z(this.storage,`${this.storageKey}-code-verifier`),o)throw o;if(!s||!s.session||!s.user){let a=new Ne;return this._returnResult({data:{user:null,session:null,redirectType:null},error:a})}return s.session&&(await this._saveSession(s.session),await this._notifyAllSubscribers("SIGNED_IN",s.session)),this._returnResult({data:Object.assign(Object.assign({},s),{redirectType:i??null}),error:o})}catch(s){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(s))return this._returnResult({data:{user:null,session:null,redirectType:null},error:s});throw s}}async signInWithIdToken(e){try{let{options:r,provider:n,token:i,access_token:s,nonce:o}=e,a=await S(this.fetch,"POST",`${this.url}/token?grant_type=id_token`,{headers:this.headers,body:{provider:n,id_token:i,access_token:s,nonce:o,gotrue_meta_security:{captcha_token:r?.captchaToken}},xform:de}),{data:l,error:c}=a;if(c)return this._returnResult({data:{user:null,session:null},error:c});if(!l||!l.session||!l.user){let u=new Ne;return this._returnResult({data:{user:null,session:null},error:u})}return l.session&&(await this._saveSession(l.session),await this._notifyAllSubscribers("SIGNED_IN",l.session)),this._returnResult({data:l,error:c})}catch(r){if(v(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async signInWithOtp(e){var r,n,i,s,o;try{if("email"in e){let{email:a,options:l}=e,c=null,u=null;this.flowType==="pkce"&&([c,u]=await gt(this.storage,this.storageKey));let{error:d}=await S(this.fetch,"POST",`${this.url}/otp`,{headers:this.headers,body:{email:a,data:(r=l?.data)!==null&&r!==void 0?r:{},create_user:(n=l?.shouldCreateUser)!==null&&n!==void 0?n:!0,gotrue_meta_security:{captcha_token:l?.captchaToken},code_challenge:c,code_challenge_method:u},redirectTo:l?.emailRedirectTo});return this._returnResult({data:{user:null,session:null},error:d})}if("phone"in e){let{phone:a,options:l}=e,{data:c,error:u}=await S(this.fetch,"POST",`${this.url}/otp`,{headers:this.headers,body:{phone:a,data:(i=l?.data)!==null&&i!==void 0?i:{},create_user:(s=l?.shouldCreateUser)!==null&&s!==void 0?s:!0,gotrue_meta_security:{captcha_token:l?.captchaToken},channel:(o=l?.channel)!==null&&o!==void 0?o:"sms"}});return this._returnResult({data:{user:null,session:null,messageId:c?.message_id},error:u})}throw new ct("You must provide either an email or phone number.")}catch(a){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(a))return this._returnResult({data:{user:null,session:null},error:a});throw a}}async verifyOtp(e){var r,n;try{let i,s;"options"in e&&(i=(r=e.options)===null||r===void 0?void 0:r.redirectTo,s=(n=e.options)===null||n===void 0?void 0:n.captchaToken);let{data:o,error:a}=await S(this.fetch,"POST",`${this.url}/verify`,{headers:this.headers,body:Object.assign(Object.assign({},e),{gotrue_meta_security:{captcha_token:s}}),redirectTo:i,xform:de});if(a)throw a;if(!o)throw new Error("An error occurred on token verification.");let l=o.session,c=o.user;return l?.access_token&&(await this._saveSession(l),await this._notifyAllSubscribers(e.type=="recovery"?"PASSWORD_RECOVERY":"SIGNED_IN",l)),this._returnResult({data:{user:c,session:l},error:null})}catch(i){if(v(i))return this._returnResult({data:{user:null,session:null},error:i});throw i}}async signInWithSSO(e){var r,n,i,s,o;try{let a=null,l=null;this.flowType==="pkce"&&([a,l]=await gt(this.storage,this.storageKey));let c=await S(this.fetch,"POST",`${this.url}/sso`,{body:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},"providerId"in e?{provider_id:e.providerId}:null),"domain"in e?{domain:e.domain}:null),{redirect_to:(n=(r=e.options)===null||r===void 0?void 0:r.redirectTo)!==null&&n!==void 0?n:void 0}),!((i=e?.options)===null||i===void 0)&&i.captchaToken?{gotrue_meta_security:{captcha_token:e.options.captchaToken}}:null),{skip_http_redirect:!0,code_challenge:a,code_challenge_method:l}),headers:this.headers,xform:Uc});return !((s=c.data)===null||s===void 0)&&s.url&&q()&&!(!((o=e.options)===null||o===void 0)&&o.skipBrowserRedirect)&&window.location.assign(c.data.url),this._returnResult(c)}catch(a){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(a))return this._returnResult({data:null,error:a});throw a}}async reauthenticate(){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._reauthenticate())}async _reauthenticate(){try{return await this._useSession(async e=>{let{data:{session:r},error:n}=e;if(n)throw n;if(!r)throw new J;let{error:i}=await S(this.fetch,"GET",`${this.url}/reauthenticate`,{headers:this.headers,jwt:r.access_token});return this._returnResult({data:{user:null,session:null},error:i})})}catch(e){if(v(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async resend(e){try{let r=`${this.url}/resend`;if("email"in e){let{email:n,type:i,options:s}=e,{error:o}=await S(this.fetch,"POST",r,{headers:this.headers,body:{email:n,type:i,gotrue_meta_security:{captcha_token:s?.captchaToken}},redirectTo:s?.emailRedirectTo});return this._returnResult({data:{user:null,session:null},error:o})}else if("phone"in e){let{phone:n,type:i,options:s}=e,{data:o,error:a}=await S(this.fetch,"POST",r,{headers:this.headers,body:{phone:n,type:i,gotrue_meta_security:{captcha_token:s?.captchaToken}}});return this._returnResult({data:{user:null,session:null,messageId:o?.message_id},error:a})}throw new ct("You must provide either an email or phone number and a type")}catch(r){if(v(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async getSession(){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>this._useSession(async r=>r))}async _acquireLock(e,r){this._debug("#_acquireLock","begin",e);try{if(this.lockAcquired){let n=this.pendingInLock.length?this.pendingInLock[this.pendingInLock.length-1]:Promise.resolve(),i=(async()=>(await n,await r()))();return this.pendingInLock.push((async()=>{try{await i;}catch{}})()),i}return await this.lock(`lock:${this.storageKey}`,e,async()=>{this._debug("#_acquireLock","lock acquired for storage key",this.storageKey);try{this.lockAcquired=!0;let n=r();for(this.pendingInLock.push((async()=>{try{await n;}catch{}})()),await n;this.pendingInLock.length;){let i=[...this.pendingInLock];await Promise.all(i),this.pendingInLock.splice(0,i.length);}return await n}finally{this._debug("#_acquireLock","lock released for storage key",this.storageKey),this.lockAcquired=!1;}})}finally{this._debug("#_acquireLock","end");}}async _useSession(e){this._debug("#_useSession","begin");try{let r=await this.__loadSession();return await e(r)}finally{this._debug("#_useSession","end");}}async __loadSession(){this._debug("#__loadSession()","begin"),this.lockAcquired||this._debug("#__loadSession()","used outside of an acquired lock!",new Error().stack);try{let e=null,r=await Ve(this.storage,this.storageKey);if(this._debug("#getSession()","session from storage",r),r!==null&&(this._isValidSession(r)?e=r:(this._debug("#getSession()","session from storage is not valid"),await this._removeSession())),!e)return {data:{session:null},error:null};let n=e.expires_at?e.expires_at*1e3-Date.now()<Jn:!1;if(this._debug("#__loadSession()",`session has${n?"":" not"} expired`,"expires_at",e.expires_at),!n){if(this.userStorage){let o=await Ve(this.userStorage,this.storageKey+"-user");o?.user?e.user=o.user:e.user=ti();}if(this.storage.isServer&&e.user&&!e.user.__isUserNotAvailableProxy){let o={value:this.suppressGetSessionWarning};e.user=Mc(e.user,o),o.value&&(this.suppressGetSessionWarning=!0);}return {data:{session:e},error:null}}let{data:i,error:s}=await this._callRefreshToken(e.refresh_token);return s?this._returnResult({data:{session:null},error:s}):this._returnResult({data:{session:i},error:null})}finally{this._debug("#__loadSession()","end");}}async getUser(e){if(e)return await this._getUser(e);await this.initializePromise;let r=await this._acquireLock(this.lockAcquireTimeout,async()=>await this._getUser());return r.data.user&&(this.suppressGetSessionWarning=true),r}async _getUser(e){try{return e?await S(this.fetch,"GET",`${this.url}/user`,{headers:this.headers,jwt:e,xform:Se}):await this._useSession(async r=>{var n,i,s;let{data:o,error:a}=r;if(a)throw a;return !(!((n=o.session)===null||n===void 0)&&n.access_token)&&!this.hasCustomAuthorizationHeader?{data:{user:null},error:new J}:await S(this.fetch,"GET",`${this.url}/user`,{headers:this.headers,jwt:(s=(i=o.session)===null||i===void 0?void 0:i.access_token)!==null&&s!==void 0?s:void 0,xform:Se})})}catch(r){if(v(r))return Br(r)&&(await this._removeSession(),await z(this.storage,`${this.storageKey}-code-verifier`)),this._returnResult({data:{user:null},error:r});throw r}}async updateUser(e,r={}){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._updateUser(e,r))}async _updateUser(e,r={}){try{return await this._useSession(async n=>{let{data:i,error:s}=n;if(s)throw s;if(!i.session)throw new J;let o=i.session,a=null,l=null;this.flowType==="pkce"&&e.email!=null&&([a,l]=await gt(this.storage,this.storageKey));let{data:c,error:u}=await S(this.fetch,"PUT",`${this.url}/user`,{headers:this.headers,redirectTo:r?.emailRedirectTo,body:Object.assign(Object.assign({},e),{code_challenge:a,code_challenge_method:l}),jwt:o.access_token,xform:Se});if(u)throw u;return o.user=c.user,await this._saveSession(o),await this._notifyAllSubscribers("USER_UPDATED",o),this._returnResult({data:{user:o.user},error:null})})}catch(n){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(n))return this._returnResult({data:{user:null},error:n});throw n}}async setSession(e){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._setSession(e))}async _setSession(e){try{if(!e.access_token||!e.refresh_token)throw new J;let r=Date.now()/1e3,n=r,i=!0,s=null,{payload:o}=Hr(e.access_token);if(o.exp&&(n=o.exp,i=n<=r),i){let{data:a,error:l}=await this._callRefreshToken(e.refresh_token);if(l)return this._returnResult({data:{user:null,session:null},error:l});if(!a)return {data:{user:null,session:null},error:null};s=a;}else {let{data:a,error:l}=await this._getUser(e.access_token);if(l)return this._returnResult({data:{user:null,session:null},error:l});s={access_token:e.access_token,refresh_token:e.refresh_token,user:a.user,token_type:"bearer",expires_in:n-r,expires_at:n},await this._saveSession(s),await this._notifyAllSubscribers("SIGNED_IN",s);}return this._returnResult({data:{user:s.user,session:s},error:null})}catch(r){if(v(r))return this._returnResult({data:{session:null,user:null},error:r});throw r}}async refreshSession(e){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._refreshSession(e))}async _refreshSession(e){try{return await this._useSession(async r=>{var n;if(!e){let{data:o,error:a}=r;if(a)throw a;e=(n=o.session)!==null&&n!==void 0?n:void 0;}if(!e?.refresh_token)throw new J;let{data:i,error:s}=await this._callRefreshToken(e.refresh_token);return s?this._returnResult({data:{user:null,session:null},error:s}):i?this._returnResult({data:{user:i.user,session:i},error:null}):this._returnResult({data:{user:null,session:null},error:null})})}catch(r){if(v(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async _getSessionFromURL(e,r){try{if(!q())throw new ut("No browser detected.");if(e.error||e.error_description||e.error_code)throw new ut(e.error_description||"Error in URL with unspecified error_description",{error:e.error||"unspecified_error",code:e.error_code||"unspecified_code"});switch(r){case "implicit":if(this.flowType==="pkce")throw new Ur("Not a valid PKCE flow url.");break;case "pkce":if(this.flowType==="implicit")throw new ut("Not a valid implicit grant flow url.");break;default:}if(r==="pkce"){if(this._debug("#_initialize()","begin","is PKCE flow",!0),!e.code)throw new Ur("No code detected.");let{data:w,error:y}=await this._exchangeCodeForSession(e.code);if(y)throw y;let I=new URL(window.location.href);return I.searchParams.delete("code"),window.history.replaceState(window.history.state,"",I.toString()),{data:{session:w.session,redirectType:null},error:null}}let{provider_token:n,provider_refresh_token:i,access_token:s,refresh_token:o,expires_in:a,expires_at:l,token_type:c}=e;if(!s||!a||!o||!c)throw new ut("No session defined in URL");let u=Math.round(Date.now()/1e3),d=parseInt(a),p=u+d;l&&(p=parseInt(l));let f=p-u;f*1e3<=lt&&console.warn(`@supabase/gotrue-js: Session as retrieved from URL expires in ${f}s, should have been closer to ${d}s`);let h=p-d;u-h>=120?console.warn("@supabase/gotrue-js: Session as retrieved from URL was issued over 120s ago, URL could be stale",h,p,u):u-h<0&&console.warn("@supabase/gotrue-js: Session as retrieved from URL was issued in the future? Check the device clock for skew",h,p,u);let{data:m,error:_}=await this._getUser(s);if(_)throw _;let b={provider_token:n,provider_refresh_token:i,access_token:s,expires_in:d,expires_at:p,refresh_token:o,token_type:c,user:m.user};return window.location.hash="",this._debug("#_getSessionFromURL()","clearing window.location.hash"),this._returnResult({data:{session:b,redirectType:e.type},error:null})}catch(n){if(v(n))return this._returnResult({data:{session:null,redirectType:null},error:n});throw n}}_isImplicitGrantCallback(e){return typeof this.detectSessionInUrl=="function"?this.detectSessionInUrl(new URL(window.location.href),e):!!(e.access_token||e.error_description)}async _isPKCECallback(e){let r=await Ve(this.storage,`${this.storageKey}-code-verifier`);return !!(e.code&&r)}async signOut(e={scope:"global"}){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._signOut(e))}async _signOut({scope:e}={scope:"global"}){return await this._useSession(async r=>{var n;let{data:i,error:s}=r;if(s&&!Br(s))return this._returnResult({error:s});let o=(n=i.session)===null||n===void 0?void 0:n.access_token;if(o){let{error:a}=await this.admin.signOut(o,e);if(a&&!(vc(a)&&(a.status===404||a.status===401||a.status===403)||Br(a)))return this._returnResult({error:a})}return e!=="others"&&(await this._removeSession(),await z(this.storage,`${this.storageKey}-code-verifier`)),this._returnResult({error:null})})}onAuthStateChange(e){let r=Tc(),n={id:r,callback:e,unsubscribe:()=>{this._debug("#unsubscribe()","state change callback with id removed",r),this.stateChangeEmitters.delete(r);}};return this._debug("#onAuthStateChange()","registered callback with id",r),this.stateChangeEmitters.set(r,n),(async()=>(await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>{this._emitInitialSession(r);})))(),{data:{subscription:n}}}async _emitInitialSession(e){return await this._useSession(async r=>{var n,i;try{let{data:{session:s},error:o}=r;if(o)throw o;await((n=this.stateChangeEmitters.get(e))===null||n===void 0?void 0:n.callback("INITIAL_SESSION",s)),this._debug("INITIAL_SESSION","callback id",e,"session",s);}catch(s){await((i=this.stateChangeEmitters.get(e))===null||i===void 0?void 0:i.callback("INITIAL_SESSION",null)),this._debug("INITIAL_SESSION","callback id",e,"error",s),Br(s)?console.warn(s):console.error(s);}})}async resetPasswordForEmail(e,r={}){let n=null,i=null;this.flowType==="pkce"&&([n,i]=await gt(this.storage,this.storageKey,true));try{return await S(this.fetch,"POST",`${this.url}/recover`,{body:{email:e,code_challenge:n,code_challenge_method:i,gotrue_meta_security:{captcha_token:r.captchaToken}},headers:this.headers,redirectTo:r.redirectTo})}catch(s){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(s))return this._returnResult({data:null,error:s});throw s}}async getUserIdentities(){var e;try{let{data:r,error:n}=await this.getUser();if(n)throw n;return this._returnResult({data:{identities:(e=r.user.identities)!==null&&e!==void 0?e:[]},error:null})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async linkIdentity(e){return "token"in e?this.linkIdentityIdToken(e):this.linkIdentityOAuth(e)}async linkIdentityOAuth(e){var r;try{let{data:n,error:i}=await this._useSession(async s=>{var o,a,l,c,u;let{data:d,error:p}=s;if(p)throw p;let f=await this._getUrlForProvider(`${this.url}/user/identities/authorize`,e.provider,{redirectTo:(o=e.options)===null||o===void 0?void 0:o.redirectTo,scopes:(a=e.options)===null||a===void 0?void 0:a.scopes,queryParams:(l=e.options)===null||l===void 0?void 0:l.queryParams,skipBrowserRedirect:!0});return await S(this.fetch,"GET",f,{headers:this.headers,jwt:(u=(c=d.session)===null||c===void 0?void 0:c.access_token)!==null&&u!==void 0?u:void 0})});if(i)throw i;return q()&&!(!((r=e.options)===null||r===void 0)&&r.skipBrowserRedirect)&&window.location.assign(n?.url),this._returnResult({data:{provider:e.provider,url:n?.url},error:null})}catch(n){if(v(n))return this._returnResult({data:{provider:e.provider,url:null},error:n});throw n}}async linkIdentityIdToken(e){return await this._useSession(async r=>{var n;try{let{error:i,data:{session:s}}=r;if(i)throw i;let{options:o,provider:a,token:l,access_token:c,nonce:u}=e,d=await S(this.fetch,"POST",`${this.url}/token?grant_type=id_token`,{headers:this.headers,jwt:(n=s?.access_token)!==null&&n!==void 0?n:void 0,body:{provider:a,id_token:l,access_token:c,nonce:u,link_identity:!0,gotrue_meta_security:{captcha_token:o?.captchaToken}},xform:de}),{data:p,error:f}=d;return f?this._returnResult({data:{user:null,session:null},error:f}):!p||!p.session||!p.user?this._returnResult({data:{user:null,session:null},error:new Ne}):(p.session&&(await this._saveSession(p.session),await this._notifyAllSubscribers("USER_UPDATED",p.session)),this._returnResult({data:p,error:f}))}catch(i){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(i))return this._returnResult({data:{user:null,session:null},error:i});throw i}})}async unlinkIdentity(e){try{return await this._useSession(async r=>{var n,i;let{data:s,error:o}=r;if(o)throw o;return await S(this.fetch,"DELETE",`${this.url}/user/identities/${e.identity_id}`,{headers:this.headers,jwt:(i=(n=s.session)===null||n===void 0?void 0:n.access_token)!==null&&i!==void 0?i:void 0})})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async _refreshAccessToken(e){let r=`#_refreshAccessToken(${e.substring(0,5)}...)`;this._debug(r,"begin");try{let n=Date.now();return await $c(async i=>(i>0&&await Oc(200*Math.pow(2,i-1)),this._debug(r,"refreshing attempt",i),await S(this.fetch,"POST",`${this.url}/token?grant_type=refresh_token`,{body:{refresh_token:e},headers:this.headers,xform:de})),(i,s)=>{let o=200*Math.pow(2,i);return s&&Yn(s)&&Date.now()+o-n<lt})}catch(n){if(this._debug(r,"error",n),v(n))return this._returnResult({data:{session:null,user:null},error:n});throw n}finally{this._debug(r,"end");}}_isValidSession(e){return typeof e=="object"&&e!==null&&"access_token"in e&&"refresh_token"in e&&"expires_at"in e}async _handleProviderSignIn(e,r){let n=await this._getUrlForProvider(`${this.url}/authorize`,e,{redirectTo:r.redirectTo,scopes:r.scopes,queryParams:r.queryParams});return this._debug("#_handleProviderSignIn()","provider",e,"options",r,"url",n),q()&&!r.skipBrowserRedirect&&window.location.assign(n),{data:{provider:e,url:n},error:null}}async _recoverAndRefresh(){var e,r;let n="#_recoverAndRefresh()";this._debug(n,"begin");try{let i=await Ve(this.storage,this.storageKey);if(i&&this.userStorage){let o=await Ve(this.userStorage,this.storageKey+"-user");!this.storage.isServer&&Object.is(this.storage,this.userStorage)&&!o&&(o={user:i.user},await ht(this.userStorage,this.storageKey+"-user",o)),i.user=(e=o?.user)!==null&&e!==void 0?e:ti();}else if(i&&!i.user&&!i.user){let o=await Ve(this.storage,this.storageKey+"-user");o&&o?.user?(i.user=o.user,await z(this.storage,this.storageKey+"-user"),await ht(this.storage,this.storageKey,i)):i.user=ti();}if(this._debug(n,"session from storage",i),!this._isValidSession(i)){this._debug(n,"session is not valid"),i!==null&&await this._removeSession();return}let s=((r=i.expires_at)!==null&&r!==void 0?r:1/0)*1e3-Date.now()<Jn;if(this._debug(n,`session has${s?"":" not"} expired with margin of ${Jn}s`),s){if(this.autoRefreshToken&&i.refresh_token){let{error:o}=await this._callRefreshToken(i.refresh_token);o&&(console.error(o),Yn(o)||(this._debug(n,"refresh failed with a non-retryable error, removing the session",o),await this._removeSession()));}}else if(i.user&&i.user.__isUserNotAvailableProxy===!0)try{let{data:o,error:a}=await this._getUser(i.access_token);!a&&o?.user?(i.user=o.user,await this._saveSession(i),await this._notifyAllSubscribers("SIGNED_IN",i)):this._debug(n,"could not get user data, skipping SIGNED_IN notification");}catch(o){console.error("Error getting user data:",o),this._debug(n,"error getting user data, skipping SIGNED_IN notification",o);}else await this._notifyAllSubscribers("SIGNED_IN",i);}catch(i){this._debug(n,"error",i),console.error(i);return}finally{this._debug(n,"end");}}async _callRefreshToken(e){var r,n;if(!e)throw new J;if(this.refreshingDeferred)return this.refreshingDeferred.promise;let i=`#_callRefreshToken(${e.substring(0,5)}...)`;this._debug(i,"begin");try{this.refreshingDeferred=new Fr;let{data:s,error:o}=await this._refreshAccessToken(e);if(o)throw o;if(!s.session)throw new J;await this._saveSession(s.session),await this._notifyAllSubscribers("TOKEN_REFRESHED",s.session);let a={data:s.session,error:null};return this.refreshingDeferred.resolve(a),a}catch(s){if(this._debug(i,"error",s),v(s)){let o={data:null,error:s};return Yn(s)||await this._removeSession(),(r=this.refreshingDeferred)===null||r===void 0||r.resolve(o),o}throw (n=this.refreshingDeferred)===null||n===void 0||n.reject(s),s}finally{this.refreshingDeferred=null,this._debug(i,"end");}}async _notifyAllSubscribers(e,r,n=true){let i=`#_notifyAllSubscribers(${e})`;this._debug(i,"begin",r,`broadcast = ${n}`);try{this.broadcastChannel&&n&&this.broadcastChannel.postMessage({event:e,session:r});let s=[],o=Array.from(this.stateChangeEmitters.values()).map(async a=>{try{await a.callback(e,r);}catch(l){s.push(l);}});if(await Promise.all(o),s.length>0){for(let a=0;a<s.length;a+=1)console.error(s[a]);throw s[0]}}finally{this._debug(i,"end");}}async _saveSession(e){this._debug("#_saveSession()",e),this.suppressGetSessionWarning=true,await z(this.storage,`${this.storageKey}-code-verifier`);let r=Object.assign({},e),n=r.user&&r.user.__isUserNotAvailableProxy===true;if(this.userStorage){!n&&r.user&&await ht(this.userStorage,this.storageKey+"-user",{user:r.user});let i=Object.assign({},r);delete i.user;let s=Ls(i);await ht(this.storage,this.storageKey,s);}else {let i=Ls(r);await ht(this.storage,this.storageKey,i);}}async _removeSession(){this._debug("#_removeSession()"),this.suppressGetSessionWarning=false,await z(this.storage,this.storageKey),await z(this.storage,this.storageKey+"-code-verifier"),await z(this.storage,this.storageKey+"-user"),this.userStorage&&await z(this.userStorage,this.storageKey+"-user"),await this._notifyAllSubscribers("SIGNED_OUT",null);}_removeVisibilityChangedCallback(){this._debug("#_removeVisibilityChangedCallback()");let e=this.visibilityChangedCallback;this.visibilityChangedCallback=null;try{e&&q()&&window?.removeEventListener&&window.removeEventListener("visibilitychange",e);}catch(r){console.error("removing visibilitychange callback failed",r);}}async _startAutoRefresh(){await this._stopAutoRefresh(),this._debug("#_startAutoRefresh()");let e=setInterval(()=>this._autoRefreshTokenTick(),lt);this.autoRefreshTicker=e,e&&typeof e=="object"&&typeof e.unref=="function"?e.unref():typeof Deno<"u"&&typeof Deno.unrefTimer=="function"&&Deno.unrefTimer(e);let r=setTimeout(async()=>{await this.initializePromise,await this._autoRefreshTokenTick();},0);this.autoRefreshTickTimeout=r,r&&typeof r=="object"&&typeof r.unref=="function"?r.unref():typeof Deno<"u"&&typeof Deno.unrefTimer=="function"&&Deno.unrefTimer(r);}async _stopAutoRefresh(){this._debug("#_stopAutoRefresh()");let e=this.autoRefreshTicker;this.autoRefreshTicker=null,e&&clearInterval(e);let r=this.autoRefreshTickTimeout;this.autoRefreshTickTimeout=null,r&&clearTimeout(r);}async startAutoRefresh(){this._removeVisibilityChangedCallback(),await this._startAutoRefresh();}async stopAutoRefresh(){this._removeVisibilityChangedCallback(),await this._stopAutoRefresh();}async _autoRefreshTokenTick(){this._debug("#_autoRefreshTokenTick()","begin");try{await this._acquireLock(0,async()=>{try{let e=Date.now();try{return await this._useSession(async r=>{let{data:{session:n}}=r;if(!n||!n.refresh_token||!n.expires_at){this._debug("#_autoRefreshTokenTick()","no session");return}let i=Math.floor((n.expires_at*1e3-e)/lt);this._debug("#_autoRefreshTokenTick()",`access token expires in ${i} ticks, a tick lasts ${lt}ms, refresh threshold is ${zn} ticks`),i<=zn&&await this._callRefreshToken(n.refresh_token);})}catch(r){console.error("Auto refresh tick failed with error. This is likely a transient error.",r);}}finally{this._debug("#_autoRefreshTokenTick()","end");}});}catch(e){if(e.isAcquireTimeout||e instanceof qr)this._debug("auto refresh token tick lock not available");else throw e}}async _handleVisibilityChange(){if(this._debug("#_handleVisibilityChange()"),!q()||!window?.addEventListener)return this.autoRefreshToken&&this.startAutoRefresh(),false;try{this.visibilityChangedCallback=async()=>{try{await this._onVisibilityChanged(!1);}catch(e){this._debug("#visibilityChangedCallback","error",e);}},window?.addEventListener("visibilitychange",this.visibilityChangedCallback),await this._onVisibilityChanged(!0);}catch(e){console.error("_handleVisibilityChange",e);}}async _onVisibilityChanged(e){let r=`#_onVisibilityChanged(${e})`;this._debug(r,"visibilityState",document.visibilityState),document.visibilityState==="visible"?(this.autoRefreshToken&&this._startAutoRefresh(),e||(await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>{if(document.visibilityState!=="visible"){this._debug(r,"acquired the lock to recover the session, but the browser visibilityState is no longer visible, aborting");return}await this._recoverAndRefresh();}))):document.visibilityState==="hidden"&&this.autoRefreshToken&&this._stopAutoRefresh();}async _getUrlForProvider(e,r,n){let i=[`provider=${encodeURIComponent(r)}`];if(n?.redirectTo&&i.push(`redirect_to=${encodeURIComponent(n.redirectTo)}`),n?.scopes&&i.push(`scopes=${encodeURIComponent(n.scopes)}`),this.flowType==="pkce"){let[s,o]=await gt(this.storage,this.storageKey),a=new URLSearchParams({code_challenge:`${encodeURIComponent(s)}`,code_challenge_method:`${encodeURIComponent(o)}`});i.push(a.toString());}if(n?.queryParams){let s=new URLSearchParams(n.queryParams);i.push(s.toString());}return n?.skipBrowserRedirect&&i.push(`skip_http_redirect=${n.skipBrowserRedirect}`),`${e}?${i.join("&")}`}async _unenroll(e){try{return await this._useSession(async r=>{var n;let{data:i,error:s}=r;return s?this._returnResult({data:null,error:s}):await S(this.fetch,"DELETE",`${this.url}/factors/${e.factorId}`,{headers:this.headers,jwt:(n=i?.session)===null||n===void 0?void 0:n.access_token})})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async _enroll(e){try{return await this._useSession(async r=>{var n,i;let{data:s,error:o}=r;if(o)return this._returnResult({data:null,error:o});let a=Object.assign({friendly_name:e.friendlyName,factor_type:e.factorType},e.factorType==="phone"?{phone:e.phone}:e.factorType==="totp"?{issuer:e.issuer}:{}),{data:l,error:c}=await S(this.fetch,"POST",`${this.url}/factors`,{body:a,headers:this.headers,jwt:(n=s?.session)===null||n===void 0?void 0:n.access_token});return c?this._returnResult({data:null,error:c}):(e.factorType==="totp"&&l.type==="totp"&&(!((i=l?.totp)===null||i===void 0)&&i.qr_code)&&(l.totp.qr_code=`data:image/svg+xml;utf-8,${l.totp.qr_code}`),this._returnResult({data:l,error:null}))})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async _verify(e){return this._acquireLock(this.lockAcquireTimeout,async()=>{try{return await this._useSession(async r=>{var n;let{data:i,error:s}=r;if(s)return this._returnResult({data:null,error:s});let o=Object.assign({challenge_id:e.challengeId},"webauthn"in e?{webauthn:Object.assign(Object.assign({},e.webauthn),{credential_response:e.webauthn.type==="create"?eu(e.webauthn.credential_response):tu(e.webauthn.credential_response)})}:{code:e.code}),{data:a,error:l}=await S(this.fetch,"POST",`${this.url}/factors/${e.factorId}/verify`,{body:o,headers:this.headers,jwt:(n=i?.session)===null||n===void 0?void 0:n.access_token});return l?this._returnResult({data:null,error:l}):(await this._saveSession(Object.assign({expires_at:Math.round(Date.now()/1e3)+a.expires_in},a)),await this._notifyAllSubscribers("MFA_CHALLENGE_VERIFIED",a),this._returnResult({data:a,error:l}))})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}})}async _challenge(e){return this._acquireLock(this.lockAcquireTimeout,async()=>{try{return await this._useSession(async r=>{var n;let{data:i,error:s}=r;if(s)return this._returnResult({data:null,error:s});let o=await S(this.fetch,"POST",`${this.url}/factors/${e.factorId}/challenge`,{body:e,headers:this.headers,jwt:(n=i?.session)===null||n===void 0?void 0:n.access_token});if(o.error)return o;let{data:a}=o;if(a.type!=="webauthn")return {data:a,error:null};switch(a.webauthn.type){case "create":return {data:Object.assign(Object.assign({},a),{webauthn:Object.assign(Object.assign({},a.webauthn),{credential_options:Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:Zc(a.webauthn.credential_options.publicKey)})})}),error:null};case "request":return {data:Object.assign(Object.assign({},a),{webauthn:Object.assign(Object.assign({},a.webauthn),{credential_options:Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:Qc(a.webauthn.credential_options.publicKey)})})}),error:null}}})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}})}async _challengeAndVerify(e){let{data:r,error:n}=await this._challenge({factorId:e.factorId});return n?this._returnResult({data:null,error:n}):await this._verify({factorId:e.factorId,challengeId:r.id,code:e.code})}async _listFactors(){var e;let{data:{user:r},error:n}=await this.getUser();if(n)return {data:null,error:n};let i={all:[],phone:[],totp:[],webauthn:[]};for(let s of (e=r?.factors)!==null&&e!==void 0?e:[])i.all.push(s),s.status==="verified"&&i[s.factor_type].push(s);return {data:i,error:null}}async _getAuthenticatorAssuranceLevel(e){var r,n,i,s;if(e)try{let{payload:f}=Hr(e),h=null;f.aal&&(h=f.aal);let m=h,{data:{user:_},error:b}=await this.getUser(e);if(b)return this._returnResult({data:null,error:b});((n=(r=_?.factors)===null||r===void 0?void 0:r.filter(I=>I.status==="verified"))!==null&&n!==void 0?n:[]).length>0&&(m="aal2");let y=f.amr||[];return {data:{currentLevel:h,nextLevel:m,currentAuthenticationMethods:y},error:null}}catch(f){if(v(f))return this._returnResult({data:null,error:f});throw f}let{data:{session:o},error:a}=await this.getSession();if(a)return this._returnResult({data:null,error:a});if(!o)return {data:{currentLevel:null,nextLevel:null,currentAuthenticationMethods:[]},error:null};let{payload:l}=Hr(o.access_token),c=null;l.aal&&(c=l.aal);let u=c;((s=(i=o.user.factors)===null||i===void 0?void 0:i.filter(f=>f.status==="verified"))!==null&&s!==void 0?s:[]).length>0&&(u="aal2");let p=l.amr||[];return {data:{currentLevel:c,nextLevel:u,currentAuthenticationMethods:p},error:null}}async _getAuthorizationDetails(e){try{return await this._useSession(async r=>{let{data:{session:n},error:i}=r;return i?this._returnResult({data:null,error:i}):n?await S(this.fetch,"GET",`${this.url}/oauth/authorizations/${e}`,{headers:this.headers,jwt:n.access_token,xform:s=>({data:s,error:null})}):this._returnResult({data:null,error:new J})})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async _approveAuthorization(e,r){try{return await this._useSession(async n=>{let{data:{session:i},error:s}=n;if(s)return this._returnResult({data:null,error:s});if(!i)return this._returnResult({data:null,error:new J});let o=await S(this.fetch,"POST",`${this.url}/oauth/authorizations/${e}/consent`,{headers:this.headers,jwt:i.access_token,body:{action:"approve"},xform:a=>({data:a,error:null})});return o.data&&o.data.redirect_url&&q()&&!r?.skipBrowserRedirect&&window.location.assign(o.data.redirect_url),o})}catch(n){if(v(n))return this._returnResult({data:null,error:n});throw n}}async _denyAuthorization(e,r){try{return await this._useSession(async n=>{let{data:{session:i},error:s}=n;if(s)return this._returnResult({data:null,error:s});if(!i)return this._returnResult({data:null,error:new J});let o=await S(this.fetch,"POST",`${this.url}/oauth/authorizations/${e}/consent`,{headers:this.headers,jwt:i.access_token,body:{action:"deny"},xform:a=>({data:a,error:null})});return o.data&&o.data.redirect_url&&q()&&!r?.skipBrowserRedirect&&window.location.assign(o.data.redirect_url),o})}catch(n){if(v(n))return this._returnResult({data:null,error:n});throw n}}async _listOAuthGrants(){try{return await this._useSession(async e=>{let{data:{session:r},error:n}=e;return n?this._returnResult({data:null,error:n}):r?await S(this.fetch,"GET",`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:r.access_token,xform:i=>({data:i,error:null})}):this._returnResult({data:null,error:new J})})}catch(e){if(v(e))return this._returnResult({data:null,error:e});throw e}}async _revokeOAuthGrant(e){try{return await this._useSession(async r=>{let{data:{session:n},error:i}=r;return i?this._returnResult({data:null,error:i}):n?(await S(this.fetch,"DELETE",`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:n.access_token,query:{client_id:e.clientId},noResolveJson:!0}),{data:{},error:null}):this._returnResult({data:null,error:new J})})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async fetchJwk(e,r={keys:[]}){let n=r.keys.find(a=>a.kid===e);if(n)return n;let i=Date.now();if(n=this.jwks.keys.find(a=>a.kid===e),n&&this.jwks_cached_at+bc>i)return n;let{data:s,error:o}=await S(this.fetch,"GET",`${this.url}/.well-known/jwks.json`,{headers:this.headers});if(o)throw o;return !s.keys||s.keys.length===0||(this.jwks=s,this.jwks_cached_at=i,n=s.keys.find(a=>a.kid===e),!n)?null:n}async getClaims(e,r={}){try{let n=e;if(!n){let{data:f,error:h}=await this.getSession();if(h||!f.session)return this._returnResult({data:null,error:h});n=f.session.access_token;}let{header:i,payload:s,signature:o,raw:{header:a,payload:l}}=Hr(n);r?.allowExpired||Dc(s.exp);let c=!i.alg||i.alg.startsWith("HS")||!i.kid||!("crypto"in globalThis&&"subtle"in globalThis.crypto)?null:await this.fetchJwk(i.kid,r?.keys?{keys:r.keys}:r?.jwks);if(!c){let{error:f}=await this.getUser(n);if(f)throw f;return {data:{claims:s,header:i,signature:o},error:null}}let u=jc(i.alg),d=await crypto.subtle.importKey("jwk",c,u,!0,["verify"]);if(!await crypto.subtle.verify(u,d,o,xc(`${a}.${l}`)))throw new dt("Invalid JWT signature");return {data:{claims:s,header:i,signature:o},error:null}}catch(n){if(v(n))return this._returnResult({data:null,error:n});throw n}}};oi.nextInstanceID={};Ys=oi;});var nu=R(()=>{ni();});var Gm,Zs,iu=R(()=>{Xs();Gm=Ys,Zs=Gm;});var Qs=R(()=>{ni();Xs();nu();iu();Fs();pt();zs();});function Kr(t){"@babel/helpers - typeof";return Kr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Kr(t)}function r_(t,e){if(Kr(t)!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e);if(Kr(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return (e==="string"?String:Number)(t)}function n_(t){var e=r_(t,"string");return Kr(e)=="symbol"?e:e+""}function i_(t,e,r){return (e=n_(e))in t?Object.defineProperty(t,e,{value:r,enumerable:true,configurable:true,writable:true}):t[e]=r,t}function su(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(i){return Object.getOwnPropertyDescriptor(t,i).enumerable})),r.push.apply(r,n);}return r}function W(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?su(Object(r),true).forEach(function(n){i_(t,n,r[n]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):su(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n));});}return t}function l_(t){return t.endsWith("/")?t:t+"/"}function c_(t,e){var r,n;let{db:i,auth:s,realtime:o,global:a}=t,{db:l,auth:c,realtime:u,global:d}=e,p={db:W(W({},l),i),auth:W(W({},c),s),realtime:W(W({},u),o),storage:{},global:W(W(W({},d),a),{},{headers:W(W({},(r=d?.headers)!==null&&r!==void 0?r:{}),(n=a?.headers)!==null&&n!==void 0?n:{})}),accessToken:async()=>""};return t.accessToken?p.accessToken=t.accessToken:delete p.accessToken,p}function u_(t){let e=t?.trim();if(!e)throw new Error("supabaseUrl is required.");if(!e.match(/^https?:\/\//i))throw new Error("Invalid supabaseUrl: Must be a valid HTTP or HTTPS URL.");try{return new URL(l_(e))}catch{throw Error("Invalid supabaseUrl: Provided URL is malformed.")}}function f_(){if(typeof window<"u")return false;let t=globalThis.process;if(!t)return false;let e=t.version;if(e==null)return false;let r=e.match(/^v(\d+)\./);return r?parseInt(r[1],10)<=18:false}var Ym,Jr,Xm,Zm,Qm,e_,t_,s_,o_,a_,d_,p_,er,ai=R(()=>{Nl();Hl();Is();mc();Qs();Is();Qs();Ym="2.103.2",Jr="";typeof Deno<"u"?Jr="deno":typeof document<"u"?Jr="web":typeof navigator<"u"&&navigator.product==="ReactNative"?Jr="react-native":Jr="node";Xm={"X-Client-Info":`supabase-js-${Jr}/${Ym}`},Zm={headers:Xm},Qm={schema:"public"},e_={autoRefreshToken:true,persistSession:true,detectSessionInUrl:true,flowType:"implicit"},t_={};s_=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),o_=()=>Headers,a_=(t,e,r)=>{let n=s_(r),i=o_();return async(s,o)=>{var a;let l=(a=await e())!==null&&a!==void 0?a:t,c=new i(o?.headers);return c.has("apikey")||c.set("apikey",t),c.has("Authorization")||c.set("Authorization",`Bearer ${l}`),n(s,W(W({},o),{},{headers:c}))}};d_=class extends Zs{constructor(t){super(t);}},p_=class{constructor(t,e,r){var n,i;this.supabaseUrl=t,this.supabaseKey=e;let s=u_(t);if(!e)throw new Error("supabaseKey is required.");this.realtimeUrl=new URL("realtime/v1",s),this.realtimeUrl.protocol=this.realtimeUrl.protocol.replace("http","ws"),this.authUrl=new URL("auth/v1",s),this.storageUrl=new URL("storage/v1",s),this.functionsUrl=new URL("functions/v1",s);let o=`sb-${s.hostname.split(".")[0]}-auth-token`,a={db:Qm,realtime:t_,auth:W(W({},e_),{},{storageKey:o}),global:Zm},l=c_(r??{},a);if(this.storageKey=(n=l.auth.storageKey)!==null&&n!==void 0?n:"",this.headers=(i=l.global.headers)!==null&&i!==void 0?i:{},l.accessToken)this.accessToken=l.accessToken,this.auth=new Proxy({},{get:(u,d)=>{throw new Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(d)} is not possible`)}});else {var c;this.auth=this._initSupabaseAuthClient((c=l.auth)!==null&&c!==void 0?c:{},this.headers,l.global.fetch);}this.fetch=a_(e,this._getAccessToken.bind(this),l.global.fetch),this.realtime=this._initRealtimeClient(W({headers:this.headers,accessToken:this._getAccessToken.bind(this)},l.realtime)),this.accessToken&&Promise.resolve(this.accessToken()).then(u=>this.realtime.setAuth(u)).catch(u=>console.warn("Failed to set initial Realtime auth token:",u)),this.rest=new Bl(new URL("rest/v1",s).href,{headers:this.headers,schema:l.db.schema,fetch:this.fetch,timeout:l.db.timeout,urlLengthLimit:l.db.urlLengthLimit}),this.storage=new gc(this.storageUrl.href,this.headers,this.fetch,r?.storage),l.accessToken||this._listenForAuthEvents();}get functions(){return new Sr(this.functionsUrl.href,{headers:this.headers,customFetch:this.fetch})}from(t){return this.rest.from(t)}schema(t){return this.rest.schema(t)}rpc(t,e={},r={head:false,get:false,count:void 0}){return this.rest.rpc(t,e,r)}channel(t,e={config:{}}){return this.realtime.channel(t,e)}getChannels(){return this.realtime.getChannels()}removeChannel(t){return this.realtime.removeChannel(t)}removeAllChannels(){return this.realtime.removeAllChannels()}async _getAccessToken(){var t=this,e,r;if(t.accessToken)return await t.accessToken();let{data:n}=await t.auth.getSession();return (e=(r=n.session)===null||r===void 0?void 0:r.access_token)!==null&&e!==void 0?e:t.supabaseKey}_initSupabaseAuthClient({autoRefreshToken:t,persistSession:e,detectSessionInUrl:r,storage:n,userStorage:i,storageKey:s,flowType:o,lock:a,debug:l,throwOnError:c},u,d){let p={Authorization:`Bearer ${this.supabaseKey}`,apikey:`${this.supabaseKey}`};return new d_({url:this.authUrl.href,headers:W(W({},p),u),storageKey:s,autoRefreshToken:t,persistSession:e,detectSessionInUrl:r,storage:n,userStorage:i,flowType:o,lock:a,debug:l,throwOnError:c,fetch:d,hasCustomAuthorizationHeader:Object.keys(this.headers).some(f=>f.toLowerCase()==="authorization")})}_initRealtimeClient(t){return new Vt(this.realtimeUrl.href,W(W({},t),{},{params:W(W({},{apikey:this.supabaseKey}),t?.params)}))}_listenForAuthEvents(){return this.auth.onAuthStateChange((t,e)=>{this._handleTokenChanged(t,"CLIENT",e?.access_token);})}_handleTokenChanged(t,e,r){(t==="TOKEN_REFRESHED"||t==="SIGNED_IN")&&this.changedAccessToken!==r?(this.changedAccessToken=r,this.realtime.setAuth(r)):t==="SIGNED_OUT"&&(this.realtime.setAuth(),e=="STORAGE"&&this.auth.signOut(),this.changedAccessToken=void 0);}},er=(t,e,r)=>new p_(t,e,r);f_()&&console.warn("\u26A0\uFE0F Node.js 18 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to Node.js 20 or later. For more information, visit: https://github.com/orgs/supabase/discussions/37217");});function pe(t){let e=t.SUPABASE_URL??t.VITE_SUPABASE_URL??"https://xygyyikpgykarmqujajf.supabase.co",r=t.SUPABASE_ANON_KEY??t.VITE_SUPABASE_ANON_KEY??"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inh5Z3l5aWtwZ3lrYXJtcXVqYWpmIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzYyMjIyOTcsImV4cCI6MjA5MTc5ODI5N30.y_SPm1eJeofb4zYgPCogTJUPr4e7-z92BzcRzqQiK9g";if(!e||!r)throw new eo("missing_supabase_config","Missing Supabase client configuration for CLI login.");return {supabaseUrl:e,supabaseAnonKey:r}}var eo,Vr=R(()=>{eo=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="CliAuthConfigError";}code};});async function lu(t){let e=pe(t.env),r=__(),n=er(e.supabaseUrl,e.supabaseAnonKey,{auth:{persistSession:true,detectSessionInUrl:false,flowType:"pkce",storage:r}}),i=await w_({timeoutMs:t.timeoutMs??300*1e3}),s=i.redirectUri;try{let{data:o,error:a}=await n.auth.signInWithOAuth({provider:"github",options:{redirectTo:s,skipBrowserRedirect:!0}});if(a||!o.url)throw new G("oauth_start_failed",a?.message??"Supabase did not return an OAuth URL.");t.onOpen?.({url:o.url,redirectUri:s}),await t.openUrl(o.url);let l=await i.waitForCode(),{data:c,error:u}=await n.auth.exchangeCodeForSession(l);if(u||!c.session?.access_token||!c.session.refresh_token)throw new G("oauth_exchange_failed",u?.message??"Supabase did not return a complete session.");let d=await g_(n,c.session,t.promptMfaCode),p=cu(e.supabaseUrl);return await st(t.env).set(p,JSON.stringify(d)),{session:d,account:p}}finally{await i.close();}}async function g_(t,e,r){let{data:n,error:i}=await t.auth.mfa.getAuthenticatorAssuranceLevel();if(i)throw new G("mfa_check_failed",i.message);if(n.currentLevel===n.nextLevel||n.nextLevel!=="aal2")return m_(e);let{data:s,error:o}=await t.auth.mfa.listFactors();if(o)throw new G("mfa_factor_lookup_failed",o.message);let a=s.totp.find(d=>d.status==="verified");if(!a)throw new G("mfa_factor_missing","Two-factor authentication is enabled, but no verified TOTP factor was returned.");if(!r)throw new G("mfa_required","Two-factor authentication is required for this account.");let l=(await r("Authenticator code: ")).trim(),{data:c,error:u}=await t.auth.mfa.challengeAndVerify({factorId:a.id,code:l});if(u||!c)throw new G("mfa_verify_failed",u?.message??"Two-factor authentication failed.");return {access_token:c.access_token,refresh_token:c.refresh_token,expires_at:Math.floor(Date.now()/1e3)+c.expires_in,expires_in:c.expires_in,token_type:c.token_type,user:{id:c.user.id,email:c.user.email??void 0}}}function m_(t){return {access_token:t.access_token,refresh_token:t.refresh_token,expires_at:t.expires_at??Math.floor(Date.now()/1e3)+(t.expires_in??3600),expires_in:t.expires_in??void 0,token_type:t.token_type,user:{id:t.user.id,email:t.user.email??void 0}}}async function to(t){let e=pe(t.env),r=await ou(t.fetch,e,"auth-device-start",{});t.onPending?.({userCode:r.user_code,verificationUri:r.verification_uri,interval:r.interval});let n=Date.now()+r.expires_in*1e3,i=r.interval;for(;Date.now()<=n;){await t.sleep(i*1e3);let s=await ou(t.fetch,e,"auth-device-token",{device_code:r.device_code},{acceptError:true});if("access_token"in s){let o=cu(e.supabaseUrl);return await st(t.env).set(o,JSON.stringify(s)),{session:s,account:o}}switch(s.error){case "authorization_pending":i=s.interval??i;break;case "slow_down":i=s.interval??Math.min(i+5,30);break;case "expired_token":throw new je("expired_token","The device login code expired.");case "access_denied":throw new je("access_denied","The device login request was denied.");default:throw new je(s.error,`Device login failed: ${s.error}`)}}throw new je("expired_token","The device login code expired.")}function cu(t){let e=new URL(t).hostname;return `sb-${e.endsWith(".supabase.co")?e.slice(0,-12):e}-auth-token`}async function ou(t,e,r,n,i={}){let s=await t(`${e.supabaseUrl}/functions/v1/${r}`,{method:"POST",headers:{"content-type":"application/json",apikey:e.supabaseAnonKey},body:JSON.stringify(n)}),o=await s.json().catch(()=>({}));if(!s.ok&&!i.acceptError)throw new je(o.error??"request_failed");return o}function __(){let t=new Map;return {getItem:e=>t.get(e)??null,setItem:(e,r)=>{t.set(e,r);},removeItem:e=>{t.delete(e);}}}async function w_(t){let e=null,r=null,n=false,i=new Promise((l,c)=>{e=l,r=c;}),s=createServer((l,c)=>{y_(l,c,(u,d)=>{n||(n=true,u?r?.(u):e?.(d));});});await new Promise((l,c)=>{s.once("error",c),s.listen(0,"127.0.0.1",()=>{s.off("error",c),l();});});let o=s.address();if(!o||typeof o=="string")throw await au(s),new G("callback_server_failed");let a=setTimeout(()=>{n||(n=true,r?.(new G("oauth_timeout","Browser login timed out.")));},t.timeoutMs);return {redirectUri:`http://127.0.0.1:${o.port}/auth/callback`,waitForCode:()=>i,close:async()=>{clearTimeout(a),await au(s);}}}function y_(t,e,r){let n=t.headers.host??"127.0.0.1",i=new URL(t.url??"/",`http://${n}`);if(i.pathname!=="/auth/callback"){e.writeHead(404,{"content-type":"text/plain"}),e.end("Not found");return}let s=i.searchParams.get("error")??i.searchParams.get("error_description"),o=i.searchParams.get("code");if(s){e.writeHead(400,{"content-type":"text/plain"}),e.end("Pathrule login failed. You can close this window."),r(new G("oauth_denied",s),"");return}if(!o){e.writeHead(400,{"content-type":"text/plain"}),e.end("Pathrule login could not verify this browser response."),r(new G("oauth_invalid_callback"),"");return}e.writeHead(200,{"content-type":"text/html; charset=utf-8"}),e.end("<!doctype html><title>Pathrule CLI</title><p>Pathrule CLI is signed in. You can close this window.</p>"),r(null,o);}async function au(t){t.listening&&await new Promise(e=>t.close(()=>e()));}var je,G,li=R(()=>{_s();ai();Vr();Vr();je=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="DeviceLoginError";}code},G=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="BrowserLoginError";}code};});async function R_(t){await new Promise(e=>setTimeout(e,t));}async function x_(t){try{await mkdir(dirname(t),{recursive:!0,mode:448}),await chmod(dirname(t),448).catch(()=>{});let e=await open(t,"wx",384);await e.writeFile(`${process.pid}:${Date.now()}
48
- `,"utf8"),await e.close();let r=!1;return async()=>{r||(r=!0,await rm$1(t,{force:!0}).catch(()=>{}));}}catch(e){if(e.code==="EEXIST")return null;throw e}}async function P_(t,e){try{let{stat:r}=await import('fs/promises'),n=await r(t);Date.now()-n.mtimeMs>e&&await rm$1(t,{force:!0});}catch{}}async function pu(t,e={}){let r=e.timeoutMs??S_,n=e.staleMs??C_,i=e.lockFile??A(e.env).tokenLockFile,s=Date.now()+r;for(;Date.now()<=s;){let o=await x_(i);if(o)try{return await t()}finally{await o();}await P_(i,n),await R_(E_);}throw new ro}var S_,C_,E_,ro,fu=R(()=>{K();S_=15e3,C_=45e3,E_=100,ro=class extends Error{constructor(){super("token_refresh_lock_timeout"),this.name="TokenRefreshLockTimeoutError";}};});async function ne(t,e=process.env){let r=it(t,0,e);try{let n=await readFile(r.userConfigFile,"utf8"),i=JSON.parse(n);if(i&&typeof i=="object"&&i.schema_version===1)return i}catch(n){if(n.code!=="ENOENT")throw n}return {schema_version:1}}async function ci(t,e,r=process.env){let n=it(t,0,r);await _u(n.userConfigFile,{...e,schema_version:1});}async function ie(t,e,r=process.env){let i={...await ne(t,r),...e,schema_version:1};return await ci(t,i,r),i}async function gu(t,e=process.env){let r=A(e),n={user_id:t,updated_at:new Date().toISOString()};await _u(r.activeUserFile,n);}async function mu(t=process.env){await rm$1(A(t).activeUserFile,{force:true});}async function _u(t,e){let r=dirname(t);await mkdir(r,{recursive:true,mode:j}),await chmod(r,j).catch(()=>{});let n=`${t}.tmp`;await writeFile(n,JSON.stringify(e,null,2),{encoding:"utf8",mode:O}),await chmod(n,O).catch(()=>{}),await rename(n,t);}var Ge=R(()=>{K();});function wu(t){return t.startsWith(j_)&&t.endsWith(M_)}async function Ce(t=process.env){let e=await yu(t);return !e||!ku(e.session)?e:U_(e,t)}async function yu(t=process.env){let r=await st(t).findAll();for(let n of r)if(wu(n.account))try{let i=JSON.parse(n.value);if(!i.access_token||!i.refresh_token||!i.user?.id)continue;return {account:n.account,session:i}}catch{}return null}function ku(t){return t.expires_at<=Math.floor(Date.now()/1e3)+L_}async function U_(t,e){return pu(async()=>{let r=await yu(e);if(r&&!ku(r.session))return r;let n=pe(e),i=er(n.supabaseUrl,n.supabaseAnonKey,{auth:{persistSession:!1}}),{data:s,error:o}=await i.auth.refreshSession({refresh_token:t.session.refresh_token});if(o)throw new ui("refresh_failed",o.message);if(!s.session?.access_token||!s.session.refresh_token||!s.session.user?.id)throw new ui("refresh_failed","Supabase did not return a complete session.");let a={access_token:s.session.access_token,refresh_token:s.session.refresh_token,expires_at:s.session.expires_at??Math.floor(Date.now()/1e3)+(s.session.expires_in??3600),user:{id:s.session.user.id,email:s.session.user.email??void 0}};return await st(e).set(t.account,JSON.stringify(a)),{account:t.account,session:a}},{env:e})}async function no(t=process.env){let e=st(t),r=await e.findAll(),n=new Set,i=0;for(let o of r)if(wu(o.account)){try{let a=JSON.parse(o.value);a.user?.id&&n.add(a.user.id);}catch{}await e.delete(o.account)&&(i+=1);}let s=0;for(let o of n)await rm$1(it(o,0,t).userCacheDir,{recursive:true,force:true}),s+=1;return await mu(t),{removed_sessions:i,purged_user_caches:s}}var j_,M_,L_,ui,Gr=R(()=>{fu();Ge();_s();K();ai();Vr();j_="sb-",M_="-auth-token",L_=60,ui=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="CliSessionError";}code};});async function C(t=process.env){let e=await Ce(t);if(!e)throw new tr("not_authenticated","Pathrule CLI is not signed in.");let r=pe(t);return {session:e.session,supabase:er(r.supabaseUrl,r.supabaseAnonKey,{auth:{persistSession:false},global:{headers:{Authorization:`Bearer ${e.session.access_token}`}}})}}var tr,F=R(()=>{ai();li();Gr();tr=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="CliAuthError";}code};});var Du={};lh(Du,{cliOrgWebUrl:()=>ee,currentCliOrg:()=>D,listCliOrgs:()=>we,useCliOrg:()=>fi});async function we(t){let{session:e,supabase:r}=await C(t),{data:n,error:i}=await r.from("organization_members").select("role, organization:organizations ( id, name, slug, plan, subscription_status, trial_status, trial_ends_at, seat_count, paid_extra_seats, trial_seat_cap, beta_referral_credit_cents, beta_referral_activated_count, beta_referral_founder )").eq("user_id",e.user.id);if(i)throw i;let s=await ne(e.user.id,t),o=[],a=new Set;for(let l of n??[]){let c=l.organization,u=Array.isArray(c)?c[0]:c;if(!u||a.has(u.id))continue;a.add(u.id);let d=u.subscription_status?String(u.subscription_status):null,p=u.trial_status?String(u.trial_status):null,f=u.trial_ends_at?String(u.trial_ends_at):null,h=rw(d,p,f);o.push({id:u.id,name:u.name,slug:u.slug,plan:u.plan,subscription_status:d,trial_status:p,trial_ends_at:f,seat_count:Ye(u.seat_count),paid_extra_seats:Ye(u.paid_extra_seats),trial_seat_cap:Ye(u.trial_seat_cap),beta_referral_credit_cents:Ye(u.beta_referral_credit_cents)??0,beta_referral_activated_count:Ye(u.beta_referral_activated_count)??0,beta_referral_founder:u.beta_referral_founder===true,role:l.role,current:s.current_org_id===u.id,billing:{status:d,freeze_kind:h.kind,freeze_reason:h.reason,seats:{active:Ye(u.seat_count),trial_cap:Ye(u.trial_seat_cap),paid_extra:Ye(u.paid_extra_seats)}}});}if(!s.current_org_id&&o.length===1){let l=o[0];l&&(o[0]={...l,current:true});}return o}async function D(t){let e=await we(t);return e.find(r=>r.current)??e[0]??null}async function fi(t,e){let{session:r}=await C(e),i=(await we(e)).find(s=>s.id===t||s.slug===t);if(!i)throw new Error("org_not_found");return await ie(r.user.id,{current_org_id:i.id},e),await gu(r.user.id,e),{...i,current:true}}function ee(t,e,r="home"){let i=`${(e.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}/org/${encodeURIComponent(t.slug)}`;return r==="home"?i:r==="billing"?`${i}/billing`:`${i}/settings${r==="members"?"/members":""}`}function Ye(t){return typeof t=="number"&&Number.isFinite(t)?t:null}function rw(t,e,r){return t==="unpaid"||t==="past_due"?{kind:"subscription",reason:"unpaid"}:t==="canceled"?e==="expired"||r&&new Date(r).getTime()<Date.now()?{kind:"subscription",reason:"trial_expired"}:{kind:"subscription",reason:"canceled"}:{kind:"none",reason:null}}var Ee=R(()=>{Ge();F();});uh(La());function Ua(t,e,r){return `${e}/.claude.json`}var wr="pathrule";function Zi(t){if(t==null)return {};if(typeof t!="object"||Array.isArray(t))throw new Error("Claude config root must be a JSON object");let e=t;if(e.mcpServers!==void 0&&(typeof e.mcpServers!="object"||e.mcpServers===null||Array.isArray(e.mcpServers)))throw new Error("Claude config `mcpServers` must be an object");return e}function Wa(t,e){let r=Zi(t),n={...r.mcpServers??{}},i=!(wr in n);return n[wr]=e,{config:{...r,mcpServers:n},wasNew:i}}function Ba(t){let e=Zi(t);if(!e.mcpServers||!(wr in e.mcpServers))return {config:e,wasPresent:false};let{[wr]:r,...n}=e.mcpServers;return {config:{...e,mcpServers:n},wasPresent:true}}function Fa(t){try{return Zi(t).mcpServers?.[wr]??null}catch{return null}}function B(t){return t.code==="PGRST116"?{code:"not_found",message:t.message}:t.code==="42501"?{code:"permission_denied",message:t.message}:{code:"upstream_error",message:t.message}}async function jt(t,e){let{data:r,error:n}=await t.rpc("pathrule_check_content_dedup",{p_workspace_id:e.workspaceId,p_kind:e.kind,p_node_id:e.kind==="memory"?e.nodeId??null:null,p_candidate:e.candidate,p_threshold:e.threshold??.65,p_max_similar:e.maxSimilar??5,p_exclude_id:e.excludeId??null});if(n)return {ok:false,error:n.message};let i=r??{duplicate:null,similar:[]};return {ok:true,data:{duplicate:i.duplicate,similar:(i.similar??[]).map(s=>({id:s.id,title:s.title,similarity:typeof s.similarity=="string"?Number(s.similarity):s.similarity}))}}}function Ha(t){return t.code!=="23505"?false:!!t.message?.includes("skills_workspace_slug_unique")}async function Qi(t,e,r){let{data:n,error:i}=await t.from("nodes").select("id, workspace_id, parent_id, name, type, relative_path").eq("workspace_id",e).eq("relative_path","/").is("parent_id",null).maybeSingle();if(i)return {error:i.message};if(n)return n;let{data:s,error:o}=await t.from("nodes").insert({workspace_id:e,parent_id:null,name:r,type:"folder",relative_path:"/",order_index:0,status:"active"}).select("id, workspace_id, parent_id, name, type, relative_path").single();if(o||!s){if(o?.code==="23505"){let{data:a}=await t.from("nodes").select("id, workspace_id, parent_id, name, type, relative_path").eq("workspace_id",e).eq("relative_path","/").is("parent_id",null).maybeSingle();if(a)return a}return {error:o?.message??"Root node insert failed"}}return s}function qa(t){let e=t.trim();if(e===""||e==="/")return "/";let n=(e.startsWith("/")?e:"/"+e).replace(/\/+/g,"/");return n==="/"?"/":n.replace(/\/$/,"")}function ph(t,e){return (t==="/"?"":t)+"/"+e.trim()}function fh(t){let e=t.split("/").filter(n=>n.length>0),r=e[e.length-1]??"";return /\.[A-Za-z0-9]{1,8}$/.test(r)?"file":"folder"}async function Mt(t,e,r){let{data:n,error:i}=await t.from("nodes").select("id, workspace_id, parent_id, name, type, relative_path").eq("workspace_id",e).eq("relative_path",r).maybeSingle();return i?{error:i.message}:n??null}async function hh(t,e,r,n){let i=qa(r);if(i==="/"){let d=await Mt(t,e,"/");return d&&!("error"in d)?d:{error:"Workspace root node missing \u2014 call ensureWorkspaceRootNode first."}}let s=await Mt(t,e,i);if(s&&!("error"in s)||s&&"error"in s)return s;let o=await Mt(t,e,"/");if(!o)return {error:"Workspace root node missing \u2014 call ensureWorkspaceRootNode first."};if("error"in o)return o;let a=i.split("/").filter(d=>d.length>0),l=fh(i),c=o,u="";for(let d=0;d<a.length;d+=1){let p=a[d];u+="/"+p;let h=d===a.length-1?l:"folder",m=await Mt(t,e,u);if(m&&"error"in m)return m;if(m){c=m;continue}let{count:_}=await t.from("nodes").select("*",{count:"exact",head:true}).eq("workspace_id",e).eq("parent_id",c.id),{data:b,error:w}=await t.from("nodes").insert({workspace_id:e,parent_id:c.id,name:p,type:h,relative_path:ph(c.relative_path,p),order_index:_??0,status:"active"}).select("id, workspace_id, parent_id, name, type, relative_path").single();if(w||!b){if(w?.code==="23505"){let y=await Mt(t,e,u);if(y&&!("error"in y)){c=y;continue}}return {error:w?.message??`Insert failed at ${u}`}}c=b;}return c}async function Lt(t,e,r,n){let i=qa(r),s=await Mt(t,e,"/");if(s&&"error"in s)return s;if(!s){let{data:o,error:a}=await t.from("workspaces").select("name").eq("id",e).maybeSingle();if(a)return {error:a.message};let l=o?.name??"Workspace",c=await Qi(t,e,l);if("error"in c)return c}return hh(t,e,i)}function za(t){return {id:t.id,workspaceId:t.workspace_id,nodeId:t.node_id,title:t.title,content:t.content,source:t.source,semanticTags:t.semantic_tags??[],versionId:t.version_id,versionNumber:t.version_number,createdBy:t.created_by,lastEditedBy:t.last_edited_by,lastEditedAt:t.last_edited_at,createdAt:t.created_at,updatedAt:t.updated_at}}function gh(t){return t.length===0?null:{code:"similar_titles",message:`Found ${t.length} memory/rule(s) with a similar title.`,detail:{similar:t}}}async function Ja(t,e){if(!t.workspaceId)return {ok:false,error:{code:"invalid_args",message:"ctx.workspaceId is required for path-based writes"}};let r=await Lt(t.supabase,t.workspaceId,e.node_path);if("error"in r)return {ok:false,error:{code:"upstream_error",message:r.error}};let n=e.title.trim(),i=await jt(t.supabase,{workspaceId:r.workspace_id,kind:"memory",nodeId:r.id,candidate:n});if(i.ok&&i.data.duplicate&&!e.allow_duplicate)return {ok:false,error:{code:"duplicate",message:`A memory titled "${i.data.duplicate.title}" already exists at ${e.node_path}. Use update_memory, pick a different title, or pass allow_duplicate: true to insert anyway.`,detail:{existing_id:i.data.duplicate.id,existing_title:i.data.duplicate.title,similar:i.ok?i.data.similar:[]}}};let{data:s,error:o}=await t.supabase.from("memories").insert({workspace_id:r.workspace_id,node_id:r.id,title:n,content:e.content,source:e.source??"claude",created_by:t.userId,last_edited_by:t.userId}).select("*").single();if(o||!s)return {ok:false,error:B(o??{message:"insert failed"})};let a=i.ok?gh(i.data.similar):null;return a?{ok:true,data:za(s),warnings:[a]}:{ok:true,data:za(s)}}function mh(t){return t.length===0?null:{code:"similar_titles",message:`Found ${t.length} rule(s) with a similar name.`,detail:{similar:t}}}function _h(t){return {id:t.id,workspaceId:t.workspace_id,name:t.name,content:t.content,scopeType:t.scope_type,priority:t.priority,semanticTags:t.semantic_tags??[],versionId:t.version_id,versionNumber:t.version_number,createdBy:t.created_by,lastEditedBy:t.last_edited_by,lastEditedAt:t.last_edited_at,createdAt:t.created_at,updatedAt:t.updated_at}}async function Ka(t,e){if(!t.workspaceId)return {ok:false,error:{code:"invalid_args",message:"ctx.workspaceId is required for path-based writes"}};let r=await Lt(t.supabase,t.workspaceId,e.node_path);if("error"in r)return {ok:false,error:{code:"upstream_error",message:r.error}};let n=e.name.trim(),i=await jt(t.supabase,{workspaceId:r.workspace_id,kind:"rule",candidate:n});if(i.ok&&i.data.duplicate&&!e.allow_duplicate)return {ok:false,error:{code:"duplicate",message:`A rule named "${i.data.duplicate.title}" already exists in this workspace. Use update_rule, pick a different name, or pass allow_duplicate: true.`,detail:{existing_id:i.data.duplicate.id,existing_name:i.data.duplicate.title,similar:i.ok?i.data.similar:[]}}};let{data:s,error:o}=await t.supabase.from("rules").insert({workspace_id:r.workspace_id,name:n,content:e.content,scope_type:e.scope_type,priority:e.priority,created_by:t.userId,last_edited_by:t.userId}).select("*").single();if(o||!s)return {ok:false,error:B(o??{message:"insert failed"})};let a=_h(s),{error:l}=await t.supabase.from("node_rules").insert({node_id:r.id,rule_id:a.id});if(l)return await t.supabase.from("rules").delete().eq("id",a.id),{ok:false,error:{code:"upstream_error",message:`attach failed: ${l.message}`}};let c=i.ok?mh(i.data.similar):null;return c?{ok:true,data:a,warnings:[c]}:{ok:true,data:a}}function wh(t){return {id:t.id,workspaceId:t.workspace_id,name:t.name,description:t.description,content:t.content,source:t.source,githubUrl:t.github_url,version:t.version,tags:t.tags,semanticTags:t.semantic_tags??[],versionId:t.version_id,versionNumber:t.version_number,createdBy:t.created_by,lastEditedBy:t.last_edited_by,lastEditedAt:t.last_edited_at,createdAt:t.created_at,updatedAt:t.updated_at,contentFetchedAt:t.content_fetched_at}}async function Va(t,e){if(!t.workspaceId)return {ok:false,error:{code:"invalid_args",message:"ctx.workspaceId is required for path-based writes"}};let r=await Lt(t.supabase,t.workspaceId,e.node_path);if("error"in r)return {ok:false,error:{code:"upstream_error",message:r.error}};let n=e.name.trim(),i=await jt(t.supabase,{workspaceId:r.workspace_id,kind:"skill",candidate:n,maxSimilar:0});if(i.ok&&i.data.duplicate)return {ok:false,error:{code:"duplicate",message:`A skill with this name already exists in this workspace: "${i.data.duplicate.title}". Use update_skill or pick a different name.`,detail:{existing_id:i.data.duplicate.id,existing_name:i.data.duplicate.title}}};let s=e.source??"manual",{data:o,error:a}=await t.supabase.from("skills").insert({workspace_id:r.workspace_id,name:n,description:e.description,content:e.content,source:s,github_url:e.github_url??null,tags:e.tags??[],created_by:t.userId,last_edited_by:t.userId,content_fetched_at:s==="github_ref"?new Date().toISOString():null}).select("*").single();if(a||!o)return Ha(a??{})?{ok:false,error:{code:"duplicate",message:"A skill with this name already exists in this workspace. Use update_skill or pick a different name."}}:{ok:false,error:B(a??{message:"insert failed"})};let l=wh(o),{error:c}=await t.supabase.from("node_skills").insert({node_id:r.id,skill_id:l.id,is_active:true});return c?(await t.supabase.from("skills").delete().eq("id",l.id),{ok:false,error:{code:"upstream_error",message:`attach failed: ${c.message}`}}):{ok:true,data:l}}var yh=/^[A-Za-z0-9_-]+/,kh=/[\s([{'"`]/;function ts(t){return t.trim().toLowerCase()}function Ga(t){let e=vh(t),r=[];for(let n=0;n<e.length-2;n+=1){if(e[n]!==":"||e[n+1]!==":")continue;let i=n===0?"":e[n-1]??"";if(i&&!kh.test(i))continue;let s=e.slice(n+2).match(yh);if(!s?.[0])continue;let o=s[0];r.push({raw:o,name:ts(o),start:n,end:n+2+o.length}),n+=1+o.length;}return bh(r)}function bh(t){let e=new Set,r=[];for(let n of t)e.has(n.name)||(e.add(n.name),r.push(n));return r}function vh(t){let e="",r=0,n=false,i=false;for(;r<t.length;){if(t.startsWith("```",r)){n=!n,e+=" ",r+=3;continue}let s=t[r]??"";if(!n&&s==="`"){i=!i,e+=" ",r+=1;continue}e+=n||i?s===`
44
+ Resources:`;for(let k of c){if(!k||typeof k!="string")throw new Error(`@supabase/auth-js: Invalid SIWE message field "resources". Every resource must be a valid string. Provided value: ${k}`);w+=`
45
+ - ${k}`;}b+=w;}return `${_}
46
+ ${b}`}var eu=R(()=>{});function tu({error:t,options:e}){var r,n,s;let{publicKey:i}=e;if(!i)throw Error("options was missing required publicKey property");if(t.name==="AbortError"){if(e.signal instanceof AbortSignal)return new L({message:"Registration ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:t})}else if(t.name==="ConstraintError"){if(((r=i.authenticatorSelection)===null||r===void 0?void 0:r.requireResidentKey)===true)return new L({message:"Discoverable credentials were required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_DISCOVERABLE_CREDENTIAL_SUPPORT",cause:t});if(e.mediation==="conditional"&&((n=i.authenticatorSelection)===null||n===void 0?void 0:n.userVerification)==="required")return new L({message:"User verification was required during automatic registration but it could not be performed",code:"ERROR_AUTO_REGISTER_USER_VERIFICATION_FAILURE",cause:t});if(((s=i.authenticatorSelection)===null||s===void 0?void 0:s.userVerification)==="required")return new L({message:"User verification was required but no available authenticator supported it",code:"ERROR_AUTHENTICATOR_MISSING_USER_VERIFICATION_SUPPORT",cause:t})}else {if(t.name==="InvalidStateError")return new L({message:"The authenticator was previously registered",code:"ERROR_AUTHENTICATOR_PREVIOUSLY_REGISTERED",cause:t});if(t.name==="NotAllowedError")return new L({message:t.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t});if(t.name==="NotSupportedError")return i.pubKeyCredParams.filter(a=>a.type==="public-key").length===0?new L({message:'No entry in pubKeyCredParams was of type "public-key"',code:"ERROR_MALFORMED_PUBKEYCREDPARAMS",cause:t}):new L({message:"No available authenticator supported any of the specified pubKeyCredParams algorithms",code:"ERROR_AUTHENTICATOR_NO_SUPPORTED_PUBKEYCREDPARAMS_ALG",cause:t});if(t.name==="SecurityError"){let o=window.location.hostname;if(Yi(o)){if(i.rp.id!==o)return new L({message:`The RP ID "${i.rp.id}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:t})}else return new L({message:`${window.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:t})}else if(t.name==="TypeError"){if(i.user.id.byteLength<1||i.user.id.byteLength>64)return new L({message:"User ID was not between 1 and 64 characters",code:"ERROR_INVALID_USER_ID_LENGTH",cause:t})}else if(t.name==="UnknownError")return new L({message:"The authenticator was unable to process the specified options, or could not create a new credential",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:t})}return new L({message:"a Non-Webauthn related error has occurred",code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t})}function ru({error:t,options:e}){let{publicKey:r}=e;if(!r)throw Error("options was missing required publicKey property");if(t.name==="AbortError"){if(e.signal instanceof AbortSignal)return new L({message:"Authentication ceremony was sent an abort signal",code:"ERROR_CEREMONY_ABORTED",cause:t})}else {if(t.name==="NotAllowedError")return new L({message:t.message,code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t});if(t.name==="SecurityError"){let n=window.location.hostname;if(Yi(n)){if(r.rpId!==n)return new L({message:`The RP ID "${r.rpId}" is invalid for this domain`,code:"ERROR_INVALID_RP_ID",cause:t})}else return new L({message:`${window.location.hostname} is an invalid domain`,code:"ERROR_INVALID_DOMAIN",cause:t})}else if(t.name==="UnknownError")return new L({message:"The authenticator was unable to process the specified options, or could not create a new assertion signature",code:"ERROR_AUTHENTICATOR_GENERAL_ERROR",cause:t})}return new L({message:"a Non-Webauthn related error has occurred",code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:t})}var L,kt,nu=R(()=>{Xi();L=class extends Error{constructor({message:e,code:r,cause:n,name:s}){var i;super(e,{cause:n}),this.__isWebAuthnError=true,this.name=(i=s??(n instanceof Error?n.name:void 0))!==null&&i!==void 0?i:"Unknown Error",this.code=r;}},kt=class extends L{constructor(e,r){super({code:"ERROR_PASSTHROUGH_SEE_CAUSE_PROPERTY",cause:r,message:e}),this.name="WebAuthnUnknownError",this.originalError=r;}};});function iu(t){if(!t)throw new Error("Credential creation options are required");if(typeof PublicKeyCredential<"u"&&"parseCreationOptionsFromJSON"in PublicKeyCredential&&typeof PublicKeyCredential.parseCreationOptionsFromJSON=="function")return PublicKeyCredential.parseCreationOptionsFromJSON(t);let{challenge:e,user:r,excludeCredentials:n}=t,s=at(t,["challenge","user","excludeCredentials"]),i=Ke(e).buffer,o=Object.assign(Object.assign({},r),{id:Ke(r.id).buffer}),a=Object.assign(Object.assign({},s),{challenge:i,user:o});if(n&&n.length>0){a.excludeCredentials=new Array(n.length);for(let l=0;l<n.length;l++){let c=n[l];a.excludeCredentials[l]=Object.assign(Object.assign({},c),{id:Ke(c.id).buffer,type:c.type||"public-key",transports:c.transports});}}return a}function ou(t){if(!t)throw new Error("Credential request options are required");if(typeof PublicKeyCredential<"u"&&"parseRequestOptionsFromJSON"in PublicKeyCredential&&typeof PublicKeyCredential.parseRequestOptionsFromJSON=="function")return PublicKeyCredential.parseRequestOptionsFromJSON(t);let{challenge:e,allowCredentials:r}=t,n=at(t,["challenge","allowCredentials"]),s=Ke(e).buffer,i=Object.assign(Object.assign({},n),{challenge:s});if(r&&r.length>0){i.allowCredentials=new Array(r.length);for(let o=0;o<r.length;o++){let a=r[o];i.allowCredentials[o]=Object.assign(Object.assign({},a),{id:Ke(a.id).buffer,type:a.type||"public-key",transports:a.transports});}}return i}function au(t){var e;if("toJSON"in t&&typeof t.toJSON=="function")return t.toJSON();let r=t;return {id:t.id,rawId:t.id,response:{attestationObject:De(new Uint8Array(t.response.attestationObject)),clientDataJSON:De(new Uint8Array(t.response.clientDataJSON))},type:"public-key",clientExtensionResults:t.getClientExtensionResults(),authenticatorAttachment:(e=r.authenticatorAttachment)!==null&&e!==void 0?e:void 0}}function lu(t){var e;if("toJSON"in t&&typeof t.toJSON=="function")return t.toJSON();let r=t,n=t.getClientExtensionResults(),s=t.response;return {id:t.id,rawId:t.id,response:{authenticatorData:De(new Uint8Array(s.authenticatorData)),clientDataJSON:De(new Uint8Array(s.clientDataJSON)),signature:De(new Uint8Array(s.signature)),userHandle:s.userHandle?De(new Uint8Array(s.userHandle)):void 0},type:"public-key",clientExtensionResults:n,authenticatorAttachment:(e=r.authenticatorAttachment)!==null&&e!==void 0?e:void 0}}function Yi(t){return t==="localhost"||/^([a-z0-9]+(-[a-z0-9]+)*\.)+[a-z]{2,}$/i.test(t)}function su(){var t,e;return !!(q()&&"PublicKeyCredential"in window&&window.PublicKeyCredential&&"credentials"in navigator&&typeof((t=navigator?.credentials)===null||t===void 0?void 0:t.create)=="function"&&typeof((e=navigator?.credentials)===null||e===void 0?void 0:e.get)=="function")}async function n_(t){try{let e=await navigator.credentials.create(t);return e?e instanceof PublicKeyCredential?{data:e,error:null}:{data:null,error:new kt("Browser returned unexpected credential type",e)}:{data:null,error:new kt("Empty credential response",e)}}catch(e){return {data:null,error:tu({error:e,options:t})}}}async function s_(t){try{let e=await navigator.credentials.get(t);return e?e instanceof PublicKeyCredential?{data:e,error:null}:{data:null,error:new kt("Browser returned unexpected credential type",e)}:{data:null,error:new kt("Empty credential response",e)}}catch(e){return {data:null,error:ru({error:e,options:t})}}}function as(...t){let e=s=>s!==null&&typeof s=="object"&&!Array.isArray(s),r=s=>s instanceof ArrayBuffer||ArrayBuffer.isView(s),n={};for(let s of t)if(s)for(let i in s){let o=s[i];if(o!==void 0)if(Array.isArray(o))n[i]=o;else if(r(o))n[i]=o;else if(e(o)){let a=n[i];e(a)?n[i]=as(a,o):n[i]=as(o);}else n[i]=o;}return n}function a_(t,e){return as(i_,t,e||{})}function l_(t,e){return as(o_,t,e||{})}var Zi,r_,i_,o_,ls,Xi=R(()=>{vr();ts();ht();Qt();nu();Zi=class{createNewAbortSignal(){if(this.controller){let r=new Error("Cancelling existing WebAuthn API call for new one");r.name="AbortError",this.controller.abort(r);}let e=new AbortController;return this.controller=e,e.signal}cancelCeremony(){if(this.controller){let e=new Error("Manually cancelling existing WebAuthn API call");e.name="AbortError",this.controller.abort(e),this.controller=void 0;}}},r_=new Zi;i_={hints:["security-key"],authenticatorSelection:{authenticatorAttachment:"cross-platform",requireResidentKey:false,userVerification:"preferred",residentKey:"discouraged"},attestation:"direct"},o_={userVerification:"preferred",hints:["security-key"],attestation:"direct"};ls=class{constructor(e){this.client=e,this.enroll=this._enroll.bind(this),this.challenge=this._challenge.bind(this),this.verify=this._verify.bind(this),this.authenticate=this._authenticate.bind(this),this.register=this._register.bind(this);}async _enroll(e){return this.client.mfa.enroll(Object.assign(Object.assign({},e),{factorType:"webauthn"}))}async _challenge({factorId:e,webauthn:r,friendlyName:n,signal:s},i){var o;try{let{data:a,error:l}=await this.client.mfa.challenge({factorId:e,webauthn:r});if(!a)return {data:null,error:l};let c=s??r_.createNewAbortSignal();if(a.webauthn.type==="create"){let{user:u}=a.webauthn.credential_options.publicKey;if(!u.name){let d=n;if(d)u.name=`${u.id}:${d}`;else {let h=(await this.client.getUser()).data.user,f=((o=h?.user_metadata)===null||o===void 0?void 0:o.name)||h?.email||h?.id||"User";u.name=`${u.id}:${f}`;}}u.displayName||(u.displayName=u.name);}switch(a.webauthn.type){case "create":{let u=a_(a.webauthn.credential_options.publicKey,i?.create),{data:d,error:p}=await n_({publicKey:u,signal:c});return d?{data:{factorId:e,challengeId:a.id,webauthn:{type:a.webauthn.type,credential_response:d}},error:null}:{data:null,error:p}}case "request":{let u=l_(a.webauthn.credential_options.publicKey,i?.request),{data:d,error:p}=await s_(Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:u,signal:c}));return d?{data:{factorId:e,challengeId:a.id,webauthn:{type:a.webauthn.type,credential_response:d}},error:null}:{data:null,error:p}}}}catch(a){return v(a)?{data:null,error:a}:{data:null,error:new ue("Unexpected error in challenge",a)}}}async _verify({challengeId:e,factorId:r,webauthn:n}){return this.client.mfa.verify({factorId:r,challengeId:e,webauthn:n})}async _authenticate({factorId:e,webauthn:{rpId:r=typeof window<"u"?window.location.hostname:void 0,rpOrigins:n=typeof window<"u"?[window.location.origin]:void 0,signal:s}={}},i){if(!r)return {data:null,error:new Je("rpId is required for WebAuthn authentication")};try{if(!su())return {data:null,error:new ue("Browser does not support WebAuthn",null)};let{data:o,error:a}=await this.challenge({factorId:e,webauthn:{rpId:r,rpOrigins:n},signal:s},{request:i});if(!o)return {data:null,error:a};let{webauthn:l}=o;return this._verify({factorId:e,challengeId:o.challengeId,webauthn:{type:l.type,rpId:r,rpOrigins:n,credential_response:l.credential_response}})}catch(o){return v(o)?{data:null,error:o}:{data:null,error:new ue("Unexpected error in authenticate",o)}}}async _register({friendlyName:e,webauthn:{rpId:r=typeof window<"u"?window.location.hostname:void 0,rpOrigins:n=typeof window<"u"?[window.location.origin]:void 0,signal:s}={}},i){if(!r)return {data:null,error:new Je("rpId is required for WebAuthn registration")};try{if(!su())return {data:null,error:new ue("Browser does not support WebAuthn",null)};let{data:o,error:a}=await this._enroll({friendlyName:e});if(!o)return await this.client.mfa.listFactors().then(u=>{var d;return (d=u.data)===null||d===void 0?void 0:d.all.find(p=>p.factor_type==="webauthn"&&p.friendly_name===e&&p.status!=="unverified")}).then(u=>u?this.client.mfa.unenroll({factorId:u?.id}):void 0),{data:null,error:a};let{data:l,error:c}=await this._challenge({factorId:o.id,friendlyName:o.friendly_name,webauthn:{rpId:r,rpOrigins:n},signal:s},{create:i});return l?this._verify({factorId:o.id,challengeId:l.challengeId,webauthn:{rpId:r,rpOrigins:n,type:l.webauthn.type,credential_response:l.webauthn.credential_response}}):{data:null,error:c}}catch(o){return v(o)?{data:null,error:o}:{data:null,error:new ue("Unexpected error in register",o)}}}};});async function cu(t,e,r){return await r()}var c_,er,cs,Qi,eo=R(()=>{os();Yn();ht();qi();Qt();Vc();Vi();Yc();Li();ts();eu();Xi();Gc();c_={url:Cc,storageKey:Ec,autoRefreshToken:true,persistSession:true,detectSessionInUrl:true,headers:Rc,flowType:"implicit",debug:false,hasCustomAuthorizationHeader:false,throwOnError:false,lockAcquireTimeout:5e3,skipAutoInitialize:false};er={},cs=class t{get jwks(){var e,r;return (r=(e=er[this.storageKey])===null||e===void 0?void 0:e.jwks)!==null&&r!==void 0?r:{keys:[]}}set jwks(e){er[this.storageKey]=Object.assign(Object.assign({},er[this.storageKey]),{jwks:e});}get jwks_cached_at(){var e,r;return (r=(e=er[this.storageKey])===null||e===void 0?void 0:e.cachedAt)!==null&&r!==void 0?r:Number.MIN_SAFE_INTEGER}set jwks_cached_at(e){er[this.storageKey]=Object.assign(Object.assign({},er[this.storageKey]),{cachedAt:e});}constructor(e){var r,n,s;this.userStorage=null,this.memoryStorage=null,this.stateChangeEmitters=new Map,this.autoRefreshTicker=null,this.autoRefreshTickTimeout=null,this.visibilityChangedCallback=null,this.refreshingDeferred=null,this.initializePromise=null,this.detectSessionInUrl=true,this.hasCustomAuthorizationHeader=false,this.suppressGetSessionWarning=false,this.lockAcquired=false,this.pendingInLock=[],this.broadcastChannel=null,this.logger=console.log;let i=Object.assign(Object.assign({},c_),e);if(this.storageKey=i.storageKey,this.instanceID=(r=t.nextInstanceID[this.storageKey])!==null&&r!==void 0?r:0,t.nextInstanceID[this.storageKey]=this.instanceID+1,this.logDebugMessages=!!i.debug,typeof i.debug=="function"&&(this.logger=i.debug),this.instanceID>0&&q()){let o=`${this._logPrefix()} Multiple GoTrueClient instances detected in the same browser context. It is not an error, but this should be avoided as it may produce undefined behavior when used concurrently under the same storage key.`;console.warn(o),this.logDebugMessages&&console.trace(o);}if(this.persistSession=i.persistSession,this.autoRefreshToken=i.autoRefreshToken,this.admin=new yt({url:i.url,headers:i.headers,fetch:i.fetch}),this.url=i.url,this.headers=i.headers,this.fetch=ns(i.fetch),this.lock=i.lock||cu,this.detectSessionInUrl=i.detectSessionInUrl,this.flowType=i.flowType,this.hasCustomAuthorizationHeader=i.hasCustomAuthorizationHeader,this.throwOnError=i.throwOnError,this.lockAcquireTimeout=i.lockAcquireTimeout,i.lock?this.lock=i.lock:this.persistSession&&q()&&(!((n=globalThis?.navigator)===null||n===void 0)&&n.locks)?this.lock=Ki:this.lock=cu,this.jwks||(this.jwks={keys:[]},this.jwks_cached_at=Number.MIN_SAFE_INTEGER),this.mfa={verify:this._verify.bind(this),enroll:this._enroll.bind(this),unenroll:this._unenroll.bind(this),challenge:this._challenge.bind(this),listFactors:this._listFactors.bind(this),challengeAndVerify:this._challengeAndVerify.bind(this),getAuthenticatorAssuranceLevel:this._getAuthenticatorAssuranceLevel.bind(this),webauthn:new ls(this)},this.oauth={getAuthorizationDetails:this._getAuthorizationDetails.bind(this),approveAuthorization:this._approveAuthorization.bind(this),denyAuthorization:this._denyAuthorization.bind(this),listGrants:this._listOAuthGrants.bind(this),revokeGrant:this._revokeOAuthGrant.bind(this)},this.persistSession?(i.storage?this.storage=i.storage:rs()?this.storage=globalThis.localStorage:(this.memoryStorage={},this.storage=Ji(this.memoryStorage)),i.userStorage&&(this.userStorage=i.userStorage)):(this.memoryStorage={},this.storage=Ji(this.memoryStorage)),q()&&globalThis.BroadcastChannel&&this.persistSession&&this.storageKey){try{this.broadcastChannel=new globalThis.BroadcastChannel(this.storageKey);}catch(o){console.error("Failed to create a new BroadcastChannel, multi-tab state changes will not be available",o);}(s=this.broadcastChannel)===null||s===void 0||s.addEventListener("message",async o=>{this._debug("received broadcast notification from other tab or client",o);try{await this._notifyAllSubscribers(o.data.event,o.data.session,!1);}catch(a){this._debug("#broadcastChannel","error",a);}});}i.skipAutoInitialize||this.initialize().catch(o=>{this._debug("#initialize()","error",o);});}isThrowOnErrorEnabled(){return this.throwOnError}_returnResult(e){if(this.throwOnError&&e&&e.error)throw e.error;return e}_logPrefix(){return `GoTrueClient@${this.storageKey}:${this.instanceID} (${Kn}) ${new Date().toISOString()}`}_debug(...e){return this.logDebugMessages&&this.logger(this._logPrefix(),...e),this}async initialize(){return this.initializePromise?await this.initializePromise:(this.initializePromise=(async()=>await this._acquireLock(this.lockAcquireTimeout,async()=>await this._initialize()))(),await this.initializePromise)}async _initialize(){var e;try{let r={},n="none";if(q()&&(r=Mc(window.location.href),this._isImplicitGrantCallback(r)?n="implicit":await this._isPKCECallback(r)&&(n="pkce")),q()&&this.detectSessionInUrl&&n!=="none"){let{data:s,error:i}=await this._getSessionFromURL(r,n);if(i){if(this._debug("#_initialize()","error detecting session from URL",i),Ac(i)){let l=(e=i.details)===null||e===void 0?void 0:e.code;if(l==="identity_already_exists"||l==="identity_not_found"||l==="single_identity_not_deletable")return {error:i}}return {error:i}}let{session:o,redirectType:a}=s;return this._debug("#_initialize()","detected session in URL",o,"redirect type",a),await this._saveSession(o),setTimeout(async()=>{a==="recovery"?await this._notifyAllSubscribers("PASSWORD_RECOVERY",o):await this._notifyAllSubscribers("SIGNED_IN",o);},0),{error:null}}return await this._recoverAndRefresh(),{error:null}}catch(r){return v(r)?this._returnResult({error:r}):this._returnResult({error:new ue("Unexpected error during initialization",r)})}finally{await this._handleVisibilityChange(),this._debug("#_initialize()","end");}}async signInAnonymously(e){var r,n,s;try{let i=await C(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,body:{data:(n=(r=e?.options)===null||r===void 0?void 0:r.data)!==null&&n!==void 0?n:{},gotrue_meta_security:{captcha_token:(s=e?.options)===null||s===void 0?void 0:s.captchaToken}},xform:de}),{data:o,error:a}=i;if(a||!o)return this._returnResult({data:{user:null,session:null},error:a});let l=o.session,c=o.user;return o.session&&(await this._saveSession(o.session),await this._notifyAllSubscribers("SIGNED_IN",l)),this._returnResult({data:{user:c,session:l},error:null})}catch(i){if(v(i))return this._returnResult({data:{user:null,session:null},error:i});throw i}}async signUp(e){var r,n,s;try{let i;if("email"in e){let{email:u,password:d,options:p}=e,h=null,f=null;this.flowType==="pkce"&&([h,f]=await mt(this.storage,this.storageKey)),i=await C(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,redirectTo:p?.emailRedirectTo,body:{email:u,password:d,data:(r=p?.data)!==null&&r!==void 0?r:{},gotrue_meta_security:{captcha_token:p?.captchaToken},code_challenge:h,code_challenge_method:f},xform:de});}else if("phone"in e){let{phone:u,password:d,options:p}=e;i=await C(this.fetch,"POST",`${this.url}/signup`,{headers:this.headers,body:{phone:u,password:d,data:(n=p?.data)!==null&&n!==void 0?n:{},channel:(s=p?.channel)!==null&&s!==void 0?s:"sms",gotrue_meta_security:{captcha_token:p?.captchaToken}},xform:de});}else throw new ut("You must provide either an email or phone number and a password");let{data:o,error:a}=i;if(a||!o)return await z(this.storage,`${this.storageKey}-code-verifier`),this._returnResult({data:{user:null,session:null},error:a});let l=o.session,c=o.user;return o.session&&(await this._saveSession(o.session),await this._notifyAllSubscribers("SIGNED_IN",l)),this._returnResult({data:{user:c,session:l},error:null})}catch(i){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(i))return this._returnResult({data:{user:null,session:null},error:i});throw i}}async signInWithPassword(e){try{let r;if("email"in e){let{email:i,password:o,options:a}=e;r=await C(this.fetch,"POST",`${this.url}/token?grant_type=password`,{headers:this.headers,body:{email:i,password:o,gotrue_meta_security:{captcha_token:a?.captchaToken}},xform:Fi});}else if("phone"in e){let{phone:i,password:o,options:a}=e;r=await C(this.fetch,"POST",`${this.url}/token?grant_type=password`,{headers:this.headers,body:{phone:i,password:o,gotrue_meta_security:{captcha_token:a?.captchaToken}},xform:Fi});}else throw new ut("You must provide either an email or phone number and a password");let{data:n,error:s}=r;if(s)return this._returnResult({data:{user:null,session:null},error:s});if(!n||!n.session||!n.user){let i=new Ne;return this._returnResult({data:{user:null,session:null},error:i})}return n.session&&(await this._saveSession(n.session),await this._notifyAllSubscribers("SIGNED_IN",n.session)),this._returnResult({data:Object.assign({user:n.user,session:n.session},n.weak_password?{weakPassword:n.weak_password}:null),error:s})}catch(r){if(v(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async signInWithOAuth(e){var r,n,s,i;return await this._handleProviderSignIn(e.provider,{redirectTo:(r=e.options)===null||r===void 0?void 0:r.redirectTo,scopes:(n=e.options)===null||n===void 0?void 0:n.scopes,queryParams:(s=e.options)===null||s===void 0?void 0:s.queryParams,skipBrowserRedirect:(i=e.options)===null||i===void 0?void 0:i.skipBrowserRedirect})}async exchangeCodeForSession(e){return await this.initializePromise,this._acquireLock(this.lockAcquireTimeout,async()=>this._exchangeCodeForSession(e))}async signInWithWeb3(e){let{chain:r}=e;switch(r){case "ethereum":return await this.signInWithEthereum(e);case "solana":return await this.signInWithSolana(e);default:throw new Error(`@supabase/auth-js: Unsupported chain "${r}"`)}}async signInWithEthereum(e){var r,n,s,i,o,a,l,c,u,d,p;let h,f;if("message"in e)h=e.message,f=e.signature;else {let{chain:m,wallet:_,statement:b,options:w}=e,k;if(q())if(typeof _=="object")k=_;else {let le=window;if("ethereum"in le&&typeof le.ethereum=="object"&&"request"in le.ethereum&&typeof le.ethereum.request=="function")k=le.ethereum;else throw new Error("@supabase/auth-js: No compatible Ethereum wallet interface on the window object (window.ethereum) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'ethereum', wallet: resolvedUserWallet }) instead.")}else {if(typeof _!="object"||!w?.url)throw new Error("@supabase/auth-js: Both wallet and url must be specified in non-browser environments.");k=_;}let I=new URL((r=w?.url)!==null&&r!==void 0?r:window.location.href),Z=await k.request({method:"eth_requestAccounts"}).then(le=>le).catch(()=>{throw new Error("@supabase/auth-js: Wallet method eth_requestAccounts is missing or invalid")});if(!Z||Z.length===0)throw new Error("@supabase/auth-js: No accounts available. Please ensure the wallet is connected.");let T=Gi(Z[0]),N=(n=w?.signInWithEthereum)===null||n===void 0?void 0:n.chainId;if(!N){let le=await k.request({method:"eth_chainId"});N=Xc(le);}let Ie={domain:I.host,address:T,statement:b,uri:I.href,version:"1",chainId:N,nonce:(s=w?.signInWithEthereum)===null||s===void 0?void 0:s.nonce,issuedAt:(o=(i=w?.signInWithEthereum)===null||i===void 0?void 0:i.issuedAt)!==null&&o!==void 0?o:new Date,expirationTime:(a=w?.signInWithEthereum)===null||a===void 0?void 0:a.expirationTime,notBefore:(l=w?.signInWithEthereum)===null||l===void 0?void 0:l.notBefore,requestId:(c=w?.signInWithEthereum)===null||c===void 0?void 0:c.requestId,resources:(u=w?.signInWithEthereum)===null||u===void 0?void 0:u.resources};h=Qc(Ie),f=await k.request({method:"personal_sign",params:[Zc(h),T]});}try{let{data:m,error:_}=await C(this.fetch,"POST",`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:"ethereum",message:h,signature:f},!((d=e.options)===null||d===void 0)&&d.captchaToken?{gotrue_meta_security:{captcha_token:(p=e.options)===null||p===void 0?void 0:p.captchaToken}}:null),xform:de});if(_)throw _;if(!m||!m.session||!m.user){let b=new Ne;return this._returnResult({data:{user:null,session:null},error:b})}return m.session&&(await this._saveSession(m.session),await this._notifyAllSubscribers("SIGNED_IN",m.session)),this._returnResult({data:Object.assign({},m),error:_})}catch(m){if(v(m))return this._returnResult({data:{user:null,session:null},error:m});throw m}}async signInWithSolana(e){var r,n,s,i,o,a,l,c,u,d,p,h;let f,m;if("message"in e)f=e.message,m=e.signature;else {let{chain:_,wallet:b,statement:w,options:k}=e,I;if(q())if(typeof b=="object")I=b;else {let T=window;if("solana"in T&&typeof T.solana=="object"&&("signIn"in T.solana&&typeof T.solana.signIn=="function"||"signMessage"in T.solana&&typeof T.solana.signMessage=="function"))I=T.solana;else throw new Error("@supabase/auth-js: No compatible Solana wallet interface on the window object (window.solana) detected. Make sure the user already has a wallet installed and connected for this app. Prefer passing the wallet interface object directly to signInWithWeb3({ chain: 'solana', wallet: resolvedUserWallet }) instead.")}else {if(typeof b!="object"||!k?.url)throw new Error("@supabase/auth-js: Both wallet and url must be specified in non-browser environments.");I=b;}let Z=new URL((r=k?.url)!==null&&r!==void 0?r:window.location.href);if("signIn"in I&&I.signIn){let T=await I.signIn(Object.assign(Object.assign(Object.assign({issuedAt:new Date().toISOString()},k?.signInWithSolana),{version:"1",domain:Z.host,uri:Z.href}),w?{statement:w}:null)),N;if(Array.isArray(T)&&T[0]&&typeof T[0]=="object")N=T[0];else if(T&&typeof T=="object"&&"signedMessage"in T&&"signature"in T)N=T;else throw new Error("@supabase/auth-js: Wallet method signIn() returned unrecognized value");if("signedMessage"in N&&"signature"in N&&(typeof N.signedMessage=="string"||N.signedMessage instanceof Uint8Array)&&N.signature instanceof Uint8Array)f=typeof N.signedMessage=="string"?N.signedMessage:new TextDecoder().decode(N.signedMessage),m=N.signature;else throw new Error("@supabase/auth-js: Wallet method signIn() API returned object without signedMessage and signature fields")}else {if(!("signMessage"in I)||typeof I.signMessage!="function"||!("publicKey"in I)||typeof I!="object"||!I.publicKey||!("toBase58"in I.publicKey)||typeof I.publicKey.toBase58!="function")throw new Error("@supabase/auth-js: Wallet does not have a compatible signMessage() and publicKey.toBase58() API");f=[`${Z.host} wants you to sign in with your Solana account:`,I.publicKey.toBase58(),...w?["",w,""]:[""],"Version: 1",`URI: ${Z.href}`,`Issued At: ${(s=(n=k?.signInWithSolana)===null||n===void 0?void 0:n.issuedAt)!==null&&s!==void 0?s:new Date().toISOString()}`,...!((i=k?.signInWithSolana)===null||i===void 0)&&i.notBefore?[`Not Before: ${k.signInWithSolana.notBefore}`]:[],...!((o=k?.signInWithSolana)===null||o===void 0)&&o.expirationTime?[`Expiration Time: ${k.signInWithSolana.expirationTime}`]:[],...!((a=k?.signInWithSolana)===null||a===void 0)&&a.chainId?[`Chain ID: ${k.signInWithSolana.chainId}`]:[],...!((l=k?.signInWithSolana)===null||l===void 0)&&l.nonce?[`Nonce: ${k.signInWithSolana.nonce}`]:[],...!((c=k?.signInWithSolana)===null||c===void 0)&&c.requestId?[`Request ID: ${k.signInWithSolana.requestId}`]:[],...!((d=(u=k?.signInWithSolana)===null||u===void 0?void 0:u.resources)===null||d===void 0)&&d.length?["Resources",...k.signInWithSolana.resources.map(N=>`- ${N}`)]:[]].join(`
47
+ `);let T=await I.signMessage(new TextEncoder().encode(f),"utf8");if(!T||!(T instanceof Uint8Array))throw new Error("@supabase/auth-js: Wallet signMessage() API returned an recognized value");m=T;}}try{let{data:_,error:b}=await C(this.fetch,"POST",`${this.url}/token?grant_type=web3`,{headers:this.headers,body:Object.assign({chain:"solana",message:f,signature:De(m)},!((p=e.options)===null||p===void 0)&&p.captchaToken?{gotrue_meta_security:{captcha_token:(h=e.options)===null||h===void 0?void 0:h.captchaToken}}:null),xform:de});if(b)throw b;if(!_||!_.session||!_.user){let w=new Ne;return this._returnResult({data:{user:null,session:null},error:w})}return _.session&&(await this._saveSession(_.session),await this._notifyAllSubscribers("SIGNED_IN",_.session)),this._returnResult({data:Object.assign({},_),error:b})}catch(_){if(v(_))return this._returnResult({data:{user:null,session:null},error:_});throw _}}async _exchangeCodeForSession(e){let r=await Ve(this.storage,`${this.storageKey}-code-verifier`),[n,s]=(r??"").split("/");try{if(!n&&this.flowType==="pkce")throw new Zn;let{data:i,error:o}=await C(this.fetch,"POST",`${this.url}/token?grant_type=pkce`,{headers:this.headers,body:{auth_code:e,code_verifier:n},xform:de});if(await z(this.storage,`${this.storageKey}-code-verifier`),o)throw o;if(!i||!i.session||!i.user){let a=new Ne;return this._returnResult({data:{user:null,session:null,redirectType:null},error:a})}return i.session&&(await this._saveSession(i.session),await this._notifyAllSubscribers("SIGNED_IN",i.session)),this._returnResult({data:Object.assign(Object.assign({},i),{redirectType:s??null}),error:o})}catch(i){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(i))return this._returnResult({data:{user:null,session:null,redirectType:null},error:i});throw i}}async signInWithIdToken(e){try{let{options:r,provider:n,token:s,access_token:i,nonce:o}=e,a=await C(this.fetch,"POST",`${this.url}/token?grant_type=id_token`,{headers:this.headers,body:{provider:n,id_token:s,access_token:i,nonce:o,gotrue_meta_security:{captcha_token:r?.captchaToken}},xform:de}),{data:l,error:c}=a;if(c)return this._returnResult({data:{user:null,session:null},error:c});if(!l||!l.session||!l.user){let u=new Ne;return this._returnResult({data:{user:null,session:null},error:u})}return l.session&&(await this._saveSession(l.session),await this._notifyAllSubscribers("SIGNED_IN",l.session)),this._returnResult({data:l,error:c})}catch(r){if(v(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async signInWithOtp(e){var r,n,s,i,o;try{if("email"in e){let{email:a,options:l}=e,c=null,u=null;this.flowType==="pkce"&&([c,u]=await mt(this.storage,this.storageKey));let{error:d}=await C(this.fetch,"POST",`${this.url}/otp`,{headers:this.headers,body:{email:a,data:(r=l?.data)!==null&&r!==void 0?r:{},create_user:(n=l?.shouldCreateUser)!==null&&n!==void 0?n:!0,gotrue_meta_security:{captcha_token:l?.captchaToken},code_challenge:c,code_challenge_method:u},redirectTo:l?.emailRedirectTo});return this._returnResult({data:{user:null,session:null},error:d})}if("phone"in e){let{phone:a,options:l}=e,{data:c,error:u}=await C(this.fetch,"POST",`${this.url}/otp`,{headers:this.headers,body:{phone:a,data:(s=l?.data)!==null&&s!==void 0?s:{},create_user:(i=l?.shouldCreateUser)!==null&&i!==void 0?i:!0,gotrue_meta_security:{captcha_token:l?.captchaToken},channel:(o=l?.channel)!==null&&o!==void 0?o:"sms"}});return this._returnResult({data:{user:null,session:null,messageId:c?.message_id},error:u})}throw new ut("You must provide either an email or phone number.")}catch(a){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(a))return this._returnResult({data:{user:null,session:null},error:a});throw a}}async verifyOtp(e){var r,n;try{let s,i;"options"in e&&(s=(r=e.options)===null||r===void 0?void 0:r.redirectTo,i=(n=e.options)===null||n===void 0?void 0:n.captchaToken);let{data:o,error:a}=await C(this.fetch,"POST",`${this.url}/verify`,{headers:this.headers,body:Object.assign(Object.assign({},e),{gotrue_meta_security:{captcha_token:i}}),redirectTo:s,xform:de});if(a)throw a;if(!o)throw new Error("An error occurred on token verification.");let l=o.session,c=o.user;return l?.access_token&&(await this._saveSession(l),await this._notifyAllSubscribers(e.type=="recovery"?"PASSWORD_RECOVERY":"SIGNED_IN",l)),this._returnResult({data:{user:c,session:l},error:null})}catch(s){if(v(s))return this._returnResult({data:{user:null,session:null},error:s});throw s}}async signInWithSSO(e){var r,n,s,i,o;try{let a=null,l=null;this.flowType==="pkce"&&([a,l]=await mt(this.storage,this.storageKey));let c=await C(this.fetch,"POST",`${this.url}/sso`,{body:Object.assign(Object.assign(Object.assign(Object.assign(Object.assign({},"providerId"in e?{provider_id:e.providerId}:null),"domain"in e?{domain:e.domain}:null),{redirect_to:(n=(r=e.options)===null||r===void 0?void 0:r.redirectTo)!==null&&n!==void 0?n:void 0}),!((s=e?.options)===null||s===void 0)&&s.captchaToken?{gotrue_meta_security:{captcha_token:e.options.captchaToken}}:null),{skip_http_redirect:!0,code_challenge:a,code_challenge_method:l}),headers:this.headers,xform:Jc});return !((i=c.data)===null||i===void 0)&&i.url&&q()&&!(!((o=e.options)===null||o===void 0)&&o.skipBrowserRedirect)&&window.location.assign(c.data.url),this._returnResult(c)}catch(a){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(a))return this._returnResult({data:null,error:a});throw a}}async reauthenticate(){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._reauthenticate())}async _reauthenticate(){try{return await this._useSession(async e=>{let{data:{session:r},error:n}=e;if(n)throw n;if(!r)throw new J;let{error:s}=await C(this.fetch,"GET",`${this.url}/reauthenticate`,{headers:this.headers,jwt:r.access_token});return this._returnResult({data:{user:null,session:null},error:s})})}catch(e){if(v(e))return this._returnResult({data:{user:null,session:null},error:e});throw e}}async resend(e){try{let r=`${this.url}/resend`;if("email"in e){let{email:n,type:s,options:i}=e,{error:o}=await C(this.fetch,"POST",r,{headers:this.headers,body:{email:n,type:s,gotrue_meta_security:{captcha_token:i?.captchaToken}},redirectTo:i?.emailRedirectTo});return this._returnResult({data:{user:null,session:null},error:o})}else if("phone"in e){let{phone:n,type:s,options:i}=e,{data:o,error:a}=await C(this.fetch,"POST",r,{headers:this.headers,body:{phone:n,type:s,gotrue_meta_security:{captcha_token:i?.captchaToken}}});return this._returnResult({data:{user:null,session:null,messageId:o?.message_id},error:a})}throw new ut("You must provide either an email or phone number and a type")}catch(r){if(v(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async getSession(){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>this._useSession(async r=>r))}async _acquireLock(e,r){this._debug("#_acquireLock","begin",e);try{if(this.lockAcquired){let n=this.pendingInLock.length?this.pendingInLock[this.pendingInLock.length-1]:Promise.resolve(),s=(async()=>(await n,await r()))();return this.pendingInLock.push((async()=>{try{await s;}catch{}})()),s}return await this.lock(`lock:${this.storageKey}`,e,async()=>{this._debug("#_acquireLock","lock acquired for storage key",this.storageKey);try{this.lockAcquired=!0;let n=r();for(this.pendingInLock.push((async()=>{try{await n;}catch{}})()),await n;this.pendingInLock.length;){let s=[...this.pendingInLock];await Promise.all(s),this.pendingInLock.splice(0,s.length);}return await n}finally{this._debug("#_acquireLock","lock released for storage key",this.storageKey),this.lockAcquired=!1;}})}finally{this._debug("#_acquireLock","end");}}async _useSession(e){this._debug("#_useSession","begin");try{let r=await this.__loadSession();return await e(r)}finally{this._debug("#_useSession","end");}}async __loadSession(){this._debug("#__loadSession()","begin"),this.lockAcquired||this._debug("#__loadSession()","used outside of an acquired lock!",new Error().stack);try{let e=null,r=await Ve(this.storage,this.storageKey);if(this._debug("#getSession()","session from storage",r),r!==null&&(this._isValidSession(r)?e=r:(this._debug("#getSession()","session from storage is not valid"),await this._removeSession())),!e)return {data:{session:null},error:null};let n=e.expires_at?e.expires_at*1e3-Date.now()<Gn:!1;if(this._debug("#__loadSession()",`session has${n?"":" not"} expired`,"expires_at",e.expires_at),!n){if(this.userStorage){let o=await Ve(this.userStorage,this.storageKey+"-user");o?.user?e.user=o.user:e.user=ss();}if(this.storage.isServer&&e.user&&!e.user.__isUserNotAvailableProxy){let o={value:this.suppressGetSessionWarning};e.user=qc(e.user,o),o.value&&(this.suppressGetSessionWarning=!0);}return {data:{session:e},error:null}}let{data:s,error:i}=await this._callRefreshToken(e.refresh_token);return i?this._returnResult({data:{session:null},error:i}):this._returnResult({data:{session:s},error:null})}finally{this._debug("#__loadSession()","end");}}async getUser(e){if(e)return await this._getUser(e);await this.initializePromise;let r=await this._acquireLock(this.lockAcquireTimeout,async()=>await this._getUser());return r.data.user&&(this.suppressGetSessionWarning=true),r}async _getUser(e){try{return e?await C(this.fetch,"GET",`${this.url}/user`,{headers:this.headers,jwt:e,xform:Se}):await this._useSession(async r=>{var n,s,i;let{data:o,error:a}=r;if(a)throw a;return !(!((n=o.session)===null||n===void 0)&&n.access_token)&&!this.hasCustomAuthorizationHeader?{data:{user:null},error:new J}:await C(this.fetch,"GET",`${this.url}/user`,{headers:this.headers,jwt:(i=(s=o.session)===null||s===void 0?void 0:s.access_token)!==null&&i!==void 0?i:void 0,xform:Se})})}catch(r){if(v(r))return Hr(r)&&(await this._removeSession(),await z(this.storage,`${this.storageKey}-code-verifier`)),this._returnResult({data:{user:null},error:r});throw r}}async updateUser(e,r={}){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._updateUser(e,r))}async _updateUser(e,r={}){try{return await this._useSession(async n=>{let{data:s,error:i}=n;if(i)throw i;if(!s.session)throw new J;let o=s.session,a=null,l=null;this.flowType==="pkce"&&e.email!=null&&([a,l]=await mt(this.storage,this.storageKey));let{data:c,error:u}=await C(this.fetch,"PUT",`${this.url}/user`,{headers:this.headers,redirectTo:r?.emailRedirectTo,body:Object.assign(Object.assign({},e),{code_challenge:a,code_challenge_method:l}),jwt:o.access_token,xform:Se});if(u)throw u;return o.user=c.user,await this._saveSession(o),await this._notifyAllSubscribers("USER_UPDATED",o),this._returnResult({data:{user:o.user},error:null})})}catch(n){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(n))return this._returnResult({data:{user:null},error:n});throw n}}async setSession(e){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._setSession(e))}async _setSession(e){try{if(!e.access_token||!e.refresh_token)throw new J;let r=Date.now()/1e3,n=r,s=!0,i=null,{payload:o}=zr(e.access_token);if(o.exp&&(n=o.exp,s=n<=r),s){let{data:a,error:l}=await this._callRefreshToken(e.refresh_token);if(l)return this._returnResult({data:{user:null,session:null},error:l});if(!a)return {data:{user:null,session:null},error:null};i=a;}else {let{data:a,error:l}=await this._getUser(e.access_token);if(l)return this._returnResult({data:{user:null,session:null},error:l});i={access_token:e.access_token,refresh_token:e.refresh_token,user:a.user,token_type:"bearer",expires_in:n-r,expires_at:n},await this._saveSession(i),await this._notifyAllSubscribers("SIGNED_IN",i);}return this._returnResult({data:{user:i.user,session:i},error:null})}catch(r){if(v(r))return this._returnResult({data:{session:null,user:null},error:r});throw r}}async refreshSession(e){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._refreshSession(e))}async _refreshSession(e){try{return await this._useSession(async r=>{var n;if(!e){let{data:o,error:a}=r;if(a)throw a;e=(n=o.session)!==null&&n!==void 0?n:void 0;}if(!e?.refresh_token)throw new J;let{data:s,error:i}=await this._callRefreshToken(e.refresh_token);return i?this._returnResult({data:{user:null,session:null},error:i}):s?this._returnResult({data:{user:s.user,session:s},error:null}):this._returnResult({data:{user:null,session:null},error:null})})}catch(r){if(v(r))return this._returnResult({data:{user:null,session:null},error:r});throw r}}async _getSessionFromURL(e,r){try{if(!q())throw new dt("No browser detected.");if(e.error||e.error_description||e.error_code)throw new dt(e.error_description||"Error in URL with unspecified error_description",{error:e.error||"unspecified_error",code:e.error_code||"unspecified_code"});switch(r){case "implicit":if(this.flowType==="pkce")throw new Br("Not a valid PKCE flow url.");break;case "pkce":if(this.flowType==="implicit")throw new dt("Not a valid implicit grant flow url.");break;default:}if(r==="pkce"){if(this._debug("#_initialize()","begin","is PKCE flow",!0),!e.code)throw new Br("No code detected.");let{data:w,error:k}=await this._exchangeCodeForSession(e.code);if(k)throw k;let I=new URL(window.location.href);return I.searchParams.delete("code"),window.history.replaceState(window.history.state,"",I.toString()),{data:{session:w.session,redirectType:null},error:null}}let{provider_token:n,provider_refresh_token:s,access_token:i,refresh_token:o,expires_in:a,expires_at:l,token_type:c}=e;if(!i||!a||!o||!c)throw new dt("No session defined in URL");let u=Math.round(Date.now()/1e3),d=parseInt(a),p=u+d;l&&(p=parseInt(l));let h=p-u;h*1e3<=ct&&console.warn(`@supabase/gotrue-js: Session as retrieved from URL expires in ${h}s, should have been closer to ${d}s`);let f=p-d;u-f>=120?console.warn("@supabase/gotrue-js: Session as retrieved from URL was issued over 120s ago, URL could be stale",f,p,u):u-f<0&&console.warn("@supabase/gotrue-js: Session as retrieved from URL was issued in the future? Check the device clock for skew",f,p,u);let{data:m,error:_}=await this._getUser(i);if(_)throw _;let b={provider_token:n,provider_refresh_token:s,access_token:i,expires_in:d,expires_at:p,refresh_token:o,token_type:c,user:m.user};return window.location.hash="",this._debug("#_getSessionFromURL()","clearing window.location.hash"),this._returnResult({data:{session:b,redirectType:e.type},error:null})}catch(n){if(v(n))return this._returnResult({data:{session:null,redirectType:null},error:n});throw n}}_isImplicitGrantCallback(e){return typeof this.detectSessionInUrl=="function"?this.detectSessionInUrl(new URL(window.location.href),e):!!(e.access_token||e.error_description)}async _isPKCECallback(e){let r=await Ve(this.storage,`${this.storageKey}-code-verifier`);return !!(e.code&&r)}async signOut(e={scope:"global"}){return await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>await this._signOut(e))}async _signOut({scope:e}={scope:"global"}){return await this._useSession(async r=>{var n;let{data:s,error:i}=r;if(i&&!Hr(i))return this._returnResult({error:i});let o=(n=s.session)===null||n===void 0?void 0:n.access_token;if(o){let{error:a}=await this.admin.signOut(o,e);if(a&&!(Tc(a)&&(a.status===404||a.status===401||a.status===403)||Hr(a)))return this._returnResult({error:a})}return e!=="others"&&(await this._removeSession(),await z(this.storage,`${this.storageKey}-code-verifier`)),this._returnResult({error:null})})}onAuthStateChange(e){let r=jc(),n={id:r,callback:e,unsubscribe:()=>{this._debug("#unsubscribe()","state change callback with id removed",r),this.stateChangeEmitters.delete(r);}};return this._debug("#onAuthStateChange()","registered callback with id",r),this.stateChangeEmitters.set(r,n),(async()=>(await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>{this._emitInitialSession(r);})))(),{data:{subscription:n}}}async _emitInitialSession(e){return await this._useSession(async r=>{var n,s;try{let{data:{session:i},error:o}=r;if(o)throw o;await((n=this.stateChangeEmitters.get(e))===null||n===void 0?void 0:n.callback("INITIAL_SESSION",i)),this._debug("INITIAL_SESSION","callback id",e,"session",i);}catch(i){await((s=this.stateChangeEmitters.get(e))===null||s===void 0?void 0:s.callback("INITIAL_SESSION",null)),this._debug("INITIAL_SESSION","callback id",e,"error",i),Hr(i)?console.warn(i):console.error(i);}})}async resetPasswordForEmail(e,r={}){let n=null,s=null;this.flowType==="pkce"&&([n,s]=await mt(this.storage,this.storageKey,true));try{return await C(this.fetch,"POST",`${this.url}/recover`,{body:{email:e,code_challenge:n,code_challenge_method:s,gotrue_meta_security:{captcha_token:r.captchaToken}},headers:this.headers,redirectTo:r.redirectTo})}catch(i){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(i))return this._returnResult({data:null,error:i});throw i}}async getUserIdentities(){var e;try{let{data:r,error:n}=await this.getUser();if(n)throw n;return this._returnResult({data:{identities:(e=r.user.identities)!==null&&e!==void 0?e:[]},error:null})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async linkIdentity(e){return "token"in e?this.linkIdentityIdToken(e):this.linkIdentityOAuth(e)}async linkIdentityOAuth(e){var r;try{let{data:n,error:s}=await this._useSession(async i=>{var o,a,l,c,u;let{data:d,error:p}=i;if(p)throw p;let h=await this._getUrlForProvider(`${this.url}/user/identities/authorize`,e.provider,{redirectTo:(o=e.options)===null||o===void 0?void 0:o.redirectTo,scopes:(a=e.options)===null||a===void 0?void 0:a.scopes,queryParams:(l=e.options)===null||l===void 0?void 0:l.queryParams,skipBrowserRedirect:!0});return await C(this.fetch,"GET",h,{headers:this.headers,jwt:(u=(c=d.session)===null||c===void 0?void 0:c.access_token)!==null&&u!==void 0?u:void 0})});if(s)throw s;return q()&&!(!((r=e.options)===null||r===void 0)&&r.skipBrowserRedirect)&&window.location.assign(n?.url),this._returnResult({data:{provider:e.provider,url:n?.url},error:null})}catch(n){if(v(n))return this._returnResult({data:{provider:e.provider,url:null},error:n});throw n}}async linkIdentityIdToken(e){return await this._useSession(async r=>{var n;try{let{error:s,data:{session:i}}=r;if(s)throw s;let{options:o,provider:a,token:l,access_token:c,nonce:u}=e,d=await C(this.fetch,"POST",`${this.url}/token?grant_type=id_token`,{headers:this.headers,jwt:(n=i?.access_token)!==null&&n!==void 0?n:void 0,body:{provider:a,id_token:l,access_token:c,nonce:u,link_identity:!0,gotrue_meta_security:{captcha_token:o?.captchaToken}},xform:de}),{data:p,error:h}=d;return h?this._returnResult({data:{user:null,session:null},error:h}):!p||!p.session||!p.user?this._returnResult({data:{user:null,session:null},error:new Ne}):(p.session&&(await this._saveSession(p.session),await this._notifyAllSubscribers("USER_UPDATED",p.session)),this._returnResult({data:p,error:h}))}catch(s){if(await z(this.storage,`${this.storageKey}-code-verifier`),v(s))return this._returnResult({data:{user:null,session:null},error:s});throw s}})}async unlinkIdentity(e){try{return await this._useSession(async r=>{var n,s;let{data:i,error:o}=r;if(o)throw o;return await C(this.fetch,"DELETE",`${this.url}/user/identities/${e.identity_id}`,{headers:this.headers,jwt:(s=(n=i.session)===null||n===void 0?void 0:n.access_token)!==null&&s!==void 0?s:void 0})})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async _refreshAccessToken(e){let r=`#_refreshAccessToken(${e.substring(0,5)}...)`;this._debug(r,"begin");try{let n=Date.now();return await Wc(async s=>(s>0&&await Uc(200*Math.pow(2,s-1)),this._debug(r,"refreshing attempt",s),await C(this.fetch,"POST",`${this.url}/token?grant_type=refresh_token`,{body:{refresh_token:e},headers:this.headers,xform:de})),(s,i)=>{let o=200*Math.pow(2,s);return i&&Qn(i)&&Date.now()+o-n<ct})}catch(n){if(this._debug(r,"error",n),v(n))return this._returnResult({data:{session:null,user:null},error:n});throw n}finally{this._debug(r,"end");}}_isValidSession(e){return typeof e=="object"&&e!==null&&"access_token"in e&&"refresh_token"in e&&"expires_at"in e}async _handleProviderSignIn(e,r){let n=await this._getUrlForProvider(`${this.url}/authorize`,e,{redirectTo:r.redirectTo,scopes:r.scopes,queryParams:r.queryParams});return this._debug("#_handleProviderSignIn()","provider",e,"options",r,"url",n),q()&&!r.skipBrowserRedirect&&window.location.assign(n),{data:{provider:e,url:n},error:null}}async _recoverAndRefresh(){var e,r;let n="#_recoverAndRefresh()";this._debug(n,"begin");try{let s=await Ve(this.storage,this.storageKey);if(s&&this.userStorage){let o=await Ve(this.userStorage,this.storageKey+"-user");!this.storage.isServer&&Object.is(this.storage,this.userStorage)&&!o&&(o={user:s.user},await gt(this.userStorage,this.storageKey+"-user",o)),s.user=(e=o?.user)!==null&&e!==void 0?e:ss();}else if(s&&!s.user&&!s.user){let o=await Ve(this.storage,this.storageKey+"-user");o&&o?.user?(s.user=o.user,await z(this.storage,this.storageKey+"-user"),await gt(this.storage,this.storageKey,s)):s.user=ss();}if(this._debug(n,"session from storage",s),!this._isValidSession(s)){this._debug(n,"session is not valid"),s!==null&&await this._removeSession();return}let i=((r=s.expires_at)!==null&&r!==void 0?r:1/0)*1e3-Date.now()<Gn;if(this._debug(n,`session has${i?"":" not"} expired with margin of ${Gn}s`),i){if(this.autoRefreshToken&&s.refresh_token){let{error:o}=await this._callRefreshToken(s.refresh_token);o&&(console.error(o),Qn(o)||(this._debug(n,"refresh failed with a non-retryable error, removing the session",o),await this._removeSession()));}}else if(s.user&&s.user.__isUserNotAvailableProxy===!0)try{let{data:o,error:a}=await this._getUser(s.access_token);!a&&o?.user?(s.user=o.user,await this._saveSession(s),await this._notifyAllSubscribers("SIGNED_IN",s)):this._debug(n,"could not get user data, skipping SIGNED_IN notification");}catch(o){console.error("Error getting user data:",o),this._debug(n,"error getting user data, skipping SIGNED_IN notification",o);}else await this._notifyAllSubscribers("SIGNED_IN",s);}catch(s){this._debug(n,"error",s),console.error(s);return}finally{this._debug(n,"end");}}async _callRefreshToken(e){var r,n;if(!e)throw new J;if(this.refreshingDeferred)return this.refreshingDeferred.promise;let s=`#_callRefreshToken(${e.substring(0,5)}...)`;this._debug(s,"begin");try{this.refreshingDeferred=new qr;let{data:i,error:o}=await this._refreshAccessToken(e);if(o)throw o;if(!i.session)throw new J;await this._saveSession(i.session),await this._notifyAllSubscribers("TOKEN_REFRESHED",i.session);let a={data:i.session,error:null};return this.refreshingDeferred.resolve(a),a}catch(i){if(this._debug(s,"error",i),v(i)){let o={data:null,error:i};return Qn(i)||await this._removeSession(),(r=this.refreshingDeferred)===null||r===void 0||r.resolve(o),o}throw (n=this.refreshingDeferred)===null||n===void 0||n.reject(i),i}finally{this.refreshingDeferred=null,this._debug(s,"end");}}async _notifyAllSubscribers(e,r,n=true){let s=`#_notifyAllSubscribers(${e})`;this._debug(s,"begin",r,`broadcast = ${n}`);try{this.broadcastChannel&&n&&this.broadcastChannel.postMessage({event:e,session:r});let i=[],o=Array.from(this.stateChangeEmitters.values()).map(async a=>{try{await a.callback(e,r);}catch(l){i.push(l);}});if(await Promise.all(o),i.length>0){for(let a=0;a<i.length;a+=1)console.error(i[a]);throw i[0]}}finally{this._debug(s,"end");}}async _saveSession(e){this._debug("#_saveSession()",e),this.suppressGetSessionWarning=true,await z(this.storage,`${this.storageKey}-code-verifier`);let r=Object.assign({},e),n=r.user&&r.user.__isUserNotAvailableProxy===true;if(this.userStorage){!n&&r.user&&await gt(this.userStorage,this.storageKey+"-user",{user:r.user});let s=Object.assign({},r);delete s.user;let i=Bi(s);await gt(this.storage,this.storageKey,i);}else {let s=Bi(r);await gt(this.storage,this.storageKey,s);}}async _removeSession(){this._debug("#_removeSession()"),this.suppressGetSessionWarning=false,await z(this.storage,this.storageKey),await z(this.storage,this.storageKey+"-code-verifier"),await z(this.storage,this.storageKey+"-user"),this.userStorage&&await z(this.userStorage,this.storageKey+"-user"),await this._notifyAllSubscribers("SIGNED_OUT",null);}_removeVisibilityChangedCallback(){this._debug("#_removeVisibilityChangedCallback()");let e=this.visibilityChangedCallback;this.visibilityChangedCallback=null;try{e&&q()&&window?.removeEventListener&&window.removeEventListener("visibilitychange",e);}catch(r){console.error("removing visibilitychange callback failed",r);}}async _startAutoRefresh(){await this._stopAutoRefresh(),this._debug("#_startAutoRefresh()");let e=setInterval(()=>this._autoRefreshTokenTick(),ct);this.autoRefreshTicker=e,e&&typeof e=="object"&&typeof e.unref=="function"?e.unref():typeof Deno<"u"&&typeof Deno.unrefTimer=="function"&&Deno.unrefTimer(e);let r=setTimeout(async()=>{await this.initializePromise,await this._autoRefreshTokenTick();},0);this.autoRefreshTickTimeout=r,r&&typeof r=="object"&&typeof r.unref=="function"?r.unref():typeof Deno<"u"&&typeof Deno.unrefTimer=="function"&&Deno.unrefTimer(r);}async _stopAutoRefresh(){this._debug("#_stopAutoRefresh()");let e=this.autoRefreshTicker;this.autoRefreshTicker=null,e&&clearInterval(e);let r=this.autoRefreshTickTimeout;this.autoRefreshTickTimeout=null,r&&clearTimeout(r);}async startAutoRefresh(){this._removeVisibilityChangedCallback(),await this._startAutoRefresh();}async stopAutoRefresh(){this._removeVisibilityChangedCallback(),await this._stopAutoRefresh();}async _autoRefreshTokenTick(){this._debug("#_autoRefreshTokenTick()","begin");try{await this._acquireLock(0,async()=>{try{let e=Date.now();try{return await this._useSession(async r=>{let{data:{session:n}}=r;if(!n||!n.refresh_token||!n.expires_at){this._debug("#_autoRefreshTokenTick()","no session");return}let s=Math.floor((n.expires_at*1e3-e)/ct);this._debug("#_autoRefreshTokenTick()",`access token expires in ${s} ticks, a tick lasts ${ct}ms, refresh threshold is ${Vn} ticks`),s<=Vn&&await this._callRefreshToken(n.refresh_token);})}catch(r){console.error("Auto refresh tick failed with error. This is likely a transient error.",r);}}finally{this._debug("#_autoRefreshTokenTick()","end");}});}catch(e){if(e.isAcquireTimeout||e instanceof Jr)this._debug("auto refresh token tick lock not available");else throw e}}async _handleVisibilityChange(){if(this._debug("#_handleVisibilityChange()"),!q()||!window?.addEventListener)return this.autoRefreshToken&&this.startAutoRefresh(),false;try{this.visibilityChangedCallback=async()=>{try{await this._onVisibilityChanged(!1);}catch(e){this._debug("#visibilityChangedCallback","error",e);}},window?.addEventListener("visibilitychange",this.visibilityChangedCallback),await this._onVisibilityChanged(!0);}catch(e){console.error("_handleVisibilityChange",e);}}async _onVisibilityChanged(e){let r=`#_onVisibilityChanged(${e})`;this._debug(r,"visibilityState",document.visibilityState),document.visibilityState==="visible"?(this.autoRefreshToken&&this._startAutoRefresh(),e||(await this.initializePromise,await this._acquireLock(this.lockAcquireTimeout,async()=>{if(document.visibilityState!=="visible"){this._debug(r,"acquired the lock to recover the session, but the browser visibilityState is no longer visible, aborting");return}await this._recoverAndRefresh();}))):document.visibilityState==="hidden"&&this.autoRefreshToken&&this._stopAutoRefresh();}async _getUrlForProvider(e,r,n){let s=[`provider=${encodeURIComponent(r)}`];if(n?.redirectTo&&s.push(`redirect_to=${encodeURIComponent(n.redirectTo)}`),n?.scopes&&s.push(`scopes=${encodeURIComponent(n.scopes)}`),this.flowType==="pkce"){let[i,o]=await mt(this.storage,this.storageKey),a=new URLSearchParams({code_challenge:`${encodeURIComponent(i)}`,code_challenge_method:`${encodeURIComponent(o)}`});s.push(a.toString());}if(n?.queryParams){let i=new URLSearchParams(n.queryParams);s.push(i.toString());}return n?.skipBrowserRedirect&&s.push(`skip_http_redirect=${n.skipBrowserRedirect}`),`${e}?${s.join("&")}`}async _unenroll(e){try{return await this._useSession(async r=>{var n;let{data:s,error:i}=r;return i?this._returnResult({data:null,error:i}):await C(this.fetch,"DELETE",`${this.url}/factors/${e.factorId}`,{headers:this.headers,jwt:(n=s?.session)===null||n===void 0?void 0:n.access_token})})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async _enroll(e){try{return await this._useSession(async r=>{var n,s;let{data:i,error:o}=r;if(o)return this._returnResult({data:null,error:o});let a=Object.assign({friendly_name:e.friendlyName,factor_type:e.factorType},e.factorType==="phone"?{phone:e.phone}:e.factorType==="totp"?{issuer:e.issuer}:{}),{data:l,error:c}=await C(this.fetch,"POST",`${this.url}/factors`,{body:a,headers:this.headers,jwt:(n=i?.session)===null||n===void 0?void 0:n.access_token});return c?this._returnResult({data:null,error:c}):(e.factorType==="totp"&&l.type==="totp"&&(!((s=l?.totp)===null||s===void 0)&&s.qr_code)&&(l.totp.qr_code=`data:image/svg+xml;utf-8,${l.totp.qr_code}`),this._returnResult({data:l,error:null}))})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async _verify(e){return this._acquireLock(this.lockAcquireTimeout,async()=>{try{return await this._useSession(async r=>{var n;let{data:s,error:i}=r;if(i)return this._returnResult({data:null,error:i});let o=Object.assign({challenge_id:e.challengeId},"webauthn"in e?{webauthn:Object.assign(Object.assign({},e.webauthn),{credential_response:e.webauthn.type==="create"?au(e.webauthn.credential_response):lu(e.webauthn.credential_response)})}:{code:e.code}),{data:a,error:l}=await C(this.fetch,"POST",`${this.url}/factors/${e.factorId}/verify`,{body:o,headers:this.headers,jwt:(n=s?.session)===null||n===void 0?void 0:n.access_token});return l?this._returnResult({data:null,error:l}):(await this._saveSession(Object.assign({expires_at:Math.round(Date.now()/1e3)+a.expires_in},a)),await this._notifyAllSubscribers("MFA_CHALLENGE_VERIFIED",a),this._returnResult({data:a,error:l}))})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}})}async _challenge(e){return this._acquireLock(this.lockAcquireTimeout,async()=>{try{return await this._useSession(async r=>{var n;let{data:s,error:i}=r;if(i)return this._returnResult({data:null,error:i});let o=await C(this.fetch,"POST",`${this.url}/factors/${e.factorId}/challenge`,{body:e,headers:this.headers,jwt:(n=s?.session)===null||n===void 0?void 0:n.access_token});if(o.error)return o;let{data:a}=o;if(a.type!=="webauthn")return {data:a,error:null};switch(a.webauthn.type){case "create":return {data:Object.assign(Object.assign({},a),{webauthn:Object.assign(Object.assign({},a.webauthn),{credential_options:Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:iu(a.webauthn.credential_options.publicKey)})})}),error:null};case "request":return {data:Object.assign(Object.assign({},a),{webauthn:Object.assign(Object.assign({},a.webauthn),{credential_options:Object.assign(Object.assign({},a.webauthn.credential_options),{publicKey:ou(a.webauthn.credential_options.publicKey)})})}),error:null}}})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}})}async _challengeAndVerify(e){let{data:r,error:n}=await this._challenge({factorId:e.factorId});return n?this._returnResult({data:null,error:n}):await this._verify({factorId:e.factorId,challengeId:r.id,code:e.code})}async _listFactors(){var e;let{data:{user:r},error:n}=await this.getUser();if(n)return {data:null,error:n};let s={all:[],phone:[],totp:[],webauthn:[]};for(let i of (e=r?.factors)!==null&&e!==void 0?e:[])s.all.push(i),i.status==="verified"&&s[i.factor_type].push(i);return {data:s,error:null}}async _getAuthenticatorAssuranceLevel(e){var r,n,s,i;if(e)try{let{payload:h}=zr(e),f=null;h.aal&&(f=h.aal);let m=f,{data:{user:_},error:b}=await this.getUser(e);if(b)return this._returnResult({data:null,error:b});((n=(r=_?.factors)===null||r===void 0?void 0:r.filter(I=>I.status==="verified"))!==null&&n!==void 0?n:[]).length>0&&(m="aal2");let k=h.amr||[];return {data:{currentLevel:f,nextLevel:m,currentAuthenticationMethods:k},error:null}}catch(h){if(v(h))return this._returnResult({data:null,error:h});throw h}let{data:{session:o},error:a}=await this.getSession();if(a)return this._returnResult({data:null,error:a});if(!o)return {data:{currentLevel:null,nextLevel:null,currentAuthenticationMethods:[]},error:null};let{payload:l}=zr(o.access_token),c=null;l.aal&&(c=l.aal);let u=c;((i=(s=o.user.factors)===null||s===void 0?void 0:s.filter(h=>h.status==="verified"))!==null&&i!==void 0?i:[]).length>0&&(u="aal2");let p=l.amr||[];return {data:{currentLevel:c,nextLevel:u,currentAuthenticationMethods:p},error:null}}async _getAuthorizationDetails(e){try{return await this._useSession(async r=>{let{data:{session:n},error:s}=r;return s?this._returnResult({data:null,error:s}):n?await C(this.fetch,"GET",`${this.url}/oauth/authorizations/${e}`,{headers:this.headers,jwt:n.access_token,xform:i=>({data:i,error:null})}):this._returnResult({data:null,error:new J})})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async _approveAuthorization(e,r){try{return await this._useSession(async n=>{let{data:{session:s},error:i}=n;if(i)return this._returnResult({data:null,error:i});if(!s)return this._returnResult({data:null,error:new J});let o=await C(this.fetch,"POST",`${this.url}/oauth/authorizations/${e}/consent`,{headers:this.headers,jwt:s.access_token,body:{action:"approve"},xform:a=>({data:a,error:null})});return o.data&&o.data.redirect_url&&q()&&!r?.skipBrowserRedirect&&window.location.assign(o.data.redirect_url),o})}catch(n){if(v(n))return this._returnResult({data:null,error:n});throw n}}async _denyAuthorization(e,r){try{return await this._useSession(async n=>{let{data:{session:s},error:i}=n;if(i)return this._returnResult({data:null,error:i});if(!s)return this._returnResult({data:null,error:new J});let o=await C(this.fetch,"POST",`${this.url}/oauth/authorizations/${e}/consent`,{headers:this.headers,jwt:s.access_token,body:{action:"deny"},xform:a=>({data:a,error:null})});return o.data&&o.data.redirect_url&&q()&&!r?.skipBrowserRedirect&&window.location.assign(o.data.redirect_url),o})}catch(n){if(v(n))return this._returnResult({data:null,error:n});throw n}}async _listOAuthGrants(){try{return await this._useSession(async e=>{let{data:{session:r},error:n}=e;return n?this._returnResult({data:null,error:n}):r?await C(this.fetch,"GET",`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:r.access_token,xform:s=>({data:s,error:null})}):this._returnResult({data:null,error:new J})})}catch(e){if(v(e))return this._returnResult({data:null,error:e});throw e}}async _revokeOAuthGrant(e){try{return await this._useSession(async r=>{let{data:{session:n},error:s}=r;return s?this._returnResult({data:null,error:s}):n?(await C(this.fetch,"DELETE",`${this.url}/user/oauth/grants`,{headers:this.headers,jwt:n.access_token,query:{client_id:e.clientId},noResolveJson:!0}),{data:{},error:null}):this._returnResult({data:null,error:new J})})}catch(r){if(v(r))return this._returnResult({data:null,error:r});throw r}}async fetchJwk(e,r={keys:[]}){let n=r.keys.find(a=>a.kid===e);if(n)return n;let s=Date.now();if(n=this.jwks.keys.find(a=>a.kid===e),n&&this.jwks_cached_at+Pc>s)return n;let{data:i,error:o}=await C(this.fetch,"GET",`${this.url}/.well-known/jwks.json`,{headers:this.headers});if(o)throw o;return !i.keys||i.keys.length===0||(this.jwks=i,this.jwks_cached_at=s,n=i.keys.find(a=>a.kid===e),!n)?null:n}async getClaims(e,r={}){try{let n=e;if(!n){let{data:h,error:f}=await this.getSession();if(f||!h.session)return this._returnResult({data:null,error:f});n=h.session.access_token;}let{header:s,payload:i,signature:o,raw:{header:a,payload:l}}=zr(n);r?.allowExpired||Fc(i.exp);let c=!s.alg||s.alg.startsWith("HS")||!s.kid||!("crypto"in globalThis&&"subtle"in globalThis.crypto)?null:await this.fetchJwk(s.kid,r?.keys?{keys:r.keys}:r?.jwks);if(!c){let{error:h}=await this.getUser(n);if(h)throw h;return {data:{claims:i,header:s,signature:o},error:null}}let u=Hc(s.alg),d=await crypto.subtle.importKey("jwk",c,u,!0,["verify"]);if(!await crypto.subtle.verify(u,d,o,Nc(`${a}.${l}`)))throw new pt("Invalid JWT signature");return {data:{claims:i,header:s,signature:o},error:null}}catch(n){if(v(n))return this._returnResult({data:null,error:n});throw n}}};cs.nextInstanceID={};Qi=cs;});var uu=R(()=>{os();});var u_,to,du=R(()=>{eo();u_=Qi,to=u_;});var ro=R(()=>{os();eo();uu();du();zi();ht();Vi();});function Gr(t){"@babel/helpers - typeof";return Gr=typeof Symbol=="function"&&typeof Symbol.iterator=="symbol"?function(e){return typeof e}:function(e){return e&&typeof Symbol=="function"&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},Gr(t)}function __(t,e){if(Gr(t)!="object"||!t)return t;var r=t[Symbol.toPrimitive];if(r!==void 0){var n=r.call(t,e);if(Gr(n)!="object")return n;throw new TypeError("@@toPrimitive must return a primitive value.")}return (e==="string"?String:Number)(t)}function w_(t){var e=__(t,"string");return Gr(e)=="symbol"?e:e+""}function y_(t,e,r){return (e=w_(e))in t?Object.defineProperty(t,e,{value:r,enumerable:true,configurable:true,writable:true}):t[e]=r,t}function pu(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter(function(s){return Object.getOwnPropertyDescriptor(t,s).enumerable})),r.push.apply(r,n);}return r}function W(t){for(var e=1;e<arguments.length;e++){var r=arguments[e]!=null?arguments[e]:{};e%2?pu(Object(r),true).forEach(function(n){y_(t,n,r[n]);}):Object.getOwnPropertyDescriptors?Object.defineProperties(t,Object.getOwnPropertyDescriptors(r)):pu(Object(r)).forEach(function(n){Object.defineProperty(t,n,Object.getOwnPropertyDescriptor(r,n));});}return t}function S_(t){return t.endsWith("/")?t:t+"/"}function C_(t,e){var r,n;let{db:s,auth:i,realtime:o,global:a}=t,{db:l,auth:c,realtime:u,global:d}=e,p={db:W(W({},l),s),auth:W(W({},c),i),realtime:W(W({},u),o),storage:{},global:W(W(W({},d),a),{},{headers:W(W({},(r=d?.headers)!==null&&r!==void 0?r:{}),(n=a?.headers)!==null&&n!==void 0?n:{})}),accessToken:async()=>""};return t.accessToken?p.accessToken=t.accessToken:delete p.accessToken,p}function E_(t){let e=t?.trim();if(!e)throw new Error("supabaseUrl is required.");if(!e.match(/^https?:\/\//i))throw new Error("Invalid supabaseUrl: Must be a valid HTTP or HTTPS URL.");try{return new URL(S_(e))}catch{throw Error("Invalid supabaseUrl: Provided URL is malformed.")}}function P_(){if(typeof window<"u")return false;let t=globalThis.process;if(!t)return false;let e=t.version;if(e==null)return false;let r=e.match(/^v(\d+)\./);return r?parseInt(r[1],10)<=18:false}var d_,Vr,p_,h_,f_,g_,m_,k_,b_,v_,R_,x_,tr,us=R(()=>{Bl();Yl();Ni();Sc();ro();Ni();ro();d_="2.103.2",Vr="";typeof Deno<"u"?Vr="deno":typeof document<"u"?Vr="web":typeof navigator<"u"&&navigator.product==="ReactNative"?Vr="react-native":Vr="node";p_={"X-Client-Info":`supabase-js-${Vr}/${d_}`},h_={headers:p_},f_={schema:"public"},g_={autoRefreshToken:true,persistSession:true,detectSessionInUrl:true,flowType:"implicit"},m_={};k_=t=>t?(...e)=>t(...e):(...e)=>fetch(...e),b_=()=>Headers,v_=(t,e,r)=>{let n=k_(r),s=b_();return async(i,o)=>{var a;let l=(a=await e())!==null&&a!==void 0?a:t,c=new s(o?.headers);return c.has("apikey")||c.set("apikey",t),c.has("Authorization")||c.set("Authorization",`Bearer ${l}`),n(i,W(W({},o),{},{headers:c}))}};R_=class extends to{constructor(t){super(t);}},x_=class{constructor(t,e,r){var n,s;this.supabaseUrl=t,this.supabaseKey=e;let i=E_(t);if(!e)throw new Error("supabaseKey is required.");this.realtimeUrl=new URL("realtime/v1",i),this.realtimeUrl.protocol=this.realtimeUrl.protocol.replace("http","ws"),this.authUrl=new URL("auth/v1",i),this.storageUrl=new URL("storage/v1",i),this.functionsUrl=new URL("functions/v1",i);let o=`sb-${i.hostname.split(".")[0]}-auth-token`,a={db:f_,realtime:m_,auth:W(W({},g_),{},{storageKey:o}),global:h_},l=C_(r??{},a);if(this.storageKey=(n=l.auth.storageKey)!==null&&n!==void 0?n:"",this.headers=(s=l.global.headers)!==null&&s!==void 0?s:{},l.accessToken)this.accessToken=l.accessToken,this.auth=new Proxy({},{get:(u,d)=>{throw new Error(`@supabase/supabase-js: Supabase Client is configured with the accessToken option, accessing supabase.auth.${String(d)} is not possible`)}});else {var c;this.auth=this._initSupabaseAuthClient((c=l.auth)!==null&&c!==void 0?c:{},this.headers,l.global.fetch);}this.fetch=v_(e,this._getAccessToken.bind(this),l.global.fetch),this.realtime=this._initRealtimeClient(W({headers:this.headers,accessToken:this._getAccessToken.bind(this)},l.realtime)),this.accessToken&&Promise.resolve(this.accessToken()).then(u=>this.realtime.setAuth(u)).catch(u=>console.warn("Failed to set initial Realtime auth token:",u)),this.rest=new Vl(new URL("rest/v1",i).href,{headers:this.headers,schema:l.db.schema,fetch:this.fetch,timeout:l.db.timeout,urlLengthLimit:l.db.urlLengthLimit}),this.storage=new vc(this.storageUrl.href,this.headers,this.fetch,r?.storage),l.accessToken||this._listenForAuthEvents();}get functions(){return new Er(this.functionsUrl.href,{headers:this.headers,customFetch:this.fetch})}from(t){return this.rest.from(t)}schema(t){return this.rest.schema(t)}rpc(t,e={},r={head:false,get:false,count:void 0}){return this.rest.rpc(t,e,r)}channel(t,e={config:{}}){return this.realtime.channel(t,e)}getChannels(){return this.realtime.getChannels()}removeChannel(t){return this.realtime.removeChannel(t)}removeAllChannels(){return this.realtime.removeAllChannels()}async _getAccessToken(){var t=this,e,r;if(t.accessToken)return await t.accessToken();let{data:n}=await t.auth.getSession();return (e=(r=n.session)===null||r===void 0?void 0:r.access_token)!==null&&e!==void 0?e:t.supabaseKey}_initSupabaseAuthClient({autoRefreshToken:t,persistSession:e,detectSessionInUrl:r,storage:n,userStorage:s,storageKey:i,flowType:o,lock:a,debug:l,throwOnError:c},u,d){let p={Authorization:`Bearer ${this.supabaseKey}`,apikey:`${this.supabaseKey}`};return new R_({url:this.authUrl.href,headers:W(W({},p),u),storageKey:i,autoRefreshToken:t,persistSession:e,detectSessionInUrl:r,storage:n,userStorage:s,flowType:o,lock:a,debug:l,throwOnError:c,fetch:d,hasCustomAuthorizationHeader:Object.keys(this.headers).some(h=>h.toLowerCase()==="authorization")})}_initRealtimeClient(t){return new Gt(this.realtimeUrl.href,W(W({},t),{},{params:W(W({},{apikey:this.supabaseKey}),t?.params)}))}_listenForAuthEvents(){return this.auth.onAuthStateChange((t,e)=>{this._handleTokenChanged(t,"CLIENT",e?.access_token);})}_handleTokenChanged(t,e,r){(t==="TOKEN_REFRESHED"||t==="SIGNED_IN")&&this.changedAccessToken!==r?(this.changedAccessToken=r,this.realtime.setAuth(r)):t==="SIGNED_OUT"&&(this.realtime.setAuth(),e=="STORAGE"&&this.auth.signOut(),this.changedAccessToken=void 0);}},tr=(t,e,r)=>new x_(t,e,r);P_()&&console.warn("\u26A0\uFE0F Node.js 18 and below are deprecated and will no longer be supported in future versions of @supabase/supabase-js. Please upgrade to Node.js 20 or later. For more information, visit: https://github.com/orgs/supabase/discussions/37217");});function pe(t){let e=t.SUPABASE_URL??t.VITE_SUPABASE_URL??"https://xygyyikpgykarmqujajf.supabase.co",r=t.SUPABASE_ANON_KEY??t.VITE_SUPABASE_ANON_KEY??"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Inh5Z3l5aWtwZ3lrYXJtcXVqYWpmIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NzYyMjIyOTcsImV4cCI6MjA5MTc5ODI5N30.y_SPm1eJeofb4zYgPCogTJUPr4e7-z92BzcRzqQiK9g";if(!e||!r)throw new no("missing_supabase_config","Missing Supabase client configuration for CLI login.");return {supabaseUrl:e,supabaseAnonKey:r}}var no,Yr=R(()=>{no=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="CliAuthConfigError";}code};});async function gu(t){let e=pe(t.env),r=O_(),n=tr(e.supabaseUrl,e.supabaseAnonKey,{auth:{persistSession:true,detectSessionInUrl:false,flowType:"pkce",storage:r}}),s=await $_({timeoutMs:t.timeoutMs??300*1e3}),i=s.redirectUri;try{let{data:o,error:a}=await n.auth.signInWithOAuth({provider:"github",options:{redirectTo:i,skipBrowserRedirect:!0}});if(a||!o.url)throw new G("oauth_start_failed",a?.message??"Supabase did not return an OAuth URL.");t.onOpen?.({url:o.url,redirectUri:i}),await t.openUrl(o.url);let l=await s.waitForCode(),{data:c,error:u}=await n.auth.exchangeCodeForSession(l);if(u||!c.session?.access_token||!c.session.refresh_token)throw new G("oauth_exchange_failed",u?.message??"Supabase did not return a complete session.");let d=await A_(n,c.session,t.promptMfaCode),p=mu(e.supabaseUrl);return await ot(t.env).set(p,JSON.stringify(d)),{session:d,account:p}}finally{await s.close();}}async function A_(t,e,r){let{data:n,error:s}=await t.auth.mfa.getAuthenticatorAssuranceLevel();if(s)throw new G("mfa_check_failed",s.message);if(n.currentLevel===n.nextLevel||n.nextLevel!=="aal2")return I_(e);let{data:i,error:o}=await t.auth.mfa.listFactors();if(o)throw new G("mfa_factor_lookup_failed",o.message);let a=i.totp.find(d=>d.status==="verified");if(!a)throw new G("mfa_factor_missing","Two-factor authentication is enabled, but no verified TOTP factor was returned.");if(!r)throw new G("mfa_required","Two-factor authentication is required for this account.");let l=(await r("Authenticator code: ")).trim(),{data:c,error:u}=await t.auth.mfa.challengeAndVerify({factorId:a.id,code:l});if(u||!c)throw new G("mfa_verify_failed",u?.message??"Two-factor authentication failed.");return {access_token:c.access_token,refresh_token:c.refresh_token,expires_at:Math.floor(Date.now()/1e3)+c.expires_in,expires_in:c.expires_in,token_type:c.token_type,user:{id:c.user.id,email:c.user.email??void 0}}}function I_(t){return {access_token:t.access_token,refresh_token:t.refresh_token,expires_at:t.expires_at??Math.floor(Date.now()/1e3)+(t.expires_in??3600),expires_in:t.expires_in??void 0,token_type:t.token_type,user:{id:t.user.id,email:t.user.email??void 0}}}async function so(t){let e=pe(t.env),r=await hu(t.fetch,e,"auth-device-start",{});t.onPending?.({userCode:r.user_code,verificationUri:r.verification_uri,interval:r.interval});let n=Date.now()+r.expires_in*1e3,s=r.interval;for(;Date.now()<=n;){await t.sleep(s*1e3);let i=await hu(t.fetch,e,"auth-device-token",{device_code:r.device_code},{acceptError:true});if("access_token"in i){let o=mu(e.supabaseUrl);return await ot(t.env).set(o,JSON.stringify(i)),{session:i,account:o}}switch(i.error){case "authorization_pending":s=i.interval??s;break;case "slow_down":s=i.interval??Math.min(s+5,30);break;case "expired_token":throw new je("expired_token","The device login code expired.");case "access_denied":throw new je("access_denied","The device login request was denied.");default:throw new je(i.error,`Device login failed: ${i.error}`)}}throw new je("expired_token","The device login code expired.")}function mu(t){let e=new URL(t).hostname;return `sb-${e.endsWith(".supabase.co")?e.slice(0,-12):e}-auth-token`}async function hu(t,e,r,n,s={}){let i=await t(`${e.supabaseUrl}/functions/v1/${r}`,{method:"POST",headers:{"content-type":"application/json",apikey:e.supabaseAnonKey},body:JSON.stringify(n)}),o=await i.json().catch(()=>({}));if(!i.ok&&!s.acceptError)throw new je(o.error??"request_failed");return o}function O_(){let t=new Map;return {getItem:e=>t.get(e)??null,setItem:(e,r)=>{t.set(e,r);},removeItem:e=>{t.delete(e);}}}async function $_(t){let e=null,r=null,n=false,s=new Promise((l,c)=>{e=l,r=c;}),i=createServer((l,c)=>{N_(l,c,(u,d)=>{n||(n=true,u?r?.(u):e?.(d));});});await new Promise((l,c)=>{i.once("error",c),i.listen(0,"127.0.0.1",()=>{i.off("error",c),l();});});let o=i.address();if(!o||typeof o=="string")throw await fu(i),new G("callback_server_failed");let a=setTimeout(()=>{n||(n=true,r?.(new G("oauth_timeout","Browser login timed out.")));},t.timeoutMs);return {redirectUri:`http://127.0.0.1:${o.port}/auth/callback`,waitForCode:()=>s,close:async()=>{clearTimeout(a),await fu(i);}}}function N_(t,e,r){let n=t.headers.host??"127.0.0.1",s=new URL(t.url??"/",`http://${n}`);if(s.pathname!=="/auth/callback"){e.writeHead(404,{"content-type":"text/plain"}),e.end("Not found");return}let i=s.searchParams.get("error")??s.searchParams.get("error_description"),o=s.searchParams.get("code");if(i){e.writeHead(400,{"content-type":"text/plain"}),e.end("Pathrule login failed. You can close this window."),r(new G("oauth_denied",i),"");return}if(!o){e.writeHead(400,{"content-type":"text/plain"}),e.end("Pathrule login could not verify this browser response."),r(new G("oauth_invalid_callback"),"");return}e.writeHead(200,{"content-type":"text/html; charset=utf-8"}),e.end("<!doctype html><title>Pathrule CLI</title><p>Pathrule CLI is signed in. You can close this window.</p>"),r(null,o);}async function fu(t){t.listening&&await new Promise(e=>t.close(()=>e()));}var je,G,ds=R(()=>{ki();us();Yr();Yr();je=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="DeviceLoginError";}code},G=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="BrowserLoginError";}code};});async function B_(t){await new Promise(e=>setTimeout(e,t));}async function F_(t){try{await mkdir(dirname(t),{recursive:!0,mode:448}),await chmod(dirname(t),448).catch(()=>{});let e=await open(t,"wx",384);await e.writeFile(`${process.pid}:${Date.now()}
48
+ `,"utf8"),await e.close();let r=!1;return async()=>{r||(r=!0,await rm$1(t,{force:!0}).catch(()=>{}));}}catch(e){if(e.code==="EEXIST")return null;throw e}}async function H_(t,e){try{let{stat:r}=await import('fs/promises'),n=await r(t);Date.now()-n.mtimeMs>e&&await rm$1(t,{force:!0});}catch{}}async function yu(t,e={}){let r=e.timeoutMs??L_,n=e.staleMs??U_,s=e.lockFile??A(e.env).tokenLockFile,i=Date.now()+r;for(;Date.now()<=i;){let o=await F_(s);if(o)try{return await t()}finally{await o();}await H_(s,n),await B_(W_);}throw new io}var L_,U_,W_,io,ku=R(()=>{K();L_=15e3,U_=45e3,W_=100,io=class extends Error{constructor(){super("token_refresh_lock_timeout"),this.name="TokenRefreshLockTimeoutError";}};});async function ne(t,e=process.env){let r=it(t,0,e);try{let n=await readFile(r.userConfigFile,"utf8"),s=JSON.parse(n);if(s&&typeof s=="object"&&s.schema_version===1)return s}catch(n){if(n.code!=="ENOENT")throw n}return {schema_version:1}}async function ps(t,e,r=process.env){let n=it(t,0,r);await Cu(n.userConfigFile,{...e,schema_version:1});}async function se(t,e,r=process.env){let s={...await ne(t,r),...e,schema_version:1};return await ps(t,s,r),s}async function vu(t,e=process.env){let r=A(e),n={user_id:t,updated_at:new Date().toISOString()};await Cu(r.activeUserFile,n);}async function Su(t=process.env){await rm$1(A(t).activeUserFile,{force:true});}async function Cu(t,e){let r=dirname(t);await mkdir(r,{recursive:true,mode:M}),await chmod(r,M).catch(()=>{});let n=`${t}.tmp`;await writeFile(n,JSON.stringify(e,null,2),{encoding:"utf8",mode:O}),await chmod(n,O).catch(()=>{}),await rename(n,t);}var Ge=R(()=>{K();});function Eu(t){return t.startsWith(X_)&&t.endsWith(Z_)}async function Ce(t=process.env){let e=await Ru(t);return !e||!xu(e.session)?e:ew(e,t)}async function Ru(t=process.env){let r=await ot(t).findAll();for(let n of r)if(Eu(n.account))try{let s=JSON.parse(n.value);if(!s.access_token||!s.refresh_token||!s.user?.id)continue;return {account:n.account,session:s}}catch{}return null}function xu(t){return t.expires_at<=Math.floor(Date.now()/1e3)+Q_}async function ew(t,e){return yu(async()=>{let r=await Ru(e);if(r&&!xu(r.session))return r;let n=pe(e),s=tr(n.supabaseUrl,n.supabaseAnonKey,{auth:{persistSession:!1}}),{data:i,error:o}=await s.auth.refreshSession({refresh_token:t.session.refresh_token});if(o)throw new hs("refresh_failed",o.message);if(!i.session?.access_token||!i.session.refresh_token||!i.session.user?.id)throw new hs("refresh_failed","Supabase did not return a complete session.");let a={access_token:i.session.access_token,refresh_token:i.session.refresh_token,expires_at:i.session.expires_at??Math.floor(Date.now()/1e3)+(i.session.expires_in??3600),user:{id:i.session.user.id,email:i.session.user.email??void 0}};return await ot(e).set(t.account,JSON.stringify(a)),{account:t.account,session:a}},{env:e})}async function oo(t=process.env){let e=ot(t),r=await e.findAll(),n=new Set,s=0;for(let o of r)if(Eu(o.account)){try{let a=JSON.parse(o.value);a.user?.id&&n.add(a.user.id);}catch{}await e.delete(o.account)&&(s+=1);}let i=0;for(let o of n)await rm$1(it(o,0,t).userCacheDir,{recursive:true,force:true}),i+=1;return await Su(t),{removed_sessions:s,purged_user_caches:i}}var X_,Z_,Q_,hs,Xr=R(()=>{ku();Ge();ki();K();us();Yr();X_="sb-",Z_="-auth-token",Q_=60,hs=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="CliSessionError";}code};});async function S(t=process.env){let e=await Ce(t);if(!e)throw new rr("not_authenticated","Pathrule CLI is not signed in.");let r=pe(t);return {session:e.session,supabase:tr(r.supabaseUrl,r.supabaseAnonKey,{auth:{persistSession:false},global:{headers:{Authorization:`Bearer ${e.session.access_token}`}}})}}var rr,B=R(()=>{us();ds();Xr();rr=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="CliAuthError";}code};});var Fu={};Sf(Fu,{cliOrgWebUrl:()=>ee,currentCliOrg:()=>j,listCliOrgs:()=>we,useCliOrg:()=>ms});async function we(t){let{session:e,supabase:r}=await S(t),{data:n,error:s}=await r.from("organization_members").select("role, organization:organizations ( id, name, slug, plan, subscription_status, trial_status, trial_ends_at, seat_count, paid_extra_seats, trial_seat_cap, beta_referral_credit_cents, beta_referral_activated_count, beta_referral_founder )").eq("user_id",e.user.id);if(s)throw s;let i=await ne(e.user.id,t),o=[],a=new Set;for(let l of n??[]){let c=l.organization,u=Array.isArray(c)?c[0]:c;if(!u||a.has(u.id))continue;a.add(u.id);let d=u.subscription_status?String(u.subscription_status):null,p=u.trial_status?String(u.trial_status):null,h=u.trial_ends_at?String(u.trial_ends_at):null,f=_w(d,p,h);o.push({id:u.id,name:u.name,slug:u.slug,plan:u.plan,subscription_status:d,trial_status:p,trial_ends_at:h,seat_count:Ye(u.seat_count),paid_extra_seats:Ye(u.paid_extra_seats),trial_seat_cap:Ye(u.trial_seat_cap),beta_referral_credit_cents:Ye(u.beta_referral_credit_cents)??0,beta_referral_activated_count:Ye(u.beta_referral_activated_count)??0,beta_referral_founder:u.beta_referral_founder===true,role:l.role,current:i.current_org_id===u.id,billing:{status:d,freeze_kind:f.kind,freeze_reason:f.reason,seats:{active:Ye(u.seat_count),trial_cap:Ye(u.trial_seat_cap),paid_extra:Ye(u.paid_extra_seats)}}});}if(!i.current_org_id&&o.length===1){let l=o[0];l&&(o[0]={...l,current:true});}return o}async function j(t){let e=await we(t);return e.find(r=>r.current)??e[0]??null}async function ms(t,e){let{session:r}=await S(e),s=(await we(e)).find(i=>i.id===t||i.slug===t);if(!s)throw new Error("org_not_found");return await se(r.user.id,{current_org_id:s.id},e),await vu(r.user.id,e),{...s,current:true}}function ee(t,e,r="home"){let s=`${(e.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}/org/${encodeURIComponent(t.slug)}`;return r==="home"?s:r==="billing"?`${s}/billing`:`${s}/settings${r==="members"?"/members":""}`}function Ye(t){return typeof t=="number"&&Number.isFinite(t)?t:null}function _w(t,e,r){return t==="unpaid"||t==="past_due"?{kind:"subscription",reason:"unpaid"}:t==="canceled"?e==="expired"||r&&new Date(r).getTime()<Date.now()?{kind:"subscription",reason:"trial_expired"}:{kind:"subscription",reason:"canceled"}:{kind:"none",reason:null}}var Ee=R(()=>{Ge();B();});Ef(za());function Ja(t,e,r){return `${e}/.claude.json`}var kr="pathrule";function ti(t){if(t==null)return {};if(typeof t!="object"||Array.isArray(t))throw new Error("Claude config root must be a JSON object");let e=t;if(e.mcpServers!==void 0&&(typeof e.mcpServers!="object"||e.mcpServers===null||Array.isArray(e.mcpServers)))throw new Error("Claude config `mcpServers` must be an object");return e}function Ka(t,e){let r=ti(t),n={...r.mcpServers??{}},s=!(kr in n);return n[kr]=e,{config:{...r,mcpServers:n},wasNew:s}}function Va(t){let e=ti(t);if(!e.mcpServers||!(kr in e.mcpServers))return {config:e,wasPresent:false};let{[kr]:r,...n}=e.mcpServers;return {config:{...e,mcpServers:n},wasPresent:true}}function Ga(t){try{return ti(t).mcpServers?.[kr]??null}catch{return null}}function F(t){return t.code==="PGRST116"?{code:"not_found",message:t.message}:t.code==="42501"?{code:"permission_denied",message:t.message}:{code:"upstream_error",message:t.message}}async function Mt(t,e){let{data:r,error:n}=await t.rpc("pathrule_check_content_dedup",{p_workspace_id:e.workspaceId,p_kind:e.kind,p_node_id:e.kind==="memory"?e.nodeId??null:null,p_candidate:e.candidate,p_threshold:e.threshold??.65,p_max_similar:e.maxSimilar??5,p_exclude_id:e.excludeId??null});if(n)return {ok:false,error:n.message};let s=r??{duplicate:null,similar:[]};return {ok:true,data:{duplicate:s.duplicate,similar:(s.similar??[]).map(i=>({id:i.id,title:i.title,similarity:typeof i.similarity=="string"?Number(i.similarity):i.similarity}))}}}function Ya(t){return t.code!=="23505"?false:!!t.message?.includes("skills_workspace_slug_unique")}async function ri(t,e,r){let{data:n,error:s}=await t.from("nodes").select("id, workspace_id, parent_id, name, type, relative_path").eq("workspace_id",e).eq("relative_path","/").is("parent_id",null).maybeSingle();if(s)return {error:s.message};if(n)return n;let{data:i,error:o}=await t.from("nodes").insert({workspace_id:e,parent_id:null,name:r,type:"folder",relative_path:"/",order_index:0,status:"active"}).select("id, workspace_id, parent_id, name, type, relative_path").single();if(o||!i){if(o?.code==="23505"){let{data:a}=await t.from("nodes").select("id, workspace_id, parent_id, name, type, relative_path").eq("workspace_id",e).eq("relative_path","/").is("parent_id",null).maybeSingle();if(a)return a}return {error:o?.message??"Root node insert failed"}}return i}function Xa(t){let e=t.trim();if(e===""||e==="/")return "/";let n=(e.startsWith("/")?e:"/"+e).replace(/\/+/g,"/");return n==="/"?"/":n.replace(/\/$/,"")}function xf(t,e){return (t==="/"?"":t)+"/"+e.trim()}function Pf(t){let e=t.split("/").filter(n=>n.length>0),r=e[e.length-1]??"";return /\.[A-Za-z0-9]{1,8}$/.test(r)?"file":"folder"}async function Lt(t,e,r){let{data:n,error:s}=await t.from("nodes").select("id, workspace_id, parent_id, name, type, relative_path").eq("workspace_id",e).eq("relative_path",r).maybeSingle();return s?{error:s.message}:n??null}async function Tf(t,e,r,n){let s=Xa(r);if(s==="/"){let d=await Lt(t,e,"/");return d&&!("error"in d)?d:{error:"Workspace root node missing \u2014 call ensureWorkspaceRootNode first."}}let i=await Lt(t,e,s);if(i&&!("error"in i)||i&&"error"in i)return i;let o=await Lt(t,e,"/");if(!o)return {error:"Workspace root node missing \u2014 call ensureWorkspaceRootNode first."};if("error"in o)return o;let a=s.split("/").filter(d=>d.length>0),l=Pf(s),c=o,u="";for(let d=0;d<a.length;d+=1){let p=a[d];u+="/"+p;let f=d===a.length-1?l:"folder",m=await Lt(t,e,u);if(m&&"error"in m)return m;if(m){c=m;continue}let{count:_}=await t.from("nodes").select("*",{count:"exact",head:true}).eq("workspace_id",e).eq("parent_id",c.id),{data:b,error:w}=await t.from("nodes").insert({workspace_id:e,parent_id:c.id,name:p,type:f,relative_path:xf(c.relative_path,p),order_index:_??0,status:"active"}).select("id, workspace_id, parent_id, name, type, relative_path").single();if(w||!b){if(w?.code==="23505"){let k=await Lt(t,e,u);if(k&&!("error"in k)){c=k;continue}}return {error:w?.message??`Insert failed at ${u}`}}c=b;}return c}async function Ut(t,e,r,n){let s=Xa(r),i=await Lt(t,e,"/");if(i&&"error"in i)return i;if(!i){let{data:o,error:a}=await t.from("workspaces").select("name").eq("id",e).maybeSingle();if(a)return {error:a.message};let l=o?.name??"Workspace",c=await ri(t,e,l);if("error"in c)return c}return Tf(t,e,s)}function Za(t){return {id:t.id,workspaceId:t.workspace_id,nodeId:t.node_id,title:t.title,content:t.content,source:t.source,semanticTags:t.semantic_tags??[],versionId:t.version_id,versionNumber:t.version_number,createdBy:t.created_by,lastEditedBy:t.last_edited_by,lastEditedAt:t.last_edited_at,createdAt:t.created_at,updatedAt:t.updated_at}}function Af(t){return t.length===0?null:{code:"similar_titles",message:`Found ${t.length} memory/rule(s) with a similar title.`,detail:{similar:t}}}async function Qa(t,e){if(!t.workspaceId)return {ok:false,error:{code:"invalid_args",message:"ctx.workspaceId is required for path-based writes"}};let r=await Ut(t.supabase,t.workspaceId,e.node_path);if("error"in r)return {ok:false,error:{code:"upstream_error",message:r.error}};let n=e.title.trim(),s=await Mt(t.supabase,{workspaceId:r.workspace_id,kind:"memory",nodeId:r.id,candidate:n});if(s.ok&&s.data.duplicate&&!e.allow_duplicate)return {ok:false,error:{code:"duplicate",message:`A memory titled "${s.data.duplicate.title}" already exists at ${e.node_path}. Use update_memory, pick a different title, or pass allow_duplicate: true to insert anyway.`,detail:{existing_id:s.data.duplicate.id,existing_title:s.data.duplicate.title,similar:s.ok?s.data.similar:[]}}};let{data:i,error:o}=await t.supabase.from("memories").insert({workspace_id:r.workspace_id,node_id:r.id,title:n,content:e.content,source:e.source??"claude",created_by:t.userId,last_edited_by:t.userId}).select("*").single();if(o||!i)return {ok:false,error:F(o??{message:"insert failed"})};let a=s.ok?Af(s.data.similar):null;return a?{ok:true,data:Za(i),warnings:[a]}:{ok:true,data:Za(i)}}function If(t){return t.length===0?null:{code:"similar_titles",message:`Found ${t.length} rule(s) with a similar name.`,detail:{similar:t}}}function Of(t){return {id:t.id,workspaceId:t.workspace_id,name:t.name,content:t.content,scopeType:t.scope_type,priority:t.priority,semanticTags:t.semantic_tags??[],versionId:t.version_id,versionNumber:t.version_number,createdBy:t.created_by,lastEditedBy:t.last_edited_by,lastEditedAt:t.last_edited_at,createdAt:t.created_at,updatedAt:t.updated_at}}async function el(t,e){if(!t.workspaceId)return {ok:false,error:{code:"invalid_args",message:"ctx.workspaceId is required for path-based writes"}};let r=await Ut(t.supabase,t.workspaceId,e.node_path);if("error"in r)return {ok:false,error:{code:"upstream_error",message:r.error}};let n=e.name.trim(),s=await Mt(t.supabase,{workspaceId:r.workspace_id,kind:"rule",candidate:n});if(s.ok&&s.data.duplicate&&!e.allow_duplicate)return {ok:false,error:{code:"duplicate",message:`A rule named "${s.data.duplicate.title}" already exists in this workspace. Use update_rule, pick a different name, or pass allow_duplicate: true.`,detail:{existing_id:s.data.duplicate.id,existing_name:s.data.duplicate.title,similar:s.ok?s.data.similar:[]}}};let{data:i,error:o}=await t.supabase.from("rules").insert({workspace_id:r.workspace_id,name:n,content:e.content,scope_type:e.scope_type,priority:e.priority,created_by:t.userId,last_edited_by:t.userId}).select("*").single();if(o||!i)return {ok:false,error:F(o??{message:"insert failed"})};let a=Of(i),{error:l}=await t.supabase.from("node_rules").insert({node_id:r.id,rule_id:a.id});if(l)return await t.supabase.from("rules").delete().eq("id",a.id),{ok:false,error:{code:"upstream_error",message:`attach failed: ${l.message}`}};let c=s.ok?If(s.data.similar):null;return c?{ok:true,data:a,warnings:[c]}:{ok:true,data:a}}function $f(t){return {id:t.id,workspaceId:t.workspace_id,name:t.name,description:t.description,content:t.content,source:t.source,githubUrl:t.github_url,version:t.version,tags:t.tags,semanticTags:t.semantic_tags??[],versionId:t.version_id,versionNumber:t.version_number,createdBy:t.created_by,lastEditedBy:t.last_edited_by,lastEditedAt:t.last_edited_at,createdAt:t.created_at,updatedAt:t.updated_at,contentFetchedAt:t.content_fetched_at}}async function tl(t,e){if(!t.workspaceId)return {ok:false,error:{code:"invalid_args",message:"ctx.workspaceId is required for path-based writes"}};let r=await Ut(t.supabase,t.workspaceId,e.node_path);if("error"in r)return {ok:false,error:{code:"upstream_error",message:r.error}};let n=e.name.trim(),s=await Mt(t.supabase,{workspaceId:r.workspace_id,kind:"skill",candidate:n,maxSimilar:0});if(s.ok&&s.data.duplicate)return {ok:false,error:{code:"duplicate",message:`A skill with this name already exists in this workspace: "${s.data.duplicate.title}". Use update_skill or pick a different name.`,detail:{existing_id:s.data.duplicate.id,existing_name:s.data.duplicate.title}}};let i=e.source??"manual",{data:o,error:a}=await t.supabase.from("skills").insert({workspace_id:r.workspace_id,name:n,description:e.description,content:e.content,source:i,github_url:e.github_url??null,tags:e.tags??[],created_by:t.userId,last_edited_by:t.userId,content_fetched_at:i==="github_ref"?new Date().toISOString():null}).select("*").single();if(a||!o)return Ya(a??{})?{ok:false,error:{code:"duplicate",message:"A skill with this name already exists in this workspace. Use update_skill or pick a different name."}}:{ok:false,error:F(a??{message:"insert failed"})};let l=$f(o),{error:c}=await t.supabase.from("node_skills").insert({node_id:r.id,skill_id:l.id,is_active:true});return c?(await t.supabase.from("skills").delete().eq("id",l.id),{ok:false,error:{code:"upstream_error",message:`attach failed: ${c.message}`}}):{ok:true,data:l}}var Nf=/^[A-Za-z0-9_-]+/,Df=/[\s([{'"`]/;function si(t){return t.trim().toLowerCase()}function rl(t){let e=Mf(t),r=[];for(let n=0;n<e.length-2;n+=1){if(e[n]!==":"||e[n+1]!==":")continue;let s=n===0?"":e[n-1]??"";if(s&&!Df.test(s))continue;let i=e.slice(n+2).match(Nf);if(!i?.[0])continue;let o=i[0];r.push({raw:o,name:si(o),start:n,end:n+2+o.length}),n+=1+o.length;}return jf(r)}function jf(t){let e=new Set,r=[];for(let n of t)e.has(n.name)||(e.add(n.name),r.push(n));return r}function Mf(t){let e="",r=0,n=false,s=false;for(;r<t.length;){if(t.startsWith("```",r)){n=!n,e+=" ",r+=3;continue}let i=t[r]??"";if(!n&&i==="`"){s=!s,e+=" ",r+=1;continue}e+=n||s?i===`
49
49
  `?`
50
- `:" ":s,r+=1;}return e}var Xa=[{tag:"frontend",patterns:[/\/packages\/app\b/i,/\b(frontend|front-end|renderer|react|tsx|jsx|component|components|screen|page|view)\b/i]},{tag:"backend",patterns:[/\/packages\/mcp-server\b/i,/\b(backend|server|service|api|ipc|worker|queue)\b/i]},{tag:"database",patterns:[/\b(database|postgres|postgrest|db|sql|rpc|rls|schema)\b/i,/\/supabase\b/i]},{tag:"infra",patterns:[/\b(infra|deploy|deployment|cloudflare|r2|notarize|notarized|updater)\b/i]},{tag:"test",patterns:[/\b(test|tests|vitest|playwright|typecheck|lint|eslint|smoke)\b/i]},{tag:"docs",patterns:[/\b(docs|readme|claude\.md|agents\.md|llms\.txt|documentation)\b/i]},{tag:"config",patterns:[/\b(config|env|toml|yaml|yml|json|settings|preferences)\b/i]},{tag:"ui",patterns:[/\b(ui|ux|modal|popover|dialog|button|badge|tab|tree|layout|design|onboarding)\b/i,/\b(tasarim|tasarım|ekran|sayfa|gorunum|görünüm|yerlesim|yerleşim|rozet)\b/i]},{tag:"design-system",patterns:[/\b(design system|design-system|tokens?|theme|tailwind|shadcn|visual language)\b/i]},{tag:"i18n",patterns:[/\b(i18n|translation|translations|locale|localization|hardcoded)\b/i]},{tag:"electron",patterns:[/\b(electron|main process|renderer|tray|native menu)\b/i]},{tag:"mcp",patterns:[/\b(mcp|model context protocol|get_context|read_memory|tool surface)\b/i]},{tag:"hook",patterns:[/\b(hook|hooks|pretooluse|posttooluse|userpromptsubmit|sessionstart)\b/i]},{tag:"router",patterns:[/\b(router|routing|route|deterministic_route|ai-route)\b/i]},{tag:"performance",patterns:[/\b(performance|latency|timeout|telemetry|cache|optimize|hiz|hız)\b/i]},{tag:"supabase",patterns:[/\b(supabase|edge function|edge-function)\b/i,/\/supabase\b/i]},{tag:"edge-function",patterns:[/\b(edge function|edge-function|functions\/[a-z0-9_-]+)\b/i]},{tag:"rls",patterns:[/\b(rls|row level security|policy|policies)\b/i]},{tag:"auth",patterns:[/\b(auth|jwt|session|login|keychain|oauth)\b/i]},{tag:"billing",patterns:[/\b(billing|subscription|checkout|invoice|payment|usage limit)\b/i]},{tag:"stripe",patterns:[/\b(stripe|webhook|checkout session|paymentintent)\b/i]},{tag:"migration",patterns:[/\b(migration|migrations|schema change|alter table)\b/i]},{tag:"security",patterns:[/\b(security|secret|service role|rls|jwt|permission|access check)\b/i]},{tag:"release",patterns:[/\b(release|ship|publish|version bump|notarized|signed)\b/i]},{tag:"tree",patterns:[/\b(tree|collapse|expand|node tree|treetoolbar)\b/i]},{tag:"suggestions",patterns:[/\b(suggestion|suggestions|suggestionstab|refresh suggestion)\b/i]},{tag:"modal",patterns:[/\b(modal|dialog|popover|sheet)\b/i]},{tag:"skill-package",patterns:[/\b(skill package|skill-package|skillpackagetree|skillpackageviewer)\b/i]},{tag:"workspace",patterns:[/\b(workspace|project root|repo root|node path|root path)\b/i]},{tag:"activity",patterns:[/\b(activity|activities|recent activity|log_activity|activity log)\b/i]},{tag:"cache",patterns:[/\b(cache|cached|etag|warm|cold|ttl)\b/i]}],Sh=new Set(Xa.map(t=>t.tag));function Ch(t){let e=t.trim().toLowerCase().replace(/[_\s]+/g,"-").replace(/[^a-z0-9-]/g,"");return Sh.has(e)?e:null}function Ya(t){let e=`${t.path??""} ${t.text??""}`,r=new Set;for(let n of t.existingTags??[]){let i=Ch(n);i&&r.add(i);}for(let n of Xa)n.patterns.some(i=>i.test(e))&&r.add(n.tag);return Array.from(r).slice(0,t.limit??8)}function rt(t,e){let r=Ya({existingTags:t?Array.from(t):[],limit:e.limit});return r.length>0?r:Ya(e)}function Eh(t){let e=Array.isArray(t.skill_files)?t.skill_files:t.skill_files?[t.skill_files]:[];return (e.find(n=>n.path==="SKILL.md")??e.find(n=>n.role==="primary"))?.content??t.content??""}async function Ut(t,e){let[r,n,i,s]=await Promise.all([t.supabase.from("nodes").select("id, relative_path").eq("workspace_id",e.workspace_id).eq("status","active"),t.supabase.from("memories").select("id, title, node_id, semantic_tags").eq("workspace_id",e.workspace_id).eq("status","active").order("created_at",{ascending:true}),t.supabase.from("node_rules").select("node_id, rules(id, name, content, scope_type, priority, semantic_tags)"),t.supabase.from("node_skills").select("node_id, is_active, skills(id, name, description, source, tags, semantic_tags)").eq("is_active",true)]);if(r.error)return {ok:false,error:B(r.error)};if(n.error)return {ok:false,error:B(n.error)};if(i.error)return {ok:false,error:B(i.error)};if(s.error)return {ok:false,error:B(s.error)};let o=new Map;for(let u of r.data??[])o.set(u.id,u.relative_path);let a=new Map;function l(u){let d=a.get(u);return d||(d={memories:[],rules:[],skills:[]},a.set(u,d)),d}for(let u of n.data??[])l(u.node_id).memories.push({id:u.id,title:u.title,semantic_tags:rt(u.semantic_tags,{text:u.title,path:o.get(u.node_id)})});for(let u of i.data??[]){let d=u.rules,p=Array.isArray(d)?d[0]:d;if(!p)continue;let f=p,h=u.node_id;l(h).rules.push({id:f.id,name:f.name,scope_type:f.scope_type,priority:f.priority,semantic_tags:rt(f.semantic_tags,{text:`${f.name} ${f.content??""}`,path:o.get(h)})});}for(let u of s.data??[]){let d=u.skills,p=Array.isArray(d)?d[0]:d;if(!p)continue;let f=p,h=u.node_id;l(h).skills.push({id:f.id,name:f.name,source:f.source,semantic_tags:rt(f.semantic_tags,{text:`${f.name} ${f.description??""}`,path:o.get(h),existingTags:f.tags})});}let c=[];for(let[u,d]of a.entries()){if(e.exclude_node_id&&u===e.exclude_node_id)continue;let p=o.get(u);p&&(d.memories.length===0&&d.rules.length===0&&d.skills.length===0||c.push({node_id:u,relative_path:p,memories:d.memories,rules:d.rules,skills:d.skills}));}return c.sort((u,d)=>u.relative_path.localeCompare(d.relative_path)),{ok:true,data:c}}function Rh(t,e=160){let r=t.replace(/`[^`]*`/g,"").replace(/#+\s*/g,"").replace(/[*_~]+/g,"").trim(),n=r.indexOf("."),i=n>0&&n<e?r.slice(0,n+1):r.slice(0,e);return i.length<r.length?`${i}\u2026`:i}async function xh(t,e,r){let n=Ga(r??"");if(n.length===0)return {invokedSkills:[],missingInvokedSkills:[]};let{data:i,error:s}=await t.from("skills").select("id, name, description, content, source, github_url, skill_files(path, content, role)").eq("workspace_id",e).is("deleted_at",null);if(s)throw new Error(`skill invocation lookup failed: ${s.message}`);let o=new Map;for(let c of i??[]){let u=c;if(!u.name)continue;let d=ts(u.name);o.set(d,[...o.get(d)??[],c]);}let a=[],l=[];for(let c of n){let u=o.get(c.name)??[];if(u.length===0){l.push({name:c.name,reason:"not_found"});continue}if(u.length>1){l.push({name:c.name,reason:"duplicate"});continue}let d=u[0];a.push({id:d.id,name:d.name,description:d.description,content:Eh(d),source:d.source,githubUrl:d.github_url,nodeRelativePath:null});}return {invokedSkills:a,missingInvokedSkills:l}}async function vn(t,e){let r=await xh(t.supabase,e.workspace_id,e.user_intent),{data:n,error:i}=await t.supabase.from("nodes").select("id, name, relative_path").eq("workspace_id",e.workspace_id).eq("relative_path",e.relative_path).maybeSingle();if(i)return {ok:false,error:B(i)};if(!n){let f=await Ut(t,{workspace_id:e.workspace_id});return {ok:true,data:{resolved_workspace_path:e.relative_path||"/",node:null,memories:[],rules:[],skills:[],workspace_overview:f.ok?f.data:[],invoked_skills:r.invokedSkills.length>0?r.invokedSkills:void 0,missing_invoked_skills:r.missingInvokedSkills.length>0?r.missingInvokedSkills:void 0}}}let s=n.id,[o,a,l,c]=await Promise.all([t.supabase.from("memories").select("id, title, content, semantic_tags").eq("node_id",s).eq("status","active").order("created_at",{ascending:true}),t.supabase.from("node_rules").select("rules(id, name, content, scope_type, priority, semantic_tags)").eq("node_id",s),t.supabase.from("node_skills").select("skills(id, name, description, source, tags, semantic_tags)").eq("node_id",s).eq("is_active",true),Ut(t,{workspace_id:e.workspace_id,exclude_node_id:s})]);if(o.error)return {ok:false,error:B(o.error)};if(a.error)return {ok:false,error:B(a.error)};if(l.error)return {ok:false,error:B(l.error)};let u=(o.data??[]).map(f=>({id:f.id,title:f.title,preview:Rh(f.content??""),semantic_tags:rt(f.semantic_tags,{text:`${f.title} ${(f.content??"").slice(0,1e3)}`,path:n.relative_path})})),d=[];for(let f of a.data??[]){let h=f.rules,m=Array.isArray(h)?h[0]:h;if(!m)continue;let _=m;d.push({id:_.id,name:_.name,scope_type:_.scope_type,priority:_.priority,semantic_tags:rt(_.semantic_tags,{text:`${_.name} ${_.content??""}`,path:n.relative_path})});}let p=[];for(let f of l.data??[]){let h=f.skills,m=Array.isArray(h)?h[0]:h;if(!m)continue;let _=m;p.push({id:_.id,name:_.name,description:_.description,source:_.source,semantic_tags:rt(_.semantic_tags,{text:`${_.name} ${_.description??""}`,path:n.relative_path,existingTags:_.tags})});}return {ok:true,data:{resolved_workspace_path:e.relative_path||n.relative_path,node:{id:s,name:n.name,relative_path:n.relative_path},memories:u,rules:d,skills:p,workspace_overview:c.ok?c.data:[],invoked_skills:r.invokedSkills.length>0?r.invokedSkills:void 0,missing_invoked_skills:r.missingInvokedSkills.length>0?r.missingInvokedSkills:void 0}}}async function Za(t){if(t.recipientUserIds.length===0)return {ok:true,skipped:"empty_recipients"};let{error:e}=await t.supabase.rpc("emit_notification",{p_event_type:t.eventType,p_workspace_id:t.workspaceId,p_actor_user_id:t.actorUserId,p_payload:t.payload,p_recipient_user_ids:t.recipientUserIds});return e?(console.warn(`[notifications:emit] ${t.eventType} failed:`,e.message),{ok:false,error:e.message}):{ok:true}}async function Qa(t,e,r=null){let{data:n}=await t.from("workspaces").select("organization_id").eq("id",e).maybeSingle();if(!n)return [];let{data:i,error:s}=await t.from("organization_members").select("user_id, role").eq("organization_id",n.organization_id).in("role",["owner","admin"]);if(s||!i)return [];let o=new Set;for(let a of i)r!=null&&a.user_id===r||o.add(a.user_id);return Array.from(o)}async function Ph(t,e,r){let n=e==="memory"?"memories":"rules",i=e==="memory"?"title":"name",{data:s}=await t.from(n).select(`created_by, ${i}`).eq("id",r).maybeSingle();return s?{creatorId:s.created_by??null,title:s[i]??""}:{creatorId:null,title:""}}function rs(t){return {id:t.id,workspaceId:t.workspace_id,suggestionId:t.suggestion_id,subjectType:t.subject_type,subjectId:t.subject_id,formulaId:t.formula_id,status:t.status,requestedByUserId:t.requested_by_user_id,claimedByAi:t.claimed_by_ai,claimedAt:t.claimed_at,resolvedAt:t.resolved_at,resolvedNote:t.resolved_note,createdAt:t.created_at,updatedAt:t.updated_at,brief:t.brief??{}}}async function el(t,e){let r=e.include_in_progress?["pending","in_progress"]:["pending"],{data:n,error:i}=await t.supabase.from("suggestion_refreshes").select("id, subject_type, subject_id, formula_id, status, created_at, brief").eq("workspace_id",e.workspace_id).in("status",r).order("created_at",{ascending:true});return i?{ok:false,error:B(i)}:{ok:true,data:(n??[]).map(a=>{let l=a.brief??{};return {id:a.id,subjectType:a.subject_type,subjectId:a.subject_id,subjectTitle:l.subject?.title??"(unknown)",nodePath:l.subject?.nodePath??"/",formulaId:a.formula_id,humanReason:l.signal?.humanReason??a.formula_id,status:a.status,createdAt:a.created_at,hasProposedPatch:!!l.proposedPatch?.newBody}})}}async function tl(t,e){let{data:r,error:n}=await t.supabase.from("suggestion_refreshes").select("*").eq("id",e.refresh_id).maybeSingle();if(n)return {ok:false,error:B(n)};if(!r)return {ok:false,error:{code:"not_found",message:`Refresh ${e.refresh_id} not found`}};let i=rs(r);if(i.status==="pending"){let s=new Date().toISOString(),{data:o,error:a}=await t.supabase.from("suggestion_refreshes").update({status:"in_progress",claimed_at:s,claimed_by_ai:e.claimed_by??null}).eq("id",e.refresh_id).eq("status","pending").select("*").maybeSingle();if(a)return {ok:false,error:B(a)};if(o)return {ok:true,data:rs(o)}}return {ok:true,data:i}}async function rl(t,e){let r=new Date().toISOString(),{data:n,error:i}=await t.supabase.from("suggestion_refreshes").update({status:e.status,resolved_at:r,resolved_note:e.note??null,...e.claimed_by?{claimed_by_ai:e.claimed_by}:{}}).eq("id",e.refresh_id).select("*").maybeSingle();if(i)return {ok:false,error:B(i)};if(!n)return {ok:false,error:{code:"not_found",message:`Refresh ${e.refresh_id} not found`}};let s=n;s.suggestion_id&&await t.supabase.from("suggestions").update({resolved_at:r}).eq("id",s.suggestion_id).is("resolved_at",null);let o=e.status==="applied"?30:365,{data:a}=await t.supabase.auth.getUser(),l=a?.user?.id;if(l&&await t.supabase.from("suggestion_dismissals").insert({workspace_id:s.workspace_id,subject_type:s.subject_type,subject_id:s.subject_id,formula_id:s.formula_id,action:"keep",dismiss_count:1,next_recheck_at:new Date(Date.now()+o*864e5).toISOString(),user_id:l}),e.status==="applied"||e.status==="rejected")try{let c=e.status==="applied"?"suggestion.applied":"suggestion.rejected",u=s.subject_type,d=s.subject_id,p=s.workspace_id,{creatorId:f,title:h}=await Ph(t.supabase,u,d),m=await Qa(t.supabase,p,t.userId),_=new Set;f&&f!==t.userId&&_.add(f);for(let y of m)_.add(y);let b={subject_type:u,subject_title:h};e.status==="rejected"&&e.note&&(b.reason=e.note);let w=await Za({supabase:t.supabase,eventType:c,workspaceId:p,actorUserId:t.userId,payload:b,recipientUserIds:Array.from(_)});w.ok||console.warn(`[notifications:emit] suggestion resolution failed: ${w.error}`);}catch(c){console.warn("[notifications:emit] suggestion resolution threw:",c);}return {ok:true,data:rs(s)}}var Th="<!-- managed by Pathrule \u2014 do not edit this file manually. Cloud state is authoritative. Local edits are overwritten. -->",Ah=["# Pathrule Workspace","","Pathrule is this workspace's shared memory, rule, and skill layer for AI agents.","Use it as a smart reminder system, not a full-context dump.","","## Context Policy","","- Pathrule is the first knowledge layer for this workspace. Use hook context first: metadata, relevant rule titles, path reminders, and filename/skill matches.","- `::skill-name` is a hard gate: use the exact injected skill; if missing, stop and resolve it through Pathrule/MCP before file edits.",'- Do not reflexively call `pathrule_get_context` before every small known-path code task. For discovery, inventory, architecture, recent activity, or "list/show/find/where/which" prompts (Turkish: listele, g\xF6ster, bul, nerede, hangi, neler), call it before any grep/read/fallback when hook context is missing, ambiguous, or stale.',"- Hook silence on a topic does not mean Pathrule has no relevant memory/rule. For discovery/inventory/architecture questions, call `pathrule_get_context` first; fall back to files, git, or general knowledge only after Pathrule returns nothing relevant.","- When calling `pathrule_get_context`, pass `cwd`, `user_intent`, and `omit_protocol: true`; this file already contains the protocol.","- Read full bodies with `pathrule_read_memory`, `pathrule_read_rule`, or `pathrule_read_skill` when a surfaced title/id is relevant.","- Treat existing local edits as protected user/team work: inspect overlaps, never revert unrelated changes, and keep edits scoped.","- Obey every surfaced rule. If a user request conflicts with a Pathrule rule, warn before taking action.","","## Writes","","- Pathrule cloud is the source of truth. Do not create local memory files such as `MEMORY.md` or `~/.claude/memory/`.","- Use path-first writes for lasting project knowledge: `pathrule_write_memory`, `pathrule_write_rule`, and `pathrule_write_skill` take the most specific workspace-relative `node_path`.","- Do not edit materialized local Pathrule files as the source of truth. This includes `.codex/skills/**/SKILL.md`, `.claude/skills/**`, rendered companion files, and synced skill/memory/rule files. Read only for orientation; create/update cloud records with the Pathrule MCP write/update tools.","- After any file-modifying response, call `pathrule_log_activity` once with domain, action, scope, subjects, files_touched, and a concise task_summary.",""].join(`
51
- `);function nl(t){let e=[Th,"",Ah].join(`
50
+ `:" ":i,r+=1;}return e}var sl=[{tag:"frontend",patterns:[/\/packages\/app\b/i,/\b(frontend|front-end|renderer|react|tsx|jsx|component|components|screen|page|view)\b/i]},{tag:"backend",patterns:[/\/packages\/mcp-server\b/i,/\b(backend|server|service|api|ipc|worker|queue)\b/i]},{tag:"database",patterns:[/\b(database|postgres|postgrest|db|sql|rpc|rls|schema)\b/i,/\/supabase\b/i]},{tag:"infra",patterns:[/\b(infra|deploy|deployment|cloudflare|r2|notarize|notarized|updater)\b/i]},{tag:"test",patterns:[/\b(test|tests|vitest|playwright|typecheck|lint|eslint|smoke)\b/i]},{tag:"docs",patterns:[/\b(docs|readme|claude\.md|agents\.md|llms\.txt|documentation)\b/i]},{tag:"config",patterns:[/\b(config|env|toml|yaml|yml|json|settings|preferences)\b/i]},{tag:"ui",patterns:[/\b(ui|ux|modal|popover|dialog|button|badge|tab|tree|layout|design|onboarding)\b/i,/\b(tasarim|tasarım|ekran|sayfa|gorunum|görünüm|yerlesim|yerleşim|rozet)\b/i]},{tag:"design-system",patterns:[/\b(design system|design-system|tokens?|theme|tailwind|shadcn|visual language)\b/i]},{tag:"i18n",patterns:[/\b(i18n|translation|translations|locale|localization|hardcoded)\b/i]},{tag:"electron",patterns:[/\b(electron|main process|renderer|tray|native menu)\b/i]},{tag:"mcp",patterns:[/\b(mcp|model context protocol|get_context|read_memory|tool surface)\b/i]},{tag:"hook",patterns:[/\b(hook|hooks|pretooluse|posttooluse|userpromptsubmit|sessionstart)\b/i]},{tag:"router",patterns:[/\b(router|routing|route|deterministic_route|ai-route)\b/i]},{tag:"performance",patterns:[/\b(performance|latency|timeout|telemetry|cache|optimize|hiz|hız)\b/i]},{tag:"supabase",patterns:[/\b(supabase|edge function|edge-function)\b/i,/\/supabase\b/i]},{tag:"edge-function",patterns:[/\b(edge function|edge-function|functions\/[a-z0-9_-]+)\b/i]},{tag:"rls",patterns:[/\b(rls|row level security|policy|policies)\b/i]},{tag:"auth",patterns:[/\b(auth|jwt|session|login|keychain|oauth)\b/i]},{tag:"billing",patterns:[/\b(billing|subscription|checkout|invoice|payment|usage limit)\b/i]},{tag:"stripe",patterns:[/\b(stripe|webhook|checkout session|paymentintent)\b/i]},{tag:"migration",patterns:[/\b(migration|migrations|schema change|alter table)\b/i]},{tag:"security",patterns:[/\b(security|secret|service role|rls|jwt|permission|access check)\b/i]},{tag:"release",patterns:[/\b(release|ship|publish|version bump|notarized|signed)\b/i]},{tag:"tree",patterns:[/\b(tree|collapse|expand|node tree|treetoolbar)\b/i]},{tag:"suggestions",patterns:[/\b(suggestion|suggestions|suggestionstab|refresh suggestion)\b/i]},{tag:"modal",patterns:[/\b(modal|dialog|popover|sheet)\b/i]},{tag:"skill-package",patterns:[/\b(skill package|skill-package|skillpackagetree|skillpackageviewer)\b/i]},{tag:"workspace",patterns:[/\b(workspace|project root|repo root|node path|root path)\b/i]},{tag:"activity",patterns:[/\b(activity|activities|recent activity|log_activity|activity log)\b/i]},{tag:"cache",patterns:[/\b(cache|cached|etag|warm|cold|ttl)\b/i]}],Lf=new Set(sl.map(t=>t.tag));function Uf(t){let e=t.trim().toLowerCase().replace(/[_\s]+/g,"-").replace(/[^a-z0-9-]/g,"");return Lf.has(e)?e:null}function nl(t){let e=`${t.path??""} ${t.text??""}`,r=new Set;for(let n of t.existingTags??[]){let s=Uf(n);s&&r.add(s);}for(let n of sl)n.patterns.some(s=>s.test(e))&&r.add(n.tag);return Array.from(r).slice(0,t.limit??8)}function nt(t,e){let r=nl({existingTags:t?Array.from(t):[],limit:e.limit});return r.length>0?r:nl(e)}function Wf(t){let e=Array.isArray(t.skill_files)?t.skill_files:t.skill_files?[t.skill_files]:[];return (e.find(n=>n.path==="SKILL.md")??e.find(n=>n.role==="primary"))?.content??t.content??""}async function Wt(t,e){let[r,n,s,i]=await Promise.all([t.supabase.from("nodes").select("id, relative_path").eq("workspace_id",e.workspace_id).eq("status","active"),t.supabase.from("memories").select("id, title, node_id, semantic_tags").eq("workspace_id",e.workspace_id).eq("status","active").order("created_at",{ascending:true}),t.supabase.from("node_rules").select("node_id, rules(id, name, content, scope_type, priority, semantic_tags)"),t.supabase.from("node_skills").select("node_id, is_active, skills(id, name, description, source, tags, semantic_tags)").eq("is_active",true)]);if(r.error)return {ok:false,error:F(r.error)};if(n.error)return {ok:false,error:F(n.error)};if(s.error)return {ok:false,error:F(s.error)};if(i.error)return {ok:false,error:F(i.error)};let o=new Map;for(let u of r.data??[])o.set(u.id,u.relative_path);let a=new Map;function l(u){let d=a.get(u);return d||(d={memories:[],rules:[],skills:[]},a.set(u,d)),d}for(let u of n.data??[])l(u.node_id).memories.push({id:u.id,title:u.title,semantic_tags:nt(u.semantic_tags,{text:u.title,path:o.get(u.node_id)})});for(let u of s.data??[]){let d=u.rules,p=Array.isArray(d)?d[0]:d;if(!p)continue;let h=p,f=u.node_id;l(f).rules.push({id:h.id,name:h.name,scope_type:h.scope_type,priority:h.priority,semantic_tags:nt(h.semantic_tags,{text:`${h.name} ${h.content??""}`,path:o.get(f)})});}for(let u of i.data??[]){let d=u.skills,p=Array.isArray(d)?d[0]:d;if(!p)continue;let h=p,f=u.node_id;l(f).skills.push({id:h.id,name:h.name,source:h.source,semantic_tags:nt(h.semantic_tags,{text:`${h.name} ${h.description??""}`,path:o.get(f),existingTags:h.tags})});}let c=[];for(let[u,d]of a.entries()){if(e.exclude_node_id&&u===e.exclude_node_id)continue;let p=o.get(u);p&&(d.memories.length===0&&d.rules.length===0&&d.skills.length===0||c.push({node_id:u,relative_path:p,memories:d.memories,rules:d.rules,skills:d.skills}));}return c.sort((u,d)=>u.relative_path.localeCompare(d.relative_path)),{ok:true,data:c}}function Bf(t,e=160){let r=t.replace(/`[^`]*`/g,"").replace(/#+\s*/g,"").replace(/[*_~]+/g,"").trim(),n=r.indexOf("."),s=n>0&&n<e?r.slice(0,n+1):r.slice(0,e);return s.length<r.length?`${s}\u2026`:s}async function Ff(t,e,r){let n=rl(r??"");if(n.length===0)return {invokedSkills:[],missingInvokedSkills:[]};let{data:s,error:i}=await t.from("skills").select("id, name, description, content, source, github_url, skill_files(path, content, role)").eq("workspace_id",e).is("deleted_at",null);if(i)throw new Error(`skill invocation lookup failed: ${i.message}`);let o=new Map;for(let c of s??[]){let u=c;if(!u.name)continue;let d=si(u.name);o.set(d,[...o.get(d)??[],c]);}let a=[],l=[];for(let c of n){let u=o.get(c.name)??[];if(u.length===0){l.push({name:c.name,reason:"not_found"});continue}if(u.length>1){l.push({name:c.name,reason:"duplicate"});continue}let d=u[0];a.push({id:d.id,name:d.name,description:d.description,content:Wf(d),source:d.source,githubUrl:d.github_url,nodeRelativePath:null});}return {invokedSkills:a,missingInvokedSkills:l}}async function En(t,e){let r=await Ff(t.supabase,e.workspace_id,e.user_intent),{data:n,error:s}=await t.supabase.from("nodes").select("id, name, relative_path").eq("workspace_id",e.workspace_id).eq("relative_path",e.relative_path).maybeSingle();if(s)return {ok:false,error:F(s)};if(!n){let h=await Wt(t,{workspace_id:e.workspace_id});return {ok:true,data:{resolved_workspace_path:e.relative_path||"/",node:null,memories:[],rules:[],skills:[],workspace_overview:h.ok?h.data:[],invoked_skills:r.invokedSkills.length>0?r.invokedSkills:void 0,missing_invoked_skills:r.missingInvokedSkills.length>0?r.missingInvokedSkills:void 0}}}let i=n.id,[o,a,l,c]=await Promise.all([t.supabase.from("memories").select("id, title, content, semantic_tags").eq("node_id",i).eq("status","active").order("created_at",{ascending:true}),t.supabase.from("node_rules").select("rules(id, name, content, scope_type, priority, semantic_tags)").eq("node_id",i),t.supabase.from("node_skills").select("skills(id, name, description, source, tags, semantic_tags)").eq("node_id",i).eq("is_active",true),Wt(t,{workspace_id:e.workspace_id,exclude_node_id:i})]);if(o.error)return {ok:false,error:F(o.error)};if(a.error)return {ok:false,error:F(a.error)};if(l.error)return {ok:false,error:F(l.error)};let u=(o.data??[]).map(h=>({id:h.id,title:h.title,preview:Bf(h.content??""),semantic_tags:nt(h.semantic_tags,{text:`${h.title} ${(h.content??"").slice(0,1e3)}`,path:n.relative_path})})),d=[];for(let h of a.data??[]){let f=h.rules,m=Array.isArray(f)?f[0]:f;if(!m)continue;let _=m;d.push({id:_.id,name:_.name,scope_type:_.scope_type,priority:_.priority,semantic_tags:nt(_.semantic_tags,{text:`${_.name} ${_.content??""}`,path:n.relative_path})});}let p=[];for(let h of l.data??[]){let f=h.skills,m=Array.isArray(f)?f[0]:f;if(!m)continue;let _=m;p.push({id:_.id,name:_.name,description:_.description,source:_.source,semantic_tags:nt(_.semantic_tags,{text:`${_.name} ${_.description??""}`,path:n.relative_path,existingTags:_.tags})});}return {ok:true,data:{resolved_workspace_path:e.relative_path||n.relative_path,node:{id:i,name:n.name,relative_path:n.relative_path},memories:u,rules:d,skills:p,workspace_overview:c.ok?c.data:[],invoked_skills:r.invokedSkills.length>0?r.invokedSkills:void 0,missing_invoked_skills:r.missingInvokedSkills.length>0?r.missingInvokedSkills:void 0}}}async function il(t){if(t.recipientUserIds.length===0)return {ok:true,skipped:"empty_recipients"};let{error:e}=await t.supabase.rpc("emit_notification",{p_event_type:t.eventType,p_workspace_id:t.workspaceId,p_actor_user_id:t.actorUserId,p_payload:t.payload,p_recipient_user_ids:t.recipientUserIds});return e?(console.warn(`[notifications:emit] ${t.eventType} failed:`,e.message),{ok:false,error:e.message}):{ok:true}}async function ol(t,e,r=null){let{data:n}=await t.from("workspaces").select("organization_id").eq("id",e).maybeSingle();if(!n)return [];let{data:s,error:i}=await t.from("organization_members").select("user_id, role").eq("organization_id",n.organization_id).in("role",["owner","admin"]);if(i||!s)return [];let o=new Set;for(let a of s)r!=null&&a.user_id===r||o.add(a.user_id);return Array.from(o)}async function Hf(t,e,r){let n=e==="memory"?"memories":"rules",s=e==="memory"?"title":"name",{data:i}=await t.from(n).select(`created_by, ${s}`).eq("id",r).maybeSingle();return i?{creatorId:i.created_by??null,title:i[s]??""}:{creatorId:null,title:""}}function ii(t){return {id:t.id,workspaceId:t.workspace_id,suggestionId:t.suggestion_id,subjectType:t.subject_type,subjectId:t.subject_id,formulaId:t.formula_id,status:t.status,requestedByUserId:t.requested_by_user_id,claimedByAi:t.claimed_by_ai,claimedAt:t.claimed_at,resolvedAt:t.resolved_at,resolvedNote:t.resolved_note,createdAt:t.created_at,updatedAt:t.updated_at,brief:t.brief??{}}}async function al(t,e){let r=e.include_in_progress?["pending","in_progress"]:["pending"],{data:n,error:s}=await t.supabase.from("suggestion_refreshes").select("id, subject_type, subject_id, formula_id, status, created_at, brief").eq("workspace_id",e.workspace_id).in("status",r).order("created_at",{ascending:true});return s?{ok:false,error:F(s)}:{ok:true,data:(n??[]).map(a=>{let l=a.brief??{};return {id:a.id,subjectType:a.subject_type,subjectId:a.subject_id,subjectTitle:l.subject?.title??"(unknown)",nodePath:l.subject?.nodePath??"/",formulaId:a.formula_id,humanReason:l.signal?.humanReason??a.formula_id,status:a.status,createdAt:a.created_at,hasProposedPatch:!!l.proposedPatch?.newBody}})}}async function ll(t,e){let{data:r,error:n}=await t.supabase.from("suggestion_refreshes").select("*").eq("id",e.refresh_id).maybeSingle();if(n)return {ok:false,error:F(n)};if(!r)return {ok:false,error:{code:"not_found",message:`Refresh ${e.refresh_id} not found`}};let s=ii(r);if(s.status==="pending"){let i=new Date().toISOString(),{data:o,error:a}=await t.supabase.from("suggestion_refreshes").update({status:"in_progress",claimed_at:i,claimed_by_ai:e.claimed_by??null}).eq("id",e.refresh_id).eq("status","pending").select("*").maybeSingle();if(a)return {ok:false,error:F(a)};if(o)return {ok:true,data:ii(o)}}return {ok:true,data:s}}async function cl(t,e){let r=new Date().toISOString(),{data:n,error:s}=await t.supabase.from("suggestion_refreshes").update({status:e.status,resolved_at:r,resolved_note:e.note??null,...e.claimed_by?{claimed_by_ai:e.claimed_by}:{}}).eq("id",e.refresh_id).select("*").maybeSingle();if(s)return {ok:false,error:F(s)};if(!n)return {ok:false,error:{code:"not_found",message:`Refresh ${e.refresh_id} not found`}};let i=n;i.suggestion_id&&await t.supabase.from("suggestions").update({resolved_at:r}).eq("id",i.suggestion_id).is("resolved_at",null);let o=e.status==="applied"?30:365,{data:a}=await t.supabase.auth.getUser(),l=a?.user?.id;if(l&&await t.supabase.from("suggestion_dismissals").insert({workspace_id:i.workspace_id,subject_type:i.subject_type,subject_id:i.subject_id,formula_id:i.formula_id,action:"keep",dismiss_count:1,next_recheck_at:new Date(Date.now()+o*864e5).toISOString(),user_id:l}),e.status==="applied"||e.status==="rejected")try{let c=e.status==="applied"?"suggestion.applied":"suggestion.rejected",u=i.subject_type,d=i.subject_id,p=i.workspace_id,{creatorId:h,title:f}=await Hf(t.supabase,u,d),m=await ol(t.supabase,p,t.userId),_=new Set;h&&h!==t.userId&&_.add(h);for(let k of m)_.add(k);let b={subject_type:u,subject_title:f};e.status==="rejected"&&e.note&&(b.reason=e.note);let w=await il({supabase:t.supabase,eventType:c,workspaceId:p,actorUserId:t.userId,payload:b,recipientUserIds:Array.from(_)});w.ok||console.warn(`[notifications:emit] suggestion resolution failed: ${w.error}`);}catch(c){console.warn("[notifications:emit] suggestion resolution threw:",c);}return {ok:true,data:ii(i)}}var qf="<!-- managed by Pathrule \u2014 do not edit this file manually. Cloud state is authoritative. Local edits are overwritten. -->",zf=["# Pathrule Workspace","","Pathrule is this workspace's shared memory, rule, and skill layer for AI agents.","Use it as a smart reminder system, not a full-context dump.","","## Context Policy","","- Pathrule is the first knowledge layer for this workspace. Use hook context first: metadata, relevant rule titles, path reminders, and filename/skill matches.","- `::skill-name` is a hard gate: use the exact injected skill; if missing, stop and resolve it through Pathrule/MCP before file edits.",'- Do not reflexively call `pathrule_get_context` before every small known-path code task. For discovery, inventory, architecture, recent activity, or "list/show/find/where/which" prompts (Turkish: listele, g\xF6ster, bul, nerede, hangi, neler), call it before any grep/read/fallback when hook context is missing, ambiguous, or stale.',"- Hook silence on a topic does not mean Pathrule has no relevant memory/rule. For discovery/inventory/architecture questions, call `pathrule_get_context` first; fall back to files, git, or general knowledge only after Pathrule returns nothing relevant.","- When calling `pathrule_get_context`, pass `cwd`, `user_intent`, and `omit_protocol: true`; this file already contains the protocol.","- Read full bodies with `pathrule_read_memory`, `pathrule_read_rule`, or `pathrule_read_skill` when a surfaced title/id is relevant.","- Treat existing local edits as protected user/team work: inspect overlaps, never revert unrelated changes, and keep edits scoped.","- Obey every surfaced rule. If a user request conflicts with a Pathrule rule, warn before taking action.","","## Writes","","- Pathrule cloud is the source of truth. Do not create local memory files such as `MEMORY.md` or `~/.claude/memory/`.","- Use path-first writes for lasting project knowledge: `pathrule_write_memory`, `pathrule_write_rule`, and `pathrule_write_skill` take the most specific workspace-relative `node_path`.","- Do not edit materialized local Pathrule files as the source of truth. This includes `.codex/skills/**/SKILL.md`, `.claude/skills/**`, rendered companion files, and synced skill/memory/rule files. Read only for orientation; create/update cloud records with the Pathrule MCP write/update tools.","- After any file-modifying response, call `pathrule_log_activity` once with domain, action, scope, subjects, files_touched, and a concise task_summary.",""].join(`
51
+ `);function ul(t){let e=[qf,"",zf].join(`
52
52
  `).replace(/\n{3,}/g,`
53
53
 
54
54
  `);return e.endsWith(`
55
55
  `)?e:`${e}
56
- `}async function Ih(t,e){let{data:r,error:n}=await t.from("workspaces").select("name").eq("id",e).maybeSingle();if(n)throw new Error(`workspaces lookup failed: ${n.message}`);if(!r)throw new Error(`workspace ${e} not found (RLS or deleted)`);return r.name}async function il(t){await Ih(t.supabase,t.workspaceId);let r={supabase:t.supabase},[n,i]=await Promise.all([vn(r,{workspace_id:t.workspaceId,relative_path:"/"}),Ut(r,{workspace_id:t.workspaceId})]);if(!n.ok)throw new Error(`getContext failed: ${n.error.message}`);if(!i.ok)throw new Error(`getWorkspaceOverview failed: ${i.error.message}`);let s=[];try{let l=new Date(Date.now()-12096e5).toISOString(),{data:c}=await t.supabase.from("activity_logs").select("domain, action, task_summary, created_at").eq("workspace_id",t.workspaceId).eq("status","active").gte("created_at",l).order("created_at",{ascending:!1}).limit(8);c&&(s=c);}catch{}let o=nl({rootContext:{memories:n.data.memories.map(l=>({id:l.id,title:l.title,preview:l.preview})),rules:n.data.rules,skills:n.data.skills.map(l=>({id:l.id,name:l.name,description:l.description,source:l.source}))},overview:i.data,recentActivities:s.length>0?s:void 0}),a=true;try{let{data:l,error:c}=await t.supabase.from("claude_md_snapshots").select("body").eq("workspace_id",t.workspaceId).maybeSingle();if(c)console.warn("[claude-md] snapshot read skipped:",c.message);else if(a=!l||l.body!==o,a){let{error:u}=await t.supabase.from("claude_md_snapshots").upsert({workspace_id:t.workspaceId,body:o,rendered_by:t.userId,rendered_at:new Date().toISOString()});u&&console.warn("[claude-md] snapshot upsert skipped:",u.message);}}catch{}return {body:o,snapshotChanged:a}}function sl(t){let e=ns(t),r=2166136261;for(let n=0;n<e.length;n++)r^=e.charCodeAt(n),r=Math.imul(r,16777619);return (r>>>0).toString(16).padStart(8,"0")}function ns(t){return t===null?"null":Array.isArray(t)?"["+t.map(ns).join(",")+"]":typeof t=="object"?"{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+ns(t[n])).join(",")+"}":JSON.stringify(t)}var ol={PreToolUse:"preToolUse",PostToolUse:"postToolUse",UserPromptSubmit:"beforeSubmitPrompt",SessionStart:"sessionStart",SessionEnd:"sessionEnd",Stop:"stop",SubagentStop:"subagentStop",Notification:null,PreCompact:null,PostCompact:null};var al={Edit:"Write",Bash:"Shell"},ll={PreToolUse:"PreToolUse",PostToolUse:"PostToolUse",UserPromptSubmit:"UserPromptSubmit",SessionStart:"SessionStart",SessionEnd:null,Stop:"Stop",SubagentStop:null,Notification:null,PreCompact:null,PostCompact:null},cl={Edit:"apply_patch",Write:"apply_patch"};var is=null;function Oh(t){return !!(t.startsWith("/")||/^[a-zA-Z]:[\\/]/.test(t)||t.startsWith("\\\\"))}function ss(t){if(typeof t!="string"||t.length===0)throw new Error("setHookCommand requires a non-empty string");if(t.startsWith("~"))throw new Error(`setHookCommand requires an absolute path; got ${t}. Tilde paths are not expanded by Codex's hook spawn (no shell), so they ENOENT silently. Resolve homedir() in the caller.`);if(!Oh(t))throw new Error(`setHookCommand requires an absolute path; got ${t}. Relative paths (e.g. bin/pathrule-hook.js) resolve against the AI client's working directory at hook spawn time, which is not stable.`);is=t;}function os(){if(is===null)throw new Error("Pathrule hook command not configured. Each Node entry point (electron main, mcp-server, build scripts) must call setHookCommand(absolutePath) at startup before invoking any merger (ensureClaudeSettingsHook, ensureCodexHooks, etc.).");return is}var $h=new Set(["Read","Write","Grep","Delete","Task","Shell"]),Nh=new Set(["SessionStart","PreToolUse","PostToolUse","Stop","SubagentStop","SessionEnd"]);function as(t){return t.map(e=>({matcher:e.matcher,hooks:e.hooks.map(r=>({...r}))}))}function Dh(t){if(!t.matcher)return t;let e=new Set,r=[];for(let n of t.matcher.split("|")){let i=al[n]??n;$h.has(i)&&(e.has(i)||(e.add(i),r.push(i)));}return r.length===0?null:{...t,matcher:r.join("|")}}function He(t){let e=os();return {hooks:{SessionStart:[{hooks:[{type:"command",command:e}]}],PreToolUse:[{matcher:"Read|Edit|Write|Grep|Glob|Bash",hooks:[{type:"command",command:e}]}],PostToolUse:[{matcher:"Read|Edit|Write|Bash",hooks:[{type:"command",command:e}]}],UserPromptSubmit:[{hooks:[{type:"command",command:e}]}],Stop:[{hooks:[{type:"command",command:e}]}],SubagentStop:[{hooks:[{type:"command",command:e}]}],SessionEnd:[{hooks:[{type:"command",command:e}]}]}}}function ls(t){let e={};for(let[r,n]of Object.entries(t.hooks)){let i=r;if(!Nh.has(i))continue;let s=ol[i];if(!s||!n||n.length===0)continue;let o=as(n).map(Dh).filter(a=>a!==null);o.length!==0&&(e[s]=o);}return e}function ul(t){return `${JSON.stringify({version:1,hooks:ls(t)},null,2)}
57
- `}var jh=new Set(["Bash","apply_patch"]),Mh=new Set(["SessionStart","PreToolUse","PostToolUse","UserPromptSubmit","Stop"]);function Lh(t){if(!t.matcher)return t;let e=new Set,r=[];for(let n of t.matcher.split("|")){let i=cl[n]??n;jh.has(i)&&(e.has(i)||(e.add(i),r.push(i)));}return r.length===0?null:{...t,matcher:r.join("|")}}function cs(t){let e={};for(let[r,n]of Object.entries(t.hooks)){let i=r;if(!Mh.has(i))continue;let s=ll[i];if(!s||!n||n.length===0)continue;let o=as(n).map(Lh).filter(a=>a!==null);if(o.length===0&&n.some(a=>!a.matcher)){e[s]=as(n).filter(a=>!a.matcher);continue}o.length!==0&&(e[s]=o);}return e}function dl(t){return `${JSON.stringify({hooks:cs(t)},null,2)}
58
- `}var Sn={before:["Pathrule is the first knowledge layer for this workspace. Hooks auto-inject path-scoped memory/rule titles + session digest on every tool call and user prompt (M12). Trust that context before falling back to files, git, or general knowledge.","`::skill-name` is a hard gate: use the exact injected skill; if missing, stop and resolve it through Pathrule/MCP before file edits.","Do NOT reflexively call pathrule_get_context before every small known-path code task. DO call pathrule_get_context(cwd, user_intent, omit_protocol: true) before any grep/read/fallback when hook context is missing, ambiguous, stale, or the user asks for discovery, inventory, architecture, recent activity, or list/show/find/where/which style questions (including Turkish: listele, g\xF6ster, bul, nerede, hangi, neler).","Hook silence on a topic does not mean Pathrule has no relevant memory/rule. For discovery/inventory/architecture questions, call pathrule_get_context first; fall back to files, git, or general knowledge only after Pathrule returns nothing relevant. It's a single unified tool (M13): the router classifies intent and returns a depth-appropriate response - minimal for ui_tweak/new_feature on a known path, focused for bug_fix/refactor, deep for debug/discovery.","For discovery/inventory questions, treat `subtree_memory_index`, `discovery_signal`, and `semantic_candidates` as Pathrule evidence before filesystem fallback. Semantic candidates are not answers or rules: call pathrule_read_memory(id) and inspect the body before citing or following one.","The response tells you `next_required_action.primary_files` when the router is confident \u2014 edit those directly. For full memory/rule bodies: pathrule_read_memory(id) / pathrule_read_rule(id).","Obey every rule the hooks surface (advisory + strict). Apply every memory whose title looks relevant \u2014 fetch the body only when you want to cite or follow it.","Treat existing local edits as protected user/team work: inspect before touching overlapping files, never revert unrelated changes, and keep edits scoped to the user's request."],during:["Path-first writes: write_memory / write_rule / write_skill take a node_path string (e.g. '/apps/mobile'). Target the most specific path; missing nodes auto-create.","Never use local file-based memory (~/.claude/memory/, MEMORY.md). Pathrule is the single source of truth for all persistent knowledge.","After every write, summarise what you did in natural language \u2014 don't paste raw tool JSON."],after:["Log EVERY file-modifying response with pathrule_log_activity. Trigger: did you modify files? \u2192 log it. Required fields: domain, action, scope, subjects (\u22645 keywords), files_touched, task_summary."]},fl=sl(Sn);function hl(){let t=["# Pathrule Protocol","","This workspace uses Pathrule MCP. Follow this protocol on EVERY task.","","## BEFORE \u2014 mandatory first steps",""],e=1;for(let r of Sn.before)t.push(`${e}. ${r}`),e++;t.push("","## DURING \u2014 constraints while coding","");for(let r of Sn.during)t.push(`${e}. ${r}`),e++;t.push("","## AFTER \u2014 mandatory after every file modification","");for(let r of Sn.after)t.push(`${e}. ${r}`),e++;return t.push(""),t.join(`
59
- `)}var Uh=["pathrule-hook.js","pathrule_log_activity"];function Wh(){return He().hooks}function Bh(){return ls(He())}function Fh(){return cs(He())}function Cn(t){return t?Uh.some(e=>t.includes(e)):false}function yr(t){let e=[];for(let r of t){let n=(r.hooks??[]).filter(i=>!Cn(i.command));n.length!==0&&e.push({...r,hooks:n});}return e}function En(t){let e={};if(t&&t.trim().length>0)try{e=JSON.parse(t);}catch{e={_backup:t};}e.hooks||(e.hooks={});let r=false;for(let[n,i]of Object.entries(Wh())){let s=e.hooks[n],o=Array.isArray(s)?s:[],a=o.filter(u=>(u.hooks??[]).some(d=>Cn(d.command))),l=yr(o);a.length===i.length&&a.every((u,d)=>{let p=i[d];if(!p)return false;let f=u.hooks,h=p.hooks;return (u.matcher??"")===(p.matcher??"")&&f.length===h.length&&f.every((m,_)=>m.command===h[_]?.command)})||(e.hooks[n]=[...l,...i],r=true);}return {body:JSON.stringify(e,null,2)+`
60
- `,changed:r}}function gl(t,e){let r={version:1};if(t&&t.trim().length>0)try{r=JSON.parse(t);}catch{r={version:1,_backup:t};}typeof r.version!="number"&&(r.version=1),(!r.hooks||typeof r.hooks!="object")&&(r.hooks={});let n=e?.uninstall===true,i=false;if(n){for(let a of Object.keys(r.hooks)){let l=r.hooks[a];if(!Array.isArray(l))continue;let c=yr(l);c.length!==l.length&&(c.length===0?delete r.hooks[a]:r.hooks[a]=c,i=true);}let s=Object.keys(r).filter(a=>a!=="version"&&a!=="hooks"),o=Object.keys(r.hooks);return s.length===0&&o.length===0?{body:"",changed:true}:{body:JSON.stringify(r,null,2)+`
61
- `,changed:i}}for(let[s,o]of Object.entries(Bh())){let a=r.hooks[s],l=Array.isArray(a)?a:[],c=l.filter(p=>(p.hooks??[]).some(f=>Cn(f.command))),u=yr(l);c.length===o.length&&c.every((p,f)=>{let h=o[f];return h?(p.matcher??"")===(h.matcher??"")&&p.hooks.length===h.hooks.length&&p.hooks.every((m,_)=>m.command===h.hooks[_]?.command):false})&&u.length===l.length-c.length||(r.hooks[s]=[...u,...o],i=true);}return {body:JSON.stringify(r,null,2)+`
62
- `,changed:i}}function ml(t,e){let r={};if(t&&t.trim().length>0)try{r=JSON.parse(t);}catch{r={_backup:t};}(!r.hooks||typeof r.hooks!="object")&&(r.hooks={});let n=e?.uninstall===true,i=false;if(n){for(let a of Object.keys(r.hooks)){let l=r.hooks[a];if(!Array.isArray(l))continue;let c=yr(l);c.length!==l.length&&(c.length===0?delete r.hooks[a]:r.hooks[a]=c,i=true);}let s=Object.keys(r).filter(a=>a!=="hooks"),o=Object.keys(r.hooks);return s.length===0&&o.length===0?{body:"",changed:true}:{body:JSON.stringify(r,null,2)+`
63
- `,changed:i}}for(let[s,o]of Object.entries(Fh())){let a=r.hooks[s],l=Array.isArray(a)?a:[],c=l.filter(p=>(p.hooks??[]).some(f=>Cn(f.command))),u=yr(l);c.length===o.length&&c.every((p,f)=>{let h=o[f];return h?(p.matcher??"")===(h.matcher??"")&&p.hooks.length===h.hooks.length&&p.hooks.every((m,_)=>m.command===h.hooks[_]?.command):false})&&u.length===l.length-c.length||(r.hooks[s]=[...u,...o],i=true);}return {body:JSON.stringify(r,null,2)+`
64
- `,changed:i}}var _l="# >>> Pathrule managed (codex hook activation) >>>",us="# <<< Pathrule managed <<<",pl=[_l,"[features]","codex_hooks = true",us,""].join(`
65
- `);function Rn(t,e){let r=(t??"").replace(/\r\n/g,`
66
- `),n=r.indexOf(_l),i=r.indexOf(us),s=r;if(n>=0&&i>n){let a=r.slice(i+us.length).replace(/^\n+/,"");s=(r.slice(0,n).trimEnd()+(a?`
67
-
68
- ${a}`:"")).trimEnd();}else s=r.trimEnd();if(e?.uninstall===true){let a=s.length>0?`${s}
69
- `:"";return {body:a,changed:a!==r}}let o=s.length>0?`${s}
70
-
71
- ${pl}`:pl;return r===o?{body:r,changed:false}:{body:o,changed:true}}var Hh={profile:80,organization:100,workspace:120},qh=new Set(["pathrule","pathrule admin","pathrule support","pathrule security"]),zh=new Set(["admin","administrator","security","support","system"]),wl=/[\u0000-\u001f\u007f-\u009f]/,Jh=/[\u0000-\u001f\u007f-\u009f]/g,Kh=/<\/?[a-z][^>]*>/i,Vh=/(^|\s)(https?:\/\/|javascript:|data:|mailto:)/i,Gh=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$/i;function Yh(t){return t.replace(/\s+/g," ").trim()}function ds(t,e){if(wl.test(t))return {ok:false,reason:"control_chars"};let r=Yh(t);if(r.length===0)return {ok:false,reason:"empty"};if(Array.from(r).length>Hh[e])return {ok:false,reason:"too_long"};if(Kh.test(r))return {ok:false,reason:"html_like"};if(Vh.test(r))return {ok:false,reason:"url_like"};if(e==="profile"&&Gh.test(r))return {ok:false,reason:"url_like"};let n=r.toLocaleLowerCase("en-US");return e!=="workspace"&&qh.has(n)?{ok:false,reason:"reserved"}:e==="profile"&&zh.has(n)?{ok:false,reason:"reserved"}:{ok:true,value:r}}function yl(t,e){if(typeof t!="string")return null;let r=ds(t,e);return r.ok?r.value??null:null}function kl(t,e=2048){if(typeof t!="string")return null;let r=t.trim();if(!r||r.length>e||wl.test(r))return null;try{let n=new URL(r);return n.protocol!=="http:"&&n.protocol!=="https:"?null:n.toString()}catch{return null}}function xn(t){return t.replace(Jh,e=>e===`
72
- `?"\\n":e==="\r"?"\\r":e===" "?"\\t":`\\u${e.charCodeAt(0).toString(16).padStart(4,"0")}`)}var H={web:"Pathrule Web",desktop:"Pathrule Desktop",cli:"Pathrule CLI"},nt={web:"Pathrule in your browser. Manage cloud content from anywhere.",desktop:"The complete Pathrule app for macOS, Windows, and Linux.",cli:"Pathrule from your terminal. Headless, scriptable, fast."};var Xh=["event_name","schema_version","occurred_at","surface","host_kind","app_version","os_family","country_iso","pseudonymous_install_id","session_local_id","duration_ms","result","blocking_reason","feature_tag"];function bl(t){let e=new Set(Xh);for(let r of Object.keys(t))if(!e.has(r))throw new Error(`telemetry_field_not_allowed:${r}`)}var Zh=[{match:t=>t.some(e=>/^next\.config\.(js|mjs|ts)$/.test(ce(e))),title:"Next.js project",content:"This workspace uses Next.js as its React framework."},{match:t=>t.some(e=>/^nuxt\.config\.(js|ts)$/.test(ce(e))),title:"Nuxt project",content:"This workspace uses Nuxt as its Vue framework."},{match:t=>t.some(e=>/^tailwind\.config\.(js|mjs|ts|cjs)$/.test(ce(e))),title:"Uses Tailwind CSS",content:"This workspace uses Tailwind CSS for styling."},{match:t=>t.some(e=>/^vite\.config\.(js|ts|mjs)$/.test(ce(e))),title:"Vite build tool",content:"This workspace uses Vite as the build tool / dev server."},{match:t=>{let e=t.filter(n=>n.endsWith("/package.json")||n==="package.json"),r=t.some(n=>n.startsWith("packages/")||n.startsWith("apps/"));return e.length>2&&r},title:"Monorepo structure",content:"This workspace is a monorepo with multiple packages/apps, each with its own package.json."},{match:t=>t.some(e=>ce(e)==="Podfile"||e.endsWith(".xcodeproj")),title:"iOS/macOS native project",content:"This workspace contains iOS/macOS native code (Xcode project or CocoaPods)."},{match:t=>t.some(e=>ce(e)==="pubspec.yaml"),title:"Flutter project",content:"This workspace is a Flutter/Dart project."},{match:t=>t.some(e=>ce(e)==="Cargo.toml"),title:"Rust project",content:"This workspace contains Rust code (Cargo-managed)."},{match:t=>t.some(e=>ce(e)==="go.mod"),title:"Go project",content:"This workspace is a Go module."},{match:t=>t.some(e=>/^tsconfig(\.\w+)?\.json$/.test(ce(e))),title:"TypeScript project",content:"This workspace uses TypeScript."},{match:t=>t.some(e=>ce(e)==="docker-compose.yml"||ce(e)==="docker-compose.yaml"||ce(e)==="Dockerfile"),title:"Docker containerization",content:"This workspace uses Docker for containerization."},{match:t=>t.some(e=>e.startsWith(".github/workflows/")),title:"GitHub Actions CI/CD",content:"This workspace uses GitHub Actions for CI/CD."}];function ce(t){let e=t.split("/");return e[e.length-1]??t}function ps(t){return Zh.filter(e=>e.match(t)).map(e=>({title:e.title,content:e.content}))}function fs(t){let e=new Map,r=0,n=t.split("---").filter(i=>i.trim().length>0);for(let i of n){if(r>=1e4)break;r++;let s=i.split(`
73
- `).map(o=>o.trim()).filter(o=>o.length>0&&!o.startsWith("commit ")&&!o.startsWith("Author:"));if(!(s.length>20||s.length<2))for(let o=0;o<s.length;o++)for(let a=o+1;a<s.length;a++){let l=s[o],c=s[a],[u,d]=l<c?[l,c]:[c,l],p=`${u}\0${d}`;e.set(p,(e.get(p)??0)+1);}}return [...e.entries()].map(([i,s])=>{let[o,a]=i.split("\0");return {path_a:o,path_b:a,weight:s}}).sort((i,s)=>s.weight-i.weight).slice(0,1e4)}var U={"claude-code":{id:"claude-code",label:"Claude Code",skillsDir:".claude/skills",detectFile:".claude",supported:true},cursor:{id:"cursor",label:"Cursor",skillsDir:".cursor/skills",detectFile:".cursor",supported:true},windsurf:{id:"windsurf",label:"Windsurf",skillsDir:".windsurf/skills",detectFile:".windsurf",supported:true},codex:{id:"codex",label:"Codex",skillsDir:".codex/skills",detectFile:".codex",supported:true}},Pn=["claude-code"];function hs(t){return U[t]??null}function vl(t){let e=[];for(let r of t){let n=hs(r);n&&n.supported&&e.push(n);}return e}var Qh="skill";function Tn(t){let e=(t||"").toLowerCase().normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return e?e.slice(0,80):Qh}function Sl(t,e){let r=Tn(t),n=e.replace(/-/g,"").slice(0,8);return `${r}-${n}`}var Cl="[redacted]",eg="[redacted-email]",gs="[redacted-path]",tg=/(authorization|password|secret|token|api[_-]?key|access[_-]?token|refresh[_-]?token|pair[_-]?token|session|cookie|env|environment|cache|content|body|file[_-]?content)/i,rg=/(^|[_-])(path|paths|cwd|directory|root|repo|local_root|workspace_root)([_-]|$)/i,ng=/\b(?:Bearer\s+)?[A-Za-z0-9._~+/=-]{24,}\b/g,ig=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,sg=/(?:~|\/Users\/[^/\s]+|\/home\/[^/\s]+|\/var\/folders\/[^\s"']+|\/tmp\/[^\s"']+)/g,og=/[A-Za-z]:\\(?:[^\\\s"']+\\?)+/g;function ms(t,e=""){return t&&(lg(e)?gs:ag(e)?Cl:t.replace(ig,eg).replace(sg,gs).replace(og,gs).replace(ng,Cl))}function El(t){let e=JSON.stringify(t),r=[/Bearer\s+[A-Za-z0-9._~+/=-]+/i,/access[_-]?token["':\s]+[A-Za-z0-9._~+/=-]{8,}/i,/refresh[_-]?token["':\s]+[A-Za-z0-9._~+/=-]{8,}/i,/pair[_-]?token["':\s]+[A-Za-z0-9._~+/=-]{8,}/i,/\/Users\/[^/"']+/,/\/home\/[^/"']+/,/[A-Za-z]:\\[^"']+/];for(let n of r)if(n.test(e))throw new Error(`support bundle contains sensitive material matching ${n}`)}function ag(t){return tg.test(t)}function lg(t){return rg.test(t)}var qe={free:{workspaces:1,memories:50,rules:50,seatsExtra:0,basePriceMonthly:0,basePriceYearly:0,perSeatMonthly:0},starter:{workspaces:3,memories:2500,rules:2500,seatsExtra:-1,basePriceMonthly:12,basePriceYearly:10,perSeatMonthly:6},pro:{workspaces:-1,memories:1e4,rules:1e4,seatsExtra:-1,basePriceMonthly:24,basePriceYearly:20,perSeatMonthly:6},business:{workspaces:-1,memories:5e4,rules:5e4,seatsExtra:-1,basePriceMonthly:48,basePriceYearly:40,perSeatMonthly:6},enterprise:{workspaces:-1,memories:-1,rules:-1,seatsExtra:-1,basePriceMonthly:0,basePriceYearly:0,perSeatMonthly:0}};function Rl(t,e){if(!t)return {failure:{error:"organization_not_found"},billingImpact:An(),billingRequirement:null};if(t.plan==="free")return {failure:{error:"free_plan_invites_disabled"},billingImpact:An(),billingRequirement:null};if(["past_due","unpaid","canceled"].includes(t.subscription_status??""))return {failure:{error:"subscription_not_invitable"},billingImpact:An(),billingRequirement:null};if(t.trial_status==="active"&&t.trial_seat_cap){let r=e+1,n=t.paid_extra_seats??0,i=t.trial_seat_cap+n,s=r>t.trial_seat_cap,o=Math.max(0,r-t.trial_seat_cap),a={seat_effect:s?r>i?"paid_extra_required":"paid_extra_available":"included",may_use_paid_extra_seat:s,active_seats_before:e,target_active_seats:r,included_seat_cap:t.trial_seat_cap,current_paid_extra_seats:n,required_paid_extra_seats:o};return r>i?{failure:null,billingImpact:a,billingRequirement:{targetSeats:r,requiredPaidExtraSeats:o,giftSeatCap:t.trial_seat_cap,currentPaidExtraSeats:n}}:{failure:null,billingImpact:a,billingRequirement:null}}return {failure:null,billingImpact:An(),billingRequirement:null}}function An(){return {seat_effect:"not_applicable",may_use_paid_extra_seat:false}}K();var gg={"claude-code":["CLAUDE.md",".claude/rules/pathrule-protocol.md",".claude/settings.json"],cursor:[".cursorrules",".cursor/rules/pathrule-protocol.mdc",".cursor/hooks.json"],codex:["codex.md","AGENTS.md",".codex/hooks.json",".codex/config.toml"],windsurf:[".windsurfrules",".windsurf/rules/pathrule-protocol.md"]};async function mg(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function ze(t){let e=Object.keys(U);return (await Promise.all(e.map(async n=>{for(let i of gg[n])if(await mg(join(t,i)))return n;return null}))).filter(n=>n!==null)}function In(t){let e=new Set(Object.keys(U)),r=(t.selected??[]).filter(n=>typeof n=="string"&&e.has(n));return r.length>0?r:t.detected.length>0?[...t.detected]:[...t.fallback]}li();Gr();F();var W_=new Map([["-h","--help"],["-v","--version"]]);function bu(t,e=process.env){let r=[],n={json:false,yes:false,noOpen:false,deviceCode:false,browserCallback:false,help:false,version:false,color:e.NO_COLOR!=="1"&&e.NO_COLOR!=="true",interactive:e.CI!=="true"};for(let o of t)switch(W_.get(o)??o){case "--json":n.json=true,n.color=false,n.interactive=false;break;case "--yes":n.yes=true;break;case "--no-open":n.noOpen=true;break;case "--device-code":n.deviceCode=true;break;case "--browser-callback":n.browserCallback=true;break;case "--help":n.help=true;break;case "--version":n.version=true;break;case "--no-color":n.color=false;break;default:r.push(o);break}let i=B_(r);return {command:i[0]??"help",positional:i,flags:n}}function B_(t){let e=t[0],r=t[1];return !e?.startsWith("/")||!r||!["memory","rule","skill","search"].includes(r)?t:[r,...t.slice(2),e]}Ge();F();K();var q_=randomUUID(),z_=20,J_=1500;function Ru(t){return t==="telemetry.enabled"||t==="telemetry.id"}async function xu(t,e){if(t==="telemetry.enabled")return oo(e,await ao(e));let r=await pi(e);return {key:t,value:r.pseudonymous_install_id,source:"config",configurable:true}}async function Pu(t,e){let r=Z_(t);if(r===null)throw new Error("invalid_telemetry_enabled");let n=await pi(e);return await lo({...n,telemetry_enabled:r},e),oo(e,{...n,telemetry_enabled:r})}async function Tu(t){let r={...await pi(t),pseudonymous_install_id:randomUUID()};return await lo(r,t),{key:"telemetry.id",value:r.pseudonymous_install_id,source:"config",configurable:true}}async function Xr(t,e){let r=oo(t,await ao(t));if(!r.value)return {recorded:false,reason:r.source};let n=await pi(t),i={event_name:e.eventName,schema_version:1,occurred_at:new Date().toISOString(),surface:"cli",host_kind:"cli-bridge",app_version:e.appVersion,os_family:process.platform,pseudonymous_install_id:n.pseudonymous_install_id,session_local_id:q_,result:e.result,...typeof e.durationMs=="number"?{duration_ms:e.durationMs}:{},...e.blockingReason?{blocking_reason:e.blockingReason}:{},...e.featureTag?{feature_tag:e.featureTag}:{}};bl(i),Q_(i);let s=Iu(t);return await mkdir(dirname(s),{recursive:true,mode:j}),await chmod(dirname(s),j).catch(()=>{}),await appendFile(s,`${JSON.stringify(i)}
74
- `,{encoding:"utf8",mode:O}),await chmod(s,O).catch(()=>{}),await Y_(t).catch(()=>{}),{recorded:true}}async function so(t,e){try{let r=K_(e.command,e.exitCode),n=e.exitCode===0?"ok":e.exitCode===64?"blocked":"failed";r&&await Xr(t,{eventName:r,result:n,appVersion:e.appVersion,durationMs:e.durationMs,featureTag:V_(e.command),blockingReason:e.exitCode===64?"usage_or_preflight_blocked":void 0});let i=G_(e.command,e.exitCode);i&&await Xr(t,{eventName:"dead_end_seen",result:"blocked",appVersion:e.appVersion,durationMs:e.durationMs,featureTag:i.featureTag,blockingReason:i.blockingReason});}catch{}}function K_(t,e){switch(t){case "help":case "version":case "status":return "surface_viewed";case "setup":return e===0?"cli_setup_completed":"cli_setup_started";case "doctor":return e===0?null:"cli_doctor_failed";case "bridge":return e===0?"cli_bridge_pair_succeeded":"cli_bridge_pair_started";case "sync":return e===0?"agent_sync_succeeded":null;case "billing":case "team":case "upgrade":case "reactivate":case "open":return "web_admin_route_opened_from_cli";case "preflight":return e===0?null:"cli_preflight_blocked";default:return null}}function V_(t){return t==="bridge"?"cli_bridge":t==="setup"?"cli_setup":t==="doctor"?"cli_doctor":t==="sync"?"agent_sync":["billing","team","upgrade","reactivate","open"].includes(t)?"web_route":t==="preflight"?"preflight":"surface"}function G_(t,e){return e===0?null:t==="doctor"?{featureTag:"cli_doctor",blockingReason:"doctor_cannot_repair"}:t==="preflight"?{featureTag:"preflight",blockingReason:"preflight_blocked"}:t==="setup"?{featureTag:"cli_setup",blockingReason:"cli_setup_incomplete"}:t==="bridge"?{featureTag:"cli_bridge",blockingReason:"bridge_pair_failed"}:["billing","team","upgrade","reactivate","open"].includes(t)?{featureTag:"web_route",blockingReason:"web_route_not_opened"}:null}function oo(t,e){return t.CI==="true"?{key:"telemetry.enabled",value:false,source:"ci",configurable:false}:t.NO_TELEMETRY==="1"?{key:"telemetry.enabled",value:false,source:"env",configurable:false}:typeof e?.telemetry_enabled=="boolean"?{key:"telemetry.enabled",value:e.telemetry_enabled,source:"config",configurable:true}:{key:"telemetry.enabled",value:true,source:"default",configurable:true}}async function pi(t){let e=await ao(t);if(e)return e;let r={schema_version:1,pseudonymous_install_id:randomUUID()};return await lo(r,t),r}async function ao(t){try{let e=JSON.parse(await readFile(Au(t),"utf8"));if(e&&typeof e=="object"&&e.schema_version===1&&typeof e.pseudonymous_install_id=="string")return e}catch(e){if(e.code!=="ENOENT")throw e}return null}async function lo(t,e){let r=Au(e);await mkdir(dirname(r),{recursive:true,mode:j}),await chmod(dirname(r),j).catch(()=>{});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(t,null,2),{encoding:"utf8",mode:O}),await chmod(n,O).catch(()=>{}),await rename(n,r);}function Au(t){return join(A(t).home,"telemetry.json")}function Iu(t){return join(A(t).logsDir,"telemetry-events.jsonl")}async function Y_(t){let e=X_(t);if(!e)return;let r=Iu(t),n;try{n=(await readFile(r,"utf8")).split(`
75
- `).filter(Boolean);}catch(a){if(a.code==="ENOENT")return;throw a}if(n.length===0)return;let i=n.slice(0,z_).map(a=>JSON.parse(a)),s=new AbortController,o=setTimeout(()=>s.abort(),J_);try{let a=await fetch(e.url,{method:"POST",headers:{"Content-Type":"application/json",apikey:e.anonKey,Authorization:`Bearer ${e.anonKey}`},body:JSON.stringify({events:i}),signal:s.signal});if(!a.ok)return;let l=await a.json().catch(()=>null),c=typeof l?.accepted=="number"?l.accepted:i.length,u=Math.max(0,Math.min(c,i.length)),d=n.slice(u).join(`
56
+ `}async function Jf(t,e){let{data:r,error:n}=await t.from("workspaces").select("name").eq("id",e).maybeSingle();if(n)throw new Error(`workspaces lookup failed: ${n.message}`);if(!r)throw new Error(`workspace ${e} not found (RLS or deleted)`);return r.name}async function dl(t){await Jf(t.supabase,t.workspaceId);let r={supabase:t.supabase},[n,s]=await Promise.all([En(r,{workspace_id:t.workspaceId,relative_path:"/"}),Wt(r,{workspace_id:t.workspaceId})]);if(!n.ok)throw new Error(`getContext failed: ${n.error.message}`);if(!s.ok)throw new Error(`getWorkspaceOverview failed: ${s.error.message}`);let i=[];try{let l=new Date(Date.now()-12096e5).toISOString(),{data:c}=await t.supabase.from("activity_logs").select("domain, action, task_summary, created_at").eq("workspace_id",t.workspaceId).eq("status","active").gte("created_at",l).order("created_at",{ascending:!1}).limit(8);c&&(i=c);}catch{}let o=ul({rootContext:{memories:n.data.memories.map(l=>({id:l.id,title:l.title,preview:l.preview})),rules:n.data.rules,skills:n.data.skills.map(l=>({id:l.id,name:l.name,description:l.description,source:l.source}))},overview:s.data,recentActivities:i.length>0?i:void 0}),a=true;try{let{data:l,error:c}=await t.supabase.from("claude_md_snapshots").select("body").eq("workspace_id",t.workspaceId).maybeSingle();if(c)console.warn("[claude-md] snapshot read skipped:",c.message);else if(a=!l||l.body!==o,a){let{error:u}=await t.supabase.from("claude_md_snapshots").upsert({workspace_id:t.workspaceId,body:o,rendered_by:t.userId,rendered_at:new Date().toISOString()});u&&console.warn("[claude-md] snapshot upsert skipped:",u.message);}}catch{}return {body:o,snapshotChanged:a}}function pl(t){let e=oi(t),r=2166136261;for(let n=0;n<e.length;n++)r^=e.charCodeAt(n),r=Math.imul(r,16777619);return (r>>>0).toString(16).padStart(8,"0")}function oi(t){return t===null?"null":Array.isArray(t)?"["+t.map(oi).join(",")+"]":typeof t=="object"?"{"+Object.keys(t).sort().map(n=>JSON.stringify(n)+":"+oi(t[n])).join(",")+"}":JSON.stringify(t)}var hl={PreToolUse:"preToolUse",PostToolUse:"postToolUse",UserPromptSubmit:"beforeSubmitPrompt",SessionStart:"sessionStart",SessionEnd:"sessionEnd",Stop:"stop",SubagentStop:"subagentStop",Notification:null,PreCompact:null,PostCompact:null};var fl={Edit:"Write",Bash:"Shell"},gl={PreToolUse:"PreToolUse",PostToolUse:"PostToolUse",UserPromptSubmit:"UserPromptSubmit",SessionStart:"SessionStart",SessionEnd:null,Stop:"Stop",SubagentStop:null,Notification:null,PreCompact:null,PostCompact:null},ml={Edit:"apply_patch",Write:"apply_patch"};var ai=null;function Kf(t){return !!(t.startsWith("/")||/^[a-zA-Z]:[\\/]/.test(t)||t.startsWith("\\\\"))}function li(t){if(typeof t!="string"||t.length===0)throw new Error("setHookCommand requires a non-empty string");if(t.startsWith("~"))throw new Error(`setHookCommand requires an absolute path; got ${t}. Tilde paths are not expanded by Codex's hook spawn (no shell), so they ENOENT silently. Resolve homedir() in the caller.`);if(!Kf(t))throw new Error(`setHookCommand requires an absolute path; got ${t}. Relative paths (e.g. bin/pathrule-hook.js) resolve against the AI client's working directory at hook spawn time, which is not stable.`);ai=t;}function ci(){if(ai===null)throw new Error("Pathrule hook command not configured. Each Node entry point (electron main, mcp-server, build scripts) must call setHookCommand(absolutePath) at startup before invoking any merger (ensureClaudeSettingsHook, ensureCodexHooks, etc.).");return ai}var Vf=new Set(["Read","Write","Grep","Delete","Task","Shell"]),Gf=new Set(["SessionStart","PreToolUse","PostToolUse","Stop","SubagentStop","SessionEnd"]);function ui(t){return t.map(e=>({matcher:e.matcher,hooks:e.hooks.map(r=>({...r}))}))}function Yf(t){if(!t.matcher)return t;let e=new Set,r=[];for(let n of t.matcher.split("|")){let s=fl[n]??n;Vf.has(s)&&(e.has(s)||(e.add(s),r.push(s)));}return r.length===0?null:{...t,matcher:r.join("|")}}function He(t){let e=ci();return {hooks:{SessionStart:[{hooks:[{type:"command",command:e}]}],PreToolUse:[{matcher:"Read|Edit|Write|Grep|Glob|Bash",hooks:[{type:"command",command:e}]}],PostToolUse:[{matcher:"Read|Edit|Write|Bash",hooks:[{type:"command",command:e}]}],UserPromptSubmit:[{hooks:[{type:"command",command:e}]}],Stop:[{hooks:[{type:"command",command:e}]}],SubagentStop:[{hooks:[{type:"command",command:e}]}],SessionEnd:[{hooks:[{type:"command",command:e}]}]}}}function di(t){let e={};for(let[r,n]of Object.entries(t.hooks)){let s=r;if(!Gf.has(s))continue;let i=hl[s];if(!i||!n||n.length===0)continue;let o=ui(n).map(Yf).filter(a=>a!==null);o.length!==0&&(e[i]=o);}return e}function _l(t){return `${JSON.stringify({version:1,hooks:di(t)},null,2)}
57
+ `}var Xf=new Set(["Bash","apply_patch"]),Zf=new Set(["SessionStart","PreToolUse","PostToolUse","UserPromptSubmit","Stop"]);function Qf(t){if(!t.matcher)return t;let e=new Set,r=[];for(let n of t.matcher.split("|")){let s=ml[n]??n;Xf.has(s)&&(e.has(s)||(e.add(s),r.push(s)));}return r.length===0?null:{...t,matcher:r.join("|")}}function pi(t){let e={};for(let[r,n]of Object.entries(t.hooks)){let s=r;if(!Zf.has(s))continue;let i=gl[s];if(!i||!n||n.length===0)continue;let o=ui(n).map(Qf).filter(a=>a!==null);if(o.length===0&&n.some(a=>!a.matcher)){e[i]=ui(n).filter(a=>!a.matcher);continue}o.length!==0&&(e[i]=o);}return e}function wl(t){return `${JSON.stringify({hooks:pi(t)},null,2)}
58
+ `}var Rn={before:["Pathrule is the first knowledge layer for this workspace. Hooks auto-inject path-scoped memory/rule titles + session digest on every tool call and user prompt (M12). Trust that context before falling back to files, git, or general knowledge.","`::skill-name` is a hard gate: use the exact injected skill; if missing, stop and resolve it through Pathrule/MCP before file edits.","Do NOT reflexively call pathrule_get_context before every small known-path code task. DO call pathrule_get_context(cwd, user_intent, omit_protocol: true) before any grep/read/fallback when hook context is missing, ambiguous, stale, or the user asks for discovery, inventory, architecture, recent activity, or list/show/find/where/which style questions (including Turkish: listele, g\xF6ster, bul, nerede, hangi, neler).","Hook silence on a topic does not mean Pathrule has no relevant memory/rule. For discovery/inventory/architecture questions, call pathrule_get_context first; fall back to files, git, or general knowledge only after Pathrule returns nothing relevant. It's a single unified tool (M13): the router classifies intent and returns a depth-appropriate response - minimal for ui_tweak/new_feature on a known path, focused for bug_fix/refactor, deep for debug/discovery.","For discovery/inventory questions, treat `subtree_memory_index`, `discovery_signal`, and `semantic_candidates` as Pathrule evidence before filesystem fallback. Semantic candidates are not answers or rules: call pathrule_read_memory(id) and inspect the body before citing or following one.","The response tells you `next_required_action.primary_files` when the router is confident \u2014 edit those directly. For full memory/rule bodies: pathrule_read_memory(id) / pathrule_read_rule(id).","Obey every rule the hooks surface (advisory + strict). Apply every memory whose title looks relevant \u2014 fetch the body only when you want to cite or follow it.","Treat existing local edits as protected user/team work: inspect before touching overlapping files, never revert unrelated changes, and keep edits scoped to the user's request."],during:["Path-first writes: write_memory / write_rule / write_skill take a node_path string (e.g. '/apps/mobile'). Target the most specific path; missing nodes auto-create.","Never use local file-based memory (~/.claude/memory/, MEMORY.md). Pathrule is the single source of truth for all persistent knowledge.","After every write, summarise what you did in natural language \u2014 don't paste raw tool JSON."],after:["Log EVERY file-modifying response with pathrule_log_activity. Trigger: did you modify files? \u2192 log it. Required fields: domain, action, scope, subjects (\u22645 keywords), files_touched, task_summary."]},kl=pl(Rn);function bl(){let t=["# Pathrule Protocol","","This workspace uses Pathrule MCP. Follow this protocol on EVERY task.","","## BEFORE \u2014 mandatory first steps",""],e=1;for(let r of Rn.before)t.push(`${e}. ${r}`),e++;t.push("","## DURING \u2014 constraints while coding","");for(let r of Rn.during)t.push(`${e}. ${r}`),e++;t.push("","## AFTER \u2014 mandatory after every file modification","");for(let r of Rn.after)t.push(`${e}. ${r}`),e++;return t.push(""),t.join(`
59
+ `)}var eg=["pathrule-hook.js","pathrule_log_activity"];function tg(){return He().hooks}function rg(){return di(He())}function ng(){return pi(He())}function xn(t){return t?eg.some(e=>t.includes(e)):false}function br(t){let e=[];for(let r of t){let n=(r.hooks??[]).filter(s=>!xn(s.command));n.length!==0&&e.push({...r,hooks:n});}return e}function Pn(t){let e={};if(t&&t.trim().length>0)try{e=JSON.parse(t);}catch{e={_backup:t};}e.hooks||(e.hooks={});let r=false;for(let[n,s]of Object.entries(tg())){let i=e.hooks[n],o=Array.isArray(i)?i:[],a=o.filter(u=>(u.hooks??[]).some(d=>xn(d.command))),l=br(o);a.length===s.length&&a.every((u,d)=>{let p=s[d];if(!p)return false;let h=u.hooks,f=p.hooks;return (u.matcher??"")===(p.matcher??"")&&h.length===f.length&&h.every((m,_)=>m.command===f[_]?.command)})||(e.hooks[n]=[...l,...s],r=true);}return {body:JSON.stringify(e,null,2)+`
60
+ `,changed:r}}function vl(t,e){let r={version:1};if(t&&t.trim().length>0)try{r=JSON.parse(t);}catch{r={version:1,_backup:t};}typeof r.version!="number"&&(r.version=1),(!r.hooks||typeof r.hooks!="object")&&(r.hooks={});let n=e?.uninstall===true,s=false;if(n){for(let a of Object.keys(r.hooks)){let l=r.hooks[a];if(!Array.isArray(l))continue;let c=br(l);c.length!==l.length&&(c.length===0?delete r.hooks[a]:r.hooks[a]=c,s=true);}let i=Object.keys(r).filter(a=>a!=="version"&&a!=="hooks"),o=Object.keys(r.hooks);return i.length===0&&o.length===0?{body:"",changed:true}:{body:JSON.stringify(r,null,2)+`
61
+ `,changed:s}}for(let[i,o]of Object.entries(rg())){let a=r.hooks[i],l=Array.isArray(a)?a:[],c=l.filter(p=>(p.hooks??[]).some(h=>xn(h.command))),u=br(l);c.length===o.length&&c.every((p,h)=>{let f=o[h];return f?(p.matcher??"")===(f.matcher??"")&&p.hooks.length===f.hooks.length&&p.hooks.every((m,_)=>m.command===f.hooks[_]?.command):false})&&u.length===l.length-c.length||(r.hooks[i]=[...u,...o],s=true);}return {body:JSON.stringify(r,null,2)+`
62
+ `,changed:s}}function Sl(t,e){let r={};if(t&&t.trim().length>0)try{r=JSON.parse(t);}catch{r={_backup:t};}(!r.hooks||typeof r.hooks!="object")&&(r.hooks={});let n=e?.uninstall===true,s=false;if(n){for(let a of Object.keys(r.hooks)){let l=r.hooks[a];if(!Array.isArray(l))continue;let c=br(l);c.length!==l.length&&(c.length===0?delete r.hooks[a]:r.hooks[a]=c,s=true);}let i=Object.keys(r).filter(a=>a!=="hooks"),o=Object.keys(r.hooks);return i.length===0&&o.length===0?{body:"",changed:true}:{body:JSON.stringify(r,null,2)+`
63
+ `,changed:s}}for(let[i,o]of Object.entries(ng())){let a=r.hooks[i],l=Array.isArray(a)?a:[],c=l.filter(p=>(p.hooks??[]).some(h=>xn(h.command))),u=br(l);c.length===o.length&&c.every((p,h)=>{let f=o[h];return f?(p.matcher??"")===(f.matcher??"")&&p.hooks.length===f.hooks.length&&p.hooks.every((m,_)=>m.command===f.hooks[_]?.command):false})&&u.length===l.length-c.length||(r.hooks[i]=[...u,...o],s=true);}return {body:JSON.stringify(r,null,2)+`
64
+ `,changed:s}}var Cl="# >>> Pathrule managed (codex hook activation) >>>",hi="# <<< Pathrule managed <<<",yl=[Cl,"[features]","codex_hooks = true",hi,""].join(`
65
+ `);function Tn(t,e){let r=(t??"").replace(/\r\n/g,`
66
+ `),n=r.indexOf(Cl),s=r.indexOf(hi),i=r;if(n>=0&&s>n){let a=r.slice(s+hi.length).replace(/^\n+/,"");i=(r.slice(0,n).trimEnd()+(a?`
67
+
68
+ ${a}`:"")).trimEnd();}else i=r.trimEnd();if(e?.uninstall===true){let a=i.length>0?`${i}
69
+ `:"";return {body:a,changed:a!==r}}let o=i.length>0?`${i}
70
+
71
+ ${yl}`:yl;return r===o?{body:r,changed:false}:{body:o,changed:true}}var sg={profile:80,organization:100,workspace:120},ig=new Set(["pathrule","pathrule admin","pathrule support","pathrule security"]),og=new Set(["admin","administrator","security","support","system"]),El=/[\u0000-\u001f\u007f-\u009f]/,ag=/[\u0000-\u001f\u007f-\u009f]/g,lg=/<\/?[a-z][^>]*>/i,cg=/(^|\s)(https?:\/\/|javascript:|data:|mailto:)/i,ug=/^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)+$/i;function dg(t){return t.replace(/\s+/g," ").trim()}function fi(t,e){if(El.test(t))return {ok:false,reason:"control_chars"};let r=dg(t);if(r.length===0)return {ok:false,reason:"empty"};if(Array.from(r).length>sg[e])return {ok:false,reason:"too_long"};if(lg.test(r))return {ok:false,reason:"html_like"};if(cg.test(r))return {ok:false,reason:"url_like"};if(e==="profile"&&ug.test(r))return {ok:false,reason:"url_like"};let n=r.toLocaleLowerCase("en-US");return e!=="workspace"&&ig.has(n)?{ok:false,reason:"reserved"}:e==="profile"&&og.has(n)?{ok:false,reason:"reserved"}:{ok:true,value:r}}function Rl(t,e){if(typeof t!="string")return null;let r=fi(t,e);return r.ok?r.value??null:null}function xl(t,e=2048){if(typeof t!="string")return null;let r=t.trim();if(!r||r.length>e||El.test(r))return null;try{let n=new URL(r);return n.protocol!=="http:"&&n.protocol!=="https:"?null:n.toString()}catch{return null}}function An(t){return t.replace(ag,e=>e===`
72
+ `?"\\n":e==="\r"?"\\r":e===" "?"\\t":`\\u${e.charCodeAt(0).toString(16).padStart(4,"0")}`)}var H={web:"Pathrule Web",desktop:"Pathrule Desktop",cli:"Pathrule CLI"},st={web:"Pathrule in your browser. Manage cloud content from anywhere.",desktop:"The complete Pathrule app for macOS, Windows, and Linux.",cli:"Pathrule from your terminal. Headless, scriptable, fast."};var pg=["event_name","schema_version","occurred_at","surface","host_kind","app_version","os_family","country_iso","pseudonymous_install_id","session_local_id","duration_ms","result","blocking_reason","feature_tag"];function Pl(t){let e=new Set(pg);for(let r of Object.keys(t))if(!e.has(r))throw new Error(`telemetry_field_not_allowed:${r}`)}var hg=[{match:t=>t.some(e=>/^next\.config\.(js|mjs|ts)$/.test(ce(e))),title:"Next.js project",content:"This workspace uses Next.js as its React framework."},{match:t=>t.some(e=>/^nuxt\.config\.(js|ts)$/.test(ce(e))),title:"Nuxt project",content:"This workspace uses Nuxt as its Vue framework."},{match:t=>t.some(e=>/^tailwind\.config\.(js|mjs|ts|cjs)$/.test(ce(e))),title:"Uses Tailwind CSS",content:"This workspace uses Tailwind CSS for styling."},{match:t=>t.some(e=>/^vite\.config\.(js|ts|mjs)$/.test(ce(e))),title:"Vite build tool",content:"This workspace uses Vite as the build tool / dev server."},{match:t=>{let e=t.filter(n=>n.endsWith("/package.json")||n==="package.json"),r=t.some(n=>n.startsWith("packages/")||n.startsWith("apps/"));return e.length>2&&r},title:"Monorepo structure",content:"This workspace is a monorepo with multiple packages/apps, each with its own package.json."},{match:t=>t.some(e=>ce(e)==="Podfile"||e.endsWith(".xcodeproj")),title:"iOS/macOS native project",content:"This workspace contains iOS/macOS native code (Xcode project or CocoaPods)."},{match:t=>t.some(e=>ce(e)==="pubspec.yaml"),title:"Flutter project",content:"This workspace is a Flutter/Dart project."},{match:t=>t.some(e=>ce(e)==="Cargo.toml"),title:"Rust project",content:"This workspace contains Rust code (Cargo-managed)."},{match:t=>t.some(e=>ce(e)==="go.mod"),title:"Go project",content:"This workspace is a Go module."},{match:t=>t.some(e=>/^tsconfig(\.\w+)?\.json$/.test(ce(e))),title:"TypeScript project",content:"This workspace uses TypeScript."},{match:t=>t.some(e=>ce(e)==="docker-compose.yml"||ce(e)==="docker-compose.yaml"||ce(e)==="Dockerfile"),title:"Docker containerization",content:"This workspace uses Docker for containerization."},{match:t=>t.some(e=>e.startsWith(".github/workflows/")),title:"GitHub Actions CI/CD",content:"This workspace uses GitHub Actions for CI/CD."}];function ce(t){let e=t.split("/");return e[e.length-1]??t}function gi(t){return hg.filter(e=>e.match(t)).map(e=>({title:e.title,content:e.content}))}function mi(t){let e=new Map,r=0,n=t.split("---").filter(s=>s.trim().length>0);for(let s of n){if(r>=1e4)break;r++;let i=s.split(`
73
+ `).map(o=>o.trim()).filter(o=>o.length>0&&!o.startsWith("commit ")&&!o.startsWith("Author:"));if(!(i.length>20||i.length<2))for(let o=0;o<i.length;o++)for(let a=o+1;a<i.length;a++){let l=i[o],c=i[a],[u,d]=l<c?[l,c]:[c,l],p=`${u}\0${d}`;e.set(p,(e.get(p)??0)+1);}}return [...e.entries()].map(([s,i])=>{let[o,a]=s.split("\0");return {path_a:o,path_b:a,weight:i}}).sort((s,i)=>i.weight-s.weight).slice(0,1e4)}var U={"claude-code":{id:"claude-code",label:"Claude Code",skillsDir:".claude/skills",detectFile:".claude",supported:true},cursor:{id:"cursor",label:"Cursor",skillsDir:".cursor/skills",detectFile:".cursor",supported:true},windsurf:{id:"windsurf",label:"Windsurf",skillsDir:".windsurf/skills",detectFile:".windsurf",supported:true},codex:{id:"codex",label:"Codex",skillsDir:".codex/skills",detectFile:".codex",supported:true}},In=["claude-code"];function _i(t){return U[t]??null}function Tl(t){let e=[];for(let r of t){let n=_i(r);n&&n.supported&&e.push(n);}return e}var fg="skill";function On(t){let e=(t||"").toLowerCase().normalize("NFKD").replace(/[\u0300-\u036f]/g,"").replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");return e?e.slice(0,80):fg}function Al(t,e){let r=On(t),n=e.replace(/-/g,"").slice(0,8);return `${r}-${n}`}var Il="[redacted]",gg="[redacted-email]",wi="[redacted-path]",mg=/(authorization|password|secret|token|api[_-]?key|access[_-]?token|refresh[_-]?token|pair[_-]?token|session|cookie|env|environment|cache|content|body|file[_-]?content)/i,_g=/(^|[_-])(path|paths|cwd|directory|root|repo|local_root|workspace_root)([_-]|$)/i,wg=/\b(?:Bearer\s+)?[A-Za-z0-9._~+/=-]{24,}\b/g,yg=/\b[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}\b/gi,kg=/(?:~|\/Users\/[^/\s]+|\/home\/[^/\s]+|\/var\/folders\/[^\s"']+|\/tmp\/[^\s"']+)/g,bg=/[A-Za-z]:\\(?:[^\\\s"']+\\?)+/g;function yi(t,e=""){return t&&(Sg(e)?wi:vg(e)?Il:t.replace(yg,gg).replace(kg,wi).replace(bg,wi).replace(wg,Il))}function Ol(t){let e=JSON.stringify(t),r=[/Bearer\s+[A-Za-z0-9._~+/=-]+/i,/access[_-]?token["':\s]+[A-Za-z0-9._~+/=-]{8,}/i,/refresh[_-]?token["':\s]+[A-Za-z0-9._~+/=-]{8,}/i,/pair[_-]?token["':\s]+[A-Za-z0-9._~+/=-]{8,}/i,/\/Users\/[^/"']+/,/\/home\/[^/"']+/,/[A-Za-z]:\\[^"']+/];for(let n of r)if(n.test(e))throw new Error(`support bundle contains sensitive material matching ${n}`)}function vg(t){return mg.test(t)}function Sg(t){return _g.test(t)}var qe={free:{workspaces:2,memories:150,rules:75,seatsExtra:0,basePriceMonthly:0,basePriceYearly:0,perSeatMonthly:0},starter:{workspaces:3,memories:2500,rules:2500,seatsExtra:-1,basePriceMonthly:12,basePriceYearly:10,perSeatMonthly:6},pro:{workspaces:-1,memories:1e4,rules:1e4,seatsExtra:-1,basePriceMonthly:24,basePriceYearly:20,perSeatMonthly:6},business:{workspaces:-1,memories:5e4,rules:5e4,seatsExtra:-1,basePriceMonthly:48,basePriceYearly:40,perSeatMonthly:6},enterprise:{workspaces:-1,memories:-1,rules:-1,seatsExtra:-1,basePriceMonthly:0,basePriceYearly:0,perSeatMonthly:0}};function $l(t,e){if(!t)return {failure:{error:"organization_not_found"},billingImpact:$n(),billingRequirement:null};if(t.plan==="free")return {failure:{error:"free_plan_invites_disabled"},billingImpact:$n(),billingRequirement:null};if(["past_due","unpaid","canceled"].includes(t.subscription_status??""))return {failure:{error:"subscription_not_invitable"},billingImpact:$n(),billingRequirement:null};if(t.trial_status==="active"&&t.trial_seat_cap){let r=e+1,n=t.paid_extra_seats??0,s=t.trial_seat_cap+n,i=r>t.trial_seat_cap,o=Math.max(0,r-t.trial_seat_cap),a={seat_effect:i?r>s?"paid_extra_required":"paid_extra_available":"included",may_use_paid_extra_seat:i,active_seats_before:e,target_active_seats:r,included_seat_cap:t.trial_seat_cap,current_paid_extra_seats:n,required_paid_extra_seats:o};return r>s?{failure:null,billingImpact:a,billingRequirement:{targetSeats:r,requiredPaidExtraSeats:o,giftSeatCap:t.trial_seat_cap,currentPaidExtraSeats:n}}:{failure:null,billingImpact:a,billingRequirement:null}}return {failure:null,billingImpact:$n(),billingRequirement:null}}function $n(){return {seat_effect:"not_applicable",may_use_paid_extra_seat:false}}K();var Ag={"claude-code":["CLAUDE.md",".claude/rules/pathrule-protocol.md",".claude/settings.json"],cursor:[".cursorrules",".cursor/rules/pathrule-protocol.mdc",".cursor/hooks.json"],codex:["codex.md","AGENTS.md",".codex/hooks.json",".codex/config.toml"],windsurf:[".windsurfrules",".windsurf/rules/pathrule-protocol.md"]};async function Ig(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function ze(t){let e=Object.keys(U);return (await Promise.all(e.map(async n=>{for(let s of Ag[n])if(await Ig(join(t,s)))return n;return null}))).filter(n=>n!==null)}function Nn(t){let e=new Set(Object.keys(U)),r=(t.selected??[]).filter(n=>typeof n=="string"&&e.has(n));return r.length>0?r:t.detected.length>0?[...t.detected]:[...t.fallback]}ds();Xr();B();var tw=new Map([["-h","--help"],["-v","--version"]]);function Pu(t,e=process.env){let r=[],n={json:false,yes:false,noOpen:false,deviceCode:false,browserCallback:false,help:false,version:false,color:e.NO_COLOR!=="1"&&e.NO_COLOR!=="true",interactive:e.CI!=="true"};for(let o of t)switch(tw.get(o)??o){case "--json":n.json=true,n.color=false,n.interactive=false;break;case "--yes":n.yes=true;break;case "--no-open":n.noOpen=true;break;case "--device-code":n.deviceCode=true;break;case "--browser-callback":n.browserCallback=true;break;case "--help":n.help=true;break;case "--version":n.version=true;break;case "--no-color":n.color=false;break;default:r.push(o);break}let s=rw(r);return {command:s[0]??"help",positional:s,flags:n}}function rw(t){let e=t[0],r=t[1];return !e?.startsWith("/")||!r||!["memory","rule","skill","search"].includes(r)?t:[r,...t.slice(2),e]}Ge();B();K();var iw=randomUUID(),ow=20,aw=1500;function $u(t){return t==="telemetry.enabled"||t==="telemetry.id"}async function Nu(t,e){if(t==="telemetry.enabled")return co(e,await uo(e));let r=await gs(e);return {key:t,value:r.pseudonymous_install_id,source:"config",configurable:true}}async function Du(t,e){let r=hw(t);if(r===null)throw new Error("invalid_telemetry_enabled");let n=await gs(e);return await po({...n,telemetry_enabled:r},e),co(e,{...n,telemetry_enabled:r})}async function ju(t){let r={...await gs(t),pseudonymous_install_id:randomUUID()};return await po(r,t),{key:"telemetry.id",value:r.pseudonymous_install_id,source:"config",configurable:true}}async function Qr(t,e){let r=co(t,await uo(t));if(!r.value)return {recorded:false,reason:r.source};let n=await gs(t),s={event_name:e.eventName,schema_version:1,occurred_at:new Date().toISOString(),surface:"cli",host_kind:"cli-bridge",app_version:e.appVersion,os_family:process.platform,pseudonymous_install_id:n.pseudonymous_install_id,session_local_id:iw,result:e.result,...typeof e.durationMs=="number"?{duration_ms:e.durationMs}:{},...e.blockingReason?{blocking_reason:e.blockingReason}:{},...e.featureTag?{feature_tag:e.featureTag}:{}};Pl(s),fw(s);let i=Lu(t);return await mkdir(dirname(i),{recursive:true,mode:M}),await chmod(dirname(i),M).catch(()=>{}),await appendFile(i,`${JSON.stringify(s)}
74
+ `,{encoding:"utf8",mode:O}),await chmod(i,O).catch(()=>{}),await dw(t).catch(()=>{}),{recorded:true}}async function lo(t,e){try{let r=lw(e.command,e.exitCode),n=e.exitCode===0?"ok":e.exitCode===64?"blocked":"failed";r&&await Qr(t,{eventName:r,result:n,appVersion:e.appVersion,durationMs:e.durationMs,featureTag:cw(e.command),blockingReason:e.exitCode===64?"usage_or_preflight_blocked":void 0});let s=uw(e.command,e.exitCode);s&&await Qr(t,{eventName:"dead_end_seen",result:"blocked",appVersion:e.appVersion,durationMs:e.durationMs,featureTag:s.featureTag,blockingReason:s.blockingReason});}catch{}}function lw(t,e){switch(t){case "help":case "version":case "status":return "surface_viewed";case "setup":return e===0?"cli_setup_completed":"cli_setup_started";case "doctor":return e===0?null:"cli_doctor_failed";case "bridge":return e===0?"cli_bridge_pair_succeeded":"cli_bridge_pair_started";case "sync":return e===0?"agent_sync_succeeded":null;case "billing":case "team":case "upgrade":case "reactivate":case "open":return "web_admin_route_opened_from_cli";case "preflight":return e===0?null:"cli_preflight_blocked";default:return null}}function cw(t){return t==="bridge"?"cli_bridge":t==="setup"?"cli_setup":t==="doctor"?"cli_doctor":t==="sync"?"agent_sync":["billing","team","upgrade","reactivate","open"].includes(t)?"web_route":t==="preflight"?"preflight":"surface"}function uw(t,e){return e===0?null:t==="doctor"?{featureTag:"cli_doctor",blockingReason:"doctor_cannot_repair"}:t==="preflight"?{featureTag:"preflight",blockingReason:"preflight_blocked"}:t==="setup"?{featureTag:"cli_setup",blockingReason:"cli_setup_incomplete"}:t==="bridge"?{featureTag:"cli_bridge",blockingReason:"bridge_pair_failed"}:["billing","team","upgrade","reactivate","open"].includes(t)?{featureTag:"web_route",blockingReason:"web_route_not_opened"}:null}function co(t,e){return t.CI==="true"?{key:"telemetry.enabled",value:false,source:"ci",configurable:false}:t.NO_TELEMETRY==="1"?{key:"telemetry.enabled",value:false,source:"env",configurable:false}:typeof e?.telemetry_enabled=="boolean"?{key:"telemetry.enabled",value:e.telemetry_enabled,source:"config",configurable:true}:{key:"telemetry.enabled",value:true,source:"default",configurable:true}}async function gs(t){let e=await uo(t);if(e)return e;let r={schema_version:1,pseudonymous_install_id:randomUUID()};return await po(r,t),r}async function uo(t){try{let e=JSON.parse(await readFile(Mu(t),"utf8"));if(e&&typeof e=="object"&&e.schema_version===1&&typeof e.pseudonymous_install_id=="string")return e}catch(e){if(e.code!=="ENOENT")throw e}return null}async function po(t,e){let r=Mu(e);await mkdir(dirname(r),{recursive:true,mode:M}),await chmod(dirname(r),M).catch(()=>{});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(t,null,2),{encoding:"utf8",mode:O}),await chmod(n,O).catch(()=>{}),await rename(n,r);}function Mu(t){return join(A(t).home,"telemetry.json")}function Lu(t){return join(A(t).logsDir,"telemetry-events.jsonl")}async function dw(t){let e=pw(t);if(!e)return;let r=Lu(t),n;try{n=(await readFile(r,"utf8")).split(`
75
+ `).filter(Boolean);}catch(a){if(a.code==="ENOENT")return;throw a}if(n.length===0)return;let s=n.slice(0,ow).map(a=>JSON.parse(a)),i=new AbortController,o=setTimeout(()=>i.abort(),aw);try{let a=await fetch(e.url,{method:"POST",headers:{"Content-Type":"application/json",apikey:e.anonKey,Authorization:`Bearer ${e.anonKey}`},body:JSON.stringify({events:s}),signal:i.signal});if(!a.ok)return;let l=await a.json().catch(()=>null),c=typeof l?.accepted=="number"?l.accepted:s.length,u=Math.max(0,Math.min(c,s.length)),d=n.slice(u).join(`
76
76
  `);await writeFile(r,d?`${d}
77
- `:"",{encoding:"utf8",mode:O}),await chmod(r,O).catch(()=>{});}finally{clearTimeout(o);}}function X_(t){let e=t.SUPABASE_URL??t.VITE_SUPABASE_URL,r=t.SUPABASE_ANON_KEY??t.VITE_SUPABASE_ANON_KEY;return !e||!r?null:{url:`${e.replace(/\/$/,"")}/functions/v1/telemetry-ingest`,anonKey:r}}function Z_(t){if(!t)return null;let e=t.toLowerCase().trim();return e==="true"?true:e==="false"?false:null}function Q_(t){let e=JSON.stringify(t),r=[/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/i,/(?:^|["\s])\/Users\/[^"\s]+/,/(?:^|["\s])\/home\/[^"\s]+/,/[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/,/ghp_[A-Za-z0-9_]{20,}/];for(let n of r)if(n.test(e))throw new Error(`telemetry_payload_contains_sensitive_material:${n}`)}var ew=new Set(["manual","notify","auto"]);function $u(t,e){if(t.CI==="true"||t.NO_UPDATE_CHECK==="1")return {key:"update.policy",value:"manual",source:"ci",configurable:false};let r=co(t.PATHRULE_UPDATE_POLICY);if(r)return {key:"update.policy",value:r,source:"env",configurable:false};let n=co(e);return n?{key:"update.policy",value:n,source:"config",configurable:true}:{key:"update.policy",value:"notify",source:"default",configurable:true}}function Nu(t){return typeof t=="boolean"?{key:"suggestions.desktop",value:t,source:"config",configurable:true}:{key:"suggestions.desktop",value:true,source:"default",configurable:true}}async function kt(t,e){if(Ru(t))return xu(t,e);if(t!=="update.policy"&&t!=="suggestions.desktop")throw new Error("unsupported_config_key");try{let{session:r}=await C(e),n=await ne(r.user.id,e);return Ou(t,e,n)}catch{return Ou(t,e)}}async function uo(t,e,r){if(t==="telemetry.enabled")return Pu(e,r);if(t==="telemetry.id")throw new Error("use_config_reset_telemetry_id");if(t!=="update.policy"&&t!=="suggestions.desktop")throw new Error("unsupported_config_key");let{session:n}=await C(r);if(t==="update.policy"){let s=co(e);if(!s)throw new Error("invalid_update_policy");return await ie(n.user.id,{update_policy:s},r),$u(r,s)}let i=tw(e);if(i===null)throw new Error("invalid_desktop_suggestions");return await ie(n.user.id,{desktop_suggestions:i},r),Nu(i)}async function po(t,e){if(t==="telemetry-id"||t==="telemetry.id")return Tu(e);throw new Error("unsupported_config_reset_key")}function co(t){if(!t)return null;let e=t.toLowerCase().trim();return ew.has(e)?e:null}function tw(t){if(!t)return null;let e=t.toLowerCase().trim();return e==="true"?true:e==="false"?false:null}function Ou(t,e,r){return t==="update.policy"?$u(e,r?.update_policy):Nu(r?.desktop_suggestions)}Ge();F();Ee();async function Re(t){let{session:e,supabase:r}=await C(t),n=await D(t);if(!n)return [];let{data:i,error:s}=await r.from("workspaces").select("id, organization_id, name, access_mode, git_remote_url, git_owner, git_repo, user_workspace_paths!left(local_root_path, user_id)").eq("organization_id",n.id).is("archived_at",null);if(s)throw s;let o=await ne(e.user.id,t),a=[];for(let l of i??[]){let u=(l.user_workspace_paths??[]).find(d=>d.user_id===e.user.id)??null;a.push({id:l.id,organization_id:l.organization_id,name:l.name,access_mode:l.access_mode,git_remote_url:l.git_remote_url,git_owner:l.git_owner,git_repo:l.git_repo,local_root_path:u?.local_root_path??null,current:o.current_workspace_id===l.id});}if(a.sort((l,c)=>l.name.localeCompare(c.name)),!o.current_workspace_id&&a.length===1){let l=a[0];l&&(a[0]={...l,current:true});}return a}async function M(t){let e=await Re(t),r=e.find(n=>n.current);return r||(e.length===1?e[0]??null:null)}async function Zr(t,e){let{session:r}=await C(e),i=(await Re(e)).find(s=>s.id===t||s.name===t);if(!i)throw new Error("workspace_not_found");return await ie(r.user.id,{current_workspace_id:i.id},e),{...i,current:true}}async function bt(t,e,r){let{session:n,supabase:i}=await C(r),s=await D(r);if(!s)throw new Error("org_required");let o=ds(t,"workspace");if(!o.ok||!o.value)throw new Error(`unsafe_workspace_name:${o.reason??"invalid"}`);let{data:a,error:l}=await i.from("workspaces").insert({organization_id:s.id,name:o.value,access_mode:"organization",git_remote_url:null,git_provider:null,git_owner:null,git_repo:null,detected_at:null}).select("id, organization_id, name, access_mode").single();if(l||!a)throw new Error(l?.message??"workspace_create_failed");let{error:c}=await i.from("user_workspace_paths").insert({user_id:n.user.id,workspace_id:a.id,local_root_path:e,watcher_enabled:true});if(c)throw new Error(c.message);let u=await Qi(i,a.id,o.value);return await ie(n.user.id,{current_org_id:s.id,current_workspace_id:a.id},r),{workspace:{id:a.id,organization_id:a.organization_id,name:a.name,access_mode:a.access_mode,local_root_path:e,current:true},local_root_path:e,root_node_created:!("error"in u)}}async function xe(t,e,r){let{session:n,supabase:i}=await C(r),s=t?await ju(t,r):await M(r);if(!s)throw new Error("workspace_required");let{error:o}=await i.from("user_workspace_paths").upsert({user_id:n.user.id,workspace_id:s.id,local_root_path:e,watcher_enabled:true},{onConflict:"user_id,workspace_id"});if(o)throw o;return await ie(n.user.id,{current_org_id:s.organization_id,current_workspace_id:s.id},r),{workspace:{...s,local_root_path:e,current:true},local_root_path:e,previous_local_root_path:s.local_root_path}}async function Qr(t,e){let{session:r,supabase:n}=await C(e),i=t?await ju(t,e):await M(e);if(!i)throw new Error("workspace_required");let{error:s}=await n.from("user_workspace_paths").delete().eq("user_id",r.user.id).eq("workspace_id",i.id);if(s)throw s;return {...i,local_root_path:null}}async function ju(t,e){let n=(await Re(e)).find(i=>i.id===t||i.name===t);if(!n)throw new Error("workspace_not_found");return n}F();function Mu(t,e=false){return e?true:t.length<=1200&&t.split(/\r?\n/).length<=24}function Lu(t,e={}){if(e.forceWeb)return {...t.open_targets.find(r=>r.kind==="web"),reason:"forced"};if(e.preferDesktopApp){let r=t.open_targets.find(n=>n.kind==="desktop-app");return r||{...t.open_targets.find(n=>n.kind==="web"),reason:"fallback"}}return t.open_targets[0]??{kind:"web",url:t.url,label:`Open ${t.kind} in Pathrule Web`,reason:"preferred"}}async function en(t,e,r={}){let n=await iw(e),{supabase:i}=await C(e),s=go(r.limit),o=cw(r.path);if(t==="memory"){let{data:c,error:u}=await i.from("memories").select("id, title, content, updated_at, nodes(id, relative_path)").eq("workspace_id",n.id).eq("status","active").order("updated_at",{ascending:false}).limit(s*3);if(u)throw u;return (c??[]).map(d=>fo("memory",n.id,d,e)).filter(d=>ho(d.path,o)).slice(0,s)}if(t==="rule"){let{data:c,error:u}=await i.from("rules").select("id, name, content, updated_at, node_rules(nodes(id, relative_path))").eq("workspace_id",n.id).order("updated_at",{ascending:false}).limit(s*3);if(u)throw u;return (c??[]).map(d=>fo("rule",n.id,d,e)).filter(d=>ho(d.path,o)).slice(0,s)}let{data:a,error:l}=await i.from("skills").select("id, name, description, content, updated_at, node_skills(nodes!node_skills_node_id_fkey(id, relative_path))").eq("workspace_id",n.id).order("updated_at",{ascending:false}).limit(s*3);if(l)throw l;return (a??[]).map(c=>fo("skill",n.id,c,e)).filter(c=>ho(c.path,o)).slice(0,s)}async function mo(t,e,r={}){let n=t.trim().toLowerCase();if(!n)throw new Error("search_query_required");let i=r.types?.length?r.types:["memory","rule","skill"];return (await Promise.all(i.map(o=>en(o,e,{path:r.path,limit:Math.max(go(r.limit),50)})))).flat().map(o=>({item:o,score:uw(o,n)})).filter(o=>o.score>0).sort((o,a)=>a.score-o.score||(a.item.updated_at??"").localeCompare(o.item.updated_at??"")).slice(0,go(r.limit)).map(o=>o.item)}async function _o(t,e,r){let n=await en(t,r,{limit:100}),i=e.toLowerCase(),s=n.find(d=>d.id===e||d.title.toLowerCase()===i);if(!s)throw new Error(`${t}_not_found`);let{supabase:o}=await C(r),a=t==="memory"?"memories":t==="rule"?"rules":"skills",{data:l,error:c}=await o.from(a).select("content").eq("id",s.id).maybeSingle();if(c)throw c;let u=typeof l?.content=="string"?l.content:"";return {...s,content:u}}function vt(t,e,r,n,i){let s=(n.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"");return i?`${s}/workspace/${encodeURIComponent(t)}/node/${encodeURIComponent(i)}/${e}/${encodeURIComponent(r)}`:`${s}/workspace/${encodeURIComponent(t)}/${e}/${encodeURIComponent(r)}`}function nw(t,e,r,n){let i=n?`/node/${encodeURIComponent(n)}`:"";return `pathrule://workspace/${encodeURIComponent(t)}${i}/${e}/${encodeURIComponent(r)}`}async function iw(t){let e=await M(t);if(!e)throw new Error("workspace_required");return e}function fo(t,e,r,n){let i=typeof r.title=="string"?r.title:typeof r.name=="string"?r.name:String(r.id),s=typeof r.content=="string"?r.content:typeof r.description=="string"?r.description:"",o=aw(t,r),a=lw(t,r),l=vt(e,t,String(r.id),n,a);return {id:String(r.id),kind:t,title:i,path:o,node_id:a,preview:dw(s),updated_at:typeof r.updated_at=="string"?r.updated_at:null,url:l,open_targets:[sw(e,t,String(r.id),n,a),ow(e,t,String(r.id),a)]}}function sw(t,e,r,n,i){return {kind:"web",url:vt(t,e,r,n,i),label:`Open ${e} in Pathrule Web`,reason:"preferred"}}function ow(t,e,r,n){return {kind:"desktop-app",url:nw(t,e,r,n),label:`Open ${e} in Pathrule Desktop`,reason:"fallback"}}function aw(t,e){if(t==="memory"){let s=e.nodes;return typeof s?.relative_path=="string"?s.relative_path:null}let i=e[t==="rule"?"node_rules":"node_skills"]?.[0]?.nodes?.relative_path;return typeof i=="string"?i:null}function lw(t,e){if(t==="memory"){let s=e.nodes;return typeof s?.id=="string"?s.id:null}let i=e[t==="rule"?"node_rules":"node_skills"]?.[0]?.nodes?.id;return typeof i=="string"?i:null}function cw(t){if(!t)return null;let e=t.trim();return e?e.startsWith("/")?e:`/${e}`:null}function ho(t,e){return e?t?t===e||t.startsWith(`${e}/`):false:true}function uw(t,e){let r=t.title.toLowerCase(),n=t.preview.toLowerCase(),i=t.path?.toLowerCase()??"",s=0;return r===e&&(s+=100),r.includes(e)&&(s+=30),i.includes(e)&&(s+=15),n.includes(e)&&(s+=10),s}function dw(t){return t.replace(/\s+/g," ").trim().slice(0,160)}function go(t){return !t||!Number.isFinite(t)?20:Math.min(Math.max(Math.trunc(t),1),100)}F();async function bo(t,e,r){let{session:n,supabase:i}=await C(r),s=await M(r);if(!s)throw new Error("workspace_required");let o={supabase:i,userId:n.user.id,workspaceId:s.id};if(t==="memory"){let c=e,u=await Ja(o,{node_path:rr(c.path),title:wo(c.title,"memory_title_required"),content:yo(c.body),source:"manual",allow_duplicate:c.allowDuplicate});if(!u.ok)throw new Error(u.error.message);return {item:{id:u.data.id,kind:t,title:u.data.title,path:rr(c.path),url:vt(s.id,t,u.data.id,r),open_targets:[ko(s.id,t,u.data.id,r)],content_length:u.data.content.length,source:u.data.source},warnings:u.warnings??[]}}if(t==="rule"){let c=e,u=await Ka(o,{node_path:rr(c.path),name:wo(c.name,"rule_name_required"),content:yo(c.body),priority:c.priority,scope_type:c.scopeType,allow_duplicate:c.allowDuplicate});if(!u.ok)throw new Error(u.error.message);return {item:{id:u.data.id,kind:t,title:u.data.name,path:rr(c.path),url:vt(s.id,t,u.data.id,r),open_targets:[ko(s.id,t,u.data.id,r)],content_length:u.data.content.length,priority:u.data.priority,scope_type:u.data.scopeType},warnings:u.warnings??[]}}let a=e,l=await Va(o,{node_path:rr(a.path),name:wo(a.name,"skill_name_required"),description:Wu(a.description),content:yo(a.body),source:"manual"});if(!l.ok)throw new Error(l.error.message);return {item:{id:l.data.id,kind:t,title:l.data.name,path:rr(a.path),url:vt(s.id,t,l.data.id,r),open_targets:[ko(s.id,t,l.data.id,r)],content_length:l.data.content.length,description:l.data.description,source:l.data.source},warnings:l.warnings??[]}}function Uu(t,e){if(t!=="skill")return "";let r=e,n=Wu(r.description)??"Describe when to use this skill.";return ["---",`name: ${r.name.trim()}`,`description: ${n}`,"---","","# Overview","","Explain when this skill should be used.","","## Instructions","","- Add the steps, constraints, and guardrails this skill should enforce.",""].join(`
78
- `)}function rr(t){let e=t.trim();if(!e)throw new Error("content_path_required");return e.startsWith("/")?e:`/${e}`}function wo(t,e){let r=t.trim();if(!r)throw new Error(e);return r}function yo(t){let e=t.replace(/\r\n/g,`
79
- `);if(!e.trim())throw new Error("content_body_required");return e}function Wu(t){let e=t?.trim();return e||null}function ko(t,e,r,n){return {kind:"web",url:vt(t,e,r,n),label:`Open ${e} in Pathrule Web`,reason:"preferred"}}var Bu="ABCDEFGHJKLMNPQRSTUVWXYZ23456789",hw=16;function Fu(t=hw){if(t<12)throw new Error("bridge_pair_code_too_short");let e=randomBytes(t),r="";for(let n of e)r+=Bu[n%Bu.length];return r.match(/.{1,4}/g)?.join("-")??r}function Hu(t){let e=gw(t);return createHash("sha256").update("pathrule-bridge-pair-v1","utf8").update("\0","utf8").update(vo(t.pairCode),"utf8").update("\0","utf8").update(t.pairVerifier,"utf8").update("\0","utf8").update(e,"utf8").digest("base64url")}function gw(t){return JSON.stringify({daemon_session_id:tn(t.daemonSessionId,"daemon_session_id"),browser_profile_id:tn(t.browserProfileId,"browser_profile_id"),origin:mw(t.origin),user_id:tn(t.userId,"user_id")})}function vo(t){return tn(t,"pair_secret").replace(/[\s-]+/g,"").toUpperCase()}function mw(t){let e=tn(t,"origin"),r=new URL(e);if(r.protocol!=="https:"&&r.hostname!=="localhost")throw new Error("bridge_pair_origin_not_allowed");return r.pathname="",r.search="",r.hash="",r.toString().replace(/\/$/,"")}function tn(t,e){if(typeof t!="string"||t.trim()==="")throw new Error(`bridge_pair_${e}_required`);return t.trim()}K();F();var Cw=300*1e3,Y=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="BridgePairError";}code};async function Co(t){let e=t.user??await hi(t.env,t.verifyReauth!==false),r=Fu(),n=new Date(Date.now()+Cw).toISOString(),i={schema_version:1,pair_code_hash:zu(r),user_id:e.user_id,user_email:e.user_email,daemon_session_id:t.daemonSessionId,created_at:new Date().toISOString(),expires_at:n};return await Ew(t.env,i),{pair_code:r,expires_at:n,url:`${xw(t.env)}/connect`,daemon_session_id:t.daemonSessionId}}async function qu(t){let e=await Rw(t.env);if(!e)throw new Y("pair_code_missing");if(e.daemon_session_id!==t.daemonSessionId)throw await So(t.env),new Y("pair_code_stale");if(Date.parse(e.expires_at)<=Date.now())throw await So(t.env),new Y("pair_code_expired");if(e.pair_code_hash!==zu(t.pairCode))throw new Y("pair_code_invalid");let r=Hu({daemonSessionId:t.daemonSessionId,browserProfileId:t.browserProfileId,origin:t.origin,userId:e.user_id,pairCode:t.pairCode,pairVerifier:t.pairVerifier});return await So(t.env),{pair_token:r,daemon_session_id:t.daemonSessionId,user_id:e.user_id}}async function hi(t,e=true){let{session:r,supabase:n}=await C(t);if(e){let{data:i,error:s}=await n.rpc("verify_sensitive_action_grant",{p_action:"bridge_pair"});if(s)throw new Y("bridge_pair_reauth_check_failed",s.message);if(i!==true)throw new Y("bridge_pair_reauth_required","Run sensitive-action reauth for bridge_pair before pairing this browser.")}return {user_id:r.user.id,user_email:r.user.email}}async function Ew(t,e){let r=A(t).bridgePairFile;await mkdir(dirname(r),{recursive:true,mode:j});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(e,null,2),{encoding:"utf8",mode:O}),await rename(n,r);}async function Rw(t){try{return JSON.parse(await readFile(A(t).bridgePairFile,"utf8"))}catch{return null}}async function So(t){await unlink(A(t).bridgePairFile).catch(()=>{});}function zu(t){return createHash("sha256").update("pathrule-bridge-pair-code-v1","utf8").update("\0","utf8").update(vo(t),"utf8").digest("base64url")}function xw(t){return (t.PATHRULE_WEB_URL||t.VITE_PATHRULE_WEB_URL||"https://app.pathrule.io").replace(/\/+$/,"")}var gi="x-pathrule-pair-token",Ju="x-pathrule-browser-profile-id";function St(t){let e=Pw(t.headers,t.allowedOrigins);if(e)return e;let r=Eo(t.headers,"content-type");return !r||!/^application\/json(?:\s*;|$)/i.test(r)?{statusCode:415,reason:"json_content_type_required"}:t.requirePairToken!==false&&!Eo(t.headers,gi)?{statusCode:401,reason:"pair_token_required"}:null}function Ro(t,e){return !t||!mi(t,e)?null:{"Access-Control-Allow-Origin":t,"Access-Control-Allow-Headers":"Authorization, X-Pathrule-Pair-Token, X-Pathrule-Browser-Profile-Id, Content-Type","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Credentials":"false"}}function Pw(t,e){let r=Eo(t,"origin");return r?mi(r,e)?null:{statusCode:400,reason:"origin_not_allowed"}:{statusCode:400,reason:"origin_required"}}function mi(t,e){return e.some(r=>r===t)}function Ku(t,e={}){let r={daemon_present:true,protocol_version:t};return e.daemonSessionId&&(r.daemon_session_id=e.daemonSessionId),r}function Vu(t){let e=t.windowMs??6e4,r=Math.floor((t.nowMs??Date.now())/e);return `${t.origin}\0${t.ip}\0${r}`}function Eo(t,e){let r=t[e]??t[e.toLowerCase()],n=Array.isArray(r)?r[0]:r;return (typeof n=="string"?n.trim():"")||void 0}K();function Gu(t){return t==="modified"||t==="added"||t==="deleted"||t==="renamed"||t==="untracked"||t==="unknown"}function Yu(t){let e=t.nowMs??Date.now(),r=t.rows.filter(i=>t.currentUserId===null||i.user_id!==t.currentUserId).flatMap(i=>Aw(i,t.displayNamesByUserId??{},e)).sort($w),n=Math.max(0,e-(t.startedAtMs??e));return r.length===0?{decision:"allow",conflicts:[],source:t.source,latency_ms:n}:{decision:"ask",conflicts:r,message:Iw(r[0],e),source:t.source,latency_ms:n}}function Xu(t=Date.now()){return {decision:"ask",conflicts:[],message:"Pathrule could not verify teammate local state in time. Continue?",source:"degraded",latency_ms:Math.max(0,Date.now()-t)}}function Zu(t){return Array.isArray(t)?t.flatMap(e=>{if(!e||typeof e!="object")return [];let r=e,n=typeof r.relative_path=="string"?r.relative_path:"",i=typeof r.user_id=="string"?r.user_id:"",s=typeof r.workspace_id=="string"?r.workspace_id:"";if(!n||!i||!s)return [];let o=Gu(r.git_status)?r.git_status:"unknown";return [{workspace_id:s,user_id:i,runtime_id:typeof r.runtime_id=="string"?r.runtime_id:"unknown",relative_path:n,is_active:r.is_active===true,is_dirty:r.is_dirty===true,git_status:o,last_heartbeat_at:typeof r.last_heartbeat_at=="string"?r.last_heartbeat_at:null,last_local_write_at:typeof r.last_local_write_at=="string"?r.last_local_write_at:null,last_git_scan_at:typeof r.last_git_scan_at=="string"?r.last_git_scan_at:new Date(0).toISOString()}]}):[]}function Aw(t,e,r){let n=t.last_heartbeat_at?Date.parse(t.last_heartbeat_at):Number.NaN,i=t.is_active&&Number.isFinite(n)&&r-n<=3e4,s=t.is_dirty;return !i&&!s?[]:[{user_id:t.user_id,display_name:Qu(e[t.user_id]??"A teammate"),relative_path:t.relative_path,reason:i&&s?"active_dirty":i?"active":"dirty",git_status:t.git_status,last_heartbeat_at:t.last_heartbeat_at,last_local_write_at:t.last_local_write_at}]}function Iw(t,e){let r=Qu(t.display_name);if(t.reason==="active"||t.reason==="active_dirty")return `Pathrule caught a possible conflict. ${r} is actively working on this file. Continue?`;let n=Ow(t.last_local_write_at,e);return `Pathrule caught a possible conflict. ${r} changed this file ${n} and has not committed it yet. Continue?`}function Ow(t,e){let r=t?Date.parse(t):Number.NaN;if(!Number.isFinite(r))return "recently";let n=Math.max(0,e-r),s=60*6e4,o=24*s;if(n<s)return "recently";if(n<o){let l=Math.max(1,Math.floor(n/s));return `${l} ${l===1?"hour":"hours"} ago`}let a=Math.max(1,Math.floor(n/o));return `${a} ${a===1?"day":"days"} ago`}function $w(t,e){let r=i=>i.reason==="active"||i.reason==="active_dirty"?0:1,n=r(t)-r(e);return n!==0?n:t.relative_path.localeCompare(e.relative_path)}function Qu(t){let e=t.replace(/[\x00-\x1F\x7F]/g,"").trim();return !e||e.includes("@")||/^https?:\/\//i.test(e)?"A teammate":e.slice(0,80)}F();K();var Bw=".pathrule/managed-files.json";function td(t){return join(t,Bw)}function Po(t){let e=normalize(t).replace(/\\/g,"/").replace(/^\/+/,"");if(e==="."||e.length===0||e.startsWith("../")||e.includes("/../"))throw new Error(`Invalid managed file path: ${t}`);return e}async function _i(t){try{let e=await readFile(td(t),"utf8"),r=JSON.parse(e);if(r.schema_version!==1||!Array.isArray(r.files))return xo();let n=r.files.flatMap(i=>{if(!i||typeof i!="object")return [];let s=i;if(typeof s.path!="string"||!qw(s.owner)||typeof s.owner_version!="string"||typeof s.updated_at!="string")return [];try{return [{path:Po(s.path),owner:s.owner,owner_version:s.owner_version,updated_at:s.updated_at}]}catch{return []}});return {schema_version:1,files:sd(zw(n))}}catch(e){if(e.code==="ENOENT"||e instanceof SyntaxError)return xo();throw e}}async function wi(t){if(t.paths.length===0)return;let e=await _i(t.workspaceRoot),r=(t.now??new Date).toISOString(),n=new Map(e.files.map(i=>[i.path,i]));for(let i of t.paths){let s=Po(i);n.set(s,{path:s,owner:t.owner,owner_version:t.ownerVersion,updated_at:r});}await id(t.workspaceRoot,{schema_version:1,files:sd(Array.from(n.values()))});}async function rd(t){if(t.paths.length===0)return;let e=await _i(t.workspaceRoot),r=new Set(t.paths.map(Po));await id(t.workspaceRoot,{schema_version:1,files:e.files.filter(n=>!r.has(n.path))});}function nd(t,e,r){return t.files.map(n=>({...n,status:Hw(n,e,r)}))}function Fw(t,e){let r=ed(t),n=ed(e),i=Math.max(r.length,n.length);for(let s=0;s<i;s+=1){let o=(r[s]??0)-(n[s]??0);if(o!==0)return o>0?1:-1}return 0}function Hw(t,e,r){if(t.owner!==e)return "other_owner";let n=Fw(t.owner_version,r);return n>0?"newer_version":n<0?"older_version":"current"}async function id(t,e){let r=td(t);await mkdir(dirname(r),{recursive:true});let n=`${r}.tmp`;await writeFile(n,`${JSON.stringify(e,null,2)}
80
- `,"utf8"),await rename(n,r);}function xo(){return {schema_version:1,files:[]}}function qw(t){return t==="desktop"||t==="cli"||t==="mcp"}function ed(t){let e=t.match(/\d+(?:\.\d+)*/);return e?e[0].split(".").map(r=>Number.parseInt(r,10)):[0]}function zw(t){return Array.from(new Map(t.map(e=>[e.path,e])).values())}function sd(t){return t.sort((e,r)=>e.path.localeCompare(r.path))}function To(t){if(!(!t||t.trim().length===0))try{return JSON.parse(t)}catch(e){throw new Error(`Claude config is not valid JSON: ${e.message}`)}}function od(t){return JSON.stringify(t,null,2)+`
81
- `}var ad={id:"claude-code",homeConfigPath(t,e){return Ua(e,t)},inject(t,e){let r=To(t),{config:n,wasNew:i}=Wa(r??{},e);return {body:od(n),wasNew:i}},remove(t){if(t===null)return {body:null,wasPresent:false};let e=To(t),{config:r,wasPresent:n}=Ba(e);return n?{body:od(r),wasPresent:true}:{body:t,wasPresent:false}},read(t){try{let e=To(t);return Fa(e)}catch{return null}}};function Jw(t,e){let r=t.slice(0,e).split(/\r\n|\n|\r/g);return [r.length,r.pop().length+1]}function Kw(t,e,r){let n=t.split(/\r\n|\n|\r/g),i="",s=(Math.log10(e+1)|0)+1;for(let o=e-1;o<=e+1;o++){let a=n[o-1];a&&(i+=o.toString().padEnd(s," "),i+=": ",i+=a,i+=`
82
- `,o===e&&(i+=" ".repeat(s+r+2),i+=`^
83
- `));}return i}var P=class extends Error{line;column;codeblock;constructor(e,r){let[n,i]=Jw(r.toml,r.ptr),s=Kw(r.toml,n,i);super(`Invalid TOML document: ${e}
84
-
85
- ${s}`,r),this.line=n,this.column=i,this.codeblock=s;}};function Vw(t,e){let r=0;for(;t[e-++r]==="\\";);return --r&&r%2}function yi(t,e=0,r=t.length){let n=t.indexOf(`
86
- `,e);return t[n-1]==="\r"&&n--,n<=r?n:-1}function nr(t,e){for(let r=e;r<t.length;r++){let n=t[r];if(n===`
77
+ `:"",{encoding:"utf8",mode:O}),await chmod(r,O).catch(()=>{});}finally{clearTimeout(o);}}function pw(t){let e=t.SUPABASE_URL??t.VITE_SUPABASE_URL,r=t.SUPABASE_ANON_KEY??t.VITE_SUPABASE_ANON_KEY;return !e||!r?null:{url:`${e.replace(/\/$/,"")}/functions/v1/telemetry-ingest`,anonKey:r}}function hw(t){if(!t)return null;let e=t.toLowerCase().trim();return e==="true"?true:e==="false"?false:null}function fw(t){let e=JSON.stringify(t),r=[/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/i,/(?:^|["\s])\/Users\/[^"\s]+/,/(?:^|["\s])\/home\/[^"\s]+/,/[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}\.[A-Za-z0-9_-]{8,}/,/ghp_[A-Za-z0-9_]{20,}/];for(let n of r)if(n.test(e))throw new Error(`telemetry_payload_contains_sensitive_material:${n}`)}var gw=new Set(["manual","notify","auto"]);function Wu(t,e){if(t.CI==="true"||t.NO_UPDATE_CHECK==="1")return {key:"update.policy",value:"manual",source:"ci",configurable:false};let r=ho(t.PATHRULE_UPDATE_POLICY);if(r)return {key:"update.policy",value:r,source:"env",configurable:false};let n=ho(e);return n?{key:"update.policy",value:n,source:"config",configurable:true}:{key:"update.policy",value:"notify",source:"default",configurable:true}}function Bu(t){return typeof t=="boolean"?{key:"suggestions.desktop",value:t,source:"config",configurable:true}:{key:"suggestions.desktop",value:true,source:"default",configurable:true}}async function bt(t,e){if($u(t))return Nu(t,e);if(t!=="update.policy"&&t!=="suggestions.desktop")throw new Error("unsupported_config_key");try{let{session:r}=await S(e),n=await ne(r.user.id,e);return Uu(t,e,n)}catch{return Uu(t,e)}}async function fo(t,e,r){if(t==="telemetry.enabled")return Du(e,r);if(t==="telemetry.id")throw new Error("use_config_reset_telemetry_id");if(t!=="update.policy"&&t!=="suggestions.desktop")throw new Error("unsupported_config_key");let{session:n}=await S(r);if(t==="update.policy"){let i=ho(e);if(!i)throw new Error("invalid_update_policy");return await se(n.user.id,{update_policy:i},r),Wu(r,i)}let s=mw(e);if(s===null)throw new Error("invalid_desktop_suggestions");return await se(n.user.id,{desktop_suggestions:s},r),Bu(s)}async function go(t,e){if(t==="telemetry-id"||t==="telemetry.id")return ju(e);throw new Error("unsupported_config_reset_key")}function ho(t){if(!t)return null;let e=t.toLowerCase().trim();return gw.has(e)?e:null}function mw(t){if(!t)return null;let e=t.toLowerCase().trim();return e==="true"?true:e==="false"?false:null}function Uu(t,e,r){return t==="update.policy"?Wu(e,r?.update_policy):Bu(r?.desktop_suggestions)}Ge();B();Ee();async function Re(t){let{session:e,supabase:r}=await S(t),n=await j(t);if(!n)return [];let{data:s,error:i}=await r.from("workspaces").select("id, organization_id, name, access_mode, git_remote_url, git_owner, git_repo, user_workspace_paths!left(local_root_path, user_id)").eq("organization_id",n.id).is("archived_at",null);if(i)throw i;let o=await ne(e.user.id,t),a=[];for(let l of s??[]){let u=(l.user_workspace_paths??[]).find(d=>d.user_id===e.user.id)??null;a.push({id:l.id,organization_id:l.organization_id,name:l.name,access_mode:l.access_mode,git_remote_url:l.git_remote_url,git_owner:l.git_owner,git_repo:l.git_repo,local_root_path:u?.local_root_path??null,current:o.current_workspace_id===l.id});}if(a.sort((l,c)=>l.name.localeCompare(c.name)),!o.current_workspace_id&&a.length===1){let l=a[0];l&&(a[0]={...l,current:true});}return a}async function $(t){let e=await Re(t),r=e.find(n=>n.current);return r||(e.length===1?e[0]??null:null)}async function en(t,e){let{session:r}=await S(e),s=(await Re(e)).find(i=>i.id===t||i.name===t);if(!s)throw new Error("workspace_not_found");return await se(r.user.id,{current_workspace_id:s.id},e),{...s,current:true}}async function vt(t,e,r){let{session:n,supabase:s}=await S(r),i=await j(r);if(!i)throw new Error("org_required");let o=fi(t,"workspace");if(!o.ok||!o.value)throw new Error(`unsafe_workspace_name:${o.reason??"invalid"}`);let{data:a,error:l}=await s.from("workspaces").insert({organization_id:i.id,name:o.value,access_mode:"organization",git_remote_url:null,git_provider:null,git_owner:null,git_repo:null,detected_at:null}).select("id, organization_id, name, access_mode").single();if(l||!a)throw new Error(l?.message??"workspace_create_failed");let{error:c}=await s.from("user_workspace_paths").insert({user_id:n.user.id,workspace_id:a.id,local_root_path:e,watcher_enabled:true});if(c)throw new Error(c.message);let u=await ri(s,a.id,o.value);return await se(n.user.id,{current_org_id:i.id,current_workspace_id:a.id},r),{workspace:{id:a.id,organization_id:a.organization_id,name:a.name,access_mode:a.access_mode,local_root_path:e,current:true},local_root_path:e,root_node_created:!("error"in u)}}async function xe(t,e,r){let{session:n,supabase:s}=await S(r),i=t?await Hu(t,r):await $(r);if(!i)throw new Error("workspace_required");let{error:o}=await s.from("user_workspace_paths").upsert({user_id:n.user.id,workspace_id:i.id,local_root_path:e,watcher_enabled:true},{onConflict:"user_id,workspace_id"});if(o)throw o;return await se(n.user.id,{current_org_id:i.organization_id,current_workspace_id:i.id},r),{workspace:{...i,local_root_path:e,current:true},local_root_path:e,previous_local_root_path:i.local_root_path}}async function tn(t,e){let{session:r,supabase:n}=await S(e),s=t?await Hu(t,e):await $(e);if(!s)throw new Error("workspace_required");let{error:i}=await n.from("user_workspace_paths").delete().eq("user_id",r.user.id).eq("workspace_id",s.id);if(i)throw i;return {...s,local_root_path:null}}async function Hu(t,e){let n=(await Re(e)).find(s=>s.id===t||s.name===t);if(!n)throw new Error("workspace_not_found");return n}B();function qu(t,e=false){return e?true:t.length<=1200&&t.split(/\r?\n/).length<=24}function zu(t,e={}){if(e.forceWeb)return {...t.open_targets.find(r=>r.kind==="web"),reason:"forced"};if(e.preferDesktopApp){let r=t.open_targets.find(n=>n.kind==="desktop-app");return r||{...t.open_targets.find(n=>n.kind==="web"),reason:"fallback"}}return t.open_targets[0]??{kind:"web",url:t.url,label:`Open ${t.kind} in Pathrule Web`,reason:"preferred"}}async function rn(t,e,r={}){let n=await yw(e),{supabase:s}=await S(e),i=wo(r.limit),o=Cw(r.path);if(t==="memory"){let{data:c,error:u}=await s.from("memories").select("id, title, content, updated_at, nodes(id, relative_path)").eq("workspace_id",n.id).eq("status","active").order("updated_at",{ascending:false}).limit(i*3);if(u)throw u;return (c??[]).map(d=>mo("memory",n.id,d,e)).filter(d=>_o(d.path,o)).slice(0,i)}if(t==="rule"){let{data:c,error:u}=await s.from("rules").select("id, name, content, updated_at, node_rules(nodes(id, relative_path))").eq("workspace_id",n.id).order("updated_at",{ascending:false}).limit(i*3);if(u)throw u;return (c??[]).map(d=>mo("rule",n.id,d,e)).filter(d=>_o(d.path,o)).slice(0,i)}let{data:a,error:l}=await s.from("skills").select("id, name, description, content, updated_at, node_skills(nodes!node_skills_node_id_fkey(id, relative_path))").eq("workspace_id",n.id).order("updated_at",{ascending:false}).limit(i*3);if(l)throw l;return (a??[]).map(c=>mo("skill",n.id,c,e)).filter(c=>_o(c.path,o)).slice(0,i)}async function yo(t,e,r={}){let n=t.trim().toLowerCase();if(!n)throw new Error("search_query_required");let s=r.types?.length?r.types:["memory","rule","skill"];return (await Promise.all(s.map(o=>rn(o,e,{path:r.path,limit:Math.max(wo(r.limit),50)})))).flat().map(o=>({item:o,score:Ew(o,n)})).filter(o=>o.score>0).sort((o,a)=>a.score-o.score||(a.item.updated_at??"").localeCompare(o.item.updated_at??"")).slice(0,wo(r.limit)).map(o=>o.item)}async function ko(t,e,r){let n=await rn(t,r,{limit:100}),s=e.toLowerCase(),i=n.find(d=>d.id===e||d.title.toLowerCase()===s);if(!i)throw new Error(`${t}_not_found`);let{supabase:o}=await S(r),a=t==="memory"?"memories":t==="rule"?"rules":"skills",{data:l,error:c}=await o.from(a).select("content").eq("id",i.id).maybeSingle();if(c)throw c;let u=typeof l?.content=="string"?l.content:"";return {...i,content:u}}function St(t,e,r,n,s){let i=(n.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"");return s?`${i}/workspace/${encodeURIComponent(t)}/node/${encodeURIComponent(s)}/${e}/${encodeURIComponent(r)}`:`${i}/workspace/${encodeURIComponent(t)}/${e}/${encodeURIComponent(r)}`}function ww(t,e,r,n){let s=n?`/node/${encodeURIComponent(n)}`:"";return `pathrule://workspace/${encodeURIComponent(t)}${s}/${e}/${encodeURIComponent(r)}`}async function yw(t){let e=await $(t);if(!e)throw new Error("workspace_required");return e}function mo(t,e,r,n){let s=typeof r.title=="string"?r.title:typeof r.name=="string"?r.name:String(r.id),i=typeof r.content=="string"?r.content:typeof r.description=="string"?r.description:"",o=vw(t,r),a=Sw(t,r),l=St(e,t,String(r.id),n,a);return {id:String(r.id),kind:t,title:s,path:o,node_id:a,preview:Rw(i),updated_at:typeof r.updated_at=="string"?r.updated_at:null,url:l,open_targets:[kw(e,t,String(r.id),n,a),bw(e,t,String(r.id),a)]}}function kw(t,e,r,n,s){return {kind:"web",url:St(t,e,r,n,s),label:`Open ${e} in Pathrule Web`,reason:"preferred"}}function bw(t,e,r,n){return {kind:"desktop-app",url:ww(t,e,r,n),label:`Open ${e} in Pathrule Desktop`,reason:"fallback"}}function vw(t,e){if(t==="memory"){let i=e.nodes;return typeof i?.relative_path=="string"?i.relative_path:null}let s=e[t==="rule"?"node_rules":"node_skills"]?.[0]?.nodes?.relative_path;return typeof s=="string"?s:null}function Sw(t,e){if(t==="memory"){let i=e.nodes;return typeof i?.id=="string"?i.id:null}let s=e[t==="rule"?"node_rules":"node_skills"]?.[0]?.nodes?.id;return typeof s=="string"?s:null}function Cw(t){if(!t)return null;let e=t.trim();return e?e.startsWith("/")?e:`/${e}`:null}function _o(t,e){return e?t?t===e||t.startsWith(`${e}/`):false:true}function Ew(t,e){let r=t.title.toLowerCase(),n=t.preview.toLowerCase(),s=t.path?.toLowerCase()??"",i=0;return r===e&&(i+=100),r.includes(e)&&(i+=30),s.includes(e)&&(i+=15),n.includes(e)&&(i+=10),i}function Rw(t){return t.replace(/\s+/g," ").trim().slice(0,160)}function wo(t){return !t||!Number.isFinite(t)?20:Math.min(Math.max(Math.trunc(t),1),100)}B();async function Co(t,e,r){let{session:n,supabase:s}=await S(r),i=await $(r);if(!i)throw new Error("workspace_required");let o={supabase:s,userId:n.user.id,workspaceId:i.id};if(t==="memory"){let c=e,u=await Qa(o,{node_path:nr(c.path),title:bo(c.title,"memory_title_required"),content:vo(c.body),source:"manual",allow_duplicate:c.allowDuplicate});if(!u.ok)throw new Error(u.error.message);return {item:{id:u.data.id,kind:t,title:u.data.title,path:nr(c.path),url:St(i.id,t,u.data.id,r),open_targets:[So(i.id,t,u.data.id,r)],content_length:u.data.content.length,source:u.data.source},warnings:u.warnings??[]}}if(t==="rule"){let c=e,u=await el(o,{node_path:nr(c.path),name:bo(c.name,"rule_name_required"),content:vo(c.body),priority:c.priority,scope_type:c.scopeType,allow_duplicate:c.allowDuplicate});if(!u.ok)throw new Error(u.error.message);return {item:{id:u.data.id,kind:t,title:u.data.name,path:nr(c.path),url:St(i.id,t,u.data.id,r),open_targets:[So(i.id,t,u.data.id,r)],content_length:u.data.content.length,priority:u.data.priority,scope_type:u.data.scopeType},warnings:u.warnings??[]}}let a=e,l=await tl(o,{node_path:nr(a.path),name:bo(a.name,"skill_name_required"),description:Ku(a.description),content:vo(a.body),source:"manual"});if(!l.ok)throw new Error(l.error.message);return {item:{id:l.data.id,kind:t,title:l.data.name,path:nr(a.path),url:St(i.id,t,l.data.id,r),open_targets:[So(i.id,t,l.data.id,r)],content_length:l.data.content.length,description:l.data.description,source:l.data.source},warnings:l.warnings??[]}}function Ju(t,e){if(t!=="skill")return "";let r=e,n=Ku(r.description)??"Describe when to use this skill.";return ["---",`name: ${r.name.trim()}`,`description: ${n}`,"---","","# Overview","","Explain when this skill should be used.","","## Instructions","","- Add the steps, constraints, and guardrails this skill should enforce.",""].join(`
78
+ `)}function nr(t){let e=t.trim();if(!e)throw new Error("content_path_required");return e.startsWith("/")?e:`/${e}`}function bo(t,e){let r=t.trim();if(!r)throw new Error(e);return r}function vo(t){let e=t.replace(/\r\n/g,`
79
+ `);if(!e.trim())throw new Error("content_body_required");return e}function Ku(t){let e=t?.trim();return e||null}function So(t,e,r,n){return {kind:"web",url:St(t,e,r,n),label:`Open ${e} in Pathrule Web`,reason:"preferred"}}var Vu="ABCDEFGHJKLMNPQRSTUVWXYZ23456789",Tw=16;function Gu(t=Tw){if(t<12)throw new Error("bridge_pair_code_too_short");let e=randomBytes(t),r="";for(let n of e)r+=Vu[n%Vu.length];return r.match(/.{1,4}/g)?.join("-")??r}function Yu(t){let e=Aw(t);return createHash("sha256").update("pathrule-bridge-pair-v1","utf8").update("\0","utf8").update(Eo(t.pairCode),"utf8").update("\0","utf8").update(t.pairVerifier,"utf8").update("\0","utf8").update(e,"utf8").digest("base64url")}function Aw(t){return JSON.stringify({daemon_session_id:nn(t.daemonSessionId,"daemon_session_id"),browser_profile_id:nn(t.browserProfileId,"browser_profile_id"),origin:Iw(t.origin),user_id:nn(t.userId,"user_id")})}function Eo(t){return nn(t,"pair_secret").replace(/[\s-]+/g,"").toUpperCase()}function Iw(t){let e=nn(t,"origin"),r=new URL(e);if(r.protocol!=="https:"&&r.hostname!=="localhost")throw new Error("bridge_pair_origin_not_allowed");return r.pathname="",r.search="",r.hash="",r.toString().replace(/\/$/,"")}function nn(t,e){if(typeof t!="string"||t.trim()==="")throw new Error(`bridge_pair_${e}_required`);return t.trim()}K();B();var Uw=300*1e3,Y=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="BridgePairError";}code};async function xo(t){let e=t.user??await _s(t.env,t.verifyReauth!==false),r=Gu(),n=new Date(Date.now()+Uw).toISOString(),s={schema_version:1,pair_code_hash:Zu(r),user_id:e.user_id,user_email:e.user_email,daemon_session_id:t.daemonSessionId,created_at:new Date().toISOString(),expires_at:n};return await Ww(t.env,s),{pair_code:r,expires_at:n,url:`${Fw(t.env)}/connect`,daemon_session_id:t.daemonSessionId}}async function Xu(t){let e=await Bw(t.env);if(!e)throw new Y("pair_code_missing");if(e.daemon_session_id!==t.daemonSessionId)throw await Ro(t.env),new Y("pair_code_stale");if(Date.parse(e.expires_at)<=Date.now())throw await Ro(t.env),new Y("pair_code_expired");if(e.pair_code_hash!==Zu(t.pairCode))throw new Y("pair_code_invalid");let r=Yu({daemonSessionId:t.daemonSessionId,browserProfileId:t.browserProfileId,origin:t.origin,userId:e.user_id,pairCode:t.pairCode,pairVerifier:t.pairVerifier});return await Ro(t.env),{pair_token:r,daemon_session_id:t.daemonSessionId,user_id:e.user_id}}async function _s(t,e=true){let{session:r,supabase:n}=await S(t);if(e){let{data:s,error:i}=await n.rpc("verify_sensitive_action_grant",{p_action:"bridge_pair"});if(i)throw new Y("bridge_pair_reauth_check_failed",i.message);if(s!==true)throw new Y("bridge_pair_reauth_required","Run sensitive-action reauth for bridge_pair before pairing this browser.")}return {user_id:r.user.id,user_email:r.user.email}}async function Ww(t,e){let r=A(t).bridgePairFile;await mkdir(dirname(r),{recursive:true,mode:M});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(e,null,2),{encoding:"utf8",mode:O}),await rename(n,r);}async function Bw(t){try{return JSON.parse(await readFile(A(t).bridgePairFile,"utf8"))}catch{return null}}async function Ro(t){await unlink(A(t).bridgePairFile).catch(()=>{});}function Zu(t){return createHash("sha256").update("pathrule-bridge-pair-code-v1","utf8").update("\0","utf8").update(Eo(t),"utf8").digest("base64url")}function Fw(t){return (t.PATHRULE_WEB_URL||t.VITE_PATHRULE_WEB_URL||"https://app.pathrule.io").replace(/\/+$/,"")}var ws="x-pathrule-pair-token",Qu="x-pathrule-browser-profile-id";function Ct(t){let e=Hw(t.headers,t.allowedOrigins);if(e)return e;let r=Po(t.headers,"content-type");return !r||!/^application\/json(?:\s*;|$)/i.test(r)?{statusCode:415,reason:"json_content_type_required"}:t.requirePairToken!==false&&!Po(t.headers,ws)?{statusCode:401,reason:"pair_token_required"}:null}function To(t,e){return !t||!ys(t,e)?null:{"Access-Control-Allow-Origin":t,"Access-Control-Allow-Headers":"Authorization, X-Pathrule-Pair-Token, X-Pathrule-Browser-Profile-Id, Content-Type","Access-Control-Allow-Methods":"GET, POST, OPTIONS","Access-Control-Allow-Credentials":"false"}}function Hw(t,e){let r=Po(t,"origin");return r?ys(r,e)?null:{statusCode:400,reason:"origin_not_allowed"}:{statusCode:400,reason:"origin_required"}}function ys(t,e){return e.some(r=>r===t)}function ed(t,e={}){let r={daemon_present:true,protocol_version:t};return e.daemonSessionId&&(r.daemon_session_id=e.daemonSessionId),r}function td(t){let e=t.windowMs??6e4,r=Math.floor((t.nowMs??Date.now())/e);return `${t.origin}\0${t.ip}\0${r}`}function Po(t,e){let r=t[e]??t[e.toLowerCase()],n=Array.isArray(r)?r[0]:r;return (typeof n=="string"?n.trim():"")||void 0}K();function rd(t){return t==="modified"||t==="added"||t==="deleted"||t==="renamed"||t==="untracked"||t==="unknown"}function nd(t){let e=t.nowMs??Date.now(),r=t.rows.filter(s=>t.currentUserId===null||s.user_id!==t.currentUserId).flatMap(s=>zw(s,t.displayNamesByUserId??{},e)).sort(Vw),n=Math.max(0,e-(t.startedAtMs??e));return r.length===0?{decision:"allow",conflicts:[],source:t.source,latency_ms:n}:{decision:"ask",conflicts:r,message:Jw(r[0],e),source:t.source,latency_ms:n}}function sd(t=Date.now()){return {decision:"ask",conflicts:[],message:"Pathrule could not verify teammate local state in time. Continue?",source:"degraded",latency_ms:Math.max(0,Date.now()-t)}}function id(t){return Array.isArray(t)?t.flatMap(e=>{if(!e||typeof e!="object")return [];let r=e,n=typeof r.relative_path=="string"?r.relative_path:"",s=typeof r.user_id=="string"?r.user_id:"",i=typeof r.workspace_id=="string"?r.workspace_id:"";if(!n||!s||!i)return [];let o=rd(r.git_status)?r.git_status:"unknown";return [{workspace_id:i,user_id:s,runtime_id:typeof r.runtime_id=="string"?r.runtime_id:"unknown",relative_path:n,is_active:r.is_active===true,is_dirty:r.is_dirty===true,git_status:o,last_heartbeat_at:typeof r.last_heartbeat_at=="string"?r.last_heartbeat_at:null,last_local_write_at:typeof r.last_local_write_at=="string"?r.last_local_write_at:null,last_git_scan_at:typeof r.last_git_scan_at=="string"?r.last_git_scan_at:new Date(0).toISOString()}]}):[]}function zw(t,e,r){let n=t.last_heartbeat_at?Date.parse(t.last_heartbeat_at):Number.NaN,s=t.is_active&&Number.isFinite(n)&&r-n<=3e4,i=t.is_dirty;return !s&&!i?[]:[{user_id:t.user_id,display_name:od(e[t.user_id]??"A teammate"),relative_path:t.relative_path,reason:s&&i?"active_dirty":s?"active":"dirty",git_status:t.git_status,last_heartbeat_at:t.last_heartbeat_at,last_local_write_at:t.last_local_write_at}]}function Jw(t,e){let r=od(t.display_name);if(t.reason==="active"||t.reason==="active_dirty")return `Pathrule caught a possible conflict. ${r} is actively working on this file. Continue?`;let n=Kw(t.last_local_write_at,e);return `Pathrule caught a possible conflict. ${r} changed this file ${n} and has not committed it yet. Continue?`}function Kw(t,e){let r=t?Date.parse(t):Number.NaN;if(!Number.isFinite(r))return "recently";let n=Math.max(0,e-r),i=60*6e4,o=24*i;if(n<i)return "recently";if(n<o){let l=Math.max(1,Math.floor(n/i));return `${l} ${l===1?"hour":"hours"} ago`}let a=Math.max(1,Math.floor(n/o));return `${a} ${a===1?"day":"days"} ago`}function Vw(t,e){let r=s=>s.reason==="active"||s.reason==="active_dirty"?0:1,n=r(t)-r(e);return n!==0?n:t.relative_path.localeCompare(e.relative_path)}function od(t){let e=t.replace(/[\x00-\x1F\x7F]/g,"").trim();return !e||e.includes("@")||/^https?:\/\//i.test(e)?"A teammate":e.slice(0,80)}B();K();var ry=".pathrule/managed-files.json";function ld(t){return join(t,ry)}function Io(t){let e=normalize(t).replace(/\\/g,"/").replace(/^\/+/,"");if(e==="."||e.length===0||e.startsWith("../")||e.includes("/../"))throw new Error(`Invalid managed file path: ${t}`);return e}async function ks(t){try{let e=await readFile(ld(t),"utf8"),r=JSON.parse(e);if(r.schema_version!==1||!Array.isArray(r.files))return Ao();let n=r.files.flatMap(s=>{if(!s||typeof s!="object")return [];let i=s;if(typeof i.path!="string"||!iy(i.owner)||typeof i.owner_version!="string"||typeof i.updated_at!="string")return [];try{return [{path:Io(i.path),owner:i.owner,owner_version:i.owner_version,updated_at:i.updated_at}]}catch{return []}});return {schema_version:1,files:pd(oy(n))}}catch(e){if(e.code==="ENOENT"||e instanceof SyntaxError)return Ao();throw e}}async function bs(t){if(t.paths.length===0)return;let e=await ks(t.workspaceRoot),r=(t.now??new Date).toISOString(),n=new Map(e.files.map(s=>[s.path,s]));for(let s of t.paths){let i=Io(s);n.set(i,{path:i,owner:t.owner,owner_version:t.ownerVersion,updated_at:r});}await dd(t.workspaceRoot,{schema_version:1,files:pd(Array.from(n.values()))});}async function cd(t){if(t.paths.length===0)return;let e=await ks(t.workspaceRoot),r=new Set(t.paths.map(Io));await dd(t.workspaceRoot,{schema_version:1,files:e.files.filter(n=>!r.has(n.path))});}function ud(t,e,r){return t.files.map(n=>({...n,status:sy(n,e,r)}))}function ny(t,e){let r=ad(t),n=ad(e),s=Math.max(r.length,n.length);for(let i=0;i<s;i+=1){let o=(r[i]??0)-(n[i]??0);if(o!==0)return o>0?1:-1}return 0}function sy(t,e,r){if(t.owner!==e)return "other_owner";let n=ny(t.owner_version,r);return n>0?"newer_version":n<0?"older_version":"current"}async function dd(t,e){let r=ld(t);await mkdir(dirname(r),{recursive:true});let n=`${r}.tmp`;await writeFile(n,`${JSON.stringify(e,null,2)}
80
+ `,"utf8"),await rename(n,r);}function Ao(){return {schema_version:1,files:[]}}function iy(t){return t==="desktop"||t==="cli"||t==="mcp"}function ad(t){let e=t.match(/\d+(?:\.\d+)*/);return e?e[0].split(".").map(r=>Number.parseInt(r,10)):[0]}function oy(t){return Array.from(new Map(t.map(e=>[e.path,e])).values())}function pd(t){return t.sort((e,r)=>e.path.localeCompare(r.path))}function Oo(t){if(!(!t||t.trim().length===0))try{return JSON.parse(t)}catch(e){throw new Error(`Claude config is not valid JSON: ${e.message}`)}}function hd(t){return JSON.stringify(t,null,2)+`
81
+ `}var fd={id:"claude-code",homeConfigPath(t,e){return Ja(e,t)},inject(t,e){let r=Oo(t),{config:n,wasNew:s}=Ka(r??{},e);return {body:hd(n),wasNew:s}},remove(t){if(t===null)return {body:null,wasPresent:false};let e=Oo(t),{config:r,wasPresent:n}=Va(e);return n?{body:hd(r),wasPresent:true}:{body:t,wasPresent:false}},read(t){try{let e=Oo(t);return Ga(e)}catch{return null}}};function ay(t,e){let r=t.slice(0,e).split(/\r\n|\n|\r/g);return [r.length,r.pop().length+1]}function ly(t,e,r){let n=t.split(/\r\n|\n|\r/g),s="",i=(Math.log10(e+1)|0)+1;for(let o=e-1;o<=e+1;o++){let a=n[o-1];a&&(s+=o.toString().padEnd(i," "),s+=": ",s+=a,s+=`
82
+ `,o===e&&(s+=" ".repeat(i+r+2),s+=`^
83
+ `));}return s}var P=class extends Error{line;column;codeblock;constructor(e,r){let[n,s]=ay(r.toml,r.ptr),i=ly(r.toml,n,s);super(`Invalid TOML document: ${e}
84
+
85
+ ${i}`,r),this.line=n,this.column=s,this.codeblock=i;}};function cy(t,e){let r=0;for(;t[e-++r]==="\\";);return --r&&r%2}function vs(t,e=0,r=t.length){let n=t.indexOf(`
86
+ `,e);return t[n-1]==="\r"&&n--,n<=r?n:-1}function sr(t,e){for(let r=e;r<t.length;r++){let n=t[r];if(n===`
87
87
  `)return r;if(n==="\r"&&t[r+1]===`
88
- `)return r+1;if(n<" "&&n!==" "||n==="\x7F")throw new P("control characters are not allowed in comments",{toml:t,ptr:e})}return t.length}function se(t,e,r,n){let i;for(;;){for(;(i=t[e])===" "||i===" "||!r&&(i===`
89
- `||i==="\r"&&t[e+1]===`
90
- `);)e++;if(n||i!=="#")break;e=nr(t,e);}return e}function ld(t,e,r,n,i=false){if(!n)return e=yi(t,e),e<0?t.length:e;for(let s=e;s<t.length;s++){let o=t[s];if(o==="#")s=yi(t,s);else {if(o===r)return s+1;if(o===n||i&&(o===`
91
- `||o==="\r"&&t[s+1]===`
92
- `))return s}}throw new P("cannot find end of structure",{toml:t,ptr:e})}function ki(t,e){let r=t[e],n=r===t[e+1]&&t[e+1]===t[e+2]?t.slice(e,e+3):r;e+=n.length-1;do e=t.indexOf(n,++e);while(e>-1&&r!=="'"&&Vw(t,e));return e>-1&&(e+=n.length,n.length>1&&(t[e]===r&&e++,t[e]===r&&e++)),e}var Gw=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,rn=class t extends Date{#t=false;#r=false;#e=null;constructor(e){let r=true,n=true,i="Z";if(typeof e=="string"){let s=e.match(Gw);s?(s[1]||(r=false,e=`0000-01-01T${e}`),n=!!s[2],n&&e[10]===" "&&(e=e.replace(" ","T")),s[2]&&+s[2]>23?e="":(i=s[3]||null,e=e.toUpperCase(),!i&&n&&(e+="Z"))):e="";}super(e),isNaN(this.getTime())||(this.#t=r,this.#r=n,this.#e=i);}isDateTime(){return this.#t&&this.#r}isLocal(){return !this.#t||!this.#r||!this.#e}isDate(){return this.#t&&!this.#r}isTime(){return this.#r&&!this.#t}isValid(){return this.#t||this.#r}toISOString(){let e=super.toISOString();if(this.isDate())return e.slice(0,10);if(this.isTime())return e.slice(11,23);if(this.#e===null)return e.slice(0,-1);if(this.#e==="Z")return e;let r=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return r=this.#e[0]==="-"?r:-r,new Date(this.getTime()-r*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(e,r="Z"){let n=new t(e);return n.#e=r,n}static wrapAsLocalDateTime(e){let r=new t(e);return r.#e=null,r}static wrapAsLocalDate(e){let r=new t(e);return r.#r=false,r.#e=null,r}static wrapAsLocalTime(e){let r=new t(e);return r.#t=false,r.#e=null,r}};var Yw=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,Xw=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,Zw=/^[+-]?0[0-9_]/,Qw=/^[0-9a-f]{2,8}$/i,cd={b:"\b",t:" ",n:`
93
- `,f:"\f",r:"\r",e:"\x1B",'"':'"',"\\":"\\"};function bi(t,e=0,r=t.length){let n=t[e]==="'",i=t[e++]===t[e]&&t[e]===t[e+1];i&&(r-=2,t[e+=2]==="\r"&&e++,t[e]===`
94
- `&&e++);let s=0,o,a="",l=e;for(;e<r-1;){let c=t[e++];if(c===`
88
+ `)return r+1;if(n<" "&&n!==" "||n==="\x7F")throw new P("control characters are not allowed in comments",{toml:t,ptr:e})}return t.length}function ie(t,e,r,n){let s;for(;;){for(;(s=t[e])===" "||s===" "||!r&&(s===`
89
+ `||s==="\r"&&t[e+1]===`
90
+ `);)e++;if(n||s!=="#")break;e=sr(t,e);}return e}function gd(t,e,r,n,s=false){if(!n)return e=vs(t,e),e<0?t.length:e;for(let i=e;i<t.length;i++){let o=t[i];if(o==="#")i=vs(t,i);else {if(o===r)return i+1;if(o===n||s&&(o===`
91
+ `||o==="\r"&&t[i+1]===`
92
+ `))return i}}throw new P("cannot find end of structure",{toml:t,ptr:e})}function Ss(t,e){let r=t[e],n=r===t[e+1]&&t[e+1]===t[e+2]?t.slice(e,e+3):r;e+=n.length-1;do e=t.indexOf(n,++e);while(e>-1&&r!=="'"&&cy(t,e));return e>-1&&(e+=n.length,n.length>1&&(t[e]===r&&e++,t[e]===r&&e++)),e}var uy=/^(\d{4}-\d{2}-\d{2})?[T ]?(?:(\d{2}):\d{2}(?::\d{2}(?:\.\d+)?)?)?(Z|[-+]\d{2}:\d{2})?$/i,sn=class t extends Date{#t=false;#r=false;#e=null;constructor(e){let r=true,n=true,s="Z";if(typeof e=="string"){let i=e.match(uy);i?(i[1]||(r=false,e=`0000-01-01T${e}`),n=!!i[2],n&&e[10]===" "&&(e=e.replace(" ","T")),i[2]&&+i[2]>23?e="":(s=i[3]||null,e=e.toUpperCase(),!s&&n&&(e+="Z"))):e="";}super(e),isNaN(this.getTime())||(this.#t=r,this.#r=n,this.#e=s);}isDateTime(){return this.#t&&this.#r}isLocal(){return !this.#t||!this.#r||!this.#e}isDate(){return this.#t&&!this.#r}isTime(){return this.#r&&!this.#t}isValid(){return this.#t||this.#r}toISOString(){let e=super.toISOString();if(this.isDate())return e.slice(0,10);if(this.isTime())return e.slice(11,23);if(this.#e===null)return e.slice(0,-1);if(this.#e==="Z")return e;let r=+this.#e.slice(1,3)*60+ +this.#e.slice(4,6);return r=this.#e[0]==="-"?r:-r,new Date(this.getTime()-r*6e4).toISOString().slice(0,-1)+this.#e}static wrapAsOffsetDateTime(e,r="Z"){let n=new t(e);return n.#e=r,n}static wrapAsLocalDateTime(e){let r=new t(e);return r.#e=null,r}static wrapAsLocalDate(e){let r=new t(e);return r.#r=false,r.#e=null,r}static wrapAsLocalTime(e){let r=new t(e);return r.#t=false,r.#e=null,r}};var dy=/^((0x[0-9a-fA-F](_?[0-9a-fA-F])*)|(([+-]|0[ob])?\d(_?\d)*))$/,py=/^[+-]?\d(_?\d)*(\.\d(_?\d)*)?([eE][+-]?\d(_?\d)*)?$/,hy=/^[+-]?0[0-9_]/,fy=/^[0-9a-f]{2,8}$/i,md={b:"\b",t:" ",n:`
93
+ `,f:"\f",r:"\r",e:"\x1B",'"':'"',"\\":"\\"};function Cs(t,e=0,r=t.length){let n=t[e]==="'",s=t[e++]===t[e]&&t[e]===t[e+1];s&&(r-=2,t[e+=2]==="\r"&&e++,t[e]===`
94
+ `&&e++);let i=0,o,a="",l=e;for(;e<r-1;){let c=t[e++];if(c===`
95
95
  `||c==="\r"&&t[e]===`
96
- `){if(!i)throw new P("newlines are not allowed in strings",{toml:t,ptr:e-1})}else if(c<" "&&c!==" "||c==="\x7F")throw new P("control characters are not allowed in strings",{toml:t,ptr:e-1});if(o){if(o=false,c==="x"||c==="u"||c==="U"){let u=t.slice(e,e+=c==="x"?2:c==="u"?4:8);if(!Qw.test(u))throw new P("invalid unicode escape",{toml:t,ptr:s});try{a+=String.fromCodePoint(parseInt(u,16));}catch{throw new P("invalid unicode escape",{toml:t,ptr:s})}}else if(i&&(c===`
97
- `||c===" "||c===" "||c==="\r")){if(e=se(t,e-1,true),t[e]!==`
98
- `&&t[e]!=="\r")throw new P("invalid escape: only line-ending whitespace may be escaped",{toml:t,ptr:s});e=se(t,e);}else if(c in cd)a+=cd[c];else throw new P("unrecognized escape sequence",{toml:t,ptr:s});l=e;}else !n&&c==="\\"&&(s=e-1,o=true,a+=t.slice(l,s));}return a+t.slice(l,r-1)}function ud(t,e,r,n){if(t==="true")return true;if(t==="false")return false;if(t==="-inf")return -1/0;if(t==="inf"||t==="+inf")return 1/0;if(t==="nan"||t==="+nan"||t==="-nan")return NaN;if(t==="-0")return n?0n:0;let i=Yw.test(t);if(i||Xw.test(t)){if(Zw.test(t))throw new P("leading zeroes are not allowed",{toml:e,ptr:r});t=t.replace(/_/g,"");let o=+t;if(isNaN(o))throw new P("invalid number",{toml:e,ptr:r});if(i){if((i=!Number.isSafeInteger(o))&&!n)throw new P("integer value cannot be represented losslessly",{toml:e,ptr:r});(i||n===true)&&(o=BigInt(t));}return o}let s=new rn(t);if(!s.isValid())throw new P("invalid value",{toml:e,ptr:r});return s}function ey(t,e,r){let n=t.slice(e,r),i=n.indexOf("#");return i>-1&&(nr(t,i),n=n.slice(0,i)),[n.trimEnd(),i]}function nn(t,e,r,n,i){if(n===0)throw new P("document contains excessively nested structures. aborting.",{toml:t,ptr:e});let s=t[e];if(s==="["||s==="{"){let[l,c]=s==="["?pd(t,e,n,i):dd(t,e,n,i);if(r){if(c=se(t,c),t[c]===",")c++;else if(t[c]!==r)throw new P("expected comma or end of structure",{toml:t,ptr:c})}return [l,c]}let o;if(s==='"'||s==="'"){o=ki(t,e);let l=bi(t,e,o);if(r){if(o=se(t,o),t[o]&&t[o]!==","&&t[o]!==r&&t[o]!==`
99
- `&&t[o]!=="\r")throw new P("unexpected character encountered",{toml:t,ptr:o});o+=+(t[o]===",");}return [l,o]}o=ld(t,e,",",r);let a=ey(t,e,o-+(t[o-1]===","));if(!a[0])throw new P("incomplete key-value declaration: no value specified",{toml:t,ptr:e});return r&&a[1]>-1&&(o=se(t,e+a[1]),o+=+(t[o]===",")),[ud(a[0],t,e,i),o]}var ty=/^[a-zA-Z0-9-_]+[ \t]*$/;function vi(t,e,r="="){let n=e-1,i=[],s=t.indexOf(r,e);if(s<0)throw new P("incomplete key-value: cannot find end of key",{toml:t,ptr:e});do{let o=t[e=++n];if(o!==" "&&o!==" ")if(o==='"'||o==="'"){if(o===t[e+1]&&o===t[e+2])throw new P("multiline strings are not allowed in keys",{toml:t,ptr:e});let a=ki(t,e);if(a<0)throw new P("unfinished string encountered",{toml:t,ptr:e});n=t.indexOf(".",a);let l=t.slice(a,n<0||n>s?s:n),c=yi(l);if(c>-1)throw new P("newlines are not allowed in keys",{toml:t,ptr:e+n+c});if(l.trimStart())throw new P("found extra tokens after the string part",{toml:t,ptr:a});if(s<a&&(s=t.indexOf(r,a),s<0))throw new P("incomplete key-value: cannot find end of key",{toml:t,ptr:e});i.push(bi(t,e,a));}else {n=t.indexOf(".",e);let a=t.slice(e,n<0||n>s?s:n);if(!ty.test(a))throw new P("only letter, numbers, dashes and underscores are allowed in keys",{toml:t,ptr:e});i.push(a.trimEnd());}}while(n+1&&n<s);return [i,se(t,s+1,true,true)]}function dd(t,e,r,n){let i={},s=new Set,o;for(e++;(o=t[e++])!=="}"&&o;){if(o===",")throw new P("expected value, found comma",{toml:t,ptr:e-1});if(o==="#")e=nr(t,e);else if(o!==" "&&o!==" "&&o!==`
100
- `&&o!=="\r"){let a,l=i,c=false,[u,d]=vi(t,e-1);for(let h=0;h<u.length;h++){if(h&&(l=c?l[a]:l[a]={}),a=u[h],(c=Object.hasOwn(l,a))&&(typeof l[a]!="object"||s.has(l[a])))throw new P("trying to redefine an already defined value",{toml:t,ptr:e});!c&&a==="__proto__"&&Object.defineProperty(l,a,{enumerable:true,configurable:true,writable:true});}if(c)throw new P("trying to redefine an already defined value",{toml:t,ptr:e});let[p,f]=nn(t,d,"}",r-1,n);s.add(p),l[a]=p,e=f;}}if(!o)throw new P("unfinished table encountered",{toml:t,ptr:e});return [i,e]}function pd(t,e,r,n){let i=[],s;for(e++;(s=t[e++])!=="]"&&s;){if(s===",")throw new P("expected value, found comma",{toml:t,ptr:e-1});if(s==="#")e=nr(t,e);else if(s!==" "&&s!==" "&&s!==`
101
- `&&s!=="\r"){let o=nn(t,e-1,"]",r-1,n);i.push(o[0]),e=o[1];}}if(!s)throw new P("unfinished array encountered",{toml:t,ptr:e});return [i,e]}function fd(t,e,r,n){let i=e,s=r,o,a=false,l;for(let c=0;c<t.length;c++){if(c){if(i=a?i[o]:i[o]={},s=(l=s[o]).c,n===0&&(l.t===1||l.t===2))return null;if(l.t===2){let u=i.length-1;i=i[u],s=s[u].c;}}if(o=t[c],(a=Object.hasOwn(i,o))&&s[o]?.t===0&&s[o]?.d)return null;a||(o==="__proto__"&&(Object.defineProperty(i,o,{enumerable:true,configurable:true,writable:true}),Object.defineProperty(s,o,{enumerable:true,configurable:true,writable:true})),s[o]={t:c<t.length-1&&n===2?3:n,d:false,i:0,c:{}});}if(l=s[o],l.t!==n&&!(n===1&&l.t===3)||(n===2&&(l.d||(l.d=true,i[o]=[]),i[o].push(i={}),l.c[l.i++]=l={t:1,d:false,i:0,c:{}}),l.d))return null;if(l.d=true,n===1)i=a?i[o]:i[o]={};else if(n===0&&a)return null;return [o,i,l.c]}function Ao(t,{maxDepth:e=1e3,integersAsBigInt:r}={}){let n={},i={},s=n,o=i;for(let a=se(t,0);a<t.length;){if(t[a]==="["){let l=t[++a]==="[",c=vi(t,a+=+l,"]");if(l){if(t[c[1]-1]!=="]")throw new P("expected end of table declaration",{toml:t,ptr:c[1]-1});c[1]++;}let u=fd(c[0],n,i,l?2:1);if(!u)throw new P("trying to redefine an already defined table or value",{toml:t,ptr:a});o=u[2],s=u[1],a=c[1];}else {let l=vi(t,a),c=fd(l[0],s,o,0);if(!c)throw new P("trying to redefine an already defined table or value",{toml:t,ptr:a});let u=nn(t,l[1],void 0,e,r);c[1][c[0]]=u[0],a=u[1];}if(a=se(t,a,true),t[a]&&t[a]!==`
102
- `&&t[a]!=="\r")throw new P("each key-value declaration must be followed by an end-of-line",{toml:t,ptr:a});a=se(t,a);}return n}var hd=/^[a-z0-9-_]+$/i;function sn(t){let e=typeof t;if(e==="object"){if(Array.isArray(t))return "array";if(t instanceof Date)return "date"}return e}function ry(t){for(let e=0;e<t.length;e++)if(sn(t[e])!=="object")return false;return t.length!=0}function Io(t){return JSON.stringify(t).replace(/\x7f/g,"\\u007f")}function Oo(t,e,r,n){if(r===0)throw new Error("Could not stringify the object: maximum object depth exceeded");if(e==="number")return isNaN(t)?"nan":t===1/0?"inf":t===-1/0?"-inf":n&&Number.isInteger(t)?t.toFixed(1):t.toString();if(e==="bigint"||e==="boolean")return t.toString();if(e==="string")return Io(t);if(e==="date"){if(isNaN(t.getTime()))throw new TypeError("cannot serialize invalid date");return t.toISOString()}if(e==="object")return ny(t,r,n);if(e==="array")return iy(t,r,n)}function ny(t,e,r){let n=Object.keys(t);if(n.length===0)return "{}";let i="{ ";for(let s=0;s<n.length;s++){let o=n[s];s&&(i+=", "),i+=hd.test(o)?o:Io(o),i+=" = ",i+=Oo(t[o],sn(t[o]),e-1,r);}return i+" }"}function iy(t,e,r){if(t.length===0)return "[]";let n="[ ";for(let i=0;i<t.length;i++){if(i&&(n+=", "),t[i]===null||t[i]===void 0)throw new TypeError("arrays cannot contain null or undefined values");n+=Oo(t[i],sn(t[i]),e-1,r);}return n+" ]"}function sy(t,e,r,n){if(r===0)throw new Error("Could not stringify the object: maximum object depth exceeded");let i="";for(let s=0;s<t.length;s++)i+=`${i&&`
96
+ `){if(!s)throw new P("newlines are not allowed in strings",{toml:t,ptr:e-1})}else if(c<" "&&c!==" "||c==="\x7F")throw new P("control characters are not allowed in strings",{toml:t,ptr:e-1});if(o){if(o=false,c==="x"||c==="u"||c==="U"){let u=t.slice(e,e+=c==="x"?2:c==="u"?4:8);if(!fy.test(u))throw new P("invalid unicode escape",{toml:t,ptr:i});try{a+=String.fromCodePoint(parseInt(u,16));}catch{throw new P("invalid unicode escape",{toml:t,ptr:i})}}else if(s&&(c===`
97
+ `||c===" "||c===" "||c==="\r")){if(e=ie(t,e-1,true),t[e]!==`
98
+ `&&t[e]!=="\r")throw new P("invalid escape: only line-ending whitespace may be escaped",{toml:t,ptr:i});e=ie(t,e);}else if(c in md)a+=md[c];else throw new P("unrecognized escape sequence",{toml:t,ptr:i});l=e;}else !n&&c==="\\"&&(i=e-1,o=true,a+=t.slice(l,i));}return a+t.slice(l,r-1)}function _d(t,e,r,n){if(t==="true")return true;if(t==="false")return false;if(t==="-inf")return -1/0;if(t==="inf"||t==="+inf")return 1/0;if(t==="nan"||t==="+nan"||t==="-nan")return NaN;if(t==="-0")return n?0n:0;let s=dy.test(t);if(s||py.test(t)){if(hy.test(t))throw new P("leading zeroes are not allowed",{toml:e,ptr:r});t=t.replace(/_/g,"");let o=+t;if(isNaN(o))throw new P("invalid number",{toml:e,ptr:r});if(s){if((s=!Number.isSafeInteger(o))&&!n)throw new P("integer value cannot be represented losslessly",{toml:e,ptr:r});(s||n===true)&&(o=BigInt(t));}return o}let i=new sn(t);if(!i.isValid())throw new P("invalid value",{toml:e,ptr:r});return i}function gy(t,e,r){let n=t.slice(e,r),s=n.indexOf("#");return s>-1&&(sr(t,s),n=n.slice(0,s)),[n.trimEnd(),s]}function on(t,e,r,n,s){if(n===0)throw new P("document contains excessively nested structures. aborting.",{toml:t,ptr:e});let i=t[e];if(i==="["||i==="{"){let[l,c]=i==="["?yd(t,e,n,s):wd(t,e,n,s);if(r){if(c=ie(t,c),t[c]===",")c++;else if(t[c]!==r)throw new P("expected comma or end of structure",{toml:t,ptr:c})}return [l,c]}let o;if(i==='"'||i==="'"){o=Ss(t,e);let l=Cs(t,e,o);if(r){if(o=ie(t,o),t[o]&&t[o]!==","&&t[o]!==r&&t[o]!==`
99
+ `&&t[o]!=="\r")throw new P("unexpected character encountered",{toml:t,ptr:o});o+=+(t[o]===",");}return [l,o]}o=gd(t,e,",",r);let a=gy(t,e,o-+(t[o-1]===","));if(!a[0])throw new P("incomplete key-value declaration: no value specified",{toml:t,ptr:e});return r&&a[1]>-1&&(o=ie(t,e+a[1]),o+=+(t[o]===",")),[_d(a[0],t,e,s),o]}var my=/^[a-zA-Z0-9-_]+[ \t]*$/;function Es(t,e,r="="){let n=e-1,s=[],i=t.indexOf(r,e);if(i<0)throw new P("incomplete key-value: cannot find end of key",{toml:t,ptr:e});do{let o=t[e=++n];if(o!==" "&&o!==" ")if(o==='"'||o==="'"){if(o===t[e+1]&&o===t[e+2])throw new P("multiline strings are not allowed in keys",{toml:t,ptr:e});let a=Ss(t,e);if(a<0)throw new P("unfinished string encountered",{toml:t,ptr:e});n=t.indexOf(".",a);let l=t.slice(a,n<0||n>i?i:n),c=vs(l);if(c>-1)throw new P("newlines are not allowed in keys",{toml:t,ptr:e+n+c});if(l.trimStart())throw new P("found extra tokens after the string part",{toml:t,ptr:a});if(i<a&&(i=t.indexOf(r,a),i<0))throw new P("incomplete key-value: cannot find end of key",{toml:t,ptr:e});s.push(Cs(t,e,a));}else {n=t.indexOf(".",e);let a=t.slice(e,n<0||n>i?i:n);if(!my.test(a))throw new P("only letter, numbers, dashes and underscores are allowed in keys",{toml:t,ptr:e});s.push(a.trimEnd());}}while(n+1&&n<i);return [s,ie(t,i+1,true,true)]}function wd(t,e,r,n){let s={},i=new Set,o;for(e++;(o=t[e++])!=="}"&&o;){if(o===",")throw new P("expected value, found comma",{toml:t,ptr:e-1});if(o==="#")e=sr(t,e);else if(o!==" "&&o!==" "&&o!==`
100
+ `&&o!=="\r"){let a,l=s,c=false,[u,d]=Es(t,e-1);for(let f=0;f<u.length;f++){if(f&&(l=c?l[a]:l[a]={}),a=u[f],(c=Object.hasOwn(l,a))&&(typeof l[a]!="object"||i.has(l[a])))throw new P("trying to redefine an already defined value",{toml:t,ptr:e});!c&&a==="__proto__"&&Object.defineProperty(l,a,{enumerable:true,configurable:true,writable:true});}if(c)throw new P("trying to redefine an already defined value",{toml:t,ptr:e});let[p,h]=on(t,d,"}",r-1,n);i.add(p),l[a]=p,e=h;}}if(!o)throw new P("unfinished table encountered",{toml:t,ptr:e});return [s,e]}function yd(t,e,r,n){let s=[],i;for(e++;(i=t[e++])!=="]"&&i;){if(i===",")throw new P("expected value, found comma",{toml:t,ptr:e-1});if(i==="#")e=sr(t,e);else if(i!==" "&&i!==" "&&i!==`
101
+ `&&i!=="\r"){let o=on(t,e-1,"]",r-1,n);s.push(o[0]),e=o[1];}}if(!i)throw new P("unfinished array encountered",{toml:t,ptr:e});return [s,e]}function kd(t,e,r,n){let s=e,i=r,o,a=false,l;for(let c=0;c<t.length;c++){if(c){if(s=a?s[o]:s[o]={},i=(l=i[o]).c,n===0&&(l.t===1||l.t===2))return null;if(l.t===2){let u=s.length-1;s=s[u],i=i[u].c;}}if(o=t[c],(a=Object.hasOwn(s,o))&&i[o]?.t===0&&i[o]?.d)return null;a||(o==="__proto__"&&(Object.defineProperty(s,o,{enumerable:true,configurable:true,writable:true}),Object.defineProperty(i,o,{enumerable:true,configurable:true,writable:true})),i[o]={t:c<t.length-1&&n===2?3:n,d:false,i:0,c:{}});}if(l=i[o],l.t!==n&&!(n===1&&l.t===3)||(n===2&&(l.d||(l.d=true,s[o]=[]),s[o].push(s={}),l.c[l.i++]=l={t:1,d:false,i:0,c:{}}),l.d))return null;if(l.d=true,n===1)s=a?s[o]:s[o]={};else if(n===0&&a)return null;return [o,s,l.c]}function $o(t,{maxDepth:e=1e3,integersAsBigInt:r}={}){let n={},s={},i=n,o=s;for(let a=ie(t,0);a<t.length;){if(t[a]==="["){let l=t[++a]==="[",c=Es(t,a+=+l,"]");if(l){if(t[c[1]-1]!=="]")throw new P("expected end of table declaration",{toml:t,ptr:c[1]-1});c[1]++;}let u=kd(c[0],n,s,l?2:1);if(!u)throw new P("trying to redefine an already defined table or value",{toml:t,ptr:a});o=u[2],i=u[1],a=c[1];}else {let l=Es(t,a),c=kd(l[0],i,o,0);if(!c)throw new P("trying to redefine an already defined table or value",{toml:t,ptr:a});let u=on(t,l[1],void 0,e,r);c[1][c[0]]=u[0],a=u[1];}if(a=ie(t,a,true),t[a]&&t[a]!==`
102
+ `&&t[a]!=="\r")throw new P("each key-value declaration must be followed by an end-of-line",{toml:t,ptr:a});a=ie(t,a);}return n}var bd=/^[a-z0-9-_]+$/i;function an(t){let e=typeof t;if(e==="object"){if(Array.isArray(t))return "array";if(t instanceof Date)return "date"}return e}function _y(t){for(let e=0;e<t.length;e++)if(an(t[e])!=="object")return false;return t.length!=0}function No(t){return JSON.stringify(t).replace(/\x7f/g,"\\u007f")}function Do(t,e,r,n){if(r===0)throw new Error("Could not stringify the object: maximum object depth exceeded");if(e==="number")return isNaN(t)?"nan":t===1/0?"inf":t===-1/0?"-inf":n&&Number.isInteger(t)?t.toFixed(1):t.toString();if(e==="bigint"||e==="boolean")return t.toString();if(e==="string")return No(t);if(e==="date"){if(isNaN(t.getTime()))throw new TypeError("cannot serialize invalid date");return t.toISOString()}if(e==="object")return wy(t,r,n);if(e==="array")return yy(t,r,n)}function wy(t,e,r){let n=Object.keys(t);if(n.length===0)return "{}";let s="{ ";for(let i=0;i<n.length;i++){let o=n[i];i&&(s+=", "),s+=bd.test(o)?o:No(o),s+=" = ",s+=Do(t[o],an(t[o]),e-1,r);}return s+" }"}function yy(t,e,r){if(t.length===0)return "[]";let n="[ ";for(let s=0;s<t.length;s++){if(s&&(n+=", "),t[s]===null||t[s]===void 0)throw new TypeError("arrays cannot contain null or undefined values");n+=Do(t[s],an(t[s]),e-1,r);}return n+" ]"}function ky(t,e,r,n){if(r===0)throw new Error("Could not stringify the object: maximum object depth exceeded");let s="";for(let i=0;i<t.length;i++)s+=`${s&&`
103
103
  `}[[${e}]]
104
- `,i+=$o(0,t[s],e,r,n);return i}function $o(t,e,r,n,i){if(n===0)throw new Error("Could not stringify the object: maximum object depth exceeded");let s="",o="",a=Object.keys(e);for(let l=0;l<a.length;l++){let c=a[l];if(e[c]!==null&&e[c]!==void 0){let u=sn(e[c]);if(u==="symbol"||u==="function")throw new TypeError(`cannot serialize values of type '${u}'`);let d=hd.test(c)?c:Io(c);if(u==="array"&&ry(e[c]))o+=(o&&`
105
- `)+sy(e[c],r?`${r}.${d}`:d,n-1,i);else if(u==="object"){let p=r?`${r}.${d}`:d;o+=(o&&`
106
- `)+$o(p,e[c],p,n-1,i);}else s+=d,s+=" = ",s+=Oo(e[c],u,n,i),s+=`
107
- `;}}return t&&(s||!o)&&(s=s?`[${t}]
108
- ${s}`:`[${t}]`),s&&o?`${s}
109
- ${o}`:s||o}function Si(t,{maxDepth:e=1e3,numbersAsFloat:r=false}={}){if(sn(t)!=="object")throw new TypeError("stringify can only be called with an object");let n=$o(0,t,"",e,r);return n[n.length-1]!==`
104
+ `,s+=jo(0,t[i],e,r,n);return s}function jo(t,e,r,n,s){if(n===0)throw new Error("Could not stringify the object: maximum object depth exceeded");let i="",o="",a=Object.keys(e);for(let l=0;l<a.length;l++){let c=a[l];if(e[c]!==null&&e[c]!==void 0){let u=an(e[c]);if(u==="symbol"||u==="function")throw new TypeError(`cannot serialize values of type '${u}'`);let d=bd.test(c)?c:No(c);if(u==="array"&&_y(e[c]))o+=(o&&`
105
+ `)+ky(e[c],r?`${r}.${d}`:d,n-1,s);else if(u==="object"){let p=r?`${r}.${d}`:d;o+=(o&&`
106
+ `)+jo(p,e[c],p,n-1,s);}else i+=d,i+=" = ",i+=Do(e[c],u,n,s),i+=`
107
+ `;}}return t&&(i||!o)&&(i=i?`[${t}]
108
+ ${i}`:`[${t}]`),i&&o?`${i}
109
+ ${o}`:i||o}function Rs(t,{maxDepth:e=1e3,numbersAsFloat:r=false}={}){if(an(t)!=="object")throw new TypeError("stringify can only be called with an object");let n=jo(0,t,"",e,r);return n[n.length-1]!==`
110
110
  `?n+`
111
- `:n}var oe="pathrule";function No(t){if(!t||t.trim().length===0)return {};let e;try{e=Ao(t);}catch(r){throw new Error(`config.toml is not valid TOML: ${r.message}`)}if(e===null||typeof e!="object"||Array.isArray(e))throw new Error("config.toml root must be a TOML table");return e}function oy(t){let e={command:t.command,args:t.args,enabled:true};return t.env&&Object.keys(t.env).length>0&&(e.env=t.env),e}function ay(t){return !t||typeof t.command!="string"?null:{type:"stdio",command:t.command,args:Array.isArray(t.args)?t.args.map(String):[],env:t.env&&typeof t.env=="object"&&!Array.isArray(t.env)?t.env:void 0}}var gd={id:"codex",homeConfigPath(t,e){return `${t}/.codex/config.toml`},inject(t,e){let r=No(t),n={...r.mcp_servers??{}},i=!(oe in n);n[oe]=oy(e);let s={...r,mcp_servers:n};return {body:Si(s)+`
112
- `,wasNew:i}},remove(t){let e=No(t),r=e.mcp_servers??{};if(!(oe in r))return {body:t,wasPresent:false};let{[oe]:n,...i}=r,s={...e};return Object.keys(i).length===0?delete s.mcp_servers:s.mcp_servers=i,Object.keys(s).length===0?{body:null,wasPresent:true}:{body:Si(s)+`
113
- `,wasPresent:true}},read(t){try{let e=No(t);return ay(e.mcp_servers?.[oe])}catch{return null}}};function ly(t){if(t==null)return {};if(typeof t!="object"||Array.isArray(t))throw new Error("Config root must be a JSON object");let e=t;if(e.mcpServers!==void 0&&(typeof e.mcpServers!="object"||e.mcpServers===null||Array.isArray(e.mcpServers)))throw new Error("`mcpServers` must be an object");return e}function Do(t){if(!t||t.trim().length===0)return {};let e;try{e=JSON.parse(t);}catch(r){throw new Error(`Config is not valid JSON: ${r.message}`)}return ly(e)}function md(t){return JSON.stringify(t,null,2)+`
114
- `}function Ci(t){function e(r){if(t.includeTypeField)return r;let{type:n,...i}=r;return i}return {inject(r,n){let i=Do(r),s={...i.mcpServers??{}},o=!(oe in s);s[oe]=e(n);let a={...i,mcpServers:s};return {body:md(a),wasNew:o}},remove(r){let n=Do(r),i=n.mcpServers??{};if(!(oe in i))return {body:r,wasPresent:false};let{[oe]:s,...o}=i,a={...n,mcpServers:o};return Object.keys(o).length===0&&Object.keys(a).length===1&&"mcpServers"in a?{body:null,wasPresent:true}:{body:md(a),wasPresent:true}},read(r){try{return Do(r).mcpServers?.[oe]??null}catch{return null}}}}var jo=Ci({includeTypeField:true}),_d={id:"cursor",homeConfigPath(t,e){return `${t}/.cursor/mcp.json`},inject:jo.inject,remove:jo.remove,read:jo.read};var Mo=Ci({includeTypeField:false}),wd={id:"windsurf",homeConfigPath(t,e){return `${t}/.codeium/windsurf/mcp_config.json`},inject:Mo.inject,remove:Mo.remove,read:Mo.read};var cy={"claude-code":ad,cursor:_d,codex:gd,windsurf:wd};function Ct(t){return cy[t]}Gr();F();Ee();var my=createRequire(import.meta.url),_y=my("../package.json"),wy=_y.version,yy=["claude-code","cursor","codex","windsurf"];async function Me(t,e){let r=[],n=await Ce(t);r.push({name:"auth",status:n?"pass":"fail",detail:n?n.session.user.email??n.session.user.id:"not_authenticated"});let i=null;if(n){try{let u=await D(t);r.push({name:"organization",status:u?"pass":"warn",detail:u?.slug??"no organization selected"});}catch(u){r.push({name:"organization",status:"fail",detail:u instanceof Error?u.message:String(u)});}try{let u=await M(t);i=u?.local_root_path??null,r.push({name:"workspace",status:u?"pass":"warn",detail:u?.name??"no workspace selected"});}catch(u){r.push({name:"workspace",status:"fail",detail:u instanceof Error?u.message:String(u)});}}r.push({name:"cwd_attach",status:i===e?"pass":"warn",detail:i===e?"current folder is attached":i??"workspace not attached"});let s=await Promise.all(yy.map(Ey)),o=nd(await _i(e),"cli",wy),a=o.filter(u=>u.status==="other_owner").length,l=o.filter(u=>u.status==="newer_version").length;return a>0||l>0?r.push({name:"managed_files",status:"warn",detail:by(a,l)}):o.length>0?r.push({name:"managed_files",status:"pass",detail:`${o.length} Pathrule-managed file${o.length===1?"":"s"} tracked`}):r.push({name:"managed_files",status:"pass",detail:"no Pathrule-managed files tracked yet"}),{ok:!r.some(u=>u.status==="fail"),checks:r,mcp:s,managed_files:o}}async function Uo(t,e){await Sy(t);let r=await Me(t,e),n=A(t);await mkdir(n.supportDir,{recursive:true,mode:j}),await chmod(n.supportDir,j).catch(()=>{});let i=join(n.supportDir,`${new Date().toISOString().replace(/[:.]/g,"-")}-doctor.json`),s={schema_version:1,produced_at:new Date().toISOString(),cwd_hash:Cy(e),platform:process.platform,node_version:process.version,env_keys:Object.keys(t).filter(o=>o.startsWith("PATHRULE_")||o==="CI"||o==="NO_COLOR").sort(),report:ky(r)};return El(s),await writeFile(i,JSON.stringify(s,null,2),{encoding:"utf8",mode:O}),await chmod(i,O).catch(()=>{}),{ok:r.ok,path:i,report:r}}function ky(t){return {ok:t.ok,checks:t.checks.map(e=>({...e,detail:Lo(e.detail)})),mcp:t.mcp.map(e=>({...e,config_path:vy(e.config_path),error:Lo(e.error)})),managed_files:t.managed_files.map(e=>({...e,path:Lo(e.path)??e.path}))}}function by(t,e){let r=[];return t>0&&r.push(`${t} file${t===1?"":"s"} last written by another surface`),e>0&&r.push(`${e} file${e===1?"":"s"} last written by a newer CLI`),r.join("; ")}function Lo(t){return t&&ms(t)}function vy(t){return ms(t,"path")}async function Sy(t){let{supabase:e}=await C(t),{data:r,error:n}=await e.rpc("consume_sensitive_action_grant",{p_action:"token_export"});if(n)throw new Error(`token_export_reauth_check_failed: ${n.message}`);if(r!==true)throw new Error("token_export_reauth_required")}function Cy(t){let e=2166136261;for(let r=0;r<t.length;r+=1)e^=t.charCodeAt(r),e=Math.imul(e,16777619);return (e>>>0).toString(16).padStart(8,"0")}async function Ey(t){let e=Ct(t),r=e.homeConfigPath(homedir(),process.platform);try{let n=await readFile(r,"utf8");return {client:t,config_path:r,readable:!0,installed:e.read(n)!==null}}catch(n){return n.code==="ENOENT"?{client:t,config_path:r,readable:false,installed:false}:{client:t,config_path:r,readable:false,installed:false,error:n instanceof Error?n.message:String(n)}}}var Et=class extends Error{constructor(e){super(e),this.name="WorkspacePathSafetyError";}};async function bd(t,e){let r=await realpath(t),n=xy(e),i=Xe.resolve(r,n||"."),s=await realpath(i);if(!Sd(r,s))throw new Et(`Refused: ${e||"/"} escapes the workspace root`);return {rootRealPath:r,absolutePath:s,relativePath:n===""?"/":`/${Py(n)}`}}async function vd(t,e){try{let r=await realpath(e);return Sd(t,r)?(await stat(r)).isDirectory():!1}catch{return false}}function xy(t){if(typeof t!="string")throw new Et("Refused: workspace path must be a string");if(t.includes("\0"))throw new Et("Refused: workspace path contains a null byte");let e=t.trim();if(e===""||e==="/"||e===".")return "";if(/^[a-zA-Z]:[\\/]/.test(e)||e.startsWith("\\\\"))throw new Et("Refused: absolute workspace path is not allowed");let r=e.replace(/^[/\\]+/,""),i=Xe.normalize(r).split(/[\\/]+/).filter(Boolean);if(i.includes(".."))throw new Et(`Refused: ${t} escapes the workspace root`);return i.join(Xe.sep)}function Sd(t,e){let r=kd(Xe.resolve(t)),n=kd(Xe.resolve(e)),i=r.endsWith(Xe.sep)?r:r+Xe.sep;return n===r||n.startsWith(i)}function kd(t){return process.platform==="win32"||process.platform==="darwin"?t.toLowerCase():t}function Py(t){return t.split(Xe.sep).join("/")}var Iy=new Set([".git","node_modules",".next","dist","build",".turbo",".cache","coverage","target","__pycache__",".venv","venv",".DS_Store",".idea",".vscode"]);async function Bo(t,e){let r=await bd(t,e),n=await promises.readdir(r.absolutePath,{withFileTypes:true,encoding:"utf8"}),i=[];for(let s of n){if(Iy.has(s.name))continue;let o=Xe.join(r.absolutePath,s.name),a=s.isDirectory()||s.isSymbolicLink()&&await vd(r.rootRealPath,o);i.push({absPath:o,relativePath:Oy(e,s.name),name:s.name,isDir:a});}return i.sort((s,o)=>s.isDir!==o.isDir?s.isDir?-1:1:s.name.localeCompare(o.name)),i}function Oy(t,e){return t==="/"||t===""?"/"+e:t+"/"+e}K();var My=336*60*60*1e3,Ly=6e4,Cd=new Map;async function Ei(t){let e=Rd(t.env,t.workspaceId),r=false;if(t.refreshEpisodes!==false&&Uy(t.workspaceId)){let o=Date.now(),{error:a}=await t.supabase.rpc("pathrule_refresh_work_episodes",{p_workspace_id:t.workspaceId,p_since:new Date(o-My).toISOString()});r=!a;}let{data:n,error:i}=await t.supabase.rpc("pathrule_build_hook_index_payload",{p_workspace_id:t.workspaceId});if(i)return {ok:false,path:e,refreshed_episodes:r,schema_version:null,error:i.message};if(!n||typeof n!="object")return {ok:false,path:e,refreshed_episodes:r,schema_version:null,error:"empty_hook_index_payload"};let s={...n,workspace_root:t.workspaceRoot};return await Wy(t.env,s),{ok:true,path:e,refreshed_episodes:r,schema_version:s.schema_version}}function Uy(t){let e=Date.now(),r=Cd.get(t)??0;return e-r<Ly?false:(Cd.set(t,e),true)}function Rd(t,e){return join(A(t).home,"cache",e,"hook-index.json")}async function Wy(t,e){let r=Rd(t,e.workspace_id);await mkdir(join(A(t).home,"cache",e.workspace_id),{recursive:true});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(e,null,2),"utf8"),await chmod(n,384),await rename(n,r);}K();F();Ge();function Rt(t,e){let r=[];r.push("<!-- Pathrule managed \u2014 do not edit; cloud state is authoritative. -->",""),r.push("# Pathrule integration",""),r.push("Pathrule is this workspace's shared memory, rule, and skill layer for AI agents.",`${e.toolLabel} should use it as a smart reminder system, not a full-context dump.`,""),r.push("## Context Policy",""),r.push("- Pathrule is the first knowledge layer for this workspace. Use hook context first: metadata, relevant rule titles, path reminders, and filename/skill matches.","- `::skill-name` is a hard gate: use the exact injected skill; if missing, stop and resolve it through Pathrule/MCP before file edits.",'- Do not reflexively call `pathrule_get_context` before every small known-path code task. For discovery, inventory, architecture, recent activity, or "list/show/find/where/which" prompts (Turkish: listele, g\xF6ster, bul, nerede, hangi, neler), call it before any grep/read/fallback when hook context is missing, ambiguous, or stale.',"- Hook silence on a topic does not mean Pathrule has no relevant memory/rule. For discovery/inventory/architecture questions, call `pathrule_get_context` first; fall back to files, git, or general knowledge only after Pathrule returns nothing relevant.","- When calling `pathrule_get_context`, pass `cwd`, `user_intent`, and `omit_protocol: true`; the companion file already contains the protocol.","- Read full bodies with `pathrule_read_memory`, `pathrule_read_rule`, or `pathrule_read_skill` when a surfaced title/id is relevant.","- Treat existing local edits as protected user/team work: inspect overlaps, never revert unrelated changes, and keep edits scoped.","- Obey every surfaced rule. If a user request conflicts with a Pathrule rule, warn before taking action.",""),r.push("## Writes",""),r.push("- Pathrule cloud is the source of truth. Do not create local memory files such as `MEMORY.md` or `~/.claude/memory/`.","- Use path-first writes for lasting project knowledge: `pathrule_write_memory`, `pathrule_write_rule`, and `pathrule_write_skill` take the most specific workspace-relative `node_path`.","- Do not edit materialized local Pathrule files as the source of truth. This includes `.codex/skills/**/SKILL.md`, `.claude/skills/**`, rendered companion files, and synced skill/memory/rule files. Read only for orientation; create/update cloud records with the Pathrule MCP write/update tools.","- After any file-modifying response, call `pathrule_log_activity` once with domain, action, scope, subjects, files_touched, and a concise task_summary.","");let n=r.join(`
111
+ `:n}var oe="pathrule";function Mo(t){if(!t||t.trim().length===0)return {};let e;try{e=$o(t);}catch(r){throw new Error(`config.toml is not valid TOML: ${r.message}`)}if(e===null||typeof e!="object"||Array.isArray(e))throw new Error("config.toml root must be a TOML table");return e}function by(t){let e={command:t.command,args:t.args,enabled:true};return t.env&&Object.keys(t.env).length>0&&(e.env=t.env),e}function vy(t){return !t||typeof t.command!="string"?null:{type:"stdio",command:t.command,args:Array.isArray(t.args)?t.args.map(String):[],env:t.env&&typeof t.env=="object"&&!Array.isArray(t.env)?t.env:void 0}}var vd={id:"codex",homeConfigPath(t,e){return `${t}/.codex/config.toml`},inject(t,e){let r=Mo(t),n={...r.mcp_servers??{}},s=!(oe in n);n[oe]=by(e);let i={...r,mcp_servers:n};return {body:Rs(i)+`
112
+ `,wasNew:s}},remove(t){let e=Mo(t),r=e.mcp_servers??{};if(!(oe in r))return {body:t,wasPresent:false};let{[oe]:n,...s}=r,i={...e};return Object.keys(s).length===0?delete i.mcp_servers:i.mcp_servers=s,Object.keys(i).length===0?{body:null,wasPresent:true}:{body:Rs(i)+`
113
+ `,wasPresent:true}},read(t){try{let e=Mo(t);return vy(e.mcp_servers?.[oe])}catch{return null}}};function Sy(t){if(t==null)return {};if(typeof t!="object"||Array.isArray(t))throw new Error("Config root must be a JSON object");let e=t;if(e.mcpServers!==void 0&&(typeof e.mcpServers!="object"||e.mcpServers===null||Array.isArray(e.mcpServers)))throw new Error("`mcpServers` must be an object");return e}function Lo(t){if(!t||t.trim().length===0)return {};let e;try{e=JSON.parse(t);}catch(r){throw new Error(`Config is not valid JSON: ${r.message}`)}return Sy(e)}function Sd(t){return JSON.stringify(t,null,2)+`
114
+ `}function xs(t){function e(r){if(t.includeTypeField)return r;let{type:n,...s}=r;return s}return {inject(r,n){let s=Lo(r),i={...s.mcpServers??{}},o=!(oe in i);i[oe]=e(n);let a={...s,mcpServers:i};return {body:Sd(a),wasNew:o}},remove(r){let n=Lo(r),s=n.mcpServers??{};if(!(oe in s))return {body:r,wasPresent:false};let{[oe]:i,...o}=s,a={...n,mcpServers:o};return Object.keys(o).length===0&&Object.keys(a).length===1&&"mcpServers"in a?{body:null,wasPresent:true}:{body:Sd(a),wasPresent:true}},read(r){try{return Lo(r).mcpServers?.[oe]??null}catch{return null}}}}var Uo=xs({includeTypeField:true}),Cd={id:"cursor",homeConfigPath(t,e){return `${t}/.cursor/mcp.json`},inject:Uo.inject,remove:Uo.remove,read:Uo.read};var Wo=xs({includeTypeField:false}),Ed={id:"windsurf",homeConfigPath(t,e){return `${t}/.codeium/windsurf/mcp_config.json`},inject:Wo.inject,remove:Wo.remove,read:Wo.read};var Cy={"claude-code":fd,cursor:Cd,codex:vd,windsurf:Ed};function Et(t){return Cy[t]}Xr();B();Ee();var Iy=createRequire(import.meta.url),Oy=Iy("../package.json"),$y=Oy.version,Ny=["claude-code","cursor","codex","windsurf"];async function Me(t,e){let r=[],n=await Ce(t);r.push({name:"auth",status:n?"pass":"fail",detail:n?n.session.user.email??n.session.user.id:"not_authenticated"});let s=null;if(n){try{let u=await j(t);r.push({name:"organization",status:u?"pass":"warn",detail:u?.slug??"no organization selected"});}catch(u){r.push({name:"organization",status:"fail",detail:u instanceof Error?u.message:String(u)});}try{let u=await $(t);s=u?.local_root_path??null,r.push({name:"workspace",status:u?"pass":"warn",detail:u?.name??"no workspace selected"});}catch(u){r.push({name:"workspace",status:"fail",detail:u instanceof Error?u.message:String(u)});}}r.push({name:"cwd_attach",status:s===e?"pass":"warn",detail:s===e?"current folder is attached":s??"workspace not attached"});let i=await Promise.all(Ny.map(Wy)),o=ud(await ks(e),"cli",$y),a=o.filter(u=>u.status==="other_owner").length,l=o.filter(u=>u.status==="newer_version").length;return a>0||l>0?r.push({name:"managed_files",status:"warn",detail:jy(a,l)}):o.length>0?r.push({name:"managed_files",status:"pass",detail:`${o.length} Pathrule-managed file${o.length===1?"":"s"} tracked`}):r.push({name:"managed_files",status:"pass",detail:"no Pathrule-managed files tracked yet"}),{ok:!r.some(u=>u.status==="fail"),checks:r,mcp:i,managed_files:o}}async function Fo(t,e){await Ly(t);let r=await Me(t,e),n=A(t);await mkdir(n.supportDir,{recursive:true,mode:M}),await chmod(n.supportDir,M).catch(()=>{});let s=join(n.supportDir,`${new Date().toISOString().replace(/[:.]/g,"-")}-doctor.json`),i={schema_version:1,produced_at:new Date().toISOString(),cwd_hash:Uy(e),platform:process.platform,node_version:process.version,env_keys:Object.keys(t).filter(o=>o.startsWith("PATHRULE_")||o==="CI"||o==="NO_COLOR").sort(),report:Dy(r)};return Ol(i),await writeFile(s,JSON.stringify(i,null,2),{encoding:"utf8",mode:O}),await chmod(s,O).catch(()=>{}),{ok:r.ok,path:s,report:r}}function Dy(t){return {ok:t.ok,checks:t.checks.map(e=>({...e,detail:Bo(e.detail)})),mcp:t.mcp.map(e=>({...e,config_path:My(e.config_path),error:Bo(e.error)})),managed_files:t.managed_files.map(e=>({...e,path:Bo(e.path)??e.path}))}}function jy(t,e){let r=[];return t>0&&r.push(`${t} file${t===1?"":"s"} last written by another surface`),e>0&&r.push(`${e} file${e===1?"":"s"} last written by a newer CLI`),r.join("; ")}function Bo(t){return t&&yi(t)}function My(t){return yi(t,"path")}async function Ly(t){let{supabase:e}=await S(t),{data:r,error:n}=await e.rpc("consume_sensitive_action_grant",{p_action:"token_export"});if(n)throw new Error(`token_export_reauth_check_failed: ${n.message}`);if(r!==true)throw new Error("token_export_reauth_required")}function Uy(t){let e=2166136261;for(let r=0;r<t.length;r+=1)e^=t.charCodeAt(r),e=Math.imul(e,16777619);return (e>>>0).toString(16).padStart(8,"0")}async function Wy(t){let e=Et(t),r=e.homeConfigPath(homedir(),process.platform);try{let n=await readFile(r,"utf8");return {client:t,config_path:r,readable:!0,installed:e.read(n)!==null}}catch(n){return n.code==="ENOENT"?{client:t,config_path:r,readable:false,installed:false}:{client:t,config_path:r,readable:false,installed:false,error:n instanceof Error?n.message:String(n)}}}var Rt=class extends Error{constructor(e){super(e),this.name="WorkspacePathSafetyError";}};async function Pd(t,e){let r=await realpath(t),n=Fy(e),s=Xe.resolve(r,n||"."),i=await realpath(s);if(!Ad(r,i))throw new Rt(`Refused: ${e||"/"} escapes the workspace root`);return {rootRealPath:r,absolutePath:i,relativePath:n===""?"/":`/${Hy(n)}`}}async function Td(t,e){try{let r=await realpath(e);return Ad(t,r)?(await stat(r)).isDirectory():!1}catch{return false}}function Fy(t){if(typeof t!="string")throw new Rt("Refused: workspace path must be a string");if(t.includes("\0"))throw new Rt("Refused: workspace path contains a null byte");let e=t.trim();if(e===""||e==="/"||e===".")return "";if(/^[a-zA-Z]:[\\/]/.test(e)||e.startsWith("\\\\"))throw new Rt("Refused: absolute workspace path is not allowed");let r=e.replace(/^[/\\]+/,""),s=Xe.normalize(r).split(/[\\/]+/).filter(Boolean);if(s.includes(".."))throw new Rt(`Refused: ${t} escapes the workspace root`);return s.join(Xe.sep)}function Ad(t,e){let r=xd(Xe.resolve(t)),n=xd(Xe.resolve(e)),s=r.endsWith(Xe.sep)?r:r+Xe.sep;return n===r||n.startsWith(s)}function xd(t){return process.platform==="win32"||process.platform==="darwin"?t.toLowerCase():t}function Hy(t){return t.split(Xe.sep).join("/")}var Jy=new Set([".git","node_modules",".next","dist","build",".turbo",".cache","coverage","target","__pycache__",".venv","venv",".DS_Store",".idea",".vscode"]);async function qo(t,e){let r=await Pd(t,e),n=await promises.readdir(r.absolutePath,{withFileTypes:true,encoding:"utf8"}),s=[];for(let i of n){if(Jy.has(i.name))continue;let o=Xe.join(r.absolutePath,i.name),a=i.isDirectory()||i.isSymbolicLink()&&await Td(r.rootRealPath,o);s.push({absPath:o,relativePath:Ky(e,i.name),name:i.name,isDir:a});}return s.sort((i,o)=>i.isDir!==o.isDir?i.isDir?-1:1:i.name.localeCompare(o.name)),s}function Ky(t,e){return t==="/"||t===""?"/"+e:t+"/"+e}K();var Zy=336*60*60*1e3,Qy=6e4,Id=new Map;async function Ps(t){let e=$d(t.env,t.workspaceId),r=false;if(t.refreshEpisodes!==false&&ek(t.workspaceId)){let o=Date.now(),{error:a}=await t.supabase.rpc("pathrule_refresh_work_episodes",{p_workspace_id:t.workspaceId,p_since:new Date(o-Zy).toISOString()});r=!a;}let{data:n,error:s}=await t.supabase.rpc("pathrule_build_hook_index_payload",{p_workspace_id:t.workspaceId});if(s)return {ok:false,path:e,refreshed_episodes:r,schema_version:null,error:s.message};if(!n||typeof n!="object")return {ok:false,path:e,refreshed_episodes:r,schema_version:null,error:"empty_hook_index_payload"};let i={...n,workspace_root:t.workspaceRoot};return await tk(t.env,i),{ok:true,path:e,refreshed_episodes:r,schema_version:i.schema_version}}function ek(t){let e=Date.now(),r=Id.get(t)??0;return e-r<Qy?false:(Id.set(t,e),true)}function $d(t,e){return join(A(t).home,"cache",e,"hook-index.json")}async function tk(t,e){let r=$d(t,e.workspace_id);await mkdir(join(A(t).home,"cache",e.workspace_id),{recursive:true});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(e,null,2),"utf8"),await chmod(n,384),await rename(n,r);}K();B();Ge();function xt(t,e){let r=[];r.push("<!-- Pathrule managed \u2014 do not edit; cloud state is authoritative. -->",""),r.push("# Pathrule integration",""),r.push("Pathrule is this workspace's shared memory, rule, and skill layer for AI agents.",`${e.toolLabel} should use it as a smart reminder system, not a full-context dump.`,""),r.push("## Context Policy",""),r.push("- Pathrule is the first knowledge layer for this workspace. Use hook context first: metadata, relevant rule titles, path reminders, and filename/skill matches.","- `::skill-name` is a hard gate: use the exact injected skill; if missing, stop and resolve it through Pathrule/MCP before file edits.",'- Do not reflexively call `pathrule_get_context` before every small known-path code task. For discovery, inventory, architecture, recent activity, or "list/show/find/where/which" prompts (Turkish: listele, g\xF6ster, bul, nerede, hangi, neler), call it before any grep/read/fallback when hook context is missing, ambiguous, or stale.',"- Hook silence on a topic does not mean Pathrule has no relevant memory/rule. For discovery/inventory/architecture questions, call `pathrule_get_context` first; fall back to files, git, or general knowledge only after Pathrule returns nothing relevant.","- When calling `pathrule_get_context`, pass `cwd`, `user_intent`, and `omit_protocol: true`; the companion file already contains the protocol.","- Read full bodies with `pathrule_read_memory`, `pathrule_read_rule`, or `pathrule_read_skill` when a surfaced title/id is relevant.","- Treat existing local edits as protected user/team work: inspect overlaps, never revert unrelated changes, and keep edits scoped.","- Obey every surfaced rule. If a user request conflicts with a Pathrule rule, warn before taking action.",""),r.push("## Writes",""),r.push("- Pathrule cloud is the source of truth. Do not create local memory files such as `MEMORY.md` or `~/.claude/memory/`.","- Use path-first writes for lasting project knowledge: `pathrule_write_memory`, `pathrule_write_rule`, and `pathrule_write_skill` take the most specific workspace-relative `node_path`.","- Do not edit materialized local Pathrule files as the source of truth. This includes `.codex/skills/**/SKILL.md`, `.claude/skills/**`, rendered companion files, and synced skill/memory/rule files. Read only for orientation; create/update cloud records with the Pathrule MCP write/update tools.","- After any file-modifying response, call `pathrule_log_activity` once with domain, action, scope, subjects, files_touched, and a concise task_summary.","");let n=r.join(`
115
115
  `).replace(/\n{3,}/g,`
116
116
 
117
117
  `);return n.endsWith(`
118
118
  `)?n:`${n}
119
- `}var xd="AGENTS.md",Pd=".codex/hooks.json",Td=".codex/config.toml";function By(t){let e=Rt(t,{toolLabel:"Codex"}),r=dl(He()),n=Rn(null).body;return [{path:xd,body:e},{path:Pd,body:r},{path:Td,body:n}]}function Fy(t){return [xd,"codex.md",Pd,Td]}var Ad={id:"codex",render:By,ownedPaths:Fy};var Id=".cursor/rules/pathrule-protocol.mdc",Od=".cursorrules",$d=".cursor/hooks.json";function Hy(){return ["## Cursor-specific guardrail","","- If you call `pathrule_get_context`, include BOTH `cwd` and `user_intent`.","- `cwd` MUST be the absolute path of the active workspace root.","- Never call `pathrule_get_context` with empty args. If `cwd` is unknown, resolve it first.","","Example:","","```json",`{ "cwd": "/absolute/path/to/workspace", "user_intent": "<user's last message>", "omit_protocol": true }`,"```",""].join(`
120
- `)}function qy(){return ["---",'description: "Pathrule integration \u2014 workspace-shared memories, rules, and skills"',"alwaysApply: true","---",""].join(`
121
- `)}function zy(t){let e=Rt(t,{toolLabel:"Cursor"})+`
122
- `+Hy(),r=ul(He());return [{path:Id,body:qy()+e},{path:Od,body:e},{path:$d,body:r}]}function Jy(t){return [Id,Od,$d]}var Nd={id:"cursor",render:zy,ownedPaths:Jy};var Dd=".windsurf/rules/pathrule-protocol.md",jd=".windsurfrules";function Ky(t){let e=Rt(t,{toolLabel:"Windsurf"});return [{path:Dd,body:e},{path:jd,body:e}]}function Vy(t){return [Dd,jd]}var Md={id:"windsurf",render:Ky,ownedPaths:Vy};var Gy={cursor:Nd,codex:Ad,windsurf:Md};function Ld(t){return Gy[t]??null}async function Yy(t,e){let{data:r,error:n}=await t.from("workspaces").select("name").eq("id",e).maybeSingle();if(n)throw new Error(`workspaces lookup failed: ${n.message}`);if(!r)throw new Error(`workspace ${e} not found (RLS or deleted)`);return r.name}async function Xy(t,e){try{let r=new Date(Date.now()-12096e5).toISOString(),{data:n}=await t.from("activity_logs").select("domain, action, task_summary, created_at").eq("workspace_id",e).eq("status","active").gte("created_at",r).order("created_at",{ascending:!1}).limit(8);return n??[]}catch{return []}}async function Ud(t){let e={supabase:t.supabase},[r,n,i,s]=await Promise.all([Yy(t.supabase,t.workspaceId),vn(e,{workspace_id:t.workspaceId,relative_path:"/"}),Ut(e,{workspace_id:t.workspaceId}),Xy(t.supabase,t.workspaceId)]);if(!n.ok)throw new Error(`getContext failed: ${n.error.message}`);if(!i.ok)throw new Error(`getWorkspaceOverview failed: ${i.error.message}`);return {workspaceName:r,rootContext:{memories:n.data.memories.map(o=>({id:o.id,title:o.title,preview:o.preview})),rules:n.data.rules,skills:n.data.skills.map(o=>({id:o.id,name:o.name,description:o.description,source:o.source}))},overview:i.data,recentActivities:s.length>0?s:void 0}}function Wd(t,e){let r=[];for(let n of e){let i=Ld(n);i&&r.push({client:n,files:i.render(t),ownedPaths:i.ownedPaths(t)});}return r}var Fo="<!-- Pathrule managed",nk="<!-- managed by Pathrule";var ik={".cursor/rules/pathrule-protocol.mdc":{kind:"overwrite"},".cursorrules":{kind:"backup-on-first-write",markerSubstring:Fo},".cursor/hooks.json":{kind:"merge",merger:gl},".claude/rules/pathrule-protocol.md":{kind:"overwrite"},".claude/settings.json":{kind:"merge",merger:En},"CLAUDE.md":{kind:"backup-on-first-write",markerSubstring:nk},"AGENTS.md":{kind:"backup-on-first-write",markerSubstring:Fo},".codex/hooks.json":{kind:"merge",merger:ml},".codex/config.toml":{kind:"merge",merger:Rn},".windsurf/rules/pathrule-protocol.md":{kind:"overwrite"},".windsurfrules":{kind:"backup-on-first-write",markerSubstring:Fo}};async function Fd(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function sk(t){if(!await Fd(t))return t;for(let e=1;e<1e3;e+=1){let r=`${t}.${e}`;if(!await Fd(r))return r}throw new Error(`Could not find a free backup name near ${t}`)}async function Ri(t){let e=ik[t.relativePath]??{kind:"overwrite"},r=join(t.workspaceRoot,t.relativePath);switch(e.kind){case "overwrite":return t.existingBody===t.renderedBody?{finalBody:null,backupPath:null}:{finalBody:t.renderedBody,backupPath:null};case "backup-on-first-write":{let n=t.existingBody!==null&&!t.existingBody.includes(e.markerSubstring)&&t.existingBody!==t.renderedBody,i=null;if(n){let s=await sk(join(dirname(r),`backup.${basename(r)}`));await rename(r,s),i=s;}return t.existingBody===t.renderedBody?{finalBody:null,backupPath:null}:{finalBody:t.renderedBody,backupPath:i}}case "merge":{let{body:n,changed:i}=e.merger(t.existingBody);return !i&&t.existingBody===n?{finalBody:null,backupPath:null}:{finalBody:n,backupPath:null}}}}async function hk(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function gk(t,e){await mkdir(dirname(t),{recursive:true});let r=`${t}.tmp`;await writeFile(r,e,"utf8"),await rename(r,t);}async function mk(t){try{return await readFile(t,"utf8")}catch(e){if(e.code==="ENOENT")return null;throw e}}async function _k(t){try{return await unlink(t),!0}catch(e){return e.code==="ENOENT",false}}async function qd(t){let e={written:0,skipped:0,removed:0,backedUp:[],errors:[]},r=new Set,n=new Set;for(let i of t.results){let s=new Set(i.files.map(o=>o.path));for(let o of i.files){let a=join(t.workspaceRoot,o.path);try{let l=await mk(a),c=await Ri({workspaceRoot:t.workspaceRoot,relativePath:o.path,renderedBody:o.body,existingBody:l});if(c.backupPath&&e.backedUp.push(c.backupPath),c.finalBody===null){e.skipped+=1,r.add(o.path);continue}await gk(a,c.finalBody),e.written+=1,r.add(o.path);}catch(l){e.errors.push({path:o.path,message:l instanceof Error?l.message:String(l)});}}for(let o of i.ownedPaths){if(s.has(o))continue;let a=join(t.workspaceRoot,o);if(!await hk(a))continue;await _k(a)&&(e.removed+=1,n.add(o));}}if(t.runtimeOwner&&t.runtimeVersion)try{await wi({workspaceRoot:t.workspaceRoot,paths:Array.from(r),owner:t.runtimeOwner,ownerVersion:t.runtimeVersion}),await rd({workspaceRoot:t.workspaceRoot,paths:Array.from(n)});}catch(i){e.errors.push({path:".pathrule/managed-files.json",message:i instanceof Error?i.message:String(i)});}return e}var wk=["cursor","codex","windsurf"];async function yk(t,e,r){let{data:n}=await t.from("user_workspace_paths").select("selected_ai_clients").eq("workspace_id",r).eq("user_id",e).maybeSingle();return n?.selected_ai_clients??null}async function zd(t){let e={written:0,skipped:0,removed:0,backedUp:[],errors:[]};try{let[r,n]=await Promise.all([yk(t.supabase,t.userId,t.workspaceId),ze(t.workspaceRoot)]),i=In({selected:r,detected:n,fallback:Pn}),s=i.filter(c=>wk.includes(c));if(s.length===0)return {ok:!0,enabled:i,results:[],disk:e};let o=await Ud({supabase:t.supabase,workspaceId:t.workspaceId,userId:t.userId}),a=Wd(o,s),l=await qd({workspaceRoot:t.workspaceRoot,results:a,sweepFor:s,runtimeOwner:t.runtimeOwner,runtimeVersion:t.runtimeVersion});return {ok:!0,enabled:i,results:a,disk:l}}catch(r){return {ok:false,enabled:[],results:[],disk:e,error:r instanceof Error?r.message:String(r)}}}K();var xk=".pathrule-skills-manifest.json",ir=2;function on(){return {version:ir,skills:{}}}function an(t){return createHash("sha256").update(t,"utf8").digest("hex")}function Jd(t){return join(t,".claude",xk)}function Pk(t){if(!t||typeof t!="object")return false;let e=t;return typeof e.slug=="string"&&typeof e.hash=="string"&&typeof e.source=="string"&&(e.fetchedAt===null||typeof e.fetchedAt=="string")&&Array.isArray(e.targets)&&e.targets.every(r=>typeof r=="string")}function Tk(t){if(!t||typeof t!="object")return false;let e=t;return typeof e.path=="string"&&typeof e.hash=="string"}function Ak(t,e){if(!t||typeof t!="object"||Array.isArray(t))return null;let r={};for(let[n,i]of Object.entries(t)){if(!Pk(i)||e===ir&&i.files!==void 0&&!Array.isArray(i.files)||e===ir&&i.files?.some(s=>!Tk(s)))return null;r[n]={slug:i.slug,hash:i.hash,source:i.source,fetchedAt:i.fetchedAt,targets:i.targets,...e===ir&&i.files?{files:i.files}:{}};}return r}async function Kd(t){try{let e=await readFile(Jd(t),"utf8"),r=JSON.parse(e);if(!r||typeof r!="object"||r.version!==ir&&r.version!==1)return on();let n=Ak(r.skills??{},r.version);return n?{version:ir,skills:n}:on()}catch{return on()}}async function Vd(t,e){let r=Jd(t);await mkdir(dirname(r),{recursive:true});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(e,null,2),"utf8"),await rename(n,r);}async function sr(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function Fk(t,e){await mkdir(dirname(t),{recursive:true});let r=`${t}.tmp`;await writeFile(r,e,"utf8"),await rename(r,t);}function Hk(t){let e=t.content??"";if(e.trim().startsWith("---"))return e.endsWith(`
119
+ `}var Nd="AGENTS.md",Dd=".codex/hooks.json",jd=".codex/config.toml";function rk(t){let e=xt(t,{toolLabel:"Codex"}),r=wl(He()),n=Tn(null).body;return [{path:Nd,body:e},{path:Dd,body:r},{path:jd,body:n}]}function nk(t){return [Nd,"codex.md",Dd,jd]}var Md={id:"codex",render:rk,ownedPaths:nk};var Ld=".cursor/rules/pathrule-protocol.mdc",Ud=".cursorrules",Wd=".cursor/hooks.json";function sk(){return ["## Cursor-specific guardrail","","- If you call `pathrule_get_context`, include BOTH `cwd` and `user_intent`.","- `cwd` MUST be the absolute path of the active workspace root.","- Never call `pathrule_get_context` with empty args. If `cwd` is unknown, resolve it first.","","Example:","","```json",`{ "cwd": "/absolute/path/to/workspace", "user_intent": "<user's last message>", "omit_protocol": true }`,"```",""].join(`
120
+ `)}function ik(){return ["---",'description: "Pathrule integration \u2014 workspace-shared memories, rules, and skills"',"alwaysApply: true","---",""].join(`
121
+ `)}function ok(t){let e=xt(t,{toolLabel:"Cursor"})+`
122
+ `+sk(),r=_l(He());return [{path:Ld,body:ik()+e},{path:Ud,body:e},{path:Wd,body:r}]}function ak(t){return [Ld,Ud,Wd]}var Bd={id:"cursor",render:ok,ownedPaths:ak};var Fd=".windsurf/rules/pathrule-protocol.md",Hd=".windsurfrules";function lk(t){let e=xt(t,{toolLabel:"Windsurf"});return [{path:Fd,body:e},{path:Hd,body:e}]}function ck(t){return [Fd,Hd]}var qd={id:"windsurf",render:lk,ownedPaths:ck};var uk={cursor:Bd,codex:Md,windsurf:qd};function zd(t){return uk[t]??null}async function dk(t,e){let{data:r,error:n}=await t.from("workspaces").select("name").eq("id",e).maybeSingle();if(n)throw new Error(`workspaces lookup failed: ${n.message}`);if(!r)throw new Error(`workspace ${e} not found (RLS or deleted)`);return r.name}async function pk(t,e){try{let r=new Date(Date.now()-12096e5).toISOString(),{data:n}=await t.from("activity_logs").select("domain, action, task_summary, created_at").eq("workspace_id",e).eq("status","active").gte("created_at",r).order("created_at",{ascending:!1}).limit(8);return n??[]}catch{return []}}async function Jd(t){let e={supabase:t.supabase},[r,n,s,i]=await Promise.all([dk(t.supabase,t.workspaceId),En(e,{workspace_id:t.workspaceId,relative_path:"/"}),Wt(e,{workspace_id:t.workspaceId}),pk(t.supabase,t.workspaceId)]);if(!n.ok)throw new Error(`getContext failed: ${n.error.message}`);if(!s.ok)throw new Error(`getWorkspaceOverview failed: ${s.error.message}`);return {workspaceName:r,rootContext:{memories:n.data.memories.map(o=>({id:o.id,title:o.title,preview:o.preview})),rules:n.data.rules,skills:n.data.skills.map(o=>({id:o.id,name:o.name,description:o.description,source:o.source}))},overview:s.data,recentActivities:i.length>0?i:void 0}}function Kd(t,e){let r=[];for(let n of e){let s=zd(n);s&&r.push({client:n,files:s.render(t),ownedPaths:s.ownedPaths(t)});}return r}var zo="<!-- Pathrule managed",wk="<!-- managed by Pathrule";var yk={".cursor/rules/pathrule-protocol.mdc":{kind:"overwrite"},".cursorrules":{kind:"backup-on-first-write",markerSubstring:zo},".cursor/hooks.json":{kind:"merge",merger:vl},".claude/rules/pathrule-protocol.md":{kind:"overwrite"},".claude/settings.json":{kind:"merge",merger:Pn},"CLAUDE.md":{kind:"backup-on-first-write",markerSubstring:wk},"AGENTS.md":{kind:"backup-on-first-write",markerSubstring:zo},".codex/hooks.json":{kind:"merge",merger:Sl},".codex/config.toml":{kind:"merge",merger:Tn},".windsurf/rules/pathrule-protocol.md":{kind:"overwrite"},".windsurfrules":{kind:"backup-on-first-write",markerSubstring:zo}};async function Gd(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function kk(t){if(!await Gd(t))return t;for(let e=1;e<1e3;e+=1){let r=`${t}.${e}`;if(!await Gd(r))return r}throw new Error(`Could not find a free backup name near ${t}`)}async function Ts(t){let e=yk[t.relativePath]??{kind:"overwrite"},r=join(t.workspaceRoot,t.relativePath);switch(e.kind){case "overwrite":return t.existingBody===t.renderedBody?{finalBody:null,backupPath:null}:{finalBody:t.renderedBody,backupPath:null};case "backup-on-first-write":{let n=t.existingBody!==null&&!t.existingBody.includes(e.markerSubstring)&&t.existingBody!==t.renderedBody,s=null;if(n){let i=await kk(join(dirname(r),`backup.${basename(r)}`));await rename(r,i),s=i;}return t.existingBody===t.renderedBody?{finalBody:null,backupPath:null}:{finalBody:t.renderedBody,backupPath:s}}case "merge":{let{body:n,changed:s}=e.merger(t.existingBody);return !s&&t.existingBody===n?{finalBody:null,backupPath:null}:{finalBody:n,backupPath:null}}}}async function Tk(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function Ak(t,e){await mkdir(dirname(t),{recursive:true});let r=`${t}.tmp`;await writeFile(r,e,"utf8"),await rename(r,t);}async function Ik(t){try{return await readFile(t,"utf8")}catch(e){if(e.code==="ENOENT")return null;throw e}}async function Ok(t){try{return await unlink(t),!0}catch(e){return e.code==="ENOENT",false}}async function Xd(t){let e={written:0,skipped:0,removed:0,backedUp:[],errors:[]},r=new Set,n=new Set;for(let s of t.results){let i=new Set(s.files.map(o=>o.path));for(let o of s.files){let a=join(t.workspaceRoot,o.path);try{let l=await Ik(a),c=await Ts({workspaceRoot:t.workspaceRoot,relativePath:o.path,renderedBody:o.body,existingBody:l});if(c.backupPath&&e.backedUp.push(c.backupPath),c.finalBody===null){e.skipped+=1,r.add(o.path);continue}await Ak(a,c.finalBody),e.written+=1,r.add(o.path);}catch(l){e.errors.push({path:o.path,message:l instanceof Error?l.message:String(l)});}}for(let o of s.ownedPaths){if(i.has(o))continue;let a=join(t.workspaceRoot,o);if(!await Tk(a))continue;await Ok(a)&&(e.removed+=1,n.add(o));}}if(t.runtimeOwner&&t.runtimeVersion)try{await bs({workspaceRoot:t.workspaceRoot,paths:Array.from(r),owner:t.runtimeOwner,ownerVersion:t.runtimeVersion}),await cd({workspaceRoot:t.workspaceRoot,paths:Array.from(n)});}catch(s){e.errors.push({path:".pathrule/managed-files.json",message:s instanceof Error?s.message:String(s)});}return e}var $k=["cursor","codex","windsurf"];async function Nk(t,e,r){let{data:n}=await t.from("user_workspace_paths").select("selected_ai_clients").eq("workspace_id",r).eq("user_id",e).maybeSingle();return n?.selected_ai_clients??null}async function Zd(t){let e={written:0,skipped:0,removed:0,backedUp:[],errors:[]};try{let[r,n]=await Promise.all([Nk(t.supabase,t.userId,t.workspaceId),ze(t.workspaceRoot)]),s=Nn({selected:r,detected:n,fallback:In}),i=s.filter(c=>$k.includes(c));if(i.length===0)return {ok:!0,enabled:s,results:[],disk:e};let o=await Jd({supabase:t.supabase,workspaceId:t.workspaceId,userId:t.userId}),a=Kd(o,i),l=await Xd({workspaceRoot:t.workspaceRoot,results:a,sweepFor:i,runtimeOwner:t.runtimeOwner,runtimeVersion:t.runtimeVersion});return {ok:!0,enabled:s,results:a,disk:l}}catch(r){return {ok:false,enabled:[],results:[],disk:e,error:r instanceof Error?r.message:String(r)}}}K();var Fk=".pathrule-skills-manifest.json",ir=2;function ln(){return {version:ir,skills:{}}}function cn(t){return createHash("sha256").update(t,"utf8").digest("hex")}function Qd(t){return join(t,".claude",Fk)}function Hk(t){if(!t||typeof t!="object")return false;let e=t;return typeof e.slug=="string"&&typeof e.hash=="string"&&typeof e.source=="string"&&(e.fetchedAt===null||typeof e.fetchedAt=="string")&&Array.isArray(e.targets)&&e.targets.every(r=>typeof r=="string")}function qk(t){if(!t||typeof t!="object")return false;let e=t;return typeof e.path=="string"&&typeof e.hash=="string"}function zk(t,e){if(!t||typeof t!="object"||Array.isArray(t))return null;let r={};for(let[n,s]of Object.entries(t)){if(!Hk(s)||e===ir&&s.files!==void 0&&!Array.isArray(s.files)||e===ir&&s.files?.some(i=>!qk(i)))return null;r[n]={slug:s.slug,hash:s.hash,source:s.source,fetchedAt:s.fetchedAt,targets:s.targets,...e===ir&&s.files?{files:s.files}:{}};}return r}async function ep(t){try{let e=await readFile(Qd(t),"utf8"),r=JSON.parse(e);if(!r||typeof r!="object"||r.version!==ir&&r.version!==1)return ln();let n=zk(r.skills??{},r.version);return n?{version:ir,skills:n}:ln()}catch{return ln()}}async function tp(t,e){let r=Qd(t);await mkdir(dirname(r),{recursive:true});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(e,null,2),"utf8"),await rename(n,r);}async function or(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function nb(t,e){await mkdir(dirname(t),{recursive:true});let r=`${t}.tmp`;await writeFile(r,e,"utf8"),await rename(r,t);}function sb(t){let e=t.content??"";if(e.trim().startsWith("---"))return e.endsWith(`
123
123
  `)?e:`${e}
124
124
  `;let r=t.name.replace(/"/g,"'"),n=(t.description??"").replace(/"/g,"'").replace(/\r?\n/g," ").trim();return `${`---
125
125
  name: "${r}"
@@ -128,32 +128,32 @@ name: "${r}"
128
128
 
129
129
  `}${e}${e.endsWith(`
130
130
  `)?"":`
131
- `}`}function qk(t,e,r){let n=e.skills[t.id]?.slug;if(n&&!r.has(n))return n;let i=Tn(t.name);return i&&!r.has(i)?i:Sl(t.name,t.id)}async function xi(t,e,r){let n=join(t,e.skillsDir,r);await sr(n)&&await rm$1(n,{recursive:true,force:true});}function qo(t){let e=t.trim();if(!e)throw new Error("Package file path is empty");if(e.includes("\\"))throw new Error(`Unsafe package file path: ${t}`);if(e.includes("//"))throw new Error(`Unsafe package file path: ${t}`);if(posix.isAbsolute(e)||win32.isAbsolute(e))throw new Error(`Unsafe package file path: ${t}`);if(e.split("/").some(i=>!i||i===".."))throw new Error(`Unsafe package file path: ${t}`);let r=posix.normalize(e);if(!r||r==="."||r.startsWith("../"))throw new Error(`Unsafe package file path: ${t}`);if(r.split("/").some(i=>!i||i===".."))throw new Error(`Unsafe package file path: ${t}`);return r}function zk(t){if(!t.files?.length){let n=Hk(t);return [{path:"SKILL.md",content:n,hash:an(n)}]}let e=new Set,r=t.files.map(n=>{let i=qo(n.path);if(e.has(i))throw new Error(`Duplicate package file path: ${i}`);return e.add(i),{path:i,content:n.content,hash:n.sha256||an(n.content)}}).sort((n,i)=>n.path.localeCompare(i.path));for(let n=1;n<r.length;n+=1){let i=r[n-1],s=r[n];if(Gd(i.path,s.path))throw new Error(`Conflicting package file paths: ${i.path}, ${s.path}`)}return r}function Jk(t){return an(t.map(e=>`${e.path}\0${e.hash}`).join(`
132
- `))}function zo(t){return t.files?.length?t.files:[{path:"SKILL.md",hash:t.hash}]}function Gd(t,e){return t!==e&&(t.startsWith(`${e}/`)||e.startsWith(`${t}/`))}async function Kk(t,e,r,n){let i=posix.dirname(n);for(;i&&i!==".";){try{await rmdir(join(t,e.skillsDir,r,i));}catch{return}i=posix.dirname(i);}}async function Vk(t,e,r,n,i){if(!n)return 0;let s=0;for(let o of zo(n)){let a;try{a=qo(o.path);}catch{continue}if(!Array.from(i).some(u=>Gd(a,u)))continue;let c=join(t,e.skillsDir,r,a);await sr(c)&&(await rm$1(c,{force:true}),s+=1,await Kk(t,e,r,a));}return s}async function Gk(t,e,r,n,i){if(!n)return 0;let s=0;for(let o of zo(n)){let a;try{a=qo(o.path);}catch{continue}if(i.has(a))continue;let l=join(t,e.skillsDir,r,a);await sr(l)&&(await rm$1(l,{force:true}),s+=1);}return s}async function Yk(t,e){let r=join(t,e.skillsDir);if(!await sr(r))return [];try{return (await readdir(r,{withFileTypes:!0})).filter(i=>i.isDirectory()).map(i=>i.name)}catch{return []}}function Xk(t){let e=new Map;for(let r of t){let n=Tn(r.name),i=e.get(n);if(!i){e.set(n,r);continue}let s=i.updatedAt?Date.parse(i.updatedAt):0;(r.updatedAt?Date.parse(r.updatedAt):0)>s&&e.set(n,r);}return Array.from(e.values())}async function Yd(t){let{workspaceRoot:e,activeTargets:r}=t,n=Xk(t.skills),i={written:0,skipped:0,removed:0,errors:[]},s=vl(r),o=await Kd(e),a=new Set,l={};for(let p of n)try{let f=qk(p,o,a);a.add(f);let h=zk(p),m=h.map(T=>({path:T.path,hash:T.hash})),_=!!p.files?.length,b=_?Jk(m):m[0]?.hash??an(""),w=o.skills[p.id],y=new Map((w?zo(w):[]).map(T=>[T.path,T.hash])),I=new Set(h.map(T=>T.path)),Z=[];for(let T of s){let $=w&&w.slug!==f;$&&w&&await xi(e,T,w.slug),i.removed+=await Vk(e,T,f,$?void 0:w,I);for(let Ie of h){let le=join(e,T.skillsDir,f,Ie.path),eh=y.get(Ie.path)!==Ie.hash,th=!await sr(le);eh||th||$?(await Fk(le,Ie.content),i.written+=1):i.skipped+=1;}i.removed+=await Gk(e,T,f,$?void 0:w,I),Z.push(T.id);}if(w){let T=w.targets.filter($=>!Z.includes($));for(let $ of T){let Ie=U[$];Ie&&(await xi(e,Ie,w.slug),i.removed+=1);}}l[p.id]={slug:f,hash:b,source:p.source,fetchedAt:p.source==="github_ref"?p.contentFetchedAt:null,targets:Z,..._?{files:m}:{}};}catch(f){let h=o.skills[p.id];h&&(l[p.id]=h),i.errors.push({skillId:p.id,message:f instanceof Error?f.message:String(f)});}let c=new Set(n.map(p=>p.id));for(let[p,f]of Object.entries(o.skills))if(!c.has(p))for(let h of f.targets){let m=U[h];m&&(await xi(e,m,f.slug),i.removed+=1);}let u=new Set;for(let p of Object.values(l))u.add(p.slug);for(let p of Object.values(o.skills))u.add(p.slug);for(let p of s){let f=await Yk(e,p);for(let h of f)Object.values(l).some(_=>_.slug===h)||u.has(h)&&(await xi(e,p,h),i.removed+=1);}let d={version:o.version,skills:l};return await Vd(e,d),Object.keys(l).length>0&&await Qk(e).catch(()=>{}),i}var Xd="# Pathrule-managed skills (M18) \u2014",Zk=`
133
- ${Xd} cloud is the source of truth.
131
+ `}`}function ib(t,e,r){let n=e.skills[t.id]?.slug;if(n&&!r.has(n))return n;let s=On(t.name);return s&&!r.has(s)?s:Al(t.name,t.id)}async function As(t,e,r){let n=join(t,e.skillsDir,r);await or(n)&&await rm$1(n,{recursive:true,force:true});}function Ko(t){let e=t.trim();if(!e)throw new Error("Package file path is empty");if(e.includes("\\"))throw new Error(`Unsafe package file path: ${t}`);if(e.includes("//"))throw new Error(`Unsafe package file path: ${t}`);if(posix.isAbsolute(e)||win32.isAbsolute(e))throw new Error(`Unsafe package file path: ${t}`);if(e.split("/").some(s=>!s||s===".."))throw new Error(`Unsafe package file path: ${t}`);let r=posix.normalize(e);if(!r||r==="."||r.startsWith("../"))throw new Error(`Unsafe package file path: ${t}`);if(r.split("/").some(s=>!s||s===".."))throw new Error(`Unsafe package file path: ${t}`);return r}function ob(t){if(!t.files?.length){let n=sb(t);return [{path:"SKILL.md",content:n,hash:cn(n)}]}let e=new Set,r=t.files.map(n=>{let s=Ko(n.path);if(e.has(s))throw new Error(`Duplicate package file path: ${s}`);return e.add(s),{path:s,content:n.content,hash:n.sha256||cn(n.content)}}).sort((n,s)=>n.path.localeCompare(s.path));for(let n=1;n<r.length;n+=1){let s=r[n-1],i=r[n];if(rp(s.path,i.path))throw new Error(`Conflicting package file paths: ${s.path}, ${i.path}`)}return r}function ab(t){return cn(t.map(e=>`${e.path}\0${e.hash}`).join(`
132
+ `))}function Vo(t){return t.files?.length?t.files:[{path:"SKILL.md",hash:t.hash}]}function rp(t,e){return t!==e&&(t.startsWith(`${e}/`)||e.startsWith(`${t}/`))}async function lb(t,e,r,n){let s=posix.dirname(n);for(;s&&s!==".";){try{await rmdir(join(t,e.skillsDir,r,s));}catch{return}s=posix.dirname(s);}}async function cb(t,e,r,n,s){if(!n)return 0;let i=0;for(let o of Vo(n)){let a;try{a=Ko(o.path);}catch{continue}if(!Array.from(s).some(u=>rp(a,u)))continue;let c=join(t,e.skillsDir,r,a);await or(c)&&(await rm$1(c,{force:true}),i+=1,await lb(t,e,r,a));}return i}async function ub(t,e,r,n,s){if(!n)return 0;let i=0;for(let o of Vo(n)){let a;try{a=Ko(o.path);}catch{continue}if(s.has(a))continue;let l=join(t,e.skillsDir,r,a);await or(l)&&(await rm$1(l,{force:true}),i+=1);}return i}async function db(t,e){let r=join(t,e.skillsDir);if(!await or(r))return [];try{return (await readdir(r,{withFileTypes:!0})).filter(s=>s.isDirectory()).map(s=>s.name)}catch{return []}}function pb(t){let e=new Map;for(let r of t){let n=On(r.name),s=e.get(n);if(!s){e.set(n,r);continue}let i=s.updatedAt?Date.parse(s.updatedAt):0;(r.updatedAt?Date.parse(r.updatedAt):0)>i&&e.set(n,r);}return Array.from(e.values())}async function np(t){let{workspaceRoot:e,activeTargets:r}=t,n=pb(t.skills),s={written:0,skipped:0,removed:0,errors:[]},i=Tl(r),o=await ep(e),a=new Set,l={};for(let p of n)try{let h=ib(p,o,a);a.add(h);let f=ob(p),m=f.map(T=>({path:T.path,hash:T.hash})),_=!!p.files?.length,b=_?ab(m):m[0]?.hash??cn(""),w=o.skills[p.id],k=new Map((w?Vo(w):[]).map(T=>[T.path,T.hash])),I=new Set(f.map(T=>T.path)),Z=[];for(let T of i){let N=w&&w.slug!==h;N&&w&&await As(e,T,w.slug),s.removed+=await cb(e,T,h,N?void 0:w,I);for(let Ie of f){let le=join(e,T.skillsDir,h,Ie.path),gf=k.get(Ie.path)!==Ie.hash,mf=!await or(le);gf||mf||N?(await nb(le,Ie.content),s.written+=1):s.skipped+=1;}s.removed+=await ub(e,T,h,N?void 0:w,I),Z.push(T.id);}if(w){let T=w.targets.filter(N=>!Z.includes(N));for(let N of T){let Ie=U[N];Ie&&(await As(e,Ie,w.slug),s.removed+=1);}}l[p.id]={slug:h,hash:b,source:p.source,fetchedAt:p.source==="github_ref"?p.contentFetchedAt:null,targets:Z,..._?{files:m}:{}};}catch(h){let f=o.skills[p.id];f&&(l[p.id]=f),s.errors.push({skillId:p.id,message:h instanceof Error?h.message:String(h)});}let c=new Set(n.map(p=>p.id));for(let[p,h]of Object.entries(o.skills))if(!c.has(p))for(let f of h.targets){let m=U[f];m&&(await As(e,m,h.slug),s.removed+=1);}let u=new Set;for(let p of Object.values(l))u.add(p.slug);for(let p of Object.values(o.skills))u.add(p.slug);for(let p of i){let h=await db(e,p);for(let f of h)Object.values(l).some(_=>_.slug===f)||u.has(f)&&(await As(e,p,f),s.removed+=1);}let d={version:o.version,skills:l};return await tp(e,d),Object.keys(l).length>0&&await fb(e).catch(()=>{}),s}var sp="# Pathrule-managed skills (M18) \u2014",hb=`
133
+ ${sp} cloud is the source of truth.
134
134
  # Delete the lines below to opt in to committing your materialized skills.
135
135
  .claude/skills/
136
136
  .cursor/skills/
137
137
  .windsurf/skills/
138
138
  .codex/skills/
139
139
  .claude/.pathrule-skills-manifest.json
140
- `;async function Qk(t){let e=join(t,".gitignore");if(!await sr(e))return;let r=await readFile(e,"utf8");if(r.includes(Xd))return;let n=r.length>0&&!r.endsWith(`
140
+ `;async function fb(t){let e=join(t,".gitignore");if(!await or(e))return;let r=await readFile(e,"utf8");if(r.includes(sp))return;let n=r.length>0&&!r.endsWith(`
141
141
  `);await appendFile(e,(n?`
142
- `:"")+Zk,"utf8");}F();F();Ee();var eb=new Set(["write_memory","write_rule","write_skill","sync_agents","materialize_skills"]);async function ae(t,e){let{supabase:r}=await C(e),n=await D(e),i=(e.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"");if(!n)return or(t,"org_required",{web_url:`${i}/settings`,suggested_command_after_resolution:"pathrule org use <slug-or-id>"});let{data:s,error:o}=await r.from("organizations").select("id, slug, plan, seat_count, subscription_status").eq("id",n.id).single();if(o)throw o;let a=String(s.plan??n.plan),l=n.role,c=`${i}/org/${n.slug}/billing`;if(t==="create_workspace"){if(!ib(l))return or(t,"permission_denied",{role:l,plan:a,organization_id:n.id,web_url:`${i}/org/${n.slug}/settings/members`});let p=await Jo(r,"workspaces","organization_id",n.id,{archived_at:null}),f=Ko(a,"workspaces");return Zd(p,f)?or(t,"capacity_full",{role:l,plan:a,organization_id:n.id,usage:{dimension:"workspaces",used:p,limit:f},web_url:c,suggested_command_after_resolution:"pathrule init"}):Qd(t,{role:l,plan:a,organization_id:n.id})}let u=await M(e);if(!u)return or(t,"workspace_required",{role:l,plan:a,organization_id:n.id,web_url:`${i}/org/${n.slug}`,suggested_command_after_resolution:"pathrule workspace use <name-or-id>"});if(eb.has(t)&&!sb(l))return or(t,"permission_denied",{role:l,plan:a,organization_id:n.id,workspace_id:u.id,web_url:`${i}/org/${n.slug}/settings/members`});let d=await nb(t,a,u.id,r);return d&&Zd(d.used,d.limit)?or(t,"capacity_full",{role:l,plan:a,organization_id:n.id,workspace_id:u.id,usage:d,web_url:c,suggested_command_after_resolution:"pathrule status"}):Qd(t,{role:l,plan:a,organization_id:n.id,workspace_id:u.id,usage:d})}function Vo(t){return ["create_workspace","write_memory","write_rule","write_skill","sync_agents","materialize_skills"].includes(t)}function ar(t){return t.allowed?{summary:`${t.action} is allowed.`,details:[],url:null,suggested_command_after_resolution:null}:t.blocking_reason==="capacity_full"&&t.usage?{summary:`${tb(t.usage.dimension)} limit reached on the ${t.plan??"current"} plan (${t.usage.used} / ${rb(t.usage.limit)}).`,details:["Open Pathrule Web to upgrade or clean up usage."],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution}:t.blocking_reason==="permission_denied"?{summary:`Your current role (${t.role??"unknown"}) cannot run ${t.action}.`,details:["Ask an organization admin to update your role or run the action from an admin account."],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution}:t.blocking_reason==="workspace_required"?{summary:"No current workspace is selected for this folder.",details:["Run setup or choose a workspace before retrying."],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution??"pathrule setup --json"}:t.blocking_reason==="org_required"?{summary:"No organization is selected.",details:["Choose an organization before retrying."],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution??"pathrule org use <slug-or-id>"}:{summary:`${t.action} blocked: ${t.blocking_reason??"preflight_blocked"}.`,details:[],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution}}function tb(t){return t.charAt(0).toLocaleUpperCase("en-US")+t.slice(1)}function rb(t){return t===-1?"unlimited":String(t)}async function nb(t,e,r,n){return t==="write_memory"?{dimension:"memories",used:await Jo(n,"memories","workspace_id",r),limit:Ko(e,"memories")}:t==="write_rule"?{dimension:"rules",used:await Jo(n,"rules","workspace_id",r),limit:Ko(e,"rules")}:null}async function Jo(t,e,r,n,i={}){let s=t.from(e).select("id",{count:"exact",head:true}).eq(r,n);for(let l of Object.keys(i))s=s.is(l,null);let{count:o,error:a}=await s;if(a)throw a;return o??0}function ib(t){return t==="owner"||t==="admin"||t==="member"}function sb(t){return t==="owner"||t==="admin"||t==="member"}function Ko(t,e){return qe[t]?.[e]??qe.free[e]}function Zd(t,e){return e!==-1&&t>=e}function Qd(t,e={}){return {action:t,allowed:true,blocking_reason:null,role:null,plan:null,organization_id:null,workspace_id:null,usage:null,web_url:null,suggested_command_after_resolution:null,...e}}function or(t,e,r={}){return {action:t,allowed:false,blocking_reason:e,role:null,plan:null,organization_id:null,workspace_id:null,usage:null,web_url:null,suggested_command_after_resolution:null,...r}}var pb=createRequire(import.meta.url),fb=pb("../package.json"),tp="cli",rp=fb.version;async function Le(t,e,r={}){let{session:n,supabase:i}=await C(t),s=await M(t);if(!s)throw new Error("workspace_required");if(!s.local_root_path)throw new Error("workspace_not_attached");if(s.local_root_path!==e)throw new Error("workspace_cwd_mismatch");ss(join(A(t).home,"bin","pathrule-hook.js"));let o=await ae(r.skillsOnly?"materialize_skills":"sync_agents",t);if(!o.allowed)return {ok:false,workspace_id:s.id,workspace_root:s.local_root_path,preflight:o,error:o.blocking_reason??"preflight_blocked"};if(r.skillsOnly){let u=await gb({supabase:i,userId:n.user.id,workspaceId:s.id,workspaceRoot:s.local_root_path});return {ok:u.errors.length===0,workspace_id:s.id,workspace_root:s.local_root_path,preflight:o,skills:{ok:u.errors.length===0,enabled:u.enabled,written:u.written,skipped:u.skipped,removed:u.removed,errors:u.errors},error:u.errors.length===0?void 0:"skill_sync_failed"}}let a=await zd({supabase:i,userId:n.user.id,workspaceId:s.id,workspaceRoot:s.local_root_path,runtimeOwner:tp,runtimeVersion:rp}),l=await hb({supabase:i,userId:n.user.id,workspaceId:s.id,workspaceRoot:s.local_root_path}),c=await Ei({supabase:i,workspaceId:s.id,workspaceRoot:s.local_root_path,env:t});return {ok:a.ok&&l.errors.length===0&&c.ok,workspace_id:s.id,workspace_root:s.local_root_path,preflight:o,companion:{ok:a.ok,enabled:a.enabled,written:a.disk.written,skipped:a.disk.skipped,removed:a.disk.removed,errors:a.disk.errors,error:a.error},claude:{ok:l.errors.length===0,written:l.written,skipped:l.skipped,backed_up:l.backedUp,errors:l.errors,snapshot_changed:l.snapshotChanged},hook_index:c,error:a.error??(l.errors.length>0?"claude_sync_failed":c.ok?void 0:"hook_index_sync_failed")}}async function ln(t,e,r,n={}){let{session:i}=await C(t),s=await ne(i.user.id,t);await ci(i.user.id,{...s,current_workspace_id:e,schema_version:1},t);try{return await Le(t,r,n)}finally{await ci(i.user.id,s,t);}}async function hb(t){let e={written:0,skipped:0,backedUp:[],errors:[],snapshotChanged:false},r=new Set,{body:n,snapshotChanged:i}=await il({supabase:t.supabase,workspaceId:t.workspaceId,userId:t.userId});e.snapshotChanged=i,await ep(e,t.workspaceRoot,"CLAUDE.md",n)&&r.add("CLAUDE.md"),await ep(e,t.workspaceRoot,".claude/rules/pathrule-protocol.md",hl())&&r.add(".claude/rules/pathrule-protocol.md");let s=".claude/settings.json";try{let o=join(t.workspaceRoot,s),a=await ip(o),{body:l,changed:c}=En(a);c?(await np(o,l),e.written+=1):e.skipped+=1,r.add(s);}catch(o){e.errors.push({path:s,message:o instanceof Error?o.message:String(o)});}try{await wi({workspaceRoot:t.workspaceRoot,paths:Array.from(r),owner:tp,ownerVersion:rp});}catch(o){e.errors.push({path:".pathrule/managed-files.json",message:o instanceof Error?o.message:String(o)});}return e}async function ep(t,e,r,n){let i=join(e,r);try{let s=await ip(i),o=await Ri({workspaceRoot:e,relativePath:r,renderedBody:n,existingBody:s});return o.backupPath&&t.backedUp.push(o.backupPath),o.finalBody===null?(t.skipped+=1,!0):(await np(i,o.finalBody),t.written+=1,!0)}catch(s){return t.errors.push({path:r,message:s instanceof Error?s.message:String(s)}),false}}async function np(t,e){await mkdir(dirname(t),{recursive:true});let r=`${t}.tmp`;await writeFile(r,e,"utf8"),await rename(r,t);}async function ip(t){try{return await readFile(t,"utf8")}catch(e){if(e.code==="ENOENT")return null;throw e}}async function gb(t){let[e,r]=await Promise.all([mb(t.supabase,t.userId,t.workspaceId,t.workspaceRoot),_b(t.supabase,t.workspaceId)]),n=await Yd({workspaceRoot:t.workspaceRoot,activeTargets:e,skills:r});return {enabled:e,written:n.written,skipped:n.skipped,removed:n.removed,errors:n.errors}}async function mb(t,e,r,n){let[{data:i},s]=await Promise.all([t.from("user_workspace_paths").select("selected_ai_clients").eq("workspace_id",r).eq("user_id",e).maybeSingle(),ze(n)]),o=i?.selected_ai_clients??null;return In({selected:o,detected:s,fallback:Pn})}async function _b(t,e){let{data:r,error:n}=await t.from("skills").select("id, name, description, content, source, github_url, content_fetched_at, updated_at, skill_files(path, content, sha256)").eq("workspace_id",e);if(n)throw new Error(`skill_catalogue_read_failed: ${n.message}`);return (r??[]).map(i=>({id:i.id,name:i.name,description:i.description,content:i.content,source:i.source,githubUrl:i.github_url,contentFetchedAt:i.content_fetched_at,updatedAt:i.updated_at,files:(i.skill_files??[]).map(s=>({path:s.path,content:s.content,sha256:s.sha256}))}))}async function cn(t,e){let r=await Me(t,e);try{let n=await Le(t,e),i=await Me(t,e);return {ok:n.ok&&i.ok,doctor_before:r,sync:n,doctor_after:i,error:n.ok&&i.ok?void 0:n.error??"repair_incomplete"}}catch(n){return {ok:false,doctor_before:r,error:n instanceof Error?n.message:String(n)}}}function op(t){let e=sp(t.doctor_before.checks),r=t.doctor_after??t.doctor_before,n=sp(r.checks),i=t.sync?.preflight,s=r.mcp.filter(p=>!p.installed),o=Sb(e,n),a=Cb(e,n),l=Eb(r.mcp),c=Rb(t),u=xb(t),d=Pb(i);return {ok:t.ok,headline:t.ok?"Local runtime repaired":"Repair incomplete",next_command:Tb(t,n,s.length),sections:[o,a,l,c,u,d]}}async function Yo(t,e={}){let{session:r,supabase:n}=await C(t),{data:i,error:s}=await n.from("user_security_state").select("security_epoch").eq("user_id",r.user.id).maybeSingle();if(s)throw s;let o=typeof i?.security_epoch=="number"?i.security_epoch:0,a=it(r.user.id,o,t),l=[];for(let c=0;c<o;c+=1){let u=join(a.userCacheDir,`epoch-${c}`),d=await vb(u);if(d===0)continue;let p=e.dryRun!==false?false:await bb(u);l.push({path:u,epoch:c,removed:p,bytes:d});}return {ok:true,dry_run:e.dryRun!==false,current_epoch:o,candidates:l,reclaimed_bytes:l.filter(c=>c.removed).reduce((c,u)=>c+u.bytes,0)}}async function bb(t){return await rm$1(t,{recursive:true,force:true}),true}async function vb(t){try{let e=await stat(t);return e.isFile()?e.size:e.isDirectory()?1:0}catch{return 0}}function sp(t){return new Map(t.map(e=>[e.name,e]))}function Sb(t,e){let r=t.get("auth"),n=e.get("auth"),i=t.get("organization"),s=e.get("organization"),o=[Ti(r,n,{pass:(a,l)=>l?`Signed in again as ${a??"the current account"}.`:`Signed in as ${a??"the current account"}.`,warn:a=>`Authentication still needs attention${a?`: ${a}`:""}.`,fail:a=>`Authentication is still blocked${a?`: ${a}`:""}.`}),Ti(i,s,{pass:(a,l)=>l?`Organization context restored: ${a??"selected"}.`:`Organization context: ${a??"selected"}.`,warn:a=>`Organization selection is still missing${a&&a!=="no organization selected"?`: ${a}`:""}.`,fail:a=>`Organization lookup failed${a?`: ${a}`:""}.`})];return {title:"Account",status:ap(n?.status,s?.status),lines:o}}function Cb(t,e){let r=t.get("workspace"),n=e.get("workspace"),i=t.get("cwd_attach"),s=e.get("cwd_attach"),o=[Ti(r,n,{pass:(a,l)=>l?`Workspace selection recovered: ${a??"current workspace"}.`:`Workspace selection: ${a??"current workspace"}.`,warn:a=>`Workspace selection is still incomplete${a&&a!=="no workspace selected"?`: ${a}`:""}.`,fail:a=>`Workspace lookup failed${a?`: ${a}`:""}.`}),Ti(i,s,{pass:(a,l)=>l?"Current folder is attached again.":"Current folder is attached.",warn:a=>a==="workspace not attached"?"Current folder is still not attached.":`Current folder still points to ${a??"another workspace root"}.`,fail:a=>`Current folder attachment check failed${a?`: ${a}`:""}.`})];return {title:"Workspace",status:ap(n?.status,s?.status),lines:o}}function Eb(t){let e=t.filter(s=>s.installed).length,r=t.filter(s=>!s.installed).map(s=>s.client),n=t.filter(s=>s.error).map(s=>`${s.client}: ${s.error}`),i=[`MCP configs ready for ${e}/${t.length} supported clients.`,r.length>0?`Still missing: ${r.join(", ")}.`:"All supported MCP client configs are present."];return n.length>0&&i.push(`Agent config read errors: ${n.join("; ")}.`),{title:"Agents",status:n.length>0?"fail":r.length>0?"warn":"pass",lines:i}}function Rb(t){let e=t.sync?.hook_index;return t.sync?e?{title:"Hooks",status:e.ok?"pass":"fail",lines:[e.ok?`Hook index refreshed${e.schema_version?` (schema ${e.schema_version})`:""}.`:`Hook index refresh failed: ${e.error??"unknown error"}.`,e.refreshed_episodes?"Hook work episodes were refreshed before rebuilding the index.":"Hook work episodes were left unchanged."]}:{title:"Hooks",status:"warn",lines:["Repair did not produce a hook index update."]}:{title:"Hooks",status:"warn",lines:["Repair stopped before hook files could be refreshed."]}}function xb(t){if(!t.sync)return {title:"Files",status:"warn",lines:["Repair stopped before local files could be rewritten."]};let e=[],r="pass";return t.sync.companion&&(e.push(`Companion files: ${t.sync.companion.written} written, ${t.sync.companion.skipped} unchanged, ${t.sync.companion.removed} removed.`),(t.sync.companion.errors.length>0||!t.sync.companion.ok)&&(r="fail",e.push(`Companion errors: ${t.sync.companion.errors.map(n=>n.message).join("; ")||t.sync.companion.error||"unknown error"}.`))),t.sync.claude&&(e.push(`Claude files: ${t.sync.claude.written} written, ${t.sync.claude.skipped} unchanged, ${t.sync.claude.backed_up.length} backed up.`),t.sync.claude.errors.length>0&&(r="fail",e.push(`Claude sync errors: ${t.sync.claude.errors.map(n=>n.message).join("; ")}.`))),t.sync.skills&&(e.push(`Skills: ${t.sync.skills.written} written, ${t.sync.skills.skipped} unchanged, ${t.sync.skills.removed} removed.`),t.sync.skills.errors.length>0&&(r="fail",e.push(`Skill materialization errors: ${t.sync.skills.errors.map(n=>n.message).join("; ")}.`))),e.length===0&&e.push("No local file rewrites were needed."),{title:"Files",status:r,lines:e}}function Pb(t){return t?t.allowed?{title:"Capacity",status:"pass",lines:["No plan limit blocked this repair."]}:t.blocking_reason==="capacity_full"&&t.usage?{title:"Capacity",status:"fail",lines:[`${Ab(t.usage.dimension)} limit reached (${t.usage.used} / ${Ib(t.usage.limit)}).`,"Open billing or clean up usage before retrying the repair."]}:{title:"Capacity",status:"warn",lines:["Capacity is not the blocking issue for this repair."]}:{title:"Capacity",status:"warn",lines:["Capacity checks did not run because repair stopped early."]}}function Ti(t,e,r){let n=e??t;if(!n)return "No status available.";let i=t!=null&&t.status!=="pass"&&n.status==="pass";return n.status==="pass"?r.pass(n.detail,i):n.status==="warn"?r.warn(n.detail,i):r.fail(n.detail,i)}function ap(...t){return t.includes("fail")?"fail":t.includes("warn")?"warn":"pass"}function Tb(t,e,r){if(e.get("auth")?.status!=="pass")return "pathrule login";if(e.get("organization")?.status!=="pass")return "pathrule org use <slug-or-id>";if(e.get("workspace")?.status!=="pass")return "pathrule workspace use <name-or-id>";if(e.get("cwd_attach")?.status!=="pass")return "pathrule attach <workspace>";let a=t.sync?.preflight;if(a&&!a.allowed&&a.suggested_command_after_resolution)return a.suggested_command_after_resolution;if(r>0)return "pathrule install";let l=!t.sync?.companion?.ok||!!t.sync?.companion?.errors.length||!!t.sync?.claude?.errors.length||!!t.sync?.skills?.errors.length||t.sync?.hook_index?.ok===false;return !t.ok||l?"pathrule sync":"pathrule doctor"}function Ab(t){return t.charAt(0).toLocaleUpperCase("en-US")+t.slice(1)}function Ib(t){return t===-1?"unlimited":String(t)}F();Vr();var Wb={all:"all",claude:"claude-code","claude-code":"claude-code",cursor:"cursor",codex:"codex",windsurf:"windsurf"},Bb=["claude-code","cursor","codex","windsurf"];function cp(t){let e=Wb[(t??"all").toLowerCase()];if(!e)throw new Error("invalid_install_target");return e==="all"?Bb:[e]}async function Ze(t,e){let r=cp(t),n=Fb(e);return Promise.all(r.map(async i=>{let s=Ct(i),o=s.homeConfigPath(homedir(),process.platform);try{let a=await up(o),l=s.inject(a,n);return await dp(o,l.body),{client:i,ok:!0,status:"installed",config_path:o,was_new:l.wasNew}}catch(a){return {client:i,ok:false,status:"error",config_path:o,error:a instanceof Error?a.message:String(a)}}}))}async function Xo(t){return Promise.all(cp(t).map(async e=>{let r=Ct(e),n=r.homeConfigPath(homedir(),process.platform);try{let i=await up(n),s=r.remove(i);return s.wasPresent?(s.body===null?await rm$1(n,{force:!0}):await dp(n,s.body),{client:e,ok:!0,status:"removed",config_path:n}):{client:e,ok:!0,status:"not_present",config_path:n}}catch(i){return {client:e,ok:false,status:"error",config_path:n,error:i instanceof Error?i.message:String(i)}}}))}function Fb(t){let{supabaseUrl:e,supabaseAnonKey:r}=pe(t);return {type:"stdio",command:Hb(),args:[fileURLToPath(new URL("../../mcp-server/dist/index.js",import.meta.url))],env:{SUPABASE_URL:e,SUPABASE_ANON_KEY:r}}}function Hb(){try{return execFileSync("which",["node"],{encoding:"utf8"}).trim()||process.execPath}catch{return process.execPath}}async function up(t){try{return await readFile(t,"utf8")}catch(e){if(e.code==="ENOENT")return null;throw e}}async function dp(t,e){await mkdir(dirname(t),{recursive:true});let r=`${t}.tmp`;await writeFile(r,e,"utf8"),await rename(r,t);}async function Pt(t,e,r,n){let{session:i,supabase:s}=await C(t);if(i.user.id!==e)throw new Error("session_user_mismatch");let[{data:o},a]=await Promise.all([s.from("user_workspace_paths").select("selected_ai_clients").eq("user_id",e).eq("workspace_id",r).maybeSingle(),n?ze(n):Promise.resolve([])]),l=new Set(o?.selected_ai_clients??[]),c=new Set(a),u=Object.keys(U);return Promise.all(u.map(async d=>{let p=await Yb(d);return {client:d,active:l.has(d)||c.has(d),selected:l.has(d),markers:c.has(d)?["workspace_marker_detected"]:[],machineInstalled:p.installed,machineConfigPath:p.configPath,machineConfigExists:p.configExists}}))}async function gp(t,e,r,n,i,s,o="restore-backup"){let a=Xb(i),{session:l,supabase:c}=await C(t);if(l.user.id!==e)throw new Error("session_user_mismatch");let{data:u,error:d}=await c.from("user_workspace_paths").select("selected_ai_clients").eq("user_id",e).eq("workspace_id",r).eq("local_root_path",n).maybeSingle();if(d)throw new Error(`workspace_client_selection_read_failed: ${d.message}`);if(!u)throw new Error("workspace_root_not_attached");let p=[],f=new Set((u.selected_ai_clients??[]).filter(mp)),h=Array.from(f);s?f.add(a):f.delete(a);let m=Array.from(f);if(!Zb(h,m)){let{error:w}=await c.from("user_workspace_paths").update({selected_ai_clients:m}).eq("user_id",e).eq("workspace_id",r).eq("local_root_path",n);if(w)throw new Error(`workspace_client_selection_update_failed: ${w.message}`)}if(s){let w=await Ze(a,t);for(let y of w)y.ok||p.push(`${y.client}: ${y.error??y.status}`);}else await fp(n,a);let _=await ln(t,r,n);return _.ok||p.push(_.error??"workspace_sync_failed"),s||await fp(n,a),{ok:true,statuses:await Pt(t,e,r,n),warnings:p}}async function Yb(t){let e=Ct(t),r=e.homeConfigPath(homedir(),process.platform);try{let n=await readFile(r,"utf8");return {configPath:r,configExists:!0,installed:e.read(n)!==null}}catch(n){return n.code!=="ENOENT"?{configPath:r,configExists:false,installed:false}:{configPath:r,configExists:false,installed:false}}}function Xb(t){if(mp(t))return t;throw new Error("invalid_agent_target")}function mp(t){return hs(t)!==null}function Zb(t,e){if(t.length!==e.length)return false;let r=new Set(t);return e.every(n=>r.has(n))}async function fp(t,e,r){let n=U[e]?.skillsDir;if(!n)return;let i=join(t,n);await rm$1(i,{recursive:true,force:true}),await Qb(dirname(i),t);}async function Qb(t,e){let r=resolve(e),n=resolve(t);for(;n!==r&&n.startsWith(`${r}${sep}`);){try{await rmdir(n);}catch{return}n=dirname(n);}}Ge();var rv=promisify(execFile),nv=2e3;function Zo(t){if(t.startsWith("/")||/^[A-Za-z]:[\\/]/.test(t))return null;let e=t.replace(/\\/g,"/").replace(/\/+/g,"/");return e.length===0||e==="."||e.startsWith("../")||e.includes("/../")||e.startsWith(".git/")||/[\x00-\x1F]/.test(e)?null:e}function iv(t){let r=(Buffer.isBuffer(t)?t.toString("utf8"):t).split("\0").filter(i=>i.length>0),n=[];for(let i=0;i<r.length;i+=1){let s=r[i];if(!s||s.length<4)continue;let o=s.slice(0,2),a=s.slice(3),l=sv(o);if(o.includes("R")||o.includes("C")){let u=Zo(a);u&&n.push({relativePath:u,gitStatus:"renamed"});let d=Zo(r[i+1]??"");d&&n.push({relativePath:d,gitStatus:"renamed"}),i+=1;continue}let c=Zo(a);c&&n.push({relativePath:c,gitStatus:l});}return ov(n)}async function _p(t,e={}){try{let{stdout:r}=await rv("git",["status","--porcelain=v1","-z"],{cwd:t,encoding:"buffer",maxBuffer:5242880,timeout:e.timeoutMs??nv});return {entries:iv(r),degraded:!1}}catch{return {entries:[],degraded:true}}}function sv(t){return t==="??"?"untracked":t.includes("A")?"added":t.includes("D")?"deleted":t.includes("R")||t.includes("C")?"renamed":t.includes("M")||t.includes("T")||t.includes("U")?"modified":"unknown"}function ov(t){let e=new Map;for(let r of t)e.set(r.relativePath,r);return Array.from(e.values()).sort((r,n)=>r.relativePath.localeCompare(n.relativePath))}var lv=800,cv=6e4,Ai=500,un=class{constructor(e){this.options=e;}options;dirty=new Map;pendingTimer=null;intervalTimer=null;stopped=false;degraded=false;lastScanAt=null;start(){this.intervalTimer||(this.reconcile(),this.intervalTimer=setInterval(()=>{this.reconcile();},this.options.scanIntervalMs??cv),this.intervalTimer.unref?.());}stop(){this.stopped=true,this.pendingTimer&&clearTimeout(this.pendingTimer),this.intervalTimer&&clearInterval(this.intervalTimer),this.pendingTimer=null,this.intervalTimer=null;}markActivePath(e){if(this.stopped||!uv(e))return;let r=this.isoNow();this.publishRows([{relative_path:e,is_active:true,is_dirty:this.dirty.has(e),git_status:this.dirty.get(e)?.gitStatus??"unknown",last_heartbeat_at:r,last_git_scan_at:r}],[]),this.scheduleReconcile();}scheduleReconcile(){this.stopped||(this.pendingTimer&&clearTimeout(this.pendingTimer),this.pendingTimer=setTimeout(()=>{this.pendingTimer=null,this.reconcile();},this.options.debounceMs??lv),this.pendingTimer.unref?.());}async reconcile(){if(this.stopped)return this.status();let e=this.isoNow(),r=await _p(this.options.workspaceRoot);if(this.degraded=r.degraded,r.degraded)return this.status();let n=new Map;for(let o of r.entries){let a=this.dirty.get(o.relativePath);n.set(o.relativePath,{gitStatus:o.gitStatus,firstSeenAt:a?.firstSeenAt??e});}let i=Array.from(this.dirty.keys()).filter(o=>!n.has(o));this.dirty.clear();for(let[o,a]of n)this.dirty.set(o,a);this.lastScanAt=e;let s=Array.from(n.entries()).map(([o,a])=>({relative_path:o,is_active:false,is_dirty:true,git_status:a.gitStatus,last_local_write_at:a.firstSeenAt,last_git_scan_at:e}));return await this.publishChunked(s,i),this.status()}status(){return {healthy:!this.degraded,degraded:this.degraded,lastScanAt:this.lastScanAt,dirtyPathCount:this.dirty.size}}async publishChunked(e,r){for(let n=0;n<e.length;n+=Ai)await this.publishRows(e.slice(n,n+Ai),[]);for(let n=0;n<r.length;n+=Ai)await this.publishRows([],r.slice(n,n+Ai));}async publishRows(e,r){if(e.length===0&&r.length===0)return;let{error:n}=await this.options.supabase.rpc("pathrule_upsert_file_work_state",{p_workspace_id:this.options.workspaceId,p_runtime_id:this.options.runtimeId,p_rows:e,p_clear_paths:r});n&&(this.degraded=true);}isoNow(){return (this.options.now?.()??new Date).toISOString()}};async function Qo(t,e=process.env){let r=await ne(t,e);if(r.work_state_runtime_id)return r.work_state_runtime_id;let n=`runtime:${randomUUID()}`;return await ie(t,{work_state_runtime_id:n},e),n}function uv(t){return t.length>0&&!t.startsWith("/")&&!t.startsWith("../")&&!t.includes("/../")&&!t.startsWith(".git/")&&!/[\x00-\x1F]/.test(t)}F();var Tt=new Map;async function wp(t=process.env){let{session:e,supabase:r}=await C(t),{data:n,error:i}=await r.from("user_workspace_paths").select("workspace_id, local_root_path, watcher_enabled").eq("user_id",e.user.id).eq("watcher_enabled",true);if(i)throw i;let s=await Qo(e.user.id,t);for(let o of n??[]){if(!o.workspace_id||!o.local_root_path||Tt.has(o.workspace_id))continue;let a=new un({workspaceId:o.workspace_id,workspaceRoot:o.local_root_path,userId:e.user.id,runtimeId:s,supabase:r});Tt.set(o.workspace_id,{tracker:a,workspaceRoot:o.local_root_path}),a.start();}}async function ea(t,e,r=process.env){if(Tt.has(t))return;let{session:n,supabase:i}=await C(r),s=await Qo(n.user.id,r),o=new un({workspaceId:t,workspaceRoot:e,userId:n.user.id,runtimeId:s,supabase:i});Tt.set(t,{tracker:o,workspaceRoot:e}),o.start();}async function ta(t){return Tt.get(t)?.tracker.reconcile()??null}function yp(){for(let t of Tt.values())t.tracker.stop();Tt.clear();}var ra="1.0",dr=37913,ur="127.0.0.1",vv=60,Sv=createRequire(import.meta.url),Cv=Sv("../package.json"),he=promisify(execFile),fn="io.pathrule.cli-daemon",Oi="pathrule-daemon.service",Ev=60;async function pr(t){let e=await We(t);if(e.running)return e;let r=process.argv[1];if(!r)throw new Error("daemon_entrypoint_missing");spawn(process.execPath,[r,"daemon","run"],{detached:true,stdio:"ignore",env:{...process.env,...t}}).unref();let i=Date.now()+3e3;for(;Date.now()<i;){let s=await We(t);if(s.running)return s;await Kv(100);}throw new Error("daemon_start_timeout")}async function hn(t){let e=await We(t);if(e.state?.pid&&e.state.pid!==process.pid)try{process.kill(e.state.pid,"SIGTERM");}catch{}return await unlink(A(t).daemonFile).catch(()=>{}),We(t)}async function Pe(t=process.env){let e=Ap(t);if(!e.supported)return e;if(e.method==="task-scheduler"){let r=await Ov();return {...e,enabled:r}}return {...e,enabled:e.path?await aa(e.path):false}}async function Qe(t,e){let r=Ap(t);if(!r.supported)return r;if(e){let n=xv(t);if(r.method==="launchd"){if(!r.path)throw new Error("daemon_autostart_path_missing");return await Pv(r.path,n,t),t.PATHRULE_SKIP_AUTOSTART_ACTIVATE!=="1"&&await Av(r.path),Pe(t)}if(r.method==="systemd"){if(!r.path)throw new Error("daemon_autostart_path_missing");return await Tv(r.path,n,t),t.PATHRULE_SKIP_AUTOSTART_ACTIVATE!=="1"&&(await he("systemctl",["--user","daemon-reload"]),await he("systemctl",["--user","enable","--now",Oi])),Pe(t)}return await $v(n,t),Pe(t)}return r.method==="launchd"?(t.PATHRULE_SKIP_AUTOSTART_ACTIVATE!=="1"&&r.path&&await Iv(r.path),r.path&&await unlink(r.path).catch(()=>{}),Pe(t)):r.method==="systemd"?(t.PATHRULE_SKIP_AUTOSTART_ACTIVATE!=="1"&&(await he("systemctl",["--user","disable","--now",Oi]).catch(()=>{}),await he("systemctl",["--user","daemon-reload"]).catch(()=>{})),r.path&&await unlink(r.path).catch(()=>{}),Pe(t)):(await Nv(),Pe(t))}async function We(t){let e=A(t).daemonFile,r;try{r=JSON.parse(await readFile(e,"utf8"));}catch(i){let s=i.code==="ENOENT"?"missing":"unreadable";return await bp(Rv(t))?{running:true,state:null,state_path:e,reason:"probed"}:{running:false,state:null,state_path:e,reason:s}}let n=Jv(r.pid);if(!n){let i=await bp(r.port);if(i)return {running:true,state:i.daemonSessionId?{...r,pid:0,daemon_session_id:i.daemonSessionId,protocol_version:i.protocolVersion}:null,state_path:e,reason:"probed"}}return {running:n,state:r,state_path:e,reason:n?void 0:"stale"}}async function bp(t){if(!Number.isInteger(t)||t<=0||t>65535)return null;let e=new AbortController,r=setTimeout(()=>e.abort(),250);try{let n=await fetch(`http://${ur}:${t}/v1/status`,{signal:e.signal});if(!n.ok)return null;let i=await n.json();return i.daemon_present!==!0||typeof i.protocol_version!="string"?null:{protocolVersion:i.protocol_version,daemonSessionId:typeof i.daemon_session_id=="string"&&i.daemon_session_id.length>0?i.daemon_session_id:null}}catch{return null}finally{clearTimeout(r);}}function Rv(t){let e=t.PATHRULE_DAEMON_PORT?.trim()||String(dr),r=Number(e);return Number.isInteger(r)&&r>=0&&r<=65535?r:dr}function Ap(t){let e=t.PATHRULE_TEST_PLATFORM??process.platform,r=t.PATHRULE_AUTOSTART_DIR;return e==="darwin"?{supported:true,enabled:false,method:"launchd",path:r?join(r,`${fn}.plist`):join(homedir(),"Library","LaunchAgents",`${fn}.plist`)}:e==="linux"?{supported:true,enabled:false,method:"systemd",path:r?join(r,Oi):join(homedir(),".config","systemd","user",Oi)}:e==="win32"?{supported:false,enabled:false,method:"task-scheduler",path:null,reason:"Windows daemon autostart requires installer support."}:{supported:false,enabled:false,method:"unsupported",path:null,reason:`Unsupported platform: ${e}`}}function xv(t){let e=t.PATHRULE_CLI_ENTRYPOINT?.trim()||process.argv[1];if(!e)throw new Error("daemon_entrypoint_missing");return {command:process.execPath,args:[e,"daemon","run"]}}function oa(t){let e={PATHRULE_DAEMON_PORT:t.PATHRULE_DAEMON_PORT?.trim()||String(dr)};for(let r of ["PATH","PATHRULE_HOME","PATHRULE_WEB_URL"]){let n=t[r];n&&n.trim()!==""&&(e[r]=n);}return e}async function Pv(t,e,r){let n=`<?xml version="1.0" encoding="UTF-8"?>
142
+ `:"")+hb,"utf8");}B();B();Ee();var gb=new Set(["write_memory","write_rule","write_skill","sync_agents","materialize_skills"]);async function ae(t,e){let{supabase:r}=await S(e),n=await j(e),s=(e.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"");if(!n)return ar(t,"org_required",{web_url:`${s}/settings`,suggested_command_after_resolution:"pathrule org use <slug-or-id>"});let{data:i,error:o}=await r.from("organizations").select("id, slug, plan, seat_count, subscription_status").eq("id",n.id).single();if(o)throw o;let a=String(i.plan??n.plan),l=n.role,c=`${s}/org/${n.slug}/billing`;if(t==="create_workspace"){if(!yb(l))return ar(t,"permission_denied",{role:l,plan:a,organization_id:n.id,web_url:`${s}/org/${n.slug}/settings/members`});let p=await Go(r,"workspaces","organization_id",n.id,{archived_at:null}),h=Yo(a,"workspaces");return ip(p,h)?ar(t,"capacity_full",{role:l,plan:a,organization_id:n.id,usage:{dimension:"workspaces",used:p,limit:h},web_url:c,suggested_command_after_resolution:"pathrule init"}):op(t,{role:l,plan:a,organization_id:n.id})}let u=await $(e);if(!u)return ar(t,"workspace_required",{role:l,plan:a,organization_id:n.id,web_url:`${s}/org/${n.slug}`,suggested_command_after_resolution:"pathrule workspace use <name-or-id>"});if(gb.has(t)&&!kb(l))return ar(t,"permission_denied",{role:l,plan:a,organization_id:n.id,workspace_id:u.id,web_url:`${s}/org/${n.slug}/settings/members`});let d=await wb(t,a,u.id,r);return d&&ip(d.used,d.limit)?ar(t,"capacity_full",{role:l,plan:a,organization_id:n.id,workspace_id:u.id,usage:d,web_url:c,suggested_command_after_resolution:"pathrule status"}):op(t,{role:l,plan:a,organization_id:n.id,workspace_id:u.id,usage:d})}function Xo(t){return ["create_workspace","write_memory","write_rule","write_skill","sync_agents","materialize_skills"].includes(t)}function lr(t){return t.allowed?{summary:`${t.action} is allowed.`,details:[],url:null,suggested_command_after_resolution:null}:t.blocking_reason==="capacity_full"&&t.usage?{summary:`${mb(t.usage.dimension)} limit reached on the ${t.plan??"current"} plan (${t.usage.used} / ${_b(t.usage.limit)}).`,details:["Open Pathrule Web to upgrade or clean up usage."],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution}:t.blocking_reason==="permission_denied"?{summary:`Your current role (${t.role??"unknown"}) cannot run ${t.action}.`,details:["Ask an organization admin to update your role or run the action from an admin account."],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution}:t.blocking_reason==="workspace_required"?{summary:"No current workspace is selected for this folder.",details:["Run setup or choose a workspace before retrying."],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution??"pathrule setup --json"}:t.blocking_reason==="org_required"?{summary:"No organization is selected.",details:["Choose an organization before retrying."],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution??"pathrule org use <slug-or-id>"}:{summary:`${t.action} blocked: ${t.blocking_reason??"preflight_blocked"}.`,details:[],url:t.web_url,suggested_command_after_resolution:t.suggested_command_after_resolution}}function mb(t){return t.charAt(0).toLocaleUpperCase("en-US")+t.slice(1)}function _b(t){return t===-1?"unlimited":String(t)}async function wb(t,e,r,n){return t==="write_memory"?{dimension:"memories",used:await Go(n,"memories","workspace_id",r),limit:Yo(e,"memories")}:t==="write_rule"?{dimension:"rules",used:await Go(n,"rules","workspace_id",r),limit:Yo(e,"rules")}:null}async function Go(t,e,r,n,s={}){let i=t.from(e).select("id",{count:"exact",head:true}).eq(r,n);for(let l of Object.keys(s))i=i.is(l,null);let{count:o,error:a}=await i;if(a)throw a;return o??0}function yb(t){return t==="owner"||t==="admin"||t==="member"}function kb(t){return t==="owner"||t==="admin"||t==="member"}function Yo(t,e){return qe[t]?.[e]??qe.free[e]}function ip(t,e){return e!==-1&&t>=e}function op(t,e={}){return {action:t,allowed:true,blocking_reason:null,role:null,plan:null,organization_id:null,workspace_id:null,usage:null,web_url:null,suggested_command_after_resolution:null,...e}}function ar(t,e,r={}){return {action:t,allowed:false,blocking_reason:e,role:null,plan:null,organization_id:null,workspace_id:null,usage:null,web_url:null,suggested_command_after_resolution:null,...r}}var xb=createRequire(import.meta.url),Pb=xb("../package.json"),lp="cli",cp=Pb.version;async function Le(t,e,r={}){let{session:n,supabase:s}=await S(t),i=await $(t);if(!i)throw new Error("workspace_required");if(!i.local_root_path)throw new Error("workspace_not_attached");if(i.local_root_path!==e)throw new Error("workspace_cwd_mismatch");li(join(A(t).home,"bin","pathrule-hook.js"));let o=await ae(r.skillsOnly?"materialize_skills":"sync_agents",t);if(!o.allowed)return {ok:false,workspace_id:i.id,workspace_root:i.local_root_path,preflight:o,error:o.blocking_reason??"preflight_blocked"};if(r.skillsOnly){let u=await Ab({supabase:s,userId:n.user.id,workspaceId:i.id,workspaceRoot:i.local_root_path});return {ok:u.errors.length===0,workspace_id:i.id,workspace_root:i.local_root_path,preflight:o,skills:{ok:u.errors.length===0,enabled:u.enabled,written:u.written,skipped:u.skipped,removed:u.removed,errors:u.errors},error:u.errors.length===0?void 0:"skill_sync_failed"}}let a=await Zd({supabase:s,userId:n.user.id,workspaceId:i.id,workspaceRoot:i.local_root_path,runtimeOwner:lp,runtimeVersion:cp}),l=await Tb({supabase:s,userId:n.user.id,workspaceId:i.id,workspaceRoot:i.local_root_path}),c=await Ps({supabase:s,workspaceId:i.id,workspaceRoot:i.local_root_path,env:t});return {ok:a.ok&&l.errors.length===0&&c.ok,workspace_id:i.id,workspace_root:i.local_root_path,preflight:o,companion:{ok:a.ok,enabled:a.enabled,written:a.disk.written,skipped:a.disk.skipped,removed:a.disk.removed,errors:a.disk.errors,error:a.error},claude:{ok:l.errors.length===0,written:l.written,skipped:l.skipped,backed_up:l.backedUp,errors:l.errors,snapshot_changed:l.snapshotChanged},hook_index:c,error:a.error??(l.errors.length>0?"claude_sync_failed":c.ok?void 0:"hook_index_sync_failed")}}async function un(t,e,r,n={}){let{session:s}=await S(t),i=await ne(s.user.id,t);await ps(s.user.id,{...i,current_workspace_id:e,schema_version:1},t);try{return await Le(t,r,n)}finally{await ps(s.user.id,i,t);}}async function Tb(t){let e={written:0,skipped:0,backedUp:[],errors:[],snapshotChanged:false},r=new Set,{body:n,snapshotChanged:s}=await dl({supabase:t.supabase,workspaceId:t.workspaceId,userId:t.userId});e.snapshotChanged=s,await ap(e,t.workspaceRoot,"CLAUDE.md",n)&&r.add("CLAUDE.md"),await ap(e,t.workspaceRoot,".claude/rules/pathrule-protocol.md",bl())&&r.add(".claude/rules/pathrule-protocol.md");let i=".claude/settings.json";try{let o=join(t.workspaceRoot,i),a=await dp(o),{body:l,changed:c}=Pn(a);c?(await up(o,l),e.written+=1):e.skipped+=1,r.add(i);}catch(o){e.errors.push({path:i,message:o instanceof Error?o.message:String(o)});}try{await bs({workspaceRoot:t.workspaceRoot,paths:Array.from(r),owner:lp,ownerVersion:cp});}catch(o){e.errors.push({path:".pathrule/managed-files.json",message:o instanceof Error?o.message:String(o)});}return e}async function ap(t,e,r,n){let s=join(e,r);try{let i=await dp(s),o=await Ts({workspaceRoot:e,relativePath:r,renderedBody:n,existingBody:i});return o.backupPath&&t.backedUp.push(o.backupPath),o.finalBody===null?(t.skipped+=1,!0):(await up(s,o.finalBody),t.written+=1,!0)}catch(i){return t.errors.push({path:r,message:i instanceof Error?i.message:String(i)}),false}}async function up(t,e){await mkdir(dirname(t),{recursive:true});let r=`${t}.tmp`;await writeFile(r,e,"utf8"),await rename(r,t);}async function dp(t){try{return await readFile(t,"utf8")}catch(e){if(e.code==="ENOENT")return null;throw e}}async function Ab(t){let[e,r]=await Promise.all([Ib(t.supabase,t.userId,t.workspaceId,t.workspaceRoot),Ob(t.supabase,t.workspaceId)]),n=await np({workspaceRoot:t.workspaceRoot,activeTargets:e,skills:r});return {enabled:e,written:n.written,skipped:n.skipped,removed:n.removed,errors:n.errors}}async function Ib(t,e,r,n){let[{data:s},i]=await Promise.all([t.from("user_workspace_paths").select("selected_ai_clients").eq("workspace_id",r).eq("user_id",e).maybeSingle(),ze(n)]),o=s?.selected_ai_clients??null;return Nn({selected:o,detected:i,fallback:In})}async function Ob(t,e){let{data:r,error:n}=await t.from("skills").select("id, name, description, content, source, github_url, content_fetched_at, updated_at, skill_files(path, content, sha256)").eq("workspace_id",e);if(n)throw new Error(`skill_catalogue_read_failed: ${n.message}`);return (r??[]).map(s=>({id:s.id,name:s.name,description:s.description,content:s.content,source:s.source,githubUrl:s.github_url,contentFetchedAt:s.content_fetched_at,updatedAt:s.updated_at,files:(s.skill_files??[]).map(i=>({path:i.path,content:i.content,sha256:i.sha256}))}))}async function dn(t,e){let r=await Me(t,e);try{let n=await Le(t,e),s=await Me(t,e);return {ok:n.ok&&s.ok,doctor_before:r,sync:n,doctor_after:s,error:n.ok&&s.ok?void 0:n.error??"repair_incomplete"}}catch(n){return {ok:false,doctor_before:r,error:n instanceof Error?n.message:String(n)}}}function hp(t){let e=pp(t.doctor_before.checks),r=t.doctor_after??t.doctor_before,n=pp(r.checks),s=t.sync?.preflight,i=r.mcp.filter(p=>!p.installed),o=Lb(e,n),a=Ub(e,n),l=Wb(r.mcp),c=Bb(t),u=Fb(t),d=Hb(s);return {ok:t.ok,headline:t.ok?"Local runtime repaired":"Repair incomplete",next_command:qb(t,n,i.length),sections:[o,a,l,c,u,d]}}async function Qo(t,e={}){let{session:r,supabase:n}=await S(t),{data:s,error:i}=await n.from("user_security_state").select("security_epoch").eq("user_id",r.user.id).maybeSingle();if(i)throw i;let o=typeof s?.security_epoch=="number"?s.security_epoch:0,a=it(r.user.id,o,t),l=[];for(let c=0;c<o;c+=1){let u=join(a.userCacheDir,`epoch-${c}`),d=await Mb(u);if(d===0)continue;let p=e.dryRun!==false?false:await jb(u);l.push({path:u,epoch:c,removed:p,bytes:d});}return {ok:true,dry_run:e.dryRun!==false,current_epoch:o,candidates:l,reclaimed_bytes:l.filter(c=>c.removed).reduce((c,u)=>c+u.bytes,0)}}async function jb(t){return await rm$1(t,{recursive:true,force:true}),true}async function Mb(t){try{let e=await stat(t);return e.isFile()?e.size:e.isDirectory()?1:0}catch{return 0}}function pp(t){return new Map(t.map(e=>[e.name,e]))}function Lb(t,e){let r=t.get("auth"),n=e.get("auth"),s=t.get("organization"),i=e.get("organization"),o=[Os(r,n,{pass:(a,l)=>l?`Signed in again as ${a??"the current account"}.`:`Signed in as ${a??"the current account"}.`,warn:a=>`Authentication still needs attention${a?`: ${a}`:""}.`,fail:a=>`Authentication is still blocked${a?`: ${a}`:""}.`}),Os(s,i,{pass:(a,l)=>l?`Organization context restored: ${a??"selected"}.`:`Organization context: ${a??"selected"}.`,warn:a=>`Organization selection is still missing${a&&a!=="no organization selected"?`: ${a}`:""}.`,fail:a=>`Organization lookup failed${a?`: ${a}`:""}.`})];return {title:"Account",status:fp(n?.status,i?.status),lines:o}}function Ub(t,e){let r=t.get("workspace"),n=e.get("workspace"),s=t.get("cwd_attach"),i=e.get("cwd_attach"),o=[Os(r,n,{pass:(a,l)=>l?`Workspace selection recovered: ${a??"current workspace"}.`:`Workspace selection: ${a??"current workspace"}.`,warn:a=>`Workspace selection is still incomplete${a&&a!=="no workspace selected"?`: ${a}`:""}.`,fail:a=>`Workspace lookup failed${a?`: ${a}`:""}.`}),Os(s,i,{pass:(a,l)=>l?"Current folder is attached again.":"Current folder is attached.",warn:a=>a==="workspace not attached"?"Current folder is still not attached.":`Current folder still points to ${a??"another workspace root"}.`,fail:a=>`Current folder attachment check failed${a?`: ${a}`:""}.`})];return {title:"Workspace",status:fp(n?.status,i?.status),lines:o}}function Wb(t){let e=t.filter(i=>i.installed).length,r=t.filter(i=>!i.installed).map(i=>i.client),n=t.filter(i=>i.error).map(i=>`${i.client}: ${i.error}`),s=[`MCP configs ready for ${e}/${t.length} supported clients.`,r.length>0?`Still missing: ${r.join(", ")}.`:"All supported MCP client configs are present."];return n.length>0&&s.push(`Agent config read errors: ${n.join("; ")}.`),{title:"Agents",status:n.length>0?"fail":r.length>0?"warn":"pass",lines:s}}function Bb(t){let e=t.sync?.hook_index;return t.sync?e?{title:"Hooks",status:e.ok?"pass":"fail",lines:[e.ok?`Hook index refreshed${e.schema_version?` (schema ${e.schema_version})`:""}.`:`Hook index refresh failed: ${e.error??"unknown error"}.`,e.refreshed_episodes?"Hook work episodes were refreshed before rebuilding the index.":"Hook work episodes were left unchanged."]}:{title:"Hooks",status:"warn",lines:["Repair did not produce a hook index update."]}:{title:"Hooks",status:"warn",lines:["Repair stopped before hook files could be refreshed."]}}function Fb(t){if(!t.sync)return {title:"Files",status:"warn",lines:["Repair stopped before local files could be rewritten."]};let e=[],r="pass";return t.sync.companion&&(e.push(`Companion files: ${t.sync.companion.written} written, ${t.sync.companion.skipped} unchanged, ${t.sync.companion.removed} removed.`),(t.sync.companion.errors.length>0||!t.sync.companion.ok)&&(r="fail",e.push(`Companion errors: ${t.sync.companion.errors.map(n=>n.message).join("; ")||t.sync.companion.error||"unknown error"}.`))),t.sync.claude&&(e.push(`Claude files: ${t.sync.claude.written} written, ${t.sync.claude.skipped} unchanged, ${t.sync.claude.backed_up.length} backed up.`),t.sync.claude.errors.length>0&&(r="fail",e.push(`Claude sync errors: ${t.sync.claude.errors.map(n=>n.message).join("; ")}.`))),t.sync.skills&&(e.push(`Skills: ${t.sync.skills.written} written, ${t.sync.skills.skipped} unchanged, ${t.sync.skills.removed} removed.`),t.sync.skills.errors.length>0&&(r="fail",e.push(`Skill materialization errors: ${t.sync.skills.errors.map(n=>n.message).join("; ")}.`))),e.length===0&&e.push("No local file rewrites were needed."),{title:"Files",status:r,lines:e}}function Hb(t){return t?t.allowed?{title:"Capacity",status:"pass",lines:["No plan limit blocked this repair."]}:t.blocking_reason==="capacity_full"&&t.usage?{title:"Capacity",status:"fail",lines:[`${zb(t.usage.dimension)} limit reached (${t.usage.used} / ${Jb(t.usage.limit)}).`,"Open billing or clean up usage before retrying the repair."]}:{title:"Capacity",status:"warn",lines:["Capacity is not the blocking issue for this repair."]}:{title:"Capacity",status:"warn",lines:["Capacity checks did not run because repair stopped early."]}}function Os(t,e,r){let n=e??t;if(!n)return "No status available.";let s=t!=null&&t.status!=="pass"&&n.status==="pass";return n.status==="pass"?r.pass(n.detail,s):n.status==="warn"?r.warn(n.detail,s):r.fail(n.detail,s)}function fp(...t){return t.includes("fail")?"fail":t.includes("warn")?"warn":"pass"}function qb(t,e,r){if(e.get("auth")?.status!=="pass")return "pathrule login";if(e.get("organization")?.status!=="pass")return "pathrule org use <slug-or-id>";if(e.get("workspace")?.status!=="pass")return "pathrule workspace use <name-or-id>";if(e.get("cwd_attach")?.status!=="pass")return "pathrule attach <workspace>";let a=t.sync?.preflight;if(a&&!a.allowed&&a.suggested_command_after_resolution)return a.suggested_command_after_resolution;if(r>0)return "pathrule install";let l=!t.sync?.companion?.ok||!!t.sync?.companion?.errors.length||!!t.sync?.claude?.errors.length||!!t.sync?.skills?.errors.length||t.sync?.hook_index?.ok===false;return !t.ok||l?"pathrule sync":"pathrule doctor"}function zb(t){return t.charAt(0).toLocaleUpperCase("en-US")+t.slice(1)}function Jb(t){return t===-1?"unlimited":String(t)}B();Yr();var tv={all:"all",claude:"claude-code","claude-code":"claude-code",cursor:"cursor",codex:"codex",windsurf:"windsurf"},rv=["claude-code","cursor","codex","windsurf"];function mp(t){let e=tv[(t??"all").toLowerCase()];if(!e)throw new Error("invalid_install_target");return e==="all"?rv:[e]}async function Ze(t,e){let r=mp(t),n=nv(e);return Promise.all(r.map(async s=>{let i=Et(s),o=i.homeConfigPath(homedir(),process.platform);try{let a=await _p(o),l=i.inject(a,n);return await wp(o,l.body),{client:s,ok:!0,status:"installed",config_path:o,was_new:l.wasNew}}catch(a){return {client:s,ok:false,status:"error",config_path:o,error:a instanceof Error?a.message:String(a)}}}))}async function ea(t){return Promise.all(mp(t).map(async e=>{let r=Et(e),n=r.homeConfigPath(homedir(),process.platform);try{let s=await _p(n),i=r.remove(s);return i.wasPresent?(i.body===null?await rm$1(n,{force:!0}):await wp(n,i.body),{client:e,ok:!0,status:"removed",config_path:n}):{client:e,ok:!0,status:"not_present",config_path:n}}catch(s){return {client:e,ok:false,status:"error",config_path:n,error:s instanceof Error?s.message:String(s)}}}))}function nv(t){let{supabaseUrl:e,supabaseAnonKey:r}=pe(t);return {type:"stdio",command:sv(),args:[fileURLToPath(new URL("../../mcp-server/dist/index.js",import.meta.url))],env:{SUPABASE_URL:e,SUPABASE_ANON_KEY:r}}}function sv(){try{return execFileSync("which",["node"],{encoding:"utf8"}).trim()||process.execPath}catch{return process.execPath}}async function _p(t){try{return await readFile(t,"utf8")}catch(e){if(e.code==="ENOENT")return null;throw e}}async function wp(t,e){await mkdir(dirname(t),{recursive:true});let r=`${t}.tmp`;await writeFile(r,e,"utf8"),await rename(r,t);}async function Tt(t,e,r,n){let{session:s,supabase:i}=await S(t);if(s.user.id!==e)throw new Error("session_user_mismatch");let[{data:o},a]=await Promise.all([i.from("user_workspace_paths").select("selected_ai_clients").eq("user_id",e).eq("workspace_id",r).maybeSingle(),n?ze(n):Promise.resolve([])]),l=new Set(o?.selected_ai_clients??[]),c=new Set(a),u=Object.keys(U);return Promise.all(u.map(async d=>{let p=await dv(d);return {client:d,active:l.has(d)||c.has(d),selected:l.has(d),markers:c.has(d)?["workspace_marker_detected"]:[],machineInstalled:p.installed,machineConfigPath:p.configPath,machineConfigExists:p.configExists}}))}async function vp(t,e,r,n,s,i,o="restore-backup"){let a=pv(s),{session:l,supabase:c}=await S(t);if(l.user.id!==e)throw new Error("session_user_mismatch");let{data:u,error:d}=await c.from("user_workspace_paths").select("selected_ai_clients").eq("user_id",e).eq("workspace_id",r).eq("local_root_path",n).maybeSingle();if(d)throw new Error(`workspace_client_selection_read_failed: ${d.message}`);if(!u)throw new Error("workspace_root_not_attached");let p=[],h=new Set((u.selected_ai_clients??[]).filter(Sp)),f=Array.from(h);i?h.add(a):h.delete(a);let m=Array.from(h);if(!hv(f,m)){let{error:w}=await c.from("user_workspace_paths").update({selected_ai_clients:m}).eq("user_id",e).eq("workspace_id",r).eq("local_root_path",n);if(w)throw new Error(`workspace_client_selection_update_failed: ${w.message}`)}if(i){let w=await Ze(a,t);for(let k of w)k.ok||p.push(`${k.client}: ${k.error??k.status}`);}else await kp(n,a);let _=await un(t,r,n);return _.ok||p.push(_.error??"workspace_sync_failed"),i||await kp(n,a),{ok:true,statuses:await Tt(t,e,r,n),warnings:p}}async function dv(t){let e=Et(t),r=e.homeConfigPath(homedir(),process.platform);try{let n=await readFile(r,"utf8");return {configPath:r,configExists:!0,installed:e.read(n)!==null}}catch(n){return n.code!=="ENOENT"?{configPath:r,configExists:false,installed:false}:{configPath:r,configExists:false,installed:false}}}function pv(t){if(Sp(t))return t;throw new Error("invalid_agent_target")}function Sp(t){return _i(t)!==null}function hv(t,e){if(t.length!==e.length)return false;let r=new Set(t);return e.every(n=>r.has(n))}async function kp(t,e,r){let n=U[e]?.skillsDir;if(!n)return;let s=join(t,n);await rm$1(s,{recursive:true,force:true}),await fv(dirname(s),t);}async function fv(t,e){let r=resolve(e),n=resolve(t);for(;n!==r&&n.startsWith(`${r}${sep}`);){try{await rmdir(n);}catch{return}n=dirname(n);}}Ge();var _v=promisify(execFile),wv=2e3;function ta(t){if(t.startsWith("/")||/^[A-Za-z]:[\\/]/.test(t))return null;let e=t.replace(/\\/g,"/").replace(/\/+/g,"/");return e.length===0||e==="."||e.startsWith("../")||e.includes("/../")||e.startsWith(".git/")||/[\x00-\x1F]/.test(e)?null:e}function yv(t){let r=(Buffer.isBuffer(t)?t.toString("utf8"):t).split("\0").filter(s=>s.length>0),n=[];for(let s=0;s<r.length;s+=1){let i=r[s];if(!i||i.length<4)continue;let o=i.slice(0,2),a=i.slice(3),l=kv(o);if(o.includes("R")||o.includes("C")){let u=ta(a);u&&n.push({relativePath:u,gitStatus:"renamed"});let d=ta(r[s+1]??"");d&&n.push({relativePath:d,gitStatus:"renamed"}),s+=1;continue}let c=ta(a);c&&n.push({relativePath:c,gitStatus:l});}return bv(n)}async function Cp(t,e={}){try{let{stdout:r}=await _v("git",["status","--porcelain=v1","-z"],{cwd:t,encoding:"buffer",maxBuffer:5242880,timeout:e.timeoutMs??wv});return {entries:yv(r),degraded:!1}}catch{return {entries:[],degraded:true}}}function kv(t){return t==="??"?"untracked":t.includes("A")?"added":t.includes("D")?"deleted":t.includes("R")||t.includes("C")?"renamed":t.includes("M")||t.includes("T")||t.includes("U")?"modified":"unknown"}function bv(t){let e=new Map;for(let r of t)e.set(r.relativePath,r);return Array.from(e.values()).sort((r,n)=>r.relativePath.localeCompare(n.relativePath))}var Sv=800,Cv=6e4,$s=500,pn=class{constructor(e){this.options=e;}options;dirty=new Map;pendingTimer=null;intervalTimer=null;stopped=false;degraded=false;lastScanAt=null;start(){this.intervalTimer||(this.reconcile(),this.intervalTimer=setInterval(()=>{this.reconcile();},this.options.scanIntervalMs??Cv),this.intervalTimer.unref?.());}stop(){this.stopped=true,this.pendingTimer&&clearTimeout(this.pendingTimer),this.intervalTimer&&clearInterval(this.intervalTimer),this.pendingTimer=null,this.intervalTimer=null;}markActivePath(e){if(this.stopped||!Ev(e))return;let r=this.isoNow();this.publishRows([{relative_path:e,is_active:true,is_dirty:this.dirty.has(e),git_status:this.dirty.get(e)?.gitStatus??"unknown",last_heartbeat_at:r,last_git_scan_at:r}],[]),this.scheduleReconcile();}scheduleReconcile(){this.stopped||(this.pendingTimer&&clearTimeout(this.pendingTimer),this.pendingTimer=setTimeout(()=>{this.pendingTimer=null,this.reconcile();},this.options.debounceMs??Sv),this.pendingTimer.unref?.());}async reconcile(){if(this.stopped)return this.status();let e=this.isoNow(),r=await Cp(this.options.workspaceRoot);if(this.degraded=r.degraded,r.degraded)return this.status();let n=new Map;for(let o of r.entries){let a=this.dirty.get(o.relativePath);n.set(o.relativePath,{gitStatus:o.gitStatus,firstSeenAt:a?.firstSeenAt??e});}let s=Array.from(this.dirty.keys()).filter(o=>!n.has(o));this.dirty.clear();for(let[o,a]of n)this.dirty.set(o,a);this.lastScanAt=e;let i=Array.from(n.entries()).map(([o,a])=>({relative_path:o,is_active:false,is_dirty:true,git_status:a.gitStatus,last_local_write_at:a.firstSeenAt,last_git_scan_at:e}));return await this.publishChunked(i,s),this.status()}status(){return {healthy:!this.degraded,degraded:this.degraded,lastScanAt:this.lastScanAt,dirtyPathCount:this.dirty.size}}async publishChunked(e,r){for(let n=0;n<e.length;n+=$s)await this.publishRows(e.slice(n,n+$s),[]);for(let n=0;n<r.length;n+=$s)await this.publishRows([],r.slice(n,n+$s));}async publishRows(e,r){if(e.length===0&&r.length===0)return;let{error:n}=await this.options.supabase.rpc("pathrule_upsert_file_work_state",{p_workspace_id:this.options.workspaceId,p_runtime_id:this.options.runtimeId,p_rows:e,p_clear_paths:r});n&&(this.degraded=true);}isoNow(){return (this.options.now?.()??new Date).toISOString()}};async function ra(t,e=process.env){let r=await ne(t,e);if(r.work_state_runtime_id)return r.work_state_runtime_id;let n=`runtime:${randomUUID()}`;return await se(t,{work_state_runtime_id:n},e),n}function Ev(t){return t.length>0&&!t.startsWith("/")&&!t.startsWith("../")&&!t.includes("/../")&&!t.startsWith(".git/")&&!/[\x00-\x1F]/.test(t)}B();var At=new Map;async function Ep(t=process.env){let{session:e,supabase:r}=await S(t),{data:n,error:s}=await r.from("user_workspace_paths").select("workspace_id, local_root_path, watcher_enabled").eq("user_id",e.user.id).eq("watcher_enabled",true);if(s)throw s;let i=await ra(e.user.id,t);for(let o of n??[]){if(!o.workspace_id||!o.local_root_path||At.has(o.workspace_id))continue;let a=new pn({workspaceId:o.workspace_id,workspaceRoot:o.local_root_path,userId:e.user.id,runtimeId:i,supabase:r});At.set(o.workspace_id,{tracker:a,workspaceRoot:o.local_root_path}),a.start();}}async function na(t,e,r=process.env){if(At.has(t))return;let{session:n,supabase:s}=await S(r),i=await ra(n.user.id,r),o=new pn({workspaceId:t,workspaceRoot:e,userId:n.user.id,runtimeId:i,supabase:s});At.set(t,{tracker:o,workspaceRoot:e}),o.start();}async function sa(t){return At.get(t)?.tracker.reconcile()??null}function Rp(){for(let t of At.values())t.tracker.stop();At.clear();}var ia="1.0",pr=37913,dr="127.0.0.1",Mv=60,Lv=createRequire(import.meta.url),Uv=Lv("../package.json"),fe=promisify(execFile),gn="io.pathrule.cli-daemon",Ds="pathrule-daemon.service",Wv=60;async function hr(t){let e=await We(t);if(e.running)return e;let r=process.argv[1];if(!r)throw new Error("daemon_entrypoint_missing");spawn(process.execPath,[r,"daemon","run"],{detached:true,stdio:"ignore",env:{...process.env,...t}}).unref();let s=Date.now()+3e3;for(;Date.now()<s;){let i=await We(t);if(i.running)return i;await lS(100);}throw new Error("daemon_start_timeout")}async function mn(t){let e=await We(t);if(e.state?.pid&&e.state.pid!==process.pid)try{process.kill(e.state.pid,"SIGTERM");}catch{}return await unlink(A(t).daemonFile).catch(()=>{}),We(t)}async function Pe(t=process.env){let e=Mp(t);if(!e.supported)return e;if(e.method==="task-scheduler"){let r=await Kv();return {...e,enabled:r}}return {...e,enabled:e.path?await ua(e.path):false}}async function Qe(t,e){let r=Mp(t);if(!r.supported)return r;if(e){let n=Fv(t);if(r.method==="launchd"){if(!r.path)throw new Error("daemon_autostart_path_missing");return await Hv(r.path,n,t),t.PATHRULE_SKIP_AUTOSTART_ACTIVATE!=="1"&&await zv(r.path),Pe(t)}if(r.method==="systemd"){if(!r.path)throw new Error("daemon_autostart_path_missing");return await qv(r.path,n,t),t.PATHRULE_SKIP_AUTOSTART_ACTIVATE!=="1"&&(await fe("systemctl",["--user","daemon-reload"]),await fe("systemctl",["--user","enable","--now",Ds])),Pe(t)}return await Vv(n,t),Pe(t)}return r.method==="launchd"?(t.PATHRULE_SKIP_AUTOSTART_ACTIVATE!=="1"&&r.path&&await Jv(r.path),r.path&&await unlink(r.path).catch(()=>{}),Pe(t)):r.method==="systemd"?(t.PATHRULE_SKIP_AUTOSTART_ACTIVATE!=="1"&&(await fe("systemctl",["--user","disable","--now",Ds]).catch(()=>{}),await fe("systemctl",["--user","daemon-reload"]).catch(()=>{})),r.path&&await unlink(r.path).catch(()=>{}),Pe(t)):(await Gv(),Pe(t))}async function We(t){let e=A(t).daemonFile,r;try{r=JSON.parse(await readFile(e,"utf8"));}catch(s){let i=s.code==="ENOENT"?"missing":"unreadable";return await Pp(Bv(t))?{running:true,state:null,state_path:e,reason:"probed"}:{running:false,state:null,state_path:e,reason:i}}let n=aS(r.pid);if(!n){let s=await Pp(r.port);if(s)return {running:true,state:s.daemonSessionId?{...r,pid:0,daemon_session_id:s.daemonSessionId,protocol_version:s.protocolVersion}:null,state_path:e,reason:"probed"}}return {running:n,state:r,state_path:e,reason:n?void 0:"stale"}}async function Pp(t){if(!Number.isInteger(t)||t<=0||t>65535)return null;let e=new AbortController,r=setTimeout(()=>e.abort(),250);try{let n=await fetch(`http://${dr}:${t}/v1/status`,{signal:e.signal});if(!n.ok)return null;let s=await n.json();return s.daemon_present!==!0||typeof s.protocol_version!="string"?null:{protocolVersion:s.protocol_version,daemonSessionId:typeof s.daemon_session_id=="string"&&s.daemon_session_id.length>0?s.daemon_session_id:null}}catch{return null}finally{clearTimeout(r);}}function Bv(t){let e=t.PATHRULE_DAEMON_PORT?.trim()||String(pr),r=Number(e);return Number.isInteger(r)&&r>=0&&r<=65535?r:pr}function Mp(t){let e=t.PATHRULE_TEST_PLATFORM??process.platform,r=t.PATHRULE_AUTOSTART_DIR;return e==="darwin"?{supported:true,enabled:false,method:"launchd",path:r?join(r,`${gn}.plist`):join(homedir(),"Library","LaunchAgents",`${gn}.plist`)}:e==="linux"?{supported:true,enabled:false,method:"systemd",path:r?join(r,Ds):join(homedir(),".config","systemd","user",Ds)}:e==="win32"?{supported:false,enabled:false,method:"task-scheduler",path:null,reason:"Windows daemon autostart requires installer support."}:{supported:false,enabled:false,method:"unsupported",path:null,reason:`Unsupported platform: ${e}`}}function Fv(t){let e=t.PATHRULE_CLI_ENTRYPOINT?.trim()||process.argv[1];if(!e)throw new Error("daemon_entrypoint_missing");return {command:process.execPath,args:[e,"daemon","run"]}}function ca(t){let e={PATHRULE_DAEMON_PORT:t.PATHRULE_DAEMON_PORT?.trim()||String(pr)};for(let r of ["PATH","PATHRULE_HOME","PATHRULE_WEB_URL"]){let n=t[r];n&&n.trim()!==""&&(e[r]=n);}return e}async function Hv(t,e,r){let n=`<?xml version="1.0" encoding="UTF-8"?>
143
143
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
144
144
  <plist version="1.0">
145
145
  <dict>
146
146
  <key>Label</key>
147
- <string>${lr(fn)}</string>
147
+ <string>${cr(gn)}</string>
148
148
  <key>ProgramArguments</key>
149
149
  <array>
150
- ${[e.command,...e.args].map(i=>` <string>${lr(i)}</string>`).join(`
150
+ ${[e.command,...e.args].map(s=>` <string>${cr(s)}</string>`).join(`
151
151
  `)}
152
152
  </array>
153
153
  <key>EnvironmentVariables</key>
154
154
  <dict>
155
- ${Object.entries(oa(r)).map(([i,s])=>` <key>${lr(i)}</key>
156
- <string>${lr(s)}</string>`).join(`
155
+ ${Object.entries(ca(r)).map(([s,i])=>` <key>${cr(s)}</key>
156
+ <string>${cr(i)}</string>`).join(`
157
157
  `)}
158
158
  </dict>
159
159
  <key>RunAtLoad</key>
@@ -161,30 +161,30 @@ ${Object.entries(oa(r)).map(([i,s])=>` <key>${lr(i)}</key>
161
161
  <key>KeepAlive</key>
162
162
  <true/>
163
163
  <key>StandardOutPath</key>
164
- <string>${lr(join(A(r).logsDir,"daemon-launchd.log"))}</string>
164
+ <string>${cr(join(A(r).logsDir,"daemon-launchd.log"))}</string>
165
165
  <key>StandardErrorPath</key>
166
- <string>${lr(join(A(r).logsDir,"daemon-launchd.err.log"))}</string>
166
+ <string>${cr(join(A(r).logsDir,"daemon-launchd.err.log"))}</string>
167
167
  </dict>
168
168
  </plist>
169
- `;await mkdir(dirname(t),{recursive:true,mode:j}),await mkdir(A(r).logsDir,{recursive:true,mode:j}),await writeFile(t,n,{encoding:"utf8",mode:O}),await chmod(t,O).catch(()=>{});}async function Tv(t,e,r){let n=oa(r),i=`[Unit]
169
+ `;await mkdir(dirname(t),{recursive:true,mode:M}),await mkdir(A(r).logsDir,{recursive:true,mode:M}),await writeFile(t,n,{encoding:"utf8",mode:O}),await chmod(t,O).catch(()=>{});}async function qv(t,e,r){let n=ca(r),s=`[Unit]
170
170
  Description=Pathrule CLI daemon
171
171
 
172
172
  [Service]
173
173
  Type=simple
174
- ExecStart=${[e.command,...e.args].map(vp).join(" ")}
175
- ${Object.entries(n).map(([s,o])=>`Environment=${vp(`${s}=${o}`)}`).join(`
174
+ ExecStart=${[e.command,...e.args].map(Tp).join(" ")}
175
+ ${Object.entries(n).map(([i,o])=>`Environment=${Tp(`${i}=${o}`)}`).join(`
176
176
  `)}
177
177
  Restart=on-failure
178
178
  RestartSec=5
179
179
 
180
180
  [Install]
181
181
  WantedBy=default.target
182
- `;await mkdir(dirname(t),{recursive:true,mode:j}),await writeFile(t,i,{encoding:"utf8",mode:O}),await chmod(t,O).catch(()=>{});}async function Av(t){let e=Ip();await he("launchctl",["bootout",e,t]).catch(()=>{}),await he("launchctl",["bootstrap",e,t]),await he("launchctl",["enable",`${e}/${fn}`]).catch(()=>{}),await he("launchctl",["kickstart","-k",`${e}/${fn}`]).catch(()=>{});}async function Iv(t){await he("launchctl",["bootout",Ip(),t]).catch(()=>{});}function Ip(){return `gui/${typeof process.getuid=="function"?process.getuid():0}`}async function Ov(){try{return await he("schtasks.exe",["/Query","/TN","Pathrule CLI Daemon"]),!0}catch{return false}}async function $v(t,e){let r=oa(e),n=Object.entries(r).map(([o,a])=>`set ${na(o)}=${na(a)}`).join("&&"),i=[t.command,...t.args].map(Dv).join(" "),s=n?`cmd.exe /d /c "${n}&&${i}"`:i;await he("schtasks.exe",["/Create","/TN","Pathrule CLI Daemon","/TR",s,"/SC","ONLOGON","/F"]);}async function Nv(){await he("schtasks.exe",["/Delete","/TN","Pathrule CLI Daemon","/F"]).catch(()=>{});}function lr(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function vp(t){return `"${t.replace(/(["\\$`])/g,"\\$1")}"`}function Dv(t){return `"${na(t)}"`}function na(t){return t.replace(/(["^&|<>%])/g,"^$1")}async function Op(t,e={}){let r=null,n=new Map,i=new Map,s=createServer((l,c)=>{Lv(l,c,t,r,n,i);}),o=jv(t);await new Promise((l,c)=>{s.once("error",c),s.listen(o.port,o.host,()=>{s.off("error",c),l();});});let a=s.address();if(!a||typeof a=="string")throw new Error("daemon_bind_failed");r={schema_version:1,pid:process.pid,host:ur,port:a.port,protocol_version:ra,daemon_session_id:randomUUID(),started_at:new Date().toISOString()},await Wv(t,r),await dn(t,`listening ${ur}:${a.port}`),wp(t).catch(l=>{dn(t,`work_state_trackers_start_failed error=${l instanceof Error?l.message:"unknown"}`);}),await new Promise(l=>{let c=false,u=()=>{c||(c=true,process.off("SIGTERM",u),process.off("SIGINT",u),e.shutdownSignal?.removeEventListener("abort",u),yp(),s.close(()=>l()));};process.once("SIGTERM",u),process.once("SIGINT",u),e.shutdownSignal?.addEventListener("abort",u,{once:true});}),await unlink(A(t).daemonFile).catch(()=>{}),await dn(t,"stopped");}function jv(t){let e=t.PATHRULE_DAEMON_HOST?.trim();if(e&&e!==ur&&e!=="localhost")throw new Error("daemon_host_must_be_loopback");let r=t.PATHRULE_DAEMON_PORT?.trim();if(!r)return {host:ur,port:0};let n=Number(r);if(!Number.isInteger(n)||n<0||n>65535)throw new Error("daemon_port_invalid");return {host:ur,port:n}}function Mv(t,e,r,n=Date.now()){let i=Vu({origin:e,ip:r,nowMs:n}),s=(t.get(i)??0)+1;return t.set(i,s),s<=vv}async function Lv(t,e,r,n,i,s){let o=new URL(t.url??"/","http://127.0.0.1"),a=$i(t.headers,"origin"),l=Fv();if(t.method==="OPTIONS"){let d=Ro(a,l);if(!d){x(e,400,{ok:false,error:a?"origin_not_allowed":"origin_required"});return}e.writeHead(204,d),e.end();return}if(a&&!mi(a,l)){x(e,400,{ok:false,error:"origin_not_allowed"});return}if(a&&!Mv(s,a,Hv(t))){x(e,429,{ok:false,error:"rate_limited"});return}let c=a?Ro(a,l)??void 0:void 0;if(t.method==="POST"&&o.pathname==="/hook/work-conflicts"&&!a)try{let d=await cr(t,8192),p=await Sp(r,{workspaceId:Ue(d,"workspace_id"),relativePaths:xp(d,"relative_paths")});x(e,200,p);return}catch(d){x(e,400,{ok:false,error:d instanceof Error?d.message:String(d)});return}if(t.method==="GET"&&o.pathname==="/v1/status"){let d=At(t,a,i);if(d&&n){let f=await Np(r);x(e,200,{daemon_present:true,paired:true,daemon_version:Cv.version,protocol_version:ra,daemon_session_id:d.daemonSessionId,user_id:d.userId,paired_at:d.pairedAt,desktop_runtime_detected:f},c);return}let p=!a&&n?.daemon_session_id?n.daemon_session_id:null;x(e,200,Ku(ra,{daemonSessionId:p}),c);return}if(t.method==="POST"&&o.pathname==="/v1/pair"){let d=St({headers:t.headers,allowedOrigins:l,requirePairToken:false});if(d){x(e,d.statusCode,{ok:false,error:d.reason},c);return}if(!n){x(e,503,{ok:false,error:"daemon_not_ready"},c);return}try{let p=await cr(t),f=Ue(p,"browser_profile_id"),h=await qu({env:r,daemonSessionId:n.daemon_session_id,origin:a??"",pairCode:Ue(p,"pair_code"),pairVerifier:Ue(p,"pair_verifier"),browserProfileId:f});i.set(h.pair_token,{daemonSessionId:h.daemon_session_id,browserProfileId:f,origin:a??"",userId:h.user_id,pairedAt:new Date().toISOString()}),await dn(r,Ep("bridge_paired",{origin:a??"",userId:h.user_id,browserProfileId:f})),x(e,200,h,c);return}catch(p){let f=p instanceof Y?p.code:"pair_failed",h=f==="pair_code_missing"||f==="pair_code_invalid"?401:f==="pair_code_expired"||f==="pair_code_stale"?410:f.endsWith("_required")?400:500;x(e,h,{ok:false,error:f},c);return}}if(t.method==="POST"&&o.pathname==="/v1/fs/read-dir"){let d=At(t,a,i),p=St({headers:t.headers,allowedOrigins:l});if(p){x(e,p.statusCode,{ok:false,error:p.reason},c);return}if(!d){x(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{let f=await cr(t),h=Ue(f,"workspace_root"),m=Ue(f,"relative_dir");await fe(r,d.userId,h);let _=await Bo(h,m);x(e,200,{entries:_},c);return}catch(f){x(e,400,{error:f instanceof Error?f.message:String(f)},c);return}}if(t.method==="POST"&&o.pathname==="/v1/fs/path-exists"){let d=At(t,a,i),p=St({headers:t.headers,allowedOrigins:l});if(p){x(e,p.statusCode,{ok:false,error:p.reason},c);return}if(!d){x(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{let f=await cr(t),h=Ue(f,"path");await fe(r,d.userId,h);let m=await aa(h),_=m?await $p(h):!1;x(e,200,{exists:m,isDirectory:_},c);return}catch(f){x(e,400,{error:f instanceof Error?f.message:String(f)},c);return}}if(t.method==="POST"&&o.pathname==="/v1/doctor"){let d=At(t,a,i),p=St({headers:t.headers,allowedOrigins:l});if(p){x(e,p.statusCode,{ok:false,error:p.reason},c);return}if(!d){x(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{await ia(r,d.userId);let f=await cr(t),h=Rp(f,"workspace_root")??process.cwd(),m=await Me(r,h);x(e,200,{ok:m.ok,report:m},c);return}catch(f){x(e,400,{ok:false,error:f instanceof Error?f.message:String(f)},c);return}}let u=Uv(o.pathname);if(t.method==="GET"&&u){let d=At(t,a,i);if(!d){x(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{let p=o.searchParams.get("workspace_root")?.trim()??"";if(!p)throw new Error("workspace_root_required");if(u.action==="local-status"){await Cp(e,r,d.userId,u.workspaceId,p,c);return}if(u.action==="agents-status"){await fe(r,d.userId,p,u.workspaceId);let f=await Pt(r,d.userId,u.workspaceId,p);x(e,200,{ok:!0,statuses:f,ai_clients:f},c);return}if(u.action==="fs-read"){await fe(r,d.userId,p,u.workspaceId);let f=await Bo(p,o.searchParams.get("dir")??"/");x(e,200,{ok:!0,entries:f},c);return}}catch(p){x(e,400,{ok:false,error:p instanceof Error?p.message:String(p)},c);return}}if(t.method==="POST"&&u){let d=At(t,a,i),p=St({headers:t.headers,allowedOrigins:l});if(p){x(e,p.statusCode,{ok:false,error:p.reason},c);return}if(!d){x(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{let f=await cr(t),h=Ue(f,"workspace_root");if(u.action==="local-status"){await Cp(e,r,d.userId,u.workspaceId,h,c);return}if(u.action==="attach"){await ia(r,d.userId);let m=await xe(u.workspaceId,h,r);x(e,200,{ok:!0,...m},c);return}if(u.action==="sync"){await fe(r,d.userId,h,u.workspaceId);let m=await ln(r,u.workspaceId,h);await ea(u.workspaceId,h,r),await ta(u.workspaceId),x(e,m.ok?200:409,m,c);return}if(u.action==="repair"){await fe(r,d.userId,h,u.workspaceId);let m=await cn(r,h);x(e,m.ok?200:409,m,c);return}if(u.action==="agents-status"){await fe(r,d.userId,h,u.workspaceId);let m=await Pt(r,d.userId,u.workspaceId,h);x(e,200,{ok:!0,statuses:m,ai_clients:m},c);return}if(u.action==="agents-install"||u.action==="agents-uninstall"||u.action==="agents-set-enabled"){await fe(r,d.userId,h,u.workspaceId);let m=u.action==="agents-set-enabled"?qv(f,"enabled"):u.action==="agents-install",_=await gp(r,d.userId,u.workspaceId,h,Ue(f,"client"),m,zv(Rp(f,"disable_mode")));x(e,_.ok?200:409,_,c);return}if(u.action==="hooks-sync"||u.action==="hook-index-rebuild"){await fe(r,d.userId,h,u.workspaceId);let{supabase:m}=await C(r),_=await Ei({supabase:m,workspaceId:u.workspaceId,workspaceRoot:h,env:r});await ea(u.workspaceId,h,r),await ta(u.workspaceId),x(e,_.ok?200:409,_,c);return}if(u.action==="work-conflicts"){await fe(r,d.userId,h,u.workspaceId);let m=await Sp(r,{workspaceId:u.workspaceId,relativePaths:xp(f,"relative_paths")});x(e,200,{ok:!0,decision:m},c);return}if(u.action==="skills-materialize"){await fe(r,d.userId,h,u.workspaceId);let m=await ln(r,u.workspaceId,h,{skillsOnly:!0});x(e,m.ok?200:409,m,c);return}}catch(f){x(e,400,{ok:false,error:f instanceof Error?f.message:String(f)},c);return}}if(t.method==="POST"&&o.pathname==="/v1/unpair"){let d=St({headers:t.headers,allowedOrigins:l});if(d){x(e,d.statusCode,{ok:false,error:d.reason},c);return}let p=$i(t.headers,gi),f=At(t,a,i);if(!p||!f){x(e,401,{ok:false,error:"pair_token_invalid"},c);return}i.delete(p),await dn(r,Ep("bridge_unpaired",{origin:a??"",userId:f.userId,browserProfileId:f.browserProfileId})),x(e,200,{ok:true},c);return}x(e,404,{ok:false,error:"not_found"},c);}function At(t,e,r){let n=$i(t.headers,gi);if(!n||!e)return null;let i=r.get(n);return !i||i.origin!==e||i.browserProfileId!==$i(t.headers,Ju)?null:i}async function fe(t,e,r,n){await ia(t,e);let{session:i,supabase:s}=await C(t),o=s.from("user_workspace_paths").select("workspace_id").eq("user_id",e).eq("local_root_path",r).limit(1);n&&(o=o.eq("workspace_id",n));let{data:a,error:l}=await o;if(l)throw l;if(!a||a.length===0)throw new Error("workspace_root_not_attached")}async function ia(t,e){let{session:r}=await C(t);if(r.user.id!==e)throw new Error("session_user_mismatch")}function Uv(t){let e=/^\/v1\/workspaces\/([^/]+)\/(.+)$/.exec(t);if(!e)return null;let r=decodeURIComponent(e[1]??""),n=e[2]??"";return r?n==="local-status"?{workspaceId:r,action:"local-status"}:n==="fs"?{workspaceId:r,action:"fs-read"}:n==="attach"?{workspaceId:r,action:"attach"}:n==="sync"?{workspaceId:r,action:"sync"}:n==="repair"?{workspaceId:r,action:"repair"}:n==="agents/status"?{workspaceId:r,action:"agents-status"}:n==="agents/install"?{workspaceId:r,action:"agents-install"}:n==="agents/uninstall"?{workspaceId:r,action:"agents-uninstall"}:n==="agents/set-enabled"?{workspaceId:r,action:"agents-set-enabled"}:n==="hooks/sync"?{workspaceId:r,action:"hooks-sync"}:n==="hook-index/rebuild"?{workspaceId:r,action:"hook-index-rebuild"}:n==="skills/materialize"?{workspaceId:r,action:"skills-materialize"}:n==="work-conflicts"?{workspaceId:r,action:"work-conflicts"}:null:null}async function Sp(t,e){let r=Date.now(),{session:n,supabase:i}=await C(t),s=i.rpc("pathrule_check_file_work_conflicts",{p_workspace_id:e.workspaceId,p_relative_paths:e.relativePaths}),o=await Vv(s,Ev);if(!o||o.error)return Xu(r);let a=Array.isArray(o.data)?o.data:[],l={};for(let c of a){if(!c||typeof c!="object")continue;let u=c;typeof u.user_id=="string"&&typeof u.display_name=="string"&&(l[u.user_id]=u.display_name);}return Yu({workspaceId:e.workspaceId,relativePaths:e.relativePaths,currentUserId:n.user.id,rows:Zu(a),displayNamesByUserId:l,source:"cloud_rpc",startedAtMs:r})}async function Cp(t,e,r,n,i,s){await fe(e,r,i,n);let o=await aa(i),a=o?await $p(i):false,l=await Np(e),c=await Pt(e,r,n,i);x(t,200,{ok:true,workspace_id:n,local_root_path:i,root_exists:o,root_is_directory:a,desktop_runtime_detected:l,local_runtime_state:o?a?l?"cli_attached_desktop_also_detected":"cli_attached":"root_not_directory":"root_missing",ai_clients:c},s);}async function aa(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function $p(t){try{return (await stat(t)).isDirectory()}catch{return false}}async function Wv(t,e){let r=A(t).daemonFile;await mkdir(dirname(r),{recursive:true,mode:j});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(e,null,2),{encoding:"utf8",mode:O}),await rename(n,r);}async function dn(t,e){let r=A(t).logsDir;await mkdir(r,{recursive:true,mode:j});let n=new Date().toISOString().slice(0,10),i=`${new Date().toISOString()} ${Bv(e)}
183
- `;await writeFile(join(r,`daemon-${n}.log`),i,{flag:"a",encoding:"utf8",mode:O});}function Bv(t){return t.replace(/(authorization|token|secret|password)=\S+/gi,"$1=[redacted]")}function Ep(t,e){let r=createHash("sha256").update("pathrule-bridge-profile-v1","utf8").update("\0","utf8").update(e.browserProfileId,"utf8").digest("base64url").slice(0,16);return `${t} origin=${e.origin||"unknown"} user_id=${e.userId} browser_profile_hash=${r}`}async function Np(t,e=Date.now()){let r=t.PATHRULE_DESKTOP_HEALTH?.trim().toLowerCase();if(r==="healthy"||r==="1"||r==="true")return true;if(r==="unhealthy"||r==="0"||r==="false")return false;let n;try{n=JSON.parse(await readFile(A(t).desktopFile,"utf8"));}catch{return false}if(n.healthy!==true||!n.updated_at)return false;let i=Date.parse(n.updated_at);return Number.isFinite(i)&&e-i<=600*1e3}function Fv(){let t=process.env.PATHRULE_BRIDGE_ORIGINS;return t?t.split(",").map(e=>e.trim()).filter(Boolean):["https://app.pathrule.io","http://localhost:5173"]}function $i(t,e){let r=t[e]??t[e.toLowerCase()],n=Array.isArray(r)?r[0]:r;return (typeof n=="string"?n.trim():"")||void 0}function Hv(t){return t.socket.remoteAddress??"unknown"}async function cr(t,e=4096){let r="";for await(let i of t)if(r+=i,Buffer.byteLength(r,"utf8")>e)throw new Error("request_body_too_large");let n=JSON.parse(r||"{}");if(!n||typeof n!="object"||Array.isArray(n))throw new Error("invalid_json_body");return n}function Ue(t,e){let r=t[e];if(typeof r!="string"||r.trim()==="")throw new Y(`${e}_required`);return r.trim()}function Rp(t,e){let r=t[e];return typeof r!="string"||r.trim()===""?null:r.trim()}function qv(t,e){let r=t[e];if(typeof r!="boolean")throw new Y(`${e}_required`);return r}function xp(t,e){let r=t[e];if(!Array.isArray(r))throw new Y(`${e}_required`);return Array.from(new Set(r.filter(n=>typeof n=="string"))).filter(n=>n.trim()!=="").slice(0,100)}function zv(t){return t==="full-remove"?"full-remove":"restore-backup"}function x(t,e,r,n){t.writeHead(e,{"content-type":"application/json",...n}),t.end(JSON.stringify(r));}function Jv(t){if(!Number.isInteger(t)||t<=0)return false;try{return process.kill(t,0),!0}catch{return false}}function Kv(t){return new Promise(e=>setTimeout(e,t))}async function Vv(t,e){let r=null;try{return await Promise.race([t,new Promise(n=>{r=setTimeout(()=>n(null),e),r.unref?.();})])}finally{r&&clearTimeout(r);}}F();function k(t){return {schema_version:1,ok:t.ok,command:t.command,cwd:t.cwd,...t.data===void 0?{}:{data:t.data},...t.error===void 0?{}:{error:t.error},...t.next_steps===void 0?{}:{next_steps:t.next_steps}}}function Dp(t){return `${JSON.stringify(t,null,2)}
184
- `}function g(t,e){let r={ok:"[ok]",warn:"[warn]",error:"[error]",info:"[info]"};return e.color?`${{ok:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",info:"\x1B[36m"}[t]}${r[t]}\x1B[0m`:r[t]}Ee();var Yv=/^[^\s@]+@[^\s@]+\.[^\s@]+$/i,Te=class extends Error{constructor(r,n){super(n);this.code=r;this.name="CliInviteUsageError";}code};function la(t){let e=[],r="editor",n,i;for(let o=0;o<t.length;o+=1){let a=t[o];if(a){if(a==="--role"){r=sS(t[++o]);continue}if(a==="--org"){n=jp(t[++o],"--org requires a value","invite_org_required");continue}if(a==="--workspace"){i=jp(t[++o],"--workspace requires a value","invite_workspace_required");continue}if(a.startsWith("--"))throw new Te("unknown_invite_option",`Unknown invite option "${a}".`);e.push(a);}}let s=e[0];if(!s)throw new Te("invite_email_required","Usage: pathrule invite <email> [--role admin|editor|viewer] [--org <slug-or-id>] [--workspace <name-or-id>]");if(e.length>1)throw new Te("unexpected_invite_argument",`Unexpected extra argument "${e[1]}".`);return {email:s,role:r,orgSelector:n,workspaceSelector:i}}async function ca(t,e){let r=t.email.trim().toLowerCase();if(!Yv.test(r))return Ot("invalid_email",null,null,e,r);let{session:n,supabase:i}=await C(e),s=await Xv(t.orgSelector,e);if(!s)return Ot("org_required",null,null,e,r);if(s.role!=="admin"&&s.role!=="owner")return Ot("forbidden",s,null,e,r);let o=await Zv(i,n.user.id,s.id,t.workspaceSelector,e);if(!o&&t.workspaceSelector)return Ot("workspace_not_found",s,null,e,r);let a=await oS(i,s.id);if(a.failure)return Ot(a.failure.error,s,o,e,r,a.failure.details);let l=await nS(i,s.id,a,e);if(!l.ok)return Ot(l.error,s,o,e,r,l.details);let{data:c,error:u}=await i.rpc("create_org_invite",{p_org_id:s.id,p_email:r,p_role:t.role}),d=c,p=d&&d.ok===false?d.error:void 0;if(u||!d||d.ok!==true)return Ot(u?.message??p??"invite_failed",s,o,e,r);let f=true;try{let{error:m}=await i.functions.invoke("send-org-invite-email",{body:{invite_id:d.invite_id}});m&&(f=!1);}catch{f=false;}let h={kind:"web",url:ee(s,e,"members"),label:"Open team in Pathrule Web",reason:"preferred"};return {ok:true,invite_id:d.invite_id,email:d.email,role:d.role,email_sent:f,billing_impact:a.billingImpact,billing_adjustment:l.adjustment,organization:Mp(s),workspace:Lp(o),open_target:h,next_steps:[{label:"Open team in Pathrule Web",url:h.url},...f?[]:[{label:"Retry invite email from Pathrule Web",url:h.url}]]}}function Mp(t){return t?{id:t.id,name:t.name,slug:t.slug,role:t.role}:null}function Lp(t){return t?{id:t.id,name:t.name}:null}async function Xv(t,e){return t?(await we(e)).find(n=>n.id===t||n.slug===t)??null:D(e)}async function Zv(t,e,r,n,i){if(!n){let a=await M(i);return a?.organization_id===r?a:null}let{data:s,error:o}=await t.from("workspaces").select("id, organization_id, name, access_mode, git_remote_url, git_owner, git_repo, user_workspace_paths!left(local_root_path, user_id)").eq("organization_id",r).is("archived_at",null);if(o)throw o;for(let a of s??[]){let c=(a.user_workspace_paths??[]).find(d=>d.user_id===e)??null,u={id:a.id,organization_id:a.organization_id,name:a.name,access_mode:a.access_mode,git_remote_url:a.git_remote_url,git_owner:a.git_owner,git_repo:a.git_repo,local_root_path:c?.local_root_path??null,current:false};if(u.id===n||u.name===n)return u}return null}function Ot(t,e,r,n,i,s){let o=Qv(t,e,n),a=eS(t,i);return {ok:false,error:t,message:rS(t),...a?{email_hash:a}:{},organization:Mp(e),workspace:Lp(r),open_target:o,next_steps:tS(t,o),...s}}function Qv(t,e,r){if(e){if(t==="free_plan_invites_disabled"||t==="invite_blocked_billing"||t==="billing_update_failed")return {kind:"web",url:ee(e,r,"billing"),label:"Open billing in Pathrule Web",reason:"fallback"};if(t==="subscription_not_invitable"||t==="subscription_frozen")return {kind:"web",url:`${ee(e,r,"billing")}/reactivate`,label:"Open billing reactivation in Pathrule Web",reason:"fallback"};if(t==="paid_seats_required"||t==="seat_limit_reached")return {kind:"web",url:ee(e,r,"billing"),label:"Open billing in Pathrule Web",reason:"fallback"};if(t==="forbidden"||t==="permission_denied"||t==="already_member"||t==="email_already_member"||t==="invite_pending")return {kind:"web",url:ee(e,r,"members"),label:"Open team in Pathrule Web",reason:"fallback"}}}function eS(t,e){if(e&&!(t!=="rate_limited"&&t!=="invite_resent_cooldown_hit"&&t!=="invite_declined_cooldown"))return createHash("sha256").update(e.trim().toLowerCase()).digest("hex")}function tS(t,e){if(t==="not_authenticated"||t==="session_expired_security_epoch")return [{label:"Sign in again",command:"pathrule login"}];if(t==="org_required")return [{label:"Choose an organization",command:"pathrule org use <slug-or-id>"}];if(t==="workspace_not_found")return [{label:"List workspaces",command:"pathrule workspace list"}];if(t==="rate_limited"||t==="invite_resent_cooldown_hit"||t==="invite_declined_cooldown")return [{label:"Retry later"}];if(e)return [{label:e.label,url:e.url}]}function rS(t){switch(t){case "invalid_email":return "Enter a valid email address.";case "invalid_role":return "Role must be admin, editor, or viewer.";case "not_authenticated":return "Pathrule CLI is not signed in.";case "session_expired_security_epoch":return "Your session is stale after a security change. Sign in again.";case "org_required":return "No organization is selected.";case "workspace_not_found":return "Workspace context not found for that organization.";case "forbidden":case "permission_denied":return "Your current role cannot invite teammates to this organization.";case "free_plan_invites_disabled":return "Invites require a paid Pathrule organization plan.";case "subscription_not_invitable":case "subscription_frozen":return "Invites are blocked until billing is reactivated.";case "paid_seats_required":case "seat_limit_reached":return "Pathrule could not automatically add paid seat coverage for this invite.";case "billing_update_failed":return "Billing could not be updated for this invite. Review billing before sending it.";case "rate_limited":return "Rate limit reached, try again later.";case "invite_resent_cooldown_hit":case "invite_declined_cooldown":return "Please wait before inviting this email again.";case "already_member":case "email_already_member":return "That email is already a member of this organization.";case "invite_pending":return "There is already a pending invite for this email.";case "organization_not_found":return "Organization not found.";default:return t.replace(/_/g," ")}}async function nS(t,e,r,n){if(!r.billingRequirement)return {ok:true,adjustment:{status:r.billingImpact.seat_effect==="paid_extra_available"?"already_covered":"not_needed",target_seats:r.billingImpact.target_active_seats,required_paid_extra_seats:r.billingImpact.required_paid_extra_seats,paid_extra_seats_after:r.billingImpact.current_paid_extra_seats}};let i=r.billingRequirement,s={target_seats:i.targetSeats,required_paid_extra_seats:i.requiredPaidExtraSeats,gift_seat_cap:i.giftSeatCap,current_paid_extra_seats:i.currentPaidExtraSeats},o=null;try{let{data:a,error:l}=await t.functions.invoke("start-paid-seat-checkout",{body:{org_id:e,target_seats:i.targetSeats,return_url_origin:iS(n)}});if(l)return {ok:!1,error:"billing_update_failed",details:s};o=a;}catch{return {ok:false,error:"billing_update_failed",details:s}}return o?.ok?o.url?{ok:false,error:"paid_seats_required",details:s}:{ok:true,adjustment:{status:o.updated?"updated":"already_covered",target_seats:i.targetSeats,required_paid_extra_seats:i.requiredPaidExtraSeats,paid_extra_seats_after:o.paid_extra_seats}}:{ok:false,error:o?.error??"billing_update_failed",details:s}}function iS(t){return (t.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}function sS(t){let e=t?.trim().toLowerCase();if(!e||e==="member")return "editor";if(e==="admin"||e==="editor"||e==="viewer")return e;throw new Te("invalid_invite_role",`Invalid invite role "${t}".`)}function jp(t,e,r){if(!t)throw new Te(r,e);return t}async function oS(t,e){let[r,n]=await Promise.all([t.from("organizations").select("plan, subscription_status, trial_status, trial_seat_cap, paid_extra_seats").eq("id",e).maybeSingle(),t.from("organization_members").select("id",{count:"exact",head:true}).eq("organization_id",e)]);if(r.error)throw r.error;if(n.error)throw n.error;let i=Rl(r.data,n.count??0);return {failure:i.failure?{error:i.failure.error}:null,billingImpact:i.billingImpact,billingRequirement:i.billingRequirement}}Ee();F();var $t=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="CliRefreshError";}code};async function gn(t,e={}){let r=await ji(t),n=await ha(t,r.id),i=await el(n,{workspace_id:r.id,include_in_progress:e.includeInProgress});if(!i.ok)throw ga(i.error);return i.data.slice(0,cS(e.limit)).map(s=>Up(s,r.id,t))}async function ua(t,e,r={}){let n=await ji(t),i=e??await lS(t),s=await ha(t,n.id),o=await tl(s,{refresh_id:i,claimed_by:r.claimedBy??"codex"});if(!o.ok)throw ga(o.error);return Wp(o.data,t)}async function da(t,e,r,n={}){await ji(t);let i=await ha(t),s=await rl(i,{refresh_id:e,status:r,note:n.note,claimed_by:n.claimedBy??"codex"});if(!s.ok)throw ga(s.error);return Wp(s.data,t)}async function pa(t,e){let r=await ji(t);if(!e){let l=(await gn(t,{includeInProgress:true,limit:1}))[0];if(!l)throw new $t("refresh_not_found","No pending refresh tasks found.");return l}let{supabase:n}=await C(t),{data:i,error:s}=await n.from("suggestion_refreshes").select("id, workspace_id, subject_type, subject_id, formula_id, status, created_at, brief").eq("id",e).eq("workspace_id",r.id).maybeSingle();if(s)throw s;if(!i)throw new $t("refresh_not_found",`Refresh ${e} not found.`);let o=i,a=o.brief??{};return Up({id:o.id,subjectType:o.subject_type,subjectId:o.subject_id,subjectTitle:a.subject?.title??"(unknown)",nodePath:a.subject?.nodePath??"/",formulaId:o.formula_id,humanReason:a.signal?.humanReason??o.formula_id,status:o.status,createdAt:o.created_at,hasProposedPatch:!!a.proposedPatch?.newBody},r.id,t)}function Di(t,e={}){let r=t.open_targets.find(n=>n.kind==="web")??{kind:"web",url:t.url,label:"Open refresh task in Pathrule Web",reason:"preferred"};if(e.forceWeb)return {...r,reason:"forced"};if(e.preferDesktopApp){let n=t.open_targets.find(i=>i.kind==="desktop-app");return n||{...r,reason:"fallback"}}return t.open_targets[0]??r}function fa(t,e,r){return `${(r.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}/workspace/${encodeURIComponent(t)}?tab=suggestions&refresh=${encodeURIComponent(e)}`}function aS(t,e){return `pathrule://workspace/${encodeURIComponent(t)}/refresh/${encodeURIComponent(e)}`}async function lS(t){let e=(await gn(t,{limit:1}))[0];if(!e)throw new $t("refresh_not_found","No pending refresh tasks found.");return e.id}async function ji(t){let e=await M(t);if(!e)throw new $t("workspace_required","No current workspace. Run pathrule workspace use <name-or-id>.");return e}async function ha(t,e=null){let{session:r,supabase:n}=await C(t);return {supabase:n,userId:r.user.id,workspaceId:e,clientId:"codex"}}function Up(t,e,r){let n=fa(e,t.id,r);return {...t,workspace_id:e,url:n,open_targets:[Bp(e,t.id,r),Fp(e,t.id)]}}function Wp(t,e){return {...t,url:fa(t.workspaceId,t.id,e),open_targets:[Bp(t.workspaceId,t.id,e),Fp(t.workspaceId,t.id)]}}function Bp(t,e,r){return {kind:"web",url:fa(t,e,r),label:"Open refresh task in Pathrule Web",reason:"preferred"}}function Fp(t,e){return {kind:"desktop-app",url:aS(t,e),label:"Open refresh task in Pathrule Desktop",reason:"fallback"}}function cS(t){return !t||!Number.isFinite(t)?20:Math.min(Math.max(Math.trunc(t),1),100)}function ga(t){return new $t(t.code,t.message)}K();K();var yS=promisify(execFile),kS=1440*60*1e3;function Hp(t,e=process.env){return join(A(e).home,"cache",t,"bootstrap-v2-brief.json")}async function qp(t){let e=Hp(t.workspaceId,t.env),r=t.now??new Date;try{let[n,i,s]=await Promise.all([readFile(e,"utf8"),stat(e),zp(t.localRootPath)]);if(r.getTime()-i.mtimeMs>kS)return {ok:!1,brief:null,cachePath:e,reason:"expired"};let o=JSON.parse(n);return o.schemaVersion!==1||o.workspaceId!==t.workspaceId||o.localRootPath!==t.localRootPath||o.brief.version!==2?{ok:!1,brief:null,cachePath:e,reason:"mismatch"}:o.gitHead!==s?{ok:!1,brief:null,cachePath:e,reason:"git_head_changed"}:{ok:!0,brief:o.brief,cachePath:e}}catch{return {ok:false,brief:null,cachePath:e,reason:"missing"}}}async function ma(t){let e=Hp(t.workspaceId,t.env),r={schemaVersion:1,workspaceId:t.workspaceId,localRootPath:t.localRootPath,gitHead:await zp(t.localRootPath),cachedAt:new Date().toISOString(),brief:t.brief};await mkdir(dirname(e),{recursive:true});let n=`${e}.tmp`;return await writeFile(n,`${JSON.stringify(r,null,2)}
185
- `,{encoding:"utf8",mode:O}),await rename(n,e),{cachePath:e}}async function zp(t){try{let{stdout:e}=await yS("git",["rev-parse","HEAD"],{cwd:t,timeout:1e3});return e.trim()||null}catch{return null}}var bS=/\b(?:packages|apps|src|docs|supabase|types|scripts|config|public|tests?)\/[A-Za-z0-9._/-]+/g;function Nt(t,e="/"){if(!t)return e;let r=t.trim().replace(/\\/g,"/").replace(/^\/+/,"").replace(/\/+$/,"");return !r||r==="."?e:`/${r}`}function fr(t){let e=Nt(t),r=e.replace(/^\/+/,"");return r.includes("/")?Nt(r.slice(0,r.lastIndexOf("/"))):e}function Jp(t){let e=new Set;for(let r of t.matchAll(bS)){let n=r[0].replace(/[),.;:]+$/,"");n.length>2&&e.add(n);}return [...e].slice(0,20)}function _a(t,e){let r=t.find(Boolean);return r?fr(r):e}function Kp(t,e){let r=new Set,n=[];for(let i of t){let s=Nt(i);if(!r.has(s)&&(r.add(s),n.push(s),n.length>=e))break}return n}var wa=200,ES=1024*1024,RS=8*1024*1024,xS=new Set([".git","node_modules","dist","build","coverage","vendor","archive","archived",".next",".turbo"]),Xp=/\b(setup|development|architecture|testing|security|release|deploy|contributing|conventions?|workflow|migration)\b/i,PS=/\b(must|never|always|required|before merging|run|do not|don't|avoid|ensure)\b/gi,TS=/\b(pnpm|npm|bun|yarn|supabase|vercel|gh|electron-builder|vitest|tsx|tsc)\b/g;async function Zp(t){let e=[],r=await AS(t,e),n=[],i=0;for(let a of r){if(i>=RS){e.push("Documentation scan reached the 8 MB budget.");break}let l=await stat(join(t,a)).catch(()=>null);if(!l||l.size>ES)continue;i+=l.size;let c=await readFile(join(t,a),"utf8").catch(()=>"");if(c.trim())for(let u of OS(c)){let d=$S(a,u);d&&n.push(d);}}let s=n.sort((a,l)=>Gp(l)-Gp(a)).slice(0,40),o=new Set(s.flatMap(a=>a.pathMentions)).size;return {findings:s,candidateMemories:jS(s),candidateRules:MS(s),docsFilesScanned:r.length,filesMentionedByDocs:o,warnings:e}}async function AS(t,e){let r=[];return await n(t,""),r.sort((i,s)=>Vp(i)-Vp(s)).slice(0,wa);async function n(i,s){if(r.length>=wa)return;let o=await readdir(i,{withFileTypes:true}).catch(()=>[]);for(let a of o){if(r.length>=wa){e.push("Documentation scan reached the 200 file budget.");return}let l=s?`${s}/${a.name}`:a.name;if(a.isDirectory()){if(xS.has(a.name))continue;await n(join(i,a.name),l);continue}a.isFile()&&IS(l)&&r.push(l);}}}function IS(t){let e=basename(t).toLowerCase();return e==="readme.md"||/^readme\..+\.md$/.test(e)||e==="contributing.md"?true:t.startsWith("docs/")&&/\.(md|mdx)$/i.test(t)}function Vp(t){let e=basename(t).toLowerCase();return e==="readme.md"?0:e==="contributing.md"?1:t.startsWith("docs/")?2:3}function OS(t){let e=t.split(/\r?\n/),r=[],n={body:""};for(let i of e){let s=i.match(/^(#{1,4})\s+(.+?)\s*#*\s*$/);s?(n.body.trim()&&r.push(n),n={heading:s[2],body:""}):n.body+=`${i}
186
- `;}return n.body.trim()&&r.push(n),r}function $S(t,e){let r=`${e.heading??""}
187
- ${e.body}`.trim();if(NS(e.heading,r))return null;let n=[...r.matchAll(PS)].length,i=Jp(r),s=[...new Set([...r.matchAll(TS)].map(a=>a[0]))].slice(0,8);return !(e.heading?Xp.test(e.heading):false)&&n===0&&i.length===0&&s.length===0?null:{path:t,heading:e.heading,kind:DS(e.heading??r),summary:LS(r),pathMentions:i,commandMentions:s,imperativeScore:n,excerpt:US(r)}}function NS(t,e){let r=`${t??""} ${e.slice(0,200)}`.toLowerCase();return /\b(changelog|release notes|history)\b/.test(r)&&/\b\d{4}-\d{2}-\d{2}\b/.test(r)}function DS(t){let e=t.toLowerCase();return e.includes("security")?"security":e.includes("test")?"testing":e.includes("release")||e.includes("deploy")?"release":e.includes("architecture")?"architecture":e.includes("setup")||e.includes("development")||e.includes("contributing")?"workflow":"convention"}function jS(t){return t.filter(e=>e.kind==="architecture"||e.kind==="workflow"||e.pathMentions.length>0).slice(0,18).map(e=>{let r=_a(e.pathMentions,fr(e.path));return {title:Qp("Project note",e),bodyGuidance:`Write a concise memory summarizing ${e.summary}. Include the relevant paths and commands, but do not paste the source document verbatim.`,nodePath:r,confidence:tf(.55+e.pathMentions.length*.03+e.commandMentions.length*.02),evidence:[ef(e)]}})}function MS(t){return t.filter(e=>e.imperativeScore>0||e.kind==="security"||e.kind==="testing").slice(0,12).map(e=>({title:Qp("Rule",e),bodyGuidance:`Write a rule from the documented requirement: ${e.summary}. Keep it imperative and scoped to the most specific path.`,nodePath:_a(e.pathMentions,Nt(e.kind==="security"?"/":fr(e.path))),confidence:tf(.62+e.imperativeScore*.04),evidence:[ef(e)]}))}function Qp(t,e){let r=e.heading||e.summary;return `${t}: ${r.replace(/[`*_#]/g,"").slice(0,80)}`}function ef(t){return {kind:"doc",path:t.path,heading:t.heading,excerpt:t.excerpt}}function Gp(t){return t.imperativeScore*3+t.pathMentions.length*2+t.commandMentions.length+(t.heading&&Xp.test(t.heading)?8:0)}function LS(t){return t.replace(/\s+/g," ").replace(/[`*_#>-]/g,"").trim().slice(0,220)}function US(t){return t.replace(/\s+/g," ").trim().slice(0,280)}function tf(t){return Math.max(0,Math.min(1,Number(t.toFixed(2))))}var WS=/\b(fix|bug|regression|hotfix|breaking|break|migration|schema|refactor|rewrite|cleanup)\b/i,nf=/\b(breaking|break|migration|schema)\b/i,BS=/\b(fix|bug|regression|hotfix)\b/i,FS=/\b(refactor|rewrite|cleanup)\b/i;function sf(t){let e=HS(t),r=new Map;for(let i of e){let s=nf.test(i.subject)?"breaking":BS.test(i.subject)?"fix":FS.test(i.subject)?"refactor":null;if(!s)continue;let o=new Set;for(let a of i.files){o.add(Nt(a)),o.add(fr(a));let l=qS(a);l&&o.add(l);}for(let a of o){let l=r.get(a)??{path:a,fix:0,breaking:0,refactor:0,commits:new Map};l.commits.set(i.hash,i),s==="fix"&&(l.fix+=1),s==="breaking"&&(l.breaking+=1),s==="refactor"&&(l.refactor+=1),r.set(a,l);}}return {findings:[...r.values()].filter(i=>i.commits.size>=3||i.breaking>=1).sort((i,s)=>rf(s)-rf(i)).slice(0,15).map(zS),commitsScanned:e.length}}function HS(t){let e=[];for(let r of t.split("")){let n=r.split(/\r?\n/).map(c=>c.trim()).filter(Boolean),i=n[0];if(!i)continue;let[s,o,a]=i.split("");if(!s||!o||!a||!WS.test(a)||/^merge\b/i.test(a))continue;let l=n.slice(1).filter(c=>!c.includes(" => "));l.length<1||l.length>30&&!nf.test(a)||e.push({hash:s,date:o,subject:a,files:l});}return e}function qS(t){let e=t.split("/");return (e[0]==="packages"||e[0]==="apps")&&e[1]?`/${e[0]}/${e[1]}`:e[0]==="supabase"&&e[1]?`/supabase/${e[1]}`:null}function rf(t){return t.fix*3+t.breaking*5+t.refactor*2+t.commits.size}function zS(t){let e=[...t.commits.values()].sort((i,s)=>s.date.localeCompare(i.date)),r=e[0],n=e.slice(0,4).map(i=>({kind:"commit",commit:i.hash.slice(0,12),path:t.path,excerpt:`${i.date} ${i.subject}`}));return {path:t.path,summary:`${t.path} has ${t.fix} fix, ${t.breaking} breaking/schema, and ${t.refactor} refactor commits in recent history.`,fixCount:t.fix,breakingCount:t.breaking,refactorCount:t.refactor,uniqueCommits:t.commits.size,latestDate:r?.date,evidence:n}}var lf=promisify(execFile);async function cf(t){let e=t.now??new Date;if(!t.force){let r=await qp({workspaceId:t.workspaceId,localRootPath:t.localRootPath,env:t.env,now:e});if(r.ok&&r.brief)return {ok:true,brief:r.brief,cachePath:r.cachePath,reusedCache:true}}try{let r=await nC(XS(t,e),t.timeoutMs??3e4),n=await ma({workspaceId:t.workspaceId,localRootPath:t.localRootPath,brief:r,env:t.env});return {ok:!0,brief:r,cachePath:n.cachePath,reusedCache:!1}}catch(r){let n=rC(t,e,r instanceof Error?r.message:String(r)),i=await ma({workspaceId:t.workspaceId,localRootPath:t.localRootPath,brief:n,env:t.env}).catch(()=>({cachePath:null}));return {ok:false,brief:n,cachePath:i.cachePath,reusedCache:false,error:n.warnings[0]}}}async function XS(t,e){let r=[],[n,i,s,o,a]=await Promise.all([ZS(t.supabase,t.workspaceId),Zp(t.localRootPath),QS(t.localRootPath,r),tC(t.localRootPath,r),eC(t.localRootPath,r)]);r.push(...i.warnings);let l=sf(s),c=a?fs(a):[],u=ps(o).map(w=>({title:w.title,summary:w.content})),d=u.map(w=>({title:w.title,bodyGuidance:`Write a short memory noting that ${w.summary.toLowerCase()}`,nodePath:"/",confidence:.72,evidence:[{kind:"stack",excerpt:w.summary}]})),p=l.findings.map(w=>({title:`Risk hotspot: ${w.path}`,bodyGuidance:`Write a memory explaining the risk pattern for ${w.path}: ${w.summary} Include the kinds of changes that should be reviewed together.`,nodePath:w.path,confidence:Math.min(.95,.6+w.uniqueCommits*.04+w.breakingCount*.08),evidence:w.evidence})),f=of([...i.candidateMemories,...p,...d]),h=of(i.candidateRules);f=af(f,n.titles).slice(0,15),h=af(h,n.titles).slice(0,8);let m=n.memoryCount+n.ruleCount>=8;m&&(f=[],h=[],r.push("Workspace already has meaningful setup content; Bootstrap v2 will avoid duplicate starter guidance."));let _=Kp([...h.map(w=>w.nodePath),...f.map(w=>w.nodePath),...i.findings.flatMap(w=>[w.path,...w.pathMentions]),...l.findings.map(w=>w.path)],20),b=m?"Bootstrap v2 found existing Pathrule setup content. Use pathrule_get_context for task-specific context instead of writing duplicate starter memories or rules.":`Bootstrap v2 prepared ${f.length} memory candidates and ${h.length} rule candidates from ${i.docsFilesScanned} docs files and ${l.commitsScanned} risky commits.`;return {version:2,workspaceId:t.workspaceId,localRootPath:t.localRootPath,generatedAt:e.toISOString(),summary:b,stackSignals:u,documentationFindings:i.findings,commitWisdom:l.findings,candidateMemories:f,candidateRules:h,candidateSkills:[],suggestedOrder:_,coverage:{docsFilesScanned:i.docsFilesScanned,commitsScanned:l.commitsScanned,filesMentionedByDocs:i.filesMentionedByDocs,coChangePairsAvailable:c.length},warnings:r,alreadyBootstrapped:m}}async function ZS(t,e){if(!t)return {memoryCount:0,ruleCount:0,skillCount:0,titles:new Set};let[r,n,i]=await Promise.all([t.from("memories").select("title",{count:"exact"}).eq("workspace_id",e).limit(200),t.from("rules").select("name",{count:"exact"}).eq("workspace_id",e).limit(200),t.from("skills").select("name",{count:"exact"}).eq("workspace_id",e).limit(50)]),s=new Set;for(let o of r.data??[])o.title&&s.add(mn(o.title));for(let o of n.data??[])o.name&&s.add(mn(o.name));for(let o of i.data??[])o.name&&s.add(mn(o.name));return {memoryCount:r.count??s.size,ruleCount:n.count??0,skillCount:i.count??0,titles:s}}async function QS(t,e){try{let{stdout:r}=await lf("git",["log","--date=short","--format=%x1e%H%x1f%ad%x1f%s","--name-only","-n","5000"],{cwd:t,maxBuffer:52428800,timeout:2e4});return r}catch{return e.push("Git commit wisdom skipped; repository history was unavailable."),""}}async function eC(t,e){try{let{stdout:r}=await lf("git",["log","--name-only","--pretty=format:---","-n","10000"],{cwd:t,maxBuffer:52428800,timeout:2e4});return r}catch{return e.push("Git co-change scan skipped; repository history was unavailable."),""}}async function tC(t,e){let r=[];async function n(i,s){if(s>4||r.length>5e3)return;let o=await readdir(i,{withFileTypes:true}).catch(()=>[]);for(let a of o){if(a.name===".git"||a.name==="node_modules"||a.name==="dist")continue;let l=join(i,a.name);a.isDirectory()?await n(l,s+1):a.isFile()&&r.push(relative(t,l).replace(/\\/g,"/"));}}return await n(t,0).catch(()=>e.push("Stack detection skipped; file tree was unavailable.")),r}function of(t){let e=new Map;for(let r of t){let n=`${r.nodePath}:${mn(r.title)}`,i=e.get(n);(!i||r.confidence>i.confidence)&&e.set(n,r);}return [...e.values()].sort((r,n)=>n.confidence-r.confidence)}function af(t,e){return t.filter(r=>!e.has(mn(r.title)))}function mn(t){return t.toLocaleLowerCase("en-US").replace(/[^a-z0-9]+/g," ").trim()}function rC(t,e,r){return {version:2,workspaceId:t.workspaceId,localRootPath:t.localRootPath,generatedAt:e.toISOString(),summary:"Bootstrap v2 could not complete the local scan. Use the fallback setup prompt.",stackSignals:[],documentationFindings:[],commitWisdom:[],candidateMemories:[],candidateRules:[],candidateSkills:[],suggestedOrder:[],coverage:{docsFilesScanned:0,commitsScanned:0,filesMentionedByDocs:0,coChangePairsAvailable:0},warnings:[r]}}function nC(t,e){return new Promise((r,n)=>{let i=setTimeout(()=>n(new Error("Bootstrap v2 scan timed out.")),e);t.then(s=>{clearTimeout(i),r(s);},s=>{clearTimeout(i),n(s);});})}F();K();li();F();async function pf(t,e,r=fetch){if(!e.gitRemoteUrl)return {status:"skipped",error:"missing_git_remote"};try{let{session:n,supabase:i}=await C(t),{data:s,error:o}=await i.from("beta_platform_invites").select("id").eq("claimed_user_id",n.user.id).eq("status","claimed").order("claimed_at",{ascending:!1}).limit(1);if(o)return {status:"skipped",error:"invite_lookup_unavailable"};let a=(s??[])[0]??null;if(!a)return {status:"skipped",error:"no_claimed_beta_invite"};let l=pe(t),c=await dC(t),u=await r(`${l.supabaseUrl}/functions/v1/process-beta-activation`,{method:"POST",headers:{"content-type":"application/json",apikey:l.supabaseAnonKey,Authorization:`Bearer ${n.access_token}`},body:JSON.stringify({invite_id:a.id,workspace_id:e.workspaceId,git_remote_url:e.gitRemoteUrl,machine_id:c,runtime_source:e.runtimeSource})}),d=await u.json().catch(()=>null);return !u.ok||!d?.status?{status:"skipped",error:"activation_unavailable"}:{status:d.status,credit_cents:df(d.credit_cents),founder_bonus_cents:df(d.founder_bonus_cents)}}catch{return {status:"skipped",error:"activation_unavailable"}}}async function dC(t){let e=join(A(t).home,"machine-install.json");try{let n=JSON.parse(await readFile(e,"utf8"));if(typeof n.machine_id=="string"&&n.machine_id.length>=16)return n.machine_id}catch{}let r=`cli_${randomUUID()}`;return await pC(e,{schema_version:1,machine_id:r}),r}async function pC(t,e){let r=dirname(t);await mkdir(r,{recursive:true,mode:j}),await chmod(r,j).catch(()=>{});let n=`${t}.tmp`;await writeFile(n,JSON.stringify(e,null,2),{encoding:"utf8",mode:O}),await chmod(n,O).catch(()=>{}),await rename(n,t);}function df(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}Ee();var _C=promisify(execFile);async function Mi(t,e){let r=await D(e);if(!r)return {cwd:t,organization:null,candidates:[],recommended_action:"select_org"};let[n,i,s]=await Promise.all([Re(e),kf(t),vC(t,e)]),o=kC(t,r,n,i,s);return {cwd:t,organization:r,candidates:o,recommended_action:o.length===0?"create_workspace":o[0]?.confidence==="exact"||o[0]?.confidence==="high"?"attach_existing":"choose_workspace"}}async function hr(t,e,r,n={yes:false}){let i=yC(t);if(!i.shouldApply)return {plan:await Mi(e,r),applied:false,org_selected:null,workspace_action:"none",workspace:null,install:null,sync:null,beta_activation:null,bootstrap_v2:null};if(i.bootstrapRerun){let h=await M(r);if(!h?.id)throw new Error("workspace_required");let m=await gf(h.id,e,r,true);return {plan:await Mi(e,r),applied:true,org_selected:null,workspace_action:"none",workspace:h,install:null,sync:null,beta_activation:null,bootstrap_v2:m}}if(!n.yes)throw new Error("setup_requires_yes");let s=null;if(i.org){let{useCliOrg:h}=await Promise.resolve().then(()=>(Ee(),Du));s=(await h(i.org,r)).id;}let o=await Mi(e,r),a="none",l=null;if(i.createWorkspace){let h=await ae("create_workspace",r);if(!h.allowed)throw new Error(h.blocking_reason??"preflight_blocked");l=await bt(i.workspaceName??basename(e),e,r),a="created";}else i.workspaceSelector?(l=await xe(i.workspaceSelector,e,r),a="attached"):o.recommended_action==="attach_existing"&&o.candidates[0]?(l=await xe(o.candidates[0].workspace_id,e,r),a="attached"):i.selectCurrentWorkspace&&(l=await Zr(i.selectCurrentWorkspace,r),a="selected");o=await Mi(e,r);let c=i.target?await Ze(i.target,r):null,u=a==="attached"||a==="created"?await Le(r,e):null,d=wC(l),p=u?.ok&&d&&(a==="attached"||a==="created")?await gf(d,e,r,false):null,f=u?.ok&&(a==="attached"||a==="created")?await pf(r,{workspaceId:d,gitRemoteUrl:await kf(e),runtimeSource:"cli"}):null;return {plan:o,applied:true,org_selected:s,workspace_action:a,workspace:l,install:c,sync:u,beta_activation:f,bootstrap_v2:p}}async function gf(t,e,r,n){let{supabase:i}=await C(r),s=await cf({workspaceId:t,localRootPath:e,supabase:i,env:r,force:n});return {ok:s.ok,reused_cache:s.reusedCache,cache_path:s.cachePath,candidate_counts:{memories:s.brief.candidateMemories.length,rules:s.brief.candidateRules.length,skills:s.brief.candidateSkills.length},coverage:s.brief.coverage,summary:s.brief.summary,warnings:s.brief.warnings}}function wC(t){if(!t||typeof t!="object")return null;let e=t.id;if(typeof e=="string")return e;let r=t.workspace?.id;return typeof r=="string"?r:null}function yC(t){let e={org:null,workspaceSelector:null,workspaceName:null,createWorkspace:false,selectCurrentWorkspace:null,target:null,bootstrapRerun:false},r=false,n=false;for(let i=0;i<t.length;i+=1){let s=t[i],o=()=>{let a=t[i+1];if(!a||a.startsWith("--"))throw new Error(`missing_value:${s}`);return i+=1,a};if(s==="bootstrap"){if(r)throw new Error("unknown_setup_option:bootstrap");r=true;}else if(s==="--rerun"&&r)n=true;else if(s==="--org")e.org=o();else if(s==="--workspace"||s==="--workspace-id")e.workspaceSelector=o();else if(s==="--workspace-name")e.workspaceName=o();else if(s==="--create-workspace")e.createWorkspace=true;else if(s==="--select-workspace")e.selectCurrentWorkspace=o();else if(s==="--target")e.target=o();else throw new Error(`unknown_setup_option:${s}`)}if(r&&!n)throw new Error("missing_value:--rerun");return e.bootstrapRerun=r&&n,{...e,shouldApply:e.org!==null||e.workspaceSelector!==null||e.workspaceName!==null||e.createWorkspace||e.selectCurrentWorkspace!==null||e.target!==null||e.bootstrapRerun}}function kC(t,e,r,n,i){let s=wf(basename(t)),o=[],a=new Set,l=c=>{a.has(c.workspace_id)||(a.add(c.workspace_id),o.push(c));};for(let c of r){if(c.local_root_path===t){l(_n("cwd_mapping",c,e,"exact",false,"Exact local path mapping."));continue}if(n&&bC(c,n)){l(_n("git_remote",c,e,"high",true,"Git remote matches workspace metadata."));continue}if(i.has(c.id)){l(_n("hook_cache",c,e,"high",true,"Existing hook cache points at this folder."));continue}let u=wf(c.name);if(u===s){l(_n("name_match",c,e,"medium",true,"Folder name matches workspace name."));continue}SC(u,s)&&l(_n("name_match",c,e,"low",true,"Folder name is similar to workspace name."));}return o.sort((c,u)=>{let d=mf(u.confidence)-mf(c.confidence);return d!==0?d:_f(u.source)-_f(c.source)}),o.map((c,u)=>({...c,recommended:u===0}))}function _n(t,e,r,n,i,s){return {source:t,workspace_id:e.id,workspace_name:e.name,org_id:r.id,org_name:r.name,org_slug:r.slug,confidence:n,recommended:false,requires_confirmation:i,reason:s}}function mf(t){return {exact:4,high:3,medium:2,low:1}[t]}function _f(t){return {cwd_mapping:6,git_remote:5,hook_cache:4,companion_file:3,name_match:2,manual:1}[t]}function bC(t,e){let r=t;return r.git_remote_url&&ka(r.git_remote_url)===ka(e)?true:!r.git_owner||!r.git_repo?false:ka(e).endsWith(`/${r.git_owner}/${r.git_repo}`.toLocaleLowerCase("en-US"))}async function kf(t){try{let{stdout:e}=await _C("git",["config","--get","remote.origin.url"],{cwd:t,timeout:1e3});return e.trim()||null}catch{return null}}function ka(t){return t.trim().replace(/^git@([^:]+):/,"https://$1/").replace(/^https?:\/\//,"").replace(/\.git$/,"").toLocaleLowerCase("en-US")}async function vC(t,e){let r=new Set,n=join(A(e).home,"cache"),i;try{i=await readdir(n);}catch{return r}let s=resolve(t);return await Promise.all(i.map(async o=>{try{let a=await readFile(join(n,o,"hook-index.json"),"utf8"),l=JSON.parse(a);if(!l.workspace_id||!l.workspace_root)return;let c=resolve(l.workspace_root);(s===c||s.startsWith(`${c}/`))&&r.add(l.workspace_id);}catch{}})),r}function wf(t){return t.toLocaleLowerCase("en-US").replace(/[^a-z0-9]+/g," ").trim()}function SC(t,e){return !t||!e?false:t.includes(e)||e.includes(t)?true:CC(t,e)<=Math.max(2,Math.floor(Math.max(t.length,e.length)*.25))}function CC(t,e){let r=Array.from({length:e.length+1},(n,i)=>i);for(let n=1;n<=t.length;n+=1){let i=n,s=n-1;for(let o=1;o<=e.length;o+=1){let a=r[o]??0,l=t[n-1]===e[o-1]?0:1;r[o]=Math.min(a+1,i+1,s+l),i=r[o]??0,s=a;}r[0]=n;}return r[e.length]??0}F();Ee();async function ba(t,e){let r=await EC(t,e);if(!r)throw new Error("org_required");let{supabase:n}=await C(t),[i,s,o]=await Promise.all([n.from("organization_members").select("id, user_id, role, joined_at").eq("organization_id",r.id).order("joined_at",{ascending:true}),n.rpc("get_org_member_profiles",{p_org_id:r.id}),n.from("organization_invites").select("id, email, role, status, created_at, expires_at").eq("organization_id",r.id).eq("status","pending").order("created_at",{ascending:false})]);if(i.error)throw i.error;if(s.error)throw s.error;if(o.error)throw o.error;let a=new Map,l=s.data??[];for(let d of l)a.set(d.user_id,d);let c=(i.data??[]).map(d=>{let p=a.get(d.user_id);return {id:d.id,user_id:d.user_id,role:d.role,joined_at:d.joined_at,email:p?.email??null,full_name:yl(p?.full_name,"profile"),avatar_url:kl(p?.avatar_url),last_sign_in_at:p?.last_sign_in_at??null}}),u=(o.data??[]).map(d=>({id:d.id,email:d.email,role:d.role,status:d.status,created_at:d.created_at,expires_at:d.expires_at}));return {organization:{id:r.id,name:r.name,slug:r.slug,role:r.role},members:c,invites:u,open_target:{kind:"web",url:ee(r,t,"members"),label:"Open team in Pathrule Web",reason:"preferred"}}}async function EC(t,e){return e?(await we(t)).find(n=>n.id===e||n.slug===e)??null:D(t)}Ge();Gr();async function Li(t,e,r){let n=await kt("update.policy",e);if(n.key!=="update.policy")throw new Error("invalid_update_policy_state");let i=`${(e.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}/cli/versions.json`,s=e.PATHRULE_PROTOCOL_VERSION??fl;if(n.value==="manual")return {checked:false,policy:n.value,current_version:t,current_protocol_version:s,latest_version:null,min_supported_protocol_version:null,protocol_compatible:true,update_available:false,upgrade_command:null,reason:"manual_policy",url:i};try{let o=await r(i,{headers:{"user-agent":`pathrule-cli/${t}`}});if(!o.ok)throw new Error(`http_${o.status}`);let a=await o.json(),l=a.latest_version??a.latest??null,c=a.min_supported_protocol_version??null;return {checked:!0,policy:n.value,current_version:t,current_protocol_version:s,latest_version:l,min_supported_protocol_version:c,protocol_compatible:xC(s,c),update_available:l?l!==t:!1,upgrade_command:a.upgrade_command??RC(a.channels),url:i}}catch{return {checked:false,policy:n.value,current_version:t,current_protocol_version:s,latest_version:null,min_supported_protocol_version:null,protocol_compatible:true,update_available:false,upgrade_command:null,reason:"request_failed",url:i}}}async function vf(t,e,r){let n=await kt("update.policy",e);if(n.key!=="update.policy")throw new Error("invalid_update_policy_state");if(n.value==="manual")return null;let i=await Ce(e).catch(()=>null);if(!i)return null;let s=await ne(i.session.user.id,e);if(s.last_update_check_at){let l=new Date(s.last_update_check_at).getTime();if(Number.isFinite(l)&&Date.now()-l<1440*60*1e3)return null}await ie(i.session.user.id,{last_update_check_at:new Date().toISOString()},e);let o=await Li(t,e,r);if(!o.checked||!o.update_available)return null;let a=o.upgrade_command?` Run: ${o.upgrade_command}`:"";return `Pathrule CLI ${o.latest_version} is available.${a}`}function RC(t){return t?t.brew??t.npm??t.standalone??null:null}function xC(t,e){if(!e)return true;let r=bf(t),n=bf(e);return r&&n?PC(r,n)>=0:t===e}function bf(t){let e=t.match(/^v?(\d+)\.(\d+)\.(\d+)$/);return e?[Number(e[1]),Number(e[2]),Number(e[3])]:null}function PC(t,e){for(let r=0;r<3;r+=1){let n=(t[r]??0)-(e[r]??0);if(n!==0)return n}return 0}F();Ee();async function va(t){let{session:e,supabase:r}=await C(t.env),[n,i]=await Promise.all([D(t.env),M(t.env)]);if(!n)throw new Error("org_required");if(!i)throw new Error("workspace_required");let s=TC(n.plan),[o,a,l,c,u,d,p,f]=await Promise.all([AC(r,i.id),wn(r.from("nodes").select("id",{count:"exact",head:true}).eq("workspace_id",i.id)),wn(r.from("memories").select("id",{count:"exact",head:true}).eq("workspace_id",i.id)),wn(r.from("rules").select("id",{count:"exact",head:true}).eq("workspace_id",i.id)),wn(r.from("skills").select("id",{count:"exact",head:true}).eq("workspace_id",i.id)),wn(r.from("workspaces").select("id",{count:"exact",head:true}).eq("organization_id",n.id).is("archived_at",null)),IC(r,i.id),Pt(t.env,e.user.id,i.id,i.local_root_path)]);return {organization:{id:n.id,name:n.name,slug:n.slug,plan:s,role:n.role,subscription_status:n.subscription_status,trial_status:n.trial_status},workspace:i,local_status:{current_folder:t.cwd,attached_root:i.local_root_path,current_folder_attached:i.local_root_path===t.cwd,attached_elsewhere:i.local_root_path!==null&&i.local_root_path!==t.cwd},cloud_tree:{root_node_present:o,nodes:a,memories:l,rules:c,skills:u},capacity:{plan:s,workspaces:{used:d,limit:qe[s].workspaces},memories:{used:l,limit:qe[s].memories},rules:{used:c,limit:qe[s].rules}},active_clients:f.map(h=>$C(h)),recent_activity:p}}function TC(t){return Object.hasOwn(qe,t)?t:"free"}async function AC(t,e){let{data:r,error:n}=await t.from("nodes").select("id").eq("workspace_id",e).eq("relative_path","/").is("parent_id",null).maybeSingle();if(n)throw n;return !!r?.id}async function wn(t){let{count:e,error:r}=await t;if(r)throw new Error(r.message);return e??0}async function IC(t,e){let{data:r,error:n}=await t.from("activity_logs").select("created_at, domain, action, scope, node_path, task_summary, files_touched").eq("workspace_id",e).eq("status","active").order("created_at",{ascending:false}).limit(5);if(n)throw n;return (r??[]).map(i=>({created_at:String(i.created_at),domain:String(i.domain??"unknown"),action:String(i.action??"unknown"),scope:String(i.scope??"project"),node_path:String(i.node_path??"/"),task_summary:String(i.task_summary??""),files_touched_total:OC(i.files_touched)}))}function OC(t){if(!t||typeof t!="object")return 0;let e=t.total;return typeof e=="number"&&Number.isFinite(e)?e:0}function $C(t){let e=t.client;return {client:e,label:U[e]?.label??e,active:t.active,selected:t.selected,detected:t.markers.includes("workspace_marker_detected"),machine_installed:t.machineInstalled,machine_config_exists:t.machineConfigExists,machine_config_path:t.machineConfigPath}}var zC=createRequire(import.meta.url),Be=zC("../package.json"),Bi=promisify(execFile),X=class extends Error{constructor(r,n){super(n);this.code=r;this.name="CliContentUsageError";}code},JC=`${H.cli}
182
+ `;await mkdir(dirname(t),{recursive:true,mode:M}),await writeFile(t,s,{encoding:"utf8",mode:O}),await chmod(t,O).catch(()=>{});}async function zv(t){let e=Lp();await fe("launchctl",["bootout",e,t]).catch(()=>{}),await fe("launchctl",["bootstrap",e,t]),await fe("launchctl",["enable",`${e}/${gn}`]).catch(()=>{}),await fe("launchctl",["kickstart","-k",`${e}/${gn}`]).catch(()=>{});}async function Jv(t){await fe("launchctl",["bootout",Lp(),t]).catch(()=>{});}function Lp(){return `gui/${typeof process.getuid=="function"?process.getuid():0}`}async function Kv(){try{return await fe("schtasks.exe",["/Query","/TN","Pathrule CLI Daemon"]),!0}catch{return false}}async function Vv(t,e){let r=ca(e),n=Object.entries(r).map(([o,a])=>`set ${oa(o)}=${oa(a)}`).join("&&"),s=[t.command,...t.args].map(Yv).join(" "),i=n?`cmd.exe /d /c "${n}&&${s}"`:s;await fe("schtasks.exe",["/Create","/TN","Pathrule CLI Daemon","/TR",i,"/SC","ONLOGON","/F"]);}async function Gv(){await fe("schtasks.exe",["/Delete","/TN","Pathrule CLI Daemon","/F"]).catch(()=>{});}function cr(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&apos;")}function Tp(t){return `"${t.replace(/(["\\$`])/g,"\\$1")}"`}function Yv(t){return `"${oa(t)}"`}function oa(t){return t.replace(/(["^&|<>%])/g,"^$1")}async function Up(t,e={}){let r=null,n=new Map,s=new Map,i=createServer((l,c)=>{Qv(l,c,t,r,n,s);}),o=Xv(t);await new Promise((l,c)=>{i.once("error",c),i.listen(o.port,o.host,()=>{i.off("error",c),l();});});let a=i.address();if(!a||typeof a=="string")throw new Error("daemon_bind_failed");r={schema_version:1,pid:process.pid,host:dr,port:a.port,protocol_version:ia,daemon_session_id:randomUUID(),started_at:new Date().toISOString()},await tS(t,r),await hn(t,`listening ${dr}:${a.port}`),Ep(t).catch(l=>{hn(t,`work_state_trackers_start_failed error=${l instanceof Error?l.message:"unknown"}`);}),await new Promise(l=>{let c=false,u=()=>{c||(c=true,process.off("SIGTERM",u),process.off("SIGINT",u),e.shutdownSignal?.removeEventListener("abort",u),Rp(),i.close(()=>l()));};process.once("SIGTERM",u),process.once("SIGINT",u),e.shutdownSignal?.addEventListener("abort",u,{once:true});}),await unlink(A(t).daemonFile).catch(()=>{}),await hn(t,"stopped");}function Xv(t){let e=t.PATHRULE_DAEMON_HOST?.trim();if(e&&e!==dr&&e!=="localhost")throw new Error("daemon_host_must_be_loopback");let r=t.PATHRULE_DAEMON_PORT?.trim();if(!r)return {host:dr,port:0};let n=Number(r);if(!Number.isInteger(n)||n<0||n>65535)throw new Error("daemon_port_invalid");return {host:dr,port:n}}function Zv(t,e,r,n=Date.now()){let s=td({origin:e,ip:r,nowMs:n}),i=(t.get(s)??0)+1;return t.set(s,i),i<=Mv}async function Qv(t,e,r,n,s,i){let o=new URL(t.url??"/","http://127.0.0.1"),a=js(t.headers,"origin"),l=nS();if(t.method==="OPTIONS"){let d=To(a,l);if(!d){x(e,400,{ok:false,error:a?"origin_not_allowed":"origin_required"});return}e.writeHead(204,d),e.end();return}if(a&&!ys(a,l)){x(e,400,{ok:false,error:"origin_not_allowed"});return}if(a&&!Zv(i,a,sS(t))){x(e,429,{ok:false,error:"rate_limited"});return}let c=a?To(a,l)??void 0:void 0;if(t.method==="POST"&&o.pathname==="/hook/work-conflicts"&&!a)try{let d=await ur(t,8192),p=await Ap(r,{workspaceId:Ue(d,"workspace_id"),relativePaths:Np(d,"relative_paths")});x(e,200,p);return}catch(d){x(e,400,{ok:false,error:d instanceof Error?d.message:String(d)});return}if(t.method==="GET"&&o.pathname==="/v1/status"){let d=It(t,a,s);if(d&&n){let h=await Bp(r);x(e,200,{daemon_present:true,paired:true,daemon_version:Uv.version,protocol_version:ia,daemon_session_id:d.daemonSessionId,user_id:d.userId,paired_at:d.pairedAt,desktop_runtime_detected:h},c);return}let p=!a&&n?.daemon_session_id?n.daemon_session_id:null;x(e,200,ed(ia,{daemonSessionId:p}),c);return}if(t.method==="POST"&&o.pathname==="/v1/pair"){let d=Ct({headers:t.headers,allowedOrigins:l,requirePairToken:false});if(d){x(e,d.statusCode,{ok:false,error:d.reason},c);return}if(!n){x(e,503,{ok:false,error:"daemon_not_ready"},c);return}try{let p=await ur(t),h=Ue(p,"browser_profile_id"),f=await Xu({env:r,daemonSessionId:n.daemon_session_id,origin:a??"",pairCode:Ue(p,"pair_code"),pairVerifier:Ue(p,"pair_verifier"),browserProfileId:h});s.set(f.pair_token,{daemonSessionId:f.daemon_session_id,browserProfileId:h,origin:a??"",userId:f.user_id,pairedAt:new Date().toISOString()}),await hn(r,Op("bridge_paired",{origin:a??"",userId:f.user_id,browserProfileId:h})),x(e,200,f,c);return}catch(p){let h=p instanceof Y?p.code:"pair_failed",f=h==="pair_code_missing"||h==="pair_code_invalid"?401:h==="pair_code_expired"||h==="pair_code_stale"?410:h.endsWith("_required")?400:500;x(e,f,{ok:false,error:h},c);return}}if(t.method==="POST"&&o.pathname==="/v1/fs/read-dir"){let d=It(t,a,s),p=Ct({headers:t.headers,allowedOrigins:l});if(p){x(e,p.statusCode,{ok:false,error:p.reason},c);return}if(!d){x(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{let h=await ur(t),f=Ue(h,"workspace_root"),m=Ue(h,"relative_dir");await he(r,d.userId,f);let _=await qo(f,m);x(e,200,{entries:_},c);return}catch(h){x(e,400,{error:h instanceof Error?h.message:String(h)},c);return}}if(t.method==="POST"&&o.pathname==="/v1/fs/path-exists"){let d=It(t,a,s),p=Ct({headers:t.headers,allowedOrigins:l});if(p){x(e,p.statusCode,{ok:false,error:p.reason},c);return}if(!d){x(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{let h=await ur(t),f=Ue(h,"path");await he(r,d.userId,f);let m=await ua(f),_=m?await Wp(f):!1;x(e,200,{exists:m,isDirectory:_},c);return}catch(h){x(e,400,{error:h instanceof Error?h.message:String(h)},c);return}}if(t.method==="POST"&&o.pathname==="/v1/doctor"){let d=It(t,a,s),p=Ct({headers:t.headers,allowedOrigins:l});if(p){x(e,p.statusCode,{ok:false,error:p.reason},c);return}if(!d){x(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{await aa(r,d.userId);let h=await ur(t),f=$p(h,"workspace_root")??process.cwd(),m=await Me(r,f);x(e,200,{ok:m.ok,report:m},c);return}catch(h){x(e,400,{ok:false,error:h instanceof Error?h.message:String(h)},c);return}}let u=eS(o.pathname);if(t.method==="GET"&&u){let d=It(t,a,s);if(!d){x(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{let p=o.searchParams.get("workspace_root")?.trim()??"";if(!p)throw new Error("workspace_root_required");if(u.action==="local-status"){await Ip(e,r,d.userId,u.workspaceId,p,c);return}if(u.action==="agents-status"){await he(r,d.userId,p,u.workspaceId);let h=await Tt(r,d.userId,u.workspaceId,p);x(e,200,{ok:!0,statuses:h,ai_clients:h},c);return}if(u.action==="fs-read"){await he(r,d.userId,p,u.workspaceId);let h=await qo(p,o.searchParams.get("dir")??"/");x(e,200,{ok:!0,entries:h},c);return}}catch(p){x(e,400,{ok:false,error:p instanceof Error?p.message:String(p)},c);return}}if(t.method==="POST"&&u){let d=It(t,a,s),p=Ct({headers:t.headers,allowedOrigins:l});if(p){x(e,p.statusCode,{ok:false,error:p.reason},c);return}if(!d){x(e,401,{ok:false,error:"pair_token_invalid"},c);return}try{let h=await ur(t),f=Ue(h,"workspace_root");if(u.action==="local-status"){await Ip(e,r,d.userId,u.workspaceId,f,c);return}if(u.action==="attach"){await aa(r,d.userId);let m=await xe(u.workspaceId,f,r);x(e,200,{ok:!0,...m},c);return}if(u.action==="sync"){await he(r,d.userId,f,u.workspaceId);let m=await un(r,u.workspaceId,f);await na(u.workspaceId,f,r),await sa(u.workspaceId),x(e,m.ok?200:409,m,c);return}if(u.action==="repair"){await he(r,d.userId,f,u.workspaceId);let m=await dn(r,f);x(e,m.ok?200:409,m,c);return}if(u.action==="agents-status"){await he(r,d.userId,f,u.workspaceId);let m=await Tt(r,d.userId,u.workspaceId,f);x(e,200,{ok:!0,statuses:m,ai_clients:m},c);return}if(u.action==="agents-install"||u.action==="agents-uninstall"||u.action==="agents-set-enabled"){await he(r,d.userId,f,u.workspaceId);let m=u.action==="agents-set-enabled"?iS(h,"enabled"):u.action==="agents-install",_=await vp(r,d.userId,u.workspaceId,f,Ue(h,"client"),m,oS($p(h,"disable_mode")));x(e,_.ok?200:409,_,c);return}if(u.action==="hooks-sync"||u.action==="hook-index-rebuild"){await he(r,d.userId,f,u.workspaceId);let{supabase:m}=await S(r),_=await Ps({supabase:m,workspaceId:u.workspaceId,workspaceRoot:f,env:r});await na(u.workspaceId,f,r),await sa(u.workspaceId),x(e,_.ok?200:409,_,c);return}if(u.action==="work-conflicts"){await he(r,d.userId,f,u.workspaceId);let m=await Ap(r,{workspaceId:u.workspaceId,relativePaths:Np(h,"relative_paths")});x(e,200,{ok:!0,decision:m},c);return}if(u.action==="skills-materialize"){await he(r,d.userId,f,u.workspaceId);let m=await un(r,u.workspaceId,f,{skillsOnly:!0});x(e,m.ok?200:409,m,c);return}}catch(h){x(e,400,{ok:false,error:h instanceof Error?h.message:String(h)},c);return}}if(t.method==="POST"&&o.pathname==="/v1/unpair"){let d=Ct({headers:t.headers,allowedOrigins:l});if(d){x(e,d.statusCode,{ok:false,error:d.reason},c);return}let p=js(t.headers,ws),h=It(t,a,s);if(!p||!h){x(e,401,{ok:false,error:"pair_token_invalid"},c);return}s.delete(p),await hn(r,Op("bridge_unpaired",{origin:a??"",userId:h.userId,browserProfileId:h.browserProfileId})),x(e,200,{ok:true},c);return}x(e,404,{ok:false,error:"not_found"},c);}function It(t,e,r){let n=js(t.headers,ws);if(!n||!e)return null;let s=r.get(n);return !s||s.origin!==e||s.browserProfileId!==js(t.headers,Qu)?null:s}async function he(t,e,r,n){await aa(t,e);let{session:s,supabase:i}=await S(t),o=i.from("user_workspace_paths").select("workspace_id").eq("user_id",e).eq("local_root_path",r).limit(1);n&&(o=o.eq("workspace_id",n));let{data:a,error:l}=await o;if(l)throw l;if(!a||a.length===0)throw new Error("workspace_root_not_attached")}async function aa(t,e){let{session:r}=await S(t);if(r.user.id!==e)throw new Error("session_user_mismatch")}function eS(t){let e=/^\/v1\/workspaces\/([^/]+)\/(.+)$/.exec(t);if(!e)return null;let r=decodeURIComponent(e[1]??""),n=e[2]??"";return r?n==="local-status"?{workspaceId:r,action:"local-status"}:n==="fs"?{workspaceId:r,action:"fs-read"}:n==="attach"?{workspaceId:r,action:"attach"}:n==="sync"?{workspaceId:r,action:"sync"}:n==="repair"?{workspaceId:r,action:"repair"}:n==="agents/status"?{workspaceId:r,action:"agents-status"}:n==="agents/install"?{workspaceId:r,action:"agents-install"}:n==="agents/uninstall"?{workspaceId:r,action:"agents-uninstall"}:n==="agents/set-enabled"?{workspaceId:r,action:"agents-set-enabled"}:n==="hooks/sync"?{workspaceId:r,action:"hooks-sync"}:n==="hook-index/rebuild"?{workspaceId:r,action:"hook-index-rebuild"}:n==="skills/materialize"?{workspaceId:r,action:"skills-materialize"}:n==="work-conflicts"?{workspaceId:r,action:"work-conflicts"}:null:null}async function Ap(t,e){let r=Date.now(),{session:n,supabase:s}=await S(t),i=s.rpc("pathrule_check_file_work_conflicts",{p_workspace_id:e.workspaceId,p_relative_paths:e.relativePaths}),o=await cS(i,Wv);if(!o||o.error)return sd(r);let a=Array.isArray(o.data)?o.data:[],l={};for(let c of a){if(!c||typeof c!="object")continue;let u=c;typeof u.user_id=="string"&&typeof u.display_name=="string"&&(l[u.user_id]=u.display_name);}return nd({workspaceId:e.workspaceId,relativePaths:e.relativePaths,currentUserId:n.user.id,rows:id(a),displayNamesByUserId:l,source:"cloud_rpc",startedAtMs:r})}async function Ip(t,e,r,n,s,i){await he(e,r,s,n);let o=await ua(s),a=o?await Wp(s):false,l=await Bp(e),c=await Tt(e,r,n,s);x(t,200,{ok:true,workspace_id:n,local_root_path:s,root_exists:o,root_is_directory:a,desktop_runtime_detected:l,local_runtime_state:o?a?l?"cli_attached_desktop_also_detected":"cli_attached":"root_not_directory":"root_missing",ai_clients:c},i);}async function ua(t){try{return await access(t,constants.F_OK),!0}catch{return false}}async function Wp(t){try{return (await stat(t)).isDirectory()}catch{return false}}async function tS(t,e){let r=A(t).daemonFile;await mkdir(dirname(r),{recursive:true,mode:M});let n=`${r}.tmp`;await writeFile(n,JSON.stringify(e,null,2),{encoding:"utf8",mode:O}),await rename(n,r);}async function hn(t,e){let r=A(t).logsDir;await mkdir(r,{recursive:true,mode:M});let n=new Date().toISOString().slice(0,10),s=`${new Date().toISOString()} ${rS(e)}
183
+ `;await writeFile(join(r,`daemon-${n}.log`),s,{flag:"a",encoding:"utf8",mode:O});}function rS(t){return t.replace(/(authorization|token|secret|password)=\S+/gi,"$1=[redacted]")}function Op(t,e){let r=createHash("sha256").update("pathrule-bridge-profile-v1","utf8").update("\0","utf8").update(e.browserProfileId,"utf8").digest("base64url").slice(0,16);return `${t} origin=${e.origin||"unknown"} user_id=${e.userId} browser_profile_hash=${r}`}async function Bp(t,e=Date.now()){let r=t.PATHRULE_DESKTOP_HEALTH?.trim().toLowerCase();if(r==="healthy"||r==="1"||r==="true")return true;if(r==="unhealthy"||r==="0"||r==="false")return false;let n;try{n=JSON.parse(await readFile(A(t).desktopFile,"utf8"));}catch{return false}if(n.healthy!==true||!n.updated_at)return false;let s=Date.parse(n.updated_at);return Number.isFinite(s)&&e-s<=600*1e3}function nS(){let t=process.env.PATHRULE_BRIDGE_ORIGINS;return t?t.split(",").map(e=>e.trim()).filter(Boolean):["https://app.pathrule.io","http://localhost:5173"]}function js(t,e){let r=t[e]??t[e.toLowerCase()],n=Array.isArray(r)?r[0]:r;return (typeof n=="string"?n.trim():"")||void 0}function sS(t){return t.socket.remoteAddress??"unknown"}async function ur(t,e=4096){let r="";for await(let s of t)if(r+=s,Buffer.byteLength(r,"utf8")>e)throw new Error("request_body_too_large");let n=JSON.parse(r||"{}");if(!n||typeof n!="object"||Array.isArray(n))throw new Error("invalid_json_body");return n}function Ue(t,e){let r=t[e];if(typeof r!="string"||r.trim()==="")throw new Y(`${e}_required`);return r.trim()}function $p(t,e){let r=t[e];return typeof r!="string"||r.trim()===""?null:r.trim()}function iS(t,e){let r=t[e];if(typeof r!="boolean")throw new Y(`${e}_required`);return r}function Np(t,e){let r=t[e];if(!Array.isArray(r))throw new Y(`${e}_required`);return Array.from(new Set(r.filter(n=>typeof n=="string"))).filter(n=>n.trim()!=="").slice(0,100)}function oS(t){return t==="full-remove"?"full-remove":"restore-backup"}function x(t,e,r,n){t.writeHead(e,{"content-type":"application/json",...n}),t.end(JSON.stringify(r));}function aS(t){if(!Number.isInteger(t)||t<=0)return false;try{return process.kill(t,0),!0}catch{return false}}function lS(t){return new Promise(e=>setTimeout(e,t))}async function cS(t,e){let r=null;try{return await Promise.race([t,new Promise(n=>{r=setTimeout(()=>n(null),e),r.unref?.();})])}finally{r&&clearTimeout(r);}}B();function y(t){return {schema_version:1,ok:t.ok,command:t.command,cwd:t.cwd,...t.data===void 0?{}:{data:t.data},...t.error===void 0?{}:{error:t.error},...t.next_steps===void 0?{}:{next_steps:t.next_steps}}}function fr(t){return `${JSON.stringify(t,null,2)}
184
+ `}function g(t,e){let r={ok:"[ok]",warn:"[warn]",error:"[error]",info:"[info]"};return e.color?`${{ok:"\x1B[32m",warn:"\x1B[33m",error:"\x1B[31m",info:"\x1B[36m"}[t]}${r[t]}\x1B[0m`:r[t]}Ee();var dS=/^[^\s@]+@[^\s@]+\.[^\s@]+$/i,Te=class extends Error{constructor(r,n){super(n);this.code=r;this.name="CliInviteUsageError";}code};function da(t){let e=[],r="editor",n,s;for(let o=0;o<t.length;o+=1){let a=t[o];if(a){if(a==="--role"){r=kS(t[++o]);continue}if(a==="--org"){n=Fp(t[++o],"--org requires a value","invite_org_required");continue}if(a==="--workspace"){s=Fp(t[++o],"--workspace requires a value","invite_workspace_required");continue}if(a.startsWith("--"))throw new Te("unknown_invite_option",`Unknown invite option "${a}".`);e.push(a);}}let i=e[0];if(!i)throw new Te("invite_email_required","Usage: pathrule invite <email> [--role admin|editor|viewer] [--org <slug-or-id>] [--workspace <name-or-id>]");if(e.length>1)throw new Te("unexpected_invite_argument",`Unexpected extra argument "${e[1]}".`);return {email:i,role:r,orgSelector:n,workspaceSelector:s}}async function pa(t,e){let r=t.email.trim().toLowerCase();if(!dS.test(r))return $t("invalid_email",null,null,e,r);let{session:n,supabase:s}=await S(e),i=await pS(t.orgSelector,e);if(!i)return $t("org_required",null,null,e,r);if(i.role!=="admin"&&i.role!=="owner")return $t("forbidden",i,null,e,r);let o=await hS(s,n.user.id,i.id,t.workspaceSelector,e);if(!o&&t.workspaceSelector)return $t("workspace_not_found",i,null,e,r);let a=await bS(s,i.id);if(a.failure)return $t(a.failure.error,i,o,e,r,a.failure.details);let l=await wS(s,i.id,a,e);if(!l.ok)return $t(l.error,i,o,e,r,l.details);let{data:c,error:u}=await s.rpc("create_org_invite",{p_org_id:i.id,p_email:r,p_role:t.role}),d=c,p=d&&d.ok===false?d.error:void 0;if(u||!d||d.ok!==true)return $t(u?.message??p??"invite_failed",i,o,e,r);let h=true;try{let{error:m}=await s.functions.invoke("send-org-invite-email",{body:{invite_id:d.invite_id}});m&&(h=!1);}catch{h=false;}let f={kind:"web",url:ee(i,e,"members"),label:"Open team in Pathrule Web",reason:"preferred"};return {ok:true,invite_id:d.invite_id,email:d.email,role:d.role,email_sent:h,billing_impact:a.billingImpact,billing_adjustment:l.adjustment,organization:Hp(i),workspace:qp(o),open_target:f,next_steps:[{label:"Open team in Pathrule Web",url:f.url},...h?[]:[{label:"Retry invite email from Pathrule Web",url:f.url}]]}}function Hp(t){return t?{id:t.id,name:t.name,slug:t.slug,role:t.role}:null}function qp(t){return t?{id:t.id,name:t.name}:null}async function pS(t,e){return t?(await we(e)).find(n=>n.id===t||n.slug===t)??null:j(e)}async function hS(t,e,r,n,s){if(!n){let a=await $(s);return a?.organization_id===r?a:null}let{data:i,error:o}=await t.from("workspaces").select("id, organization_id, name, access_mode, git_remote_url, git_owner, git_repo, user_workspace_paths!left(local_root_path, user_id)").eq("organization_id",r).is("archived_at",null);if(o)throw o;for(let a of i??[]){let c=(a.user_workspace_paths??[]).find(d=>d.user_id===e)??null,u={id:a.id,organization_id:a.organization_id,name:a.name,access_mode:a.access_mode,git_remote_url:a.git_remote_url,git_owner:a.git_owner,git_repo:a.git_repo,local_root_path:c?.local_root_path??null,current:false};if(u.id===n||u.name===n)return u}return null}function $t(t,e,r,n,s,i){let o=fS(t,e,n),a=gS(t,s);return {ok:false,error:t,message:_S(t),...a?{email_hash:a}:{},organization:Hp(e),workspace:qp(r),open_target:o,next_steps:mS(t,o),...i}}function fS(t,e,r){if(e){if(t==="free_plan_invites_disabled"||t==="invite_blocked_billing"||t==="billing_update_failed")return {kind:"web",url:ee(e,r,"billing"),label:"Open billing in Pathrule Web",reason:"fallback"};if(t==="subscription_not_invitable"||t==="subscription_frozen")return {kind:"web",url:`${ee(e,r,"billing")}/reactivate`,label:"Open billing reactivation in Pathrule Web",reason:"fallback"};if(t==="paid_seats_required"||t==="seat_limit_reached")return {kind:"web",url:ee(e,r,"billing"),label:"Open billing in Pathrule Web",reason:"fallback"};if(t==="forbidden"||t==="permission_denied"||t==="already_member"||t==="email_already_member"||t==="invite_pending")return {kind:"web",url:ee(e,r,"members"),label:"Open team in Pathrule Web",reason:"fallback"}}}function gS(t,e){if(e&&!(t!=="rate_limited"&&t!=="invite_resent_cooldown_hit"&&t!=="invite_declined_cooldown"))return createHash("sha256").update(e.trim().toLowerCase()).digest("hex")}function mS(t,e){if(t==="not_authenticated"||t==="session_expired_security_epoch")return [{label:"Sign in again",command:"pathrule login"}];if(t==="org_required")return [{label:"Choose an organization",command:"pathrule org use <slug-or-id>"}];if(t==="workspace_not_found")return [{label:"List workspaces",command:"pathrule workspace list"}];if(t==="rate_limited"||t==="invite_resent_cooldown_hit"||t==="invite_declined_cooldown")return [{label:"Retry later"}];if(e)return [{label:e.label,url:e.url}]}function _S(t){switch(t){case "invalid_email":return "Enter a valid email address.";case "invalid_role":return "Role must be admin, editor, or viewer.";case "not_authenticated":return "Pathrule CLI is not signed in.";case "session_expired_security_epoch":return "Your session is stale after a security change. Sign in again.";case "org_required":return "No organization is selected.";case "workspace_not_found":return "Workspace context not found for that organization.";case "forbidden":case "permission_denied":return "Your current role cannot invite teammates to this organization.";case "free_plan_invites_disabled":return "Invites require a paid Pathrule organization plan.";case "subscription_not_invitable":case "subscription_frozen":return "Invites are blocked until billing is reactivated.";case "paid_seats_required":case "seat_limit_reached":return "Pathrule could not automatically add paid seat coverage for this invite.";case "billing_update_failed":return "Billing could not be updated for this invite. Review billing before sending it.";case "rate_limited":return "Rate limit reached, try again later.";case "invite_resent_cooldown_hit":case "invite_declined_cooldown":return "Please wait before inviting this email again.";case "already_member":case "email_already_member":return "That email is already a member of this organization.";case "invite_pending":return "There is already a pending invite for this email.";case "organization_not_found":return "Organization not found.";default:return t.replace(/_/g," ")}}async function wS(t,e,r,n){if(!r.billingRequirement)return {ok:true,adjustment:{status:r.billingImpact.seat_effect==="paid_extra_available"?"already_covered":"not_needed",target_seats:r.billingImpact.target_active_seats,required_paid_extra_seats:r.billingImpact.required_paid_extra_seats,paid_extra_seats_after:r.billingImpact.current_paid_extra_seats}};let s=r.billingRequirement,i={target_seats:s.targetSeats,required_paid_extra_seats:s.requiredPaidExtraSeats,gift_seat_cap:s.giftSeatCap,current_paid_extra_seats:s.currentPaidExtraSeats},o=null;try{let{data:a,error:l}=await t.functions.invoke("start-paid-seat-checkout",{body:{org_id:e,target_seats:s.targetSeats,return_url_origin:yS(n)}});if(l)return {ok:!1,error:"billing_update_failed",details:i};o=a;}catch{return {ok:false,error:"billing_update_failed",details:i}}return o?.ok?o.url?{ok:false,error:"paid_seats_required",details:i}:{ok:true,adjustment:{status:o.updated?"updated":"already_covered",target_seats:s.targetSeats,required_paid_extra_seats:s.requiredPaidExtraSeats,paid_extra_seats_after:o.paid_extra_seats}}:{ok:false,error:o?.error??"billing_update_failed",details:i}}function yS(t){return (t.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}function kS(t){let e=t?.trim().toLowerCase();if(!e||e==="member")return "editor";if(e==="admin"||e==="editor"||e==="viewer")return e;throw new Te("invalid_invite_role",`Invalid invite role "${t}".`)}function Fp(t,e,r){if(!t)throw new Te(r,e);return t}async function bS(t,e){let[r,n]=await Promise.all([t.from("organizations").select("plan, subscription_status, trial_status, trial_seat_cap, paid_extra_seats").eq("id",e).maybeSingle(),t.from("organization_members").select("id",{count:"exact",head:true}).eq("organization_id",e)]);if(r.error)throw r.error;if(n.error)throw n.error;let s=$l(r.data,n.count??0);return {failure:s.failure?{error:s.failure.error}:null,billingImpact:s.billingImpact,billingRequirement:s.billingRequirement}}Ee();B();var Nt=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="CliRefreshError";}code};async function _n(t,e={}){let r=await Us(t),n=await _a(t,r.id),s=await al(n,{workspace_id:r.id,include_in_progress:e.includeInProgress});if(!s.ok)throw wa(s.error);return s.data.slice(0,CS(e.limit)).map(i=>zp(i,r.id,t))}async function ha(t,e,r={}){let n=await Us(t),s=e??await SS(t),i=await _a(t,n.id),o=await ll(i,{refresh_id:s,claimed_by:r.claimedBy??"codex"});if(!o.ok)throw wa(o.error);return Jp(o.data,t)}async function fa(t,e,r,n={}){await Us(t);let s=await _a(t),i=await cl(s,{refresh_id:e,status:r,note:n.note,claimed_by:n.claimedBy??"codex"});if(!i.ok)throw wa(i.error);return Jp(i.data,t)}async function ga(t,e){let r=await Us(t);if(!e){let l=(await _n(t,{includeInProgress:true,limit:1}))[0];if(!l)throw new Nt("refresh_not_found","No pending refresh tasks found.");return l}let{supabase:n}=await S(t),{data:s,error:i}=await n.from("suggestion_refreshes").select("id, workspace_id, subject_type, subject_id, formula_id, status, created_at, brief").eq("id",e).eq("workspace_id",r.id).maybeSingle();if(i)throw i;if(!s)throw new Nt("refresh_not_found",`Refresh ${e} not found.`);let o=s,a=o.brief??{};return zp({id:o.id,subjectType:o.subject_type,subjectId:o.subject_id,subjectTitle:a.subject?.title??"(unknown)",nodePath:a.subject?.nodePath??"/",formulaId:o.formula_id,humanReason:a.signal?.humanReason??o.formula_id,status:o.status,createdAt:o.created_at,hasProposedPatch:!!a.proposedPatch?.newBody},r.id,t)}function Ls(t,e={}){let r=t.open_targets.find(n=>n.kind==="web")??{kind:"web",url:t.url,label:"Open refresh task in Pathrule Web",reason:"preferred"};if(e.forceWeb)return {...r,reason:"forced"};if(e.preferDesktopApp){let n=t.open_targets.find(s=>s.kind==="desktop-app");return n||{...r,reason:"fallback"}}return t.open_targets[0]??r}function ma(t,e,r){return `${(r.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}/workspace/${encodeURIComponent(t)}?tab=suggestions&refresh=${encodeURIComponent(e)}`}function vS(t,e){return `pathrule://workspace/${encodeURIComponent(t)}/refresh/${encodeURIComponent(e)}`}async function SS(t){let e=(await _n(t,{limit:1}))[0];if(!e)throw new Nt("refresh_not_found","No pending refresh tasks found.");return e.id}async function Us(t){let e=await $(t);if(!e)throw new Nt("workspace_required","No current workspace. Run pathrule workspace use <name-or-id>.");return e}async function _a(t,e=null){let{session:r,supabase:n}=await S(t);return {supabase:n,userId:r.user.id,workspaceId:e,clientId:"codex"}}function zp(t,e,r){let n=ma(e,t.id,r);return {...t,workspace_id:e,url:n,open_targets:[Kp(e,t.id,r),Vp(e,t.id)]}}function Jp(t,e){return {...t,url:ma(t.workspaceId,t.id,e),open_targets:[Kp(t.workspaceId,t.id,e),Vp(t.workspaceId,t.id)]}}function Kp(t,e,r){return {kind:"web",url:ma(t,e,r),label:"Open refresh task in Pathrule Web",reason:"preferred"}}function Vp(t,e){return {kind:"desktop-app",url:vS(t,e),label:"Open refresh task in Pathrule Desktop",reason:"fallback"}}function CS(t){return !t||!Number.isFinite(t)?20:Math.min(Math.max(Math.trunc(t),1),100)}function wa(t){return new Nt(t.code,t.message)}K();K();var NS=promisify(execFile),DS=1440*60*1e3;function Gp(t,e=process.env){return join(A(e).home,"cache",t,"bootstrap-v2-brief.json")}async function Yp(t){let e=Gp(t.workspaceId,t.env),r=t.now??new Date;try{let[n,s,i]=await Promise.all([readFile(e,"utf8"),stat(e),Xp(t.localRootPath)]);if(r.getTime()-s.mtimeMs>DS)return {ok:!1,brief:null,cachePath:e,reason:"expired"};let o=JSON.parse(n);return o.schemaVersion!==1||o.workspaceId!==t.workspaceId||o.localRootPath!==t.localRootPath||o.brief.version!==2?{ok:!1,brief:null,cachePath:e,reason:"mismatch"}:o.gitHead!==i?{ok:!1,brief:null,cachePath:e,reason:"git_head_changed"}:{ok:!0,brief:o.brief,cachePath:e}}catch{return {ok:false,brief:null,cachePath:e,reason:"missing"}}}async function ya(t){let e=Gp(t.workspaceId,t.env),r={schemaVersion:1,workspaceId:t.workspaceId,localRootPath:t.localRootPath,gitHead:await Xp(t.localRootPath),cachedAt:new Date().toISOString(),brief:t.brief};await mkdir(dirname(e),{recursive:true});let n=`${e}.tmp`;return await writeFile(n,`${JSON.stringify(r,null,2)}
185
+ `,{encoding:"utf8",mode:O}),await rename(n,e),{cachePath:e}}async function Xp(t){try{let{stdout:e}=await NS("git",["rev-parse","HEAD"],{cwd:t,timeout:1e3});return e.trim()||null}catch{return null}}var jS=/\b(?:packages|apps|src|docs|supabase|types|scripts|config|public|tests?)\/[A-Za-z0-9._/-]+/g;function Dt(t,e="/"){if(!t)return e;let r=t.trim().replace(/\\/g,"/").replace(/^\/+/,"").replace(/\/+$/,"");return !r||r==="."?e:`/${r}`}function gr(t){let e=Dt(t),r=e.replace(/^\/+/,"");return r.includes("/")?Dt(r.slice(0,r.lastIndexOf("/"))):e}function Zp(t){let e=new Set;for(let r of t.matchAll(jS)){let n=r[0].replace(/[),.;:]+$/,"");n.length>2&&e.add(n);}return [...e].slice(0,20)}function ka(t,e){let r=t.find(Boolean);return r?gr(r):e}function Qp(t,e){let r=new Set,n=[];for(let s of t){let i=Dt(s);if(!r.has(i)&&(r.add(i),n.push(i),n.length>=e))break}return n}var ba=200,WS=1024*1024,BS=8*1024*1024,FS=new Set([".git","node_modules","dist","build","coverage","vendor","archive","archived",".next",".turbo"]),nh=/\b(setup|development|architecture|testing|security|release|deploy|contributing|conventions?|workflow|migration)\b/i,HS=/\b(must|never|always|required|before merging|run|do not|don't|avoid|ensure)\b/gi,qS=/\b(pnpm|npm|bun|yarn|supabase|vercel|gh|electron-builder|vitest|tsx|tsc)\b/g;async function sh(t){let e=[],r=await zS(t,e),n=[],s=0;for(let a of r){if(s>=BS){e.push("Documentation scan reached the 8 MB budget.");break}let l=await stat(join(t,a)).catch(()=>null);if(!l||l.size>WS)continue;s+=l.size;let c=await readFile(join(t,a),"utf8").catch(()=>"");if(c.trim())for(let u of KS(c)){let d=VS(a,u);d&&n.push(d);}}let i=n.sort((a,l)=>th(l)-th(a)).slice(0,40),o=new Set(i.flatMap(a=>a.pathMentions)).size;return {findings:i,candidateMemories:XS(i),candidateRules:ZS(i),docsFilesScanned:r.length,filesMentionedByDocs:o,warnings:e}}async function zS(t,e){let r=[];return await n(t,""),r.sort((s,i)=>eh(s)-eh(i)).slice(0,ba);async function n(s,i){if(r.length>=ba)return;let o=await readdir(s,{withFileTypes:true}).catch(()=>[]);for(let a of o){if(r.length>=ba){e.push("Documentation scan reached the 200 file budget.");return}let l=i?`${i}/${a.name}`:a.name;if(a.isDirectory()){if(FS.has(a.name))continue;await n(join(s,a.name),l);continue}a.isFile()&&JS(l)&&r.push(l);}}}function JS(t){let e=basename(t).toLowerCase();return e==="readme.md"||/^readme\..+\.md$/.test(e)||e==="contributing.md"?true:t.startsWith("docs/")&&/\.(md|mdx)$/i.test(t)}function eh(t){let e=basename(t).toLowerCase();return e==="readme.md"?0:e==="contributing.md"?1:t.startsWith("docs/")?2:3}function KS(t){let e=t.split(/\r?\n/),r=[],n={body:""};for(let s of e){let i=s.match(/^(#{1,4})\s+(.+?)\s*#*\s*$/);i?(n.body.trim()&&r.push(n),n={heading:i[2],body:""}):n.body+=`${s}
186
+ `;}return n.body.trim()&&r.push(n),r}function VS(t,e){let r=`${e.heading??""}
187
+ ${e.body}`.trim();if(GS(e.heading,r))return null;let n=[...r.matchAll(HS)].length,s=Zp(r),i=[...new Set([...r.matchAll(qS)].map(a=>a[0]))].slice(0,8);return !(e.heading?nh.test(e.heading):false)&&n===0&&s.length===0&&i.length===0?null:{path:t,heading:e.heading,kind:YS(e.heading??r),summary:QS(r),pathMentions:s,commandMentions:i,imperativeScore:n,excerpt:eC(r)}}function GS(t,e){let r=`${t??""} ${e.slice(0,200)}`.toLowerCase();return /\b(changelog|release notes|history)\b/.test(r)&&/\b\d{4}-\d{2}-\d{2}\b/.test(r)}function YS(t){let e=t.toLowerCase();return e.includes("security")?"security":e.includes("test")?"testing":e.includes("release")||e.includes("deploy")?"release":e.includes("architecture")?"architecture":e.includes("setup")||e.includes("development")||e.includes("contributing")?"workflow":"convention"}function XS(t){return t.filter(e=>e.kind==="architecture"||e.kind==="workflow"||e.pathMentions.length>0).slice(0,18).map(e=>{let r=ka(e.pathMentions,gr(e.path));return {title:ih("Project note",e),bodyGuidance:`Write a concise memory summarizing ${e.summary}. Include the relevant paths and commands, but do not paste the source document verbatim.`,nodePath:r,confidence:ah(.55+e.pathMentions.length*.03+e.commandMentions.length*.02),evidence:[oh(e)]}})}function ZS(t){return t.filter(e=>e.imperativeScore>0||e.kind==="security"||e.kind==="testing").slice(0,12).map(e=>({title:ih("Rule",e),bodyGuidance:`Write a rule from the documented requirement: ${e.summary}. Keep it imperative and scoped to the most specific path.`,nodePath:ka(e.pathMentions,Dt(e.kind==="security"?"/":gr(e.path))),confidence:ah(.62+e.imperativeScore*.04),evidence:[oh(e)]}))}function ih(t,e){let r=e.heading||e.summary;return `${t}: ${r.replace(/[`*_#]/g,"").slice(0,80)}`}function oh(t){return {kind:"doc",path:t.path,heading:t.heading,excerpt:t.excerpt}}function th(t){return t.imperativeScore*3+t.pathMentions.length*2+t.commandMentions.length+(t.heading&&nh.test(t.heading)?8:0)}function QS(t){return t.replace(/\s+/g," ").replace(/[`*_#>-]/g,"").trim().slice(0,220)}function eC(t){return t.replace(/\s+/g," ").trim().slice(0,280)}function ah(t){return Math.max(0,Math.min(1,Number(t.toFixed(2))))}var tC=/\b(fix|bug|regression|hotfix|breaking|break|migration|schema|refactor|rewrite|cleanup)\b/i,ch=/\b(breaking|break|migration|schema)\b/i,rC=/\b(fix|bug|regression|hotfix)\b/i,nC=/\b(refactor|rewrite|cleanup)\b/i;function uh(t){let e=sC(t),r=new Map;for(let s of e){let i=ch.test(s.subject)?"breaking":rC.test(s.subject)?"fix":nC.test(s.subject)?"refactor":null;if(!i)continue;let o=new Set;for(let a of s.files){o.add(Dt(a)),o.add(gr(a));let l=iC(a);l&&o.add(l);}for(let a of o){let l=r.get(a)??{path:a,fix:0,breaking:0,refactor:0,commits:new Map};l.commits.set(s.hash,s),i==="fix"&&(l.fix+=1),i==="breaking"&&(l.breaking+=1),i==="refactor"&&(l.refactor+=1),r.set(a,l);}}return {findings:[...r.values()].filter(s=>s.commits.size>=3||s.breaking>=1).sort((s,i)=>lh(i)-lh(s)).slice(0,15).map(oC),commitsScanned:e.length}}function sC(t){let e=[];for(let r of t.split("")){let n=r.split(/\r?\n/).map(c=>c.trim()).filter(Boolean),s=n[0];if(!s)continue;let[i,o,a]=s.split("");if(!i||!o||!a||!tC.test(a)||/^merge\b/i.test(a))continue;let l=n.slice(1).filter(c=>!c.includes(" => "));l.length<1||l.length>30&&!ch.test(a)||e.push({hash:i,date:o,subject:a,files:l});}return e}function iC(t){let e=t.split("/");return (e[0]==="packages"||e[0]==="apps")&&e[1]?`/${e[0]}/${e[1]}`:e[0]==="supabase"&&e[1]?`/supabase/${e[1]}`:null}function lh(t){return t.fix*3+t.breaking*5+t.refactor*2+t.commits.size}function oC(t){let e=[...t.commits.values()].sort((s,i)=>i.date.localeCompare(s.date)),r=e[0],n=e.slice(0,4).map(s=>({kind:"commit",commit:s.hash.slice(0,12),path:t.path,excerpt:`${s.date} ${s.subject}`}));return {path:t.path,summary:`${t.path} has ${t.fix} fix, ${t.breaking} breaking/schema, and ${t.refactor} refactor commits in recent history.`,fixCount:t.fix,breakingCount:t.breaking,refactorCount:t.refactor,uniqueCommits:t.commits.size,latestDate:r?.date,evidence:n}}var hh=promisify(execFile);async function fh(t){let e=t.now??new Date;if(!t.force){let r=await Yp({workspaceId:t.workspaceId,localRootPath:t.localRootPath,env:t.env,now:e});if(r.ok&&r.brief)return {ok:true,brief:r.brief,cachePath:r.cachePath,reusedCache:true}}try{let r=await wC(pC(t,e),t.timeoutMs??3e4),n=await ya({workspaceId:t.workspaceId,localRootPath:t.localRootPath,brief:r,env:t.env});return {ok:!0,brief:r,cachePath:n.cachePath,reusedCache:!1}}catch(r){let n=_C(t,e,r instanceof Error?r.message:String(r)),s=await ya({workspaceId:t.workspaceId,localRootPath:t.localRootPath,brief:n,env:t.env}).catch(()=>({cachePath:null}));return {ok:false,brief:n,cachePath:s.cachePath,reusedCache:false,error:n.warnings[0]}}}async function pC(t,e){let r=[],[n,s,i,o,a]=await Promise.all([hC(t.supabase,t.workspaceId),sh(t.localRootPath),fC(t.localRootPath,r),mC(t.localRootPath,r),gC(t.localRootPath,r)]);r.push(...s.warnings);let l=uh(i),c=a?mi(a):[],u=gi(o).map(w=>({title:w.title,summary:w.content})),d=u.map(w=>({title:w.title,bodyGuidance:`Write a short memory noting that ${w.summary.toLowerCase()}`,nodePath:"/",confidence:.72,evidence:[{kind:"stack",excerpt:w.summary}]})),p=l.findings.map(w=>({title:`Risk hotspot: ${w.path}`,bodyGuidance:`Write a memory explaining the risk pattern for ${w.path}: ${w.summary} Include the kinds of changes that should be reviewed together.`,nodePath:w.path,confidence:Math.min(.95,.6+w.uniqueCommits*.04+w.breakingCount*.08),evidence:w.evidence})),h=dh([...s.candidateMemories,...p,...d]),f=dh(s.candidateRules);h=ph(h,n.titles).slice(0,15),f=ph(f,n.titles).slice(0,8);let m=n.memoryCount+n.ruleCount>=8;m&&(h=[],f=[],r.push("Workspace already has meaningful setup content; Bootstrap v2 will avoid duplicate starter guidance."));let _=Qp([...f.map(w=>w.nodePath),...h.map(w=>w.nodePath),...s.findings.flatMap(w=>[w.path,...w.pathMentions]),...l.findings.map(w=>w.path)],20),b=m?"Bootstrap v2 found existing Pathrule setup content. Use pathrule_get_context for task-specific context instead of writing duplicate starter memories or rules.":`Bootstrap v2 prepared ${h.length} memory candidates and ${f.length} rule candidates from ${s.docsFilesScanned} docs files and ${l.commitsScanned} risky commits.`;return {version:2,workspaceId:t.workspaceId,localRootPath:t.localRootPath,generatedAt:e.toISOString(),summary:b,stackSignals:u,documentationFindings:s.findings,commitWisdom:l.findings,candidateMemories:h,candidateRules:f,candidateSkills:[],suggestedOrder:_,coverage:{docsFilesScanned:s.docsFilesScanned,commitsScanned:l.commitsScanned,filesMentionedByDocs:s.filesMentionedByDocs,coChangePairsAvailable:c.length},warnings:r,alreadyBootstrapped:m}}async function hC(t,e){if(!t)return {memoryCount:0,ruleCount:0,skillCount:0,titles:new Set};let[r,n,s]=await Promise.all([t.from("memories").select("title",{count:"exact"}).eq("workspace_id",e).limit(200),t.from("rules").select("name",{count:"exact"}).eq("workspace_id",e).limit(200),t.from("skills").select("name",{count:"exact"}).eq("workspace_id",e).limit(50)]),i=new Set;for(let o of r.data??[])o.title&&i.add(wn(o.title));for(let o of n.data??[])o.name&&i.add(wn(o.name));for(let o of s.data??[])o.name&&i.add(wn(o.name));return {memoryCount:r.count??i.size,ruleCount:n.count??0,skillCount:s.count??0,titles:i}}async function fC(t,e){try{let{stdout:r}=await hh("git",["log","--date=short","--format=%x1e%H%x1f%ad%x1f%s","--name-only","-n","5000"],{cwd:t,maxBuffer:52428800,timeout:2e4});return r}catch{return e.push("Git commit wisdom skipped; repository history was unavailable."),""}}async function gC(t,e){try{let{stdout:r}=await hh("git",["log","--name-only","--pretty=format:---","-n","10000"],{cwd:t,maxBuffer:52428800,timeout:2e4});return r}catch{return e.push("Git co-change scan skipped; repository history was unavailable."),""}}async function mC(t,e){let r=[];async function n(s,i){if(i>4||r.length>5e3)return;let o=await readdir(s,{withFileTypes:true}).catch(()=>[]);for(let a of o){if(a.name===".git"||a.name==="node_modules"||a.name==="dist")continue;let l=join(s,a.name);a.isDirectory()?await n(l,i+1):a.isFile()&&r.push(relative(t,l).replace(/\\/g,"/"));}}return await n(t,0).catch(()=>e.push("Stack detection skipped; file tree was unavailable.")),r}function dh(t){let e=new Map;for(let r of t){let n=`${r.nodePath}:${wn(r.title)}`,s=e.get(n);(!s||r.confidence>s.confidence)&&e.set(n,r);}return [...e.values()].sort((r,n)=>n.confidence-r.confidence)}function ph(t,e){return t.filter(r=>!e.has(wn(r.title)))}function wn(t){return t.toLocaleLowerCase("en-US").replace(/[^a-z0-9]+/g," ").trim()}function _C(t,e,r){return {version:2,workspaceId:t.workspaceId,localRootPath:t.localRootPath,generatedAt:e.toISOString(),summary:"Bootstrap v2 could not complete the local scan. Use the fallback setup prompt.",stackSignals:[],documentationFindings:[],commitWisdom:[],candidateMemories:[],candidateRules:[],candidateSkills:[],suggestedOrder:[],coverage:{docsFilesScanned:0,commitsScanned:0,filesMentionedByDocs:0,coChangePairsAvailable:0},warnings:[r]}}function wC(t,e){return new Promise((r,n)=>{let s=setTimeout(()=>n(new Error("Bootstrap v2 scan timed out.")),e);t.then(i=>{clearTimeout(s),r(i);},i=>{clearTimeout(s),n(i);});})}B();K();ds();B();async function _h(t,e,r=fetch){if(!e.gitRemoteUrl)return {status:"skipped",error:"missing_git_remote"};try{let{session:n,supabase:s}=await S(t),{data:i,error:o}=await s.from("beta_platform_invites").select("id").eq("claimed_user_id",n.user.id).eq("status","claimed").order("claimed_at",{ascending:!1}).limit(1);if(o)return {status:"skipped",error:"invite_lookup_unavailable"};let a=(i??[])[0]??null;if(!a)return {status:"skipped",error:"no_claimed_beta_invite"};let l=pe(t),c=await RC(t),u=await r(`${l.supabaseUrl}/functions/v1/process-beta-activation`,{method:"POST",headers:{"content-type":"application/json",apikey:l.supabaseAnonKey,Authorization:`Bearer ${n.access_token}`},body:JSON.stringify({invite_id:a.id,workspace_id:e.workspaceId,git_remote_url:e.gitRemoteUrl,machine_id:c,runtime_source:e.runtimeSource})}),d=await u.json().catch(()=>null);return !u.ok||!d?.status?{status:"skipped",error:"activation_unavailable"}:{status:d.status,credit_cents:mh(d.credit_cents),founder_bonus_cents:mh(d.founder_bonus_cents)}}catch{return {status:"skipped",error:"activation_unavailable"}}}async function RC(t){let e=join(A(t).home,"machine-install.json");try{let n=JSON.parse(await readFile(e,"utf8"));if(typeof n.machine_id=="string"&&n.machine_id.length>=16)return n.machine_id}catch{}let r=`cli_${randomUUID()}`;return await xC(e,{schema_version:1,machine_id:r}),r}async function xC(t,e){let r=dirname(t);await mkdir(r,{recursive:true,mode:M}),await chmod(r,M).catch(()=>{});let n=`${t}.tmp`;await writeFile(n,JSON.stringify(e,null,2),{encoding:"utf8",mode:O}),await chmod(n,O).catch(()=>{}),await rename(n,t);}function mh(t){return typeof t=="number"&&Number.isFinite(t)?t:void 0}Ee();var OC=promisify(execFile);async function Ws(t,e){let r=await j(e);if(!r)return {cwd:t,organization:null,candidates:[],recommended_action:"select_org"};let[n,s,i]=await Promise.all([Re(e),Eh(t),MC(t,e)]),o=DC(t,r,n,s,i);return {cwd:t,organization:r,candidates:o,recommended_action:o.length===0?"create_workspace":o[0]?.confidence==="exact"||o[0]?.confidence==="high"?"attach_existing":"choose_workspace"}}async function mr(t,e,r,n={yes:false}){let s=NC(t);if(!s.shouldApply)return {plan:await Ws(e,r),applied:false,org_selected:null,workspace_action:"none",workspace:null,install:null,sync:null,beta_activation:null,bootstrap_v2:null};if(s.bootstrapRerun){let f=await $(r);if(!f?.id)throw new Error("workspace_required");let m=await kh(f.id,e,r,true);return {plan:await Ws(e,r),applied:true,org_selected:null,workspace_action:"none",workspace:f,install:null,sync:null,beta_activation:null,bootstrap_v2:m}}if(!n.yes)throw new Error("setup_requires_yes");let i=null;if(s.org){let{useCliOrg:f}=await Promise.resolve().then(()=>(Ee(),Fu));i=(await f(s.org,r)).id;}let o=await Ws(e,r),a="none",l=null;if(s.createWorkspace){let f=await ae("create_workspace",r);if(!f.allowed)throw new Error(f.blocking_reason??"preflight_blocked");l=await vt(s.workspaceName??basename(e),e,r),a="created";}else s.workspaceSelector?(l=await xe(s.workspaceSelector,e,r),a="attached"):o.recommended_action==="attach_existing"&&o.candidates[0]?(l=await xe(o.candidates[0].workspace_id,e,r),a="attached"):s.selectCurrentWorkspace&&(l=await en(s.selectCurrentWorkspace,r),a="selected");o=await Ws(e,r);let c=s.target?await Ze(s.target,r):null,u=a==="attached"||a==="created"?await Le(r,e):null,d=$C(l),p=u?.ok&&d&&(a==="attached"||a==="created")?await kh(d,e,r,false):null,h=u?.ok&&(a==="attached"||a==="created")?await _h(r,{workspaceId:d,gitRemoteUrl:await Eh(e),runtimeSource:"cli"}):null;return {plan:o,applied:true,org_selected:i,workspace_action:a,workspace:l,install:c,sync:u,beta_activation:h,bootstrap_v2:p}}async function kh(t,e,r,n){let{supabase:s}=await S(r),i=await fh({workspaceId:t,localRootPath:e,supabase:s,env:r,force:n});return {ok:i.ok,reused_cache:i.reusedCache,cache_path:i.cachePath,candidate_counts:{memories:i.brief.candidateMemories.length,rules:i.brief.candidateRules.length,skills:i.brief.candidateSkills.length},coverage:i.brief.coverage,summary:i.brief.summary,warnings:i.brief.warnings}}function $C(t){if(!t||typeof t!="object")return null;let e=t.id;if(typeof e=="string")return e;let r=t.workspace?.id;return typeof r=="string"?r:null}function NC(t){let e={org:null,workspaceSelector:null,workspaceName:null,createWorkspace:false,selectCurrentWorkspace:null,target:null,bootstrapRerun:false},r=false,n=false;for(let s=0;s<t.length;s+=1){let i=t[s],o=()=>{let a=t[s+1];if(!a||a.startsWith("--"))throw new Error(`missing_value:${i}`);return s+=1,a};if(i==="bootstrap"){if(r)throw new Error("unknown_setup_option:bootstrap");r=true;}else if(i==="--rerun"&&r)n=true;else if(i==="--org")e.org=o();else if(i==="--workspace"||i==="--workspace-id")e.workspaceSelector=o();else if(i==="--workspace-name")e.workspaceName=o();else if(i==="--create-workspace")e.createWorkspace=true;else if(i==="--select-workspace")e.selectCurrentWorkspace=o();else if(i==="--target")e.target=o();else throw new Error(`unknown_setup_option:${i}`)}if(r&&!n)throw new Error("missing_value:--rerun");return e.bootstrapRerun=r&&n,{...e,shouldApply:e.org!==null||e.workspaceSelector!==null||e.workspaceName!==null||e.createWorkspace||e.selectCurrentWorkspace!==null||e.target!==null||e.bootstrapRerun}}function DC(t,e,r,n,s){let i=Sh(basename(t)),o=[],a=new Set,l=c=>{a.has(c.workspace_id)||(a.add(c.workspace_id),o.push(c));};for(let c of r){if(c.local_root_path===t){l(yn("cwd_mapping",c,e,"exact",false,"Exact local path mapping."));continue}if(n&&jC(c,n)){l(yn("git_remote",c,e,"high",true,"Git remote matches workspace metadata."));continue}if(s.has(c.id)){l(yn("hook_cache",c,e,"high",true,"Existing hook cache points at this folder."));continue}let u=Sh(c.name);if(u===i){l(yn("name_match",c,e,"medium",true,"Folder name matches workspace name."));continue}LC(u,i)&&l(yn("name_match",c,e,"low",true,"Folder name is similar to workspace name."));}return o.sort((c,u)=>{let d=bh(u.confidence)-bh(c.confidence);return d!==0?d:vh(u.source)-vh(c.source)}),o.map((c,u)=>({...c,recommended:u===0}))}function yn(t,e,r,n,s,i){return {source:t,workspace_id:e.id,workspace_name:e.name,org_id:r.id,org_name:r.name,org_slug:r.slug,confidence:n,recommended:false,requires_confirmation:s,reason:i}}function bh(t){return {exact:4,high:3,medium:2,low:1}[t]}function vh(t){return {cwd_mapping:6,git_remote:5,hook_cache:4,companion_file:3,name_match:2,manual:1}[t]}function jC(t,e){let r=t;return r.git_remote_url&&Sa(r.git_remote_url)===Sa(e)?true:!r.git_owner||!r.git_repo?false:Sa(e).endsWith(`/${r.git_owner}/${r.git_repo}`.toLocaleLowerCase("en-US"))}async function Eh(t){try{let{stdout:e}=await OC("git",["config","--get","remote.origin.url"],{cwd:t,timeout:1e3});return e.trim()||null}catch{return null}}function Sa(t){return t.trim().replace(/^git@([^:]+):/,"https://$1/").replace(/^https?:\/\//,"").replace(/\.git$/,"").toLocaleLowerCase("en-US")}async function MC(t,e){let r=new Set,n=join(A(e).home,"cache"),s;try{s=await readdir(n);}catch{return r}let i=resolve(t);return await Promise.all(s.map(async o=>{try{let a=await readFile(join(n,o,"hook-index.json"),"utf8"),l=JSON.parse(a);if(!l.workspace_id||!l.workspace_root)return;let c=resolve(l.workspace_root);(i===c||i.startsWith(`${c}/`))&&r.add(l.workspace_id);}catch{}})),r}function Sh(t){return t.toLocaleLowerCase("en-US").replace(/[^a-z0-9]+/g," ").trim()}function LC(t,e){return !t||!e?false:t.includes(e)||e.includes(t)?true:UC(t,e)<=Math.max(2,Math.floor(Math.max(t.length,e.length)*.25))}function UC(t,e){let r=Array.from({length:e.length+1},(n,s)=>s);for(let n=1;n<=t.length;n+=1){let s=n,i=n-1;for(let o=1;o<=e.length;o+=1){let a=r[o]??0,l=t[n-1]===e[o-1]?0:1;r[o]=Math.min(a+1,s+1,i+l),s=r[o]??0,i=a;}r[0]=n;}return r[e.length]??0}B();var zC=promisify(execFile),Ea=5e3,JC=50,Rh=4096,xh=32e3,Ra=2e4,KC=new Set(["node_modules",".git",".svn",".hg","dist","build","out",".next",".nuxt",".turbo",".vercel",".cache",".pnpm-store","target","vendor","__pycache__",".venv","venv",".tox",".pytest_cache",".mypy_cache",".idea",".vscode",".DS_Store","coverage","tmp","temp"]),VC=new Set([".DS_Store","Thumbs.db","pnpm-lock.yaml","package-lock.json","yarn.lock","bun.lockb","Cargo.lock","poetry.lock","Pipfile.lock","composer.lock","Gemfile.lock"]),GC=new Set([".png",".jpg",".jpeg",".gif",".webp",".bmp",".tif",".tiff",".ico",".svg",".pdf",".zip",".tar",".gz",".tgz",".bz2",".7z",".rar",".jar",".war",".class",".pyc",".pyo",".so",".dylib",".dll",".exe",".o",".a",".mp3",".mp4",".mov",".avi",".wav",".flac",".woff",".woff2",".ttf",".otf",".eot"]),YC=["package.json","pnpm-workspace.yaml","turbo.json","nx.json","tsconfig.json","tsconfig.base.json","vite.config.ts","vite.config.js","next.config.js","next.config.mjs","pyproject.toml","requirements.txt","setup.py","Cargo.toml","go.mod","composer.json","Gemfile","build.gradle","build.gradle.kts","pom.xml","Makefile","makefile","Dockerfile","docker-compose.yml","docker-compose.yaml",".tool-versions",".nvmrc",".node-version",".python-version",".ruby-version",".env.example",".env.sample","CLAUDE.md","AGENTS.md",".cursorrules",".windsurfrules"],XC=[/^README(\.[a-z0-9]+)?$/i,/^CONTRIBUTING(\.[a-z0-9]+)?$/i,/^ARCHITECTURE(\.[a-z0-9]+)?$/i,/^CHANGELOG(\.[a-z0-9]+)?$/i];function ZC(t){return YC.includes(t)?true:XC.some(e=>e.test(t))}function QC(t){return KC.has(t)||t.startsWith(".pathrule")}function e0(t,e){return !!(VC.has(t)||GC.has(e))}async function Ah(t,e,r,n,s){if(n.entries.length>=Ea){n.truncated=true;return}if(Date.now()-s>Ra){n.truncated=true;return}let i;try{i=await promises.readdir(e,{withFileTypes:!0});}catch{return}i.sort((o,a)=>o.name.localeCompare(a.name));for(let o of i){if(n.entries.length>=Ea){n.truncated=true;return}let a=join(e,o.name),l=relative(t,a).split(sep).join("/");if(!l)continue;if(o.isDirectory()){if(QC(o.name))continue;n.entries.push({path:l,type:"dir",depth:r}),await Ah(t,a,r+1,n,s);continue}if(!o.isFile())continue;let c=extname(o.name).toLowerCase();if(e0(o.name,c))continue;let u=0;try{u=(await promises.stat(a)).size;}catch{continue}n.entries.push({path:l,type:"file",size:u,depth:r}),n.fileCount+=1,n.totalSize+=u;let d=c.startsWith(".")?c.slice(1):c;d&&(n.extensionCounts[d]=(n.extensionCounts[d]??0)+1);let p=l.split("/");if(p.length>1){let h=p[0];n.topLevelFileCounts[h]=(n.topLevelFileCounts[h]??0)+1;}}}async function t0(t,e){let r=e.filter(s=>s.type==="file").filter(s=>{let i=s.path.split("/").pop()??"";return ZC(i)}),n=[];for(let s of r){if(n.length>=JC)break;let i=join(t,s.path);try{let o=await promises.readFile(i),a=o.byteLength,l=o.subarray(0,Rh).toString("utf8");n.push({path:s.path,bytes:a,content:a>Rh?`${l}\u2026`:l});}catch{}}return n}async function kn(t,e){try{let{stdout:r}=await zC("git",t,{cwd:e,timeout:5e3});return r.trim()}catch{return null}}async function r0(t){if(await kn(["rev-parse","--is-inside-work-tree"],t)!=="true")return {remoteUrl:null,head:null,branch:null,logSummary:null};let[r,n,s,i]=await Promise.all([kn(["config","--get","remote.origin.url"],t),kn(["rev-parse","HEAD"],t),kn(["rev-parse","--abbrev-ref","HEAD"],t),kn(["log","--pretty=format:%h %ad %s","--date=short","-n","50"],t)]),o=null;return i&&(o=i.length>xh?`${i.slice(0,xh)}\u2026`:i),{remoteUrl:r,head:n,branch:s,logSummary:o}}async function Ih(t){let e=Date.now(),r={entries:[],fileCount:0,totalSize:0,extensionCounts:{},topLevelFileCounts:{},truncated:false};await Ah(t.cwd,t.cwd,0,r,e);let n=await t0(t.cwd,r.entries),s=await r0(t.cwd),i=Object.entries(r.topLevelFileCounts).map(([a,l])=>({name:a,file_count:l})).sort((a,l)=>l.file_count-a.file_count).slice(0,50),o=[];return r.truncated&&o.push(`file_tree truncated at ${Ea} entries \u2014 deeper or wider paths were skipped`),Date.now()-e>Ra&&o.push(`walk exceeded ${Ra}ms; results are partial`),{project_name:t.projectName,root_path:t.cwd,git_remote_url:s.remoteUrl,git_head:s.head,branch:s.branch,file_count:r.fileCount,total_size_bytes:r.totalSize,file_tree:r.entries,file_extensions_summary:r.extensionCounts,top_level_dirs:i,sampled_contents:n,git_log_summary:s.logSummary,ai_notes:t.aiNotes??null,walk_warnings:o}}var n0=1e3;function s0(t){let e=new Set;for(let n of t){if(!n.path)continue;if(n.type==="dir"){e.add(n.path);continue}let s=n.path.lastIndexOf("/");s>0&&e.add(n.path.slice(0,s));}let r=[];for(let n of e){if(r.length>=n0)break;r.push(n);}return r}var et=class extends Error{constructor(r,n=r){super(n);this.code=r;this.name="CliSnapshotError";}code};async function Oh(t,e,r){let{supabase:n,session:s}=await S(r),i={workspace_id:t.id,source:"cli",taken_by:s.user.id,project_name:e.project_name,root_path:e.root_path,git_remote_url:e.git_remote_url,git_head:e.git_head,branch:e.branch,file_count:e.file_count,total_size_bytes:e.total_size_bytes,file_tree:e.file_tree,file_extensions_summary:e.file_extensions_summary,top_level_dirs:e.top_level_dirs,sampled_contents:e.sampled_contents,git_log_summary:e.git_log_summary,ai_notes:e.ai_notes,metadata:{walk_warnings:e.walk_warnings}},{data:o,error:a}=await n.from("project_snapshots").insert(i).select("id, workspace_id, created_at").single();if(a||!o){let u=a?.code==="42501"||/row-level security/i.test(a?.message??"");throw new et(u?"forbidden":"upstream_error",a?.message??"snapshot insert failed")}let l=s0(e.file_tree),c={directories_seen:0,nodes_created:0,nodes_already_present:0,error:null};if(l.length>0){let{data:u,error:d}=await n.rpc("pathrule_materialize_snapshot_nodes",{p_workspace_id:t.id,p_paths:l});if(d)c={...c,error:d.message};else {let p=Array.isArray(u)?u[0]:u;c={directories_seen:p?.total_paths??0,nodes_created:p?.created_count??0,nodes_already_present:p?.existing_count??0,error:null};}}return {snapshot_id:o.id,workspace_id:o.workspace_id,created_at:o.created_at,nodes_materialized:c}}async function $h(t,e,r={}){let{supabase:n}=await S(e),{data:s,error:i}=await n.from("project_snapshots").select("id, source, project_name, git_remote_url, branch, git_head, file_count, total_size_bytes, created_at").eq("workspace_id",t.id).order("created_at",{ascending:false}).limit(Math.min(Math.max(r.limit??10,1),25));if(i)throw new et("upstream_error",i.message);return s??[]}function i0(){return process.platform==="darwin"||process.platform==="win32"}function Ph(t){let e=t.replace(/\\/g,"/").replace(/\/+$/,"");return i0()?e.toLowerCase():e}function o0(t,e){if(e==="")return false;let r=Ph(t),n=Ph(e);return r===n||r.startsWith(`${n}/`)}async function a0(t,e){let{supabase:r,session:n}=await S(e),{data:s,error:i}=await r.from("user_workspace_paths").select("workspace_id, local_root_path, workspace:workspaces!inner(id, organization_id, name, access_mode, git_remote_url, git_owner, git_repo)").eq("user_id",n.user.id);if(i||!s)return null;let a=s.filter(c=>!!c.workspace).filter(c=>o0(t,c.local_root_path)).sort((c,u)=>u.local_root_path.length-c.local_root_path.length)[0];if(!a)return null;let l=a.workspace;return {workspace:{id:l.id,organization_id:l.organization_id,name:l.name,access_mode:l.access_mode,git_remote_url:l.git_remote_url,git_owner:l.git_owner,git_repo:l.git_repo,local_root_path:a.local_root_path,current:false},matchedRoot:a.local_root_path}}async function xa(t,e){let r=await a0(t,e).catch(()=>null),n=await $(e).catch(()=>null);if(r){let s=!!n&&n.id!==r.workspace.id;return {workspace:r.workspace,source:"cwd-match",cwdMatch:r,current:n,mismatch:s}}if(n)return {workspace:n,source:"current-fallback",cwdMatch:null,current:n,mismatch:false};throw new et("no_workspace","No Pathrule workspace is attached to this folder and no current workspace is set. Run `pathrule attach` or `pathrule workspace use <name>` first.")}B();Ee();async function Pa(t,e){let r=await l0(t,e);if(!r)throw new Error("org_required");let{supabase:n}=await S(t),[s,i,o]=await Promise.all([n.from("organization_members").select("id, user_id, role, joined_at").eq("organization_id",r.id).order("joined_at",{ascending:true}),n.rpc("get_org_member_profiles",{p_org_id:r.id}),n.from("organization_invites").select("id, email, role, status, created_at, expires_at").eq("organization_id",r.id).eq("status","pending").order("created_at",{ascending:false})]);if(s.error)throw s.error;if(i.error)throw i.error;if(o.error)throw o.error;let a=new Map,l=i.data??[];for(let d of l)a.set(d.user_id,d);let c=(s.data??[]).map(d=>{let p=a.get(d.user_id);return {id:d.id,user_id:d.user_id,role:d.role,joined_at:d.joined_at,email:p?.email??null,full_name:Rl(p?.full_name,"profile"),avatar_url:xl(p?.avatar_url),last_sign_in_at:p?.last_sign_in_at??null}}),u=(o.data??[]).map(d=>({id:d.id,email:d.email,role:d.role,status:d.status,created_at:d.created_at,expires_at:d.expires_at}));return {organization:{id:r.id,name:r.name,slug:r.slug,role:r.role},members:c,invites:u,open_target:{kind:"web",url:ee(r,t,"members"),label:"Open team in Pathrule Web",reason:"preferred"}}}async function l0(t,e){return e?(await we(t)).find(n=>n.id===e||n.slug===e)??null:j(t)}Ge();Xr();async function Bs(t,e,r){let n=await bt("update.policy",e);if(n.key!=="update.policy")throw new Error("invalid_update_policy_state");let s=`${(e.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}/cli/versions.json`,i=e.PATHRULE_PROTOCOL_VERSION??kl;if(n.value==="manual")return {checked:false,policy:n.value,current_version:t,current_protocol_version:i,latest_version:null,min_supported_protocol_version:null,protocol_compatible:true,update_available:false,upgrade_command:null,reason:"manual_policy",url:s};try{let o=await r(s,{headers:{"user-agent":`pathrule-cli/${t}`}});if(!o.ok)throw new Error(`http_${o.status}`);let a=await o.json(),l=a.latest_version??a.latest??null,c=a.min_supported_protocol_version??null;return {checked:!0,policy:n.value,current_version:t,current_protocol_version:i,latest_version:l,min_supported_protocol_version:c,protocol_compatible:u0(i,c),update_available:l?l!==t:!1,upgrade_command:a.upgrade_command??c0(a.channels),url:s}}catch{return {checked:false,policy:n.value,current_version:t,current_protocol_version:i,latest_version:null,min_supported_protocol_version:null,protocol_compatible:true,update_available:false,upgrade_command:null,reason:"request_failed",url:s}}}async function Dh(t,e,r){let n=await bt("update.policy",e);if(n.key!=="update.policy")throw new Error("invalid_update_policy_state");if(n.value==="manual")return null;let s=await Ce(e).catch(()=>null);if(!s)return null;let i=await ne(s.session.user.id,e);if(i.last_update_check_at){let l=new Date(i.last_update_check_at).getTime();if(Number.isFinite(l)&&Date.now()-l<1440*60*1e3)return null}await se(s.session.user.id,{last_update_check_at:new Date().toISOString()},e);let o=await Bs(t,e,r);if(!o.checked||!o.update_available)return null;let a=o.upgrade_command?` Run: ${o.upgrade_command}`:"";return `Pathrule CLI ${o.latest_version} is available.${a}`}function c0(t){return t?t.brew??t.npm??t.standalone??null:null}function u0(t,e){if(!e)return true;let r=Nh(t),n=Nh(e);return r&&n?d0(r,n)>=0:t===e}function Nh(t){let e=t.match(/^v?(\d+)\.(\d+)\.(\d+)$/);return e?[Number(e[1]),Number(e[2]),Number(e[3])]:null}function d0(t,e){for(let r=0;r<3;r+=1){let n=(t[r]??0)-(e[r]??0);if(n!==0)return n}return 0}B();Ee();async function Ta(t){let{session:e,supabase:r}=await S(t.env),[n,s]=await Promise.all([j(t.env),$(t.env)]);if(!n)throw new Error("org_required");if(!s)throw new Error("workspace_required");let i=p0(n.plan),[o,a,l,c,u,d,p,h]=await Promise.all([h0(r,s.id),bn(r.from("nodes").select("id",{count:"exact",head:true}).eq("workspace_id",s.id)),bn(r.from("memories").select("id",{count:"exact",head:true}).eq("workspace_id",s.id)),bn(r.from("rules").select("id",{count:"exact",head:true}).eq("workspace_id",s.id)),bn(r.from("skills").select("id",{count:"exact",head:true}).eq("workspace_id",s.id)),bn(r.from("workspaces").select("id",{count:"exact",head:true}).eq("organization_id",n.id).is("archived_at",null)),f0(r,s.id),Tt(t.env,e.user.id,s.id,s.local_root_path)]);return {organization:{id:n.id,name:n.name,slug:n.slug,plan:i,role:n.role,subscription_status:n.subscription_status,trial_status:n.trial_status},workspace:s,local_status:{current_folder:t.cwd,attached_root:s.local_root_path,current_folder_attached:s.local_root_path===t.cwd,attached_elsewhere:s.local_root_path!==null&&s.local_root_path!==t.cwd},cloud_tree:{root_node_present:o,nodes:a,memories:l,rules:c,skills:u},capacity:{plan:i,workspaces:{used:d,limit:qe[i].workspaces},memories:{used:l,limit:qe[i].memories},rules:{used:c,limit:qe[i].rules}},active_clients:h.map(f=>m0(f)),recent_activity:p}}function p0(t){return Object.hasOwn(qe,t)?t:"free"}async function h0(t,e){let{data:r,error:n}=await t.from("nodes").select("id").eq("workspace_id",e).eq("relative_path","/").is("parent_id",null).maybeSingle();if(n)throw n;return !!r?.id}async function bn(t){let{count:e,error:r}=await t;if(r)throw new Error(r.message);return e??0}async function f0(t,e){let{data:r,error:n}=await t.from("activity_logs").select("created_at, domain, action, scope, node_path, task_summary, files_touched").eq("workspace_id",e).eq("status","active").order("created_at",{ascending:false}).limit(5);if(n)throw n;return (r??[]).map(s=>({created_at:String(s.created_at),domain:String(s.domain??"unknown"),action:String(s.action??"unknown"),scope:String(s.scope??"project"),node_path:String(s.node_path??"/"),task_summary:String(s.task_summary??""),files_touched_total:g0(s.files_touched)}))}function g0(t){if(!t||typeof t!="object")return 0;let e=t.total;return typeof e=="number"&&Number.isFinite(e)?e:0}function m0(t){let e=t.client;return {client:e,label:U[e]?.label??e,active:t.active,selected:t.selected,detected:t.markers.includes("workspace_marker_detected"),machine_installed:t.machineInstalled,machine_config_exists:t.machineConfigExists,machine_config_path:t.machineConfigPath}}var P0=createRequire(import.meta.url),Be=P0("../package.json"),qs=promisify(execFile),X=class extends Error{constructor(r,n){super(n);this.code=r;this.name="CliContentUsageError";}code},T0=`${H.cli}
188
188
 
189
189
  Usage:
190
190
  pathrule <command> [options]
@@ -217,6 +217,7 @@ Knowledge:
217
217
  rule List, read, or add rules
218
218
  skill List, read, or add skills
219
219
  refresh List, claim, resolve, or open refresh tasks
220
+ snapshot Capture or list project_snapshots for the current workspace
220
221
 
221
222
  Diagnostics & Maintenance:
222
223
  status Show local Pathrule status
@@ -245,24 +246,24 @@ Options:
245
246
  --browser-callback
246
247
  Use the localhost OAuth callback login fallback
247
248
  --no-color Disable colored output
248
- `,Ta=["surfaces","web","desktop","cli"],Hi="Set up Pathrule for this project.";function KC(t){return Ta.includes(t)}function VC(t){return t==="surfaces"?`${H.cli} surfaces
249
+ `,ja=["surfaces","web","desktop","cli"],Js="Set up Pathrule for this project.";function A0(t){return ja.includes(t)}function I0(t){return t==="surfaces"?`${H.cli} surfaces
249
250
 
250
251
  ${H.web}
251
- ${nt.web}
252
+ ${st.web}
252
253
  Use for billing, team admin, visual review, and browser-based setup.
253
254
 
254
255
  ${H.desktop}
255
- ${nt.desktop}
256
+ ${st.desktop}
256
257
  Use when you want Web-style UI plus bundled local repo access, tray status, and native notifications.
257
258
 
258
259
  ${H.cli}
259
- ${nt.cli}
260
+ ${st.cli}
260
261
  Use for terminal-first local runtime setup, scripts, headless machines, and pairing ${H.web}.
261
262
 
262
263
  Cloud state is shared across surfaces. Local runtime state is scoped to this user and this machine.
263
264
  `:t==="web"?`${H.web}
264
265
 
265
- ${nt.web}
266
+ ${st.web}
266
267
 
267
268
  Good for:
268
269
  - Billing and subscription management
@@ -278,7 +279,7 @@ Useful commands:
278
279
  pathrule team open
279
280
  `:t==="desktop"?`${H.desktop}
280
281
 
281
- ${nt.desktop}
282
+ ${st.desktop}
282
283
 
283
284
  Good for:
284
285
  - All-in-one visual workspace and local runtime
@@ -292,7 +293,7 @@ Useful commands:
292
293
  pathrule config set suggestions.desktop false
293
294
  `:`${H.cli}
294
295
 
295
- ${nt.cli}
296
+ ${st.cli}
296
297
 
297
298
  Good for:
298
299
  - Headless or terminal-first setup
@@ -307,194 +308,211 @@ Useful commands:
307
308
  pathrule install codex
308
309
  pathrule sync
309
310
  pathrule bridge pair
310
- `}function $f(t){return t?KC(t)?{ok:true,text:VC(t),topic:t}:{ok:false,message:`Unknown help topic "${t}". Try: ${Ta.join(", ")}.`}:{ok:true,text:JC,topic:null}}async function Nf(t,e){let r=Date.now(),n=bu(t,e.env),i={json:n.flags.json,color:n.flags.color,interactive:n.flags.interactive,noOpen:n.flags.noOpen},s=n.flags.version?"version":n.flags.help?"help":n.command;if(i.json){let a=await GC(s,e,n.positional.slice(1),n.flags);return e.stdout.write(Dp(a.envelope)),await so(e.env,{command:s,exitCode:a.exitCode,appVersion:Be.version,durationMs:Date.now()-r}),a.exitCode}let o;switch(s){case "help":{let a=$f(n.positional[1]);if(!a.ok){e.stderr.write(`${g("error",i)} ${a.message}
311
+ `}function Kh(t){return t?A0(t)?{ok:true,text:I0(t),topic:t}:{ok:false,message:`Unknown help topic "${t}". Try: ${ja.join(", ")}.`}:{ok:true,text:T0,topic:null}}async function Vh(t,e){let r=Date.now(),n=Pu(t,e.env),s={json:n.flags.json,color:n.flags.color,interactive:n.flags.interactive,noOpen:n.flags.noOpen},i=n.flags.version?"version":n.flags.help?"help":n.command;if(s.json){let a=await O0(i,e,n.positional.slice(1),n.flags);return e.stdout.write(fr(a.envelope)),await lo(e.env,{command:i,exitCode:a.exitCode,appVersion:Be.version,durationMs:Date.now()-r}),a.exitCode}let o;switch(i){case "help":{let a=Kh(n.positional[1]);if(!a.ok){e.stderr.write(`${g("error",s)} ${a.message}
311
312
  `),o=64;break}e.stdout.write(a.text),o=0;break}case "version":e.stdout.write(`${Be.version}
312
- `),o=0;break;case "start":o=await K0(e,i);break;case "login":o=await Xf(e,i,n.flags.browserCallback);break;case "org":o=await EE(n.positional[1]??"list",n.positional.slice(2),e,i);break;case "workspace":o=await w0(n.positional[1]??"list",n.positional.slice(2),e,i);break;case "init":o=await y0(n.positional[1],e,i);break;case "setup":o=await k0(e,i,n.positional.slice(1),n.flags.yes);break;case "attach":o=await L0(n.positional[1],e,i);break;case "detach":o=await U0(n.positional[1],e,i);break;case "preflight":o=await W0(n.positional[1],e,i);break;case "install":o=await B0(n.positional[1],e,i);break;case "uninstall":o=await F0(n.positional[1],e,i);break;case "sync":o=await H0(n.positional.slice(1),e,i);break;case "config":o=await q0(n.positional[1],n.positional[2],n.positional[3],e,i);break;case "update":o=await z0(e,i);break;case "daemon":o=await V0(n.positional.slice(1),e,i);break;case "bridge":o=await Y0(n.positional[1]??"pair",e,i);break;case "open":o=await Lf(n.positional.slice(1),e,i);break;case "search":o=await fE(n.positional.slice(1),e,i);break;case "memory":case "rule":case "skill":o=await pE(s,n.positional.slice(1),e,i);break;case "refresh":o=await hE(n.positional.slice(1),e,i);break;case "repair":o=await gE(e,i);break;case "cache":o=await mE(n.positional.slice(1),e,i,n.flags.yes);break;case "billing":case "team":case "invite":case "upgrade":case "reactivate":o=s==="invite"?await nE(n.positional.slice(1),e,i):s==="team"?await iE(n.positional.slice(1),e,i):await rE(s,n.positional.slice(1),e,i);break;case "status":o=await Q0(e,i);break;case "doctor":o=await Z0(n.positional.slice(1),e,i);break;case "whoami":o=await tE(e,i);break;case "logout":o=await DE(e,i);break;default:e.stderr.write(`${g("error",i)} Unknown command "${s}". Run pathrule help.
313
- `),o=64;}return s!=="update"&&s!=="login"&&s!=="logout"&&await J0(e,i),await so(e.env,{command:s,exitCode:o,appVersion:Be.version,durationMs:Date.now()-r}),o}async function GC(t,e,r,n={yes:false}){if(t==="version")return {exitCode:0,envelope:k({command:t,cwd:e.cwd,ok:true,data:{version:Be.version}})};if(t==="help"){let i=$f(r[0]);return i.ok?{exitCode:0,envelope:k({command:t,cwd:e.cwd,ok:true,data:{topic:i.topic,topics:[...Ta],text:i.text,commands:["help","version","start","login","status","doctor","whoami","logout","org","workspace","init","setup","attach","detach","preflight","install","uninstall","sync","config","update","daemon","bridge","open","search","memory","rule","skill","refresh","repair","cache","billing","team","invite","upgrade","reactivate"]}})}:{exitCode:64,envelope:k({command:t,cwd:e.cwd,ok:false,error:{code:"invalid_help_topic",message:i.message}})}}if(t==="login")try{let i=await to({env:e.env,fetch:e.fetch??fetch,sleep:e.sleep??Zf});return {exitCode:0,envelope:k({command:t,cwd:e.cwd,ok:!0,data:{user_id:i.session.user.id,email:i.session.user.email??null,expires_at:i.session.expires_at}})}}catch(i){let s=i instanceof je?i.code:"login_failed";return {exitCode:1,envelope:k({command:t,cwd:e.cwd,ok:false,error:{code:s,message:i instanceof Error?i.message:String(i)}})}}if(t==="start")return h0(e);if(t==="daemon")return f0(e,r);if(t==="bridge")return g0(e,r[0]??"pair");if(t==="open")return Uf(e,r);if(t==="search")return wE(e,r);if(t==="memory"||t==="rule"||t==="skill")return _E(t,e,r);if(t==="refresh")return yE(e,r);if(t==="repair")return kE(e);if(t==="cache")return bE(e,r,n.yes);if(t==="invite")return oE(e,r);if(t==="team")return aE(e,r);if(t==="billing"||t==="upgrade"||t==="reactivate")return sE(t,e,r);if(t==="whoami"){let i=await Ce(e.env);return i?{exitCode:0,envelope:k({command:t,cwd:e.cwd,ok:true,data:{user_id:i.session.user.id,email:i.session.user.email??null,expires_at:i.session.expires_at,...await QC(e.env)}})}:{exitCode:1,envelope:k({command:t,cwd:e.cwd,ok:false,error:{code:"not_authenticated",message:"Pathrule CLI is not signed in.",remediation:[{label:"Sign in",command:"pathrule login"}]}})}}if(t==="logout"){let i=await no(e.env);return {exitCode:0,envelope:k({command:t,cwd:e.cwd,ok:true,data:i})}}return t==="org"?m0(e,r[0]??"list",r.slice(1)):t==="workspace"?r0(e,r[0]??"list",r.slice(1)):t==="init"?n0(e,r[0]):t==="setup"?i0(e,r,n.yes):t==="attach"?s0(e,r[0]):t==="detach"?o0(e,r[0]):t==="preflight"?a0(e,r[0]):t==="install"?l0(e,r[0]):t==="uninstall"?c0(e,r[0]):t==="sync"?u0(e,r):t==="config"?d0(e,r[0],r[1],r[2]):t==="update"?p0(e):t==="status"?t0(e):t==="doctor"?YC(e,r):t==="__scaffold"?{exitCode:0,envelope:k({command:t,cwd:e.cwd,ok:true,data:{status:"not_implemented",phase:"m31a_cli_foundation"},next_steps:ZC(t)})}:{exitCode:64,envelope:k({command:t,cwd:e.cwd,ok:false,error:{code:"unknown_command",message:`Unknown command "${t}".`,remediation:[{label:"Show help",command:"pathrule help"}]}})}}async function YC(t,e){try{if(e.includes("--bundle")){let n=await Uo(t.env,t.cwd);return {exitCode:n.ok?0:1,envelope:k({command:"doctor --bundle",cwd:t.cwd,ok:n.ok,data:{path:n.path,report:n.report}})}}let r=await Me(t.env,t.cwd);return await XC(t.env,r.managed_files),{exitCode:r.ok?0:1,envelope:k({command:"doctor",cwd:t.cwd,ok:r.ok,data:r})}}catch(r){return {exitCode:1,envelope:k({command:"doctor",cwd:t.cwd,ok:false,error:{code:V(r,"doctor_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function XC(t,e){e.some(r=>r.status==="other_owner"||r.status==="newer_version")&&(await Xr(t,{eventName:"managed_file_owner_conflict",result:"blocked",appVersion:Be.version,featureTag:"managed_files",blockingReason:"managed_file_owner_conflict"}).catch(()=>{}),await Xr(t,{eventName:"dead_end_seen",result:"blocked",appVersion:Be.version,featureTag:"managed_files",blockingReason:"managed_file_owner_conflict"}).catch(()=>{}));}function ZC(t){if(t==="status"||t==="doctor"||t==="whoami")return [{label:"Continue M31a implementation",command:"pathrule login"}]}async function QC(t){try{let[e,r,n]=await Promise.all([we(t),D(t),M(t)]);return {organizations:e,current_org:r,current_workspace:n}}catch(e){return {context_error:e instanceof Error?e.message:String(e)}}}async function e0(t){let e=await M(t);if(!e)throw new Error("workspace_required");return e}async function t0(t){try{let e=await Df(t);return {exitCode:e.authenticated?0:1,envelope:k({command:"status",cwd:t.cwd,ok:e.authenticated,data:e,error:e.authenticated?void 0:{code:"not_authenticated",message:"Pathrule CLI is not signed in.",remediation:[{label:"Sign in",command:"pathrule login"}]}})}}catch(e){return {exitCode:1,envelope:k({command:"status",cwd:t.cwd,ok:false,error:{code:V(e,"status_failed"),message:e instanceof Error?e.message:String(e)}})}}}async function r0(t,e,r){try{if(e==="inspect"){let i=await va(t);return {exitCode:0,envelope:k({command:"workspace inspect",cwd:t.cwd,ok:!0,data:i})}}if(e==="open"){let i=await gr(t);if(!i)throw new Error("workspace_required");let s=await qi(i.id,t.env,{preferDesktopApp:r.includes("--desktop-app"),forceWeb:r.includes("--web")});return {exitCode:0,envelope:k({command:"workspace open",cwd:t.cwd,ok:!0,data:s})}}if(e==="create"){let i=await ae("create_workspace",t.env);if(!i.allowed){let s=ar(i);return {exitCode:1,envelope:k({command:"workspace create",cwd:t.cwd,ok:!1,data:{preflight:i},error:{code:i.blocking_reason??"preflight_blocked",message:s.summary},next_steps:Ki(s)})}}}let n=e==="current"?await e0(t.env):e==="use"?await Zr(r[0]??"",t.env):e==="create"?await bt(r[0]??"",t.cwd,t.env):e==="attach"?await xe(r[0],t.cwd,t.env):e==="detach"?await Qr(r[0],t.env):await Re(t.env);return {exitCode:0,envelope:k({command:`workspace ${e}`,cwd:t.cwd,ok:!0,data:n})}}catch(n){return {exitCode:1,envelope:k({command:`workspace ${e}`,cwd:t.cwd,ok:false,error:{code:V(n,"workspace_command_failed"),message:n instanceof Error?n.message:String(n)}})}}}async function n0(t,e){try{let r=await ae("create_workspace",t.env);if(!r.allowed){let i=ar(r);return {exitCode:1,envelope:k({command:"init",cwd:t.cwd,ok:!1,data:{preflight:r},error:{code:r.blocking_reason??"preflight_blocked",message:i.summary},next_steps:Ki(i)})}}let n=await bt(e??Qf(t.cwd),t.cwd,t.env);return {exitCode:0,envelope:k({command:"init",cwd:t.cwd,ok:!0,data:n})}}catch(r){return {exitCode:1,envelope:k({command:"init",cwd:t.cwd,ok:false,error:{code:V(r,"init_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function i0(t,e,r){try{let n=await hr(e,t.cwd,t.env,{yes:r});return {exitCode:0,envelope:k({command:"setup",cwd:t.cwd,ok:!0,data:n})}}catch(n){let i=V(n,"setup_failed");return {exitCode:i.startsWith("unknown_setup_option")||i.startsWith("missing_value")||i==="setup_requires_yes"?64:1,envelope:k({command:"setup",cwd:t.cwd,ok:false,error:{code:i,message:n instanceof Error?n.message:String(n)}})}}}async function s0(t,e){try{let r=await xe(e,t.cwd,t.env);return {exitCode:0,envelope:k({command:"attach",cwd:t.cwd,ok:!0,data:r})}}catch(r){return {exitCode:1,envelope:k({command:"attach",cwd:t.cwd,ok:false,error:{code:V(r,"attach_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function o0(t,e){try{let r=await Qr(e,t.env);return {exitCode:0,envelope:k({command:"detach",cwd:t.cwd,ok:!0,data:r})}}catch(r){return {exitCode:1,envelope:k({command:"detach",cwd:t.cwd,ok:false,error:{code:V(r,"detach_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function a0(t,e){if(!e||!Vo(e))return {exitCode:64,envelope:k({command:"preflight",cwd:t.cwd,ok:false,error:{code:"invalid_preflight_action",message:"Usage: pathrule preflight <create_workspace|write_memory|write_rule|write_skill|sync_agents|materialize_skills>"}})};try{let r=await ae(e,t.env),n=r.allowed?null:ar(r);return {exitCode:r.allowed?0:1,envelope:k({command:`preflight ${e}`,cwd:t.cwd,ok:r.allowed,data:r,error:r.allowed?void 0:{code:r.blocking_reason??"preflight_blocked",message:n?.summary??"Preflight blocked."},next_steps:n?Ki(n):void 0})}}catch(r){return {exitCode:1,envelope:k({command:`preflight ${e}`,cwd:t.cwd,ok:false,error:{code:V(r,"preflight_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function l0(t,e){try{let r=await Ze(e,t.env);return {exitCode:r.every(n=>n.ok)?0:1,envelope:k({command:"install",cwd:t.cwd,ok:r.every(n=>n.ok),data:r})}}catch(r){return {exitCode:r instanceof Error&&r.message==="invalid_install_target"?64:1,envelope:k({command:"install",cwd:t.cwd,ok:false,error:{code:r instanceof Error?r.message:"install_failed",message:r instanceof Error?r.message:String(r)}})}}}async function c0(t,e){try{let r=await Xo(e);return {exitCode:r.every(n=>n.ok)?0:1,envelope:k({command:"uninstall",cwd:t.cwd,ok:r.every(n=>n.ok),data:r})}}catch(r){return {exitCode:r instanceof Error&&r.message==="invalid_install_target"?64:1,envelope:k({command:"uninstall",cwd:t.cwd,ok:false,error:{code:r instanceof Error?r.message:"uninstall_failed",message:r instanceof Error?r.message:String(r)}})}}}async function u0(t,e){try{let r=await Le(t.env,t.cwd,{skillsOnly:e.includes("--skills")});return {exitCode:r.ok?0:1,envelope:k({command:"sync",cwd:t.cwd,ok:r.ok,data:r,error:r.ok?void 0:{code:r.error??"sync_failed",message:r.error??"Pathrule sync failed."}})}}catch(r){return {exitCode:1,envelope:k({command:"sync",cwd:t.cwd,ok:false,error:{code:V(r,"sync_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function d0(t,e,r,n){try{if(e==="get"&&r){let i=await kt(r,t.env);return {exitCode:0,envelope:k({command:`config get ${r}`,cwd:t.cwd,ok:!0,data:i})}}if(e==="set"&&r&&n){let i=await uo(r,n,t.env);return {exitCode:0,envelope:k({command:`config set ${r}`,cwd:t.cwd,ok:!0,data:i})}}if(e==="reset"&&r){let i=await po(r,t.env);return {exitCode:0,envelope:k({command:`config reset ${r}`,cwd:t.cwd,ok:!0,data:i})}}return {exitCode:64,envelope:k({command:"config",cwd:t.cwd,ok:!1,error:{code:"invalid_config_command",message:"Usage: pathrule config get <update.policy|suggestions.desktop|telemetry.enabled|telemetry.id> OR pathrule config set update.policy manual|notify|auto OR pathrule config set suggestions.desktop true|false OR pathrule config set telemetry.enabled true|false OR pathrule config reset telemetry-id"}})}}catch(i){return {exitCode:i instanceof Error&&i.message.startsWith("invalid_")?64:1,envelope:k({command:"config",cwd:t.cwd,ok:false,error:{code:i instanceof Error?i.message:"config_failed",message:i instanceof Error?i.message:String(i)}})}}}async function p0(t){let e=await Li(Be.version,t.env,t.fetch??fetch);return {exitCode:0,envelope:k({command:"update",cwd:t.cwd,ok:true,data:e})}}async function f0(t,e){let r=e[0]??"status";try{if(r==="run")throw new Error("daemon_run_not_available_in_json_mode");if(r==="autostart"||r==="toggle"){let i=r==="toggle"?"toggle":e[1]??"status",s=await Pe(t.env),o=i==="status"?s:i==="on"||i==="enable"?await Qe(t.env,!0):i==="off"||i==="disable"?await Qe(t.env,!1):i==="toggle"?await Qe(t.env,!s.enabled):null;if(!o)throw new Error("invalid_daemon_command");return {exitCode:o.supported?0:1,envelope:k({command:r==="toggle"?"daemon toggle":`daemon autostart ${i}`,cwd:t.cwd,ok:o.supported,data:o,error:o.supported?void 0:{code:"daemon_autostart_unsupported",message:o.reason??"Daemon autostart is not supported on this platform."}})}}let n=r==="start"?await pr(Ae(t.env)):r==="stop"?await hn(t.env):r==="status"?await We(t.env):null;if(!n)throw new Error("invalid_daemon_command");return {exitCode:0,envelope:k({command:`daemon ${r}`,cwd:t.cwd,ok:!0,data:n})}}catch(n){let i=n instanceof Error?n.message:"daemon_failed";return {exitCode:i==="invalid_daemon_command"?64:1,envelope:k({command:`daemon ${r}`,cwd:t.cwd,ok:false,error:{code:i,message:n instanceof Error?n.message:String(n)}})}}}async function h0(t){try{let e=await pr(Ae(t.env));return {exitCode:0,envelope:k({command:"start",cwd:t.cwd,ok:!0,data:e})}}catch(e){let r=e instanceof Error?e.message:"start_failed";return {exitCode:1,envelope:k({command:"start",cwd:t.cwd,ok:false,error:{code:r,message:e instanceof Error?e.message:String(e)}})}}}async function g0(t,e){try{if(e!=="pair")throw new Error("invalid_bridge_command");let r=Ae(t.env),n=await hi(r,!1),i=(await zi(r)).status;if(!i.state?.daemon_session_id)throw new Error("daemon_session_missing");let s=await Co({env:r,daemonSessionId:i.state.daemon_session_id,user:n,verifyReauth:!1});return {exitCode:0,envelope:k({command:"bridge pair",cwd:t.cwd,ok:!0,data:s})}}catch(r){let n=r instanceof Y||r instanceof tr?r.code:r instanceof Error?r.message:"bridge_pair_failed";return {exitCode:n==="invalid_bridge_command"?64:1,envelope:k({command:`bridge ${e}`,cwd:t.cwd,ok:false,error:{code:n,message:r instanceof Error?r.message:String(r)}})}}}async function m0(t,e,r){try{let n=e==="current"?await D(t.env):e==="use"?await fi(r[0]??"",t.env):e==="open"?await _0(t,r[0]):await we(t.env);return {exitCode:0,envelope:k({command:`org ${e}`,cwd:t.cwd,ok:!0,data:n})}}catch(n){return {exitCode:1,envelope:k({command:`org ${e}`,cwd:t.cwd,ok:false,error:{code:V(n,"org_command_failed"),message:n instanceof Error?n.message:String(n)}})}}}async function _0(t,e){let r=await D(t.env);if(!r)throw new Error("org_required");let n=Kf(e);return {org_id:r.id,slug:r.slug,name:r.name,role:r.role,billing:r.billing,url:ee(r,t.env,n),opened:false}}async function Df(t){let e=await Ce(t.env);if(!e)return {authenticated:false,user:null,organization:null,workspace:null,cwd_workspace_match:null};let r=await D(t.env),n=await M(t.env),i=await Re(t.env),s=Bf(i,t.cwd),o=s??n;return {authenticated:true,user:{id:e.session.user.id,email:e.session.user.email??null,expires_at:e.session.expires_at},organization:r,workspace:o,selected_workspace:n,cwd_workspace_match:s}}async function w0(t,e,r,n){try{if(t==="current"){let s=await M(r.env);return s?(r.stdout.write(`${g("ok",n)} ${s.name}
313
+ `),o=0;break;case "start":o=await AE(e,s);break;case "login":o=await pf(e,s,n.flags.browserCallback);break;case "org":o=await uR(n.positional[1]??"list",n.positional.slice(2),e,s);break;case "workspace":o=await tE(n.positional[1]??"list",n.positional.slice(2),e,s);break;case "init":o=await rE(n.positional[1],e,s);break;case "setup":o=await nE(e,s,n.positional.slice(1),n.flags.yes);break;case "attach":o=await bE(n.positional[1],e,s);break;case "detach":o=await vE(n.positional[1],e,s);break;case "preflight":o=await SE(n.positional[1],e,s);break;case "install":o=await CE(n.positional[1],e,s);break;case "uninstall":o=await EE(n.positional[1],e,s);break;case "sync":o=await RE(n.positional.slice(1),e,s);break;case "config":o=await xE(n.positional[1],n.positional[2],n.positional[3],e,s);break;case "update":o=await PE(e,s);break;case "daemon":o=await IE(n.positional.slice(1),e,s);break;case "bridge":o=await $E(n.positional[1]??"pair",e,s);break;case "open":o=await Zh(n.positional.slice(1),e,s);break;case "search":o=await ZE(n.positional.slice(1),e,s);break;case "memory":case "rule":case "skill":o=await XE(i,n.positional.slice(1),e,s);break;case "refresh":o=await QE(n.positional.slice(1),e,s);break;case "snapshot":o=await LE(n.positional.slice(1),e,s);break;case "repair":o=await eR(e,s);break;case "cache":o=await tR(n.positional.slice(1),e,s,n.flags.yes);break;case "billing":case "team":case "invite":case "upgrade":case "reactivate":o=i==="invite"?await FE(n.positional.slice(1),e,s):i==="team"?await HE(n.positional.slice(1),e,s):await BE(i,n.positional.slice(1),e,s);break;case "status":o=await jE(e,s);break;case "doctor":o=await DE(n.positional.slice(1),e,s);break;case "whoami":o=await WE(e,s);break;case "logout":o=await kR(e,s);break;default:e.stderr.write(`${g("error",s)} Unknown command "${i}". Run pathrule help.
314
+ `),o=64;}return i!=="update"&&i!=="login"&&i!=="logout"&&await TE(e,s),await lo(e.env,{command:i,exitCode:o,appVersion:Be.version,durationMs:Date.now()-r}),o}async function O0(t,e,r,n={yes:false}){if(t==="version")return {exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:true,data:{version:Be.version}})};if(t==="help"){let s=Kh(r[0]);return s.ok?{exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:true,data:{topic:s.topic,topics:[...ja],text:s.text,commands:["help","version","start","login","status","doctor","whoami","logout","org","workspace","init","setup","attach","detach","preflight","install","uninstall","sync","config","update","daemon","bridge","open","search","memory","rule","skill","refresh","repair","cache","billing","team","invite","upgrade","reactivate"]}})}:{exitCode:64,envelope:y({command:t,cwd:e.cwd,ok:false,error:{code:"invalid_help_topic",message:s.message}})}}if(t==="login")try{let s=await so({env:e.env,fetch:e.fetch??fetch,sleep:e.sleep??hf});return {exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:!0,data:{user_id:s.session.user.id,email:s.session.user.email??null,expires_at:s.session.expires_at}})}}catch(s){let i=s instanceof je?s.code:"login_failed";return {exitCode:1,envelope:y({command:t,cwd:e.cwd,ok:false,error:{code:i,message:s instanceof Error?s.message:String(s)}})}}if(t==="start")return X0(e);if(t==="daemon")return Y0(e,r);if(t==="bridge")return Z0(e,r[0]??"pair");if(t==="open")return Qh(e,r);if(t==="search")return nR(e,r);if(t==="memory"||t==="rule"||t==="skill")return rR(t,e,r);if(t==="refresh")return sR(e,r);if(t==="repair")return iR(e);if(t==="cache")return oR(e,r,n.yes);if(t==="invite")return zE(e,r);if(t==="team")return JE(e,r);if(t==="billing"||t==="upgrade"||t==="reactivate")return qE(t,e,r);if(t==="whoami"){let s=await Ce(e.env);return s?{exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:true,data:{user_id:s.session.user.id,email:s.session.user.email??null,expires_at:s.session.expires_at,...await j0(e.env)}})}:{exitCode:1,envelope:y({command:t,cwd:e.cwd,ok:false,error:{code:"not_authenticated",message:"Pathrule CLI is not signed in.",remediation:[{label:"Sign in",command:"pathrule login"}]}})}}if(t==="logout"){let s=await oo(e.env);return {exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:true,data:s})}}return t==="org"?Q0(e,r[0]??"list",r.slice(1)):t==="workspace"?U0(e,r[0]??"list",r.slice(1)):t==="init"?W0(e,r[0]):t==="setup"?B0(e,r,n.yes):t==="attach"?F0(e,r[0]):t==="detach"?H0(e,r[0]):t==="preflight"?q0(e,r[0]):t==="install"?z0(e,r[0]):t==="uninstall"?J0(e,r[0]):t==="sync"?K0(e,r):t==="config"?V0(e,r[0],r[1],r[2]):t==="update"?G0(e):t==="status"?L0(e):t==="doctor"?$0(e,r):t==="__scaffold"?{exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:true,data:{status:"not_implemented",phase:"m31a_cli_foundation"},next_steps:D0(t)})}:{exitCode:64,envelope:y({command:t,cwd:e.cwd,ok:false,error:{code:"unknown_command",message:`Unknown command "${t}".`,remediation:[{label:"Show help",command:"pathrule help"}]}})}}async function $0(t,e){try{if(e.includes("--bundle")){let n=await Fo(t.env,t.cwd);return {exitCode:n.ok?0:1,envelope:y({command:"doctor --bundle",cwd:t.cwd,ok:n.ok,data:{path:n.path,report:n.report}})}}let r=await Me(t.env,t.cwd);return await N0(t.env,r.managed_files),{exitCode:r.ok?0:1,envelope:y({command:"doctor",cwd:t.cwd,ok:r.ok,data:r})}}catch(r){return {exitCode:1,envelope:y({command:"doctor",cwd:t.cwd,ok:false,error:{code:V(r,"doctor_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function N0(t,e){e.some(r=>r.status==="other_owner"||r.status==="newer_version")&&(await Qr(t,{eventName:"managed_file_owner_conflict",result:"blocked",appVersion:Be.version,featureTag:"managed_files",blockingReason:"managed_file_owner_conflict"}).catch(()=>{}),await Qr(t,{eventName:"dead_end_seen",result:"blocked",appVersion:Be.version,featureTag:"managed_files",blockingReason:"managed_file_owner_conflict"}).catch(()=>{}));}function D0(t){if(t==="status"||t==="doctor"||t==="whoami")return [{label:"Continue M31a implementation",command:"pathrule login"}]}async function j0(t){try{let[e,r,n]=await Promise.all([we(t),j(t),$(t)]);return {organizations:e,current_org:r,current_workspace:n}}catch(e){return {context_error:e instanceof Error?e.message:String(e)}}}async function M0(t){let e=await $(t);if(!e)throw new Error("workspace_required");return e}async function L0(t){try{let e=await Gh(t);return {exitCode:e.authenticated?0:1,envelope:y({command:"status",cwd:t.cwd,ok:e.authenticated,data:e,error:e.authenticated?void 0:{code:"not_authenticated",message:"Pathrule CLI is not signed in.",remediation:[{label:"Sign in",command:"pathrule login"}]}})}}catch(e){return {exitCode:1,envelope:y({command:"status",cwd:t.cwd,ok:false,error:{code:V(e,"status_failed"),message:e instanceof Error?e.message:String(e)}})}}}async function U0(t,e,r){try{if(e==="inspect"){let s=await Ta(t);return {exitCode:0,envelope:y({command:"workspace inspect",cwd:t.cwd,ok:!0,data:s})}}if(e==="open"){let s=await _r(t);if(!s)throw new Error("workspace_required");let i=await Ks(s.id,t.env,{preferDesktopApp:r.includes("--desktop-app"),forceWeb:r.includes("--web")});return {exitCode:0,envelope:y({command:"workspace open",cwd:t.cwd,ok:!0,data:i})}}if(e==="create"){let s=await ae("create_workspace",t.env);if(!s.allowed){let i=lr(s);return {exitCode:1,envelope:y({command:"workspace create",cwd:t.cwd,ok:!1,data:{preflight:s},error:{code:s.blocking_reason??"preflight_blocked",message:i.summary},next_steps:Ys(i)})}}}let n=e==="current"?await M0(t.env):e==="use"?await en(r[0]??"",t.env):e==="create"?await vt(r[0]??"",t.cwd,t.env):e==="attach"?await xe(r[0],t.cwd,t.env):e==="detach"?await tn(r[0],t.env):await Re(t.env);return {exitCode:0,envelope:y({command:`workspace ${e}`,cwd:t.cwd,ok:!0,data:n})}}catch(n){return {exitCode:1,envelope:y({command:`workspace ${e}`,cwd:t.cwd,ok:false,error:{code:V(n,"workspace_command_failed"),message:n instanceof Error?n.message:String(n)}})}}}async function W0(t,e){try{let r=await ae("create_workspace",t.env);if(!r.allowed){let s=lr(r);return {exitCode:1,envelope:y({command:"init",cwd:t.cwd,ok:!1,data:{preflight:r},error:{code:r.blocking_reason??"preflight_blocked",message:s.summary},next_steps:Ys(s)})}}let n=await vt(e??ff(t.cwd),t.cwd,t.env);return {exitCode:0,envelope:y({command:"init",cwd:t.cwd,ok:!0,data:n})}}catch(r){return {exitCode:1,envelope:y({command:"init",cwd:t.cwd,ok:false,error:{code:V(r,"init_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function B0(t,e,r){try{let n=await mr(e,t.cwd,t.env,{yes:r});return {exitCode:0,envelope:y({command:"setup",cwd:t.cwd,ok:!0,data:n})}}catch(n){let s=V(n,"setup_failed");return {exitCode:s.startsWith("unknown_setup_option")||s.startsWith("missing_value")||s==="setup_requires_yes"?64:1,envelope:y({command:"setup",cwd:t.cwd,ok:false,error:{code:s,message:n instanceof Error?n.message:String(n)}})}}}async function F0(t,e){try{let r=await xe(e,t.cwd,t.env);return {exitCode:0,envelope:y({command:"attach",cwd:t.cwd,ok:!0,data:r})}}catch(r){return {exitCode:1,envelope:y({command:"attach",cwd:t.cwd,ok:false,error:{code:V(r,"attach_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function H0(t,e){try{let r=await tn(e,t.env);return {exitCode:0,envelope:y({command:"detach",cwd:t.cwd,ok:!0,data:r})}}catch(r){return {exitCode:1,envelope:y({command:"detach",cwd:t.cwd,ok:false,error:{code:V(r,"detach_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function q0(t,e){if(!e||!Xo(e))return {exitCode:64,envelope:y({command:"preflight",cwd:t.cwd,ok:false,error:{code:"invalid_preflight_action",message:"Usage: pathrule preflight <create_workspace|write_memory|write_rule|write_skill|sync_agents|materialize_skills>"}})};try{let r=await ae(e,t.env),n=r.allowed?null:lr(r);return {exitCode:r.allowed?0:1,envelope:y({command:`preflight ${e}`,cwd:t.cwd,ok:r.allowed,data:r,error:r.allowed?void 0:{code:r.blocking_reason??"preflight_blocked",message:n?.summary??"Preflight blocked."},next_steps:n?Ys(n):void 0})}}catch(r){return {exitCode:1,envelope:y({command:`preflight ${e}`,cwd:t.cwd,ok:false,error:{code:V(r,"preflight_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function z0(t,e){try{let r=await Ze(e,t.env);return {exitCode:r.every(n=>n.ok)?0:1,envelope:y({command:"install",cwd:t.cwd,ok:r.every(n=>n.ok),data:r})}}catch(r){return {exitCode:r instanceof Error&&r.message==="invalid_install_target"?64:1,envelope:y({command:"install",cwd:t.cwd,ok:false,error:{code:r instanceof Error?r.message:"install_failed",message:r instanceof Error?r.message:String(r)}})}}}async function J0(t,e){try{let r=await ea(e);return {exitCode:r.every(n=>n.ok)?0:1,envelope:y({command:"uninstall",cwd:t.cwd,ok:r.every(n=>n.ok),data:r})}}catch(r){return {exitCode:r instanceof Error&&r.message==="invalid_install_target"?64:1,envelope:y({command:"uninstall",cwd:t.cwd,ok:false,error:{code:r instanceof Error?r.message:"uninstall_failed",message:r instanceof Error?r.message:String(r)}})}}}async function K0(t,e){try{let r=await Le(t.env,t.cwd,{skillsOnly:e.includes("--skills")});return {exitCode:r.ok?0:1,envelope:y({command:"sync",cwd:t.cwd,ok:r.ok,data:r,error:r.ok?void 0:{code:r.error??"sync_failed",message:r.error??"Pathrule sync failed."}})}}catch(r){return {exitCode:1,envelope:y({command:"sync",cwd:t.cwd,ok:false,error:{code:V(r,"sync_failed"),message:r instanceof Error?r.message:String(r)}})}}}async function V0(t,e,r,n){try{if(e==="get"&&r){let s=await bt(r,t.env);return {exitCode:0,envelope:y({command:`config get ${r}`,cwd:t.cwd,ok:!0,data:s})}}if(e==="set"&&r&&n){let s=await fo(r,n,t.env);return {exitCode:0,envelope:y({command:`config set ${r}`,cwd:t.cwd,ok:!0,data:s})}}if(e==="reset"&&r){let s=await go(r,t.env);return {exitCode:0,envelope:y({command:`config reset ${r}`,cwd:t.cwd,ok:!0,data:s})}}return {exitCode:64,envelope:y({command:"config",cwd:t.cwd,ok:!1,error:{code:"invalid_config_command",message:"Usage: pathrule config get <update.policy|suggestions.desktop|telemetry.enabled|telemetry.id> OR pathrule config set update.policy manual|notify|auto OR pathrule config set suggestions.desktop true|false OR pathrule config set telemetry.enabled true|false OR pathrule config reset telemetry-id"}})}}catch(s){return {exitCode:s instanceof Error&&s.message.startsWith("invalid_")?64:1,envelope:y({command:"config",cwd:t.cwd,ok:false,error:{code:s instanceof Error?s.message:"config_failed",message:s instanceof Error?s.message:String(s)}})}}}async function G0(t){let e=await Bs(Be.version,t.env,t.fetch??fetch);return {exitCode:0,envelope:y({command:"update",cwd:t.cwd,ok:true,data:e})}}async function Y0(t,e){let r=e[0]??"status";try{if(r==="run")throw new Error("daemon_run_not_available_in_json_mode");if(r==="autostart"||r==="toggle"){let s=r==="toggle"?"toggle":e[1]??"status",i=await Pe(t.env),o=s==="status"?i:s==="on"||s==="enable"?await Qe(t.env,!0):s==="off"||s==="disable"?await Qe(t.env,!1):s==="toggle"?await Qe(t.env,!i.enabled):null;if(!o)throw new Error("invalid_daemon_command");return {exitCode:o.supported?0:1,envelope:y({command:r==="toggle"?"daemon toggle":`daemon autostart ${s}`,cwd:t.cwd,ok:o.supported,data:o,error:o.supported?void 0:{code:"daemon_autostart_unsupported",message:o.reason??"Daemon autostart is not supported on this platform."}})}}let n=r==="start"?await hr(Ae(t.env)):r==="stop"?await mn(t.env):r==="status"?await We(t.env):null;if(!n)throw new Error("invalid_daemon_command");return {exitCode:0,envelope:y({command:`daemon ${r}`,cwd:t.cwd,ok:!0,data:n})}}catch(n){let s=n instanceof Error?n.message:"daemon_failed";return {exitCode:s==="invalid_daemon_command"?64:1,envelope:y({command:`daemon ${r}`,cwd:t.cwd,ok:false,error:{code:s,message:n instanceof Error?n.message:String(n)}})}}}async function X0(t){try{let e=await hr(Ae(t.env));return {exitCode:0,envelope:y({command:"start",cwd:t.cwd,ok:!0,data:e})}}catch(e){let r=e instanceof Error?e.message:"start_failed";return {exitCode:1,envelope:y({command:"start",cwd:t.cwd,ok:false,error:{code:r,message:e instanceof Error?e.message:String(e)}})}}}async function Z0(t,e){try{if(e!=="pair")throw new Error("invalid_bridge_command");let r=Ae(t.env),n=await _s(r,!1),s=(await Vs(r)).status;if(!s.state?.daemon_session_id)throw new Error("daemon_session_missing");let i=await xo({env:r,daemonSessionId:s.state.daemon_session_id,user:n,verifyReauth:!1});return {exitCode:0,envelope:y({command:"bridge pair",cwd:t.cwd,ok:!0,data:i})}}catch(r){let n=r instanceof Y||r instanceof rr?r.code:r instanceof Error?r.message:"bridge_pair_failed";return {exitCode:n==="invalid_bridge_command"?64:1,envelope:y({command:`bridge ${e}`,cwd:t.cwd,ok:false,error:{code:n,message:r instanceof Error?r.message:String(r)}})}}}async function Q0(t,e,r){try{let n=e==="current"?await j(t.env):e==="use"?await ms(r[0]??"",t.env):e==="open"?await eE(t,r[0]):await we(t.env);return {exitCode:0,envelope:y({command:`org ${e}`,cwd:t.cwd,ok:!0,data:n})}}catch(n){return {exitCode:1,envelope:y({command:`org ${e}`,cwd:t.cwd,ok:false,error:{code:V(n,"org_command_failed"),message:n instanceof Error?n.message:String(n)}})}}}async function eE(t,e){let r=await j(t.env);if(!r)throw new Error("org_required");let n=lf(e);return {org_id:r.id,slug:r.slug,name:r.name,role:r.role,billing:r.billing,url:ee(r,t.env,n),opened:false}}async function Gh(t){let e=await Ce(t.env);if(!e)return {authenticated:false,user:null,organization:null,workspace:null,cwd_workspace_match:null};let r=await j(t.env),n=await $(t.env),s=await Re(t.env),i=tf(s,t.cwd),o=i??n;return {authenticated:true,user:{id:e.session.user.id,email:e.session.user.email??null,expires_at:e.session.expires_at},organization:r,workspace:o,selected_workspace:n,cwd_workspace_match:i}}async function tE(t,e,r,n){try{if(t==="current"){let i=await $(r.env);return i?(r.stdout.write(`${g("ok",n)} ${i.name}
314
315
  `),0):(r.stdout.write(`${g("warn",n)} No current workspace selected. Run pathrule workspace use <name-or-id>.
315
- `),1)}if(t==="use"){let s=e[0];if(!s)return r.stderr.write(`${g("error",n)} Usage: pathrule workspace use <name-or-id>
316
- `),64;let o=await Zr(s,r.env);return r.stdout.write(`${g("ok",n)} Current workspace: ${o.name}
317
- `),0}if(t==="inspect"){let s=await va(r);r.stdout.write(`${g("ok",n)} Workspace: ${s.workspace.name}
318
- `),r.stdout.write(`${g("info",n)} Organization: ${s.organization.slug} (${s.organization.plan}, ${s.organization.role})
319
- `),r.stdout.write(`${g("info",n)} Access mode: ${s.workspace.access_mode}
320
- `),r.stdout.write(`${g("info",n)} Local root: ${s.local_status.attached_root??"not attached on this machine"}
321
- `),r.stdout.write(`${g("info",n)} Current folder: ${s.local_status.current_folder_attached?"attached":s.local_status.attached_elsewhere?`not attached (workspace is attached at ${s.local_status.attached_root})`:"not attached"}
322
- `),r.stdout.write(`${g("info",n)} Git: ${s.workspace.git_owner&&s.workspace.git_repo?`${s.workspace.git_owner}/${s.workspace.git_repo}`:s.workspace.git_remote_url??"none"}
323
- `),r.stdout.write(`${g(s.cloud_tree.root_node_present?"info":"warn",n)} Cloud tree: ${s.cloud_tree.nodes} nodes, ${s.cloud_tree.memories} memories, ${s.cloud_tree.rules} rules, ${s.cloud_tree.skills} skills${s.cloud_tree.root_node_present?"":" (workspace root node missing)"}
324
- `),r.stdout.write(`${g("info",n)} Capacity: workspaces ${Ea(s.capacity.workspaces.used,s.capacity.workspaces.limit)}, memories ${Ea(s.capacity.memories.used,s.capacity.memories.limit)}, rules ${Ea(s.capacity.rules.used,s.capacity.rules.limit)}
316
+ `),1)}if(t==="use"){let i=e[0];if(!i)return r.stderr.write(`${g("error",n)} Usage: pathrule workspace use <name-or-id>
317
+ `),64;let o=await en(i,r.env);return r.stdout.write(`${g("ok",n)} Current workspace: ${o.name}
318
+ `),0}if(t==="inspect"){let i=await Ta(r);r.stdout.write(`${g("ok",n)} Workspace: ${i.workspace.name}
319
+ `),r.stdout.write(`${g("info",n)} Organization: ${i.organization.slug} (${i.organization.plan}, ${i.organization.role})
320
+ `),r.stdout.write(`${g("info",n)} Access mode: ${i.workspace.access_mode}
321
+ `),r.stdout.write(`${g("info",n)} Local root: ${i.local_status.attached_root??"not attached on this machine"}
322
+ `),r.stdout.write(`${g("info",n)} Current folder: ${i.local_status.current_folder_attached?"attached":i.local_status.attached_elsewhere?`not attached (workspace is attached at ${i.local_status.attached_root})`:"not attached"}
323
+ `),r.stdout.write(`${g("info",n)} Git: ${i.workspace.git_owner&&i.workspace.git_repo?`${i.workspace.git_owner}/${i.workspace.git_repo}`:i.workspace.git_remote_url??"none"}
324
+ `),r.stdout.write(`${g(i.cloud_tree.root_node_present?"info":"warn",n)} Cloud tree: ${i.cloud_tree.nodes} nodes, ${i.cloud_tree.memories} memories, ${i.cloud_tree.rules} rules, ${i.cloud_tree.skills} skills${i.cloud_tree.root_node_present?"":" (workspace root node missing)"}
325
+ `),r.stdout.write(`${g("info",n)} Capacity: workspaces ${Oa(i.capacity.workspaces.used,i.capacity.workspaces.limit)}, memories ${Oa(i.capacity.memories.used,i.capacity.memories.limit)}, rules ${Oa(i.capacity.rules.used,i.capacity.rules.limit)}
325
326
  `),r.stdout.write(`${g("info",n)} Active clients:
326
- `);for(let o of s.active_clients){let a=[o.active?"active":"inactive",o.selected?"selected":null,o.detected?"workspace marker detected":null,o.machine_config_exists?"machine config present":"machine config missing"].filter(Boolean).join(", ");r.stdout.write(`${g("info",n)} - ${o.label}: ${a}
327
+ `);for(let o of i.active_clients){let a=[o.active?"active":"inactive",o.selected?"selected":null,o.detected?"workspace marker detected":null,o.machine_config_exists?"machine config present":"machine config missing"].filter(Boolean).join(", ");r.stdout.write(`${g("info",n)} - ${o.label}: ${a}
327
328
  `);}if(r.stdout.write(`${g("info",n)} Recent activity:
328
- `),s.recent_activity.length===0)r.stdout.write(`${g("info",n)} - No recent activity.
329
- `);else for(let o of s.recent_activity)r.stdout.write(`${g("info",n)} - ${o.created_at} ${o.domain}/${o.action} ${o.node_path} (${o.files_touched_total} files) ${o.task_summary}
330
- `);return 0}if(t==="open"){let s=e.includes("--desktop-app"),o=e.includes("--web"),a=await gr(r);if(!a)return r.stderr.write(`${g("error",n)} No workspace is attached to this folder and no current workspace is selected. Run pathrule attach or pathrule workspace use <name-or-id>.
331
- `),1;let l=await qi(a.id,r.env,{preferDesktopApp:s,forceWeb:o});return n.interactive&&!n.noOpen?(await Fe(r,l.url),r.stdout.write(`${g("ok",n)} Opened ${l.url}
329
+ `),i.recent_activity.length===0)r.stdout.write(`${g("info",n)} - No recent activity.
330
+ `);else for(let o of i.recent_activity)r.stdout.write(`${g("info",n)} - ${o.created_at} ${o.domain}/${o.action} ${o.node_path} (${o.files_touched_total} files) ${o.task_summary}
331
+ `);return 0}if(t==="open"){let i=e.includes("--desktop-app"),o=e.includes("--web"),a=await _r(r);if(!a)return r.stderr.write(`${g("error",n)} No workspace is attached to this folder and no current workspace is selected. Run pathrule attach or pathrule workspace use <name-or-id>.
332
+ `),1;let l=await Ks(a.id,r.env,{preferDesktopApp:i,forceWeb:o});return n.interactive&&!n.noOpen?(await Fe(r,l.url),r.stdout.write(`${g("ok",n)} Opened ${l.url}
332
333
  `)):r.stdout.write(`${l.url}
333
- `),0}if(t==="create"){let s=e[0];if(!s)return r.stderr.write(`${g("error",n)} Usage: pathrule workspace create <name>
334
- `),64;let o=await ae("create_workspace",r.env);if(!o.allowed)return Vi(o,r.stderr,n),1;let a=await bt(s,r.cwd,r.env);return r.stdout.write(`${g("ok",n)} Created ${a.workspace.name} and attached it to ${a.local_root_path}
335
- `),await mr(r,n),0}if(t==="attach"){let s=await xe(e[0],r.cwd,r.env);return r.stdout.write(`${g("ok",n)} Attached ${s.workspace.name} to ${s.local_root_path}
336
- `),await mr(r,n),0}if(t==="detach"){let s=await Qr(e[0],r.env);return r.stdout.write(`${g("ok",n)} Detached ${s.name} from this machine.
334
+ `),0}if(t==="create"){let i=e[0];if(!i)return r.stderr.write(`${g("error",n)} Usage: pathrule workspace create <name>
335
+ `),64;let o=await ae("create_workspace",r.env);if(!o.allowed)return Xs(o,r.stderr,n),1;let a=await vt(i,r.cwd,r.env);return r.stdout.write(`${g("ok",n)} Created ${a.workspace.name} and attached it to ${a.local_root_path}
336
+ `),await wr(r,n),0}if(t==="attach"){let i=await xe(e[0],r.cwd,r.env);return r.stdout.write(`${g("ok",n)} Attached ${i.workspace.name} to ${i.local_root_path}
337
+ `),await wr(r,n),0}if(t==="detach"){let i=await tn(e[0],r.env);return r.stdout.write(`${g("ok",n)} Detached ${i.name} from this machine.
337
338
  `),0}if(t!=="list")return r.stderr.write(`${g("error",n)} Unknown workspace command "${t}".
338
- `),64;let i=await Re(r.env);return i.length===0?(r.stdout.write(`${g("warn",n)} No workspaces found.
339
- `),0):(r.stdout.write(i.map(s=>`${s.current?"*":" "} ${s.id} ${s.name}`).join(`
339
+ `),64;let s=await Re(r.env);return s.length===0?(r.stdout.write(`${g("warn",n)} No workspaces found.
340
+ `),0):(r.stdout.write(s.map(i=>`${i.current?"*":" "} ${i.id} ${i.name}`).join(`
340
341
  `)+`
341
- `),0)}catch(i){return r.stderr.write(`${g("error",n)} ${i instanceof Error?i.message:String(i)}
342
- `),1}}async function y0(t,e,r){try{let n=await ae("create_workspace",e.env);if(!n.allowed)return Vi(n,e.stderr,r),1;let i=await bt(t??Qf(e.cwd),e.cwd,e.env);return e.stdout.write(`${g("ok",r)} Created ${i.workspace.name} and attached it to ${i.local_root_path}
343
- `),await mr(e,r),0}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
344
- `),1}}async function k0(t,e,r=[],n=false){if(r.length===0&&!n&&IE(t,e))return b0(t,e);try{let i=await hr(r,t.cwd,t.env,{yes:n}),s=i.plan;if(t.stdout.write(`Pathrule setup
345
- `),i.applied)return i.org_selected&&t.stdout.write(`${g("ok",e)} Organization selected.
346
- `),i.workspace_action==="created"?t.stdout.write(`${g("ok",e)} Workspace created and attached to this folder.
347
- `):i.workspace_action==="attached"?t.stdout.write(`${g("ok",e)} Workspace attached to this folder.
348
- `):i.workspace_action==="selected"&&t.stdout.write(`${g("ok",e)} Workspace selected.
349
- `),i.install&&t.stdout.write(`${g("ok",e)} Local AI tool setup completed.
350
- `),i.sync&&t.stdout.write(`${g("ok",e)} Workspace files synced.
351
- `),jf(i.bootstrap_v2,t.stdout,e),Mf(i.beta_activation,t.stdout,e),i.bootstrap_v2&&t.stdout.write(`Next: run this in your AI tool: ${Hi}
342
+ `),0)}catch(s){return r.stderr.write(`${g("error",n)} ${s instanceof Error?s.message:String(s)}
343
+ `),1}}async function rE(t,e,r){try{let n=await ae("create_workspace",e.env);if(!n.allowed)return Xs(n,e.stderr,r),1;let s=await vt(t??ff(e.cwd),e.cwd,e.env);return e.stdout.write(`${g("ok",r)} Created ${s.workspace.name} and attached it to ${s.local_root_path}
344
+ `),await wr(e,r),0}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
345
+ `),1}}async function nE(t,e,r=[],n=false){if(r.length===0&&!n&&mR(t,e))return sE(t,e);try{let s=await mr(r,t.cwd,t.env,{yes:n}),i=s.plan;if(t.stdout.write(`Pathrule setup
346
+ `),s.applied)return s.org_selected&&t.stdout.write(`${g("ok",e)} Organization selected.
347
+ `),s.workspace_action==="created"?t.stdout.write(`${g("ok",e)} Workspace created and attached to this folder.
348
+ `):s.workspace_action==="attached"?t.stdout.write(`${g("ok",e)} Workspace attached to this folder.
349
+ `):s.workspace_action==="selected"&&t.stdout.write(`${g("ok",e)} Workspace selected.
350
+ `),s.install&&t.stdout.write(`${g("ok",e)} Local AI tool setup completed.
351
+ `),s.sync&&t.stdout.write(`${g("ok",e)} Workspace files synced.
352
+ `),Yh(s.bootstrap_v2,t.stdout,e),Xh(s.beta_activation,t.stdout,e),s.bootstrap_v2&&t.stdout.write(`Next: run this in your AI tool: ${Js}
352
353
  `),t.stdout.write(`Next: pathrule doctor
353
- `),await tt(t,e),await mr(t,e),0;if(!s.organization)return t.stdout.write(`${g("warn",e)} No organization selected.
354
+ `),await rt(t,e),await wr(t,e),0;if(!i.organization)return t.stdout.write(`${g("warn",e)} No organization selected.
354
355
  `),t.stdout.write(`Next: pathrule org list
355
- `),1;if(t.stdout.write(`${g("ok",e)} Organization: ${s.organization.slug}
356
- `),s.candidates.length===0)return t.stdout.write(`${g("info",e)} No matching workspace found.
356
+ `),1;if(t.stdout.write(`${g("ok",e)} Organization: ${i.organization.slug}
357
+ `),i.candidates.length===0)return t.stdout.write(`${g("info",e)} No matching workspace found.
357
358
  `),t.stdout.write(`Next: pathrule setup --create-workspace --yes
358
359
  `),t.stdout.write(`Other options: pathrule workspace list, pathrule org list
359
360
  `),0;t.stdout.write(`Workspace candidates:
360
- `),s.candidates.slice(0,5).forEach((l,c)=>{t.stdout.write(`${c+1}. ${l.recommended?"[recommended] ":""}${l.workspace_name} (${l.confidence}) - ${l.reason}
361
+ `),i.candidates.slice(0,5).forEach((l,c)=>{t.stdout.write(`${c+1}. ${l.recommended?"[recommended] ":""}${l.workspace_name} (${l.confidence}) - ${l.reason}
361
362
  `),t.stdout.write(` Attach: pathrule setup --workspace ${l.workspace_id} --yes
362
- `);});let a=s.candidates[0];return a?.confidence==="exact"||a?.confidence==="high"?t.stdout.write(`Next: pathrule setup --workspace ${a.workspace_id} --yes
363
+ `);});let a=i.candidates[0];return a?.confidence==="exact"||a?.confidence==="high"?t.stdout.write(`Next: pathrule setup --workspace ${a.workspace_id} --yes
363
364
  `):t.stdout.write(`Next: choose one candidate explicitly with pathrule setup --workspace <id> --yes
364
- `),0}catch(i){let s=V(i,"setup_failed");return t.stderr.write(`${g("error",e)} ${i instanceof Error?i.message:String(i)}
365
- `),s==="setup_requires_yes"?(t.stderr.write(`Next: rerun the setup command with --yes
366
- `),64):s.startsWith("unknown_setup_option")||s.startsWith("missing_value")?64:1}}async function b0(t,e){try{t.stdout.write(v0(e));let r=await S0(t,e);if(!r)return 1;let n=r.plan;t.stdout.write(`${g("ok",e)} Folder: ${t.cwd}
365
+ `),0}catch(s){let i=V(s,"setup_failed");return t.stderr.write(`${g("error",e)} ${s instanceof Error?s.message:String(s)}
366
+ `),i==="setup_requires_yes"?(t.stderr.write(`Next: rerun the setup command with --yes
367
+ `),64):i.startsWith("unknown_setup_option")||i.startsWith("missing_value")?64:1}}async function sE(t,e){try{t.stdout.write(iE(e));let r=await oE(t,e);if(!r)return 1;let n=r.plan;t.stdout.write(`${g("ok",e)} Folder: ${t.cwd}
367
368
  `),n.organization&&t.stdout.write(`${g("ok",e)} Organization: ${n.organization.slug}
368
- `);let i=await C0(n,t,e);if(!i)return t.stdout.write(`${g("info",e)} Setup canceled.
369
- `),0;let s=await hr(i,t.cwd,t.env,{yes:!0}),o=M0(s.workspace);if(!o)throw new Error("workspace_setup_failed");s.workspace_action==="created"?t.stdout.write(`${g("ok",e)} Workspace created and attached.
370
- `):s.workspace_action==="attached"&&t.stdout.write(`${g("ok",e)} Workspace attached to this folder.
371
- `),jf(s.bootstrap_v2,t.stdout,e),Mf(s.beta_activation,t.stdout,e);let a=await E0(t,e);if(a.length>0){await j0(t.env,o.workspaceId,a);for(let c of a){let u=await Ze(c,t.env);for(let d of u)d.ok?t.stdout.write(`${g("ok",e)} ${U[d.client].label} MCP installed.
369
+ `);let s=await aE(n,t,e);if(!s)return t.stdout.write(`${g("info",e)} Setup canceled.
370
+ `),0;let i=await mr(s,t.cwd,t.env,{yes:!0}),o=kE(i.workspace);if(!o)throw new Error("workspace_setup_failed");i.workspace_action==="created"?t.stdout.write(`${g("ok",e)} Workspace created and attached.
371
+ `):i.workspace_action==="attached"&&t.stdout.write(`${g("ok",e)} Workspace attached to this folder.
372
+ `),Yh(i.bootstrap_v2,t.stdout,e),Xh(i.beta_activation,t.stdout,e);let a=await lE(t,e);if(a.length>0){await yE(t.env,o.workspaceId,a);for(let c of a){let u=await Ze(c,t.env);for(let d of u)d.ok?t.stdout.write(`${g("ok",e)} ${U[d.client].label} MCP installed.
372
373
  `):t.stdout.write(`${g("warn",e)} ${U[d.client].label}: ${d.error??d.status}
373
374
  `);}let l=await Le(t.env,t.cwd);l.ok?t.stdout.write(`${g("ok",e)} Workspace files synced.
374
375
  `):t.stdout.write(`${g("warn",e)} ${l.error??"Workspace sync failed."}
375
- `),await x0(t,e,a);}else t.stdout.write(`${g("info",e)} AI tool setup skipped.
376
- `);return await P0(t,e),t.stdout.write(`Workspace: ${Ia(o.workspaceId,t.env)}
376
+ `),await uE(t,e,a);}else t.stdout.write(`${g("info",e)} AI tool setup skipped.
377
+ `);return await dE(t,e),t.stdout.write(`Workspace: ${La(o.workspaceId,t.env)}
377
378
  `),t.stdout.write(`Next: pathrule doctor
378
- `),await tt(t,e),await mr(t,e),0}catch(r){return t.stderr.write(`${g("error",e)} ${r instanceof Error?r.message:String(r)}
379
- `),1}}function v0(t){let e=["\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557","\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D","\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 ","\u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D ","\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557","\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"],r=t.color?"\x1B[36m":"",n=t.color?"\x1B[2m":"",i=t.color?"\x1B[0m":"";return ["",...e.map(s=>`${r}${s}${i}`),`${n}setup${i}`,""].join(`
380
- `)}function jf(t,e,r){if(!t)return;let n=t.candidate_counts,i=t.ok?"ok":"warn";e.write(`${g(i,r)} Bootstrap v2 prepared: ${n.memories} memory candidates, ${n.rules} rule candidates from ${t.coverage.docsFilesScanned} docs files and ${t.coverage.commitsScanned} commits.
381
- `);let s=t.warnings[0];s&&e.write(`${g("warn",r)} ${s}
382
- `);}async function S0(t,e){try{return await hr([],t.cwd,t.env,{yes:!1})}catch(r){if(!(r instanceof tr)||r.code!=="not_authenticated")throw r;return !await kn(t,"Pathrule CLI is not signed in. Sign in now?",true)||await Xf(t,e)!==0?null:hr([],t.cwd,t.env,{yes:false})}}async function C0(t,e,r){let n=t.candidates.slice(0,5);if(n.length===0){let a=basename(e.cwd)||"Workspace";return await kn(e,`Create a new workspace named "${a}" for this folder?`,true)?["--create-workspace"]:null}e.stdout.write(`Workspace candidates:
379
+ `),await rt(t,e),await wr(t,e),0}catch(r){return t.stderr.write(`${g("error",e)} ${r instanceof Error?r.message:String(r)}
380
+ `),1}}function iE(t){let e=["\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557","\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D","\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2557 ","\u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u255D ","\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557","\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D"],r=t.color?"\x1B[36m":"",n=t.color?"\x1B[2m":"",s=t.color?"\x1B[0m":"";return ["",...e.map(i=>`${r}${i}${s}`),`${n}setup${s}`,""].join(`
381
+ `)}function Yh(t,e,r){if(!t)return;let n=t.candidate_counts,s=t.ok?"ok":"warn";e.write(`${g(s,r)} Bootstrap v2 prepared: ${n.memories} memory candidates, ${n.rules} rule candidates from ${t.coverage.docsFilesScanned} docs files and ${t.coverage.commitsScanned} commits.
382
+ `);let i=t.warnings[0];i&&e.write(`${g("warn",r)} ${i}
383
+ `);}async function oE(t,e){try{return await mr([],t.cwd,t.env,{yes:!1})}catch(r){if(!(r instanceof rr)||r.code!=="not_authenticated")throw r;return !await Sn(t,"Pathrule CLI is not signed in. Sign in now?",true)||await pf(t,e)!==0?null:mr([],t.cwd,t.env,{yes:false})}}async function aE(t,e,r){let n=t.candidates.slice(0,5);if(n.length===0){let a=basename(e.cwd)||"Workspace";return await Sn(e,`Create a new workspace named "${a}" for this folder?`,true)?["--create-workspace"]:null}e.stdout.write(`Workspace candidates:
383
384
  `),n.forEach((a,l)=>{e.stdout.write(`${l+1}. ${a.recommended?"[recommended] ":""}${a.workspace_name} (${a.confidence}) - ${a.reason}
384
- `);});let i=n[0];if(i&&(i.confidence==="exact"||i.confidence==="high")&&await kn(e,`Attach "${i.workspace_name}" to this folder?`,true))return ["--workspace",i.workspace_id];let s=(await _r(e,`Choose workspace [1-${n.length}], c to create new, or q to cancel: `)).trim().toLowerCase();if(!s||s==="q")return null;if(s==="c"||s==="create")return ["--create-workspace"];let o=Number(s);return Number.isInteger(o)&&o>=1&&o<=n.length?["--workspace",n[o-1].workspace_id]:(e.stdout.write(`${g("warn",r)} Invalid selection; setup canceled.
385
- `),null)}async function E0(t,e){let r=Object.values(U).filter(c=>c.supported),n=await ze(t.cwd).catch(()=>[]),i=new Set(n),s=r.map(c=>c.id).filter(c=>i.has(c));if(Yf(t,e))return R0(r,s,i);t.stdout.write(`AI tools:
386
- `),r.forEach((c,u)=>{t.stdout.write(`${u+1}. ${c.label}${i.has(c.id)?" [detected]":""}
387
- `);});let o=s.length>0?`Enter for detected (${s.map(c=>U[c].label).join(", ")})`:"Enter to skip",a=(await _r(t,`Select AI tools by number, comma-separated, "all", or "none" (${o}): `)).trim().toLowerCase();if(!a)return s;if(a==="none"||a==="skip")return [];if(a==="all")return r.map(c=>c.id);let l=[];for(let c of a.split(/[,\s]+/).filter(Boolean)){let u=Number(c),d=Number.isInteger(u)?r[u-1]:r.find(p=>p.id===c||p.label.toLowerCase()===c);if(!d){t.stdout.write(`${g("warn",e)} Ignoring unknown AI tool: ${c}
388
- `);continue}l.includes(d.id)||l.push(d.id);}return l}async function R0(t,e,r){let n=process.stdin,i=process.stdout,s=new Set(e),o=Math.max(0,t.findIndex(c=>s.has(c.id))),a=0,l=()=>{a>0&&i.write(`\x1B[${a}A\x1B[J`);let c=["AI tools","Use \u2191\u2193 to move, space to select, enter to confirm.","",...t.map((u,d)=>{let p=d===o?"\u203A":" ",f=s.has(u.id)?"\u25CF":"\u25CB",h=r.has(u.id)?" [detected]":"";return `${p} ${f} ${u.label}${h}`}),"",`Selected: ${s.size>0?Array.from(s).map(u=>U[u].label).join(", "):"none"}`];i.write(`${c.join(`
385
+ `);});let s=n[0];if(s&&(s.confidence==="exact"||s.confidence==="high")&&await Sn(e,`Attach "${s.workspace_name}" to this folder?`,true))return ["--workspace",s.workspace_id];let i=(await yr(e,`Choose workspace [1-${n.length}], c to create new, or q to cancel: `)).trim().toLowerCase();if(!i||i==="q")return null;if(i==="c"||i==="create")return ["--create-workspace"];let o=Number(i);return Number.isInteger(o)&&o>=1&&o<=n.length?["--workspace",n[o-1].workspace_id]:(e.stdout.write(`${g("warn",r)} Invalid selection; setup canceled.
386
+ `),null)}async function lE(t,e){let r=Object.values(U).filter(c=>c.supported),n=await ze(t.cwd).catch(()=>[]),s=new Set(n),i=r.map(c=>c.id).filter(c=>s.has(c));if(df(t,e))return cE(r,i,s);t.stdout.write(`AI tools:
387
+ `),r.forEach((c,u)=>{t.stdout.write(`${u+1}. ${c.label}${s.has(c.id)?" [detected]":""}
388
+ `);});let o=i.length>0?`Enter for detected (${i.map(c=>U[c].label).join(", ")})`:"Enter to skip",a=(await yr(t,`Select AI tools by number, comma-separated, "all", or "none" (${o}): `)).trim().toLowerCase();if(!a)return i;if(a==="none"||a==="skip")return [];if(a==="all")return r.map(c=>c.id);let l=[];for(let c of a.split(/[,\s]+/).filter(Boolean)){let u=Number(c),d=Number.isInteger(u)?r[u-1]:r.find(p=>p.id===c||p.label.toLowerCase()===c);if(!d){t.stdout.write(`${g("warn",e)} Ignoring unknown AI tool: ${c}
389
+ `);continue}l.includes(d.id)||l.push(d.id);}return l}async function cE(t,e,r){let n=process.stdin,s=process.stdout,i=new Set(e),o=Math.max(0,t.findIndex(c=>i.has(c.id))),a=0,l=()=>{a>0&&s.write(`\x1B[${a}A\x1B[J`);let c=["AI tools","Use \u2191\u2193 to move, space to select, enter to confirm.","",...t.map((u,d)=>{let p=d===o?"\u203A":" ",h=i.has(u.id)?"\u25CF":"\u25CB",f=r.has(u.id)?" [detected]":"";return `${p} ${h} ${u.label}${f}`}),"",`Selected: ${i.size>0?Array.from(i).map(u=>U[u].label).join(", "):"none"}`];s.write(`${c.join(`
389
390
  `)}
390
- `),a=c.length;};emitKeypressEvents(n),n.isTTY&&n.setRawMode(true),n.resume(),i.write("\x1B[?25l"),l();try{return await new Promise((c,u)=>{let d=Date.now()+350,p=()=>{n.off("keypress",h),n.isTTY&&n.setRawMode(!1),n.pause(),i.write("\x1B[?25h");},f=m=>{p(),c(m);},h=(m,_)=>{if(_.ctrl&&_.name==="c"){p(),u(new Error("setup_canceled"));return}if(_.name==="up"){o=(o-1+t.length)%t.length,l();return}if(_.name==="down"){o=(o+1)%t.length,l();return}if(_.name==="space"){let b=t[o];s.has(b.id)?s.delete(b.id):s.add(b.id),l();return}if(_.name==="a"){s.size===t.length?s.clear():t.forEach(b=>s.add(b.id)),l();return}if(_.name==="return"||_.name==="enter"){if(Date.now()<d)return;f(t.map(b=>b.id).filter(b=>s.has(b)));}};n.on("keypress",h);})}finally{i.write(`
391
- `);}}async function x0(t,e,r){if(r.length===0||!await kn(t,"Start the first project scan now?",true))return;let i=r.length===1?r[0]:await T0(t,e,r);if(!i)return;let s=await I0(t,i);if(s.ok){s.promptDelivered?t.stdout.write(`${g("ok",e)} Opened ${U[i].label} with the project setup prompt.
392
- `):(t.stdout.write(`${g("ok",e)} Opened ${U[i].label}.
393
- `),t.stdout.write(`Prompt to run in your AI tool: ${Hi}
394
- `));return}t.stdout.write(`${g("warn",e)} ${s.error}
395
- `),t.stdout.write(`Prompt to run in your AI tool: ${Hi}
396
- `);}async function P0(t,e){let r=await Pe(t.env);if(!r.supported||r.enabled){t.stdout.write(`Manual start: pathrule start
397
- `);return}if(!await kn(t,"Start Pathrule automatically when you sign in?",true)){t.stdout.write(`Manual start: pathrule start
398
- `);return}try{let i=await Qe(t.env,!0);if(i.supported&&i.enabled){let s=await zi(Ae(t.env)).catch(o=>({error:o}));if("status"in s&&s.status.running)t.stdout.write(`${g("ok",e)} Daemon autostart enabled and running.
391
+ `),a=c.length;};emitKeypressEvents(n),n.isTTY&&n.setRawMode(true),n.resume(),s.write("\x1B[?25l"),l();try{return await new Promise((c,u)=>{let d=Date.now()+350,p=()=>{n.off("keypress",f),n.isTTY&&n.setRawMode(!1),n.pause(),s.write("\x1B[?25h");},h=m=>{p(),c(m);},f=(m,_)=>{if(_.ctrl&&_.name==="c"){p(),u(new Error("setup_canceled"));return}if(_.name==="up"){o=(o-1+t.length)%t.length,l();return}if(_.name==="down"){o=(o+1)%t.length,l();return}if(_.name==="space"){let b=t[o];i.has(b.id)?i.delete(b.id):i.add(b.id),l();return}if(_.name==="a"){i.size===t.length?i.clear():t.forEach(b=>i.add(b.id)),l();return}if(_.name==="return"||_.name==="enter"){if(Date.now()<d)return;h(t.map(b=>b.id).filter(b=>i.has(b)));}};n.on("keypress",f);})}finally{s.write(`
392
+ `);}}async function uE(t,e,r){if(r.length===0||!await Sn(t,"Start the first project scan now?",true))return;let s=r.length===1?r[0]:await pE(t,e,r);if(!s)return;let i=await fE(t,s);if(i.ok){i.promptDelivered?t.stdout.write(`${g("ok",e)} Opened ${U[s].label} with the project setup prompt.
393
+ `):(t.stdout.write(`${g("ok",e)} Opened ${U[s].label}.
394
+ `),t.stdout.write(`Prompt to run in your AI tool: ${Js}
395
+ `));return}t.stdout.write(`${g("warn",e)} ${i.error}
396
+ `),t.stdout.write(`Prompt to run in your AI tool: ${Js}
397
+ `);}async function dE(t,e){let r=await Pe(t.env);if(!r.supported||r.enabled){t.stdout.write(`Manual start: pathrule start
398
+ `);return}if(!await Sn(t,"Start Pathrule automatically when you sign in?",true)){t.stdout.write(`Manual start: pathrule start
399
+ `);return}try{let s=await Qe(t.env,!0);if(s.supported&&s.enabled){let i=await Vs(Ae(t.env)).catch(o=>({error:o}));if("status"in i&&i.status.running)t.stdout.write(`${g("ok",e)} Daemon autostart enabled and running.
399
400
  `),t.stdout.write(`Pathrule will start automatically when you sign in.
400
- `);else {let o="error"in s&&s.error instanceof Error?s.error.message:null;t.stdout.write(`${g("warn",e)} Daemon autostart is registered, but the daemon is not running${o?` (${o})`:""}.
401
+ `);else {let o="error"in i&&i.error instanceof Error?i.error.message:null;t.stdout.write(`${g("warn",e)} Daemon autostart is registered, but the daemon is not running${o?` (${o})`:""}.
401
402
  `),t.stdout.write(`Inspect logs: tail -n 80 ~/.pathrule/logs/daemon-launchd.err.log
402
403
  `);}}else t.stdout.write(`${g("warn",e)} Daemon autostart could not be enabled.
403
404
  `),t.stdout.write(`Manual start: pathrule start
404
- `);}catch(i){t.stdout.write(`${g("warn",e)} Daemon autostart could not be enabled. ${i instanceof Error?i.message:String(i)}
405
+ `);}catch(s){t.stdout.write(`${g("warn",e)} Daemon autostart could not be enabled. ${s instanceof Error?s.message:String(s)}
405
406
  `),t.stdout.write(`Manual start: pathrule start
406
- `);}}async function T0(t,e,r){let n=r.filter((o,a)=>r.indexOf(o)===a);if(Yf(t,e))return A0(n);t.stdout.write(`Project scan client:
407
+ `);}}async function pE(t,e,r){let n=r.filter((o,a)=>r.indexOf(o)===a);if(df(t,e))return hE(n);t.stdout.write(`Project scan client:
407
408
  `),n.forEach((o,a)=>{t.stdout.write(`${a+1}. ${U[o].label}
408
- `);});let i=(await _r(t,`Choose client [1-${n.length}] (Enter for 1): `)).trim();if(!i)return n[0]??null;let s=Number(i);return Number.isInteger(s)&&s>=1&&s<=n.length?n[s-1]:null}async function A0(t){let e=process.stdin,r=process.stdout,n=0,i=0,s=()=>{i>0&&r.write(`\x1B[${i}A\x1B[J`);let o=["Project scan","Use \u2191\u2193 to move, enter to launch.","",...t.map((a,l)=>`${l===n?"\u203A":" "} ${U[a].label}`)];r.write(`${o.join(`
409
+ `);});let s=(await yr(t,`Choose client [1-${n.length}] (Enter for 1): `)).trim();if(!s)return n[0]??null;let i=Number(s);return Number.isInteger(i)&&i>=1&&i<=n.length?n[i-1]:null}async function hE(t){let e=process.stdin,r=process.stdout,n=0,s=0,i=()=>{s>0&&r.write(`\x1B[${s}A\x1B[J`);let o=["Project scan","Use \u2191\u2193 to move, enter to launch.","",...t.map((a,l)=>`${l===n?"\u203A":" "} ${U[a].label}`)];r.write(`${o.join(`
409
410
  `)}
410
- `),i=o.length;};emitKeypressEvents(e),e.isTTY&&e.setRawMode(true),e.resume(),r.write("\x1B[?25l"),s();try{return await new Promise((o,a)=>{let l=Date.now()+350,c=()=>{e.off("keypress",d),e.isTTY&&e.setRawMode(!1),e.pause(),r.write("\x1B[?25h");},u=p=>{c(),o(p);},d=(p,f)=>{if(f.ctrl&&f.name==="c"){c(),a(new Error("setup_canceled"));return}if(f.name==="up"){n=(n-1+t.length)%t.length,s();return}if(f.name==="down"){n=(n+1)%t.length,s();return}if(f.name==="return"||f.name==="enter"){if(Date.now()<l)return;u(t[n]??null);}};e.on("keypress",d);})}finally{r.write(`
411
- `);}}async function I0(t,e){if(process.platform!=="darwin")return {ok:false,error:"Automatic AI launch is currently wired for macOS. Open your AI tool in this repo and paste the setup prompt."};try{let r=N0(Hi,await $0(t.cwd));return O0(e,t.cwd,r),{ok:!0,promptDelivered:e==="claude-code"||e==="codex"}}catch(r){return {ok:false,error:r instanceof Error?r.message:String(r)}}}function O0(t,e,r){switch(t){case "cursor":spawn("open",["-a","Cursor",e],{detached:true,stdio:"ignore"}).unref();return;case "windsurf":spawn("open",["-a","Windsurf",e],{detached:true,stdio:"ignore"}).unref();return;case "claude-code":case "codex":{let n=t==="claude-code"?"claude":"codex",i=`cd ${Ef(e)} && ${n} ${Ef(r)}`,s=`tell application "Terminal" to do script "${D0(i)}"
412
- tell application "Terminal" to activate`;spawn("osascript",["-e",s],{detached:true,stdio:"ignore"}).unref();return}}}async function $0(t){try{let{stdout:e}=await Bi("git",["-C",t,"status","--porcelain"],{timeout:1500,maxBuffer:65536}),r=e.split(/\r?\n/).map(n=>n.trimEnd()).filter(Boolean);return r.length===0?null:{total:r.length,lines:r.slice(0,12)}}catch{return null}}function N0(t,e){if(!e)return t;let r=e.total>e.lines.length?`
413
- - ...and ${e.total-e.lines.length} more`:"";return `${["Before working, note that this workspace already has uncommitted local changes.","Treat them as protected user/team work: inspect overlapping files before editing, do not revert unrelated changes, and keep edits scoped to the user's request.","","Current git status summary:",...e.lines.map(i=>`- ${i}`),r].filter(Boolean).join(`
411
+ `),s=o.length;};emitKeypressEvents(e),e.isTTY&&e.setRawMode(true),e.resume(),r.write("\x1B[?25l"),i();try{return await new Promise((o,a)=>{let l=Date.now()+350,c=()=>{e.off("keypress",d),e.isTTY&&e.setRawMode(!1),e.pause(),r.write("\x1B[?25h");},u=p=>{c(),o(p);},d=(p,h)=>{if(h.ctrl&&h.name==="c"){c(),a(new Error("setup_canceled"));return}if(h.name==="up"){n=(n-1+t.length)%t.length,i();return}if(h.name==="down"){n=(n+1)%t.length,i();return}if(h.name==="return"||h.name==="enter"){if(Date.now()<l)return;u(t[n]??null);}};e.on("keypress",d);})}finally{r.write(`
412
+ `);}}async function fE(t,e){if(process.platform!=="darwin")return {ok:false,error:"Automatic AI launch is currently wired for macOS. Open your AI tool in this repo and paste the setup prompt."};try{let r=_E(Js,await mE(t.cwd));return gE(e,t.cwd,r),{ok:!0,promptDelivered:e==="claude-code"||e==="codex"}}catch(r){return {ok:false,error:r instanceof Error?r.message:String(r)}}}function gE(t,e,r){switch(t){case "cursor":spawn("open",["-a","Cursor",e],{detached:true,stdio:"ignore"}).unref();return;case "windsurf":spawn("open",["-a","Windsurf",e],{detached:true,stdio:"ignore"}).unref();return;case "claude-code":case "codex":{let n=t==="claude-code"?"claude":"codex",s=`cd ${Lh(e)} && ${n} ${Lh(r)}`,i=`tell application "Terminal" to do script "${wE(s)}"
413
+ tell application "Terminal" to activate`;spawn("osascript",["-e",i],{detached:true,stdio:"ignore"}).unref();return}}}async function mE(t){try{let{stdout:e}=await qs("git",["-C",t,"status","--porcelain"],{timeout:1500,maxBuffer:65536}),r=e.split(/\r?\n/).map(n=>n.trimEnd()).filter(Boolean);return r.length===0?null:{total:r.length,lines:r.slice(0,12)}}catch{return null}}function _E(t,e){if(!e)return t;let r=e.total>e.lines.length?`
414
+ - ...and ${e.total-e.lines.length} more`:"";return `${["Before working, note that this workspace already has uncommitted local changes.","Treat them as protected user/team work: inspect overlapping files before editing, do not revert unrelated changes, and keep edits scoped to the user's request.","","Current git status summary:",...e.lines.map(s=>`- ${s}`),r].filter(Boolean).join(`
414
415
  `)}
415
416
 
416
- ${t}`}function Ef(t){return `'${t.replace(/'/g,"'\\''")}'`}function D0(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}async function j0(t,e,r){let{session:n,supabase:i}=await C(t),{error:s}=await i.from("user_workspace_paths").update({selected_ai_clients:r}).eq("user_id",n.user.id).eq("workspace_id",e);if(s)throw new Error(`workspace_client_selection_update_failed: ${s.message}`)}function M0(t){if(!t||typeof t!="object")return null;let e=t;return typeof e.workspace?.id!="string"||typeof e.local_root_path!="string"?null:{workspaceId:e.workspace.id,localRootPath:e.local_root_path}}async function L0(t,e,r){try{let n=await xe(t,e.cwd,e.env);return e.stdout.write(`${g("ok",r)} Attached ${n.workspace.name} to ${n.local_root_path}
417
- `),await tt(e,r),await mr(e,r),0}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
418
- `),1}}async function U0(t,e,r){try{let n=await Qr(t,e.env);return e.stdout.write(`${g("ok",r)} Detached ${n.name} from this machine.
417
+ ${t}`}function Lh(t){return `'${t.replace(/'/g,"'\\''")}'`}function wE(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}async function yE(t,e,r){let{session:n,supabase:s}=await S(t),{error:i}=await s.from("user_workspace_paths").update({selected_ai_clients:r}).eq("user_id",n.user.id).eq("workspace_id",e);if(i)throw new Error(`workspace_client_selection_update_failed: ${i.message}`)}function kE(t){if(!t||typeof t!="object")return null;let e=t;return typeof e.workspace?.id!="string"||typeof e.local_root_path!="string"?null:{workspaceId:e.workspace.id,localRootPath:e.local_root_path}}async function bE(t,e,r){try{let n=await xe(t,e.cwd,e.env);return e.stdout.write(`${g("ok",r)} Attached ${n.workspace.name} to ${n.local_root_path}
418
+ `),await rt(e,r),await wr(e,r),0}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
419
+ `),1}}async function vE(t,e,r){try{let n=await tn(t,e.env);return e.stdout.write(`${g("ok",r)} Detached ${n.name} from this machine.
419
420
  `),0}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
420
- `),1}}async function W0(t,e,r){if(!t||!Vo(t))return e.stderr.write(`${g("error",r)} Usage: pathrule preflight <create_workspace|write_memory|write_rule|write_skill|sync_agents|materialize_skills>
421
+ `),1}}async function SE(t,e,r){if(!t||!Xo(t))return e.stderr.write(`${g("error",r)} Usage: pathrule preflight <create_workspace|write_memory|write_rule|write_skill|sync_agents|materialize_skills>
421
422
  `),64;try{let n=await ae(t,e.env);return n.allowed?(e.stdout.write(`${g("ok",r)} ${t} is allowed.
422
- `),0):(Vi(n,e.stderr,r),1)}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
423
- `),1}}async function B0(t,e,r){try{let n=await Ze(t,e.env);for(let s of n)e.stdout.write(`${g(s.ok?"ok":"error",r)} ${s.client}: ${s.status} (${s.config_path})
424
- `);let i=n.every(s=>s.ok);return i&&await tt(e,r),i?0:1}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
425
- `),n instanceof Error&&n.message==="invalid_install_target"?64:1}}async function F0(t,e,r){try{let n=await Xo(t);for(let i of n)e.stdout.write(`${g(i.ok?"ok":"error",r)} ${i.client}: ${i.status} (${i.config_path})
426
- `);return n.every(i=>i.ok)?0:1}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
427
- `),n instanceof Error&&n.message==="invalid_install_target"?64:1}}async function H0(t,e,r){try{let n=await Le(e.env,e.cwd,{skillsOnly:t.includes("--skills")});return n.ok?n.skills?(e.stdout.write(`${g("ok",r)} Synced skills: ${n.skills.written} written, ${n.skills.skipped} skipped, ${n.skills.removed} removed.
428
- `),await tt(e,r),0):(e.stdout.write(`${g("ok",r)} Synced companion files: ${n.companion?.written??0} written, ${n.companion?.skipped??0} skipped, ${n.companion?.removed??0} removed; hook index ${n.hook_index?.ok?"updated":"skipped"}.
429
- `),await tt(e,r),0):(e.stderr.write(`${g("error",r)} ${n.error??"sync_failed"}
423
+ `),0):(Xs(n,e.stderr,r),1)}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
424
+ `),1}}async function CE(t,e,r){try{let n=await Ze(t,e.env);for(let i of n)e.stdout.write(`${g(i.ok?"ok":"error",r)} ${i.client}: ${i.status} (${i.config_path})
425
+ `);let s=n.every(i=>i.ok);return s&&await rt(e,r),s?0:1}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
426
+ `),n instanceof Error&&n.message==="invalid_install_target"?64:1}}async function EE(t,e,r){try{let n=await ea(t);for(let s of n)e.stdout.write(`${g(s.ok?"ok":"error",r)} ${s.client}: ${s.status} (${s.config_path})
427
+ `);return n.every(s=>s.ok)?0:1}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
428
+ `),n instanceof Error&&n.message==="invalid_install_target"?64:1}}async function RE(t,e,r){try{let n=await Le(e.env,e.cwd,{skillsOnly:t.includes("--skills")});return n.ok?n.skills?(e.stdout.write(`${g("ok",r)} Synced skills: ${n.skills.written} written, ${n.skills.skipped} skipped, ${n.skills.removed} removed.
429
+ `),await rt(e,r),0):(e.stdout.write(`${g("ok",r)} Synced companion files: ${n.companion?.written??0} written, ${n.companion?.skipped??0} skipped, ${n.companion?.removed??0} removed; hook index ${n.hook_index?.ok?"updated":"skipped"}.
430
+ `),await rt(e,r),0):(e.stderr.write(`${g("error",r)} ${n.error??"sync_failed"}
430
431
  `),1)}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
431
- `),1}}async function q0(t,e,r,n,i){try{if(t==="get"&&e){let s=await kt(e,n.env);return n.stdout.write(`${e}=${s.value} (${s.source})
432
- `),0}if(t==="set"&&e&&r){let s=await uo(e,r,n.env);return n.stdout.write(`${g("ok",i)} ${e}=${s.value}
433
- `),0}if(t==="reset"&&e){let s=await po(e,n.env);return n.stdout.write(`${g("ok",i)} ${s.key}=${s.value}
434
- `),0}return n.stderr.write(`${g("error",i)} Usage: pathrule config get <update.policy|suggestions.desktop|telemetry.enabled|telemetry.id> OR pathrule config set update.policy manual|notify|auto OR pathrule config set suggestions.desktop true|false OR pathrule config set telemetry.enabled true|false OR pathrule config reset telemetry-id
435
- `),64}catch(s){return n.stderr.write(`${g("error",i)} ${s instanceof Error?s.message:String(s)}
436
- `),s instanceof Error&&s.message.startsWith("invalid_")?64:1}}async function z0(t,e){let r=await Li(Be.version,t.env,t.fetch??fetch);return r.checked?r.update_available?(t.stdout.write(`${g("warn",e)} Pathrule CLI ${r.latest_version} is available. Current: ${r.current_version}
432
+ `),1}}async function xE(t,e,r,n,s){try{if(t==="get"&&e){let i=await bt(e,n.env);return n.stdout.write(`${e}=${i.value} (${i.source})
433
+ `),0}if(t==="set"&&e&&r){let i=await fo(e,r,n.env);return n.stdout.write(`${g("ok",s)} ${e}=${i.value}
434
+ `),0}if(t==="reset"&&e){let i=await go(e,n.env);return n.stdout.write(`${g("ok",s)} ${i.key}=${i.value}
435
+ `),0}return n.stderr.write(`${g("error",s)} Usage: pathrule config get <update.policy|suggestions.desktop|telemetry.enabled|telemetry.id> OR pathrule config set update.policy manual|notify|auto OR pathrule config set suggestions.desktop true|false OR pathrule config set telemetry.enabled true|false OR pathrule config reset telemetry-id
436
+ `),64}catch(i){return n.stderr.write(`${g("error",s)} ${i instanceof Error?i.message:String(i)}
437
+ `),i instanceof Error&&i.message.startsWith("invalid_")?64:1}}async function PE(t,e){let r=await Bs(Be.version,t.env,t.fetch??fetch);return r.checked?r.update_available?(t.stdout.write(`${g("warn",e)} Pathrule CLI ${r.latest_version} is available. Current: ${r.current_version}
437
438
  `),r.upgrade_command&&t.stdout.write(`Run: ${r.upgrade_command}
438
439
  `),r.protocol_compatible||t.stdout.write(`${g("warn",e)} This CLI protocol is below the minimum supported version.
439
440
  `),0):(t.stdout.write(`${g("ok",e)} Pathrule CLI is up to date.
440
441
  `),0):(t.stdout.write(`${g("info",e)} Update check skipped: ${r.reason}
441
- `),0)}async function J0(t,e){if(!e.interactive)return;let r=await vf(Be.version,t.env,t.fetch??fetch).catch(()=>null);r&&t.stderr.write(`${g("info",e)} ${r}
442
- `);}async function K0(t,e){t.stdout.write(`Pathrule
443
- `);let r=await pr(Ae(t.env));return r.running&&r.state?t.stdout.write(`${g("ok",e)} Local Web bridge is running on 127.0.0.1:${r.state.port}.
444
- `):r.running?(t.stdout.write(`${g("ok",e)} Local Web bridge is already running on 127.0.0.1:${Aa(Ae(t.env))}.
442
+ `),0)}async function TE(t,e){if(!e.interactive)return;let r=await Dh(Be.version,t.env,t.fetch??fetch).catch(()=>null);r&&t.stderr.write(`${g("info",e)} ${r}
443
+ `);}async function AE(t,e){t.stdout.write(`Pathrule
444
+ `);let r=await hr(Ae(t.env));return r.running&&r.state?t.stdout.write(`${g("ok",e)} Local Web bridge is running on 127.0.0.1:${r.state.port}.
445
+ `):r.running?(t.stdout.write(`${g("ok",e)} Local Web bridge is already running on 127.0.0.1:${Ma(Ae(t.env))}.
445
446
  `),t.stdout.write(`${g("warn",e)} Daemon state file is missing.
446
447
  `)):t.stdout.write(`${g("info",e)} Local Web bridge is not running.
447
448
  `),t.stdout.write(`Next: pathrule bridge pair
448
- `),0}async function V0(t,e,r){let n=t[0]??"status";try{if(n==="run")return await Op(e.env),0;if(n==="autostart"||n==="toggle")return G0(n==="toggle"?"toggle":t[1]??"status",e,r);let i=n==="start"?await pr(Ae(e.env)):n==="stop"?await hn(e.env):n==="status"?await We(e.env):null;return i?(i.running&&i.state?e.stdout.write(`${g("ok",r)} Daemon running on 127.0.0.1:${i.state.port} (pid ${i.state.pid})
449
- `):i.running?e.stdout.write(`${g("ok",r)} Daemon running on 127.0.0.1:${Aa(Ae(e.env))} (state file missing)
450
- `):e.stdout.write(`${g("info",r)} Daemon not running (${i.reason??"unknown"}).
449
+ `),0}async function IE(t,e,r){let n=t[0]??"status";try{if(n==="run")return await Up(e.env),0;if(n==="autostart"||n==="toggle")return OE(n==="toggle"?"toggle":t[1]??"status",e,r);let s=n==="start"?await hr(Ae(e.env)):n==="stop"?await mn(e.env):n==="status"?await We(e.env):null;return s?(s.running&&s.state?e.stdout.write(`${g("ok",r)} Daemon running on 127.0.0.1:${s.state.port} (pid ${s.state.pid})
450
+ `):s.running?e.stdout.write(`${g("ok",r)} Daemon running on 127.0.0.1:${Ma(Ae(e.env))} (state file missing)
451
+ `):e.stdout.write(`${g("info",r)} Daemon not running (${s.reason??"unknown"}).
451
452
  `),0):(e.stderr.write(`${g("error",r)} Usage: pathrule daemon start|stop|status|autostart on|autostart off|autostart status|toggle
452
- `),64)}catch(i){return e.stderr.write(`${g("error",r)} ${i instanceof Error?i.message:String(i)}
453
- `),1}}async function G0(t,e,r){try{let n=await Pe(e.env),i=t==="status"?n:t==="on"||t==="enable"?await Qe(e.env,!0):t==="off"||t==="disable"?await Qe(e.env,!1):t==="toggle"?await Qe(e.env,!n.enabled):null;return i?i.supported?(e.stdout.write(`${g(i.enabled?"ok":"info",r)} Daemon autostart ${i.enabled?"enabled":"disabled"} (${i.method}).
453
+ `),64)}catch(s){return e.stderr.write(`${g("error",r)} ${s instanceof Error?s.message:String(s)}
454
+ `),1}}async function OE(t,e,r){try{let n=await Pe(e.env),s=t==="status"?n:t==="on"||t==="enable"?await Qe(e.env,!0):t==="off"||t==="disable"?await Qe(e.env,!1):t==="toggle"?await Qe(e.env,!n.enabled):null;return s?s.supported?(e.stdout.write(`${g(s.enabled?"ok":"info",r)} Daemon autostart ${s.enabled?"enabled":"disabled"} (${s.method}).
454
455
  `),e.stdout.write(`Manual start: pathrule start
455
- `),0):(e.stderr.write(`${g("error",r)} Daemon autostart is not supported on this platform. ${i.reason??""}
456
+ `),0):(e.stderr.write(`${g("error",r)} Daemon autostart is not supported on this platform. ${s.reason??""}
456
457
  `),1):(e.stderr.write(`${g("error",r)} Usage: pathrule daemon autostart on|off|status or pathrule daemon toggle
457
458
  `),64)}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
458
- `),1}}async function Y0(t,e,r){if(t!=="pair")return e.stderr.write(`${g("error",r)} Usage: pathrule bridge pair
459
- `),64;try{let n=Ae(e.env),i=await hi(n,!1),s=(await zi(n)).status;if(!s.state?.daemon_session_id)throw new Error("daemon_session_missing");let o=await Co({env:n,daemonSessionId:s.state.daemon_session_id,user:i,verifyReauth:!1});return e.stdout.write(`${g("ok",r)} Pair code: ${o.pair_code}
459
+ `),1}}async function $E(t,e,r){if(t!=="pair")return e.stderr.write(`${g("error",r)} Usage: pathrule bridge pair
460
+ `),64;try{let n=Ae(e.env),s=await _s(n,!1),i=(await Vs(n)).status;if(!i.state?.daemon_session_id)throw new Error("daemon_session_missing");let o=await xo({env:n,daemonSessionId:i.state.daemon_session_id,user:s,verifyReauth:!1});return e.stdout.write(`${g("ok",r)} Pair code: ${o.pair_code}
460
461
  `),e.stdout.write(`${g("info",r)} Open ${o.url} and paste the code.
461
462
  `),e.stdout.write(`${g("info",r)} Expires at ${o.expires_at}
462
463
  `),0}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
463
- `),1}}function Ae(t){let e=t.PATHRULE_DAEMON_PORT?.trim();return {...t,PATHRULE_DAEMON_PORT:e&&e.length>0?e:String(dr)}}async function zi(t){let e=Aa(t),r=await We(t);return r.running&&(!r.state||e===0||r.state.port===e)?{status:r,changed:false}:(r.running&&r.state?.port!==e&&await hn(t),{status:await pr(t),changed:true})}function Aa(t){let e=t.PATHRULE_DAEMON_PORT?.trim()||String(dr),r=Number(e);if(!Number.isInteger(r)||r<0||r>65535)throw new Error("daemon_port_invalid");return r}async function tt(t,e,r={}){if(!e.interactive||t.env.PATHRULE_DAEMON_AUTOSTART==="0")return;let n=Ae(t.env);try{let i=await zi(n);i.changed&&i.status.running&&i.status.state&&t.stdout.write(`${g("info",e)} Local Web bridge ready on 127.0.0.1:${i.status.state.port}.
464
- `);}catch(i){t.stderr.write(`${g("warn",e)} Local Web bridge could not start. ${r.manualHint??"Run pathrule start to start it manually."} (${i instanceof Error?i.message:String(i)})
465
- `);}}async function X0(t,e){if(!(!e.interactive||t.env.PATHRULE_DAEMON_AUTOSTART==="0"))try{if(!(await We(t.env)).running)return;await hn(t.env),t.stdout.write(`${g("info",e)} Local Web bridge stopped.
464
+ `),1}}function Ae(t){let e=t.PATHRULE_DAEMON_PORT?.trim();return {...t,PATHRULE_DAEMON_PORT:e&&e.length>0?e:String(pr)}}async function Vs(t){let e=Ma(t),r=await We(t);return r.running&&(!r.state||e===0||r.state.port===e)?{status:r,changed:false}:(r.running&&r.state?.port!==e&&await mn(t),{status:await hr(t),changed:true})}function Ma(t){let e=t.PATHRULE_DAEMON_PORT?.trim()||String(pr),r=Number(e);if(!Number.isInteger(r)||r<0||r>65535)throw new Error("daemon_port_invalid");return r}async function rt(t,e,r={}){if(!e.interactive||t.env.PATHRULE_DAEMON_AUTOSTART==="0")return;let n=Ae(t.env);try{let s=await Vs(n);s.changed&&s.status.running&&s.status.state&&t.stdout.write(`${g("info",e)} Local Web bridge ready on 127.0.0.1:${s.status.state.port}.
465
+ `);}catch(s){t.stderr.write(`${g("warn",e)} Local Web bridge could not start. ${r.manualHint??"Run pathrule start to start it manually."} (${s instanceof Error?s.message:String(s)})
466
+ `);}}async function NE(t,e){if(!(!e.interactive||t.env.PATHRULE_DAEMON_AUTOSTART==="0"))try{if(!(await We(t.env)).running)return;await mn(t.env),t.stdout.write(`${g("info",e)} Local Web bridge stopped.
466
467
  `);}catch(r){t.stderr.write(`${g("warn",e)} Local Web bridge could not stop. (${r instanceof Error?r.message:String(r)})
467
- `);}}async function Z0(t,e,r){try{if(t.includes("--bundle")){let o=await Uo(e.env,e.cwd);return e.stdout.write(`${g("ok",r)} Support bundle written: ${o.path}
468
+ `);}}async function DE(t,e,r){try{if(t.includes("--bundle")){let o=await Fo(e.env,e.cwd);return e.stdout.write(`${g("ok",r)} Support bundle written: ${o.path}
468
469
  `),o.ok?0:1}let n=await Me(e.env,e.cwd);if(e.stdout.write(`Pathrule doctor
469
- `),Sa("Account",n.checks.filter(o=>["auth","organization"].includes(o.name)),e,r),Sa("Workspace",n.checks.filter(o=>["workspace","cwd_attach"].includes(o.name)),e,r),Sa("Managed files",n.checks.filter(o=>o.name==="managed_files"),e,r),n.managed_files.length>0){e.stdout.write(`
470
+ `),Aa("Account",n.checks.filter(o=>["auth","organization"].includes(o.name)),e,r),Aa("Workspace",n.checks.filter(o=>["workspace","cwd_attach"].includes(o.name)),e,r),Aa("Managed files",n.checks.filter(o=>o.name==="managed_files"),e,r),n.managed_files.length>0){e.stdout.write(`
470
471
  Managed file ownership
471
472
  `);for(let o of n.managed_files){let a=o.status==="current"||o.status==="older_version"?"ok":"warn";e.stdout.write(`${g(a,r)} ${o.path}: ${o.owner} ${o.owner_version}
472
473
  `);}}e.stdout.write(`
473
474
  Agents
474
475
  `);for(let o of n.mcp)e.stdout.write(`${g(o.installed?"ok":"warn",r)} ${o.client}: ${o.installed?"installed":"not installed"}
475
- `);let i=n.checks.find(o=>o.status==="fail"),s=n.checks.find(o=>o.status==="warn");return i?e.stdout.write(`
476
+ `);let s=n.checks.find(o=>o.status==="fail"),i=n.checks.find(o=>o.status==="warn");return s?e.stdout.write(`
476
477
  Next: pathrule login
477
- `):s?.name==="cwd_attach"&&e.stdout.write(`
478
+ `):i?.name==="cwd_attach"&&e.stdout.write(`
478
479
  Next: pathrule attach <workspace>
479
480
  `),n.ok?0:1}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
480
- `),1}}function Sa(t,e,r,n){if(e.length!==0){r.stdout.write(`
481
+ `),1}}function Aa(t,e,r,n){if(e.length!==0){r.stdout.write(`
481
482
  ${t}
482
- `);for(let i of e)r.stdout.write(`${g(i.status==="pass"?"ok":i.status==="warn"?"warn":"error",n)} ${i.name}${i.detail?`: ${i.detail}`:""}
483
- `);}}async function Q0(t,e){try{let r=await Df(t);return r.authenticated?(t.stdout.write(["Pathrule status",`${g("ok",e)} Signed in as ${r.user?.email??r.user?.id}`,`Organization: ${r.organization?.slug??"none"}`,`Trial ends: ${r.organization?.trial_ends_at??"none"}`,`Beta credit: ${eE(r.organization?.beta_referral_credit_cents??0)}`,`Beta Founder: ${r.organization?.beta_referral_founder?"yes":"no"}`,`Workspace: ${r.workspace?.name??"none"}`,`Current folder: ${r.cwd_workspace_match?`attached to ${r.cwd_workspace_match.name}`:"not attached"}`,""].join(`
483
+ `);for(let s of e)r.stdout.write(`${g(s.status==="pass"?"ok":s.status==="warn"?"warn":"error",n)} ${s.name}${s.detail?`: ${s.detail}`:""}
484
+ `);}}async function jE(t,e){try{let r=await Gh(t);return r.authenticated?(t.stdout.write(["Pathrule status",`${g("ok",e)} Signed in as ${r.user?.email??r.user?.id}`,`Organization: ${r.organization?.slug??"none"}`,`Trial ends: ${r.organization?.trial_ends_at??"none"}`,`Beta credit: ${ME(r.organization?.beta_referral_credit_cents??0)}`,`Beta Founder: ${r.organization?.beta_referral_founder?"yes":"no"}`,`Workspace: ${r.workspace?.name??"none"}`,`Current folder: ${r.cwd_workspace_match?`attached to ${r.cwd_workspace_match.name}`:"not attached"}`,""].join(`
484
485
  `)),0):(t.stderr.write(`${g("error",e)} Not signed in. Run pathrule login.
485
486
  `),1)}catch(r){return t.stderr.write(`${g("error",e)} ${r instanceof Error?r.message:String(r)}
486
- `),1}}function Mf(t,e,r){if(t){if(t.status==="credited"){e.write(`${g("ok",r)} Beta activation credited: $20 earned for your inviter.
487
+ `),1}}function Xh(t,e,r){if(t){if(t.status==="credited"){e.write(`${g("ok",r)} Beta activation credited: $20 earned for your inviter.
487
488
  `),e.write(`${g("info",r)} Invite your own beta users to earn credits too.
488
489
  `),t.founder_bonus_cents&&t.founder_bonus_cents>0&&e.write(`${g("ok",r)} Beta Founder bonus unlocked.
489
490
  `);return}t.status==="duplicate_repo"?e.write(`${g("info",r)} Beta activation already used this repo.
490
491
  `):t.status==="same_machine"?e.write(`${g("info",r)} Beta activation was not eligible on this machine.
491
492
  `):t.status==="reward_cap_reached"&&e.write(`${g("info",r)} Beta invite accepted; inviter reward cap is already full.
492
- `);}}function eE(t){return `$${(t/100).toFixed(2)}`}async function tE(t,e){let r=await Ce(t.env);return r?(t.stdout.write(["Pathrule account",`${g("ok",e)} Signed in`,`User: ${r.session.user.email??r.session.user.id}`,`Expires: ${new Date(r.session.expires_at*1e3).toISOString()}`,""].join(`
493
+ `);}}function ME(t){return `$${(t/100).toFixed(2)}`}async function LE(t,e,r){let n=(t[0]??"take").toLowerCase();if(n==="help"||n==="--help"||n==="-h")return e.stdout.write(["Usage:"," pathrule snapshot Capture a snapshot of the current folder and upload it"," pathrule snapshot take Same as above (explicit)"," pathrule snapshot --dry-run Print the inventory without uploading"," pathrule snapshot list [N] List the most recent snapshots (default 10, max 25)","","Captures: file tree (capped at 5000 entries), file_extensions_summary,","top_level_dirs, sampled_contents for manifests/docs (capped at ~4KB each),","git_head/branch/remote_url, last-50-commit log summary, ai_notes (--notes).","","Flags:"," --notes <text> Free-form observation string saved on the snapshot"," --json Print stable JSON output"," --dry-run Build the inventory but skip the upload",""].join(`
494
+ `)),0;if(n==="list"||n==="ls")return UE(t.slice(1),e,r);if(n!=="take"&&n!=="--dry-run"&&n!=="--notes")return e.stderr.write(`${g("error",r)} Unknown snapshot subcommand: ${n}
495
+ Run \`pathrule snapshot help\` for usage.
496
+ `),2;let s=n==="take"?t.slice(1):t,i=false,o;for(let a=0;a<s.length;a+=1){let l=s[a];l==="--dry-run"?i=true:l==="--notes"?(o=s[a+1],a+=1):l&&l.startsWith("--notes=")&&(o=l.slice(8));}try{let a=await xa(e.cwd,e.env),l=a.workspace;if(!r.json){let p=a.source==="cwd-match"?" (matched by local_root_path)":" (no folder attachment \u2014 using current workspace)";e.stdout.write(`${g("ok",r)} Workspace: ${l.name} (${l.id})${p}
497
+ `),a.mismatch&&a.current&&e.stdout.write(`${g("warn",r)} Current workspace is "${a.current.name}" but this folder is attached to "${l.name}". Capturing into the attached one.
498
+ `),a.source==="current-fallback"&&e.stdout.write(`${g("warn",r)} This folder isn't attached to any workspace. Run \`pathrule attach\` to link it permanently.
499
+ `),e.stdout.write(`Scanning ${e.cwd}\u2026
500
+ `);}let c=await Ih({cwd:e.cwd,projectName:l.name,aiNotes:o});if(i)return r.json?(e.stdout.write(fr(y({command:"snapshot",cwd:e.cwd,ok:!0,data:{dry_run:!0,inventory:c}}))),0):(e.stdout.write([`${g("ok",r)} Dry run \u2014 no upload`,`Files: ${c.file_count} (${Uh(c.total_size_bytes)})`,`Tree entries: ${c.file_tree.length}`,`Sampled files: ${c.sampled_contents.length}`,`Extensions: ${Object.entries(c.file_extensions_summary).sort(([,p],[,h])=>h-p).slice(0,6).map(([p,h])=>`${p}:${h}`).join(", ")}`,c.git_head?`Git: ${c.branch??"?"} @ ${c.git_head.slice(0,8)}`:"Git: not a repo",...c.walk_warnings.map(p=>`${g("warn",r)} ${p}`),""].join(`
501
+ `)),0);let u=await Oh(l,c,e.env);if(r.json)return e.stdout.write(fr(y({command:"snapshot",cwd:e.cwd,ok:!0,data:{snapshot_id:u.snapshot_id,workspace_id:u.workspace_id,created_at:u.created_at,file_count:c.file_count,sampled_files:c.sampled_contents.length,tree_entries:c.file_tree.length,walk_warnings:c.walk_warnings,nodes_materialized:u.nodes_materialized}}))),0;let d=u.nodes_materialized;return e.stdout.write([`${g("ok",r)} Snapshot uploaded`,`ID: ${u.snapshot_id}`,`Files: ${c.file_count} (${Uh(c.total_size_bytes)})`,`Sampled: ${c.sampled_contents.length} files`,`Git: ${c.branch??"?"} @ ${(c.git_head??"").slice(0,8)||"no-repo"}`,d.error?`${g("warn",r)} Tree materialization failed: ${d.error}`:`Workspace tree: ${d.nodes_created} new folder(s) added, ${d.nodes_already_present} already present (${d.directories_seen} unique dirs)`,...c.walk_warnings.map(p=>`${g("warn",r)} ${p}`),""].join(`
502
+ `)),0}catch(a){return a instanceof et?(r.json?e.stdout.write(fr(y({command:"snapshot",cwd:e.cwd,ok:false,error:{code:a.code,message:a.message}}))):e.stderr.write(`${g("error",r)} ${a.message}
503
+ `),a.code==="no_workspace"?2:1):(e.stderr.write(`${g("error",r)} ${a instanceof Error?a.message:String(a)}
504
+ `),1)}}async function UE(t,e,r){let n=10,s=t[0];s&&/^\d+$/.test(s)&&(n=Math.min(Math.max(parseInt(s,10),1),25));try{let o=(await xa(e.cwd,e.env)).workspace,a=await $h(o,e.env,{limit:n});if(r.json)return e.stdout.write(fr(y({command:"snapshot",cwd:e.cwd,ok:!0,data:{workspace_id:o.id,count:a.length,snapshots:a}}))),0;if(a.length===0)return e.stdout.write(`${g("ok",r)} No snapshots yet for ${o.name}. Run pathrule snapshot to capture one.
505
+ `),0;e.stdout.write(`Snapshots for ${o.name}:
506
+ `);for(let l of a){let c=l.created_at.slice(0,19).replace("T"," ");e.stdout.write(` ${l.id.slice(0,8)}\u2026 ${c} src=${l.source} files=${l.file_count??"?"} ${l.branch??"no-branch"}@${(l.git_head??"").slice(0,8)||"no-repo"}
507
+ `);}return e.stdout.write(`
508
+ `),0}catch(i){return i instanceof et?(e.stderr.write(`${g("error",r)} ${i.message}
509
+ `),i.code==="no_workspace"?2:1):(e.stderr.write(`${g("error",r)} ${i instanceof Error?i.message:String(i)}
510
+ `),1)}}function Uh(t){return t<1024?`${t} B`:t<1024*1024?`${(t/1024).toFixed(1)} KB`:t<1024*1024*1024?`${(t/(1024*1024)).toFixed(1)} MB`:`${(t/(1024*1024*1024)).toFixed(2)} GB`}async function WE(t,e){let r=await Ce(t.env);return r?(t.stdout.write(["Pathrule account",`${g("ok",e)} Signed in`,`User: ${r.session.user.email??r.session.user.id}`,`Expires: ${new Date(r.session.expires_at*1e3).toISOString()}`,""].join(`
493
511
  `)),0):(t.stderr.write(`${g("error",e)} Not signed in. Run pathrule login.
494
- `),1)}async function Lf(t,e,r){try{let n=await Wf(t,e);return r.interactive&&!r.noOpen?(await Fe(e,n.url),e.stdout.write(`${g("ok",r)} Opened ${n.url}
512
+ `),1)}async function Zh(t,e,r){try{let n=await ef(t,e);return r.interactive&&!r.noOpen?(await Fe(e,n.url),e.stdout.write(`${g("ok",r)} Opened ${n.url}
495
513
  `)):e.stdout.write(`${n.url}
496
514
  `),0}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
497
- `),1}}async function rE(t,e,r,n){return Lf([Ff(t),...e],r,n)}async function nE(t,e,r){try{let n=await ca(la(t),e.env);return n.ok?(e.stdout.write(`${g("ok",r)} Invited ${n.email} to ${n.organization.name} as ${n.role}
515
+ `),1}}async function BE(t,e,r,n){return Zh([rf(t),...e],r,n)}async function FE(t,e,r){try{let n=await pa(da(t),e.env);return n.ok?(e.stdout.write(`${g("ok",r)} Invited ${n.email} to ${n.organization.name} as ${n.role}
498
516
  `),n.workspace&&e.stdout.write(`Workspace context: ${n.workspace.name}
499
517
  `),n.email_sent?e.stdout.write(`Invite email sent.
500
518
  `):e.stdout.write(`${g("warn",r)} Invite created, but the email could not be sent automatically.
@@ -503,95 +521,95 @@ ${t}
503
521
  `),n.billing_adjustment.status==="updated"?e.stdout.write(`${g("info",r)} Paid extra seat coverage was updated.
504
522
  `):n.billing_adjustment.status==="already_covered"&&e.stdout.write(`${g("info",r)} Paid seat coverage is already available.
505
523
  `),e.stdout.write(`${n.open_target.label}: ${n.open_target.url}
506
- `),Af(e.stdout,n.next_steps),0):(e.stderr.write(`${g("error",r)} ${n.message}
524
+ `),qh(e.stdout,n.next_steps),0):(e.stderr.write(`${g("error",r)} ${n.message}
507
525
  `),n.workspace&&e.stderr.write(`Workspace context: ${n.workspace.name}
508
526
  `),n.error==="paid_seats_required"&&n.target_seats&&n.gift_seat_cap&&e.stderr.write(`Target seats: ${n.target_seats} (included ${n.gift_seat_cap}, paid extra ${n.current_paid_extra_seats??0})
509
527
  `),n.open_target&&(r.interactive&&!r.noOpen?(await Fe(e,n.open_target.url),e.stderr.write(`${g("info",r)} Opened ${n.open_target.url}
510
528
  `)):e.stderr.write(`${n.open_target.url}
511
- `)),Af(e.stderr,n.next_steps),1)}catch(n){return n instanceof Te?(e.stderr.write(`${g("error",r)} ${n.message}
529
+ `)),qh(e.stderr,n.next_steps),1)}catch(n){return n instanceof Te?(e.stderr.write(`${g("error",r)} ${n.message}
512
530
  `),64):(e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
513
- `),1)}}async function iE(t,e,r){try{let n=Vf(t),i=await ba(e.env,n.orgSelector),s=await yn(i.organization.slug,e.env,"members",{preferDesktopApp:n.preferDesktopApp,forceWeb:n.forceWeb});return n.open?(r.interactive&&!r.noOpen?(await Fe(e,s.url),e.stdout.write(`${g("ok",r)} Opened ${s.url}
514
- `)):e.stdout.write(`${s.url}
515
- `),0):(e.stdout.write([`${xn(i.organization.name)} (${i.organization.slug})`,`${g("info",r)} Your role: ${i.organization.role}`,"","Members",...i.members.map(o=>`- ${xn(o.email??o.user_id)} \xB7 ${o.role}${o.full_name?` \xB7 ${xn(o.full_name)}`:""}`),"","Pending invites",...i.invites.length?i.invites.map(o=>`- ${o.email} \xB7 ${o.role} \xB7 expires ${o.expires_at}`):["- none"],"",`${s.label}: ${s.url}`,""].join(`
531
+ `),1)}}async function HE(t,e,r){try{let n=cf(t),s=await Pa(e.env,n.orgSelector),i=await vn(s.organization.slug,e.env,"members",{preferDesktopApp:n.preferDesktopApp,forceWeb:n.forceWeb});return n.open?(r.interactive&&!r.noOpen?(await Fe(e,i.url),e.stdout.write(`${g("ok",r)} Opened ${i.url}
532
+ `)):e.stdout.write(`${i.url}
533
+ `),0):(e.stdout.write([`${An(s.organization.name)} (${s.organization.slug})`,`${g("info",r)} Your role: ${s.organization.role}`,"","Members",...s.members.map(o=>`- ${An(o.email??o.user_id)} \xB7 ${o.role}${o.full_name?` \xB7 ${An(o.full_name)}`:""}`),"","Pending invites",...s.invites.length?s.invites.map(o=>`- ${o.email} \xB7 ${o.role} \xB7 expires ${o.expires_at}`):["- none"],"",`${i.label}: ${i.url}`,""].join(`
516
534
  `)),0)}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
517
- `),1}}async function Uf(t,e){try{let r=await Wf(e,t);return {exitCode:0,envelope:k({command:"open",cwd:t.cwd,ok:!0,data:r})}}catch(r){return {exitCode:1,envelope:k({command:"open",cwd:t.cwd,ok:false,error:{code:"open_target_failed",message:r instanceof Error?r.message:String(r)}})}}}async function sE(t,e,r){let n=await Uf(e,[Ff(t),...r]);return {...n,envelope:{...n.envelope,command:t}}}async function oE(t,e){try{let r=await ca(la(e),t.env);return {exitCode:r.ok?0:1,envelope:k({command:"invite",cwd:t.cwd,ok:r.ok,data:r,error:r.ok?void 0:{code:r.error,message:r.message},next_steps:r.next_steps})}}catch(r){let n=V(r,"invite_failed");return {exitCode:r instanceof Te?64:1,envelope:k({command:"invite",cwd:t.cwd,ok:false,error:{code:n,message:r instanceof Error?r.message:String(r)}})}}}async function aE(t,e){try{let r=Vf(e),n=await ba(t.env,r.orgSelector),i=await yn(n.organization.slug,t.env,"members",{preferDesktopApp:r.preferDesktopApp,forceWeb:r.forceWeb});return {exitCode:0,envelope:k({command:"team",cwd:t.cwd,ok:!0,data:r.open?i:{...n,open_target:i}})}}catch(r){let n=V(r,"team_failed");return {exitCode:n.startsWith("unknown_team_option")?64:1,envelope:k({command:"team",cwd:t.cwd,ok:false,error:{code:n,message:r instanceof Error?r.message:String(r)}})}}}async function Wf(t,e){let r=t.find(s=>s&&!["--web","--desktop-app","--no-open"].includes(s)),n=t.includes("--web"),i=t.includes("--desktop-app")&&!n;if(!r){let s=await gr(e);return s?qi(s.id,e.env,{preferDesktopApp:i,forceWeb:n}):uE(e.env)}if(r==="workspace"||r==="--workspace"){let s=await gr(e);if(!s)throw new Error("workspace_required");return qi(s.id,e.env,{preferDesktopApp:i,forceWeb:n})}if(r==="workspace-settings"||r==="--workspace-settings"){let s=await gr(e);if(!s)throw new Error("workspace_required");return Rf(s.id,e.env,"settings",n)}if(r==="agent-setup"||r==="agents"||r==="ai-tools"||r==="--agent-setup"){let s=await gr(e);if(!s)throw new Error("workspace_required");return Rf(s.id,e.env,"ai-tools",n)}if(r==="org"||r==="--org"){let s=await D(e.env);if(!s)throw new Error("org_required");return yn(s.slug,e.env,"home",{preferDesktopApp:i,forceWeb:n})}if(r==="team"||r==="--team")return Ca(e.env,"members",n,i);if(r==="billing"||r==="--billing"||r==="upgrade"||r==="--upgrade")return Ca(e.env,"billing",n,i);if(r==="settings"||r==="--settings")return Ca(e.env,"settings",n,i);if(r==="reactivate"||r==="--reactivate"){let s=await D(e.env);if(!s)throw new Error("org_required");return yn(s.slug,e.env,"reactivate",{preferDesktopApp:i,forceWeb:n})}throw new Error("invalid_open_target")}async function gr(t){let e=await Re(t.env);return Bf(e,t.cwd)??lE(e)}function lE(t){let e=t.find(r=>r.current);return e||(t.length===1?t[0]??null:null)}function Bf(t,e){let r=t.filter(n=>n.local_root_path?cE(n.local_root_path,e):false);return r.sort((n,i)=>(i.local_root_path?.length??0)-(n.local_root_path?.length??0)),r[0]??null}function cE(t,e){let r=resolve(t),n=resolve(e),i=relative(r,n);return i===""||!i.startsWith("..")&&!isAbsolute(i)}function uE(t){return {kind:"web",url:(t.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,""),label:"Open Pathrule Web",reason:"preferred"}}async function Ca(t,e,r,n){let i=await D(t);if(!i)throw new Error("org_required");return yn(i.slug,t,e,{preferDesktopApp:n,forceWeb:r})}function Ff(t){return t==="team"?"team":t==="upgrade"?"upgrade":t==="reactivate"?"reactivate":"billing"}function Ia(t,e){return `${(e.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}/workspace/${encodeURIComponent(t)}`}function dE(t,e,r){let n=`${Ia(t,e)}/settings`;return r==="ai-tools"?`${n}/ai-tools`:n}function Rf(t,e,r,n=false){return {kind:"web",url:dE(t,e,r),label:r==="ai-tools"?"Open AI tools in Pathrule Web":"Open workspace settings in Pathrule Web",reason:n?"forced":"preferred"}}async function qi(t,e,r={}){return r.preferDesktopApp&&!r.forceWeb?{kind:"desktop-app",url:`pathrule://workspace/${encodeURIComponent(t)}`,label:"Open workspace in Pathrule Desktop",reason:"forced"}:!r.forceWeb&&await Oa(e,"workspace")?{kind:"desktop-app",url:`pathrule://workspace/${encodeURIComponent(t)}`,label:"Open workspace in Pathrule Desktop",reason:"preferred"}:{kind:"web",url:Ia(t,e),label:"Open workspace in Pathrule Web",reason:r.forceWeb?"forced":"preferred"}}async function yn(t,e,r,n={}){let i=r==="reactivate"?"billing":r,s={slug:t},o=r==="reactivate"?`${ee(s,e,"billing")}/reactivate`:ee(s,e,i),a=r==="billing"?"Open billing in Pathrule Web":r==="members"?"Open team in Pathrule Web":r==="settings"?"Open settings in Pathrule Web":r==="reactivate"?"Open billing reactivation in Pathrule Web":"Open organization in Pathrule Web";if(n.preferDesktopApp&&!n.forceWeb){let c=r==="members"?"team":r;return {kind:"desktop-app",url:`pathrule://org/${encodeURIComponent(t)}/${c}`,label:a.replace("Pathrule Web","Pathrule Desktop"),reason:"forced"}}let l=r==="members"?"team":r;return !n.forceWeb&&await Oa(e,`org:${l}`)?{kind:"desktop-app",url:`pathrule://org/${encodeURIComponent(t)}/${l}`,label:a.replace("Pathrule Web","Pathrule Desktop"),reason:"preferred"}:{kind:"web",url:o,label:a,reason:n.forceWeb?"forced":"preferred"}}async function Oa(t,e,r=Date.now()){let n=t.PATHRULE_DESKTOP_HEALTH?.trim().toLowerCase();if(n==="healthy"||n==="1"||n==="true")return true;if(n==="unhealthy"||n==="0"||n==="false")return false;let i;try{i=JSON.parse(await readFile(A(t).desktopFile,"utf8"));}catch{return false}if(i.healthy!==true||!i.updated_at)return false;let s=Date.parse(i.updated_at);return !(!Number.isFinite(s)||r-s>600*1e3||i.routes&&!i.routes.includes(e)&&!i.routes.includes("*"))}function Ea(t,e){return `${t} / ${e===-1?"unlimited":e}`}async function pE(t,e,r,n){try{let i=e[0]??"list";if(i==="add"){let a=qf(t,e.slice(1)),l=await ae(Jf(t),r.env);if(!l.allowed)return Vi(l,r.stderr,n),1;let c=await zf(t,a,r),u=await bo(t,c,r.env);r.stdout.write(`${g("ok",n)} Created ${t}: ${u.item.title}
535
+ `),1}}async function Qh(t,e){try{let r=await ef(e,t);return {exitCode:0,envelope:y({command:"open",cwd:t.cwd,ok:!0,data:r})}}catch(r){return {exitCode:1,envelope:y({command:"open",cwd:t.cwd,ok:false,error:{code:"open_target_failed",message:r instanceof Error?r.message:String(r)}})}}}async function qE(t,e,r){let n=await Qh(e,[rf(t),...r]);return {...n,envelope:{...n.envelope,command:t}}}async function zE(t,e){try{let r=await pa(da(e),t.env);return {exitCode:r.ok?0:1,envelope:y({command:"invite",cwd:t.cwd,ok:r.ok,data:r,error:r.ok?void 0:{code:r.error,message:r.message},next_steps:r.next_steps})}}catch(r){let n=V(r,"invite_failed");return {exitCode:r instanceof Te?64:1,envelope:y({command:"invite",cwd:t.cwd,ok:false,error:{code:n,message:r instanceof Error?r.message:String(r)}})}}}async function JE(t,e){try{let r=cf(e),n=await Pa(t.env,r.orgSelector),s=await vn(n.organization.slug,t.env,"members",{preferDesktopApp:r.preferDesktopApp,forceWeb:r.forceWeb});return {exitCode:0,envelope:y({command:"team",cwd:t.cwd,ok:!0,data:r.open?s:{...n,open_target:s}})}}catch(r){let n=V(r,"team_failed");return {exitCode:n.startsWith("unknown_team_option")?64:1,envelope:y({command:"team",cwd:t.cwd,ok:false,error:{code:n,message:r instanceof Error?r.message:String(r)}})}}}async function ef(t,e){let r=t.find(i=>i&&!["--web","--desktop-app","--no-open"].includes(i)),n=t.includes("--web"),s=t.includes("--desktop-app")&&!n;if(!r){let i=await _r(e);return i?Ks(i.id,e.env,{preferDesktopApp:s,forceWeb:n}):GE(e.env)}if(r==="workspace"||r==="--workspace"){let i=await _r(e);if(!i)throw new Error("workspace_required");return Ks(i.id,e.env,{preferDesktopApp:s,forceWeb:n})}if(r==="workspace-settings"||r==="--workspace-settings"){let i=await _r(e);if(!i)throw new Error("workspace_required");return Wh(i.id,e.env,"settings",n)}if(r==="agent-setup"||r==="agents"||r==="ai-tools"||r==="--agent-setup"){let i=await _r(e);if(!i)throw new Error("workspace_required");return Wh(i.id,e.env,"ai-tools",n)}if(r==="org"||r==="--org"){let i=await j(e.env);if(!i)throw new Error("org_required");return vn(i.slug,e.env,"home",{preferDesktopApp:s,forceWeb:n})}if(r==="team"||r==="--team")return Ia(e.env,"members",n,s);if(r==="billing"||r==="--billing"||r==="upgrade"||r==="--upgrade")return Ia(e.env,"billing",n,s);if(r==="settings"||r==="--settings")return Ia(e.env,"settings",n,s);if(r==="reactivate"||r==="--reactivate"){let i=await j(e.env);if(!i)throw new Error("org_required");return vn(i.slug,e.env,"reactivate",{preferDesktopApp:s,forceWeb:n})}throw new Error("invalid_open_target")}async function _r(t){let e=await Re(t.env);return tf(e,t.cwd)??KE(e)}function KE(t){let e=t.find(r=>r.current);return e||(t.length===1?t[0]??null:null)}function tf(t,e){let r=t.filter(n=>n.local_root_path?VE(n.local_root_path,e):false);return r.sort((n,s)=>(s.local_root_path?.length??0)-(n.local_root_path?.length??0)),r[0]??null}function VE(t,e){let r=resolve(t),n=resolve(e),s=relative(r,n);return s===""||!s.startsWith("..")&&!isAbsolute(s)}function GE(t){return {kind:"web",url:(t.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,""),label:"Open Pathrule Web",reason:"preferred"}}async function Ia(t,e,r,n){let s=await j(t);if(!s)throw new Error("org_required");return vn(s.slug,t,e,{preferDesktopApp:n,forceWeb:r})}function rf(t){return t==="team"?"team":t==="upgrade"?"upgrade":t==="reactivate"?"reactivate":"billing"}function La(t,e){return `${(e.PATHRULE_WEB_URL??"https://app.pathrule.io").replace(/\/$/,"")}/workspace/${encodeURIComponent(t)}`}function YE(t,e,r){let n=`${La(t,e)}/settings`;return r==="ai-tools"?`${n}/ai-tools`:n}function Wh(t,e,r,n=false){return {kind:"web",url:YE(t,e,r),label:r==="ai-tools"?"Open AI tools in Pathrule Web":"Open workspace settings in Pathrule Web",reason:n?"forced":"preferred"}}async function Ks(t,e,r={}){return r.preferDesktopApp&&!r.forceWeb?{kind:"desktop-app",url:`pathrule://workspace/${encodeURIComponent(t)}`,label:"Open workspace in Pathrule Desktop",reason:"forced"}:!r.forceWeb&&await Ua(e,"workspace")?{kind:"desktop-app",url:`pathrule://workspace/${encodeURIComponent(t)}`,label:"Open workspace in Pathrule Desktop",reason:"preferred"}:{kind:"web",url:La(t,e),label:"Open workspace in Pathrule Web",reason:r.forceWeb?"forced":"preferred"}}async function vn(t,e,r,n={}){let s=r==="reactivate"?"billing":r,i={slug:t},o=r==="reactivate"?`${ee(i,e,"billing")}/reactivate`:ee(i,e,s),a=r==="billing"?"Open billing in Pathrule Web":r==="members"?"Open team in Pathrule Web":r==="settings"?"Open settings in Pathrule Web":r==="reactivate"?"Open billing reactivation in Pathrule Web":"Open organization in Pathrule Web";if(n.preferDesktopApp&&!n.forceWeb){let c=r==="members"?"team":r;return {kind:"desktop-app",url:`pathrule://org/${encodeURIComponent(t)}/${c}`,label:a.replace("Pathrule Web","Pathrule Desktop"),reason:"forced"}}let l=r==="members"?"team":r;return !n.forceWeb&&await Ua(e,`org:${l}`)?{kind:"desktop-app",url:`pathrule://org/${encodeURIComponent(t)}/${l}`,label:a.replace("Pathrule Web","Pathrule Desktop"),reason:"preferred"}:{kind:"web",url:o,label:a,reason:n.forceWeb?"forced":"preferred"}}async function Ua(t,e,r=Date.now()){let n=t.PATHRULE_DESKTOP_HEALTH?.trim().toLowerCase();if(n==="healthy"||n==="1"||n==="true")return true;if(n==="unhealthy"||n==="0"||n==="false")return false;let s;try{s=JSON.parse(await readFile(A(t).desktopFile,"utf8"));}catch{return false}if(s.healthy!==true||!s.updated_at)return false;let i=Date.parse(s.updated_at);return !(!Number.isFinite(i)||r-i>600*1e3||s.routes&&!s.routes.includes(e)&&!s.routes.includes("*"))}function Oa(t,e){return `${t} / ${e===-1?"unlimited":e}`}async function XE(t,e,r,n){try{let s=e[0]??"list";if(s==="add"){let a=sf(t,e.slice(1)),l=await ae(af(t),r.env);if(!l.allowed)return Xs(l,r.stderr,n),1;let c=await of(t,a,r),u=await Co(t,c,r.env);r.stdout.write(`${g("ok",n)} Created ${t}: ${u.item.title}
518
536
  `),r.stdout.write(`${g("info",n)} Path: ${u.item.path}
519
- `),a.open?await Fi({kind:t,title:u.item.title,totalResults:1,target:u.item.open_targets[0],runtime:r,mode:n}):r.stdout.write(`${g("info",n)} URL: ${u.item.url}
537
+ `),a.open?await zs({kind:t,title:u.item.title,totalResults:1,target:u.item.open_targets[0],runtime:r,mode:n}):r.stdout.write(`${g("info",n)} URL: ${u.item.url}
520
538
  `);for(let d of u.warnings)r.stdout.write(`${g("warn",n)} ${d.message??d.code}
521
- `);return 0}let s=Ji(e.slice(1));if(i==="read"){let a=s.positionals[0];if(!a)return r.stderr.write(`${g("error",n)} Usage: pathrule ${t} read <id-or-title>
522
- `),64;let l=await _o(t,a,r.env);return s.open||!Mu(l.content,s.print)?(await Fi({kind:t,title:l.title,totalResults:1,target:await Pa(l,s,r.env),runtime:r,mode:n,reason:s.open?void 0:"Content is long, so Pathrule CLI is pointing you to Pathrule Web by default. Pass --print to view it in the terminal."}),0):(r.stdout.write([`${l.kind}: ${l.title}`,`Path: ${l.path??"/"}`,`URL: ${l.url}`,"",l.content,""].join(`
523
- `)),0)}if(i!=="list")return r.stderr.write(`${g("error",n)} Usage: pathrule ${t} list|read|add
524
- `),64;let o=await en(t,r.env,s);if(Hf(r.stdout,n,o),s.open&&o.length>0){let a=await Gf(t,o,r,n);if(!a)return 0;await Fi({kind:t,title:a.item.title,totalResults:o.length,selectionIndex:a.index,target:await Pa(a.item,s,r.env),runtime:r,mode:n});}return 0}catch(i){return i instanceof X?(r.stderr.write(`${g("error",n)} ${i.message}
525
- `),64):(r.stderr.write(`${g("error",n)} ${i instanceof Error?i.message:String(i)}
526
- `),1)}}async function fE(t,e,r){try{let n=Ji(t),i=n.positionals.join(" ").trim();if(!i)return e.stderr.write(`${g("error",r)} Usage: pathrule search <query>
527
- `),64;let s=await mo(i,e.env,{...n,types:n.types});if(Hf(e.stdout,r,s),n.open&&s.length>0){let o=await Gf("result",s,e,r);if(!o)return 0;await Fi({kind:o.item.kind,title:o.item.title,totalResults:s.length,selectionIndex:o.index,target:await Pa(o.item,n,e.env),runtime:e,mode:r});}return 0}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
528
- `),1}}async function hE(t,e,r){let n=t[0]??"list";try{if(n==="list"){let i=et(t.slice(1)),s=await gn(e.env,{includeInProgress:i.includeInProgress,limit:i.limit});if(vE(e.stdout,r,s),i.open&&s.length>0){let o=s[0];if(!o)return 0;await Tf({target:Di(o,{forceWeb:i.forceWeb,preferDesktopApp:i.preferDesktopApp}),title:o.subjectTitle,totalResults:s.length,runtime:e,mode:r});}return 0}if(n==="claim"){let i=et(t.slice(1)),s=await ua(e.env,i.positionals[0]);return SE(e.stdout,r,s),0}if(n==="resolve"){let i=et(t.slice(1)),s=i.positionals[0];if(!s)return e.stderr.write(`${g("error",r)} Usage: pathrule refresh resolve <refresh-id> --status applied|rejected [--note "..."]
529
- `),64;if(i.status!=="applied"&&i.status!=="rejected")return e.stderr.write(`${g("error",r)} Usage: pathrule refresh resolve <refresh-id> --status applied|rejected [--note "..."]
530
- `),64;let o=await da(e.env,s,i.status,{note:i.note});return e.stdout.write(`${g("ok",r)} Refresh task marked ${o.status}.
539
+ `);return 0}let i=Gs(e.slice(1));if(s==="read"){let a=i.positionals[0];if(!a)return r.stderr.write(`${g("error",n)} Usage: pathrule ${t} read <id-or-title>
540
+ `),64;let l=await ko(t,a,r.env);return i.open||!qu(l.content,i.print)?(await zs({kind:t,title:l.title,totalResults:1,target:await Da(l,i,r.env),runtime:r,mode:n,reason:i.open?void 0:"Content is long, so Pathrule CLI is pointing you to Pathrule Web by default. Pass --print to view it in the terminal."}),0):(r.stdout.write([`${l.kind}: ${l.title}`,`Path: ${l.path??"/"}`,`URL: ${l.url}`,"",l.content,""].join(`
541
+ `)),0)}if(s!=="list")return r.stderr.write(`${g("error",n)} Usage: pathrule ${t} list|read|add
542
+ `),64;let o=await rn(t,r.env,i);if(nf(r.stdout,n,o),i.open&&o.length>0){let a=await uf(t,o,r,n);if(!a)return 0;await zs({kind:t,title:a.item.title,totalResults:o.length,selectionIndex:a.index,target:await Da(a.item,i,r.env),runtime:r,mode:n});}return 0}catch(s){return s instanceof X?(r.stderr.write(`${g("error",n)} ${s.message}
543
+ `),64):(r.stderr.write(`${g("error",n)} ${s instanceof Error?s.message:String(s)}
544
+ `),1)}}async function ZE(t,e,r){try{let n=Gs(t),s=n.positionals.join(" ").trim();if(!s)return e.stderr.write(`${g("error",r)} Usage: pathrule search <query>
545
+ `),64;let i=await yo(s,e.env,{...n,types:n.types});if(nf(e.stdout,r,i),n.open&&i.length>0){let o=await uf("result",i,e,r);if(!o)return 0;await zs({kind:o.item.kind,title:o.item.title,totalResults:i.length,selectionIndex:o.index,target:await Da(o.item,n,e.env),runtime:e,mode:r});}return 0}catch(n){return e.stderr.write(`${g("error",r)} ${n instanceof Error?n.message:String(n)}
546
+ `),1}}async function QE(t,e,r){let n=t[0]??"list";try{if(n==="list"){let s=tt(t.slice(1)),i=await _n(e.env,{includeInProgress:s.includeInProgress,limit:s.limit});if(aR(e.stdout,r,i),s.open&&i.length>0){let o=i[0];if(!o)return 0;await Hh({target:Ls(o,{forceWeb:s.forceWeb,preferDesktopApp:s.preferDesktopApp}),title:o.subjectTitle,totalResults:i.length,runtime:e,mode:r});}return 0}if(n==="claim"){let s=tt(t.slice(1)),i=await ha(e.env,s.positionals[0]);return lR(e.stdout,r,i),0}if(n==="resolve"){let s=tt(t.slice(1)),i=s.positionals[0];if(!i)return e.stderr.write(`${g("error",r)} Usage: pathrule refresh resolve <refresh-id> --status applied|rejected [--note "..."]
547
+ `),64;if(s.status!=="applied"&&s.status!=="rejected")return e.stderr.write(`${g("error",r)} Usage: pathrule refresh resolve <refresh-id> --status applied|rejected [--note "..."]
548
+ `),64;let o=await fa(e.env,i,s.status,{note:s.note});return e.stdout.write(`${g("ok",r)} Refresh task marked ${o.status}.
531
549
  `),o.resolvedNote&&e.stdout.write(`${g("info",r)} Note: ${o.resolvedNote}
532
- `),0}if(n==="open"){let i=et(t.slice(1)),s=await pa(e.env,i.positionals[0]);return await Tf({target:Di(s,{forceWeb:i.forceWeb,preferDesktopApp:i.preferDesktopApp}),title:s.subjectTitle,totalResults:1,runtime:e,mode:r}),0}return e.stderr.write(`${g("error",r)} Usage: pathrule refresh list|claim|resolve|open
533
- `),64}catch(i){return e.stderr.write(`${g("error",r)} ${i instanceof Error?i.message:String(i)}
534
- `),V(i,"refresh_failed")==="workspace_required",1}}async function gE(t,e){let r=await cn(t.env,t.cwd),n=op(r);t.stdout.write(`Pathrule repair
550
+ `),0}if(n==="open"){let s=tt(t.slice(1)),i=await ga(e.env,s.positionals[0]);return await Hh({target:Ls(i,{forceWeb:s.forceWeb,preferDesktopApp:s.preferDesktopApp}),title:i.subjectTitle,totalResults:1,runtime:e,mode:r}),0}return e.stderr.write(`${g("error",r)} Usage: pathrule refresh list|claim|resolve|open
551
+ `),64}catch(s){return e.stderr.write(`${g("error",r)} ${s instanceof Error?s.message:String(s)}
552
+ `),V(s,"refresh_failed")==="workspace_required",1}}async function eR(t,e){let r=await dn(t.env,t.cwd),n=hp(r);t.stdout.write(`Pathrule repair
535
553
  `),t.stdout.write(`${g(n.ok?"ok":"error",e)} ${n.headline}${r.error?`: ${r.error}`:""}
536
- `);for(let i of n.sections){t.stdout.write(`
537
- ${i.title}
538
- `);for(let s of i.lines)t.stdout.write(`${g(i.status==="pass"?"ok":i.status==="warn"?"warn":"error",e)} ${s}
554
+ `);for(let s of n.sections){t.stdout.write(`
555
+ ${s.title}
556
+ `);for(let i of s.lines)t.stdout.write(`${g(s.status==="pass"?"ok":s.status==="warn"?"warn":"error",e)} ${i}
539
557
  `);}return t.stdout.write(`
540
558
  Next: ${n.next_command}
541
- `),n.ok?0:1}async function mE(t,e,r,n){if((t[0]??"prune")!=="prune")return e.stderr.write(`${g("error",r)} Usage: pathrule cache prune [--yes]
542
- `),64;let s=await Yo(e.env,{dryRun:!n});return s.dry_run?(e.stdout.write(`${g("warn",r)} Dry run: ${s.candidates.length} stale epoch cache dirs found
559
+ `),n.ok?0:1}async function tR(t,e,r,n){if((t[0]??"prune")!=="prune")return e.stderr.write(`${g("error",r)} Usage: pathrule cache prune [--yes]
560
+ `),64;let i=await Qo(e.env,{dryRun:!n});return i.dry_run?(e.stdout.write(`${g("warn",r)} Dry run: ${i.candidates.length} stale epoch cache dirs found
543
561
  `),e.stdout.write(`Run pathrule cache prune --yes to remove them.
544
- `)):e.stdout.write(`${g("ok",r)} Removed ${s.candidates.filter(o=>o.removed).length} stale epoch cache dirs
545
- `),0}async function _E(t,e,r){try{let n=r[0]??"list";if(n==="add"){let o=qf(t,r.slice(1)),a=await ae(Jf(t),e.env);if(!a.allowed){let u=ar(a);return {exitCode:1,envelope:k({command:`${t} add`,cwd:e.cwd,ok:!1,error:{code:a.blocking_reason??"preflight_blocked",message:u.summary,remediation:Ki(u)}})}}let l=await zf(t,o,e),c=await bo(t,l,e.env);return {exitCode:0,envelope:k({command:`${t} add`,cwd:e.cwd,ok:!0,data:{...c,open_target:c.item.open_targets[0]??null}})}}let i=Ji(r.slice(1)),s=n==="read"?await _o(t,$a(i.positionals[0],`${t}_selector_required`),e.env):await en(t,e.env,i);return {exitCode:0,envelope:k({command:t,cwd:e.cwd,ok:!0,data:s})}}catch(n){return {exitCode:n instanceof X?64:1,envelope:k({command:r[0]==="add"?`${t} add`:t,cwd:e.cwd,ok:false,error:{code:V(n,"content_command_failed"),message:n instanceof Error?n.message:String(n)}})}}}async function wE(t,e){try{let r=Ji(e),n=$a(r.positionals.join(" ").trim(),"search_query_required"),i=await mo(n,t.env,r);return {exitCode:0,envelope:k({command:"search",cwd:t.cwd,ok:!0,data:i})}}catch(r){return {exitCode:1,envelope:k({command:"search",cwd:t.cwd,ok:false,error:{code:"search_failed",message:r instanceof Error?r.message:String(r)}})}}}async function yE(t,e){let r=e[0]??"list";try{if(r==="list"){let n=et(e.slice(1)),i=await gn(t.env,{includeInProgress:n.includeInProgress,limit:n.limit});return {exitCode:0,envelope:k({command:"refresh list",cwd:t.cwd,ok:!0,data:i})}}if(r==="claim"){let n=et(e.slice(1)),i=await ua(t.env,n.positionals[0]);return {exitCode:0,envelope:k({command:"refresh claim",cwd:t.cwd,ok:!0,data:i})}}if(r==="resolve"){let n=et(e.slice(1)),i=$a(n.positionals[0],"refresh_id_required");if(n.status!=="applied"&&n.status!=="rejected")throw new Error("refresh_status_required");let s=await da(t.env,i,n.status,{note:n.note});return {exitCode:0,envelope:k({command:"refresh resolve",cwd:t.cwd,ok:!0,data:s})}}if(r==="open"){let n=et(e.slice(1)),i=await pa(t.env,n.positionals[0]),s={refresh:i,open_target:Di(i,{forceWeb:n.forceWeb,preferDesktopApp:n.preferDesktopApp})};return {exitCode:0,envelope:k({command:"refresh open",cwd:t.cwd,ok:!0,data:s})}}return {exitCode:64,envelope:k({command:"refresh",cwd:t.cwd,ok:!1,error:{code:"usage",message:"Usage: pathrule refresh list|claim|resolve|open"}})}}catch(n){let i=V(n,"refresh_failed");return {exitCode:i==="refresh_id_required"||i==="refresh_status_required"?64:1,envelope:k({command:r==="list"?"refresh list":`refresh ${r}`,cwd:t.cwd,ok:false,error:{code:i,message:n instanceof Error?n.message:String(n),remediation:i==="workspace_required"?[{label:"Select a workspace",command:"pathrule workspace use <name-or-id>"}]:void 0}})}}}async function kE(t){let e=await cn(t.env,t.cwd);return {exitCode:e.ok?0:1,envelope:k({command:"repair",cwd:t.cwd,ok:e.ok,data:e.ok?e:void 0,error:e.ok?void 0:{code:"repair_failed",message:e.error??"Repair incomplete"}})}}async function bE(t,e,r){if((e[0]??"prune")!=="prune")return {exitCode:64,envelope:k({command:"cache",cwd:t.cwd,ok:false,error:{code:"usage",message:"Usage: pathrule cache prune [--yes]"}})};let i=await Yo(t.env,{dryRun:!r});return {exitCode:0,envelope:k({command:"cache",cwd:t.cwd,ok:true,data:i})}}function Hf(t,e,r){if(r.length===0){t.write(`${g("warn",e)} No content found.
562
+ `)):e.stdout.write(`${g("ok",r)} Removed ${i.candidates.filter(o=>o.removed).length} stale epoch cache dirs
563
+ `),0}async function rR(t,e,r){try{let n=r[0]??"list";if(n==="add"){let o=sf(t,r.slice(1)),a=await ae(af(t),e.env);if(!a.allowed){let u=lr(a);return {exitCode:1,envelope:y({command:`${t} add`,cwd:e.cwd,ok:!1,error:{code:a.blocking_reason??"preflight_blocked",message:u.summary,remediation:Ys(u)}})}}let l=await of(t,o,e),c=await Co(t,l,e.env);return {exitCode:0,envelope:y({command:`${t} add`,cwd:e.cwd,ok:!0,data:{...c,open_target:c.item.open_targets[0]??null}})}}let s=Gs(r.slice(1)),i=n==="read"?await ko(t,Wa(s.positionals[0],`${t}_selector_required`),e.env):await rn(t,e.env,s);return {exitCode:0,envelope:y({command:t,cwd:e.cwd,ok:!0,data:i})}}catch(n){return {exitCode:n instanceof X?64:1,envelope:y({command:r[0]==="add"?`${t} add`:t,cwd:e.cwd,ok:false,error:{code:V(n,"content_command_failed"),message:n instanceof Error?n.message:String(n)}})}}}async function nR(t,e){try{let r=Gs(e),n=Wa(r.positionals.join(" ").trim(),"search_query_required"),s=await yo(n,t.env,r);return {exitCode:0,envelope:y({command:"search",cwd:t.cwd,ok:!0,data:s})}}catch(r){return {exitCode:1,envelope:y({command:"search",cwd:t.cwd,ok:false,error:{code:"search_failed",message:r instanceof Error?r.message:String(r)}})}}}async function sR(t,e){let r=e[0]??"list";try{if(r==="list"){let n=tt(e.slice(1)),s=await _n(t.env,{includeInProgress:n.includeInProgress,limit:n.limit});return {exitCode:0,envelope:y({command:"refresh list",cwd:t.cwd,ok:!0,data:s})}}if(r==="claim"){let n=tt(e.slice(1)),s=await ha(t.env,n.positionals[0]);return {exitCode:0,envelope:y({command:"refresh claim",cwd:t.cwd,ok:!0,data:s})}}if(r==="resolve"){let n=tt(e.slice(1)),s=Wa(n.positionals[0],"refresh_id_required");if(n.status!=="applied"&&n.status!=="rejected")throw new Error("refresh_status_required");let i=await fa(t.env,s,n.status,{note:n.note});return {exitCode:0,envelope:y({command:"refresh resolve",cwd:t.cwd,ok:!0,data:i})}}if(r==="open"){let n=tt(e.slice(1)),s=await ga(t.env,n.positionals[0]),i={refresh:s,open_target:Ls(s,{forceWeb:n.forceWeb,preferDesktopApp:n.preferDesktopApp})};return {exitCode:0,envelope:y({command:"refresh open",cwd:t.cwd,ok:!0,data:i})}}return {exitCode:64,envelope:y({command:"refresh",cwd:t.cwd,ok:!1,error:{code:"usage",message:"Usage: pathrule refresh list|claim|resolve|open"}})}}catch(n){let s=V(n,"refresh_failed");return {exitCode:s==="refresh_id_required"||s==="refresh_status_required"?64:1,envelope:y({command:r==="list"?"refresh list":`refresh ${r}`,cwd:t.cwd,ok:false,error:{code:s,message:n instanceof Error?n.message:String(n),remediation:s==="workspace_required"?[{label:"Select a workspace",command:"pathrule workspace use <name-or-id>"}]:void 0}})}}}async function iR(t){let e=await dn(t.env,t.cwd);return {exitCode:e.ok?0:1,envelope:y({command:"repair",cwd:t.cwd,ok:e.ok,data:e.ok?e:void 0,error:e.ok?void 0:{code:"repair_failed",message:e.error??"Repair incomplete"}})}}async function oR(t,e,r){if((e[0]??"prune")!=="prune")return {exitCode:64,envelope:y({command:"cache",cwd:t.cwd,ok:false,error:{code:"usage",message:"Usage: pathrule cache prune [--yes]"}})};let s=await Qo(t.env,{dryRun:!r});return {exitCode:0,envelope:y({command:"cache",cwd:t.cwd,ok:true,data:s})}}function nf(t,e,r){if(r.length===0){t.write(`${g("warn",e)} No content found.
546
564
  `);return}for(let n of r)t.write([`${n.kind.padEnd(6)} ${n.title}`,` ${n.path??"/"} ${n.updated_at??""}`,n.preview?` ${n.preview}`:"",` ${n.url}`].filter(Boolean).join(`
547
565
  `)+`
548
- `);}function vE(t,e,r){if(r.length===0){t.write(`${g("warn",e)} No pending refresh tasks.
566
+ `);}function aR(t,e,r){if(r.length===0){t.write(`${g("warn",e)} No pending refresh tasks.
549
567
  `);return}for(let n of r)t.write([`${n.status.padEnd(11)} ${n.subjectTitle}`,` ${n.subjectType} ${n.nodePath} ${n.formulaId}`,` ${n.humanReason}`,` ${n.url}`].filter(Boolean).join(`
550
568
  `)+`
551
- `);}function SE(t,e,r){let n=r.brief.subject,i=r.brief.signal;t.write([`${g("ok",e)} Claimed refresh task ${r.id}`,`Subject: ${n?.type??r.subjectType} ${n?.title??r.subjectId}`,`Path: ${n?.nodePath??"/"}`,`Reason: ${i?.humanReason??r.formulaId}`,"",r.brief.aiInstructions?`Instructions:
569
+ `);}function lR(t,e,r){let n=r.brief.subject,s=r.brief.signal;t.write([`${g("ok",e)} Claimed refresh task ${r.id}`,`Subject: ${n?.type??r.subjectType} ${n?.title??r.subjectId}`,`Path: ${n?.nodePath??"/"}`,`Reason: ${s?.humanReason??r.formulaId}`,"",r.brief.aiInstructions?`Instructions:
552
570
  ${r.brief.aiInstructions}`:"",r.brief.proposedPatch?.newBody?`
553
- Proposed patch: ${r.brief.proposedPatch.reasoning} (confidence ${r.brief.proposedPatch.confidence})`:"","",`Next: update the ${r.subjectType}, then run pathrule refresh resolve ${r.id} --status applied`,`URL: ${r.url}`].filter(s=>s!=="").join(`
571
+ Proposed patch: ${r.brief.proposedPatch.reasoning} (confidence ${r.brief.proposedPatch.confidence})`:"","",`Next: update the ${r.subjectType}, then run pathrule refresh resolve ${r.id} --status applied`,`URL: ${r.url}`].filter(i=>i!=="").join(`
554
572
  `)+`
555
- `);}function Ji(t){let e={open:false,print:false,forceWeb:false,preferDesktopApp:false,positionals:[]};for(let r=0;r<t.length;r+=1){let n=t[r];n==="--path"?e.path=t[++r]:n==="--limit"?e.limit=Number(t[++r]):n==="--type"?e.types=CE(t[++r]):n==="--open"?e.open=true:n==="--print"?e.print=true:n==="--web"?e.forceWeb=true:n==="--desktop-app"?e.preferDesktopApp=true:n?.startsWith("/")&&e.positionals.length===0&&!e.path?e.path=n:n&&e.positionals.push(n);}return e}function et(t){let e={includeInProgress:false,open:false,forceWeb:false,preferDesktopApp:false,positionals:[]};for(let r=0;r<t.length;r+=1){let n=t[r];if(n){if(n==="--all"||n==="--include-in-progress"){e.includeInProgress=true;continue}if(n==="--limit"){e.limit=Number(t[++r]);continue}if(n==="--open"){e.open=true;continue}if(n==="--web"){e.forceWeb=true;continue}if(n==="--desktop-app"){e.preferDesktopApp=true;continue}if(n==="--status"){let i=t[++r];(i==="applied"||i==="rejected")&&(e.status=i);continue}if(n==="--note"){e.note=t[++r]??"";continue}e.positionals.push(n);}}return e}function qf(t,e){let r={allowDuplicate:false,open:false,positionals:[]};for(let n=0;n<e.length;n+=1){let i=e[n];if(i){if(i==="--path"){r.path=Dt(e[++n],"--path","content_path_required");continue}if(i==="--title"){r.title=Dt(e[++n],"--title",`${t}_title_required`);continue}if(i==="--name"){r.name=Dt(e[++n],"--name",`${t}_name_required`);continue}if(i==="--description"){r.description=Dt(e[++n],"--description","skill_description_required");continue}if(i==="--body"){r.body=Dt(e[++n],"--body","content_body_required");continue}if(i==="--priority"){r.priority=Dt(e[++n],"--priority","rule_priority_required");continue}if(i==="--scope"){r.scope=Dt(e[++n],"--scope","rule_scope_required");continue}if(i==="--allow-duplicate"){r.allowDuplicate=true;continue}if(i==="--open"){r.open=true;continue}if(i?.startsWith("/")&&r.positionals.length===0&&!r.path){r.path=i;continue}if(i.startsWith("--"))throw new X("unknown_content_option",`Unknown ${t} option "${i}".`);r.positionals.push(i);}}if(t==="memory"?r.positionals.length>0&&!r.title&&(r.title=r.positionals.shift()):r.positionals.length>0&&!r.name&&(r.name=r.positionals.shift()),r.positionals.length>0)throw new X("unexpected_content_argument",`Unexpected extra argument "${r.positionals[0]}".`);return r}async function zf(t,e,r){let n=e.path?.trim();if(!n)throw new X("content_path_required",Ui(t));if(t==="memory"){let s=e.title?.trim();if(!s)throw new X("memory_title_required",Ui(t));return {path:n,title:s,body:await Ra(r,t,{path:n,title:s,body:e.body??""}),allowDuplicate:e.allowDuplicate}}if(t==="rule"){let s=e.name?.trim();if(!s)throw new X("rule_name_required",Ui(t));return {path:n,name:s,body:await Ra(r,t,{path:n,name:s,body:e.body??"",priority:xf(e.priority),scopeType:Pf(e.scope)}),priority:xf(e.priority),scopeType:Pf(e.scope),allowDuplicate:e.allowDuplicate}}let i=e.name?.trim();if(!i)throw new X("skill_name_required",Ui(t));return {path:n,name:i,description:e.description?.trim()||null,body:await Ra(r,t,{path:n,name:i,description:e.description?.trim()||null,body:e.body??""})}}async function Ra(t,e,r){if("body"in r&&typeof r.body=="string"&&r.body.trim())return xa(r.body);if(!(t.stdinIsTTY??process.stdin.isTTY??true)){let a=t.readStdin?await t.readStdin():await xE();return xa(a)}let i=Uu(e,r),s=e==="skill"?"SKILL.md":`${e}.md`,o=t.editText?await t.editText(i,s):await PE(t,i,s);return xa(o)}function xf(t){let e=t?.trim().toLowerCase()||"medium";if(e==="high"||e==="medium"||e==="low")return e;throw new X("invalid_rule_priority","Rule priority must be high, medium, or low.")}function Pf(t){let e=t?.trim().toLowerCase()||"project";if(e==="folder"||e==="file_type"||e==="project")return e;throw new X("invalid_rule_scope","Rule scope must be folder, file_type, or project.")}function Dt(t,e,r){if(!t)throw new X(r,`${e} requires a value.`);return t}function xa(t){let e=t.replace(/\r\n/g,`
556
- `);if(!e.trim())throw new X("content_body_required","Content body is required. Pass --body, pipe stdin, or save content in your editor.");return e}function Ui(t){return t==="memory"?"Usage: pathrule memory add --path </node/path> --title <title> [--body <text>] [--allow-duplicate] [--open]":t==="rule"?"Usage: pathrule rule add --path </node/path> --name <name> [--body <text>] [--priority high|medium|low] [--scope project|folder|file_type] [--allow-duplicate] [--open]":"Usage: pathrule skill add --path </node/path> --name <name> [--description <text>] [--body <text>] [--open]"}function Jf(t){return t==="memory"?"write_memory":t==="rule"?"write_rule":"write_skill"}function CE(t){if(!t)return [];let e=new Set(["memory","rule","skill"]);return t.split(",").map(r=>r.trim()).filter(r=>e.has(r))}function $a(t,e){if(!t)throw new Error(e);return t}async function EE(t,e,r,n){try{if(t==="current"){let s=await D(r.env);return s?(r.stdout.write(`${g("ok",n)} ${s.name} (${s.slug}) \u2014 ${s.role}
573
+ `);}function Gs(t){let e={open:false,print:false,forceWeb:false,preferDesktopApp:false,positionals:[]};for(let r=0;r<t.length;r+=1){let n=t[r];n==="--path"?e.path=t[++r]:n==="--limit"?e.limit=Number(t[++r]):n==="--type"?e.types=cR(t[++r]):n==="--open"?e.open=true:n==="--print"?e.print=true:n==="--web"?e.forceWeb=true:n==="--desktop-app"?e.preferDesktopApp=true:n?.startsWith("/")&&e.positionals.length===0&&!e.path?e.path=n:n&&e.positionals.push(n);}return e}function tt(t){let e={includeInProgress:false,open:false,forceWeb:false,preferDesktopApp:false,positionals:[]};for(let r=0;r<t.length;r+=1){let n=t[r];if(n){if(n==="--all"||n==="--include-in-progress"){e.includeInProgress=true;continue}if(n==="--limit"){e.limit=Number(t[++r]);continue}if(n==="--open"){e.open=true;continue}if(n==="--web"){e.forceWeb=true;continue}if(n==="--desktop-app"){e.preferDesktopApp=true;continue}if(n==="--status"){let s=t[++r];(s==="applied"||s==="rejected")&&(e.status=s);continue}if(n==="--note"){e.note=t[++r]??"";continue}e.positionals.push(n);}}return e}function sf(t,e){let r={allowDuplicate:false,open:false,positionals:[]};for(let n=0;n<e.length;n+=1){let s=e[n];if(s){if(s==="--path"){r.path=jt(e[++n],"--path","content_path_required");continue}if(s==="--title"){r.title=jt(e[++n],"--title",`${t}_title_required`);continue}if(s==="--name"){r.name=jt(e[++n],"--name",`${t}_name_required`);continue}if(s==="--description"){r.description=jt(e[++n],"--description","skill_description_required");continue}if(s==="--body"){r.body=jt(e[++n],"--body","content_body_required");continue}if(s==="--priority"){r.priority=jt(e[++n],"--priority","rule_priority_required");continue}if(s==="--scope"){r.scope=jt(e[++n],"--scope","rule_scope_required");continue}if(s==="--allow-duplicate"){r.allowDuplicate=true;continue}if(s==="--open"){r.open=true;continue}if(s?.startsWith("/")&&r.positionals.length===0&&!r.path){r.path=s;continue}if(s.startsWith("--"))throw new X("unknown_content_option",`Unknown ${t} option "${s}".`);r.positionals.push(s);}}if(t==="memory"?r.positionals.length>0&&!r.title&&(r.title=r.positionals.shift()):r.positionals.length>0&&!r.name&&(r.name=r.positionals.shift()),r.positionals.length>0)throw new X("unexpected_content_argument",`Unexpected extra argument "${r.positionals[0]}".`);return r}async function of(t,e,r){let n=e.path?.trim();if(!n)throw new X("content_path_required",Fs(t));if(t==="memory"){let i=e.title?.trim();if(!i)throw new X("memory_title_required",Fs(t));return {path:n,title:i,body:await $a(r,t,{path:n,title:i,body:e.body??""}),allowDuplicate:e.allowDuplicate}}if(t==="rule"){let i=e.name?.trim();if(!i)throw new X("rule_name_required",Fs(t));return {path:n,name:i,body:await $a(r,t,{path:n,name:i,body:e.body??"",priority:Bh(e.priority),scopeType:Fh(e.scope)}),priority:Bh(e.priority),scopeType:Fh(e.scope),allowDuplicate:e.allowDuplicate}}let s=e.name?.trim();if(!s)throw new X("skill_name_required",Fs(t));return {path:n,name:s,description:e.description?.trim()||null,body:await $a(r,t,{path:n,name:s,description:e.description?.trim()||null,body:e.body??""})}}async function $a(t,e,r){if("body"in r&&typeof r.body=="string"&&r.body.trim())return Na(r.body);if(!(t.stdinIsTTY??process.stdin.isTTY??true)){let a=t.readStdin?await t.readStdin():await pR();return Na(a)}let s=Ju(e,r),i=e==="skill"?"SKILL.md":`${e}.md`,o=t.editText?await t.editText(s,i):await hR(t,s,i);return Na(o)}function Bh(t){let e=t?.trim().toLowerCase()||"medium";if(e==="high"||e==="medium"||e==="low")return e;throw new X("invalid_rule_priority","Rule priority must be high, medium, or low.")}function Fh(t){let e=t?.trim().toLowerCase()||"project";if(e==="folder"||e==="file_type"||e==="project")return e;throw new X("invalid_rule_scope","Rule scope must be folder, file_type, or project.")}function jt(t,e,r){if(!t)throw new X(r,`${e} requires a value.`);return t}function Na(t){let e=t.replace(/\r\n/g,`
574
+ `);if(!e.trim())throw new X("content_body_required","Content body is required. Pass --body, pipe stdin, or save content in your editor.");return e}function Fs(t){return t==="memory"?"Usage: pathrule memory add --path </node/path> --title <title> [--body <text>] [--allow-duplicate] [--open]":t==="rule"?"Usage: pathrule rule add --path </node/path> --name <name> [--body <text>] [--priority high|medium|low] [--scope project|folder|file_type] [--allow-duplicate] [--open]":"Usage: pathrule skill add --path </node/path> --name <name> [--description <text>] [--body <text>] [--open]"}function af(t){return t==="memory"?"write_memory":t==="rule"?"write_rule":"write_skill"}function cR(t){if(!t)return [];let e=new Set(["memory","rule","skill"]);return t.split(",").map(r=>r.trim()).filter(r=>e.has(r))}function Wa(t,e){if(!t)throw new Error(e);return t}async function uR(t,e,r,n){try{if(t==="current"){let i=await j(r.env);return i?(r.stdout.write(`${g("ok",n)} ${i.name} (${i.slug}) \u2014 ${i.role}
557
575
  `),0):(r.stdout.write(`${g("warn",n)} No organizations found.
558
- `),1)}if(t==="use"){let s=e[0];if(!s)return r.stderr.write(`${g("error",n)} Usage: pathrule org use <slug-or-id>
559
- `),64;let o=await fi(s,r.env);return r.stdout.write(`${g("ok",n)} Current organization: ${o.name}
560
- `),0}if(t==="open"){let s=await D(r.env);if(!s)return r.stderr.write(`${g("error",n)} No current organization. Run pathrule org use <slug-or-id>.
561
- `),1;let o=Kf(e[0]),a=ee(s,r.env,o);return n.interactive&&!n.noOpen?(await Fe(r,a),r.stdout.write(`${g("ok",n)} Opened ${a}
576
+ `),1)}if(t==="use"){let i=e[0];if(!i)return r.stderr.write(`${g("error",n)} Usage: pathrule org use <slug-or-id>
577
+ `),64;let o=await ms(i,r.env);return r.stdout.write(`${g("ok",n)} Current organization: ${o.name}
578
+ `),0}if(t==="open"){let i=await j(r.env);if(!i)return r.stderr.write(`${g("error",n)} No current organization. Run pathrule org use <slug-or-id>.
579
+ `),1;let o=lf(e[0]),a=ee(i,r.env,o);return n.interactive&&!n.noOpen?(await Fe(r,a),r.stdout.write(`${g("ok",n)} Opened ${a}
562
580
  `)):r.stdout.write(`${a}
563
581
  `),0}if(t!=="list")return r.stderr.write(`${g("error",n)} Unknown org command "${t}".
564
- `),64;let i=await we(r.env);return i.length===0?(r.stdout.write(`${g("warn",n)} No organizations found.
565
- `),0):(r.stdout.write(i.map(s=>`${s.current?"*":" "} ${s.slug} ${s.role} ${s.name}`).join(`
582
+ `),64;let s=await we(r.env);return s.length===0?(r.stdout.write(`${g("warn",n)} No organizations found.
583
+ `),0):(r.stdout.write(s.map(i=>`${i.current?"*":" "} ${i.slug} ${i.role} ${i.name}`).join(`
566
584
  `)+`
567
- `),0)}catch(i){return r.stderr.write(`${g("error",n)} ${i instanceof Error?i.message:String(i)}
568
- `),1}}function Kf(t){if(!t||t==="home")return "home";if(t==="billing"||t==="settings"||t==="members")return t;throw new Error("invalid_org_open_target")}function Vf(t){let e=false,r,n=false,i=false;for(let s=0;s<t.length;s+=1){let o=t[s];if(o){if(o==="open"||o==="--open"){e=true;continue}if(o==="--org"){r=t[++s];continue}if(o==="--desktop-app"){n=true;continue}if(o==="--web"){i=true;continue}throw new Error(`unknown_team_option:${o}`)}}return {open:e,orgSelector:r,preferDesktopApp:n,forceWeb:i}}async function RE(t){if(process.platform==="darwin"){await Bi("open",[t]);return}if(process.platform==="win32"){await Bi("cmd",["/c","start","",t]);return}await Bi("xdg-open",[t]);}async function Fe(t,e){if(t.openUrl){await t.openUrl(e);return}await RE(e);}async function xE(){return new Promise((t,e)=>{let r="";process.stdin.setEncoding("utf8"),process.stdin.on("data",n=>{r+=n;}),process.stdin.on("end",()=>t(r)),process.stdin.on("error",e);})}async function PE(t,e,r){let n=t.env.VISUAL?.trim()||t.env.EDITOR?.trim();if(!n)throw new X("editor_required","Set $EDITOR or pass --body / stdin for this command.");let i=await mkdtemp(join(tmpdir(),"pathrule-cli-edit-")),s=join(i,r);await writeFile(s,e,"utf8");try{return await TE(n,s,t.env),await readFile(s,"utf8")}finally{await rm$1(i,{recursive:true,force:true});}}async function TE(t,e,r){let n=`${t} ${JSON.stringify(e)}`;await new Promise((i,s)=>{let o=spawn(n,{env:r,shell:true,stdio:"inherit"});o.once("error",s),o.once("exit",a=>{if(a===0){i();return}s(new Error(`editor_exit_${a??"signal"}`));});});}async function Pa(t,e,r){return Lu(t,{forceWeb:e.forceWeb,preferDesktopApp:e.preferDesktopApp||!e.forceWeb&&await Oa(r,"workspace")})}async function Gf(t,e,r,n){let i=e[0];if(!i)return null;if(e.length===1||!AE(r,n))return {item:i,index:1};let s=(await _r(r,`Select ${t} to open [1-${e.length}] (Enter for 1): `)).trim();if(!s)return {item:i,index:1};let o=Number(s);return !Number.isInteger(o)||o<1||o>e.length?(r.stdout.write(`${g("warn",n)} Invalid selection; opening the top match.
569
- `),{item:i,index:1}):{item:e[o-1],index:o}}function AE(t,e){return !e.interactive||e.noOpen?false:t.promptLine?true:process.env.NODE_ENV==="test"?false:!!(process.stdin.isTTY&&process.stdout.isTTY)}function IE(t,e){return !e.interactive||e.json?false:t.promptLine?true:process.env.NODE_ENV==="test"?false:!!(process.stdin.isTTY&&process.stdout.isTTY)}function Yf(t,e){return !e.interactive||e.json||t.promptLine||process.env.NODE_ENV==="test"?false:!!(process.stdin.isTTY&&process.stdout.isTTY)}async function kn(t,e,r){let n=" [Y/n]: ";if(!t.promptLine&&process.stdin.isTTY&&process.stdout.isTTY)return OE(e,n,r);let i=(await _r(t,`${e}${n}`)).trim().toLowerCase();return i?i==="y"||i==="yes":r}async function OE(t,e,r){let n=process.stdin,i=process.stdout,s=n.isPaused();i.write(`${t}${e}`),n.isTTY&&n.setRawMode(true),n.resume();try{return await new Promise((o,a)=>{let l=!1,c=()=>{n.off("data",d),n.isTTY&&n.setRawMode(!1),n.pause();},u=(p,f)=>{l||(l=!0,i.write(`${f}
570
- `),c(),o(p));},d=p=>{let f=p.toString("utf8");if(f.includes("")){if(l)return;l=!0,c(),i.write(`
571
- `),a(new Error("setup_canceled"));return}if(f.includes("\r")||f.includes(`
572
- `)){u(r,r?"Y":"N");return}if(/[yY]/.test(f)){u(!0,"Y");return}/[nN]/.test(f)&&u(!1,"N");};n.on("data",d);})}finally{n.isTTY&&n.setRawMode(false),(s||!n.isPaused())&&n.pause();}}async function _r(t,e){if(t.promptLine)return t.promptLine(e);let r=createInterface({input:process.stdin,output:process.stdout});try{return await r.question(e)}finally{r.close();}}async function Fi(t){let{runtime:e,mode:r,target:n,title:i,totalResults:s,kind:o,reason:a,selectionIndex:l}=t;if(a&&e.stdout.write(`${g("info",r)} ${a}
585
+ `),0)}catch(s){return r.stderr.write(`${g("error",n)} ${s instanceof Error?s.message:String(s)}
586
+ `),1}}function lf(t){if(!t||t==="home")return "home";if(t==="billing"||t==="settings"||t==="members")return t;throw new Error("invalid_org_open_target")}function cf(t){let e=false,r,n=false,s=false;for(let i=0;i<t.length;i+=1){let o=t[i];if(o){if(o==="open"||o==="--open"){e=true;continue}if(o==="--org"){r=t[++i];continue}if(o==="--desktop-app"){n=true;continue}if(o==="--web"){s=true;continue}throw new Error(`unknown_team_option:${o}`)}}return {open:e,orgSelector:r,preferDesktopApp:n,forceWeb:s}}async function dR(t){if(process.platform==="darwin"){await qs("open",[t]);return}if(process.platform==="win32"){await qs("cmd",["/c","start","",t]);return}await qs("xdg-open",[t]);}async function Fe(t,e){if(t.openUrl){await t.openUrl(e);return}await dR(e);}async function pR(){return new Promise((t,e)=>{let r="";process.stdin.setEncoding("utf8"),process.stdin.on("data",n=>{r+=n;}),process.stdin.on("end",()=>t(r)),process.stdin.on("error",e);})}async function hR(t,e,r){let n=t.env.VISUAL?.trim()||t.env.EDITOR?.trim();if(!n)throw new X("editor_required","Set $EDITOR or pass --body / stdin for this command.");let s=await mkdtemp(join(tmpdir(),"pathrule-cli-edit-")),i=join(s,r);await writeFile(i,e,"utf8");try{return await fR(n,i,t.env),await readFile(i,"utf8")}finally{await rm$1(s,{recursive:true,force:true});}}async function fR(t,e,r){let n=`${t} ${JSON.stringify(e)}`;await new Promise((s,i)=>{let o=spawn(n,{env:r,shell:true,stdio:"inherit"});o.once("error",i),o.once("exit",a=>{if(a===0){s();return}i(new Error(`editor_exit_${a??"signal"}`));});});}async function Da(t,e,r){return zu(t,{forceWeb:e.forceWeb,preferDesktopApp:e.preferDesktopApp||!e.forceWeb&&await Ua(r,"workspace")})}async function uf(t,e,r,n){let s=e[0];if(!s)return null;if(e.length===1||!gR(r,n))return {item:s,index:1};let i=(await yr(r,`Select ${t} to open [1-${e.length}] (Enter for 1): `)).trim();if(!i)return {item:s,index:1};let o=Number(i);return !Number.isInteger(o)||o<1||o>e.length?(r.stdout.write(`${g("warn",n)} Invalid selection; opening the top match.
587
+ `),{item:s,index:1}):{item:e[o-1],index:o}}function gR(t,e){return !e.interactive||e.noOpen?false:t.promptLine?true:process.env.NODE_ENV==="test"?false:!!(process.stdin.isTTY&&process.stdout.isTTY)}function mR(t,e){return !e.interactive||e.json?false:t.promptLine?true:process.env.NODE_ENV==="test"?false:!!(process.stdin.isTTY&&process.stdout.isTTY)}function df(t,e){return !e.interactive||e.json||t.promptLine||process.env.NODE_ENV==="test"?false:!!(process.stdin.isTTY&&process.stdout.isTTY)}async function Sn(t,e,r){let n=" [Y/n]: ";if(!t.promptLine&&process.stdin.isTTY&&process.stdout.isTTY)return _R(e,n,r);let s=(await yr(t,`${e}${n}`)).trim().toLowerCase();return s?s==="y"||s==="yes":r}async function _R(t,e,r){let n=process.stdin,s=process.stdout,i=n.isPaused();s.write(`${t}${e}`),n.isTTY&&n.setRawMode(true),n.resume();try{return await new Promise((o,a)=>{let l=!1,c=()=>{n.off("data",d),n.isTTY&&n.setRawMode(!1),n.pause();},u=(p,h)=>{l||(l=!0,s.write(`${h}
588
+ `),c(),o(p));},d=p=>{let h=p.toString("utf8");if(h.includes("")){if(l)return;l=!0,c(),s.write(`
589
+ `),a(new Error("setup_canceled"));return}if(h.includes("\r")||h.includes(`
590
+ `)){u(r,r?"Y":"N");return}if(/[yY]/.test(h)){u(!0,"Y");return}/[nN]/.test(h)&&u(!1,"N");};n.on("data",d);})}finally{n.isTTY&&n.setRawMode(false),(i||!n.isPaused())&&n.pause();}}async function yr(t,e){if(t.promptLine)return t.promptLine(e);let r=createInterface({input:process.stdin,output:process.stdout});try{return await r.question(e)}finally{r.close();}}async function zs(t){let{runtime:e,mode:r,target:n,title:s,totalResults:i,kind:o,reason:a,selectionIndex:l}=t;if(a&&e.stdout.write(`${g("info",r)} ${a}
573
591
  `),n.reason==="fallback"&&n.kind==="web"&&e.stdout.write(`${g("info",r)} Pathrule Desktop deep link is not available yet; falling back to Pathrule Web.
574
- `),s>1&&l&&l>1?e.stdout.write(`${g("info",r)} Opening selected ${o} match (${i}) #${l} of ${s}.
575
- `):s>1&&e.stdout.write(`${g("info",r)} Opening the top ${o} match (${i}) out of ${s} results.
592
+ `),i>1&&l&&l>1?e.stdout.write(`${g("info",r)} Opening selected ${o} match (${s}) #${l} of ${i}.
593
+ `):i>1&&e.stdout.write(`${g("info",r)} Opening the top ${o} match (${s}) out of ${i} results.
576
594
  `),r.interactive&&!r.noOpen){await Fe(e,n.url),e.stdout.write(`${g("ok",r)} Opened ${n.label.toLowerCase()}: ${n.url}
577
595
  `);return}e.stdout.write(`${n.label}: ${n.url}
578
- `);}async function Tf(t){let{runtime:e,mode:r,target:n,title:i,totalResults:s}=t;if(n.reason==="fallback"&&n.kind==="web"&&e.stdout.write(`${g("info",r)} Pathrule Desktop refresh deep link is not available yet; falling back to Pathrule Web.
579
- `),s>1&&e.stdout.write(`${g("info",r)} Opening the top refresh task (${i}) out of ${s} results.
596
+ `);}async function Hh(t){let{runtime:e,mode:r,target:n,title:s,totalResults:i}=t;if(n.reason==="fallback"&&n.kind==="web"&&e.stdout.write(`${g("info",r)} Pathrule Desktop refresh deep link is not available yet; falling back to Pathrule Web.
597
+ `),i>1&&e.stdout.write(`${g("info",r)} Opening the top refresh task (${s}) out of ${i} results.
580
598
  `),r.interactive&&!r.noOpen){await Fe(e,n.url),e.stdout.write(`${g("ok",r)} Opened ${n.label.toLowerCase()}: ${n.url}
581
599
  `);return}e.stdout.write(`${n.label}: ${n.url}
582
- `);}function Ki(t){if(t.url)return [{label:"Open Pathrule Web",url:t.url}];if(t.suggested_command_after_resolution)return [{label:"Retry after resolution",command:t.suggested_command_after_resolution}]}function Af(t,e){if(e?.length)for(let r of e){if(r.command){t.write(`Next: ${r.command}
600
+ `);}function Ys(t){if(t.url)return [{label:"Open Pathrule Web",url:t.url}];if(t.suggested_command_after_resolution)return [{label:"Retry after resolution",command:t.suggested_command_after_resolution}]}function qh(t,e){if(e?.length)for(let r of e){if(r.command){t.write(`Next: ${r.command}
583
601
  `);continue}if(r.url){t.write(`${r.label}: ${r.url}
584
602
  `);continue}t.write(`Next: ${r.label}
585
- `);}}function Vi(t,e,r){let n=ar(t);e.write(`${g("error",r)} ${n.summary}
586
- `);for(let i of n.details)e.write(`${i}
603
+ `);}}function Xs(t,e,r){let n=lr(t);e.write(`${g("error",r)} ${n.summary}
604
+ `);for(let s of n.details)e.write(`${s}
587
605
  `);n.url&&e.write(`${n.url}
588
606
  `),n.suggested_command_after_resolution&&e.write(`Then retry: ${n.suggested_command_after_resolution}
589
- `);}async function mr(t,e){!e.interactive||!(await kt("suggestions.desktop",t.env).catch(()=>({value:true}))).value||t.stdout.write(["",H.desktop,`${g("info",e)} For a visual workspace, tray notifications, and the all-in-one local app, install ${H.desktop}.`,`Download: ${$E(t.env)}`,""].join(`
590
- `));}function $E(t){let e=t.PATHRULE_DESKTOP_DOWNLOAD_URL?.trim();return e&&e.length>0?e:"https://pathrule.io/download"}async function Xf(t,e,r=false){try{if(e.interactive&&r&&!e.noOpen)try{let i=await lu({env:t.env,openUrl:s=>Fe(t,s),onOpen:({redirectUri:s})=>{t.stdout.write(["Pathrule CLI login",`${g("info",e)} Opening your browser for GitHub sign-in.`,`Listening for callback at ${s}`,""].join(`
591
- `));},promptMfaCode:s=>_r(t,s)});return t.stdout.write(`${g("ok",e)} Signed in as ${i.session.user.email??i.session.user.id}
592
- `),await tt(t,e),0}catch(i){if(!(i instanceof G))throw i;t.stderr.write(`${g("warn",e)} Browser callback login unavailable (${i.code}); falling back to hosted login.
593
- `);}let n=await to({env:t.env,fetch:t.fetch??fetch,sleep:t.sleep??Zf,onPending:({userCode:i,verificationUri:s})=>{let o=NE(s,i);e.interactive&&!e.noOpen&&Fe(t,o).catch(()=>{}),t.stdout.write(["Pathrule CLI login",`${g("info",e)} One-time code: ${i}`,e.interactive&&!e.noOpen?`A browser window should open. If not, visit ${o}.`:`Visit ${o} on any browser to authorize this terminal.`,"Waiting for authorization...",""].join(`
607
+ `);}async function wr(t,e){!e.interactive||!(await bt("suggestions.desktop",t.env).catch(()=>({value:true}))).value||t.stdout.write(["",H.desktop,`${g("info",e)} For a visual workspace, tray notifications, and the all-in-one local app, install ${H.desktop}.`,`Download: ${wR(t.env)}`,""].join(`
608
+ `));}function wR(t){let e=t.PATHRULE_DESKTOP_DOWNLOAD_URL?.trim();return e&&e.length>0?e:"https://pathrule.io/download"}async function pf(t,e,r=false){try{if(e.interactive&&r&&!e.noOpen)try{let s=await gu({env:t.env,openUrl:i=>Fe(t,i),onOpen:({redirectUri:i})=>{t.stdout.write(["Pathrule CLI login",`${g("info",e)} Opening your browser for GitHub sign-in.`,`Listening for callback at ${i}`,""].join(`
609
+ `));},promptMfaCode:i=>yr(t,i)});return t.stdout.write(`${g("ok",e)} Signed in as ${s.session.user.email??s.session.user.id}
610
+ `),await rt(t,e),0}catch(s){if(!(s instanceof G))throw s;t.stderr.write(`${g("warn",e)} Browser callback login unavailable (${s.code}); falling back to hosted login.
611
+ `);}let n=await so({env:t.env,fetch:t.fetch??fetch,sleep:t.sleep??hf,onPending:({userCode:s,verificationUri:i})=>{let o=yR(i,s);e.interactive&&!e.noOpen&&Fe(t,o).catch(()=>{}),t.stdout.write(["Pathrule CLI login",`${g("info",e)} One-time code: ${s}`,e.interactive&&!e.noOpen?`A browser window should open. If not, visit ${o}.`:`Visit ${o} on any browser to authorize this terminal.`,"Waiting for authorization...",""].join(`
594
612
  `));}});return t.stdout.write(`${g("ok",e)} Signed in as ${n.session.user.email??n.session.user.id}
595
- `),await tt(t,e),0}catch(n){let i=n instanceof Error?n.message:String(n);return t.stderr.write(`${g("error",e)} ${i}
596
- `),1}}function NE(t,e){try{let r=new URL(t);return r.searchParams.set("code",e),r.toString()}catch{return t}}async function DE(t,e){let n=(await no(t.env)).removed_sessions,i=n>0?g("ok",e):g("info",e);return t.stdout.write(`${i} ${n>0?"Signed out.":"Already signed out."}
597
- `),await X0(t,e),0}function Zf(t){return new Promise(e=>setTimeout(e,t))}function V(t,e){return t&&typeof t=="object"&&"code"in t&&typeof t.code=="string"?t.code:t instanceof Error?t.message:e}function Qf(t){return t.replace(/\/+$/,"").split("/").filter(Boolean).pop()||"Workspace"}Nf(process.argv.slice(2),{cwd:process.cwd(),env:process.env,stdout:process.stdout,stderr:process.stderr}).then(t=>{process.exitCode=t;});
613
+ `),await rt(t,e),0}catch(n){let s=n instanceof Error?n.message:String(n);return t.stderr.write(`${g("error",e)} ${s}
614
+ `),1}}function yR(t,e){try{let r=new URL(t);return r.searchParams.set("code",e),r.toString()}catch{return t}}async function kR(t,e){let n=(await oo(t.env)).removed_sessions,s=n>0?g("ok",e):g("info",e);return t.stdout.write(`${s} ${n>0?"Signed out.":"Already signed out."}
615
+ `),await NE(t,e),0}function hf(t){return new Promise(e=>setTimeout(e,t))}function V(t,e){return t&&typeof t=="object"&&"code"in t&&typeof t.code=="string"?t.code:t instanceof Error?t.message:e}function ff(t){return t.replace(/\/+$/,"").split("/").filter(Boolean).pop()||"Workspace"}Vh(process.argv.slice(2),{cwd:process.cwd(),env:process.env,stdout:process.stdout,stderr:process.stderr}).then(t=>{process.exitCode=t;});