opencode-metis 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -21,7 +21,7 @@ Persistent memory system for [OpenCode](https://opencode.ai) sessions. Captures
21
21
  1. Install globally:
22
22
 
23
23
  ```bash
24
- bun add -g @metis/opencode
24
+ bun add -g opencode-metis
25
25
  ```
26
26
 
27
27
  2. Run the setup command from your project root (or any directory):
@@ -39,6 +39,7 @@ Persistent memory system for [OpenCode](https://opencode.ai) sessions. Captures
39
39
  | `opencode-metis init` | Configure `opencode.json` and copy framework files |
40
40
  | `opencode-metis start` | Start the memory worker and launch opencode |
41
41
  | `opencode-metis stop` | Stop the memory worker |
42
+ | `opencode-metis start-mcp` | Start the MCP server (used by opencode via `opencode.json` config) |
42
43
 
43
44
  ## Configuration
44
45
 
@@ -110,10 +111,11 @@ Then add the MCP server to `~/.config/opencode/opencode.json` (no `plugin` entry
110
111
  ```json
111
112
  {
112
113
  "$schema": "https://opencode.ai/config.json",
114
+ "plugin": ["opencode-metis"],
113
115
  "mcp": {
114
116
  "mem-search": {
115
117
  "type": "local",
116
- "command": ["bun", "run", "/absolute/path/to/opencode-metis/dist/mcp-server.cjs"]
118
+ "command": ["opencode-metis", "start-mcp"]
117
119
  }
118
120
  }
119
121
  }
package/dist/cli.cjs CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env bun
2
2
  "use strict";var kS=Object.create;var Lu=Object.defineProperty;var SS=Object.getOwnPropertyDescriptor;var PS=Object.getOwnPropertyNames;var ES=Object.getPrototypeOf,zS=Object.prototype.hasOwnProperty;var x=(t,e)=>()=>(t&&(e=t(t=0)),e);var _=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports),yn=(t,e)=>{for(var r in e)Lu(t,r,{get:e[r],enumerable:!0})},TS=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of PS(e))!zS.call(t,o)&&o!==r&&Lu(t,o,{get:()=>e[o],enumerable:!(n=SS(e,o))||n.enumerable});return t};var Uu=(t,e,r)=>(r=t!=null?kS(ES(t)):{},TS(e||!t||!t.__esModule?Lu(r,"default",{value:t,enumerable:!0}):r,t));async function ps(t,e={}){let r=e.defaultYes??!0,n=e.input??process.stdin,o=r?"Y/n":"y/N",s=(0,Wg.createInterface)({input:n,output:process.stdout});return new Promise(i=>{s.question(`${Yg}?${vn} ${t} [${o}] `,a=>{s.close();let c=a.trim().toLowerCase();if(c===""){i(r);return}i(c==="y"||c==="yes")})})}function Ge(t){console.log(`${Yg}=>${vn} ${t}`)}function rt(t){console.log(`${RS}ok${vn} ${t}`)}function Cr(t){console.log(`${IS}!!${vn} ${t}`)}function lt(t){console.error(`${OS}error${vn} ${t}`)}function de(t){console.log(`${jS}${t}${vn}`)}function Ar(t){console.log(`
3
- ${NS}${t}${vn}`)}var Wg,_n,vn,RS,IS,OS,Yg,NS,jS,fs=x(()=>{"use strict";Wg=require("readline"),_n=process.stdout.isTTY===!0,vn=_n?"\x1B[0m":"",RS=_n?"\x1B[32m":"",IS=_n?"\x1B[33m":"",OS=_n?"\x1B[31m":"",Yg=_n?"\x1B[36m":"",NS=_n?"\x1B[1m":"",jS=_n?"\x1B[2m":""});var Vu,or,sr,ms,ir,$n,Pt,CS,AS,hs,Xg,HD,Fu,KD,BD,GD,bn=x(()=>{"use strict";Vu=require("os"),or=require("path"),sr=41777,ms="127.0.0.1",ir=(0,or.join)((0,Vu.homedir)(),".config","opencode"),$n=(0,or.join)(ir,"opencode.json"),Pt=(0,or.join)((0,Vu.homedir)(),".config","opencode","memory"),CS="memory.db",AS="settings.json",hs=(0,or.join)(Pt,"worker.pid"),Xg=10,HD=(0,or.join)(Pt,CS),Fu=(0,or.join)(Pt,AS),KD=(0,or.join)(Pt,"logs"),BD=(0,or.join)(Pt,"models"),GD=(0,or.join)(Pt,"vector-db")});function ey(){let t=(0,Ut.dirname)(__filename);for(;t!==(0,Ut.dirname)(t);){if((0,gs.existsSync)((0,Ut.join)(t,"package.json")))return t;t=(0,Ut.dirname)(t)}return(0,Ut.dirname)(__filename)}function ty(){return(0,Ut.join)(ey(),"dist","worker.cjs")}function ry(){return(0,Ut.join)(ey(),"opencode")}function ta(){if(process.execPath.endsWith("bun"))return process.execPath;try{let n=(0,Qg.execSync)("which bun",{encoding:"utf-8"}).trim();if(n.length>0&&(0,gs.existsSync)(n))return n}catch{}let t=process.env.HOME??"",e=(0,Ut.join)(t,".bun","bin","bun");if((0,gs.existsSync)(e))return e;let r=process.env.BUN_INSTALL??"";if(r.length>0){let n=(0,Ut.join)(r,"bin","bun");if((0,gs.existsSync)(n))return n}return null}var Ut,gs,Qg,ra=x(()=>{"use strict";Ut=require("path"),gs=require("fs"),Qg=require("child_process")});function MS(t){try{return(0,ny.execSync)(`"${t}" --version`,{encoding:"utf-8"}).trim().match(/(\d+\.\d+\.\d+)/)?.[1]??null}catch{return null}}function ZS(t,e){let[r=0,n=0,o=0]=t.split(".").map(Number),[s=0,i=0,a=0]=e.split(".").map(Number);return r!==s?r>s:n!==i?n>i:o>=a}function qS(t){try{return(0,po.mkdirSync)(t,{recursive:!0}),(0,po.accessSync)(t,po.constants.W_OK),!0}catch{return!1}}function oy(){let t=[],e=ta();if(e===null)return t.push("bun not found. Install from https://bun.sh"),{passed:!1,bunPath:"",errors:t};let r=MS(e);return r===null?t.push("Could not determine bun version"):ZS(r,"1.0.0")||t.push(`bun ${r} is too old, need >= 1.0.0`),qS(ir)||t.push(`Cannot write to ${ir}`),{passed:t.length===0,bunPath:e,errors:t}}var po,ny,sy=x(()=>{"use strict";po=require("fs"),ny=require("child_process");bn();ra()});function na(t){if(!(0,Ce.existsSync)(t))return{};let e=(0,Ce.readFileSync)(t,"utf-8");return JSON.parse(e)}function iy(t,e){return Array.isArray(t.plugin)?t.plugin.some(r=>r.name===e):!1}function ay(t,e){return t.mcp===void 0||t.mcp===null?!1:Object.prototype.hasOwnProperty.call(t.mcp,e)}function cy(t){try{let e=na(t);return iy(e,"opencode-metis")}catch{return!1}}function uy(t){try{let e=na(t);return ay(e,"mem-search")}catch{return!1}}function ly(t){if(!(0,Ce.existsSync)(t))return null;let e=(0,Mr.dirname)(t),r=(0,Mr.join)(e,"backups");(0,Ce.mkdirSync)(r,{recursive:!0});let n=new Date().toISOString().replace(/[:.]/g,"-"),o=(0,Mr.join)(r,`opencode.${n}.json`);return(0,Ce.copyFileSync)(t,o),DS(r),o}function DS(t){let e=(0,Ce.readdirSync)(t).filter(r=>r.startsWith("opencode.")&&r.endsWith(".json")).sort();for(;e.length>Xg;){let r=e.shift();r!==void 0&&(0,Ce.unlinkSync)((0,Mr.join)(t,r))}}function dy(t,e){let r=`${t}.tmp.${process.pid}`;(0,Ce.writeFileSync)(r,e,"utf-8"),(0,Ce.renameSync)(r,t)}function py(t){let e=na(t);if(iy(e,"opencode-metis"))return{added:!1,backupPath:null};let r=ly(t);return Array.isArray(e.plugin)||(e.plugin=[]),e.plugin.push({name:"opencode-metis"}),(0,Ce.mkdirSync)((0,Mr.dirname)(t),{recursive:!0}),dy(t,JSON.stringify(e,null,2)+`
3
+ ${NS}${t}${vn}`)}var Wg,_n,vn,RS,IS,OS,Yg,NS,jS,fs=x(()=>{"use strict";Wg=require("readline"),_n=process.stdout.isTTY===!0,vn=_n?"\x1B[0m":"",RS=_n?"\x1B[32m":"",IS=_n?"\x1B[33m":"",OS=_n?"\x1B[31m":"",Yg=_n?"\x1B[36m":"",NS=_n?"\x1B[1m":"",jS=_n?"\x1B[2m":""});var Vu,or,sr,ms,ir,$n,Pt,CS,AS,hs,Xg,HD,Fu,KD,BD,GD,bn=x(()=>{"use strict";Vu=require("os"),or=require("path"),sr=41777,ms="127.0.0.1",ir=(0,or.join)((0,Vu.homedir)(),".config","opencode"),$n=(0,or.join)(ir,"opencode.json"),Pt=(0,or.join)((0,Vu.homedir)(),".config","opencode","memory"),CS="memory.db",AS="settings.json",hs=(0,or.join)(Pt,"worker.pid"),Xg=10,HD=(0,or.join)(Pt,CS),Fu=(0,or.join)(Pt,AS),KD=(0,or.join)(Pt,"logs"),BD=(0,or.join)(Pt,"models"),GD=(0,or.join)(Pt,"vector-db")});function ey(){let t=(0,Ut.dirname)(__filename);for(;t!==(0,Ut.dirname)(t);){if((0,gs.existsSync)((0,Ut.join)(t,"package.json")))return t;t=(0,Ut.dirname)(t)}return(0,Ut.dirname)(__filename)}function ty(){return(0,Ut.join)(ey(),"dist","worker.cjs")}function ry(){return(0,Ut.join)(ey(),"opencode")}function ta(){if(process.execPath.endsWith("bun"))return process.execPath;try{let n=(0,Qg.execSync)("which bun",{encoding:"utf-8"}).trim();if(n.length>0&&(0,gs.existsSync)(n))return n}catch{}let t=process.env.HOME??"",e=(0,Ut.join)(t,".bun","bin","bun");if((0,gs.existsSync)(e))return e;let r=process.env.BUN_INSTALL??"";if(r.length>0){let n=(0,Ut.join)(r,"bin","bun");if((0,gs.existsSync)(n))return n}return null}var Ut,gs,Qg,ra=x(()=>{"use strict";Ut=require("path"),gs=require("fs"),Qg=require("child_process")});function MS(t){try{return(0,ny.execSync)(`"${t}" --version`,{encoding:"utf-8"}).trim().match(/(\d+\.\d+\.\d+)/)?.[1]??null}catch{return null}}function ZS(t,e){let[r=0,n=0,o=0]=t.split(".").map(Number),[s=0,i=0,a=0]=e.split(".").map(Number);return r!==s?r>s:n!==i?n>i:o>=a}function qS(t){try{return(0,po.mkdirSync)(t,{recursive:!0}),(0,po.accessSync)(t,po.constants.W_OK),!0}catch{return!1}}function oy(){let t=[],e=ta();if(e===null)return t.push("bun not found. Install from https://bun.sh"),{passed:!1,bunPath:"",errors:t};let r=MS(e);return r===null?t.push("Could not determine bun version"):ZS(r,"1.0.0")||t.push(`bun ${r} is too old, need >= 1.0.0`),qS(ir)||t.push(`Cannot write to ${ir}`),{passed:t.length===0,bunPath:e,errors:t}}var po,ny,sy=x(()=>{"use strict";po=require("fs"),ny=require("child_process");bn();ra()});function na(t){if(!(0,Ce.existsSync)(t))return{};let e=(0,Ce.readFileSync)(t,"utf-8");return JSON.parse(e)}function iy(t,e){return Array.isArray(t.plugin)?t.plugin.some(r=>r===e||typeof r=="object"&&r!==null&&r.name===e):!1}function ay(t,e){return t.mcp===void 0||t.mcp===null?!1:Object.prototype.hasOwnProperty.call(t.mcp,e)}function cy(t){try{let e=na(t);return iy(e,"opencode-metis")}catch{return!1}}function uy(t){try{let e=na(t);return ay(e,"mem-search")}catch{return!1}}function ly(t){if(!(0,Ce.existsSync)(t))return null;let e=(0,Mr.dirname)(t),r=(0,Mr.join)(e,"backups");(0,Ce.mkdirSync)(r,{recursive:!0});let n=new Date().toISOString().replace(/[:.]/g,"-"),o=(0,Mr.join)(r,`opencode.${n}.json`);return(0,Ce.copyFileSync)(t,o),DS(r),o}function DS(t){let e=(0,Ce.readdirSync)(t).filter(r=>r.startsWith("opencode.")&&r.endsWith(".json")).sort();for(;e.length>Xg;){let r=e.shift();r!==void 0&&(0,Ce.unlinkSync)((0,Mr.join)(t,r))}}function dy(t,e){let r=`${t}.tmp.${process.pid}`;(0,Ce.writeFileSync)(r,e,"utf-8"),(0,Ce.renameSync)(r,t)}function py(t){let e=na(t);if(iy(e,"opencode-metis"))return{added:!1,backupPath:null};let r=ly(t);return Array.isArray(e.plugin)||(e.plugin=[]),e.plugin.push("opencode-metis"),(0,Ce.mkdirSync)((0,Mr.dirname)(t),{recursive:!0}),dy(t,JSON.stringify(e,null,2)+`
4
4
  `),{added:!0,backupPath:r}}function fy(t){let e=na(t);if(ay(e,"mem-search"))return{added:!1,backupPath:null};let r=ly(t);return(e.mcp===void 0||e.mcp===null)&&(e.mcp={}),e.mcp["mem-search"]={type:"local",command:["opencode-metis","start-mcp"]},(0,Ce.mkdirSync)((0,Mr.dirname)(t),{recursive:!0}),dy(t,JSON.stringify(e,null,2)+`
5
5
  `),{added:!0,backupPath:r}}var Ce,Mr,my=x(()=>{"use strict";Ce=require("fs"),Mr=require("path");bn()});function hy(t,e,r){let n=(0,Hu.join)(t,r);if(!(0,Zr.existsSync)(n))return!1;(0,Zr.mkdirSync)(e,{recursive:!0});let o=(0,Hu.join)(e,r);return(0,Zr.rmSync)(o,{recursive:!0,force:!0}),(0,Zr.cpSync)(n,o,{recursive:!0}),!0}var Zr,Hu,oa,gy=x(()=>{"use strict";Zr=require("fs"),Hu=require("path"),oa=["agent","command","skill"]});var _y={};yn(_y,{runInit:()=>FS});async function LS(){try{let t=new AbortController,e=setTimeout(()=>t.abort(),3e3),r=await fetch("http://localhost:8000/api/v1/heartbeat",{signal:t.signal});return clearTimeout(e),r.ok}catch{return!1}}async function US(){let t=ry(),e=(0,Vt.existsSync)(ir)&&(0,Vt.existsSync)(Pt),r=cy($n),n=uy($n),o={};for(let i of oa)o[i]=(0,Vt.existsSync)(`${ir}/${i}`);let s=await LS();return{opencodeDir:t,dirsExist:e,pluginConfigured:r,mcpConfigured:n,frameworkDirsExist:o,chromaReachable:s}}function yy(t){return t?" (already configured)":""}function VS(t){return t?" (will overwrite)":""}async function FS(){Ar("opencode-metis init"),Ge("Checking prerequisites...");let t=oy();if(!t.passed){for(let c of t.errors)lt(c);process.exit(1)}rt(`bun found at ${t.bunPath}`),Ge("Detecting current state...");let e=await US();e.chromaReachable?de(" ChromaDB is reachable at localhost:8000"):de(" ChromaDB not reachable \u2014 vector search will be disabled until it's running"),Ar("Select actions to run:"),de("");let r=await ps(`Create config directories${e.dirsExist?" (already exist)":""}`,{defaultYes:!e.dirsExist}),n=await ps(`Add opencode-metis plugin to opencode.json${yy(e.pluginConfigured)}`,{defaultYes:!e.pluginConfigured}),o=await ps(`Add mem-search MCP server to opencode.json${yy(e.mcpConfigured)}`,{defaultYes:!e.mcpConfigured}),s=(0,Vt.existsSync)(e.opencodeDir),i={};if(s)for(let c of oa)(0,Vt.existsSync)(`${e.opencodeDir}/${c}`)&&(i[c]=await ps(`Copy ${c} files to ${ir}/${c}${VS(e.frameworkDirsExist[c]??!1)}`,{defaultYes:!0}));de("");let a=0;if(r&&(Ge("Creating directories..."),(0,Vt.mkdirSync)(ir,{recursive:!0}),(0,Vt.mkdirSync)(Pt,{recursive:!0}),rt("Directories ready"),a++),n){Ge("Adding opencode-metis plugin...");let c=py($n);c.backupPath!==null&&de(` Backup: ${c.backupPath}`),c.added?rt("Added opencode-metis plugin"):de(" Plugin already present \u2014 skipped"),a++}if(o){Ge("Adding mem-search MCP server...");let c=fy($n);c.backupPath!==null&&de(` Backup: ${c.backupPath}`),c.added?rt("Added mem-search MCP server"):de(" MCP server already present \u2014 skipped"),a++}if(n||o){Ge("Verifying opencode.json...");try{let c=(0,Vt.readFileSync)($n,"utf-8");JSON.parse(c),rt("opencode.json is valid JSON")}catch{lt("opencode.json is not valid JSON \u2014 please check manually"),process.exit(1)}}if(s)for(let c of oa){if(!i[c])continue;Ge(`Copying ${c} files...`),hy(e.opencodeDir,ir,c)?rt(`Copied ${c}`):Cr(`${c} not found in package \u2014 skipped`),a++}else Object.keys(i).length===0&&de(" Framework files not found in package \u2014 skipping copy");a===0?(de(""),de("No actions selected \u2014 nothing changed.")):(Ar("Setup complete"),de(` Config: ${$n}`),de(` Data: ${Pt}`),de(` Worker: port ${sr}`)),de(""),de("Next steps:"),de(" opencode-metis start Start the worker and launch opencode"),de(" opencode-metis stop Stop the worker")}var Vt,vy=x(()=>{"use strict";Vt=require("fs");fs();sy();ra();my();gy();bn()});function $y(t){(0,qr.writeFileSync)(hs,String(t),"utf-8")}function sa(){if(!(0,qr.existsSync)(hs))return null;try{let t=(0,qr.readFileSync)(hs,"utf-8").trim(),e=parseInt(t,10);return Number.isNaN(e)?null:e}catch{return null}}function ys(){try{(0,qr.unlinkSync)(hs)}catch{}}function _s(t){try{return process.kill(t,0),!0}catch{return!1}}async function vs(t){let e=t??sr;try{let r=new AbortController,n=setTimeout(()=>r.abort(),2e3),o=await fetch(`http://${ms}:${e}/api/health`,{signal:r.signal});return clearTimeout(n),o.ok}catch{return!1}}async function by(t,e=1e4){let r=t??sr,n=Date.now(),o=250;for(;Date.now()-n<e;){if(await vs(r))return!0;await new Promise(s=>setTimeout(s,o))}return!1}async function wy(t){let e=t??sr;try{let r=new AbortController,n=setTimeout(()=>r.abort(),5e3),o=await fetch(`http://${ms}:${e}/api/admin/shutdown`,{method:"POST",signal:r.signal});return clearTimeout(n),o.ok}catch{return!1}}function xy(t){try{return process.kill(t,"SIGTERM"),!0}catch{return!1}}async function ia(t,e=5e3){let r=Date.now(),n=250;for(;Date.now()-r<e;){if(!_s(t))return!0;await new Promise(o=>setTimeout(o,n))}return!1}function ky(t){try{process.kill(t,"SIGKILL")}catch{}}var qr,Ku=x(()=>{"use strict";qr=require("fs");bn()});var Ey={};yn(Ey,{runStart:()=>HS});async function HS(){Ar("opencode-metis start");let t=sa();if(t!==null&&_s(t)){if(await vs()){rt(`Worker already running (pid ${t})`),Sy();return}Cr(`Worker process ${t} exists but is not healthy \u2014 restarting`)}let e=ta();e===null&&(lt("bun not found. Run 'opencode-metis init' first."),process.exit(1));let r=ty();Ge("Starting worker..."),(0,Py.mkdirSync)(Pt,{recursive:!0});let n=(0,Bu.spawn)(e,[r],{detached:!0,stdio:"ignore",env:{...process.env}});n.pid===void 0&&(lt("Failed to spawn worker process"),process.exit(1)),$y(n.pid),n.unref(),de(` Worker pid: ${n.pid}`),Ge("Waiting for worker to become healthy..."),await by(sr,1e4)||(lt("Worker did not become healthy within 10 seconds"),de(" Check logs or run 'opencode-metis stop' and try again"),process.exit(1)),rt("Worker is healthy"),Sy()}function Sy(){Ge("Launching opencode...");try{let t=(0,Bu.spawn)("opencode",[],{stdio:"inherit"});t.on("error",e=>{lt(`Failed to launch opencode: ${e.message}`),de(" Make sure opencode is installed and on your PATH"),process.exit(1)}),t.on("exit",e=>{process.exit(e??0)})}catch(t){lt(`Failed to launch opencode: ${t instanceof Error?t.message:String(t)}`),process.exit(1)}}var Bu,Py,zy=x(()=>{"use strict";Bu=require("child_process"),Py=require("fs");fs();ra();Ku();bn()});var Ty={};yn(Ty,{runStop:()=>KS});async function KS(){Ar("opencode-metis stop");let t=sa(),e=await vs();if(t===null&&!e){Cr("No worker found (no PID file and health check failed)");return}if(e)if(Ge("Sending shutdown request via API..."),await wy())if(rt("Shutdown request accepted"),t!==null){if(Ge("Waiting for process to exit..."),await ia(t)){rt("Worker stopped"),ys();return}Cr("Process did not exit in time \u2014 sending SIGTERM")}else{ys();return}else de(" API shutdown failed \u2014 falling back to signal");if(t!==null&&_s(t)){if(Ge("Sending SIGTERM..."),xy(t),await ia(t)){rt("Worker stopped"),ys();return}Cr("Process did not exit after SIGTERM \u2014 sending SIGKILL"),ky(t),await ia(t,2e3)?rt("Worker killed"):lt(`Could not stop worker (pid ${t})`)}ys()}var Ry=x(()=>{"use strict";fs();Ku()});function b(t,e,r){function n(a,c){var u;Object.defineProperty(a,"_zod",{value:a._zod??{},enumerable:!1}),(u=a._zod).traits??(u.traits=new Set),a._zod.traits.add(t),e(a,c);for(let l in i.prototype)l in a||Object.defineProperty(a,l,{value:i.prototype[l].bind(a)});a._zod.constr=i,a._zod.def=c}let o=r?.Parent??Object;class s extends o{}Object.defineProperty(s,"name",{value:t});function i(a){var c;let u=r?.Parent?new s:this;n(u,a),(c=u._zod).deferred??(c.deferred=[]);for(let l of u._zod.deferred)l();return u}return Object.defineProperty(i,"init",{value:n}),Object.defineProperty(i,Symbol.hasInstance,{value:a=>r?.Parent&&a instanceof r.Parent?!0:a?._zod?.traits?.has(t)}),Object.defineProperty(i,"name",{value:t}),i}function xt(t){return t&&Object.assign(aa,t),aa}var BS,br,aa,fo=x(()=>{BS=Object.freeze({status:"aborted"});br=class extends Error{constructor(){super("Encountered Promise during synchronous parse. Use .parseAsync() instead.")}},aa={}});var Q={};yn(Q,{BIGINT_FORMAT_RANGES:()=>Oy,Class:()=>Ju,NUMBER_FORMAT_RANGES:()=>rl,aborted:()=>xn,allowsEval:()=>Qu,assert:()=>XS,assertEqual:()=>GS,assertIs:()=>WS,assertNever:()=>YS,assertNotEqual:()=>JS,assignProp:()=>Xu,cached:()=>ws,captureStackTrace:()=>ua,cleanEnum:()=>dP,cleanRegex:()=>ks,clone:()=>kt,createTransparentProxy:()=>oP,defineLazy:()=>_e,esc:()=>wn,escapeRegex:()=>Dr,extend:()=>aP,finalizeIssue:()=>Ft,floatSafeRemainder:()=>Yu,getElementAtPath:()=>QS,getEnumValues:()=>bs,getLengthableOrigin:()=>Ss,getParsedType:()=>nP,getSizableOrigin:()=>Ny,isObject:()=>mo,isPlainObject:()=>ho,issue:()=>nl,joinValues:()=>ca,jsonStringifyReplacer:()=>Wu,merge:()=>cP,normalizeParams:()=>M,nullish:()=>xs,numKeys:()=>rP,omit:()=>iP,optionalKeys:()=>tl,partial:()=>uP,pick:()=>sP,prefixIssues:()=>ar,primitiveTypes:()=>Iy,promiseAllObject:()=>eP,propertyKeyTypes:()=>el,randomString:()=>tP,required:()=>lP,stringifyPrimitive:()=>la,unwrapMessage:()=>$s});function GS(t){return t}function JS(t){return t}function WS(t){}function YS(t){throw new Error}function XS(t){}function bs(t){let e=Object.values(t).filter(n=>typeof n=="number");return Object.entries(t).filter(([n,o])=>e.indexOf(+n)===-1).map(([n,o])=>o)}function ca(t,e="|"){return t.map(r=>la(r)).join(e)}function Wu(t,e){return typeof e=="bigint"?e.toString():e}function ws(t){return{get value(){{let r=t();return Object.defineProperty(this,"value",{value:r}),r}throw new Error("cached value already set")}}}function xs(t){return t==null}function ks(t){let e=t.startsWith("^")?1:0,r=t.endsWith("$")?t.length-1:t.length;return t.slice(e,r)}function Yu(t,e){let r=(t.toString().split(".")[1]||"").length,n=(e.toString().split(".")[1]||"").length,o=r>n?r:n,s=Number.parseInt(t.toFixed(o).replace(".","")),i=Number.parseInt(e.toFixed(o).replace(".",""));return s%i/10**o}function _e(t,e,r){Object.defineProperty(t,e,{get(){{let o=r();return t[e]=o,o}throw new Error("cached value already set")},set(o){Object.defineProperty(t,e,{value:o})},configurable:!0})}function Xu(t,e,r){Object.defineProperty(t,e,{value:r,writable:!0,enumerable:!0,configurable:!0})}function QS(t,e){return e?e.reduce((r,n)=>r?.[n],t):t}function eP(t){let e=Object.keys(t),r=e.map(n=>t[n]);return Promise.all(r).then(n=>{let o={};for(let s=0;s<e.length;s++)o[e[s]]=n[s];return o})}function tP(t=10){let e="abcdefghijklmnopqrstuvwxyz",r="";for(let n=0;n<t;n++)r+=e[Math.floor(Math.random()*e.length)];return r}function wn(t){return JSON.stringify(t)}function mo(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)}function ho(t){if(mo(t)===!1)return!1;let e=t.constructor;if(e===void 0)return!0;let r=e.prototype;return!(mo(r)===!1||Object.prototype.hasOwnProperty.call(r,"isPrototypeOf")===!1)}function rP(t){let e=0;for(let r in t)Object.prototype.hasOwnProperty.call(t,r)&&e++;return e}function Dr(t){return t.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function kt(t,e,r){let n=new t._zod.constr(e??t._zod.def);return(!e||r?.parent)&&(n._zod.parent=t),n}function M(t){let e=t;if(!e)return{};if(typeof e=="string")return{error:()=>e};if(e?.message!==void 0){if(e?.error!==void 0)throw new Error("Cannot specify both `message` and `error` params");e.error=e.message}return delete e.message,typeof e.error=="string"?{...e,error:()=>e.error}:e}function oP(t){let e;return new Proxy({},{get(r,n,o){return e??(e=t()),Reflect.get(e,n,o)},set(r,n,o,s){return e??(e=t()),Reflect.set(e,n,o,s)},has(r,n){return e??(e=t()),Reflect.has(e,n)},deleteProperty(r,n){return e??(e=t()),Reflect.deleteProperty(e,n)},ownKeys(r){return e??(e=t()),Reflect.ownKeys(e)},getOwnPropertyDescriptor(r,n){return e??(e=t()),Reflect.getOwnPropertyDescriptor(e,n)},defineProperty(r,n,o){return e??(e=t()),Reflect.defineProperty(e,n,o)}})}function la(t){return typeof t=="bigint"?t.toString()+"n":typeof t=="string"?`"${t}"`:`${t}`}function tl(t){return Object.keys(t).filter(e=>t[e]._zod.optin==="optional"&&t[e]._zod.optout==="optional")}function sP(t,e){let r={},n=t._zod.def;for(let o in e){if(!(o in n.shape))throw new Error(`Unrecognized key: "${o}"`);e[o]&&(r[o]=n.shape[o])}return kt(t,{...t._zod.def,shape:r,checks:[]})}function iP(t,e){let r={...t._zod.def.shape},n=t._zod.def;for(let o in e){if(!(o in n.shape))throw new Error(`Unrecognized key: "${o}"`);e[o]&&delete r[o]}return kt(t,{...t._zod.def,shape:r,checks:[]})}function aP(t,e){if(!ho(e))throw new Error("Invalid input to extend: expected a plain object");let r={...t._zod.def,get shape(){let n={...t._zod.def.shape,...e};return Xu(this,"shape",n),n},checks:[]};return kt(t,r)}function cP(t,e){return kt(t,{...t._zod.def,get shape(){let r={...t._zod.def.shape,...e._zod.def.shape};return Xu(this,"shape",r),r},catchall:e._zod.def.catchall,checks:[]})}function uP(t,e,r){let n=e._zod.def.shape,o={...n};if(r)for(let s in r){if(!(s in n))throw new Error(`Unrecognized key: "${s}"`);r[s]&&(o[s]=t?new t({type:"optional",innerType:n[s]}):n[s])}else for(let s in n)o[s]=t?new t({type:"optional",innerType:n[s]}):n[s];return kt(e,{...e._zod.def,shape:o,checks:[]})}function lP(t,e,r){let n=e._zod.def.shape,o={...n};if(r)for(let s in r){if(!(s in o))throw new Error(`Unrecognized key: "${s}"`);r[s]&&(o[s]=new t({type:"nonoptional",innerType:n[s]}))}else for(let s in n)o[s]=new t({type:"nonoptional",innerType:n[s]});return kt(e,{...e._zod.def,shape:o,checks:[]})}function xn(t,e=0){for(let r=e;r<t.issues.length;r++)if(t.issues[r]?.continue!==!0)return!0;return!1}function ar(t,e){return e.map(r=>{var n;return(n=r).path??(n.path=[]),r.path.unshift(t),r})}function $s(t){return typeof t=="string"?t:t?.message}function Ft(t,e,r){let n={...t,path:t.path??[]};if(!t.message){let o=$s(t.inst?._zod.def?.error?.(t))??$s(e?.error?.(t))??$s(r.customError?.(t))??$s(r.localeError?.(t))??"Invalid input";n.message=o}return delete n.inst,delete n.continue,e?.reportInput||delete n.input,n}function Ny(t){return t instanceof Set?"set":t instanceof Map?"map":t instanceof File?"file":"unknown"}function Ss(t){return Array.isArray(t)?"array":typeof t=="string"?"string":"unknown"}function nl(...t){let[e,r,n]=t;return typeof e=="string"?{message:e,code:"custom",input:r,inst:n}:{...e}}function dP(t){return Object.entries(t).filter(([e,r])=>Number.isNaN(Number.parseInt(e,10))).map(e=>e[1])}var ua,Qu,nP,el,Iy,rl,Oy,Ju,cr=x(()=>{ua=Error.captureStackTrace?Error.captureStackTrace:(...t)=>{};Qu=ws(()=>{if(typeof navigator<"u"&&navigator?.userAgent?.includes("Cloudflare"))return!1;try{let t=Function;return new t(""),!0}catch{return!1}});nP=t=>{let e=typeof t;switch(e){case"undefined":return"undefined";case"string":return"string";case"number":return Number.isNaN(t)?"nan":"number";case"boolean":return"boolean";case"function":return"function";case"bigint":return"bigint";case"symbol":return"symbol";case"object":return Array.isArray(t)?"array":t===null?"null":t.then&&typeof t.then=="function"&&t.catch&&typeof t.catch=="function"?"promise":typeof Map<"u"&&t instanceof Map?"map":typeof Set<"u"&&t instanceof Set?"set":typeof Date<"u"&&t instanceof Date?"date":typeof File<"u"&&t instanceof File?"file":"object";default:throw new Error(`Unknown data type: ${e}`)}},el=new Set(["string","number","symbol"]),Iy=new Set(["string","number","bigint","boolean","symbol","undefined"]);rl={safeint:[Number.MIN_SAFE_INTEGER,Number.MAX_SAFE_INTEGER],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]},Oy={int64:[BigInt("-9223372036854775808"),BigInt("9223372036854775807")],uint64:[BigInt(0),BigInt("18446744073709551615")]};Ju=class{constructor(...e){}}});function ol(t,e=r=>r.message){let r={},n=[];for(let o of t.issues)o.path.length>0?(r[o.path[0]]=r[o.path[0]]||[],r[o.path[0]].push(e(o))):n.push(e(o));return{formErrors:n,fieldErrors:r}}function sl(t,e){let r=e||function(s){return s.message},n={_errors:[]},o=s=>{for(let i of s.issues)if(i.code==="invalid_union"&&i.errors.length)i.errors.map(a=>o({issues:a}));else if(i.code==="invalid_key")o({issues:i.issues});else if(i.code==="invalid_element")o({issues:i.issues});else if(i.path.length===0)n._errors.push(r(i));else{let a=n,c=0;for(;c<i.path.length;){let u=i.path[c];c===i.path.length-1?(a[u]=a[u]||{_errors:[]},a[u]._errors.push(r(i))):a[u]=a[u]||{_errors:[]},a=a[u],c++}}};return o(t),n}var jy,da,Ps,il=x(()=>{fo();cr();jy=(t,e)=>{t.name="$ZodError",Object.defineProperty(t,"_zod",{value:t._zod,enumerable:!1}),Object.defineProperty(t,"issues",{value:e,enumerable:!1}),Object.defineProperty(t,"message",{get(){return JSON.stringify(e,Wu,2)},enumerable:!0}),Object.defineProperty(t,"toString",{value:()=>t.message,enumerable:!1})},da=b("$ZodError",jy),Ps=b("$ZodError",jy,{Parent:Error})});var al,cl,ul,ll,dl,kn,pl,Sn,fl=x(()=>{fo();il();cr();al=t=>(e,r,n,o)=>{let s=n?Object.assign(n,{async:!1}):{async:!1},i=e._zod.run({value:r,issues:[]},s);if(i instanceof Promise)throw new br;if(i.issues.length){let a=new(o?.Err??t)(i.issues.map(c=>Ft(c,s,xt())));throw ua(a,o?.callee),a}return i.value},cl=al(Ps),ul=t=>async(e,r,n,o)=>{let s=n?Object.assign(n,{async:!0}):{async:!0},i=e._zod.run({value:r,issues:[]},s);if(i instanceof Promise&&(i=await i),i.issues.length){let a=new(o?.Err??t)(i.issues.map(c=>Ft(c,s,xt())));throw ua(a,o?.callee),a}return i.value},ll=ul(Ps),dl=t=>(e,r,n)=>{let o=n?{...n,async:!1}:{async:!1},s=e._zod.run({value:r,issues:[]},o);if(s instanceof Promise)throw new br;return s.issues.length?{success:!1,error:new(t??da)(s.issues.map(i=>Ft(i,o,xt())))}:{success:!0,data:s.value}},kn=dl(Ps),pl=t=>async(e,r,n)=>{let o=n?Object.assign(n,{async:!0}):{async:!0},s=e._zod.run({value:r,issues:[]},o);return s instanceof Promise&&(s=await s),s.issues.length?{success:!1,error:new t(s.issues.map(i=>Ft(i,o,xt())))}:{success:!0,data:s.value}},Sn=pl(Ps)});function Fy(){return new RegExp(fP,"u")}function e_(t){let e="(?:[01]\\d|2[0-3]):[0-5]\\d";return typeof t.precision=="number"?t.precision===-1?`${e}`:t.precision===0?`${e}:[0-5]\\d`:`${e}:[0-5]\\d\\.\\d{${t.precision}}`:`${e}(?::[0-5]\\d(?:\\.\\d+)?)?`}function t_(t){return new RegExp(`^${e_(t)}$`)}function r_(t){let e=e_({precision:t.precision}),r=["Z"];t.local&&r.push(""),t.offset&&r.push("([+-]\\d{2}:\\d{2})");let n=`${e}(?:${r.join("|")})`;return new RegExp(`^${Xy}T(?:${n})$`)}var Cy,Ay,My,Zy,qy,Dy,Ly,Uy,ml,Vy,fP,Hy,Ky,By,Gy,Jy,hl,Wy,Yy,Xy,Qy,n_,o_,s_,i_,a_,c_,u_,fa=x(()=>{Cy=/^[cC][^\s-]{8,}$/,Ay=/^[0-9a-z]+$/,My=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,Zy=/^[0-9a-vA-V]{20}$/,qy=/^[A-Za-z0-9]{27}$/,Dy=/^[a-zA-Z0-9_-]{21}$/,Ly=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,Uy=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,ml=t=>t?new RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${t}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000)$/,Vy=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,fP="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";Hy=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Ky=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})$/,By=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,Gy=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Jy=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,hl=/^[A-Za-z0-9_-]*$/,Wy=/^([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+$/,Yy=/^\+(?:[0-9]){6,14}[0-9]$/,Xy="(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))",Qy=new RegExp(`^${Xy}$`);n_=t=>{let e=t?`[\\s\\S]{${t?.minimum??0},${t?.maximum??""}}`:"[\\s\\S]*";return new RegExp(`^${e}$`)},o_=/^\d+$/,s_=/^-?\d+(?:\.\d+)?/i,i_=/true|false/i,a_=/null/i,c_=/^[^A-Z]*$/,u_=/^[^a-z]*$/});var qe,l_,gl,yl,d_,p_,f_,m_,h_,Es,g_,y_,__,v_,$_,b_,w_,ma=x(()=>{fo();fa();cr();qe=b("$ZodCheck",(t,e)=>{var r;t._zod??(t._zod={}),t._zod.def=e,(r=t._zod).onattach??(r.onattach=[])}),l_={number:"number",bigint:"bigint",object:"date"},gl=b("$ZodCheckLessThan",(t,e)=>{qe.init(t,e);let r=l_[typeof e.value];t._zod.onattach.push(n=>{let o=n._zod.bag,s=(e.inclusive?o.maximum:o.exclusiveMaximum)??Number.POSITIVE_INFINITY;e.value<s&&(e.inclusive?o.maximum=e.value:o.exclusiveMaximum=e.value)}),t._zod.check=n=>{(e.inclusive?n.value<=e.value:n.value<e.value)||n.issues.push({origin:r,code:"too_big",maximum:e.value,input:n.value,inclusive:e.inclusive,inst:t,continue:!e.abort})}}),yl=b("$ZodCheckGreaterThan",(t,e)=>{qe.init(t,e);let r=l_[typeof e.value];t._zod.onattach.push(n=>{let o=n._zod.bag,s=(e.inclusive?o.minimum:o.exclusiveMinimum)??Number.NEGATIVE_INFINITY;e.value>s&&(e.inclusive?o.minimum=e.value:o.exclusiveMinimum=e.value)}),t._zod.check=n=>{(e.inclusive?n.value>=e.value:n.value>e.value)||n.issues.push({origin:r,code:"too_small",minimum:e.value,input:n.value,inclusive:e.inclusive,inst:t,continue:!e.abort})}}),d_=b("$ZodCheckMultipleOf",(t,e)=>{qe.init(t,e),t._zod.onattach.push(r=>{var n;(n=r._zod.bag).multipleOf??(n.multipleOf=e.value)}),t._zod.check=r=>{if(typeof r.value!=typeof e.value)throw new Error("Cannot mix number and bigint in multiple_of check.");(typeof r.value=="bigint"?r.value%e.value===BigInt(0):Yu(r.value,e.value)===0)||r.issues.push({origin:typeof r.value,code:"not_multiple_of",divisor:e.value,input:r.value,inst:t,continue:!e.abort})}}),p_=b("$ZodCheckNumberFormat",(t,e)=>{qe.init(t,e),e.format=e.format||"float64";let r=e.format?.includes("int"),n=r?"int":"number",[o,s]=rl[e.format];t._zod.onattach.push(i=>{let a=i._zod.bag;a.format=e.format,a.minimum=o,a.maximum=s,r&&(a.pattern=o_)}),t._zod.check=i=>{let a=i.value;if(r){if(!Number.isInteger(a)){i.issues.push({expected:n,format:e.format,code:"invalid_type",input:a,inst:t});return}if(!Number.isSafeInteger(a)){a>0?i.issues.push({input:a,code:"too_big",maximum:Number.MAX_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:t,origin:n,continue:!e.abort}):i.issues.push({input:a,code:"too_small",minimum:Number.MIN_SAFE_INTEGER,note:"Integers must be within the safe integer range.",inst:t,origin:n,continue:!e.abort});return}}a<o&&i.issues.push({origin:"number",input:a,code:"too_small",minimum:o,inclusive:!0,inst:t,continue:!e.abort}),a>s&&i.issues.push({origin:"number",input:a,code:"too_big",maximum:s,inst:t})}}),f_=b("$ZodCheckMaxLength",(t,e)=>{var r;qe.init(t,e),(r=t._zod.def).when??(r.when=n=>{let o=n.value;return!xs(o)&&o.length!==void 0}),t._zod.onattach.push(n=>{let o=n._zod.bag.maximum??Number.POSITIVE_INFINITY;e.maximum<o&&(n._zod.bag.maximum=e.maximum)}),t._zod.check=n=>{let o=n.value;if(o.length<=e.maximum)return;let i=Ss(o);n.issues.push({origin:i,code:"too_big",maximum:e.maximum,inclusive:!0,input:o,inst:t,continue:!e.abort})}}),m_=b("$ZodCheckMinLength",(t,e)=>{var r;qe.init(t,e),(r=t._zod.def).when??(r.when=n=>{let o=n.value;return!xs(o)&&o.length!==void 0}),t._zod.onattach.push(n=>{let o=n._zod.bag.minimum??Number.NEGATIVE_INFINITY;e.minimum>o&&(n._zod.bag.minimum=e.minimum)}),t._zod.check=n=>{let o=n.value;if(o.length>=e.minimum)return;let i=Ss(o);n.issues.push({origin:i,code:"too_small",minimum:e.minimum,inclusive:!0,input:o,inst:t,continue:!e.abort})}}),h_=b("$ZodCheckLengthEquals",(t,e)=>{var r;qe.init(t,e),(r=t._zod.def).when??(r.when=n=>{let o=n.value;return!xs(o)&&o.length!==void 0}),t._zod.onattach.push(n=>{let o=n._zod.bag;o.minimum=e.length,o.maximum=e.length,o.length=e.length}),t._zod.check=n=>{let o=n.value,s=o.length;if(s===e.length)return;let i=Ss(o),a=s>e.length;n.issues.push({origin:i,...a?{code:"too_big",maximum:e.length}:{code:"too_small",minimum:e.length},inclusive:!0,exact:!0,input:n.value,inst:t,continue:!e.abort})}}),Es=b("$ZodCheckStringFormat",(t,e)=>{var r,n;qe.init(t,e),t._zod.onattach.push(o=>{let s=o._zod.bag;s.format=e.format,e.pattern&&(s.patterns??(s.patterns=new Set),s.patterns.add(e.pattern))}),e.pattern?(r=t._zod).check??(r.check=o=>{e.pattern.lastIndex=0,!e.pattern.test(o.value)&&o.issues.push({origin:"string",code:"invalid_format",format:e.format,input:o.value,...e.pattern?{pattern:e.pattern.toString()}:{},inst:t,continue:!e.abort})}):(n=t._zod).check??(n.check=()=>{})}),g_=b("$ZodCheckRegex",(t,e)=>{Es.init(t,e),t._zod.check=r=>{e.pattern.lastIndex=0,!e.pattern.test(r.value)&&r.issues.push({origin:"string",code:"invalid_format",format:"regex",input:r.value,pattern:e.pattern.toString(),inst:t,continue:!e.abort})}}),y_=b("$ZodCheckLowerCase",(t,e)=>{e.pattern??(e.pattern=c_),Es.init(t,e)}),__=b("$ZodCheckUpperCase",(t,e)=>{e.pattern??(e.pattern=u_),Es.init(t,e)}),v_=b("$ZodCheckIncludes",(t,e)=>{qe.init(t,e);let r=Dr(e.includes),n=new RegExp(typeof e.position=="number"?`^.{${e.position}}${r}`:r);e.pattern=n,t._zod.onattach.push(o=>{let s=o._zod.bag;s.patterns??(s.patterns=new Set),s.patterns.add(n)}),t._zod.check=o=>{o.value.includes(e.includes,e.position)||o.issues.push({origin:"string",code:"invalid_format",format:"includes",includes:e.includes,input:o.value,inst:t,continue:!e.abort})}}),$_=b("$ZodCheckStartsWith",(t,e)=>{qe.init(t,e);let r=new RegExp(`^${Dr(e.prefix)}.*`);e.pattern??(e.pattern=r),t._zod.onattach.push(n=>{let o=n._zod.bag;o.patterns??(o.patterns=new Set),o.patterns.add(r)}),t._zod.check=n=>{n.value.startsWith(e.prefix)||n.issues.push({origin:"string",code:"invalid_format",format:"starts_with",prefix:e.prefix,input:n.value,inst:t,continue:!e.abort})}}),b_=b("$ZodCheckEndsWith",(t,e)=>{qe.init(t,e);let r=new RegExp(`.*${Dr(e.suffix)}$`);e.pattern??(e.pattern=r),t._zod.onattach.push(n=>{let o=n._zod.bag;o.patterns??(o.patterns=new Set),o.patterns.add(r)}),t._zod.check=n=>{n.value.endsWith(e.suffix)||n.issues.push({origin:"string",code:"invalid_format",format:"ends_with",suffix:e.suffix,input:n.value,inst:t,continue:!e.abort})}}),w_=b("$ZodCheckOverwrite",(t,e)=>{qe.init(t,e),t._zod.check=r=>{r.value=e.tx(r.value)}})});var ha,_l=x(()=>{ha=class{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),this.indent-=1}write(e){if(typeof e=="function"){e(this,{execution:"sync"}),e(this,{execution:"async"});return}let n=e.split(`
6
6
  `).filter(i=>i),o=Math.min(...n.map(i=>i.length-i.trimStart().length)),s=n.map(i=>i.slice(o)).map(i=>" ".repeat(this.indent*2)+i);for(let i of s)this.content.push(i)}compile(){let e=Function,r=this?.args,o=[...(this?.content??[""]).map(s=>` ${s}`)];return new e(...r,o.join(`
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencode-metis",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "type": "module",
5
5
  "description": "Persistent memory system for OpenCode sessions",
6
6
  "license": "MIT",