diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index c4ef2b05..f955e1d8 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -10,7 +10,7 @@ "plugins": [ { "name": "claude-mem", - "version": "10.0.5", + "version": "10.0.6", "source": "./plugin", "description": "Persistent memory system for Claude Code - context compression across sessions" } diff --git a/openclaw/install.sh b/openclaw/install.sh index e7f1f702..197e6a41 100755 --- a/openclaw/install.sh +++ b/openclaw/install.sh @@ -682,6 +682,7 @@ run_openclaw() { CLAUDE_MEM_REPO="https://github.com/thedotmack/claude-mem.git" CLAUDE_MEM_BRANCH="${CLI_BRANCH:-main}" +PLUGIN_FRESHLY_INSTALLED="" install_plugin() { # Check for git before attempting clone @@ -796,6 +797,30 @@ install_plugin() { fi success "claude-mem plugin installed and enabled" + + # ── Copy core plugin files (worker, hooks, scripts) to extension directory ── + # The OpenClaw extension only contains the gateway hook (dist/index.js). + # The actual worker service and Claude Code hooks live in the plugin/ directory + # of the main repo. We copy them so find_claude_mem_install_dir() can locate + # the worker-service.cjs and the worker runs the updated version. + local extension_dir="${HOME}/.openclaw/extensions/claude-mem" + local repo_root="${build_dir}/claude-mem" + + if [[ -d "$extension_dir" && -d "${repo_root}/plugin" ]]; then + info "Copying core plugin files to ${extension_dir}..." + + # Copy plugin/ directory (worker service, hooks, scripts, skills, UI) + cp -R "${repo_root}/plugin" "${extension_dir}/" + + # Copy root package.json (contains the canonical version number) + cp "${repo_root}/package.json" "${extension_dir}/package.json" + + success "Core plugin files updated at ${extension_dir}" + else + warn "Could not copy core plugin files — worker may need manual update" + fi + + PLUGIN_FRESHLY_INSTALLED="true" } ############################################################################### @@ -1668,21 +1693,65 @@ main() { local needs_restart="" + # If we just installed fresh plugin files, always restart the worker + # to pick up the new version — even if the old worker was healthy. + if [[ "$PLUGIN_FRESHLY_INSTALLED" == "true" ]]; then + if [[ -n "$WORKER_VERSION" && -n "$expected_version" && "$WORKER_VERSION" != "$expected_version" ]]; then + info "Upgrading worker from v${WORKER_VERSION} to v${expected_version}..." + else + info "Plugin files updated — restarting worker to load new code..." + fi + needs_restart="true" + fi + # Check if worker version is outdated compared to installed version - if [[ -n "$WORKER_VERSION" && -n "$expected_version" && "$WORKER_VERSION" != "$expected_version" ]]; then - warn "Existing worker is v${WORKER_VERSION} but installed v${expected_version} — restart recommended" - info " Run: curl -X POST http://127.0.0.1:37777/api/admin/restart" + if [[ "$needs_restart" != "true" && -n "$WORKER_VERSION" && -n "$expected_version" && "$WORKER_VERSION" != "$expected_version" ]]; then + info "Upgrading worker from v${WORKER_VERSION} to v${expected_version}..." needs_restart="true" fi # Check if AI provider doesn't match current configuration - if [[ -n "$WORKER_AI_PROVIDER" && -n "$AI_PROVIDER" && "$WORKER_AI_PROVIDER" != "$AI_PROVIDER" ]]; then - warn "Worker is using ${WORKER_AI_PROVIDER} but you configured ${AI_PROVIDER} — restart to apply changes" + if [[ "$needs_restart" != "true" && -n "$WORKER_AI_PROVIDER" && -n "$AI_PROVIDER" && "$WORKER_AI_PROVIDER" != "$AI_PROVIDER" ]]; then + warn "Worker is using ${WORKER_AI_PROVIDER} but you configured ${AI_PROVIDER} — restarting to apply" needs_restart="true" fi - # If everything is current, show full healthy status - if [[ "$needs_restart" != "true" ]]; then + # Restart worker if needed: kill old process, start fresh + if [[ "$needs_restart" == "true" ]]; then + info "Stopping existing worker..." + # Try graceful shutdown via API first, fall back to SIGTERM + curl -s -X POST "http://127.0.0.1:37777/api/admin/shutdown" >/dev/null 2>&1 || true + sleep 2 + + # If still running, send SIGTERM to known PID + if check_port_37777; then + if [[ -n "$WORKER_REPORTED_PID" ]]; then + kill "$WORKER_REPORTED_PID" 2>/dev/null || true + sleep 1 + fi + # Check PID file as fallback + local pid_file="${HOME}/.claude-mem/worker.pid" + if [[ -f "$pid_file" ]]; then + local file_pid + file_pid="$(INSTALLER_PID_FILE="$pid_file" node -e " + try { process.stdout.write(String(JSON.parse(require('fs').readFileSync(process.env.INSTALLER_PID_FILE, 'utf8')).pid || '')); } + catch(e) {} + " 2>/dev/null)" || true + if [[ -n "$file_pid" ]]; then + kill "$file_pid" 2>/dev/null || true + sleep 1 + fi + fi + fi + + # Start fresh worker + if start_worker; then + verify_health || true + else + warn "Worker restart failed — you can start it manually later" + fi + else + # No restart needed — show healthy status local uptime_display="" if [[ -n "$WORKER_UPTIME" && "$WORKER_UPTIME" =~ ^[0-9]+$ && "$WORKER_UPTIME" != "0" ]]; then uptime_display="$(format_uptime_ms "$WORKER_UPTIME")" @@ -1715,7 +1784,7 @@ main() { verify_health || true else warn "Worker startup failed — you can start it manually later" - warn " cd ~/.claude/plugins/marketplaces/thedotmack && bun plugin/scripts/worker-service.cjs" + warn " cd ~/.openclaw/extensions/claude-mem && bun plugin/scripts/worker-service.cjs" fi fi diff --git a/package.json b/package.json index cb90d237..a8fec4c2 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "claude-mem", - "version": "10.0.5", + "version": "10.0.6", "description": "Memory compression system for Claude Code - persist context across sessions", "keywords": [ "claude", diff --git a/plugin/.claude-plugin/plugin.json b/plugin/.claude-plugin/plugin.json index c6e94378..37039190 100644 --- a/plugin/.claude-plugin/plugin.json +++ b/plugin/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "claude-mem", - "version": "10.0.5", + "version": "10.0.6", "description": "Persistent memory system for Claude Code - seamlessly preserve context across sessions", "author": { "name": "Alex Newman" diff --git a/plugin/package.json b/plugin/package.json index 72b1f1f7..b993f334 100644 --- a/plugin/package.json +++ b/plugin/package.json @@ -1,6 +1,6 @@ { "name": "claude-mem-plugin", - "version": "10.0.5", + "version": "10.0.6", "private": true, "description": "Runtime dependencies for claude-mem bundled hooks", "type": "module", diff --git a/plugin/scripts/mcp-server.cjs b/plugin/scripts/mcp-server.cjs index 84b84072..52ba1011 100755 --- a/plugin/scripts/mcp-server.cjs +++ b/plugin/scripts/mcp-server.cjs @@ -54,7 +54,7 @@ ${i.stack}`:` ${i.message}`:this.getLevel()===0&&typeof i=="object"?l=` Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let a of t.seen.entries()){let s=a[1];if(e===a[0]){i(a);continue}if(t.external){let u=t.external.registry.get(a[0])?.id;if(e!==a[0]&&u){i(a);continue}}if(t.metadataRegistry.get(a[0])?.id){i(a);continue}if(s.cycle){i(a);continue}if(s.count>1&&t.reused==="ref"){i(a);continue}}}function Xi(t,e){let r=t.seen.get(e);if(!r)throw new Error("Unprocessed schema. This is a bug in Zod.");let n=a=>{let s=t.seen.get(a);if(s.ref===null)return;let c=s.def??s.schema,u={...c},l=s.ref;if(s.ref=null,l){n(l);let m=t.seen.get(l),f=m.schema;if(f.$ref&&(t.target==="draft-07"||t.target==="draft-04"||t.target==="openapi-3.0")?(c.allOf=c.allOf??[],c.allOf.push(f)):Object.assign(c,f),Object.assign(c,u),a._zod.parent===l)for(let v in c)v==="$ref"||v==="allOf"||v in u||delete c[v];if(f.$ref)for(let v in c)v==="$ref"||v==="allOf"||v in m.def&&JSON.stringify(c[v])===JSON.stringify(m.def[v])&&delete c[v]}let d=a._zod.parent;if(d&&d!==l){n(d);let m=t.seen.get(d);if(m?.schema.$ref&&(c.$ref=m.schema.$ref,m.def))for(let f in c)f==="$ref"||f==="allOf"||f in m.def&&JSON.stringify(c[f])===JSON.stringify(m.def[f])&&delete c[f]}t.override({zodSchema:a,jsonSchema:c,path:s.path??[]})};for(let a of[...t.seen.entries()].reverse())n(a[0]);let o={};if(t.target==="draft-2020-12"?o.$schema="https://json-schema.org/draft/2020-12/schema":t.target==="draft-07"?o.$schema="http://json-schema.org/draft-07/schema#":t.target==="draft-04"?o.$schema="http://json-schema.org/draft-04/schema#":t.target,t.external?.uri){let a=t.external.registry.get(e)?.id;if(!a)throw new Error("Schema is missing an `id` property");o.$id=t.external.uri(a)}Object.assign(o,r.def??r.schema);let i=t.external?.defs??{};for(let a of t.seen.entries()){let s=a[1];s.def&&s.defId&&(i[s.defId]=s.def)}t.external||Object.keys(i).length>0&&(t.target==="draft-2020-12"?o.$defs=i:o.definitions=i);try{let a=JSON.parse(JSON.stringify(o));return Object.defineProperty(a,"~standard",{value:{...e["~standard"],jsonSchema:{input:fo(e,"input",t.processors),output:fo(e,"output",t.processors)}},enumerable:!1,writable:!1}),a}catch{throw new Error("Error converting schema to JSON.")}}function Ue(t,e){let r=e??{seen:new Set};if(r.seen.has(t))return!1;r.seen.add(t);let n=t._zod.def;if(n.type==="transform")return!0;if(n.type==="array")return Ue(n.element,r);if(n.type==="set")return Ue(n.valueType,r);if(n.type==="lazy")return Ue(n.getter(),r);if(n.type==="promise"||n.type==="optional"||n.type==="nonoptional"||n.type==="nullable"||n.type==="readonly"||n.type==="default"||n.type==="prefault")return Ue(n.innerType,r);if(n.type==="intersection")return Ue(n.left,r)||Ue(n.right,r);if(n.type==="record"||n.type==="map")return Ue(n.keyType,r)||Ue(n.valueType,r);if(n.type==="pipe")return Ue(n.in,r)||Ue(n.out,r);if(n.type==="object"){for(let o in n.shape)if(Ue(n.shape[o],r))return!0;return!1}if(n.type==="union"){for(let o of n.options)if(Ue(o,r))return!0;return!1}if(n.type==="tuple"){for(let o of n.items)if(Ue(o,r))return!0;return!!(n.rest&&Ue(n.rest,r))}return!1}var Em=(t,e={})=>r=>{let n=Hi({...r,processors:e});return de(t,n),Bi(n,t),Xi(n,t)},fo=(t,e,r={})=>n=>{let{libraryOptions:o,target:i}=n??{},a=Hi({...o??{},target:i,io:e,processors:r});return de(t,a),Bi(a,t),Xi(a,t)};var Sb={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},Tm=(t,e,r,n)=>{let o=r;o.type="string";let{minimum:i,maximum:a,format:s,patterns:c,contentEncoding:u}=t._zod.bag;if(typeof i=="number"&&(o.minLength=i),typeof a=="number"&&(o.maxLength=a),s&&(o.format=Sb[s]??s,o.format===""&&delete o.format,s==="time"&&delete o.format),u&&(o.contentEncoding=u),c&&c.size>0){let l=[...c];l.length===1?o.pattern=l[0].source:l.length>1&&(o.allOf=[...l.map(d=>({...e.target==="draft-07"||e.target==="draft-04"||e.target==="openapi-3.0"?{type:"string"}:{},pattern:d.source}))])}},Pm=(t,e,r,n)=>{let o=r,{minimum:i,maximum:a,format:s,multipleOf:c,exclusiveMaximum:u,exclusiveMinimum:l}=t._zod.bag;typeof s=="string"&&s.includes("int")?o.type="integer":o.type="number",typeof l=="number"&&(e.target==="draft-04"||e.target==="openapi-3.0"?(o.minimum=l,o.exclusiveMinimum=!0):o.exclusiveMinimum=l),typeof i=="number"&&(o.minimum=i,typeof l=="number"&&e.target!=="draft-04"&&(l>=i?delete o.minimum:delete o.exclusiveMinimum)),typeof u=="number"&&(e.target==="draft-04"||e.target==="openapi-3.0"?(o.maximum=u,o.exclusiveMaximum=!0):o.exclusiveMaximum=u),typeof a=="number"&&(o.maximum=a,typeof u=="number"&&e.target!=="draft-04"&&(u<=a?delete o.maximum:delete o.exclusiveMaximum)),typeof c=="number"&&(o.multipleOf=c)},Om=(t,e,r,n)=>{r.type="boolean"},jm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("BigInt cannot be represented in JSON Schema")},Nm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Symbols cannot be represented in JSON Schema")},Dm=(t,e,r,n)=>{e.target==="openapi-3.0"?(r.type="string",r.nullable=!0,r.enum=[null]):r.type="null"},Rm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Undefined cannot be represented in JSON Schema")},Am=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Void cannot be represented in JSON Schema")},Um=(t,e,r,n)=>{r.not={}},Zm=(t,e,r,n)=>{},Cm=(t,e,r,n)=>{},Mm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Date cannot be represented in JSON Schema")},Lm=(t,e,r,n)=>{let o=t._zod.def,i=Dn(o.entries);i.every(a=>typeof a=="number")&&(r.type="number"),i.every(a=>typeof a=="string")&&(r.type="string"),r.enum=i},qm=(t,e,r,n)=>{let o=t._zod.def,i=[];for(let a of o.values)if(a===void 0){if(e.unrepresentable==="throw")throw new Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof a=="bigint"){if(e.unrepresentable==="throw")throw new Error("BigInt literals cannot be represented in JSON Schema");i.push(Number(a))}else i.push(a);if(i.length!==0)if(i.length===1){let a=i[0];r.type=a===null?"null":typeof a,e.target==="draft-04"||e.target==="openapi-3.0"?r.enum=[a]:r.const=a}else i.every(a=>typeof a=="number")&&(r.type="number"),i.every(a=>typeof a=="string")&&(r.type="string"),i.every(a=>typeof a=="boolean")&&(r.type="boolean"),i.every(a=>a===null)&&(r.type="null"),r.enum=i},Fm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("NaN cannot be represented in JSON Schema")},Vm=(t,e,r,n)=>{let o=r,i=t._zod.pattern;if(!i)throw new Error("Pattern not found in template literal");o.type="string",o.pattern=i.source},Jm=(t,e,r,n)=>{let o=r,i={type:"string",format:"binary",contentEncoding:"binary"},{minimum:a,maximum:s,mime:c}=t._zod.bag;a!==void 0&&(i.minLength=a),s!==void 0&&(i.maxLength=s),c?c.length===1?(i.contentMediaType=c[0],Object.assign(o,i)):(Object.assign(o,i),o.anyOf=c.map(u=>({contentMediaType:u}))):Object.assign(o,i)},Km=(t,e,r,n)=>{r.type="boolean"},Wm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Custom types cannot be represented in JSON Schema")},Gm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Function types cannot be represented in JSON Schema")},Hm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Transforms cannot be represented in JSON Schema")},Bm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Map cannot be represented in JSON Schema")},Xm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Set cannot be represented in JSON Schema")},Ym=(t,e,r,n)=>{let o=r,i=t._zod.def,{minimum:a,maximum:s}=t._zod.bag;typeof a=="number"&&(o.minItems=a),typeof s=="number"&&(o.maxItems=s),o.type="array",o.items=de(i.element,e,{...n,path:[...n.path,"items"]})},Qm=(t,e,r,n)=>{let o=r,i=t._zod.def;o.type="object",o.properties={};let a=i.shape;for(let u in a)o.properties[u]=de(a[u],e,{...n,path:[...n.path,"properties",u]});let s=new Set(Object.keys(a)),c=new Set([...s].filter(u=>{let l=i.shape[u]._zod;return e.io==="input"?l.optin===void 0:l.optout===void 0}));c.size>0&&(o.required=Array.from(c)),i.catchall?._zod.def.type==="never"?o.additionalProperties=!1:i.catchall?i.catchall&&(o.additionalProperties=de(i.catchall,e,{...n,path:[...n.path,"additionalProperties"]})):e.io==="output"&&(o.additionalProperties=!1)},ml=(t,e,r,n)=>{let o=t._zod.def,i=o.inclusive===!1,a=o.options.map((s,c)=>de(s,e,{...n,path:[...n.path,i?"oneOf":"anyOf",c]}));i?r.oneOf=a:r.anyOf=a},eh=(t,e,r,n)=>{let o=t._zod.def,i=de(o.left,e,{...n,path:[...n.path,"allOf",0]}),a=de(o.right,e,{...n,path:[...n.path,"allOf",1]}),s=u=>"allOf"in u&&Object.keys(u).length===1,c=[...s(i)?i.allOf:[i],...s(a)?a.allOf:[a]];r.allOf=c},th=(t,e,r,n)=>{let o=r,i=t._zod.def;o.type="array";let a=e.target==="draft-2020-12"?"prefixItems":"items",s=e.target==="draft-2020-12"||e.target==="openapi-3.0"?"items":"additionalItems",c=i.items.map((m,f)=>de(m,e,{...n,path:[...n.path,a,f]})),u=i.rest?de(i.rest,e,{...n,path:[...n.path,s,...e.target==="openapi-3.0"?[i.items.length]:[]]}):null;e.target==="draft-2020-12"?(o.prefixItems=c,u&&(o.items=u)):e.target==="openapi-3.0"?(o.items={anyOf:c},u&&o.items.anyOf.push(u),o.minItems=c.length,u||(o.maxItems=c.length)):(o.items=c,u&&(o.additionalItems=u));let{minimum:l,maximum:d}=t._zod.bag;typeof l=="number"&&(o.minItems=l),typeof d=="number"&&(o.maxItems=d)},rh=(t,e,r,n)=>{let o=r,i=t._zod.def;o.type="object";let a=i.keyType,c=a._zod.bag?.patterns;if(i.mode==="loose"&&c&&c.size>0){let l=de(i.valueType,e,{...n,path:[...n.path,"patternProperties","*"]});o.patternProperties={};for(let d of c)o.patternProperties[d.source]=l}else(e.target==="draft-07"||e.target==="draft-2020-12")&&(o.propertyNames=de(i.keyType,e,{...n,path:[...n.path,"propertyNames"]})),o.additionalProperties=de(i.valueType,e,{...n,path:[...n.path,"additionalProperties"]});let u=a._zod.values;if(u){let l=[...u].filter(d=>typeof d=="string"||typeof d=="number");l.length>0&&(o.required=l)}},nh=(t,e,r,n)=>{let o=t._zod.def,i=de(o.innerType,e,n),a=e.seen.get(t);e.target==="openapi-3.0"?(a.ref=o.innerType,r.nullable=!0):r.anyOf=[i,{type:"null"}]},oh=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType},ih=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType,r.default=JSON.parse(JSON.stringify(o.defaultValue))},ah=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType,e.io==="input"&&(r._prefault=JSON.parse(JSON.stringify(o.defaultValue)))},sh=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType;let a;try{a=o.catchValue(void 0)}catch{throw new Error("Dynamic catch values are not supported in JSON Schema")}r.default=a},ch=(t,e,r,n)=>{let o=t._zod.def,i=e.io==="input"?o.in._zod.def.type==="transform"?o.out:o.in:o.out;de(i,e,n);let a=e.seen.get(t);a.ref=i},uh=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType,r.readOnly=!0},lh=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType},hl=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType},dh=(t,e,r,n)=>{let o=t._zod.innerType;de(o,e,n);let i=e.seen.get(t);i.ref=o};function Br(t){return!!t._zod}function Yt(t,e){return Br(t)?Jr(t,e):t.safeParse(e)}function Yi(t){if(!t)return;let e;if(Br(t)?e=t._zod?.def?.shape:e=t.shape,!!e){if(typeof e=="function")try{return e()}catch{return}return e}}function hh(t){if(Br(t)){let i=t._zod?.def;if(i){if(i.value!==void 0)return i.value;if(Array.isArray(i.values)&&i.values.length>0)return i.values[0]}}let r=t._def;if(r){if(r.value!==void 0)return r.value;if(Array.isArray(r.values)&&r.values.length>0)return r.values[0]}let n=t.value;if(n!==void 0)return n}var mo={};yn(mo,{ZodAny:()=>Nh,ZodArray:()=>Uh,ZodBase64:()=>Cl,ZodBase64URL:()=>Ml,ZodBigInt:()=>sa,ZodBigIntFormat:()=>Fl,ZodBoolean:()=>aa,ZodCIDRv4:()=>Ul,ZodCIDRv6:()=>Zl,ZodCUID:()=>Pl,ZodCUID2:()=>Ol,ZodCatch:()=>ng,ZodCodec:()=>Bl,ZodCustom:()=>pa,ZodCustomStringFormat:()=>go,ZodDate:()=>Jl,ZodDefault:()=>Xh,ZodDiscriminatedUnion:()=>Ch,ZodE164:()=>Ll,ZodEmail:()=>Il,ZodEmoji:()=>El,ZodEnum:()=>ho,ZodExactOptional:()=>Gh,ZodFile:()=>Kh,ZodFunction:()=>pg,ZodGUID:()=>ea,ZodIPv4:()=>Rl,ZodIPv6:()=>Al,ZodIntersection:()=>Mh,ZodJWT:()=>ql,ZodKSUID:()=>Dl,ZodLazy:()=>ug,ZodLiteral:()=>Jh,ZodMAC:()=>Th,ZodMap:()=>Fh,ZodNaN:()=>ig,ZodNanoID:()=>Tl,ZodNever:()=>Rh,ZodNonOptional:()=>Gl,ZodNull:()=>jh,ZodNullable:()=>Bh,ZodNumber:()=>ia,ZodNumberFormat:()=>Xr,ZodObject:()=>ca,ZodOptional:()=>Wl,ZodPipe:()=>Hl,ZodPrefault:()=>Qh,ZodPromise:()=>dg,ZodReadonly:()=>ag,ZodRecord:()=>da,ZodSet:()=>Vh,ZodString:()=>na,ZodStringFormat:()=>ce,ZodSuccess:()=>rg,ZodSymbol:()=>Ph,ZodTemplateLiteral:()=>cg,ZodTransform:()=>Wh,ZodTuple:()=>Lh,ZodType:()=>q,ZodULID:()=>jl,ZodURL:()=>oa,ZodUUID:()=>Rt,ZodUndefined:()=>Oh,ZodUnion:()=>ua,ZodUnknown:()=>Dh,ZodVoid:()=>Ah,ZodXID:()=>Nl,ZodXor:()=>Zh,_ZodString:()=>zl,_default:()=>Yh,_function:()=>qx,any:()=>Sx,array:()=>H,base64:()=>sx,base64url:()=>cx,bigint:()=>yx,boolean:()=>_e,catch:()=>og,check:()=>Fx,cidrv4:()=>ix,cidrv6:()=>ax,codec:()=>Cx,cuid:()=>Xb,cuid2:()=>Yb,custom:()=>Xl,date:()=>zx,describe:()=>Vx,discriminatedUnion:()=>la,e164:()=>ux,email:()=>Lb,emoji:()=>Hb,enum:()=>Te,exactOptional:()=>Hh,file:()=>Rx,float32:()=>hx,float64:()=>gx,function:()=>qx,guid:()=>qb,hash:()=>mx,hex:()=>fx,hostname:()=>px,httpUrl:()=>Gb,instanceof:()=>Kx,int:()=>wl,int32:()=>vx,int64:()=>$x,intersection:()=>_o,ipv4:()=>rx,ipv6:()=>ox,json:()=>Gx,jwt:()=>lx,keyof:()=>Ix,ksuid:()=>tx,lazy:()=>lg,literal:()=>T,looseObject:()=>Ee,looseRecord:()=>Ox,mac:()=>nx,map:()=>jx,meta:()=>Jx,nan:()=>Zx,nanoid:()=>Bb,nativeEnum:()=>Dx,never:()=>Vl,nonoptional:()=>tg,null:()=>vo,nullable:()=>ta,nullish:()=>Ax,number:()=>ne,object:()=>z,optional:()=>fe,partialRecord:()=>Px,pipe:()=>ra,prefault:()=>eg,preprocess:()=>fa,promise:()=>Lx,readonly:()=>sg,record:()=>pe,refine:()=>fg,set:()=>Nx,strictObject:()=>Ex,string:()=>h,stringFormat:()=>dx,stringbool:()=>Wx,success:()=>Ux,superRefine:()=>mg,symbol:()=>xx,templateLiteral:()=>Mx,transform:()=>Kl,tuple:()=>qh,uint32:()=>_x,uint64:()=>bx,ulid:()=>Qb,undefined:()=>kx,union:()=>ie,unknown:()=>ue,url:()=>Wb,uuid:()=>Fb,uuidv4:()=>Vb,uuidv6:()=>Jb,uuidv7:()=>Kb,void:()=>wx,xid:()=>ex,xor:()=>Tx});var Qi={};yn(Qi,{endsWith:()=>ao,gt:()=>Nt,gte:()=>Ae,includes:()=>oo,length:()=>Gr,lowercase:()=>ro,lt:()=>jt,lte:()=>Ge,maxLength:()=>Wr,maxSize:()=>gr,mime:()=>so,minLength:()=>Xt,minSize:()=>Dt,multipleOf:()=>hr,negative:()=>nl,nonnegative:()=>il,nonpositive:()=>ol,normalize:()=>co,overwrite:()=>_t,positive:()=>rl,property:()=>al,regex:()=>to,size:()=>Kr,slugify:()=>Gi,startsWith:()=>io,toLowerCase:()=>lo,toUpperCase:()=>po,trim:()=>uo,uppercase:()=>no});var vr={};yn(vr,{ZodISODate:()=>yl,ZodISODateTime:()=>vl,ZodISODuration:()=>kl,ZodISOTime:()=>bl,date:()=>$l,datetime:()=>_l,duration:()=>Sl,time:()=>xl});var vl=p("ZodISODateTime",(t,e)=>{Oc.init(t,e),ce.init(t,e)});function _l(t){return Nu(vl,t)}var yl=p("ZodISODate",(t,e)=>{jc.init(t,e),ce.init(t,e)});function $l(t){return Du(yl,t)}var bl=p("ZodISOTime",(t,e)=>{Nc.init(t,e),ce.init(t,e)});function xl(t){return Ru(bl,t)}var kl=p("ZodISODuration",(t,e)=>{Dc.init(t,e),ce.init(t,e)});function Sl(t){return Au(kl,t)}var gh=(t,e)=>{fi.init(t,e),t.name="ZodError",Object.defineProperties(t,{format:{value:r=>hi(t,r)},flatten:{value:r=>mi(t,r)},addIssue:{value:r=>{t.issues.push(r),t.message=JSON.stringify(t.issues,qr,2)}},addIssues:{value:r=>{t.issues.push(...r),t.message=JSON.stringify(t.issues,qr,2)}},isEmpty:{get(){return t.issues.length===0}}})},ZD=p("ZodError",gh),He=p("ZodError",gh,{Parent:Error});var vh=Mn(He),_h=qn(He),yh=Vn(He),$h=Jn(He),bh=Of(He),xh=jf(He),kh=Nf(He),Sh=Df(He),wh=Rf(He),zh=Af(He),Ih=Uf(He),Eh=Zf(He);var q=p("ZodType",(t,e)=>(M.init(t,e),Object.assign(t["~standard"],{jsonSchema:{input:fo(t,"input"),output:fo(t,"output")}}),t.toJSONSchema=Em(t,{}),t.def=e,t.type=e.type,Object.defineProperty(t,"_def",{value:e}),t.check=(...r)=>t.clone(y.mergeDefs(e,{checks:[...e.checks??[],...r.map(n=>typeof n=="function"?{_zod:{check:n,def:{check:"custom"},onattach:[]}}:n)]}),{parent:!0}),t.with=t.check,t.clone=(r,n)=>De(t,r,n),t.brand=()=>t,t.register=((r,n)=>(r.add(t,n),t)),t.parse=(r,n)=>vh(t,r,n,{callee:t.parse}),t.safeParse=(r,n)=>yh(t,r,n),t.parseAsync=async(r,n)=>_h(t,r,n,{callee:t.parseAsync}),t.safeParseAsync=async(r,n)=>$h(t,r,n),t.spa=t.safeParseAsync,t.encode=(r,n)=>bh(t,r,n),t.decode=(r,n)=>xh(t,r,n),t.encodeAsync=async(r,n)=>kh(t,r,n),t.decodeAsync=async(r,n)=>Sh(t,r,n),t.safeEncode=(r,n)=>wh(t,r,n),t.safeDecode=(r,n)=>zh(t,r,n),t.safeEncodeAsync=async(r,n)=>Ih(t,r,n),t.safeDecodeAsync=async(r,n)=>Eh(t,r,n),t.refine=(r,n)=>t.check(fg(r,n)),t.superRefine=r=>t.check(mg(r)),t.overwrite=r=>t.check(_t(r)),t.optional=()=>fe(t),t.exactOptional=()=>Hh(t),t.nullable=()=>ta(t),t.nullish=()=>fe(ta(t)),t.nonoptional=r=>tg(t,r),t.array=()=>H(t),t.or=r=>ie([t,r]),t.and=r=>_o(t,r),t.transform=r=>ra(t,Kl(r)),t.default=r=>Yh(t,r),t.prefault=r=>eg(t,r),t.catch=r=>og(t,r),t.pipe=r=>ra(t,r),t.readonly=()=>sg(t),t.describe=r=>{let n=t.clone();return Re.add(n,{description:r}),n},Object.defineProperty(t,"description",{get(){return Re.get(t)?.description},configurable:!0}),t.meta=(...r)=>{if(r.length===0)return Re.get(t);let n=t.clone();return Re.add(n,r[0]),n},t.isOptional=()=>t.safeParse(void 0).success,t.isNullable=()=>t.safeParse(null).success,t.apply=r=>r(t),t)),zl=p("_ZodString",(t,e)=>{mr.init(t,e),q.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Tm(t,n,o,i);let r=t._zod.bag;t.format=r.format??null,t.minLength=r.minimum??null,t.maxLength=r.maximum??null,t.regex=(...n)=>t.check(to(...n)),t.includes=(...n)=>t.check(oo(...n)),t.startsWith=(...n)=>t.check(io(...n)),t.endsWith=(...n)=>t.check(ao(...n)),t.min=(...n)=>t.check(Xt(...n)),t.max=(...n)=>t.check(Wr(...n)),t.length=(...n)=>t.check(Gr(...n)),t.nonempty=(...n)=>t.check(Xt(1,...n)),t.lowercase=n=>t.check(ro(n)),t.uppercase=n=>t.check(no(n)),t.trim=()=>t.check(uo()),t.normalize=(...n)=>t.check(co(...n)),t.toLowerCase=()=>t.check(lo()),t.toUpperCase=()=>t.check(po()),t.slugify=()=>t.check(Gi())}),na=p("ZodString",(t,e)=>{mr.init(t,e),zl.init(t,e),t.email=r=>t.check(Ei(Il,r)),t.url=r=>t.check(eo(oa,r)),t.jwt=r=>t.check(Wi(ql,r)),t.emoji=r=>t.check(Ni(El,r)),t.guid=r=>t.check(Qn(ea,r)),t.uuid=r=>t.check(Ti(Rt,r)),t.uuidv4=r=>t.check(Pi(Rt,r)),t.uuidv6=r=>t.check(Oi(Rt,r)),t.uuidv7=r=>t.check(ji(Rt,r)),t.nanoid=r=>t.check(Di(Tl,r)),t.guid=r=>t.check(Qn(ea,r)),t.cuid=r=>t.check(Ri(Pl,r)),t.cuid2=r=>t.check(Ai(Ol,r)),t.ulid=r=>t.check(Ui(jl,r)),t.base64=r=>t.check(Vi(Cl,r)),t.base64url=r=>t.check(Ji(Ml,r)),t.xid=r=>t.check(Zi(Nl,r)),t.ksuid=r=>t.check(Ci(Dl,r)),t.ipv4=r=>t.check(Mi(Rl,r)),t.ipv6=r=>t.check(Li(Al,r)),t.cidrv4=r=>t.check(qi(Ul,r)),t.cidrv6=r=>t.check(Fi(Zl,r)),t.e164=r=>t.check(Ki(Ll,r)),t.datetime=r=>t.check(_l(r)),t.date=r=>t.check($l(r)),t.time=r=>t.check(xl(r)),t.duration=r=>t.check(Sl(r))});function h(t){return Ou(na,t)}var ce=p("ZodStringFormat",(t,e)=>{oe.init(t,e),zl.init(t,e)}),Il=p("ZodEmail",(t,e)=>{xc.init(t,e),ce.init(t,e)});function Lb(t){return Ei(Il,t)}var ea=p("ZodGUID",(t,e)=>{$c.init(t,e),ce.init(t,e)});function qb(t){return Qn(ea,t)}var Rt=p("ZodUUID",(t,e)=>{bc.init(t,e),ce.init(t,e)});function Fb(t){return Ti(Rt,t)}function Vb(t){return Pi(Rt,t)}function Jb(t){return Oi(Rt,t)}function Kb(t){return ji(Rt,t)}var oa=p("ZodURL",(t,e)=>{kc.init(t,e),ce.init(t,e)});function Wb(t){return eo(oa,t)}function Gb(t){return eo(oa,{protocol:/^https?$/,hostname:Qe.domain,...y.normalizeParams(t)})}var El=p("ZodEmoji",(t,e)=>{Sc.init(t,e),ce.init(t,e)});function Hb(t){return Ni(El,t)}var Tl=p("ZodNanoID",(t,e)=>{wc.init(t,e),ce.init(t,e)});function Bb(t){return Di(Tl,t)}var Pl=p("ZodCUID",(t,e)=>{zc.init(t,e),ce.init(t,e)});function Xb(t){return Ri(Pl,t)}var Ol=p("ZodCUID2",(t,e)=>{Ic.init(t,e),ce.init(t,e)});function Yb(t){return Ai(Ol,t)}var jl=p("ZodULID",(t,e)=>{Ec.init(t,e),ce.init(t,e)});function Qb(t){return Ui(jl,t)}var Nl=p("ZodXID",(t,e)=>{Tc.init(t,e),ce.init(t,e)});function ex(t){return Zi(Nl,t)}var Dl=p("ZodKSUID",(t,e)=>{Pc.init(t,e),ce.init(t,e)});function tx(t){return Ci(Dl,t)}var Rl=p("ZodIPv4",(t,e)=>{Rc.init(t,e),ce.init(t,e)});function rx(t){return Mi(Rl,t)}var Th=p("ZodMAC",(t,e)=>{Uc.init(t,e),ce.init(t,e)});function nx(t){return ju(Th,t)}var Al=p("ZodIPv6",(t,e)=>{Ac.init(t,e),ce.init(t,e)});function ox(t){return Li(Al,t)}var Ul=p("ZodCIDRv4",(t,e)=>{Zc.init(t,e),ce.init(t,e)});function ix(t){return qi(Ul,t)}var Zl=p("ZodCIDRv6",(t,e)=>{Cc.init(t,e),ce.init(t,e)});function ax(t){return Fi(Zl,t)}var Cl=p("ZodBase64",(t,e)=>{Mc.init(t,e),ce.init(t,e)});function sx(t){return Vi(Cl,t)}var Ml=p("ZodBase64URL",(t,e)=>{Lc.init(t,e),ce.init(t,e)});function cx(t){return Ji(Ml,t)}var Ll=p("ZodE164",(t,e)=>{qc.init(t,e),ce.init(t,e)});function ux(t){return Ki(Ll,t)}var ql=p("ZodJWT",(t,e)=>{Fc.init(t,e),ce.init(t,e)});function lx(t){return Wi(ql,t)}var go=p("ZodCustomStringFormat",(t,e)=>{Vc.init(t,e),ce.init(t,e)});function dx(t,e,r={}){return Hr(go,t,e,r)}function px(t){return Hr(go,"hostname",Qe.hostname,t)}function fx(t){return Hr(go,"hex",Qe.hex,t)}function mx(t,e){let r=e?.enc??"hex",n=`${t}_${r}`,o=Qe[n];if(!o)throw new Error(`Unrecognized hash format: ${n}`);return Hr(go,n,o,e)}var ia=p("ZodNumber",(t,e)=>{Si.init(t,e),q.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Pm(t,n,o,i),t.gt=(n,o)=>t.check(Nt(n,o)),t.gte=(n,o)=>t.check(Ae(n,o)),t.min=(n,o)=>t.check(Ae(n,o)),t.lt=(n,o)=>t.check(jt(n,o)),t.lte=(n,o)=>t.check(Ge(n,o)),t.max=(n,o)=>t.check(Ge(n,o)),t.int=n=>t.check(wl(n)),t.safe=n=>t.check(wl(n)),t.positive=n=>t.check(Nt(0,n)),t.nonnegative=n=>t.check(Ae(0,n)),t.negative=n=>t.check(jt(0,n)),t.nonpositive=n=>t.check(Ge(0,n)),t.multipleOf=(n,o)=>t.check(hr(n,o)),t.step=(n,o)=>t.check(hr(n,o)),t.finite=()=>t;let r=t._zod.bag;t.minValue=Math.max(r.minimum??Number.NEGATIVE_INFINITY,r.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,t.maxValue=Math.min(r.maximum??Number.POSITIVE_INFINITY,r.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,t.isInt=(r.format??"").includes("int")||Number.isSafeInteger(r.multipleOf??.5),t.isFinite=!0,t.format=r.format??null});function ne(t){return Uu(ia,t)}var Xr=p("ZodNumberFormat",(t,e)=>{Jc.init(t,e),ia.init(t,e)});function wl(t){return Zu(Xr,t)}function hx(t){return Cu(Xr,t)}function gx(t){return Mu(Xr,t)}function vx(t){return Lu(Xr,t)}function _x(t){return qu(Xr,t)}var aa=p("ZodBoolean",(t,e)=>{Bn.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Om(t,r,n,o)});function _e(t){return Fu(aa,t)}var sa=p("ZodBigInt",(t,e)=>{wi.init(t,e),q.init(t,e),t._zod.processJSONSchema=(n,o,i)=>jm(t,n,o,i),t.gte=(n,o)=>t.check(Ae(n,o)),t.min=(n,o)=>t.check(Ae(n,o)),t.gt=(n,o)=>t.check(Nt(n,o)),t.gte=(n,o)=>t.check(Ae(n,o)),t.min=(n,o)=>t.check(Ae(n,o)),t.lt=(n,o)=>t.check(jt(n,o)),t.lte=(n,o)=>t.check(Ge(n,o)),t.max=(n,o)=>t.check(Ge(n,o)),t.positive=n=>t.check(Nt(BigInt(0),n)),t.negative=n=>t.check(jt(BigInt(0),n)),t.nonpositive=n=>t.check(Ge(BigInt(0),n)),t.nonnegative=n=>t.check(Ae(BigInt(0),n)),t.multipleOf=(n,o)=>t.check(hr(n,o));let r=t._zod.bag;t.minValue=r.minimum??null,t.maxValue=r.maximum??null,t.format=r.format??null});function yx(t){return Vu(sa,t)}var Fl=p("ZodBigIntFormat",(t,e)=>{Kc.init(t,e),sa.init(t,e)});function $x(t){return Ju(Fl,t)}function bx(t){return Ku(Fl,t)}var Ph=p("ZodSymbol",(t,e)=>{Wc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Nm(t,r,n,o)});function xx(t){return Wu(Ph,t)}var Oh=p("ZodUndefined",(t,e)=>{Gc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Rm(t,r,n,o)});function kx(t){return Gu(Oh,t)}var jh=p("ZodNull",(t,e)=>{Hc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Dm(t,r,n,o)});function vo(t){return Hu(jh,t)}var Nh=p("ZodAny",(t,e)=>{Bc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Zm(t,r,n,o)});function Sx(){return Bu(Nh)}var Dh=p("ZodUnknown",(t,e)=>{Xc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Cm(t,r,n,o)});function ue(){return Xu(Dh)}var Rh=p("ZodNever",(t,e)=>{Yc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Um(t,r,n,o)});function Vl(t){return Yu(Rh,t)}var Ah=p("ZodVoid",(t,e)=>{Qc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Am(t,r,n,o)});function wx(t){return Qu(Ah,t)}var Jl=p("ZodDate",(t,e)=>{eu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Mm(t,n,o,i),t.min=(n,o)=>t.check(Ae(n,o)),t.max=(n,o)=>t.check(Ge(n,o));let r=t._zod.bag;t.minDate=r.minimum?new Date(r.minimum):null,t.maxDate=r.maximum?new Date(r.maximum):null});function zx(t){return el(Jl,t)}var Uh=p("ZodArray",(t,e)=>{tu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Ym(t,r,n,o),t.element=e.element,t.min=(r,n)=>t.check(Xt(r,n)),t.nonempty=r=>t.check(Xt(1,r)),t.max=(r,n)=>t.check(Wr(r,n)),t.length=(r,n)=>t.check(Gr(r,n)),t.unwrap=()=>t.element});function H(t,e){return Im(Uh,t,e)}function Ix(t){let e=t._zod.def.shape;return Te(Object.keys(e))}var ca=p("ZodObject",(t,e)=>{wm.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Qm(t,r,n,o),y.defineLazy(t,"shape",()=>e.shape),t.keyof=()=>Te(Object.keys(t._zod.def.shape)),t.catchall=r=>t.clone({...t._zod.def,catchall:r}),t.passthrough=()=>t.clone({...t._zod.def,catchall:ue()}),t.loose=()=>t.clone({...t._zod.def,catchall:ue()}),t.strict=()=>t.clone({...t._zod.def,catchall:Vl()}),t.strip=()=>t.clone({...t._zod.def,catchall:void 0}),t.extend=r=>y.extend(t,r),t.safeExtend=r=>y.safeExtend(t,r),t.merge=r=>y.merge(t,r),t.pick=r=>y.pick(t,r),t.omit=r=>y.omit(t,r),t.partial=(...r)=>y.partial(Wl,t,r[0]),t.required=(...r)=>y.required(Gl,t,r[0])});function z(t,e){let r={type:"object",shape:t??{},...y.normalizeParams(e)};return new ca(r)}function Ex(t,e){return new ca({type:"object",shape:t,catchall:Vl(),...y.normalizeParams(e)})}function Ee(t,e){return new ca({type:"object",shape:t,catchall:ue(),...y.normalizeParams(e)})}var ua=p("ZodUnion",(t,e)=>{Xn.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>ml(t,r,n,o),t.options=e.options});function ie(t,e){return new ua({type:"union",options:t,...y.normalizeParams(e)})}var Zh=p("ZodXor",(t,e)=>{ua.init(t,e),ru.init(t,e),t._zod.processJSONSchema=(r,n,o)=>ml(t,r,n,o),t.options=e.options});function Tx(t,e){return new Zh({type:"union",options:t,inclusive:!1,...y.normalizeParams(e)})}var Ch=p("ZodDiscriminatedUnion",(t,e)=>{ua.init(t,e),nu.init(t,e)});function la(t,e,r){return new Ch({type:"union",options:e,discriminator:t,...y.normalizeParams(r)})}var Mh=p("ZodIntersection",(t,e)=>{ou.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>eh(t,r,n,o)});function _o(t,e){return new Mh({type:"intersection",left:t,right:e})}var Lh=p("ZodTuple",(t,e)=>{zi.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>th(t,r,n,o),t.rest=r=>t.clone({...t._zod.def,rest:r})});function qh(t,e,r){let n=e instanceof M,o=n?r:e,i=n?e:null;return new Lh({type:"tuple",items:t,rest:i,...y.normalizeParams(o)})}var da=p("ZodRecord",(t,e)=>{iu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>rh(t,r,n,o),t.keyType=e.keyType,t.valueType=e.valueType});function pe(t,e,r){return new da({type:"record",keyType:t,valueType:e,...y.normalizeParams(r)})}function Px(t,e,r){let n=De(t);return n._zod.values=void 0,new da({type:"record",keyType:n,valueType:e,...y.normalizeParams(r)})}function Ox(t,e,r){return new da({type:"record",keyType:t,valueType:e,mode:"loose",...y.normalizeParams(r)})}var Fh=p("ZodMap",(t,e)=>{au.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Bm(t,r,n,o),t.keyType=e.keyType,t.valueType=e.valueType,t.min=(...r)=>t.check(Dt(...r)),t.nonempty=r=>t.check(Dt(1,r)),t.max=(...r)=>t.check(gr(...r)),t.size=(...r)=>t.check(Kr(...r))});function jx(t,e,r){return new Fh({type:"map",keyType:t,valueType:e,...y.normalizeParams(r)})}var Vh=p("ZodSet",(t,e)=>{su.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Xm(t,r,n,o),t.min=(...r)=>t.check(Dt(...r)),t.nonempty=r=>t.check(Dt(1,r)),t.max=(...r)=>t.check(gr(...r)),t.size=(...r)=>t.check(Kr(...r))});function Nx(t,e){return new Vh({type:"set",valueType:t,...y.normalizeParams(e)})}var ho=p("ZodEnum",(t,e)=>{cu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Lm(t,n,o,i),t.enum=e.entries,t.options=Object.values(e.entries);let r=new Set(Object.keys(e.entries));t.extract=(n,o)=>{let i={};for(let a of n)if(r.has(a))i[a]=e.entries[a];else throw new Error(`Key ${a} not found in enum`);return new ho({...e,checks:[],...y.normalizeParams(o),entries:i})},t.exclude=(n,o)=>{let i={...e.entries};for(let a of n)if(r.has(a))delete i[a];else throw new Error(`Key ${a} not found in enum`);return new ho({...e,checks:[],...y.normalizeParams(o),entries:i})}});function Te(t,e){let r=Array.isArray(t)?Object.fromEntries(t.map(n=>[n,n])):t;return new ho({type:"enum",entries:r,...y.normalizeParams(e)})}function Dx(t,e){return new ho({type:"enum",entries:t,...y.normalizeParams(e)})}var Jh=p("ZodLiteral",(t,e)=>{uu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>qm(t,r,n,o),t.values=new Set(e.values),Object.defineProperty(t,"value",{get(){if(e.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return e.values[0]}})});function T(t,e){return new Jh({type:"literal",values:Array.isArray(t)?t:[t],...y.normalizeParams(e)})}var Kh=p("ZodFile",(t,e)=>{lu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Jm(t,r,n,o),t.min=(r,n)=>t.check(Dt(r,n)),t.max=(r,n)=>t.check(gr(r,n)),t.mime=(r,n)=>t.check(so(Array.isArray(r)?r:[r],n))});function Rx(t){return sl(Kh,t)}var Wh=p("ZodTransform",(t,e)=>{du.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Hm(t,r,n,o),t._zod.parse=(r,n)=>{if(n.direction==="backward")throw new dr(t.constructor.name);r.addIssue=i=>{if(typeof i=="string")r.issues.push(y.issue(i,r.value,e));else{let a=i;a.fatal&&(a.continue=!1),a.code??(a.code="custom"),a.input??(a.input=r.value),a.inst??(a.inst=t),r.issues.push(y.issue(a))}};let o=e.transform(r.value,r);return o instanceof Promise?o.then(i=>(r.value=i,r)):(r.value=o,r)}});function Kl(t){return new Wh({type:"transform",transform:t})}var Wl=p("ZodOptional",(t,e)=>{Ii.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>hl(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function fe(t){return new Wl({type:"optional",innerType:t})}var Gh=p("ZodExactOptional",(t,e)=>{pu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>hl(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function Hh(t){return new Gh({type:"optional",innerType:t})}var Bh=p("ZodNullable",(t,e)=>{fu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>nh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function ta(t){return new Bh({type:"nullable",innerType:t})}function Ax(t){return fe(ta(t))}var Xh=p("ZodDefault",(t,e)=>{mu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>ih(t,r,n,o),t.unwrap=()=>t._zod.def.innerType,t.removeDefault=t.unwrap});function Yh(t,e){return new Xh({type:"default",innerType:t,get defaultValue(){return typeof e=="function"?e():y.shallowClone(e)}})}var Qh=p("ZodPrefault",(t,e)=>{hu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>ah(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function eg(t,e){return new Qh({type:"prefault",innerType:t,get defaultValue(){return typeof e=="function"?e():y.shallowClone(e)}})}var Gl=p("ZodNonOptional",(t,e)=>{gu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>oh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function tg(t,e){return new Gl({type:"nonoptional",innerType:t,...y.normalizeParams(e)})}var rg=p("ZodSuccess",(t,e)=>{vu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Km(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function Ux(t){return new rg({type:"success",innerType:t})}var ng=p("ZodCatch",(t,e)=>{_u.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>sh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType,t.removeCatch=t.unwrap});function og(t,e){return new ng({type:"catch",innerType:t,catchValue:typeof e=="function"?e:()=>e})}var ig=p("ZodNaN",(t,e)=>{yu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Fm(t,r,n,o)});function Zx(t){return tl(ig,t)}var Hl=p("ZodPipe",(t,e)=>{$u.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>ch(t,r,n,o),t.in=e.in,t.out=e.out});function ra(t,e){return new Hl({type:"pipe",in:t,out:e})}var Bl=p("ZodCodec",(t,e)=>{Hl.init(t,e),Yn.init(t,e)});function Cx(t,e,r){return new Bl({type:"pipe",in:t,out:e,transform:r.decode,reverseTransform:r.encode})}var ag=p("ZodReadonly",(t,e)=>{bu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>uh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function sg(t){return new ag({type:"readonly",innerType:t})}var cg=p("ZodTemplateLiteral",(t,e)=>{xu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Vm(t,r,n,o)});function Mx(t,e){return new cg({type:"template_literal",parts:t,...y.normalizeParams(e)})}var ug=p("ZodLazy",(t,e)=>{wu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>dh(t,r,n,o),t.unwrap=()=>t._zod.def.getter()});function lg(t){return new ug({type:"lazy",getter:t})}var dg=p("ZodPromise",(t,e)=>{Su.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>lh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function Lx(t){return new dg({type:"promise",innerType:t})}var pg=p("ZodFunction",(t,e)=>{ku.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Gm(t,r,n,o)});function qx(t){return new pg({type:"function",input:Array.isArray(t?.input)?qh(t?.input):t?.input??H(ue()),output:t?.output??ue()})}var pa=p("ZodCustom",(t,e)=>{zu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Wm(t,r,n,o)});function Fx(t){let e=new se({check:"custom"});return e._zod.check=t,e}function Xl(t,e){return cl(pa,t??(()=>!0),e)}function fg(t,e={}){return ul(pa,t,e)}function mg(t){return ll(t)}var Vx=dl,Jx=pl;function Kx(t,e={}){let r=new pa({type:"custom",check:"custom",fn:n=>n instanceof t,abort:!0,...y.normalizeParams(e)});return r._zod.bag.Class=t,r._zod.check=n=>{n.value instanceof t||n.issues.push({code:"invalid_type",expected:t.name,input:n.value,inst:r,path:[...r._zod.def.path??[]]})},r}var Wx=(...t)=>fl({Codec:Bl,Boolean:aa,String:na},...t);function Gx(t){let e=lg(()=>ie([h(t),ne(),_e(),vo(),H(e),pe(h(),e)]));return e}function fa(t,e){return ra(Kl(t),e)}var hg;hg||(hg={});var KD={...mo,...Qi,iso:vr};ye(Iu());var Ql="2025-11-25";var gg=[Ql,"2025-06-18","2025-03-26","2024-11-05","2024-10-07"],Qt="io.modelcontextprotocol/related-task",ha="2.0",be=Xl(t=>t!==null&&(typeof t=="object"||typeof t=="function")),vg=ie([h(),ne().int()]),_g=h(),d4=Ee({ttl:ie([ne(),vo()]).optional(),pollInterval:ne().optional()}),Yx=z({ttl:ne().optional()}),Qx=z({taskId:h()}),ed=Ee({progressToken:vg.optional(),[Qt]:Qx.optional()}),Be=z({_meta:ed.optional()}),yo=Be.extend({task:Yx.optional()}),yg=t=>yo.safeParse(t).success,xe=z({method:h(),params:Be.loose().optional()}),et=z({_meta:ed.optional()}),tt=z({method:h(),params:et.loose().optional()}),ke=Ee({_meta:ed.optional()}),ga=ie([h(),ne().int()]),$g=z({jsonrpc:T(ha),id:ga,...xe.shape}).strict(),td=t=>$g.safeParse(t).success,bg=z({jsonrpc:T(ha),...tt.shape}).strict(),xg=t=>bg.safeParse(t).success,rd=z({jsonrpc:T(ha),id:ga,result:ke}).strict(),$o=t=>rd.safeParse(t).success;var Y;(function(t){t[t.ConnectionClosed=-32e3]="ConnectionClosed",t[t.RequestTimeout=-32001]="RequestTimeout",t[t.ParseError=-32700]="ParseError",t[t.InvalidRequest=-32600]="InvalidRequest",t[t.MethodNotFound=-32601]="MethodNotFound",t[t.InvalidParams=-32602]="InvalidParams",t[t.InternalError=-32603]="InternalError",t[t.UrlElicitationRequired=-32042]="UrlElicitationRequired"})(Y||(Y={}));var nd=z({jsonrpc:T(ha),id:ga.optional(),error:z({code:ne().int(),message:h(),data:ue().optional()})}).strict();var kg=t=>nd.safeParse(t).success;var Sg=ie([$g,bg,rd,nd]),p4=ie([rd,nd]),va=ke.strict(),ek=et.extend({requestId:ga.optional(),reason:h().optional()}),_a=tt.extend({method:T("notifications/cancelled"),params:ek}),tk=z({src:h(),mimeType:h().optional(),sizes:H(h()).optional(),theme:Te(["light","dark"]).optional()}),bo=z({icons:H(tk).optional()}),Yr=z({name:h(),title:h().optional()}),wg=Yr.extend({...Yr.shape,...bo.shape,version:h(),websiteUrl:h().optional(),description:h().optional()}),rk=_o(z({applyDefaults:_e().optional()}),pe(h(),ue())),nk=fa(t=>t&&typeof t=="object"&&!Array.isArray(t)&&Object.keys(t).length===0?{form:{}}:t,_o(z({form:rk.optional(),url:be.optional()}),pe(h(),ue()).optional())),ok=Ee({list:be.optional(),cancel:be.optional(),requests:Ee({sampling:Ee({createMessage:be.optional()}).optional(),elicitation:Ee({create:be.optional()}).optional()}).optional()}),ik=Ee({list:be.optional(),cancel:be.optional(),requests:Ee({tools:Ee({call:be.optional()}).optional()}).optional()}),ak=z({experimental:pe(h(),be).optional(),sampling:z({context:be.optional(),tools:be.optional()}).optional(),elicitation:nk.optional(),roots:z({listChanged:_e().optional()}).optional(),tasks:ok.optional()}),sk=Be.extend({protocolVersion:h(),capabilities:ak,clientInfo:wg}),od=xe.extend({method:T("initialize"),params:sk});var ck=z({experimental:pe(h(),be).optional(),logging:be.optional(),completions:be.optional(),prompts:z({listChanged:_e().optional()}).optional(),resources:z({subscribe:_e().optional(),listChanged:_e().optional()}).optional(),tools:z({listChanged:_e().optional()}).optional(),tasks:ik.optional()}),uk=ke.extend({protocolVersion:h(),capabilities:ck,serverInfo:wg,instructions:h().optional()}),id=tt.extend({method:T("notifications/initialized"),params:et.optional()});var ya=xe.extend({method:T("ping"),params:Be.optional()}),lk=z({progress:ne(),total:fe(ne()),message:fe(h())}),dk=z({...et.shape,...lk.shape,progressToken:vg}),$a=tt.extend({method:T("notifications/progress"),params:dk}),pk=Be.extend({cursor:_g.optional()}),xo=xe.extend({params:pk.optional()}),ko=ke.extend({nextCursor:_g.optional()}),fk=Te(["working","input_required","completed","failed","cancelled"]),So=z({taskId:h(),status:fk,ttl:ie([ne(),vo()]),createdAt:h(),lastUpdatedAt:h(),pollInterval:fe(ne()),statusMessage:fe(h())}),Qr=ke.extend({task:So}),mk=et.merge(So),wo=tt.extend({method:T("notifications/tasks/status"),params:mk}),ba=xe.extend({method:T("tasks/get"),params:Be.extend({taskId:h()})}),xa=ke.merge(So),ka=xe.extend({method:T("tasks/result"),params:Be.extend({taskId:h()})}),f4=ke.loose(),Sa=xo.extend({method:T("tasks/list")}),wa=ko.extend({tasks:H(So)}),za=xe.extend({method:T("tasks/cancel"),params:Be.extend({taskId:h()})}),zg=ke.merge(So),Ig=z({uri:h(),mimeType:fe(h()),_meta:pe(h(),ue()).optional()}),Eg=Ig.extend({text:h()}),ad=h().refine(t=>{try{return atob(t),!0}catch{return!1}},{message:"Invalid Base64 string"}),Tg=Ig.extend({blob:ad}),zo=Te(["user","assistant"]),en=z({audience:H(zo).optional(),priority:ne().min(0).max(1).optional(),lastModified:vr.datetime({offset:!0}).optional()}),Pg=z({...Yr.shape,...bo.shape,uri:h(),description:fe(h()),mimeType:fe(h()),annotations:en.optional(),_meta:fe(Ee({}))}),hk=z({...Yr.shape,...bo.shape,uriTemplate:h(),description:fe(h()),mimeType:fe(h()),annotations:en.optional(),_meta:fe(Ee({}))}),gk=xo.extend({method:T("resources/list")}),vk=ko.extend({resources:H(Pg)}),_k=xo.extend({method:T("resources/templates/list")}),yk=ko.extend({resourceTemplates:H(hk)}),sd=Be.extend({uri:h()}),$k=sd,bk=xe.extend({method:T("resources/read"),params:$k}),xk=ke.extend({contents:H(ie([Eg,Tg]))}),kk=tt.extend({method:T("notifications/resources/list_changed"),params:et.optional()}),Sk=sd,wk=xe.extend({method:T("resources/subscribe"),params:Sk}),zk=sd,Ik=xe.extend({method:T("resources/unsubscribe"),params:zk}),Ek=et.extend({uri:h()}),Tk=tt.extend({method:T("notifications/resources/updated"),params:Ek}),Pk=z({name:h(),description:fe(h()),required:fe(_e())}),Ok=z({...Yr.shape,...bo.shape,description:fe(h()),arguments:fe(H(Pk)),_meta:fe(Ee({}))}),jk=xo.extend({method:T("prompts/list")}),Nk=ko.extend({prompts:H(Ok)}),Dk=Be.extend({name:h(),arguments:pe(h(),h()).optional()}),Rk=xe.extend({method:T("prompts/get"),params:Dk}),cd=z({type:T("text"),text:h(),annotations:en.optional(),_meta:pe(h(),ue()).optional()}),ud=z({type:T("image"),data:ad,mimeType:h(),annotations:en.optional(),_meta:pe(h(),ue()).optional()}),ld=z({type:T("audio"),data:ad,mimeType:h(),annotations:en.optional(),_meta:pe(h(),ue()).optional()}),Ak=z({type:T("tool_use"),name:h(),id:h(),input:pe(h(),ue()),_meta:pe(h(),ue()).optional()}),Uk=z({type:T("resource"),resource:ie([Eg,Tg]),annotations:en.optional(),_meta:pe(h(),ue()).optional()}),Zk=Pg.extend({type:T("resource_link")}),dd=ie([cd,ud,ld,Zk,Uk]),Ck=z({role:zo,content:dd}),Mk=ke.extend({description:h().optional(),messages:H(Ck)}),Lk=tt.extend({method:T("notifications/prompts/list_changed"),params:et.optional()}),qk=z({title:h().optional(),readOnlyHint:_e().optional(),destructiveHint:_e().optional(),idempotentHint:_e().optional(),openWorldHint:_e().optional()}),Fk=z({taskSupport:Te(["required","optional","forbidden"]).optional()}),Og=z({...Yr.shape,...bo.shape,description:h().optional(),inputSchema:z({type:T("object"),properties:pe(h(),be).optional(),required:H(h()).optional()}).catchall(ue()),outputSchema:z({type:T("object"),properties:pe(h(),be).optional(),required:H(h()).optional()}).catchall(ue()).optional(),annotations:qk.optional(),execution:Fk.optional(),_meta:pe(h(),ue()).optional()}),pd=xo.extend({method:T("tools/list")}),Vk=ko.extend({tools:H(Og)}),Ia=ke.extend({content:H(dd).default([]),structuredContent:pe(h(),ue()).optional(),isError:_e().optional()}),m4=Ia.or(ke.extend({toolResult:ue()})),Jk=yo.extend({name:h(),arguments:pe(h(),ue()).optional()}),Io=xe.extend({method:T("tools/call"),params:Jk}),Kk=tt.extend({method:T("notifications/tools/list_changed"),params:et.optional()}),h4=z({autoRefresh:_e().default(!0),debounceMs:ne().int().nonnegative().default(300)}),Eo=Te(["debug","info","notice","warning","error","critical","alert","emergency"]),Wk=Be.extend({level:Eo}),fd=xe.extend({method:T("logging/setLevel"),params:Wk}),Gk=et.extend({level:Eo,logger:h().optional(),data:ue()}),Hk=tt.extend({method:T("notifications/message"),params:Gk}),Bk=z({name:h().optional()}),Xk=z({hints:H(Bk).optional(),costPriority:ne().min(0).max(1).optional(),speedPriority:ne().min(0).max(1).optional(),intelligencePriority:ne().min(0).max(1).optional()}),Yk=z({mode:Te(["auto","required","none"]).optional()}),Qk=z({type:T("tool_result"),toolUseId:h().describe("The unique identifier for the corresponding tool call."),content:H(dd).default([]),structuredContent:z({}).loose().optional(),isError:_e().optional(),_meta:pe(h(),ue()).optional()}),eS=la("type",[cd,ud,ld]),ma=la("type",[cd,ud,ld,Ak,Qk]),tS=z({role:zo,content:ie([ma,H(ma)]),_meta:pe(h(),ue()).optional()}),rS=yo.extend({messages:H(tS),modelPreferences:Xk.optional(),systemPrompt:h().optional(),includeContext:Te(["none","thisServer","allServers"]).optional(),temperature:ne().optional(),maxTokens:ne().int(),stopSequences:H(h()).optional(),metadata:be.optional(),tools:H(Og).optional(),toolChoice:Yk.optional()}),nS=xe.extend({method:T("sampling/createMessage"),params:rS}),md=ke.extend({model:h(),stopReason:fe(Te(["endTurn","stopSequence","maxTokens"]).or(h())),role:zo,content:eS}),hd=ke.extend({model:h(),stopReason:fe(Te(["endTurn","stopSequence","maxTokens","toolUse"]).or(h())),role:zo,content:ie([ma,H(ma)])}),oS=z({type:T("boolean"),title:h().optional(),description:h().optional(),default:_e().optional()}),iS=z({type:T("string"),title:h().optional(),description:h().optional(),minLength:ne().optional(),maxLength:ne().optional(),format:Te(["email","uri","date","date-time"]).optional(),default:h().optional()}),aS=z({type:Te(["number","integer"]),title:h().optional(),description:h().optional(),minimum:ne().optional(),maximum:ne().optional(),default:ne().optional()}),sS=z({type:T("string"),title:h().optional(),description:h().optional(),enum:H(h()),default:h().optional()}),cS=z({type:T("string"),title:h().optional(),description:h().optional(),oneOf:H(z({const:h(),title:h()})),default:h().optional()}),uS=z({type:T("string"),title:h().optional(),description:h().optional(),enum:H(h()),enumNames:H(h()).optional(),default:h().optional()}),lS=ie([sS,cS]),dS=z({type:T("array"),title:h().optional(),description:h().optional(),minItems:ne().optional(),maxItems:ne().optional(),items:z({type:T("string"),enum:H(h())}),default:H(h()).optional()}),pS=z({type:T("array"),title:h().optional(),description:h().optional(),minItems:ne().optional(),maxItems:ne().optional(),items:z({anyOf:H(z({const:h(),title:h()}))}),default:H(h()).optional()}),fS=ie([dS,pS]),mS=ie([uS,lS,fS]),hS=ie([mS,oS,iS,aS]),gS=yo.extend({mode:T("form").optional(),message:h(),requestedSchema:z({type:T("object"),properties:pe(h(),hS),required:H(h()).optional()})}),vS=yo.extend({mode:T("url"),message:h(),elicitationId:h(),url:h().url()}),_S=ie([gS,vS]),yS=xe.extend({method:T("elicitation/create"),params:_S}),$S=et.extend({elicitationId:h()}),bS=tt.extend({method:T("notifications/elicitation/complete"),params:$S}),Ea=ke.extend({action:Te(["accept","decline","cancel"]),content:fa(t=>t===null?void 0:t,pe(h(),ie([h(),ne(),_e(),H(h())])).optional())}),xS=z({type:T("ref/resource"),uri:h()});var kS=z({type:T("ref/prompt"),name:h()}),SS=Be.extend({ref:ie([kS,xS]),argument:z({name:h(),value:h()}),context:z({arguments:pe(h(),h()).optional()}).optional()}),wS=xe.extend({method:T("completion/complete"),params:SS});var zS=ke.extend({completion:Ee({values:H(h()).max(100),total:fe(ne().int()),hasMore:fe(_e())})}),IS=z({uri:h().startsWith("file://"),name:h().optional(),_meta:pe(h(),ue()).optional()}),ES=xe.extend({method:T("roots/list"),params:Be.optional()}),gd=ke.extend({roots:H(IS)}),TS=tt.extend({method:T("notifications/roots/list_changed"),params:et.optional()}),g4=ie([ya,od,wS,fd,Rk,jk,gk,_k,bk,wk,Ik,Io,pd,ba,ka,Sa,za]),v4=ie([_a,$a,id,TS,wo]),_4=ie([va,md,hd,Ea,gd,xa,wa,Qr]),y4=ie([ya,nS,yS,ES,ba,ka,Sa,za]),$4=ie([_a,$a,Hk,Tk,kk,Kk,Lk,wo,bS]),b4=ie([va,uk,zS,Mk,Nk,vk,yk,xk,Ia,Vk,xa,wa,Qr]),J=class t extends Error{constructor(e,r,n){super(`MCP error ${e}: ${r}`),this.code=e,this.data=n,this.name="McpError"}static fromError(e,r,n){if(e===Y.UrlElicitationRequired&&n){let o=n;if(o.elicitations)return new Yl(o.elicitations,r)}return new t(e,r,n)}},Yl=class extends J{constructor(e,r=`URL elicitation${e.length>1?"s":""} required`){super(Y.UrlElicitationRequired,r,{elicitations:e})}get elicitations(){return this.data?.elicitations??[]}};function er(t){return t==="completed"||t==="failed"||t==="cancelled"}var t1=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function vd(t){let r=Yi(t)?.method;if(!r)throw new Error("Schema is missing a method literal");let n=hh(r);if(typeof n!="string")throw new Error("Schema method literal must be a string");return n}function _d(t,e){let r=Yt(t,e);if(!r.success)throw r.error;return r.data}var RS=6e4,Ta=class{constructor(e){this._options=e,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this._timeoutInfo=new Map,this._pendingDebouncedNotifications=new Set,this._taskProgressTokens=new Map,this._requestResolvers=new Map,this.setNotificationHandler(_a,r=>{this._oncancel(r)}),this.setNotificationHandler($a,r=>{this._onprogress(r)}),this.setRequestHandler(ya,r=>({})),this._taskStore=e?.taskStore,this._taskMessageQueue=e?.taskMessageQueue,this._taskStore&&(this.setRequestHandler(ba,async(r,n)=>{let o=await this._taskStore.getTask(r.params.taskId,n.sessionId);if(!o)throw new J(Y.InvalidParams,"Failed to retrieve task: Task not found");return{...o}}),this.setRequestHandler(ka,async(r,n)=>{let o=async()=>{let i=r.params.taskId;if(this._taskMessageQueue){let s;for(;s=await this._taskMessageQueue.dequeue(i,n.sessionId);){if(s.type==="response"||s.type==="error"){let c=s.message,u=c.id,l=this._requestResolvers.get(u);if(l)if(this._requestResolvers.delete(u),s.type==="response")l(c);else{let d=c,m=new J(d.error.code,d.error.message,d.error.data);l(m)}else{let d=s.type==="response"?"Response":"Error";this._onerror(new Error(`${d} handler missing for request ${u}`))}continue}await this._transport?.send(s.message,{relatedRequestId:n.requestId})}}let a=await this._taskStore.getTask(i,n.sessionId);if(!a)throw new J(Y.InvalidParams,`Task not found: ${i}`);if(!er(a.status))return await this._waitForTaskUpdate(i,n.signal),await o();if(er(a.status)){let s=await this._taskStore.getTaskResult(i,n.sessionId);return this._clearTaskQueue(i),{...s,_meta:{...s._meta,[Qt]:{taskId:i}}}}return await o()};return await o()}),this.setRequestHandler(Sa,async(r,n)=>{try{let{tasks:o,nextCursor:i}=await this._taskStore.listTasks(r.params?.cursor,n.sessionId);return{tasks:o,nextCursor:i,_meta:{}}}catch(o){throw new J(Y.InvalidParams,`Failed to list tasks: ${o instanceof Error?o.message:String(o)}`)}}),this.setRequestHandler(za,async(r,n)=>{try{let o=await this._taskStore.getTask(r.params.taskId,n.sessionId);if(!o)throw new J(Y.InvalidParams,`Task not found: ${r.params.taskId}`);if(er(o.status))throw new J(Y.InvalidParams,`Cannot cancel task in terminal status: ${o.status}`);await this._taskStore.updateTaskStatus(r.params.taskId,"cancelled","Client cancelled task execution.",n.sessionId),this._clearTaskQueue(r.params.taskId);let i=await this._taskStore.getTask(r.params.taskId,n.sessionId);if(!i)throw new J(Y.InvalidParams,`Task not found after cancellation: ${r.params.taskId}`);return{_meta:{},...i}}catch(o){throw o instanceof J?o:new J(Y.InvalidRequest,`Failed to cancel task: ${o instanceof Error?o.message:String(o)}`)}}))}async _oncancel(e){if(!e.params.requestId)return;this._requestHandlerAbortControllers.get(e.params.requestId)?.abort(e.params.reason)}_setupTimeout(e,r,n,o,i=!1){this._timeoutInfo.set(e,{timeoutId:setTimeout(o,r),startTime:Date.now(),timeout:r,maxTotalTimeout:n,resetTimeoutOnProgress:i,onTimeout:o})}_resetTimeout(e){let r=this._timeoutInfo.get(e);if(!r)return!1;let n=Date.now()-r.startTime;if(r.maxTotalTimeout&&n>=r.maxTotalTimeout)throw this._timeoutInfo.delete(e),J.fromError(Y.RequestTimeout,"Maximum total timeout exceeded",{maxTotalTimeout:r.maxTotalTimeout,totalElapsed:n});return clearTimeout(r.timeoutId),r.timeoutId=setTimeout(r.onTimeout,r.timeout),!0}_cleanupTimeout(e){let r=this._timeoutInfo.get(e);r&&(clearTimeout(r.timeoutId),this._timeoutInfo.delete(e))}async connect(e){this._transport=e;let r=this.transport?.onclose;this._transport.onclose=()=>{r?.(),this._onclose()};let n=this.transport?.onerror;this._transport.onerror=i=>{n?.(i),this._onerror(i)};let o=this._transport?.onmessage;this._transport.onmessage=(i,a)=>{o?.(i,a),$o(i)||kg(i)?this._onresponse(i):td(i)?this._onrequest(i,a):xg(i)?this._onnotification(i):this._onerror(new Error(`Unknown message type: ${JSON.stringify(i)}`))},await this._transport.start()}_onclose(){let e=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();let r=J.fromError(Y.ConnectionClosed,"Connection closed");this._transport=void 0,this.onclose?.();for(let n of e.values())n(r)}_onerror(e){this.onerror?.(e)}_onnotification(e){let r=this._notificationHandlers.get(e.method)??this.fallbackNotificationHandler;r!==void 0&&Promise.resolve().then(()=>r(e)).catch(n=>this._onerror(new Error(`Uncaught error in notification handler: ${n}`)))}_onrequest(e,r){let n=this._requestHandlers.get(e.method)??this.fallbackRequestHandler,o=this._transport,i=e.params?._meta?.[Qt]?.taskId;if(n===void 0){let l={jsonrpc:"2.0",id:e.id,error:{code:Y.MethodNotFound,message:"Method not found"}};i&&this._taskMessageQueue?this._enqueueTaskMessage(i,{type:"error",message:l,timestamp:Date.now()},o?.sessionId).catch(d=>this._onerror(new Error(`Failed to enqueue error response: ${d}`))):o?.send(l).catch(d=>this._onerror(new Error(`Failed to send an error response: ${d}`)));return}let a=new AbortController;this._requestHandlerAbortControllers.set(e.id,a);let s=yg(e.params)?e.params.task:void 0,c=this._taskStore?this.requestTaskStore(e,o?.sessionId):void 0,u={signal:a.signal,sessionId:o?.sessionId,_meta:e.params?._meta,sendNotification:async l=>{let d={relatedRequestId:e.id};i&&(d.relatedTask={taskId:i}),await this.notification(l,d)},sendRequest:async(l,d,m)=>{let f={...m,relatedRequestId:e.id};i&&!f.relatedTask&&(f.relatedTask={taskId:i});let g=f.relatedTask?.taskId??i;return g&&c&&await c.updateTaskStatus(g,"input_required"),await this.request(l,d,f)},authInfo:r?.authInfo,requestId:e.id,requestInfo:r?.requestInfo,taskId:i,taskStore:c,taskRequestedTtl:s?.ttl,closeSSEStream:r?.closeSSEStream,closeStandaloneSSEStream:r?.closeStandaloneSSEStream};Promise.resolve().then(()=>{s&&this.assertTaskHandlerCapability(e.method)}).then(()=>n(e,u)).then(async l=>{if(a.signal.aborted)return;let d={result:l,jsonrpc:"2.0",id:e.id};i&&this._taskMessageQueue?await this._enqueueTaskMessage(i,{type:"response",message:d,timestamp:Date.now()},o?.sessionId):await o?.send(d)},async l=>{if(a.signal.aborted)return;let d={jsonrpc:"2.0",id:e.id,error:{code:Number.isSafeInteger(l.code)?l.code:Y.InternalError,message:l.message??"Internal error",...l.data!==void 0&&{data:l.data}}};i&&this._taskMessageQueue?await this._enqueueTaskMessage(i,{type:"error",message:d,timestamp:Date.now()},o?.sessionId):await o?.send(d)}).catch(l=>this._onerror(new Error(`Failed to send response: ${l}`))).finally(()=>{this._requestHandlerAbortControllers.delete(e.id)})}_onprogress(e){let{progressToken:r,...n}=e.params,o=Number(r),i=this._progressHandlers.get(o);if(!i){this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(e)}`));return}let a=this._responseHandlers.get(o),s=this._timeoutInfo.get(o);if(s&&a&&s.resetTimeoutOnProgress)try{this._resetTimeout(o)}catch(c){this._responseHandlers.delete(o),this._progressHandlers.delete(o),this._cleanupTimeout(o),a(c);return}i(n)}_onresponse(e){let r=Number(e.id),n=this._requestResolvers.get(r);if(n){if(this._requestResolvers.delete(r),$o(e))n(e);else{let a=new J(e.error.code,e.error.message,e.error.data);n(a)}return}let o=this._responseHandlers.get(r);if(o===void 0){this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(e)}`));return}this._responseHandlers.delete(r),this._cleanupTimeout(r);let i=!1;if($o(e)&&e.result&&typeof e.result=="object"){let a=e.result;if(a.task&&typeof a.task=="object"){let s=a.task;typeof s.taskId=="string"&&(i=!0,this._taskProgressTokens.set(s.taskId,r))}}if(i||this._progressHandlers.delete(r),$o(e))o(e);else{let a=J.fromError(e.error.code,e.error.message,e.error.data);o(a)}}get transport(){return this._transport}async close(){await this._transport?.close()}async*requestStream(e,r,n){let{task:o}=n??{};if(!o){try{yield{type:"result",result:await this.request(e,r,n)}}catch(a){yield{type:"error",error:a instanceof J?a:new J(Y.InternalError,String(a))}}return}let i;try{let a=await this.request(e,Qr,n);if(a.task)i=a.task.taskId,yield{type:"taskCreated",task:a.task};else throw new J(Y.InternalError,"Task creation did not return a task");for(;;){let s=await this.getTask({taskId:i},n);if(yield{type:"taskStatus",task:s},er(s.status)){s.status==="completed"?yield{type:"result",result:await this.getTaskResult({taskId:i},r,n)}:s.status==="failed"?yield{type:"error",error:new J(Y.InternalError,`Task ${i} failed`)}:s.status==="cancelled"&&(yield{type:"error",error:new J(Y.InternalError,`Task ${i} was cancelled`)});return}if(s.status==="input_required"){yield{type:"result",result:await this.getTaskResult({taskId:i},r,n)};return}let c=s.pollInterval??this._options?.defaultTaskPollInterval??1e3;await new Promise(u=>setTimeout(u,c)),n?.signal?.throwIfAborted()}}catch(a){yield{type:"error",error:a instanceof J?a:new J(Y.InternalError,String(a))}}}request(e,r,n){let{relatedRequestId:o,resumptionToken:i,onresumptiontoken:a,task:s,relatedTask:c}=n??{};return new Promise((u,l)=>{let d=O=>{l(O)};if(!this._transport){d(new Error("Not connected"));return}if(this._options?.enforceStrictCapabilities===!0)try{this.assertCapabilityForMethod(e.method),s&&this.assertTaskCapability(e.method)}catch(O){d(O);return}n?.signal?.throwIfAborted();let m=this._requestMessageId++,f={...e,jsonrpc:"2.0",id:m};n?.onprogress&&(this._progressHandlers.set(m,n.onprogress),f.params={...e.params,_meta:{...e.params?._meta||{},progressToken:m}}),s&&(f.params={...f.params,task:s}),c&&(f.params={...f.params,_meta:{...f.params?._meta||{},[Qt]:c}});let g=O=>{this._responseHandlers.delete(m),this._progressHandlers.delete(m),this._cleanupTimeout(m),this._transport?.send({jsonrpc:"2.0",method:"notifications/cancelled",params:{requestId:m,reason:String(O)}},{relatedRequestId:o,resumptionToken:i,onresumptiontoken:a}).catch(Z=>this._onerror(new Error(`Failed to send cancellation: ${Z}`)));let I=O instanceof J?O:new J(Y.RequestTimeout,String(O));l(I)};this._responseHandlers.set(m,O=>{if(!n?.signal?.aborted){if(O instanceof Error)return l(O);try{let I=Yt(r,O.result);I.success?u(I.data):l(I.error)}catch(I){l(I)}}}),n?.signal?.addEventListener("abort",()=>{g(n?.signal?.reason)});let v=n?.timeout??RS,$=()=>g(J.fromError(Y.RequestTimeout,"Request timed out",{timeout:v}));this._setupTimeout(m,v,n?.maxTotalTimeout,$,n?.resetTimeoutOnProgress??!1);let x=c?.taskId;if(x){let O=I=>{let Z=this._responseHandlers.get(m);Z?Z(I):this._onerror(new Error(`Response handler missing for side-channeled request ${m}`))};this._requestResolvers.set(m,O),this._enqueueTaskMessage(x,{type:"request",message:f,timestamp:Date.now()}).catch(I=>{this._cleanupTimeout(m),l(I)})}else this._transport.send(f,{relatedRequestId:o,resumptionToken:i,onresumptiontoken:a}).catch(O=>{this._cleanupTimeout(m),l(O)})})}async getTask(e,r){return this.request({method:"tasks/get",params:e},xa,r)}async getTaskResult(e,r,n){return this.request({method:"tasks/result",params:e},r,n)}async listTasks(e,r){return this.request({method:"tasks/list",params:e},wa,r)}async cancelTask(e,r){return this.request({method:"tasks/cancel",params:e},zg,r)}async notification(e,r){if(!this._transport)throw new Error("Not connected");this.assertNotificationCapability(e.method);let n=r?.relatedTask?.taskId;if(n){let s={...e,jsonrpc:"2.0",params:{...e.params,_meta:{...e.params?._meta||{},[Qt]:r.relatedTask}}};await this._enqueueTaskMessage(n,{type:"notification",message:s,timestamp:Date.now()});return}if((this._options?.debouncedNotificationMethods??[]).includes(e.method)&&!e.params&&!r?.relatedRequestId&&!r?.relatedTask){if(this._pendingDebouncedNotifications.has(e.method))return;this._pendingDebouncedNotifications.add(e.method),Promise.resolve().then(()=>{if(this._pendingDebouncedNotifications.delete(e.method),!this._transport)return;let s={...e,jsonrpc:"2.0"};r?.relatedTask&&(s={...s,params:{...s.params,_meta:{...s.params?._meta||{},[Qt]:r.relatedTask}}}),this._transport?.send(s,r).catch(c=>this._onerror(c))});return}let a={...e,jsonrpc:"2.0"};r?.relatedTask&&(a={...a,params:{...a.params,_meta:{...a.params?._meta||{},[Qt]:r.relatedTask}}}),await this._transport.send(a,r)}setRequestHandler(e,r){let n=vd(e);this.assertRequestHandlerCapability(n),this._requestHandlers.set(n,(o,i)=>{let a=_d(e,o);return Promise.resolve(r(a,i))})}removeRequestHandler(e){this._requestHandlers.delete(e)}assertCanSetRequestHandler(e){if(this._requestHandlers.has(e))throw new Error(`A request handler for ${e} already exists, which would be overridden`)}setNotificationHandler(e,r){let n=vd(e);this._notificationHandlers.set(n,o=>{let i=_d(e,o);return Promise.resolve(r(i))})}removeNotificationHandler(e){this._notificationHandlers.delete(e)}_cleanupTaskProgressHandler(e){let r=this._taskProgressTokens.get(e);r!==void 0&&(this._progressHandlers.delete(r),this._taskProgressTokens.delete(e))}async _enqueueTaskMessage(e,r,n){if(!this._taskStore||!this._taskMessageQueue)throw new Error("Cannot enqueue task message: taskStore and taskMessageQueue are not configured");let o=this._options?.maxTaskQueueSize;await this._taskMessageQueue.enqueue(e,r,n,o)}async _clearTaskQueue(e,r){if(this._taskMessageQueue){let n=await this._taskMessageQueue.dequeueAll(e,r);for(let o of n)if(o.type==="request"&&td(o.message)){let i=o.message.id,a=this._requestResolvers.get(i);a?(a(new J(Y.InternalError,"Task cancelled or completed")),this._requestResolvers.delete(i)):this._onerror(new Error(`Resolver missing for request ${i} during task ${e} cleanup`))}}}async _waitForTaskUpdate(e,r){let n=this._options?.defaultTaskPollInterval??1e3;try{let o=await this._taskStore?.getTask(e);o?.pollInterval&&(n=o.pollInterval)}catch{}return new Promise((o,i)=>{if(r.aborted){i(new J(Y.InvalidRequest,"Request cancelled"));return}let a=setTimeout(o,n);r.addEventListener("abort",()=>{clearTimeout(a),i(new J(Y.InvalidRequest,"Request cancelled"))},{once:!0})})}requestTaskStore(e,r){let n=this._taskStore;if(!n)throw new Error("No task store configured");return{createTask:async o=>{if(!e)throw new Error("No request provided");return await n.createTask(o,e.id,{method:e.method,params:e.params},r)},getTask:async o=>{let i=await n.getTask(o,r);if(!i)throw new J(Y.InvalidParams,"Failed to retrieve task: Task not found");return i},storeTaskResult:async(o,i,a)=>{await n.storeTaskResult(o,i,a,r);let s=await n.getTask(o,r);if(s){let c=wo.parse({method:"notifications/tasks/status",params:s});await this.notification(c),er(s.status)&&this._cleanupTaskProgressHandler(o)}},getTaskResult:o=>n.getTaskResult(o,r),updateTaskStatus:async(o,i,a)=>{let s=await n.getTask(o,r);if(!s)throw new J(Y.InvalidParams,`Task "${o}" not found - it may have been cleaned up`);if(er(s.status))throw new J(Y.InvalidParams,`Cannot update task "${o}" from terminal status "${s.status}" to "${i}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await n.updateTaskStatus(o,i,a,r);let c=await n.getTask(o,r);if(c){let u=wo.parse({method:"notifications/tasks/status",params:c});await this.notification(u),er(c.status)&&this._cleanupTaskProgressHandler(o)}},listTasks:o=>n.listTasks(o,r)}}};function jg(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Ng(t,e){let r={...t};for(let n in e){let o=n,i=e[o];if(i===void 0)continue;let a=r[o];jg(a)&&jg(i)?r[o]={...a,...i}:r[o]=i}return r}var yy=ai(nf(),1),$y=ai(_y(),1);function wT(){let t=new yy.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return(0,$y.default)(t),t}var ps=class{constructor(e){this._ajv=e??wT()}getValidator(e){let r="$id"in e&&typeof e.$id=="string"?this._ajv.getSchema(e.$id)??this._ajv.compile(e):this._ajv.compile(e);return n=>r(n)?{valid:!0,data:n,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(r.errors)}}};var fs=class{constructor(e){this._server=e}requestStream(e,r,n){return this._server.requestStream(e,r,n)}async getTask(e,r){return this._server.getTask({taskId:e},r)}async getTaskResult(e,r,n){return this._server.getTaskResult({taskId:e},r,n)}async listTasks(e,r){return this._server.listTasks(e?{cursor:e}:void 0,r)}async cancelTask(e,r){return this._server.cancelTask({taskId:e},r)}};function by(t,e,r){if(!t)throw new Error(`${r} does not support task creation (required for ${e})`);switch(e){case"tools/call":if(!t.tools?.call)throw new Error(`${r} does not support task creation for tools/call (required for ${e})`);break;default:break}}function xy(t,e,r){if(!t)throw new Error(`${r} does not support task creation (required for ${e})`);switch(e){case"sampling/createMessage":if(!t.sampling?.createMessage)throw new Error(`${r} does not support task creation for sampling/createMessage (required for ${e})`);break;case"elicitation/create":if(!t.elicitation?.create)throw new Error(`${r} does not support task creation for elicitation/create (required for ${e})`);break;default:break}}var ms=class extends Ta{constructor(e,r){super(r),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(Eo.options.map((n,o)=>[n,o])),this.isMessageIgnored=(n,o)=>{let i=this._loggingLevels.get(o);return i?this.LOG_LEVEL_SEVERITY.get(n)this._oninitialize(n)),this.setNotificationHandler(id,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(fd,async(n,o)=>{let i=o.sessionId||o.requestInfo?.headers["mcp-session-id"]||void 0,{level:a}=n.params,s=Eo.safeParse(a);return s.success&&this._loggingLevels.set(i,s.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new fs(this)}),this._experimental}registerCapabilities(e){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=Ng(this._capabilities,e)}setRequestHandler(e,r){let o=Yi(e)?.method;if(!o)throw new Error("Schema is missing a method literal");let i;if(Br(o)){let s=o;i=s._zod?.def?.value??s.value}else{let s=o;i=s._def?.value??s.value}if(typeof i!="string")throw new Error("Schema method literal must be a string");if(i==="tools/call"){let s=async(c,u)=>{let l=Yt(Io,c);if(!l.success){let g=l.error instanceof Error?l.error.message:String(l.error);throw new J(Y.InvalidParams,`Invalid tools/call request: ${g}`)}let{params:d}=l.data,m=await Promise.resolve(r(c,u));if(d.task){let g=Yt(Qr,m);if(!g.success){let v=g.error instanceof Error?g.error.message:String(g.error);throw new J(Y.InvalidParams,`Invalid task creation result: ${v}`)}return g.data}let f=Yt(Ia,m);if(!f.success){let g=f.error instanceof Error?f.error.message:String(f.error);throw new J(Y.InvalidParams,`Invalid tools/call result: ${g}`)}return f.data};return super.setRequestHandler(e,s)}return super.setRequestHandler(e,r)}assertCapabilityForMethod(e){switch(e){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw new Error(`Client does not support sampling (required for ${e})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw new Error(`Client does not support elicitation (required for ${e})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw new Error(`Client does not support listing roots (required for ${e})`);break;case"ping":break}}assertNotificationCapability(e){switch(e){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${e})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw new Error(`Client does not support URL elicitation (required for ${e})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case"completion/complete":if(!this._capabilities.completions)throw new Error(`Server does not support completions (required for ${e})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${e})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${e})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${e})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Server does not support tasks capability (required for ${e})`);break;case"ping":case"initialize":break}}assertTaskCapability(e){xy(this._clientCapabilities?.tasks?.requests,e,"Client")}assertTaskHandlerCapability(e){this._capabilities&&by(this._capabilities.tasks?.requests,e,"Server")}async _oninitialize(e){let r=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:gg.includes(r)?r:Ql,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},va)}async createMessage(e,r){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let n=e.messages[e.messages.length-1],o=Array.isArray(n.content)?n.content:[n.content],i=o.some(u=>u.type==="tool_result"),a=e.messages.length>1?e.messages[e.messages.length-2]:void 0,s=a?Array.isArray(a.content)?a.content:[a.content]:[],c=s.some(u=>u.type==="tool_use");if(i){if(o.some(u=>u.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!c)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(c){let u=new Set(s.filter(d=>d.type==="tool_use").map(d=>d.id)),l=new Set(o.filter(d=>d.type==="tool_result").map(d=>d.toolUseId));if(u.size!==l.size||![...u].every(d=>l.has(d)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return e.tools?this.request({method:"sampling/createMessage",params:e},hd,r):this.request({method:"sampling/createMessage",params:e},md,r)}async elicitInput(e,r){switch(e.mode??"form"){case"url":{if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support url elicitation.");let o=e;return this.request({method:"elicitation/create",params:o},Ea,r)}case"form":{if(!this._clientCapabilities?.elicitation?.form)throw new Error("Client does not support form elicitation.");let o=e.mode==="form"?e:{...e,mode:"form"},i=await this.request({method:"elicitation/create",params:o},Ea,r);if(i.action==="accept"&&i.content&&o.requestedSchema)try{let s=this._jsonSchemaValidator.getValidator(o.requestedSchema)(i.content);if(!s.valid)throw new J(Y.InvalidParams,`Elicitation response content does not match requested schema: ${s.errorMessage}`)}catch(a){throw a instanceof J?a:new J(Y.InternalError,`Error validating elicitation response: ${a instanceof Error?a.message:String(a)}`)}return i}}}createElicitationCompletionNotifier(e,r){if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:e}},r)}async listRoots(e,r){return this.request({method:"roots/list",params:e},gd,r)}async sendLoggingMessage(e,r){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,r))return this.notification({method:"notifications/message",params:e})}async sendResourceUpdated(e){return this.notification({method:"notifications/resources/updated",params:e})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}};var pf=ai(require("node:process"),1);var hs=class{append(e){this._buffer=this._buffer?Buffer.concat([this._buffer,e]):e}readMessage(){if(!this._buffer)return null;let e=this._buffer.indexOf(` `);if(e===-1)return null;let r=this._buffer.toString("utf8",0,e).replace(/\r$/,"");return this._buffer=this._buffer.subarray(e+1),zT(r)}clear(){this._buffer=void 0}};function zT(t){return Sg.parse(JSON.parse(t))}function ky(t){return JSON.stringify(t)+` -`}var gs=class{constructor(e=pf.default.stdin,r=pf.default.stdout){this._stdin=e,this._stdout=r,this._readBuffer=new hs,this._started=!1,this._ondata=n=>{this._readBuffer.append(n),this.processReadBuffer()},this._onerror=n=>{this.onerror?.(n)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(r=>{let n=ky(e);this._stdout.write(n)?r():this._stdout.once("drain",r)})}};var mf=ai(require("path"),1);var ff={DEFAULT:3e5,HEALTH_CHECK:3e3,POST_SPAWN_WAIT:5e3,PORT_IN_USE_WAIT:3e3,WORKER_STARTUP_WAIT:1e3,PRE_RESTART_SETTLE_DELAY:2e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5};function Sy(t){return process.platform==="win32"?Math.round(t*ff.WINDOWS_MULTIPLIER):t}var wt=require("fs"),vs=require("path"),Iy=require("os");var wy="bugfix,feature,refactor,discovery,decision,change",zy="how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off";var qt=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777",CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,vs.join)((0,Iy.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"true",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"true",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"true",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:wy,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:zy,CLAUDE_MEM_CONTEXT_FULL_COUNT:"5",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){return this.DEFAULTS[e]}static getInt(e){let r=this.get(e);return parseInt(r,10)}static getBool(e){let r=this.get(e);return r==="true"||r===!0}static applyEnvOverrides(e){let r={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(r[n]=process.env[n]);return r}static loadFromFile(e){try{if(!(0,wt.existsSync)(e)){let a=this.getAllDefaults();try{let s=(0,vs.dirname)(e);(0,wt.existsSync)(s)||(0,wt.mkdirSync)(s,{recursive:!0}),(0,wt.writeFileSync)(e,JSON.stringify(a,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(s){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,s)}return this.applyEnvOverrides(a)}let r=(0,wt.readFileSync)(e,"utf-8"),n=JSON.parse(r),o=n;if(n.env&&typeof n.env=="object"){o=n.env;try{(0,wt.writeFileSync)(e,JSON.stringify(o,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(a){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,a)}}let i={...this.DEFAULTS};for(let a of Object.keys(this.DEFAULTS))o[a]!==void 0&&(i[a]=o[a]);return this.applyEnvOverrides(i)}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,r),this.applyEnvOverrides(this.getAllDefaults())}}};var $e=require("path"),Ey=require("os");var Ty=require("url");var TT={};function IT(){return typeof __dirname<"u"?__dirname:(0,$e.dirname)((0,Ty.fileURLToPath)(TT.url))}var ZZ=IT(),Ft=qt.get("CLAUDE_MEM_DATA_DIR"),_s=process.env.CLAUDE_CONFIG_DIR||(0,$e.join)((0,Ey.homedir)(),".claude"),ET=(0,$e.join)(_s,"plugins","marketplaces","thedotmack"),CZ=(0,$e.join)(Ft,"archives"),MZ=(0,$e.join)(Ft,"logs"),LZ=(0,$e.join)(Ft,"trash"),qZ=(0,$e.join)(Ft,"backups"),FZ=(0,$e.join)(Ft,"modes"),VZ=(0,$e.join)(Ft,"settings.json"),JZ=(0,$e.join)(Ft,"claude-mem.db"),KZ=(0,$e.join)(Ft,"vector-db"),WZ=(0,$e.join)(Ft,"observer-sessions"),GZ=(0,$e.join)(_s,"settings.json"),HZ=(0,$e.join)(_s,"commands"),BZ=(0,$e.join)(_s,"CLAUDE.md");var rC=(()=>{let t=process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS;if(t){let e=parseInt(t,10);if(Number.isFinite(e)&&e>=500&&e<=3e5)return e;ve.warn("SYSTEM","Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default",{value:t,min:500,max:3e5})}return Sy(ff.HEALTH_CHECK)})();var ys=null,$s=null;function Py(){if(ys!==null)return ys;let t=mf.default.join(qt.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),e=qt.loadFromFile(t);return ys=parseInt(e.CLAUDE_MEM_WORKER_PORT,10),ys}function Oy(){if($s!==null)return $s;let t=mf.default.join(qt.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return $s=qt.loadFromFile(t).CLAUDE_MEM_WORKER_HOST,$s}var PT="10.0.5";console.log=(...t)=>{ve.error("CONSOLE","Intercepted console output (MCP protocol protection)",void 0,{args:t})};var OT=Py(),jT=Oy(),ii=`http://${jT}:${OT}`,jy={search:"/api/search",timeline:"/api/timeline"};async function Ny(t,e){ve.debug("SYSTEM","\u2192 Worker API",void 0,{endpoint:t,params:e});try{let r=new URLSearchParams;for(let[a,s]of Object.entries(e))s!=null&&r.append(a,String(s));let n=`${ii}${t}?${r}`,o=await fetch(n);if(!o.ok){let a=await o.text();throw new Error(`Worker API error (${o.status}): ${a}`)}let i=await o.json();return ve.debug("SYSTEM","\u2190 Worker API success",void 0,{endpoint:t}),i}catch(r){return ve.error("SYSTEM","\u2190 Worker API error",{endpoint:t},r),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function Dy(t,e){ve.debug("HTTP","Worker API request (POST)",void 0,{endpoint:t});try{let r=`${ii}${t}`,n=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!n.ok){let i=await n.text();throw new Error(`Worker API error (${n.status}): ${i}`)}let o=await n.json();return ve.debug("HTTP","Worker API success (POST)",void 0,{endpoint:t}),{content:[{type:"text",text:JSON.stringify(o,null,2)}]}}catch(r){return ve.error("HTTP","Worker API error (POST)",{endpoint:t},r),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function NT(){try{return(await fetch(`${ii}/api/health`)).ok}catch(t){return ve.debug("SYSTEM","Worker health check failed",{},t),!1}}var Ry=[{name:"__IMPORTANT",description:`3-LAYER WORKFLOW (ALWAYS FOLLOW): +`}var gs=class{constructor(e=pf.default.stdin,r=pf.default.stdout){this._stdin=e,this._stdout=r,this._readBuffer=new hs,this._started=!1,this._ondata=n=>{this._readBuffer.append(n),this.processReadBuffer()},this._onerror=n=>{this.onerror?.(n)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(r=>{let n=ky(e);this._stdout.write(n)?r():this._stdout.once("drain",r)})}};var mf=ai(require("path"),1);var ff={DEFAULT:3e5,HEALTH_CHECK:3e3,POST_SPAWN_WAIT:5e3,PORT_IN_USE_WAIT:3e3,WORKER_STARTUP_WAIT:1e3,PRE_RESTART_SETTLE_DELAY:2e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5};function Sy(t){return process.platform==="win32"?Math.round(t*ff.WINDOWS_MULTIPLIER):t}var wt=require("fs"),vs=require("path"),Iy=require("os");var wy="bugfix,feature,refactor,discovery,decision,change",zy="how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off";var qt=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777",CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,vs.join)((0,Iy.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"true",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"true",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"true",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:wy,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:zy,CLAUDE_MEM_CONTEXT_FULL_COUNT:"5",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){return this.DEFAULTS[e]}static getInt(e){let r=this.get(e);return parseInt(r,10)}static getBool(e){let r=this.get(e);return r==="true"||r===!0}static applyEnvOverrides(e){let r={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(r[n]=process.env[n]);return r}static loadFromFile(e){try{if(!(0,wt.existsSync)(e)){let a=this.getAllDefaults();try{let s=(0,vs.dirname)(e);(0,wt.existsSync)(s)||(0,wt.mkdirSync)(s,{recursive:!0}),(0,wt.writeFileSync)(e,JSON.stringify(a,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(s){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,s)}return this.applyEnvOverrides(a)}let r=(0,wt.readFileSync)(e,"utf-8"),n=JSON.parse(r),o=n;if(n.env&&typeof n.env=="object"){o=n.env;try{(0,wt.writeFileSync)(e,JSON.stringify(o,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(a){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,a)}}let i={...this.DEFAULTS};for(let a of Object.keys(this.DEFAULTS))o[a]!==void 0&&(i[a]=o[a]);return this.applyEnvOverrides(i)}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,r),this.applyEnvOverrides(this.getAllDefaults())}}};var $e=require("path"),Ey=require("os");var Ty=require("url");var TT={};function IT(){return typeof __dirname<"u"?__dirname:(0,$e.dirname)((0,Ty.fileURLToPath)(TT.url))}var ZZ=IT(),Ft=qt.get("CLAUDE_MEM_DATA_DIR"),_s=process.env.CLAUDE_CONFIG_DIR||(0,$e.join)((0,Ey.homedir)(),".claude"),ET=(0,$e.join)(_s,"plugins","marketplaces","thedotmack"),CZ=(0,$e.join)(Ft,"archives"),MZ=(0,$e.join)(Ft,"logs"),LZ=(0,$e.join)(Ft,"trash"),qZ=(0,$e.join)(Ft,"backups"),FZ=(0,$e.join)(Ft,"modes"),VZ=(0,$e.join)(Ft,"settings.json"),JZ=(0,$e.join)(Ft,"claude-mem.db"),KZ=(0,$e.join)(Ft,"vector-db"),WZ=(0,$e.join)(Ft,"observer-sessions"),GZ=(0,$e.join)(_s,"settings.json"),HZ=(0,$e.join)(_s,"commands"),BZ=(0,$e.join)(_s,"CLAUDE.md");var rC=(()=>{let t=process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS;if(t){let e=parseInt(t,10);if(Number.isFinite(e)&&e>=500&&e<=3e5)return e;ve.warn("SYSTEM","Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default",{value:t,min:500,max:3e5})}return Sy(ff.HEALTH_CHECK)})();var ys=null,$s=null;function Py(){if(ys!==null)return ys;let t=mf.default.join(qt.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),e=qt.loadFromFile(t);return ys=parseInt(e.CLAUDE_MEM_WORKER_PORT,10),ys}function Oy(){if($s!==null)return $s;let t=mf.default.join(qt.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return $s=qt.loadFromFile(t).CLAUDE_MEM_WORKER_HOST,$s}var PT="10.0.6";console.log=(...t)=>{ve.error("CONSOLE","Intercepted console output (MCP protocol protection)",void 0,{args:t})};var OT=Py(),jT=Oy(),ii=`http://${jT}:${OT}`,jy={search:"/api/search",timeline:"/api/timeline"};async function Ny(t,e){ve.debug("SYSTEM","\u2192 Worker API",void 0,{endpoint:t,params:e});try{let r=new URLSearchParams;for(let[a,s]of Object.entries(e))s!=null&&r.append(a,String(s));let n=`${ii}${t}?${r}`,o=await fetch(n);if(!o.ok){let a=await o.text();throw new Error(`Worker API error (${o.status}): ${a}`)}let i=await o.json();return ve.debug("SYSTEM","\u2190 Worker API success",void 0,{endpoint:t}),i}catch(r){return ve.error("SYSTEM","\u2190 Worker API error",{endpoint:t},r),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function Dy(t,e){ve.debug("HTTP","Worker API request (POST)",void 0,{endpoint:t});try{let r=`${ii}${t}`,n=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!n.ok){let i=await n.text();throw new Error(`Worker API error (${n.status}): ${i}`)}let o=await n.json();return ve.debug("HTTP","Worker API success (POST)",void 0,{endpoint:t}),{content:[{type:"text",text:JSON.stringify(o,null,2)}]}}catch(r){return ve.error("HTTP","Worker API error (POST)",{endpoint:t},r),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function NT(){try{return(await fetch(`${ii}/api/health`)).ok}catch(t){return ve.debug("SYSTEM","Worker health check failed",{},t),!1}}var Ry=[{name:"__IMPORTANT",description:`3-LAYER WORKFLOW (ALWAYS FOLLOW): 1. search(query) \u2192 Get index with IDs (~50-100 tokens/result) 2. timeline(anchor=ID) \u2192 Get context around interesting results 3. get_observations([IDs]) \u2192 Fetch full details ONLY for filtered IDs diff --git a/plugin/scripts/worker-service.cjs b/plugin/scripts/worker-service.cjs index 8d3f3e1c..45395898 100755 --- a/plugin/scripts/worker-service.cjs +++ b/plugin/scripts/worker-service.cjs @@ -875,7 +875,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs. `}var nW=Nl.default.platform==="win32"?["APPDATA","HOMEDRIVE","HOMEPATH","LOCALAPPDATA","PATH","PROCESSOR_ARCHITECTURE","SYSTEMDRIVE","SYSTEMROOT","TEMP","USERNAME","USERPROFILE","PROGRAMFILES"]:["HOME","LOGNAME","PATH","SHELL","TERM","USER"];function iW(){let t={};for(let e of nW){let r=Nl.default.env[e];r!==void 0&&(r.startsWith("()")||(t[e]=r))}return t}var Uo=class{constructor(e){this._readBuffer=new ym,this._stderrStream=null,this._serverParams=e,(e.stderr==="pipe"||e.stderr==="overlapped")&&(this._stderrStream=new hC.PassThrough)}async start(){if(this._process)throw new Error("StdioClientTransport already started! If using Client class, note that connect() calls start() automatically.");return new Promise((e,r)=>{this._process=(0,mC.default)(this._serverParams.command,this._serverParams.args??[],{env:{...iW(),...this._serverParams.env},stdio:["pipe","pipe",this._serverParams.stderr??"inherit"],shell:!1,windowsHide:Nl.default.platform==="win32"&&sW(),cwd:this._serverParams.cwd}),this._process.on("error",n=>{r(n),this.onerror?.(n)}),this._process.on("spawn",()=>{e()}),this._process.on("close",n=>{this._process=void 0,this.onclose?.()}),this._process.stdin?.on("error",n=>{this.onerror?.(n)}),this._process.stdout?.on("data",n=>{this._readBuffer.append(n),this.processReadBuffer()}),this._process.stdout?.on("error",n=>{this.onerror?.(n)}),this._stderrStream&&this._process.stderr&&this._process.stderr.pipe(this._stderrStream)})}get stderr(){return this._stderrStream?this._stderrStream:this._process?.stderr??null}get pid(){return this._process?.pid??null}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){if(this._process){let e=this._process;this._process=void 0;let r=new Promise(n=>{e.once("close",()=>{n()})});try{e.stdin?.end()}catch{}if(await Promise.race([r,new Promise(n=>setTimeout(n,2e3).unref())]),e.exitCode===null){try{e.kill("SIGTERM")}catch{}await Promise.race([r,new Promise(n=>setTimeout(n,2e3).unref())])}if(e.exitCode===null)try{e.kill("SIGKILL")}catch{}}this._readBuffer.clear()}send(e){return new Promise(r=>{if(!this._process?.stdin)throw new Error("Not connected");let n=fC(e);this._process.stdin.write(n)?r():this._process.stdin.once("drain",r)})}};function sW(){return"type"in Nl.default}Hr();On();lr();var Lo=require("fs"),y0=require("path"),jC=require("os");_e();var EW=(0,y0.join)((0,jC.homedir)(),".claude-mem"),v0=(0,y0.join)(EW,".env"),$W=["ANTHROPIC_API_KEY"];function kW(t){let e={};for(let r of t.split(` `)){let n=r.trim();if(!n||n.startsWith("#"))continue;let i=n.indexOf("=");if(i===-1)continue;let s=n.slice(0,i).trim(),a=n.slice(i+1).trim();(a.startsWith('"')&&a.endsWith('"')||a.startsWith("'")&&a.endsWith("'"))&&(a=a.slice(1,-1)),s&&(e[s]=a)}return e}function _0(){if(!(0,Lo.existsSync)(v0))return{};try{let t=(0,Lo.readFileSync)(v0,"utf-8"),e=kW(t),r={};return e.ANTHROPIC_API_KEY&&(r.ANTHROPIC_API_KEY=e.ANTHROPIC_API_KEY),e.GEMINI_API_KEY&&(r.GEMINI_API_KEY=e.GEMINI_API_KEY),e.OPENROUTER_API_KEY&&(r.OPENROUTER_API_KEY=e.OPENROUTER_API_KEY),r}catch(t){return $.warn("ENV","Failed to load .env file",{path:v0},t),{}}}function MC(t=!0){let e={};for(let[r,n]of Object.entries(process.env))n!==void 0&&!$W.includes(r)&&(e[r]=n);if(e.CLAUDE_CODE_ENTRYPOINT="sdk-ts",t){let r=_0();r.ANTHROPIC_API_KEY&&(e.ANTHROPIC_API_KEY=r.ANTHROPIC_API_KEY),r.GEMINI_API_KEY&&(e.GEMINI_API_KEY=r.GEMINI_API_KEY),r.OPENROUTER_API_KEY&&(e.OPENROUTER_API_KEY=r.OPENROUTER_API_KEY),!e.ANTHROPIC_API_KEY&&process.env.CLAUDE_CODE_OAUTH_TOKEN&&(e.CLAUDE_CODE_OAUTH_TOKEN=process.env.CLAUDE_CODE_OAUTH_TOKEN)}return e}function qo(t){return _0()[t]}function TW(){return!!_0().ANTHROPIC_API_KEY}function $m(){return TW()?"API key (from ~/.claude-mem/.env)":process.env.CLAUDE_CODE_OAUTH_TOKEN?"Claude Code OAuth token (from parent process)":"Claude Code CLI (subscription billing)"}_e();var S0=nt(require("path"),1),zC=require("os"),Rn=require("fs"),ws=require("child_process"),UC=require("util");_e();On();var km=(0,UC.promisify)(ws.exec),LC=S0.default.join((0,zC.homedir)(),".claude-mem"),pa=S0.default.join(LC,"worker.pid"),DC=["mcp-server.cjs","worker-service.cjs","chroma-mcp"],b0=30;function qC(t){(0,Rn.mkdirSync)(LC,{recursive:!0}),(0,Rn.writeFileSync)(pa,JSON.stringify(t,null,2))}function x0(){if(!(0,Rn.existsSync)(pa))return null;try{return JSON.parse((0,Rn.readFileSync)(pa,"utf-8"))}catch(t){return $.warn("SYSTEM","Failed to parse PID file",{path:pa},t),null}}function Xn(){if((0,Rn.existsSync)(pa))try{(0,Rn.unlinkSync)(pa)}catch(t){$.warn("SYSTEM","Failed to remove PID file",{path:pa},t)}}function fa(t){return process.platform==="win32"?Math.round(t*2):t}async function FC(t){if(process.platform!=="win32")return[];if(!Number.isInteger(t)||t<=0)return $.warn("SYSTEM","Invalid parent PID for child process enumeration",{parentPid:t}),[];try{let e=`powershell -NoProfile -NonInteractive -Command "Get-Process | Where-Object { $_.ParentProcessId -eq ${t} } | Select-Object -ExpandProperty Id"`,{stdout:r}=await km(e,{timeout:Zr.POWERSHELL_COMMAND});return r.split(` `).map(n=>n.trim()).filter(n=>n.length>0&&/^\d+$/.test(n)).map(n=>parseInt(n,10)).filter(n=>n>0)}catch(e){return $.error("SYSTEM","Failed to enumerate child processes",{parentPid:t},e),[]}}async function ZC(t){if(!Number.isInteger(t)||t<=0){$.warn("SYSTEM","Invalid PID for force kill",{pid:t});return}try{process.platform==="win32"?await km(`taskkill /PID ${t} /T /F`,{timeout:Zr.POWERSHELL_COMMAND}):process.kill(t,"SIGKILL"),$.info("SYSTEM","Killed process",{pid:t})}catch(e){$.debug("SYSTEM","Process already exited during force kill",{pid:t},e)}}async function HC(t,e){let r=Date.now();for(;Date.now()-r{try{return process.kill(i,0),!0}catch{return!1}});if(n.length===0){$.info("SYSTEM","All child processes exited");return}$.debug("SYSTEM","Waiting for processes to exit",{stillAlive:n}),await new Promise(i=>setTimeout(i,100))}$.warn("SYSTEM","Timeout waiting for child processes to exit")}function IW(t){if(!t||t.trim()==="")return-1;let e=t.trim(),r=0,n=e.match(/^(\d+)-(\d+):(\d+):(\d+)$/);if(n)return r=parseInt(n[1],10)*24*60+parseInt(n[2],10)*60+parseInt(n[3],10),r;let i=e.match(/^(\d+):(\d+):(\d+)$/);if(i)return r=parseInt(i[1],10)*60+parseInt(i[2],10),r;let s=e.match(/^(\d+):(\d+)$/);return s?parseInt(s[1],10):-1}async function BC(){let t=process.platform==="win32",e=process.pid,r=[];try{if(t){let i=`powershell -NoProfile -NonInteractive -Command "Get-CimInstance Win32_Process | Where-Object { (${DC.map(u=>`$_.CommandLine -like '*${u}*'`).join(" -or ")}) -and $_.ProcessId -ne ${e} } | Select-Object ProcessId, CreationDate | ConvertTo-Json"`,{stdout:s}=await km(i,{timeout:Zr.POWERSHELL_COMMAND});if(!s.trim()||s.trim()==="null"){$.debug("SYSTEM","No orphaned claude-mem processes found (Windows)");return}let a=JSON.parse(s),o=Array.isArray(a)?a:[a],c=Date.now();for(let u of o){let l=u.ProcessId;if(!Number.isInteger(l)||l<=0||l===e)continue;let d=u.CreationDate?.match(/\/Date\((\d+)\)\//);if(d){let p=parseInt(d[1],10),f=(c-p)/(1e3*60);f>=b0&&(r.push(l),$.debug("SYSTEM","Found orphaned process",{pid:l,ageMinutes:Math.round(f)}))}}}else{let n=DC.join("|"),{stdout:i}=await km(`ps -eo pid,etime,command | grep -E "${n}" | grep -v grep || true`);if(!i.trim()){$.debug("SYSTEM","No orphaned claude-mem processes found (Unix)");return}let s=i.trim().split(` -`);for(let a of s){let o=a.trim().match(/^(\d+)\s+(\S+)\s+(.*)$/);if(!o)continue;let c=parseInt(o[1],10),u=o[2];if(!Number.isInteger(c)||c<=0||c===e)continue;let l=IW(u);l>=b0&&(r.push(c),$.debug("SYSTEM","Found orphaned process",{pid:c,ageMinutes:l,command:o[3].substring(0,80)}))}}}catch(n){$.error("SYSTEM","Failed to enumerate orphaned processes",{},n);return}if(r.length!==0){if($.info("SYSTEM","Cleaning up orphaned claude-mem processes",{platform:t?"Windows":"Unix",count:r.length,pids:r,maxAgeMinutes:b0}),t)for(let n of r){if(!Number.isInteger(n)||n<=0){$.warn("SYSTEM","Skipping invalid PID",{pid:n});continue}try{(0,ws.execSync)(`taskkill /PID ${n} /T /F`,{timeout:Zr.POWERSHELL_COMMAND,stdio:"ignore"})}catch(i){$.debug("SYSTEM","Failed to kill process, may have already exited",{pid:n},i)}}else for(let n of r)try{process.kill(n,"SIGKILL")}catch(i){$.debug("SYSTEM","Process already exited",{pid:n},i)}$.info("SYSTEM","Orphaned processes cleaned up",{count:r.length})}}function w0(t,e,r={}){let n=process.platform==="win32",i={...process.env,CLAUDE_MEM_WORKER_PORT:String(e),...r};if(n){let u=`Start-Process -FilePath '${process.execPath}' -ArgumentList '${t}','--daemon' -WindowStyle Hidden`;try{return(0,ws.execSync)(`powershell -NoProfile -Command "${u}"`,{stdio:"ignore",windowsHide:!0,env:i}),0}catch{return}}let s="/usr/bin/setsid";if((0,Rn.existsSync)(s)){let o=(0,ws.spawn)(s,[process.execPath,t,"--daemon"],{detached:!0,stdio:"ignore",env:i});return o.pid===void 0?void 0:(o.unref(),o.pid)}let a=(0,ws.spawn)(process.execPath,[t,"--daemon"],{detached:!0,stdio:"ignore",env:i});if(a.pid!==void 0)return a.unref(),a.pid}function OW(t){if(t===0)return!0;if(!Number.isInteger(t)||t<0)return!1;try{return process.kill(t,0),!0}catch(e){return e.code==="EPERM"}}function VC(){let t=x0();t&&(OW(t.pid)||($.info("SYSTEM","Removing stale PID file (worker process is dead)",{pid:t.pid,port:t.port,startedAt:t.startedAt}),Xn()))}function GC(t,e){return async r=>{if(e.value){$.warn("SYSTEM",`Received ${r} but shutdown already in progress`);return}e.value=!0,$.info("SYSTEM",`Received ${r}, shutting down...`);try{await t(),process.exit(0)}catch(n){$.error("SYSTEM","Error during shutdown",{},n),process.exit(0)}}}var WC=nt(require("path"),1),KC=require("fs");_e();tr();async function zl(t){try{return(await fetch(`http://127.0.0.1:${t}/api/health`)).ok}catch{return!1}}async function Ul(t,e=3e4){let r=Date.now();for(;Date.now()-rsetTimeout(n,500))}return!1}async function Tm(t,e=1e4){let r=Date.now();for(;Date.now()-rsetTimeout(n,500))}return!1}async function Im(t){try{let e=await fetch(`http://127.0.0.1:${t}/api/admin/shutdown`,{method:"POST"});return e.ok?!0:($.warn("SYSTEM","Shutdown request returned error",{port:t,status:e.status}),!1)}catch(e){return e instanceof Error&&e.message?.includes("ECONNREFUSED")?($.debug("SYSTEM","Worker already stopped",{port:t},e),!1):($.error("SYSTEM","Shutdown request failed unexpectedly",{port:t},e),!1)}}function RW(){let t=WC.default.join(_i,"package.json");return JSON.parse((0,KC.readFileSync)(t,"utf-8")).version}async function PW(t){try{let e=await fetch(`http://127.0.0.1:${t}/api/version`);return e.ok?(await e.json()).version:null}catch{return $.debug("SYSTEM","Could not fetch worker version",{port:t}),null}}async function JC(t){let e=RW(),r=await PW(t);return r?{matches:e===r,pluginVersion:e,workerVersion:r}:{matches:!0,pluginVersion:e,workerVersion:r}}_e();async function XC(t){$.info("SYSTEM","Shutdown initiated"),Xn();let e=await FC(process.pid);if($.info("SYSTEM","Found child processes",{count:e.length,pids:e}),t.server&&(await CW(t.server),$.info("SYSTEM","HTTP server closed")),await t.sessionManager.shutdownAll(),t.mcpClient&&(await t.mcpClient.close(),$.info("SYSTEM","MCP client closed")),t.dbManager&&await t.dbManager.close(),e.length>0){$.info("SYSTEM","Force killing remaining children");for(let r of e)await ZC(r);await HC(e,5e3)}$.info("SYSTEM","Worker shutdown complete")}async function CW(t){t.closeAllConnections(),process.platform==="win32"&&await new Promise(e=>setTimeout(e,500)),await new Promise((e,r)=>{t.close(n=>n?r(n):e())}),process.platform==="win32"&&(await new Promise(e=>setTimeout(e,500)),$.info("SYSTEM","Waited for Windows port cleanup"))}var c2=nt(Mh(),1),OE=nt(require("fs"),1),RE=nt(require("path"),1);_e();var kE=nt(Mh(),1),r2=nt(t2(),1),n2=nt(require("path"),1);tr();_e();function TE(t){let e=[];e.push(kE.default.json({limit:"50mb"})),e.push((0,r2.default)({origin:(i,s)=>{!i||i.startsWith("http://localhost:")||i.startsWith("http://127.0.0.1:")?s(null,!0):s(new Error("CORS not allowed"))},credentials:!1})),e.push((i,s,a)=>{let c=[".html",".js",".css",".svg",".png",".jpg",".jpeg",".webp",".woff",".woff2",".ttf",".eot"].some(h=>i.path.endsWith(h)),u=i.path==="/api/logs";if(i.path.startsWith("/health")||i.path==="/"||c||u)return a();let l=Date.now(),d=`${i.method}-${Date.now()}`,p=t(i.method,i.path,i.body);$.info("HTTP",`\u2192 ${i.method} ${i.path}`,{requestId:d},p);let f=s.send.bind(s);s.send=function(h){let y=Date.now()-l;return $.info("HTTP",`\u2190 ${s.statusCode} ${i.path}`,{requestId:d,duration:`${y}ms`}),f(h)},a()});let r=en(),n=n2.default.join(r,"plugin","ui");return e.push(kE.default.static(n)),e}function Dh(t,e,r){let n=t.ip||t.connection.remoteAddress||"";if(!(n==="127.0.0.1"||n==="::1"||n==="::ffff:127.0.0.1"||n==="localhost")){$.warn("SECURITY","Admin endpoint access denied - not localhost",{endpoint:t.path,clientIp:n,method:t.method}),e.status(403).json({error:"Forbidden",message:"Admin endpoints are only accessible from localhost"});return}r()}function IE(t,e,r){if(!r||Object.keys(r).length===0||e.includes("/init"))return"";if(e.includes("/observations")){let n=r.tool_name||"?",i=r.tool_input;return`tool=${$.formatTool(n,i)}`}return e.includes("/summarize")?"requesting summary":""}_e();var mc=class extends Error{constructor(r,n=500,i,s){super(r);this.statusCode=n;this.code=i;this.details=s;this.name="AppError"}};function i2(t,e,r,n){let i={error:t,message:e};return r&&(i.code=r),n&&(i.details=n),i}var s2=(t,e,r,n)=>{let i=t instanceof mc?t.statusCode:500;$.error("HTTP",`Error handling ${e.method} ${e.path}`,{statusCode:i,error:t.message,code:t instanceof mc?t.code:void 0},t);let s=i2(t.name||"Error",t.message,t instanceof mc?t.code:void 0,t instanceof mc?t.details:void 0);r.status(i).json(s)};function a2(t,e){e.status(404).json(i2("NotFound",`Cannot ${t.method} ${t.path}`))}var o2="10.0.5",zh=class{app;server=null;options;startTime=Date.now();constructor(e){this.options=e,this.app=(0,c2.default)(),this.setupMiddleware(),this.setupCoreRoutes()}getHttpServer(){return this.server}async listen(e,r){return new Promise((n,i)=>{this.server=this.app.listen(e,r,()=>{$.info("SYSTEM","HTTP server started",{host:r,port:e,pid:process.pid}),n()}),this.server.on("error",i)})}async close(){this.server&&(this.server.closeAllConnections(),process.platform==="win32"&&await new Promise(e=>setTimeout(e,500)),await new Promise((e,r)=>{this.server.close(n=>n?r(n):e())}),process.platform==="win32"&&await new Promise(e=>setTimeout(e,500)),this.server=null,$.info("SYSTEM","HTTP server closed"))}registerRoutes(e){e.setupRoutes(this.app)}finalizeRoutes(){this.app.use(a2),this.app.use(s2)}setupMiddleware(){TE(IE).forEach(r=>this.app.use(r))}setupCoreRoutes(){this.app.get("/api/health",(e,r)=>{r.status(200).json({status:"ok",version:o2,workerPath:this.options.workerPath,uptime:Date.now()-this.startTime,managed:process.env.CLAUDE_MEM_MANAGED==="true",hasIpc:typeof process.send=="function",platform:process.platform,pid:process.pid,initialized:this.options.getInitializationComplete(),mcpReady:this.options.getMcpReady(),ai:this.options.getAiStatus()})}),this.app.get("/api/readiness",(e,r)=>{this.options.getInitializationComplete()?r.status(200).json({status:"ready",mcpReady:this.options.getMcpReady()}):r.status(503).json({status:"initializing",message:"Worker is still initializing, please retry"})}),this.app.get("/api/version",(e,r)=>{r.status(200).json({version:o2})}),this.app.get("/api/instructions",async(e,r)=>{let n=e.query.topic||"all",i=e.query.operation;try{let s;if(i){let a=RE.default.join(__dirname,"../skills/mem-search/operations",`${i}.md`);s=await OE.promises.readFile(a,"utf-8")}else{let a=RE.default.join(__dirname,"../skills/mem-search/SKILL.md"),o=await OE.promises.readFile(a,"utf-8");s=this.extractInstructionSection(o,n)}r.json({content:[{type:"text",text:s}]})}catch{r.status(404).json({error:"Instruction not found"})}}),this.app.post("/api/admin/restart",Dh,async(e,r)=>{r.json({status:"restarting"}),process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?($.info("SYSTEM","Sending restart request to wrapper"),process.send({type:"restart"})):setTimeout(async()=>{await this.options.onRestart()},100)}),this.app.post("/api/admin/shutdown",Dh,async(e,r)=>{r.json({status:"shutting_down"}),process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?($.info("SYSTEM","Sending shutdown request to wrapper"),process.send({type:"shutdown"})):setTimeout(async()=>{await this.options.onShutdown()},100)})}extractInstructionSection(e,r){let n={workflow:this.extractBetween(e,"## The Workflow","## Search Parameters"),search_params:this.extractBetween(e,"## Search Parameters","## Examples"),examples:this.extractBetween(e,"## Examples","## Why This Workflow"),all:e};return n[r]||n.all}extractBetween(e,r,n){let i=e.indexOf(r),s=e.indexOf(n);return i===-1?e:s===-1?e.substring(i):e.substring(i,s).trim()}};var st=nt(require("path"),1),xd=require("os"),Ut=require("fs"),d2=require("child_process"),p2=require("util");_e();Hr();tr();var jn=require("fs"),Sd=require("path");_e();function u2(t){try{return(0,jn.existsSync)(t)?JSON.parse((0,jn.readFileSync)(t,"utf-8")):{}}catch(e){return $.error("CONFIG","Failed to read Cursor registry, using empty registry",{file:t,error:e instanceof Error?e.message:String(e)}),{}}}function l2(t,e){let r=(0,Sd.join)(t,"..");(0,jn.mkdirSync)(r,{recursive:!0}),(0,jn.writeFileSync)(t,JSON.stringify(e,null,2))}function PE(t,e){let r=(0,Sd.join)(t,".cursor","rules"),n=(0,Sd.join)(r,"claude-mem-context.mdc"),i=`${n}.tmp`;(0,jn.mkdirSync)(r,{recursive:!0});let s=`--- +`);for(let a of s){let o=a.trim().match(/^(\d+)\s+(\S+)\s+(.*)$/);if(!o)continue;let c=parseInt(o[1],10),u=o[2];if(!Number.isInteger(c)||c<=0||c===e)continue;let l=IW(u);l>=b0&&(r.push(c),$.debug("SYSTEM","Found orphaned process",{pid:c,ageMinutes:l,command:o[3].substring(0,80)}))}}}catch(n){$.error("SYSTEM","Failed to enumerate orphaned processes",{},n);return}if(r.length!==0){if($.info("SYSTEM","Cleaning up orphaned claude-mem processes",{platform:t?"Windows":"Unix",count:r.length,pids:r,maxAgeMinutes:b0}),t)for(let n of r){if(!Number.isInteger(n)||n<=0){$.warn("SYSTEM","Skipping invalid PID",{pid:n});continue}try{(0,ws.execSync)(`taskkill /PID ${n} /T /F`,{timeout:Zr.POWERSHELL_COMMAND,stdio:"ignore"})}catch(i){$.debug("SYSTEM","Failed to kill process, may have already exited",{pid:n},i)}}else for(let n of r)try{process.kill(n,"SIGKILL")}catch(i){$.debug("SYSTEM","Process already exited",{pid:n},i)}$.info("SYSTEM","Orphaned processes cleaned up",{count:r.length})}}function w0(t,e,r={}){let n=process.platform==="win32",i={...process.env,CLAUDE_MEM_WORKER_PORT:String(e),...r};if(n){let u=`Start-Process -FilePath '${process.execPath}' -ArgumentList '${t}','--daemon' -WindowStyle Hidden`;try{return(0,ws.execSync)(`powershell -NoProfile -Command "${u}"`,{stdio:"ignore",windowsHide:!0,env:i}),0}catch{return}}let s="/usr/bin/setsid";if((0,Rn.existsSync)(s)){let o=(0,ws.spawn)(s,[process.execPath,t,"--daemon"],{detached:!0,stdio:"ignore",env:i});return o.pid===void 0?void 0:(o.unref(),o.pid)}let a=(0,ws.spawn)(process.execPath,[t,"--daemon"],{detached:!0,stdio:"ignore",env:i});if(a.pid!==void 0)return a.unref(),a.pid}function OW(t){if(t===0)return!0;if(!Number.isInteger(t)||t<0)return!1;try{return process.kill(t,0),!0}catch(e){return e.code==="EPERM"}}function VC(){let t=x0();t&&(OW(t.pid)||($.info("SYSTEM","Removing stale PID file (worker process is dead)",{pid:t.pid,port:t.port,startedAt:t.startedAt}),Xn()))}function GC(t,e){return async r=>{if(e.value){$.warn("SYSTEM",`Received ${r} but shutdown already in progress`);return}e.value=!0,$.info("SYSTEM",`Received ${r}, shutting down...`);try{await t(),process.exit(0)}catch(n){$.error("SYSTEM","Error during shutdown",{},n),process.exit(0)}}}var WC=nt(require("path"),1),KC=require("fs");_e();tr();async function zl(t){try{return(await fetch(`http://127.0.0.1:${t}/api/health`)).ok}catch{return!1}}async function Ul(t,e=3e4){let r=Date.now();for(;Date.now()-rsetTimeout(n,500))}return!1}async function Tm(t,e=1e4){let r=Date.now();for(;Date.now()-rsetTimeout(n,500))}return!1}async function Im(t){try{let e=await fetch(`http://127.0.0.1:${t}/api/admin/shutdown`,{method:"POST"});return e.ok?!0:($.warn("SYSTEM","Shutdown request returned error",{port:t,status:e.status}),!1)}catch(e){return e instanceof Error&&e.message?.includes("ECONNREFUSED")?($.debug("SYSTEM","Worker already stopped",{port:t},e),!1):($.error("SYSTEM","Shutdown request failed unexpectedly",{port:t},e),!1)}}function RW(){let t=WC.default.join(_i,"package.json");return JSON.parse((0,KC.readFileSync)(t,"utf-8")).version}async function PW(t){try{let e=await fetch(`http://127.0.0.1:${t}/api/version`);return e.ok?(await e.json()).version:null}catch{return $.debug("SYSTEM","Could not fetch worker version",{port:t}),null}}async function JC(t){let e=RW(),r=await PW(t);return r?{matches:e===r,pluginVersion:e,workerVersion:r}:{matches:!0,pluginVersion:e,workerVersion:r}}_e();async function XC(t){$.info("SYSTEM","Shutdown initiated"),Xn();let e=await FC(process.pid);if($.info("SYSTEM","Found child processes",{count:e.length,pids:e}),t.server&&(await CW(t.server),$.info("SYSTEM","HTTP server closed")),await t.sessionManager.shutdownAll(),t.mcpClient&&(await t.mcpClient.close(),$.info("SYSTEM","MCP client closed")),t.dbManager&&await t.dbManager.close(),e.length>0){$.info("SYSTEM","Force killing remaining children");for(let r of e)await ZC(r);await HC(e,5e3)}$.info("SYSTEM","Worker shutdown complete")}async function CW(t){t.closeAllConnections(),process.platform==="win32"&&await new Promise(e=>setTimeout(e,500)),await new Promise((e,r)=>{t.close(n=>n?r(n):e())}),process.platform==="win32"&&(await new Promise(e=>setTimeout(e,500)),$.info("SYSTEM","Waited for Windows port cleanup"))}var c2=nt(Mh(),1),OE=nt(require("fs"),1),RE=nt(require("path"),1);_e();var kE=nt(Mh(),1),r2=nt(t2(),1),n2=nt(require("path"),1);tr();_e();function TE(t){let e=[];e.push(kE.default.json({limit:"50mb"})),e.push((0,r2.default)({origin:(i,s)=>{!i||i.startsWith("http://localhost:")||i.startsWith("http://127.0.0.1:")?s(null,!0):s(new Error("CORS not allowed"))},credentials:!1})),e.push((i,s,a)=>{let c=[".html",".js",".css",".svg",".png",".jpg",".jpeg",".webp",".woff",".woff2",".ttf",".eot"].some(h=>i.path.endsWith(h)),u=i.path==="/api/logs";if(i.path.startsWith("/health")||i.path==="/"||c||u)return a();let l=Date.now(),d=`${i.method}-${Date.now()}`,p=t(i.method,i.path,i.body);$.info("HTTP",`\u2192 ${i.method} ${i.path}`,{requestId:d},p);let f=s.send.bind(s);s.send=function(h){let y=Date.now()-l;return $.info("HTTP",`\u2190 ${s.statusCode} ${i.path}`,{requestId:d,duration:`${y}ms`}),f(h)},a()});let r=en(),n=n2.default.join(r,"plugin","ui");return e.push(kE.default.static(n)),e}function Dh(t,e,r){let n=t.ip||t.connection.remoteAddress||"";if(!(n==="127.0.0.1"||n==="::1"||n==="::ffff:127.0.0.1"||n==="localhost")){$.warn("SECURITY","Admin endpoint access denied - not localhost",{endpoint:t.path,clientIp:n,method:t.method}),e.status(403).json({error:"Forbidden",message:"Admin endpoints are only accessible from localhost"});return}r()}function IE(t,e,r){if(!r||Object.keys(r).length===0||e.includes("/init"))return"";if(e.includes("/observations")){let n=r.tool_name||"?",i=r.tool_input;return`tool=${$.formatTool(n,i)}`}return e.includes("/summarize")?"requesting summary":""}_e();var mc=class extends Error{constructor(r,n=500,i,s){super(r);this.statusCode=n;this.code=i;this.details=s;this.name="AppError"}};function i2(t,e,r,n){let i={error:t,message:e};return r&&(i.code=r),n&&(i.details=n),i}var s2=(t,e,r,n)=>{let i=t instanceof mc?t.statusCode:500;$.error("HTTP",`Error handling ${e.method} ${e.path}`,{statusCode:i,error:t.message,code:t instanceof mc?t.code:void 0},t);let s=i2(t.name||"Error",t.message,t instanceof mc?t.code:void 0,t instanceof mc?t.details:void 0);r.status(i).json(s)};function a2(t,e){e.status(404).json(i2("NotFound",`Cannot ${t.method} ${t.path}`))}var o2="10.0.6",zh=class{app;server=null;options;startTime=Date.now();constructor(e){this.options=e,this.app=(0,c2.default)(),this.setupMiddleware(),this.setupCoreRoutes()}getHttpServer(){return this.server}async listen(e,r){return new Promise((n,i)=>{this.server=this.app.listen(e,r,()=>{$.info("SYSTEM","HTTP server started",{host:r,port:e,pid:process.pid}),n()}),this.server.on("error",i)})}async close(){this.server&&(this.server.closeAllConnections(),process.platform==="win32"&&await new Promise(e=>setTimeout(e,500)),await new Promise((e,r)=>{this.server.close(n=>n?r(n):e())}),process.platform==="win32"&&await new Promise(e=>setTimeout(e,500)),this.server=null,$.info("SYSTEM","HTTP server closed"))}registerRoutes(e){e.setupRoutes(this.app)}finalizeRoutes(){this.app.use(a2),this.app.use(s2)}setupMiddleware(){TE(IE).forEach(r=>this.app.use(r))}setupCoreRoutes(){this.app.get("/api/health",(e,r)=>{r.status(200).json({status:"ok",version:o2,workerPath:this.options.workerPath,uptime:Date.now()-this.startTime,managed:process.env.CLAUDE_MEM_MANAGED==="true",hasIpc:typeof process.send=="function",platform:process.platform,pid:process.pid,initialized:this.options.getInitializationComplete(),mcpReady:this.options.getMcpReady(),ai:this.options.getAiStatus()})}),this.app.get("/api/readiness",(e,r)=>{this.options.getInitializationComplete()?r.status(200).json({status:"ready",mcpReady:this.options.getMcpReady()}):r.status(503).json({status:"initializing",message:"Worker is still initializing, please retry"})}),this.app.get("/api/version",(e,r)=>{r.status(200).json({version:o2})}),this.app.get("/api/instructions",async(e,r)=>{let n=e.query.topic||"all",i=e.query.operation;try{let s;if(i){let a=RE.default.join(__dirname,"../skills/mem-search/operations",`${i}.md`);s=await OE.promises.readFile(a,"utf-8")}else{let a=RE.default.join(__dirname,"../skills/mem-search/SKILL.md"),o=await OE.promises.readFile(a,"utf-8");s=this.extractInstructionSection(o,n)}r.json({content:[{type:"text",text:s}]})}catch{r.status(404).json({error:"Instruction not found"})}}),this.app.post("/api/admin/restart",Dh,async(e,r)=>{r.json({status:"restarting"}),process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?($.info("SYSTEM","Sending restart request to wrapper"),process.send({type:"restart"})):setTimeout(async()=>{await this.options.onRestart()},100)}),this.app.post("/api/admin/shutdown",Dh,async(e,r)=>{r.json({status:"shutting_down"}),process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?($.info("SYSTEM","Sending shutdown request to wrapper"),process.send({type:"shutdown"})):setTimeout(async()=>{await this.options.onShutdown()},100)})}extractInstructionSection(e,r){let n={workflow:this.extractBetween(e,"## The Workflow","## Search Parameters"),search_params:this.extractBetween(e,"## Search Parameters","## Examples"),examples:this.extractBetween(e,"## Examples","## Why This Workflow"),all:e};return n[r]||n.all}extractBetween(e,r,n){let i=e.indexOf(r),s=e.indexOf(n);return i===-1?e:s===-1?e.substring(i):e.substring(i,s).trim()}};var st=nt(require("path"),1),xd=require("os"),Ut=require("fs"),d2=require("child_process"),p2=require("util");_e();Hr();tr();var jn=require("fs"),Sd=require("path");_e();function u2(t){try{return(0,jn.existsSync)(t)?JSON.parse((0,jn.readFileSync)(t,"utf-8")):{}}catch(e){return $.error("CONFIG","Failed to read Cursor registry, using empty registry",{file:t,error:e instanceof Error?e.message:String(e)}),{}}}function l2(t,e){let r=(0,Sd.join)(t,"..");(0,jn.mkdirSync)(r,{recursive:!0}),(0,jn.writeFileSync)(t,JSON.stringify(e,null,2))}function PE(t,e){let r=(0,Sd.join)(t,".cursor","rules"),n=(0,Sd.join)(r,"claude-mem-context.mdc"),i=`${n}.tmp`;(0,jn.mkdirSync)(r,{recursive:!0});let s=`--- alwaysApply: true description: "Claude-mem context from past sessions (auto-updated)" --- @@ -1071,7 +1071,7 @@ For more info: https://docs.claude-mem.ai/cursor FROM user_prompts WHERE content_session_id = ? ORDER BY prompt_number ASC - `).all(e)}close(){this.db.close()}};Uh();_e();lr();tr();var AE=nt(require("path"),1),jE=nt(require("os"),1),Ra=nt(require("fs"),1),ME=require("child_process"),qie="10.0.5",qh=class{client=null;transport=null;connected=!1;project;collectionName;VECTOR_DB_DIR;BATCH_SIZE=100;disabled=!1;constructor(e){this.project=e,this.collectionName=`cm__${e}`,this.VECTOR_DB_DIR=AE.default.join(jE.default.homedir(),".claude-mem","vector-db")}getCombinedCertPath(){let e=AE.default.join(jE.default.homedir(),".claude-mem","combined_certs.pem");if(Ra.default.existsSync(e)){let r=Ra.default.statSync(e);if(Date.now()-r.mtimeMs<1440*60*1e3)return e}if(process.platform==="darwin")try{let r;try{r=(0,ME.execSync)('uvx --with certifi python -c "import certifi; print(certifi.where())"',{encoding:"utf8",stdio:["pipe","pipe","pipe"],timeout:1e4}).trim()}catch{return}if(!r||!Ra.default.existsSync(r))return;let n="";try{n=(0,ME.execSync)('security find-certificate -a -c "Zscaler" -p /Library/Keychains/System.keychain',{encoding:"utf8",stdio:["pipe","pipe","pipe"],timeout:5e3})}catch{return}if(!n||!n.includes("-----BEGIN CERTIFICATE-----")||!n.includes("-----END CERTIFICATE-----"))return;let i=Ra.default.readFileSync(r,"utf8"),s=e+".tmp";return Ra.default.writeFileSync(s,i+` + `).all(e)}close(){this.db.close()}};Uh();_e();lr();tr();var AE=nt(require("path"),1),jE=nt(require("os"),1),Ra=nt(require("fs"),1),ME=require("child_process"),qie="10.0.6",qh=class{client=null;transport=null;connected=!1;project;collectionName;VECTOR_DB_DIR;BATCH_SIZE=100;disabled=!1;constructor(e){this.project=e,this.collectionName=`cm__${e}`,this.VECTOR_DB_DIR=AE.default.join(jE.default.homedir(),".claude-mem","vector-db")}getCombinedCertPath(){let e=AE.default.join(jE.default.homedir(),".claude-mem","combined_certs.pem");if(Ra.default.existsSync(e)){let r=Ra.default.statSync(e);if(Date.now()-r.mtimeMs<1440*60*1e3)return e}if(process.platform==="darwin")try{let r;try{r=(0,ME.execSync)('uvx --with certifi python -c "import certifi; print(certifi.where())"',{encoding:"utf8",stdio:["pipe","pipe","pipe"],timeout:1e4}).trim()}catch{return}if(!r||!Ra.default.existsSync(r))return;let n="";try{n=(0,ME.execSync)('security find-certificate -a -c "Zscaler" -p /Library/Keychains/System.keychain',{encoding:"utf8",stdio:["pipe","pipe","pipe"],timeout:5e3})}catch{return}if(!n||!n.includes("-----BEGIN CERTIFICATE-----")||!n.includes("-----END CERTIFICATE-----"))return;let i=Ra.default.readFileSync(r,"utf8"),s=e+".tmp";return Ra.default.writeFileSync(s,i+` `+n),Ra.default.renameSync(s,e),$.info("CHROMA_SYNC","Created combined SSL certificate bundle for Zscaler",{path:e}),e}catch(r){$.debug("CHROMA_SYNC","Could not create combined cert bundle",{},r);return}}isDisabled(){return this.disabled}async ensureConnection(){if(!(this.connected&&this.client)){$.info("CHROMA_SYNC","Connecting to Chroma MCP server...",{project:this.project});try{let r=Ae.loadFromFile(pr).CLAUDE_MEM_PYTHON_VERSION,n=this.getCombinedCertPath(),i={command:"uvx",args:["--python",r,"chroma-mcp","--client-type","persistent","--data-dir",this.VECTOR_DB_DIR],stderr:"ignore"};n&&(i.env={...process.env,SSL_CERT_FILE:n,REQUESTS_CA_BUNDLE:n,CURL_CA_BUNDLE:n},$.info("CHROMA_SYNC","Using combined SSL certificates for Zscaler compatibility",{certPath:n})),this.transport=new Uo(i),this.client=new Mo({name:"claude-mem-chroma-sync",version:qie},{capabilities:{}}),await this.client.connect(this.transport),this.connected=!0,$.info("CHROMA_SYNC","Connected to Chroma MCP server",{project:this.project})}catch(e){throw $.error("CHROMA_SYNC","Failed to connect to Chroma MCP server",{project:this.project},e),new Error(`Chroma connection failed: ${e instanceof Error?e.message:String(e)}`)}}}async ensureCollection(){if(await this.ensureConnection(),!this.client)throw new Error(`Chroma client not initialized. Call ensureConnection() before using client methods. Project: ${this.project}`);try{await this.client.callTool({name:"chroma_get_collection_info",arguments:{collection_name:this.collectionName}}),$.debug("CHROMA_SYNC","Collection exists",{collection:this.collectionName})}catch(e){let r=e instanceof Error?e.message:String(e);if(r.includes("Not connected")||r.includes("Connection closed")||r.includes("MCP error -32000")){if(this.transport)try{await this.transport.close()}catch(i){$.debug("CHROMA_SYNC","Transport close error (expected if already dead)",{},i)}throw this.connected=!1,this.client=null,this.transport=null,$.error("CHROMA_SYNC","Connection lost during collection check",{collection:this.collectionName},e),new Error(`Chroma connection lost: ${r}`)}$.error("CHROMA_SYNC","Collection check failed, attempting to create",{collection:this.collectionName},e),$.info("CHROMA_SYNC","Creating collection",{collection:this.collectionName});try{await this.client.callTool({name:"chroma_create_collection",arguments:{collection_name:this.collectionName,embedding_function_name:"default"}}),$.info("CHROMA_SYNC","Collection created",{collection:this.collectionName})}catch(i){throw $.error("CHROMA_SYNC","Failed to create collection",{collection:this.collectionName},i),new Error(`Collection creation failed: ${i instanceof Error?i.message:String(i)}`)}}}formatObservationDocs(e){let r=[],n=e.facts?JSON.parse(e.facts):[],i=e.concepts?JSON.parse(e.concepts):[],s=e.files_read?JSON.parse(e.files_read):[],a=e.files_modified?JSON.parse(e.files_modified):[],o={sqlite_id:e.id,doc_type:"observation",memory_session_id:e.memory_session_id,project:e.project,created_at_epoch:e.created_at_epoch,type:e.type||"discovery",title:e.title||"Untitled"};return e.subtitle&&(o.subtitle=e.subtitle),i.length>0&&(o.concepts=i.join(",")),s.length>0&&(o.files_read=s.join(",")),a.length>0&&(o.files_modified=a.join(",")),e.narrative&&r.push({id:`obs_${e.id}_narrative`,document:e.narrative,metadata:{...o,field_type:"narrative"}}),e.text&&r.push({id:`obs_${e.id}_text`,document:e.text,metadata:{...o,field_type:"text"}}),n.forEach((c,u)=>{r.push({id:`obs_${e.id}_fact_${u}`,document:c,metadata:{...o,field_type:"fact",fact_index:u}})}),r}formatSummaryDocs(e){let r=[],n={sqlite_id:e.id,doc_type:"session_summary",memory_session_id:e.memory_session_id,project:e.project,created_at_epoch:e.created_at_epoch,prompt_number:e.prompt_number||0};return e.request&&r.push({id:`summary_${e.id}_request`,document:e.request,metadata:{...n,field_type:"request"}}),e.investigated&&r.push({id:`summary_${e.id}_investigated`,document:e.investigated,metadata:{...n,field_type:"investigated"}}),e.learned&&r.push({id:`summary_${e.id}_learned`,document:e.learned,metadata:{...n,field_type:"learned"}}),e.completed&&r.push({id:`summary_${e.id}_completed`,document:e.completed,metadata:{...n,field_type:"completed"}}),e.next_steps&&r.push({id:`summary_${e.id}_next_steps`,document:e.next_steps,metadata:{...n,field_type:"next_steps"}}),e.notes&&r.push({id:`summary_${e.id}_notes`,document:e.notes,metadata:{...n,field_type:"notes"}}),r}async addDocuments(e){if(e.length!==0){if(await this.ensureCollection(),!this.client)throw new Error(`Chroma client not initialized. Call ensureConnection() before using client methods. Project: ${this.project}`);try{await this.client.callTool({name:"chroma_add_documents",arguments:{collection_name:this.collectionName,documents:e.map(r=>r.document),ids:e.map(r=>r.id),metadatas:e.map(r=>r.metadata)}}),$.debug("CHROMA_SYNC","Documents added",{collection:this.collectionName,count:e.length})}catch(r){throw $.error("CHROMA_SYNC","Failed to add documents",{collection:this.collectionName,count:e.length},r),new Error(`Document add failed: ${r instanceof Error?r.message:String(r)}`)}}}async syncObservation(e,r,n,i,s,a,o=0){if(this.disabled)return;let c={id:e,memory_session_id:r,project:n,text:null,type:i.type,title:i.title,subtitle:i.subtitle,facts:JSON.stringify(i.facts),narrative:i.narrative,concepts:JSON.stringify(i.concepts),files_read:JSON.stringify(i.files_read),files_modified:JSON.stringify(i.files_modified),prompt_number:s,discovery_tokens:o,created_at:new Date(a*1e3).toISOString(),created_at_epoch:a},u=this.formatObservationDocs(c);$.info("CHROMA_SYNC","Syncing observation",{observationId:e,documentCount:u.length,project:n}),await this.addDocuments(u)}async syncSummary(e,r,n,i,s,a,o=0){if(this.disabled)return;let c={id:e,memory_session_id:r,project:n,request:i.request,investigated:i.investigated,learned:i.learned,completed:i.completed,next_steps:i.next_steps,notes:i.notes,prompt_number:s,discovery_tokens:o,created_at:new Date(a*1e3).toISOString(),created_at_epoch:a},u=this.formatSummaryDocs(c);$.info("CHROMA_SYNC","Syncing summary",{summaryId:e,documentCount:u.length,project:n}),await this.addDocuments(u)}formatUserPromptDoc(e){return{id:`prompt_${e.id}`,document:e.prompt_text,metadata:{sqlite_id:e.id,doc_type:"user_prompt",memory_session_id:e.memory_session_id,project:e.project,created_at_epoch:e.created_at_epoch,prompt_number:e.prompt_number}}}async syncUserPrompt(e,r,n,i,s,a){if(this.disabled)return;let o={id:e,content_session_id:"",prompt_number:s,prompt_text:i,created_at:new Date(a*1e3).toISOString(),created_at_epoch:a,memory_session_id:r,project:n},c=this.formatUserPromptDoc(o);$.info("CHROMA_SYNC","Syncing user prompt",{promptId:e,project:n}),await this.addDocuments([c])}async getExistingChromaIds(){if(await this.ensureConnection(),!this.client)throw new Error(`Chroma client not initialized. Call ensureConnection() before using client methods. Project: ${this.project}`);let e=new Set,r=new Set,n=new Set,i=0,s=1e3;for($.info("CHROMA_SYNC","Fetching existing Chroma document IDs...",{project:this.project});;)try{let o=(await this.client.callTool({name:"chroma_get_documents",arguments:{collection_name:this.collectionName,limit:s,offset:i,where:{project:this.project},include:["metadatas"]}})).content[0];if(o.type!=="text")throw new Error("Unexpected response type from chroma_get_documents");let u=JSON.parse(o.text).metadatas||[];if(u.length===0)break;for(let l of u)l.sqlite_id&&(l.doc_type==="observation"?e.add(l.sqlite_id):l.doc_type==="session_summary"?r.add(l.sqlite_id):l.doc_type==="user_prompt"&&n.add(l.sqlite_id));i+=s,$.debug("CHROMA_SYNC","Fetched batch of existing IDs",{project:this.project,offset:i,batchSize:u.length})}catch(a){throw $.error("CHROMA_SYNC","Failed to fetch existing IDs",{project:this.project},a),a}return $.info("CHROMA_SYNC","Existing IDs fetched",{project:this.project,observations:e.size,summaries:r.size,prompts:n.size}),{observations:e,summaries:r,prompts:n}}async ensureBackfilled(){if(this.disabled)return;$.info("CHROMA_SYNC","Starting smart backfill",{project:this.project}),await this.ensureCollection();let e=await this.getExistingChromaIds(),r=new Ns;try{let n=Array.from(e.observations),i=n.length>0?`AND id NOT IN (${n.join(",")})`:"",s=r.db.prepare(` SELECT * FROM observations WHERE project = ? ${i} @@ -1300,7 +1300,7 @@ ${n}`}function Jie(t,e){let r=Qt.default.join(t,"CLAUDE.md"),n=`${r}.tmp`;if(!(0 path: iss.path ? [${Sc(_)}, ...iss.path] : [${Sc(_)}] })));`),p.write(`newResult[${Sc(_)}] = ${v}.value`)}p.write("payload.value = newResult;"),p.write("return payload;");let m=p.compile();return(_,v)=>m(d,_,v)},i,s=Zd,a=!s$.jitless,c=a&&YU.value,u=e.catchall,l;t._zod.parse=(d,p)=>{l??(l=r.value);let f=d.value;if(!s(f))return d.issues.push({expected:"object",code:"invalid_type",input:f,inst:t}),d;let h=[];if(a&&c&&p?.async===!1&&p.jitless!==!0)i||(i=n(e.shape)),d=i(d,p);else{d.value={};let v=l.shape;for(let b of l.keys){let x=v[b],S=x._zod.run({value:f[b],issues:[]},p),w=x._zod.optin==="optional"&&x._zod.optout==="optional";S instanceof Promise?h.push(S.then(k=>w?K2(k,d,b,f):eg(k,d,b))):w?K2(S,d,b,f):eg(S,d,b)}}if(!u)return h.length?Promise.all(h).then(()=>d):d;let y=[],g=l.keySet,m=u._zod,_=m.def.type;for(let v of Object.keys(f)){if(g.has(v))continue;if(_==="never"){y.push(v);continue}let b=m.run({value:f[v],issues:[]},p);b instanceof Promise?h.push(b.then(x=>eg(x,d,v))):eg(b,d,v)}return y.length&&d.issues.push({code:"unrecognized_keys",keys:y,input:f,inst:t}),h.length?Promise.all(h).then(()=>d):d}});function J2(t,e,r,n){for(let i of t)if(i.issues.length===0)return e.value=i.value,e;return e.issues.push({code:"invalid_union",input:e.value,inst:r,errors:t.map(i=>i.issues.map(s=>rs(s,n,ts())))}),e}var gL=X("$ZodUnion",(t,e)=>{Ft.init(t,e),qt(t._zod,"optin",()=>e.options.some(r=>r._zod.optin==="optional")?"optional":void 0),qt(t._zod,"optout",()=>e.options.some(r=>r._zod.optout==="optional")?"optional":void 0),qt(t._zod,"values",()=>{if(e.options.every(r=>r._zod.values))return new Set(e.options.flatMap(r=>Array.from(r._zod.values)))}),qt(t._zod,"pattern",()=>{if(e.options.every(r=>r._zod.pattern)){let r=e.options.map(n=>n._zod.pattern);return new RegExp(`^(${r.map(n=>kg(n.source)).join("|")})$`)}}),t._zod.parse=(r,n)=>{let i=!1,s=[];for(let a of e.options){let o=a._zod.run({value:r.value,issues:[]},n);if(o instanceof Promise)s.push(o),i=!0;else{if(o.issues.length===0)return o;s.push(o)}}return i?Promise.all(s).then(a=>J2(a,r,t,n)):J2(s,r,t,n)}}),wde=X("$ZodDiscriminatedUnion",(t,e)=>{gL.init(t,e);let r=t._zod.parse;qt(t._zod,"propValues",()=>{let i={};for(let s of e.options){let a=s._zod.propValues;if(!a||Object.keys(a).length===0)throw new Error(`Invalid discriminated union option at index "${e.options.indexOf(s)}"`);for(let[o,c]of Object.entries(a)){i[o]||(i[o]=new Set);for(let u of c)i[o].add(u)}}return i});let n=Eg(()=>{let i=e.options,s=new Map;for(let a of i){let o=a._zod.propValues[e.discriminator];if(!o||o.size===0)throw new Error(`Invalid discriminated union option at index "${e.options.indexOf(a)}"`);for(let c of o){if(s.has(c))throw new Error(`Duplicate discriminator value "${String(c)}"`);s.set(c,a)}}return s});t._zod.parse=(i,s)=>{let a=i.value;if(!Zd(a))return i.issues.push({code:"invalid_type",expected:"object",input:a,inst:t}),i;let o=n.value.get(a?.[e.discriminator]);return o?o._zod.run(i,s):e.unionFallback?r(i,s):(i.issues.push({code:"invalid_union",errors:[],note:"No matching discriminator",input:a,path:[e.discriminator],inst:t}),i)}}),Ede=X("$ZodIntersection",(t,e)=>{Ft.init(t,e),t._zod.parse=(r,n)=>{let i=r.value,s=e.left._zod.run({value:i,issues:[]},n),a=e.right._zod.run({value:i,issues:[]},n);return s instanceof Promise||a instanceof Promise?Promise.all([s,a]).then(([c,u])=>X2(r,c,u)):X2(r,s,a)}});function u$(t,e){if(t===e)return{valid:!0,data:t};if(t instanceof Date&&e instanceof Date&&+t==+e)return{valid:!0,data:t};if(Hd(t)&&Hd(e)){let r=Object.keys(e),n=Object.keys(t).filter(s=>r.indexOf(s)!==-1),i={...t,...e};for(let s of n){let a=u$(t[s],e[s]);if(!a.valid)return{valid:!1,mergeErrorPath:[s,...a.mergeErrorPath]};i[s]=a.data}return{valid:!0,data:i}}if(Array.isArray(t)&&Array.isArray(e)){if(t.length!==e.length)return{valid:!1,mergeErrorPath:[]};let r=[];for(let n=0;n{Ft.init(t,e),t._zod.parse=(r,n)=>{let i=r.value;if(!Hd(i))return r.issues.push({expected:"record",code:"invalid_type",input:i,inst:t}),r;let s=[];if(e.keyType._zod.values){let a=e.keyType._zod.values;r.value={};for(let c of a)if(typeof c=="string"||typeof c=="number"||typeof c=="symbol"){let u=e.valueType._zod.run({value:i[c],issues:[]},n);u instanceof Promise?s.push(u.then(l=>{l.issues.length&&r.issues.push(...Ds(c,l.issues)),r.value[c]=l.value})):(u.issues.length&&r.issues.push(...Ds(c,u.issues)),r.value[c]=u.value)}let o;for(let c in i)a.has(c)||(o=o??[],o.push(c));o&&o.length>0&&r.issues.push({code:"unrecognized_keys",input:i,inst:t,keys:o})}else{r.value={};for(let a of Reflect.ownKeys(i)){if(a==="__proto__")continue;let o=e.keyType._zod.run({value:a,issues:[]},n);if(o instanceof Promise)throw new Error("Async schemas not supported in object keys currently");if(o.issues.length){r.issues.push({origin:"record",code:"invalid_key",issues:o.issues.map(u=>rs(u,n,ts())),input:a,path:[a],inst:t}),r.value[o.value]=o.value;continue}let c=e.valueType._zod.run({value:i[a],issues:[]},n);c instanceof Promise?s.push(c.then(u=>{u.issues.length&&r.issues.push(...Ds(a,u.issues)),r.value[o.value]=u.value})):(c.issues.length&&r.issues.push(...Ds(a,c.issues)),r.value[o.value]=c.value)}}return s.length?Promise.all(s).then(()=>r):r}}),kde=X("$ZodEnum",(t,e)=>{Ft.init(t,e);let r=KU(e.entries);t._zod.values=new Set(r),t._zod.pattern=new RegExp(`^(${r.filter(n=>QU.has(typeof n)).map(n=>typeof n=="string"?qc(n):n.toString()).join("|")})$`),t._zod.parse=(n,i)=>{let s=n.value;return t._zod.values.has(s)||n.issues.push({code:"invalid_value",values:r,input:s,inst:t}),n}}),Tde=X("$ZodLiteral",(t,e)=>{Ft.init(t,e),t._zod.values=new Set(e.values),t._zod.pattern=new RegExp(`^(${e.values.map(r=>typeof r=="string"?qc(r):r?r.toString():String(r)).join("|")})$`),t._zod.parse=(r,n)=>{let i=r.value;return t._zod.values.has(i)||r.issues.push({code:"invalid_value",values:e.values,input:i,inst:t}),r}}),Ide=X("$ZodTransform",(t,e)=>{Ft.init(t,e),t._zod.parse=(r,n)=>{let i=e.transform(r.value,r);if(n.async)return(i instanceof Promise?i:Promise.resolve(i)).then(a=>(r.value=a,r));if(i instanceof Promise)throw new Da;return r.value=i,r}}),Ode=X("$ZodOptional",(t,e)=>{Ft.init(t,e),t._zod.optin="optional",t._zod.optout="optional",qt(t._zod,"values",()=>e.innerType._zod.values?new Set([...e.innerType._zod.values,void 0]):void 0),qt(t._zod,"pattern",()=>{let r=e.innerType._zod.pattern;return r?new RegExp(`^(${kg(r.source)})?$`):void 0}),t._zod.parse=(r,n)=>e.innerType._zod.optin==="optional"?e.innerType._zod.run(r,n):r.value===void 0?r:e.innerType._zod.run(r,n)}),Rde=X("$ZodNullable",(t,e)=>{Ft.init(t,e),qt(t._zod,"optin",()=>e.innerType._zod.optin),qt(t._zod,"optout",()=>e.innerType._zod.optout),qt(t._zod,"pattern",()=>{let r=e.innerType._zod.pattern;return r?new RegExp(`^(${kg(r.source)}|null)$`):void 0}),qt(t._zod,"values",()=>e.innerType._zod.values?new Set([...e.innerType._zod.values,null]):void 0),t._zod.parse=(r,n)=>r.value===null?r:e.innerType._zod.run(r,n)}),Pde=X("$ZodDefault",(t,e)=>{Ft.init(t,e),t._zod.optin="optional",qt(t._zod,"values",()=>e.innerType._zod.values),t._zod.parse=(r,n)=>{if(r.value===void 0)return r.value=e.defaultValue,r;let i=e.innerType._zod.run(r,n);return i instanceof Promise?i.then(s=>Y2(s,e)):Y2(i,e)}});function Y2(t,e){return t.value===void 0&&(t.value=e.defaultValue),t}var Cde=X("$ZodPrefault",(t,e)=>{Ft.init(t,e),t._zod.optin="optional",qt(t._zod,"values",()=>e.innerType._zod.values),t._zod.parse=(r,n)=>(r.value===void 0&&(r.value=e.defaultValue),e.innerType._zod.run(r,n))}),Nde=X("$ZodNonOptional",(t,e)=>{Ft.init(t,e),qt(t._zod,"values",()=>{let r=e.innerType._zod.values;return r?new Set([...r].filter(n=>n!==void 0)):void 0}),t._zod.parse=(r,n)=>{let i=e.innerType._zod.run(r,n);return i instanceof Promise?i.then(s=>Q2(s,t)):Q2(i,t)}});function Q2(t,e){return!t.issues.length&&t.value===void 0&&t.issues.push({code:"invalid_type",expected:"nonoptional",input:t.value,inst:e}),t}var Ade=X("$ZodCatch",(t,e)=>{Ft.init(t,e),t._zod.optin="optional",qt(t._zod,"optout",()=>e.innerType._zod.optout),qt(t._zod,"values",()=>e.innerType._zod.values),t._zod.parse=(r,n)=>{let i=e.innerType._zod.run(r,n);return i instanceof Promise?i.then(s=>(r.value=s.value,s.issues.length&&(r.value=e.catchValue({...r,error:{issues:s.issues.map(a=>rs(a,n,ts()))},input:r.value}),r.issues=[]),r)):(r.value=i.value,i.issues.length&&(r.value=e.catchValue({...r,error:{issues:i.issues.map(s=>rs(s,n,ts()))},input:r.value}),r.issues=[]),r)}}),jde=X("$ZodPipe",(t,e)=>{Ft.init(t,e),qt(t._zod,"values",()=>e.in._zod.values),qt(t._zod,"optin",()=>e.in._zod.optin),qt(t._zod,"optout",()=>e.out._zod.optout),t._zod.parse=(r,n)=>{let i=e.in._zod.run(r,n);return i instanceof Promise?i.then(s=>eU(s,e,n)):eU(i,e,n)}});function eU(t,e,r){return xc(t)?t:e.out._zod.run({value:t.value,issues:t.issues},r)}var Mde=X("$ZodReadonly",(t,e)=>{Ft.init(t,e),qt(t._zod,"propValues",()=>e.innerType._zod.propValues),qt(t._zod,"values",()=>e.innerType._zod.values),qt(t._zod,"optin",()=>e.innerType._zod.optin),qt(t._zod,"optout",()=>e.innerType._zod.optout),t._zod.parse=(r,n)=>{let i=e.innerType._zod.run(r,n);return i instanceof Promise?i.then(tU):tU(i)}});function tU(t){return t.value=Object.freeze(t.value),t}var Dde=X("$ZodCustom",(t,e)=>{cn.init(t,e),Ft.init(t,e),t._zod.parse=(r,n)=>r,t._zod.check=r=>{let n=r.value,i=e.fn(n);if(i instanceof Promise)return i.then(s=>rU(s,r,n,t));rU(i,r,n,t)}});function rU(t,e,r,n){if(!t){let i={code:"custom",input:r,inst:n,path:[...n._zod.def.path??[]],continue:!n._zod.def.abort};n._zod.def.params&&(i.params=n._zod.def.params),e.issues.push(rL(i))}}var zde=t=>{let e=typeof t;switch(e){case"number":return Number.isNaN(t)?"NaN":"number";case"object":{if(Array.isArray(t))return"array";if(t===null)return"null";if(Object.getPrototypeOf(t)!==Object.prototype&&t.constructor)return t.constructor.name}}return e},Ude=()=>{let t={string:{unit:"characters",verb:"to have"},file:{unit:"bytes",verb:"to have"},array:{unit:"items",verb:"to have"},set:{unit:"items",verb:"to have"}};function e(n){return t[n]??null}let r={regex:"input",email:"email address",url:"URL",emoji:"emoji",uuid:"UUID",uuidv4:"UUIDv4",uuidv6:"UUIDv6",nanoid:"nanoid",guid:"GUID",cuid:"cuid",cuid2:"cuid2",ulid:"ULID",xid:"XID",ksuid:"KSUID",datetime:"ISO datetime",date:"ISO date",time:"ISO time",duration:"ISO duration",ipv4:"IPv4 address",ipv6:"IPv6 address",cidrv4:"IPv4 range",cidrv6:"IPv6 range",base64:"base64-encoded string",base64url:"base64url-encoded string",json_string:"JSON string",e164:"E.164 number",jwt:"JWT",template_literal:"input"};return n=>{switch(n.code){case"invalid_type":return`Invalid input: expected ${n.expected}, received ${zde(n.input)}`;case"invalid_value":return n.values.length===1?`Invalid input: expected ${w$(n.values[0])}`:`Invalid option: expected one of ${a$(n.values,"|")}`;case"too_big":{let i=n.inclusive?"<=":"<",s=e(n.origin);return s?`Too big: expected ${n.origin??"value"} to have ${i}${n.maximum.toString()} ${s.unit??"elements"}`:`Too big: expected ${n.origin??"value"} to be ${i}${n.maximum.toString()}`}case"too_small":{let i=n.inclusive?">=":">",s=e(n.origin);return s?`Too small: expected ${n.origin} to have ${i}${n.minimum.toString()} ${s.unit}`:`Too small: expected ${n.origin} to be ${i}${n.minimum.toString()}`}case"invalid_format":{let i=n;return i.format==="starts_with"?`Invalid string: must start with "${i.prefix}"`:i.format==="ends_with"?`Invalid string: must end with "${i.suffix}"`:i.format==="includes"?`Invalid string: must include "${i.includes}"`:i.format==="regex"?`Invalid string: must match pattern ${i.pattern}`:`Invalid ${r[i.format]??n.format}`}case"not_multiple_of":return`Invalid number: must be a multiple of ${n.divisor}`;case"unrecognized_keys":return`Unrecognized key${n.keys.length>1?"s":""}: ${a$(n.keys,", ")}`;case"invalid_key":return`Invalid key in ${n.origin}`;case"invalid_union":return"Invalid input";case"invalid_element":return`Invalid value in ${n.origin}`;default:return"Invalid input"}}};function Lde(){return{localeError:Ude()}}var l$=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...r){let n=r[0];if(this._map.set(e,n),n&&typeof n=="object"&&"id"in n){if(this._idmap.has(n.id))throw new Error(`ID ${n.id} already exists in the registry`);this._idmap.set(n.id,e)}return this}remove(e){return this._map.delete(e),this}get(e){let r=e._zod.parent;if(r){let n={...this.get(r)??{}};return delete n.id,{...n,...this._map.get(e)}}return this._map.get(e)}has(e){return this._map.has(e)}};function qde(){return new l$}var tg=qde();function Fde(t,e){return new t({type:"string",...Te(e)})}function Zde(t,e){return new t({type:"string",format:"email",check:"string_format",abort:!1,...Te(e)})}function nU(t,e){return new t({type:"string",format:"guid",check:"string_format",abort:!1,...Te(e)})}function Hde(t,e){return new t({type:"string",format:"uuid",check:"string_format",abort:!1,...Te(e)})}function Bde(t,e){return new t({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v4",...Te(e)})}function Vde(t,e){return new t({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v6",...Te(e)})}function Gde(t,e){return new t({type:"string",format:"uuid",check:"string_format",abort:!1,version:"v7",...Te(e)})}function Wde(t,e){return new t({type:"string",format:"url",check:"string_format",abort:!1,...Te(e)})}function Kde(t,e){return new t({type:"string",format:"emoji",check:"string_format",abort:!1,...Te(e)})}function Jde(t,e){return new t({type:"string",format:"nanoid",check:"string_format",abort:!1,...Te(e)})}function Xde(t,e){return new t({type:"string",format:"cuid",check:"string_format",abort:!1,...Te(e)})}function Yde(t,e){return new t({type:"string",format:"cuid2",check:"string_format",abort:!1,...Te(e)})}function Qde(t,e){return new t({type:"string",format:"ulid",check:"string_format",abort:!1,...Te(e)})}function epe(t,e){return new t({type:"string",format:"xid",check:"string_format",abort:!1,...Te(e)})}function tpe(t,e){return new t({type:"string",format:"ksuid",check:"string_format",abort:!1,...Te(e)})}function rpe(t,e){return new t({type:"string",format:"ipv4",check:"string_format",abort:!1,...Te(e)})}function npe(t,e){return new t({type:"string",format:"ipv6",check:"string_format",abort:!1,...Te(e)})}function ipe(t,e){return new t({type:"string",format:"cidrv4",check:"string_format",abort:!1,...Te(e)})}function spe(t,e){return new t({type:"string",format:"cidrv6",check:"string_format",abort:!1,...Te(e)})}function ape(t,e){return new t({type:"string",format:"base64",check:"string_format",abort:!1,...Te(e)})}function ope(t,e){return new t({type:"string",format:"base64url",check:"string_format",abort:!1,...Te(e)})}function cpe(t,e){return new t({type:"string",format:"e164",check:"string_format",abort:!1,...Te(e)})}function upe(t,e){return new t({type:"string",format:"jwt",check:"string_format",abort:!1,...Te(e)})}function lpe(t,e){return new t({type:"string",format:"datetime",check:"string_format",offset:!1,local:!1,precision:null,...Te(e)})}function dpe(t,e){return new t({type:"string",format:"date",check:"string_format",...Te(e)})}function ppe(t,e){return new t({type:"string",format:"time",check:"string_format",precision:null,...Te(e)})}function fpe(t,e){return new t({type:"string",format:"duration",check:"string_format",...Te(e)})}function mpe(t,e){return new t({type:"number",checks:[],...Te(e)})}function hpe(t,e){return new t({type:"number",check:"number_format",abort:!1,format:"safeint",...Te(e)})}function gpe(t,e){return new t({type:"boolean",...Te(e)})}function vpe(t,e){return new t({type:"null",...Te(e)})}function ype(t){return new t({type:"unknown"})}function _pe(t,e){return new t({type:"never",...Te(e)})}function iU(t,e){return new pL({check:"less_than",...Te(e),value:t,inclusive:!1})}function HE(t,e){return new pL({check:"less_than",...Te(e),value:t,inclusive:!0})}function sU(t,e){return new fL({check:"greater_than",...Te(e),value:t,inclusive:!1})}function BE(t,e){return new fL({check:"greater_than",...Te(e),value:t,inclusive:!0})}function aU(t,e){return new Cle({check:"multiple_of",...Te(e),value:t})}function vL(t,e){return new Ale({check:"max_length",...Te(e),maximum:t})}function dg(t,e){return new jle({check:"min_length",...Te(e),minimum:t})}function yL(t,e){return new Mle({check:"length_equals",...Te(e),length:t})}function bpe(t,e){return new Dle({check:"string_format",format:"regex",...Te(e),pattern:t})}function Spe(t){return new zle({check:"string_format",format:"lowercase",...Te(t)})}function xpe(t){return new Ule({check:"string_format",format:"uppercase",...Te(t)})}function wpe(t,e){return new Lle({check:"string_format",format:"includes",...Te(e),includes:t})}function Epe(t,e){return new qle({check:"string_format",format:"starts_with",...Te(e),prefix:t})}function $pe(t,e){return new Fle({check:"string_format",format:"ends_with",...Te(e),suffix:t})}function Vd(t){return new Zle({check:"overwrite",tx:t})}function kpe(t){return Vd(e=>e.normalize(t))}function Tpe(){return Vd(t=>t.trim())}function Ipe(){return Vd(t=>t.toLowerCase())}function Ope(){return Vd(t=>t.toUpperCase())}function Rpe(t,e,r){return new t({type:"array",element:e,...Te(r)})}function Ppe(t,e,r){let n=Te(r);return n.abort??(n.abort=!0),new t({type:"custom",check:"custom",fn:e,...n})}function Cpe(t,e,r){return new t({type:"custom",check:"custom",fn:e,...Te(r)})}var _L={};fU(_L,{time:()=>$L,duration:()=>TL,datetime:()=>SL,date:()=>wL,ZodISOTime:()=>EL,ZodISODuration:()=>kL,ZodISODateTime:()=>bL,ZodISODate:()=>xL});var bL=X("ZodISODateTime",(t,e)=>{rde.init(t,e),Jt.init(t,e)});function SL(t){return lpe(bL,t)}var xL=X("ZodISODate",(t,e)=>{nde.init(t,e),Jt.init(t,e)});function wL(t){return dpe(xL,t)}var EL=X("ZodISOTime",(t,e)=>{ide.init(t,e),Jt.init(t,e)});function $L(t){return ppe(EL,t)}var kL=X("ZodISODuration",(t,e)=>{sde.init(t,e),Jt.init(t,e)});function TL(t){return fpe(kL,t)}var IL=(t,e)=>{iL.init(t,e),t.name="ZodError",Object.defineProperties(t,{format:{value:r=>Que(t,r)},flatten:{value:r=>Yue(t,r)},addIssue:{value:r=>t.issues.push(r)},addIssues:{value:r=>t.issues.push(...r)},isEmpty:{get(){return t.issues.length===0}}})},VRe=X("ZodError",IL),Og=X("ZodError",IL,{Parent:Error}),Npe=ele(Og),Ape=tle(Og),jpe=aL(Og),Mpe=oL(Og),Kt=X("ZodType",(t,e)=>(Ft.init(t,e),t.def=e,Object.defineProperty(t,"_def",{value:e}),t.check=(...r)=>t.clone({...e,checks:[...e.checks??[],...r.map(n=>typeof n=="function"?{_zod:{check:n,def:{check:"custom"},onattach:[]}}:n)]}),t.clone=(r,n)=>Fs(t,r,n),t.brand=()=>t,t.register=(r,n)=>(r.add(t,n),t),t.parse=(r,n)=>Npe(t,r,n,{callee:t.parse}),t.safeParse=(r,n)=>jpe(t,r,n),t.parseAsync=async(r,n)=>Ape(t,r,n,{callee:t.parseAsync}),t.safeParseAsync=async(r,n)=>Mpe(t,r,n),t.spa=t.safeParseAsync,t.refine=(r,n)=>t.check(kfe(r,n)),t.superRefine=r=>t.check(Tfe(r)),t.overwrite=r=>t.check(Vd(r)),t.optional=()=>be(t),t.nullable=()=>uU(t),t.nullish=()=>be(uU(t)),t.nonoptional=r=>yfe(t,r),t.array=()=>ot(t),t.or=r=>Vt([t,r]),t.and=r=>$$(t,r),t.transform=r=>p$(t,jL(r)),t.default=r=>hfe(t,r),t.prefault=r=>vfe(t,r),t.catch=r=>bfe(t,r),t.pipe=r=>p$(t,r),t.readonly=()=>wfe(t),t.describe=r=>{let n=t.clone();return tg.add(n,{description:r}),n},Object.defineProperty(t,"description",{get(){return tg.get(t)?.description},configurable:!0}),t.meta=(...r)=>{if(r.length===0)return tg.get(t);let n=t.clone();return tg.add(n,r[0]),n},t.isOptional=()=>t.safeParse(void 0).success,t.isNullable=()=>t.safeParse(null).success,t)),OL=X("_ZodString",(t,e)=>{E$.init(t,e),Kt.init(t,e);let r=t._zod.bag;t.format=r.format??null,t.minLength=r.minimum??null,t.maxLength=r.maximum??null,t.regex=(...n)=>t.check(bpe(...n)),t.includes=(...n)=>t.check(wpe(...n)),t.startsWith=(...n)=>t.check(Epe(...n)),t.endsWith=(...n)=>t.check($pe(...n)),t.min=(...n)=>t.check(dg(...n)),t.max=(...n)=>t.check(vL(...n)),t.length=(...n)=>t.check(yL(...n)),t.nonempty=(...n)=>t.check(dg(1,...n)),t.lowercase=n=>t.check(Spe(n)),t.uppercase=n=>t.check(xpe(n)),t.trim=()=>t.check(Tpe()),t.normalize=(...n)=>t.check(kpe(...n)),t.toLowerCase=()=>t.check(Ipe()),t.toUpperCase=()=>t.check(Ope())}),Dpe=X("ZodString",(t,e)=>{E$.init(t,e),OL.init(t,e),t.email=r=>t.check(Zde(zpe,r)),t.url=r=>t.check(Wde(Upe,r)),t.jwt=r=>t.check(upe(efe,r)),t.emoji=r=>t.check(Kde(Lpe,r)),t.guid=r=>t.check(nU(oU,r)),t.uuid=r=>t.check(Hde(rg,r)),t.uuidv4=r=>t.check(Bde(rg,r)),t.uuidv6=r=>t.check(Vde(rg,r)),t.uuidv7=r=>t.check(Gde(rg,r)),t.nanoid=r=>t.check(Jde(qpe,r)),t.guid=r=>t.check(nU(oU,r)),t.cuid=r=>t.check(Xde(Fpe,r)),t.cuid2=r=>t.check(Yde(Zpe,r)),t.ulid=r=>t.check(Qde(Hpe,r)),t.base64=r=>t.check(ape(Xpe,r)),t.base64url=r=>t.check(ope(Ype,r)),t.xid=r=>t.check(epe(Bpe,r)),t.ksuid=r=>t.check(tpe(Vpe,r)),t.ipv4=r=>t.check(rpe(Gpe,r)),t.ipv6=r=>t.check(npe(Wpe,r)),t.cidrv4=r=>t.check(ipe(Kpe,r)),t.cidrv6=r=>t.check(spe(Jpe,r)),t.e164=r=>t.check(cpe(Qpe,r)),t.datetime=r=>t.check(SL(r)),t.date=r=>t.check(wL(r)),t.time=r=>t.check($L(r)),t.duration=r=>t.check(TL(r))});function G(t){return Fde(Dpe,t)}var Jt=X("ZodStringFormat",(t,e)=>{Bt.init(t,e),OL.init(t,e)}),zpe=X("ZodEmail",(t,e)=>{Gle.init(t,e),Jt.init(t,e)}),oU=X("ZodGUID",(t,e)=>{Ble.init(t,e),Jt.init(t,e)}),rg=X("ZodUUID",(t,e)=>{Vle.init(t,e),Jt.init(t,e)}),Upe=X("ZodURL",(t,e)=>{Wle.init(t,e),Jt.init(t,e)}),Lpe=X("ZodEmoji",(t,e)=>{Kle.init(t,e),Jt.init(t,e)}),qpe=X("ZodNanoID",(t,e)=>{Jle.init(t,e),Jt.init(t,e)}),Fpe=X("ZodCUID",(t,e)=>{Xle.init(t,e),Jt.init(t,e)}),Zpe=X("ZodCUID2",(t,e)=>{Yle.init(t,e),Jt.init(t,e)}),Hpe=X("ZodULID",(t,e)=>{Qle.init(t,e),Jt.init(t,e)}),Bpe=X("ZodXID",(t,e)=>{ede.init(t,e),Jt.init(t,e)}),Vpe=X("ZodKSUID",(t,e)=>{tde.init(t,e),Jt.init(t,e)}),Gpe=X("ZodIPv4",(t,e)=>{ade.init(t,e),Jt.init(t,e)}),Wpe=X("ZodIPv6",(t,e)=>{ode.init(t,e),Jt.init(t,e)}),Kpe=X("ZodCIDRv4",(t,e)=>{cde.init(t,e),Jt.init(t,e)}),Jpe=X("ZodCIDRv6",(t,e)=>{ude.init(t,e),Jt.init(t,e)}),Xpe=X("ZodBase64",(t,e)=>{lde.init(t,e),Jt.init(t,e)}),Ype=X("ZodBase64URL",(t,e)=>{pde.init(t,e),Jt.init(t,e)}),Qpe=X("ZodE164",(t,e)=>{fde.init(t,e),Jt.init(t,e)}),efe=X("ZodJWT",(t,e)=>{hde.init(t,e),Jt.init(t,e)}),RL=X("ZodNumber",(t,e)=>{hL.init(t,e),Kt.init(t,e),t.gt=(n,i)=>t.check(sU(n,i)),t.gte=(n,i)=>t.check(BE(n,i)),t.min=(n,i)=>t.check(BE(n,i)),t.lt=(n,i)=>t.check(iU(n,i)),t.lte=(n,i)=>t.check(HE(n,i)),t.max=(n,i)=>t.check(HE(n,i)),t.int=n=>t.check(cU(n)),t.safe=n=>t.check(cU(n)),t.positive=n=>t.check(sU(0,n)),t.nonnegative=n=>t.check(BE(0,n)),t.negative=n=>t.check(iU(0,n)),t.nonpositive=n=>t.check(HE(0,n)),t.multipleOf=(n,i)=>t.check(aU(n,i)),t.step=(n,i)=>t.check(aU(n,i)),t.finite=()=>t;let r=t._zod.bag;t.minValue=Math.max(r.minimum??Number.NEGATIVE_INFINITY,r.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,t.maxValue=Math.min(r.maximum??Number.POSITIVE_INFINITY,r.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,t.isInt=(r.format??"").includes("int")||Number.isSafeInteger(r.multipleOf??.5),t.isFinite=!0,t.format=r.format??null});function At(t){return mpe(RL,t)}var tfe=X("ZodNumberFormat",(t,e)=>{gde.init(t,e),RL.init(t,e)});function cU(t){return hpe(tfe,t)}var rfe=X("ZodBoolean",(t,e)=>{vde.init(t,e),Kt.init(t,e)});function Cr(t){return gpe(rfe,t)}var nfe=X("ZodNull",(t,e)=>{yde.init(t,e),Kt.init(t,e)});function PL(t){return vpe(nfe,t)}var ife=X("ZodUnknown",(t,e)=>{_de.init(t,e),Kt.init(t,e)});function or(){return ype(ife)}var sfe=X("ZodNever",(t,e)=>{bde.init(t,e),Kt.init(t,e)});function afe(t){return _pe(sfe,t)}var ofe=X("ZodArray",(t,e)=>{Sde.init(t,e),Kt.init(t,e),t.element=e.element,t.min=(r,n)=>t.check(dg(r,n)),t.nonempty=r=>t.check(dg(1,r)),t.max=(r,n)=>t.check(vL(r,n)),t.length=(r,n)=>t.check(yL(r,n)),t.unwrap=()=>t.element});function ot(t,e){return Rpe(ofe,t,e)}var CL=X("ZodObject",(t,e)=>{xde.init(t,e),Kt.init(t,e),Lt.defineLazy(t,"shape",()=>e.shape),t.keyof=()=>Nr(Object.keys(t._zod.def.shape)),t.catchall=r=>t.clone({...t._zod.def,catchall:r}),t.passthrough=()=>t.clone({...t._zod.def,catchall:or()}),t.loose=()=>t.clone({...t._zod.def,catchall:or()}),t.strict=()=>t.clone({...t._zod.def,catchall:afe()}),t.strip=()=>t.clone({...t._zod.def,catchall:void 0}),t.extend=r=>Lt.extend(t,r),t.merge=r=>Lt.merge(t,r),t.pick=r=>Lt.pick(t,r),t.omit=r=>Lt.omit(t,r),t.partial=(...r)=>Lt.partial(ML,t,r[0]),t.required=(...r)=>Lt.required(DL,t,r[0])});function re(t,e){let r={type:"object",get shape(){return Lt.assignProp(this,"shape",{...t}),this.shape},...Lt.normalizeParams(e)};return new CL(r)}function ai(t,e){return new CL({type:"object",get shape(){return Lt.assignProp(this,"shape",{...t}),this.shape},catchall:or(),...Lt.normalizeParams(e)})}var NL=X("ZodUnion",(t,e)=>{gL.init(t,e),Kt.init(t,e),t.options=e.options});function Vt(t,e){return new NL({type:"union",options:t,...Lt.normalizeParams(e)})}var cfe=X("ZodDiscriminatedUnion",(t,e)=>{NL.init(t,e),wde.init(t,e)});function AL(t,e,r){return new cfe({type:"union",options:e,discriminator:t,...Lt.normalizeParams(r)})}var ufe=X("ZodIntersection",(t,e)=>{Ede.init(t,e),Kt.init(t,e)});function $$(t,e){return new ufe({type:"intersection",left:t,right:e})}var lfe=X("ZodRecord",(t,e)=>{$de.init(t,e),Kt.init(t,e),t.keyType=e.keyType,t.valueType=e.valueType});function cr(t,e,r){return new lfe({type:"record",keyType:t,valueType:e,...Lt.normalizeParams(r)})}var d$=X("ZodEnum",(t,e)=>{kde.init(t,e),Kt.init(t,e),t.enum=e.entries,t.options=Object.values(e.entries);let r=new Set(Object.keys(e.entries));t.extract=(n,i)=>{let s={};for(let a of n)if(r.has(a))s[a]=e.entries[a];else throw new Error(`Key ${a} not found in enum`);return new d$({...e,checks:[],...Lt.normalizeParams(i),entries:s})},t.exclude=(n,i)=>{let s={...e.entries};for(let a of n)if(r.has(a))delete s[a];else throw new Error(`Key ${a} not found in enum`);return new d$({...e,checks:[],...Lt.normalizeParams(i),entries:s})}});function Nr(t,e){let r=Array.isArray(t)?Object.fromEntries(t.map(n=>[n,n])):t;return new d$({type:"enum",entries:r,...Lt.normalizeParams(e)})}var dfe=X("ZodLiteral",(t,e)=>{Tde.init(t,e),Kt.init(t,e),t.values=new Set(e.values),Object.defineProperty(t,"value",{get(){if(e.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return e.values[0]}})});function Se(t,e){return new dfe({type:"literal",values:Array.isArray(t)?t:[t],...Lt.normalizeParams(e)})}var pfe=X("ZodTransform",(t,e)=>{Ide.init(t,e),Kt.init(t,e),t._zod.parse=(r,n)=>{r.addIssue=s=>{if(typeof s=="string")r.issues.push(Lt.issue(s,r.value,e));else{let a=s;a.fatal&&(a.continue=!1),a.code??(a.code="custom"),a.input??(a.input=r.value),a.inst??(a.inst=t),a.continue??(a.continue=!0),r.issues.push(Lt.issue(a))}};let i=e.transform(r.value,r);return i instanceof Promise?i.then(s=>(r.value=s,r)):(r.value=i,r)}});function jL(t){return new pfe({type:"transform",transform:t})}var ML=X("ZodOptional",(t,e)=>{Ode.init(t,e),Kt.init(t,e),t.unwrap=()=>t._zod.def.innerType});function be(t){return new ML({type:"optional",innerType:t})}var ffe=X("ZodNullable",(t,e)=>{Rde.init(t,e),Kt.init(t,e),t.unwrap=()=>t._zod.def.innerType});function uU(t){return new ffe({type:"nullable",innerType:t})}var mfe=X("ZodDefault",(t,e)=>{Pde.init(t,e),Kt.init(t,e),t.unwrap=()=>t._zod.def.innerType,t.removeDefault=t.unwrap});function hfe(t,e){return new mfe({type:"default",innerType:t,get defaultValue(){return typeof e=="function"?e():e}})}var gfe=X("ZodPrefault",(t,e)=>{Cde.init(t,e),Kt.init(t,e),t.unwrap=()=>t._zod.def.innerType});function vfe(t,e){return new gfe({type:"prefault",innerType:t,get defaultValue(){return typeof e=="function"?e():e}})}var DL=X("ZodNonOptional",(t,e)=>{Nde.init(t,e),Kt.init(t,e),t.unwrap=()=>t._zod.def.innerType});function yfe(t,e){return new DL({type:"nonoptional",innerType:t,...Lt.normalizeParams(e)})}var _fe=X("ZodCatch",(t,e)=>{Ade.init(t,e),Kt.init(t,e),t.unwrap=()=>t._zod.def.innerType,t.removeCatch=t.unwrap});function bfe(t,e){return new _fe({type:"catch",innerType:t,catchValue:typeof e=="function"?e:()=>e})}var Sfe=X("ZodPipe",(t,e)=>{jde.init(t,e),Kt.init(t,e),t.in=e.in,t.out=e.out});function p$(t,e){return new Sfe({type:"pipe",in:t,out:e})}var xfe=X("ZodReadonly",(t,e)=>{Mde.init(t,e),Kt.init(t,e)});function wfe(t){return new xfe({type:"readonly",innerType:t})}var zL=X("ZodCustom",(t,e)=>{Dde.init(t,e),Kt.init(t,e)});function Efe(t,e){let r=new cn({check:"custom",...Lt.normalizeParams(e)});return r._zod.check=t,r}function $fe(t,e){return Ppe(zL,t??(()=>!0),e)}function kfe(t,e={}){return Cpe(zL,t,e)}function Tfe(t,e){let r=Efe(n=>(n.addIssue=i=>{if(typeof i=="string")n.issues.push(Lt.issue(i,n.value,r._zod.def));else{let s=i;s.fatal&&(s.continue=!1),s.code??(s.code="custom"),s.input??(s.input=n.value),s.inst??(s.inst=r),s.continue??(s.continue=!r._zod.def.abort),n.issues.push(Lt.issue(s))}},t(n.value,n)),e);return r}function UL(t,e){return p$(jL(t),e)}ts(Lde());var k$="io.modelcontextprotocol/related-task",Rg="2.0",Ii=$fe(t=>t!==null&&(typeof t=="object"||typeof t=="function")),LL=Vt([G(),At().int()]),qL=G(),Ife=ai({ttl:Vt([At(),PL()]).optional(),pollInterval:At().optional()}),T$=ai({taskId:G()}),Ofe=ai({progressToken:LL.optional(),[k$]:T$.optional()}),un=ai({task:Ife.optional(),_meta:Ofe.optional()}),wr=re({method:G(),params:un.optional()}),za=ai({_meta:re({[k$]:be(T$)}).passthrough().optional()}),Un=re({method:G(),params:za.optional()}),Ar=ai({_meta:ai({[k$]:T$.optional()}).optional()}),Pg=Vt([G(),At().int()]),Rfe=re({jsonrpc:Se(Rg),id:Pg,...wr.shape}).strict();var Pfe=re({jsonrpc:Se(Rg),...Un.shape}).strict();var Cfe=re({jsonrpc:Se(Rg),id:Pg,result:Ar}).strict();var lU;(function(t){t[t.ConnectionClosed=-32e3]="ConnectionClosed",t[t.RequestTimeout=-32001]="RequestTimeout",t[t.ParseError=-32700]="ParseError",t[t.InvalidRequest=-32600]="InvalidRequest",t[t.MethodNotFound=-32601]="MethodNotFound",t[t.InvalidParams=-32602]="InvalidParams",t[t.InternalError=-32603]="InternalError",t[t.UrlElicitationRequired=-32042]="UrlElicitationRequired"})(lU||(lU={}));var Nfe=re({jsonrpc:Se(Rg),id:Pg,error:re({code:At().int(),message:G(),data:be(or())})}).strict();var GRe=Vt([Rfe,Pfe,Cfe,Nfe]),FL=Ar.strict(),Afe=za.extend({requestId:Pg,reason:G().optional()}),ZL=Un.extend({method:Se("notifications/cancelled"),params:Afe}),jfe=re({src:G(),mimeType:G().optional(),sizes:ot(G()).optional()}),Gd=re({icons:ot(jfe).optional()}),Mc=re({name:G(),title:G().optional()}),HL=Mc.extend({...Mc.shape,...Gd.shape,version:G(),websiteUrl:G().optional()}),Mfe=$$(re({applyDefaults:Cr().optional()}),cr(G(),or())),Dfe=UL(t=>t&&typeof t=="object"&&!Array.isArray(t)&&Object.keys(t).length===0?{form:{}}:t,$$(re({form:Mfe.optional(),url:Ii.optional()}),cr(G(),or()).optional())),zfe=re({list:be(re({}).passthrough()),cancel:be(re({}).passthrough()),requests:be(re({sampling:be(re({createMessage:be(re({}).passthrough())}).passthrough()),elicitation:be(re({create:be(re({}).passthrough())}).passthrough())}).passthrough())}).passthrough(),Ufe=re({list:be(re({}).passthrough()),cancel:be(re({}).passthrough()),requests:be(re({tools:be(re({call:be(re({}).passthrough())}).passthrough())}).passthrough())}).passthrough(),Lfe=re({experimental:cr(G(),Ii).optional(),sampling:re({context:Ii.optional(),tools:Ii.optional()}).optional(),elicitation:Dfe.optional(),roots:re({listChanged:Cr().optional()}).optional(),tasks:be(zfe)}),qfe=un.extend({protocolVersion:G(),capabilities:Lfe,clientInfo:HL}),Ffe=wr.extend({method:Se("initialize"),params:qfe}),Zfe=re({experimental:cr(G(),Ii).optional(),logging:Ii.optional(),completions:Ii.optional(),prompts:be(re({listChanged:be(Cr())})),resources:re({subscribe:Cr().optional(),listChanged:Cr().optional()}).optional(),tools:re({listChanged:Cr().optional()}).optional(),tasks:be(Ufe)}).passthrough(),Hfe=Ar.extend({protocolVersion:G(),capabilities:Zfe,serverInfo:HL,instructions:G().optional()}),Bfe=Un.extend({method:Se("notifications/initialized")}),BL=wr.extend({method:Se("ping")}),Vfe=re({progress:At(),total:be(At()),message:be(G())}),Gfe=re({...za.shape,...Vfe.shape,progressToken:LL}),VL=Un.extend({method:Se("notifications/progress"),params:Gfe}),Wfe=un.extend({cursor:qL.optional()}),Wd=wr.extend({params:Wfe.optional()}),Kd=Ar.extend({nextCursor:be(qL)}),Jd=re({taskId:G(),status:Nr(["working","input_required","completed","failed","cancelled"]),ttl:Vt([At(),PL()]),createdAt:G(),lastUpdatedAt:G(),pollInterval:be(At()),statusMessage:be(G())}),GL=Ar.extend({task:Jd}),Kfe=za.merge(Jd),WL=Un.extend({method:Se("notifications/tasks/status"),params:Kfe}),KL=wr.extend({method:Se("tasks/get"),params:un.extend({taskId:G()})}),JL=Ar.merge(Jd),XL=wr.extend({method:Se("tasks/result"),params:un.extend({taskId:G()})}),YL=Wd.extend({method:Se("tasks/list")}),QL=Kd.extend({tasks:ot(Jd)}),WRe=wr.extend({method:Se("tasks/cancel"),params:un.extend({taskId:G()})}),KRe=Ar.merge(Jd),e6=re({uri:G(),mimeType:be(G()),_meta:cr(G(),or()).optional()}),t6=e6.extend({text:G()}),I$=G().refine(t=>{try{return atob(t),!0}catch{return!1}},{message:"Invalid Base64 string"}),r6=e6.extend({blob:I$}),Fc=re({audience:ot(Nr(["user","assistant"])).optional(),priority:At().min(0).max(1).optional(),lastModified:_L.datetime({offset:!0}).optional()}),n6=re({...Mc.shape,...Gd.shape,uri:G(),description:be(G()),mimeType:be(G()),annotations:Fc.optional(),_meta:be(ai({}))}),Jfe=re({...Mc.shape,...Gd.shape,uriTemplate:G(),description:be(G()),mimeType:be(G()),annotations:Fc.optional(),_meta:be(ai({}))}),Xfe=Wd.extend({method:Se("resources/list")}),Yfe=Kd.extend({resources:ot(n6)}),Qfe=Wd.extend({method:Se("resources/templates/list")}),eme=Kd.extend({resourceTemplates:ot(Jfe)}),O$=un.extend({uri:G()}),tme=O$,rme=wr.extend({method:Se("resources/read"),params:tme}),nme=Ar.extend({contents:ot(Vt([t6,r6]))}),ime=Un.extend({method:Se("notifications/resources/list_changed")}),sme=O$,ame=wr.extend({method:Se("resources/subscribe"),params:sme}),ome=O$,cme=wr.extend({method:Se("resources/unsubscribe"),params:ome}),ume=za.extend({uri:G()}),lme=Un.extend({method:Se("notifications/resources/updated"),params:ume}),dme=re({name:G(),description:be(G()),required:be(Cr())}),pme=re({...Mc.shape,...Gd.shape,description:be(G()),arguments:be(ot(dme)),_meta:be(ai({}))}),fme=Wd.extend({method:Se("prompts/list")}),mme=Kd.extend({prompts:ot(pme)}),hme=un.extend({name:G(),arguments:cr(G(),G()).optional()}),gme=wr.extend({method:Se("prompts/get"),params:hme}),R$=re({type:Se("text"),text:G(),annotations:Fc.optional(),_meta:cr(G(),or()).optional()}),P$=re({type:Se("image"),data:I$,mimeType:G(),annotations:Fc.optional(),_meta:cr(G(),or()).optional()}),C$=re({type:Se("audio"),data:I$,mimeType:G(),annotations:Fc.optional(),_meta:cr(G(),or()).optional()}),vme=re({type:Se("tool_use"),name:G(),id:G(),input:re({}).passthrough(),_meta:be(re({}).passthrough())}).passthrough(),yme=re({type:Se("resource"),resource:Vt([t6,r6]),annotations:Fc.optional(),_meta:cr(G(),or()).optional()}),_me=n6.extend({type:Se("resource_link")}),N$=Vt([R$,P$,C$,_me,yme]),bme=re({role:Nr(["user","assistant"]),content:N$}),Sme=Ar.extend({description:be(G()),messages:ot(bme)}),xme=Un.extend({method:Se("notifications/prompts/list_changed")}),wme=re({title:G().optional(),readOnlyHint:Cr().optional(),destructiveHint:Cr().optional(),idempotentHint:Cr().optional(),openWorldHint:Cr().optional()}),Eme=re({taskSupport:Nr(["required","optional","forbidden"]).optional()}),i6=re({...Mc.shape,...Gd.shape,description:G().optional(),inputSchema:re({type:Se("object"),properties:cr(G(),Ii).optional(),required:ot(G()).optional()}).catchall(or()),outputSchema:re({type:Se("object"),properties:cr(G(),Ii).optional(),required:ot(G()).optional()}).catchall(or()).optional(),annotations:be(wme),execution:be(Eme),_meta:cr(G(),or()).optional()}),$me=Wd.extend({method:Se("tools/list")}),kme=Kd.extend({tools:ot(i6)}),s6=Ar.extend({content:ot(N$).default([]),structuredContent:cr(G(),or()).optional(),isError:be(Cr())}),JRe=s6.or(Ar.extend({toolResult:or()})),Tme=un.extend({name:G(),arguments:be(cr(G(),or()))}),Ime=wr.extend({method:Se("tools/call"),params:Tme}),Ome=Un.extend({method:Se("notifications/tools/list_changed")}),a6=Nr(["debug","info","notice","warning","error","critical","alert","emergency"]),Rme=un.extend({level:a6}),Pme=wr.extend({method:Se("logging/setLevel"),params:Rme}),Cme=za.extend({level:a6,logger:G().optional(),data:or()}),Nme=Un.extend({method:Se("notifications/message"),params:Cme}),Ame=re({name:G().optional()}),jme=re({hints:be(ot(Ame)),costPriority:be(At().min(0).max(1)),speedPriority:be(At().min(0).max(1)),intelligencePriority:be(At().min(0).max(1))}),Mme=re({mode:be(Nr(["auto","required","none"]))}),Dme=re({type:Se("tool_result"),toolUseId:G().describe("The unique identifier for the corresponding tool call."),content:ot(N$).default([]),structuredContent:re({}).passthrough().optional(),isError:be(Cr()),_meta:be(re({}).passthrough())}).passthrough(),zme=AL("type",[R$,P$,C$]),pg=AL("type",[R$,P$,C$,vme,Dme]),Ume=re({role:Nr(["user","assistant"]),content:Vt([pg,ot(pg)]),_meta:be(re({}).passthrough())}).passthrough(),Lme=un.extend({messages:ot(Ume),modelPreferences:jme.optional(),systemPrompt:G().optional(),includeContext:Nr(["none","thisServer","allServers"]).optional(),temperature:At().optional(),maxTokens:At().int(),stopSequences:ot(G()).optional(),metadata:Ii.optional(),tools:be(ot(i6)),toolChoice:be(Mme)}),qme=wr.extend({method:Se("sampling/createMessage"),params:Lme}),Fme=Ar.extend({model:G(),stopReason:be(Nr(["endTurn","stopSequence","maxTokens"]).or(G())),role:Nr(["user","assistant"]),content:zme}),Zme=Ar.extend({model:G(),stopReason:be(Nr(["endTurn","stopSequence","maxTokens","toolUse"]).or(G())),role:Nr(["user","assistant"]),content:Vt([pg,ot(pg)])}),Hme=re({type:Se("boolean"),title:G().optional(),description:G().optional(),default:Cr().optional()}),Bme=re({type:Se("string"),title:G().optional(),description:G().optional(),minLength:At().optional(),maxLength:At().optional(),format:Nr(["email","uri","date","date-time"]).optional(),default:G().optional()}),Vme=re({type:Nr(["number","integer"]),title:G().optional(),description:G().optional(),minimum:At().optional(),maximum:At().optional(),default:At().optional()}),Gme=re({type:Se("string"),title:G().optional(),description:G().optional(),enum:ot(G()),default:G().optional()}),Wme=re({type:Se("string"),title:G().optional(),description:G().optional(),oneOf:ot(re({const:G(),title:G()})),default:G().optional()}),Kme=re({type:Se("string"),title:G().optional(),description:G().optional(),enum:ot(G()),enumNames:ot(G()).optional(),default:G().optional()}),Jme=Vt([Gme,Wme]),Xme=re({type:Se("array"),title:G().optional(),description:G().optional(),minItems:At().optional(),maxItems:At().optional(),items:re({type:Se("string"),enum:ot(G())}),default:ot(G()).optional()}),Yme=re({type:Se("array"),title:G().optional(),description:G().optional(),minItems:At().optional(),maxItems:At().optional(),items:re({anyOf:ot(re({const:G(),title:G()}))}),default:ot(G()).optional()}),Qme=Vt([Xme,Yme]),ehe=Vt([Kme,Jme,Qme]),the=Vt([ehe,Hme,Bme,Vme]),rhe=un.extend({mode:Se("form").optional(),message:G(),requestedSchema:re({type:Se("object"),properties:cr(G(),the),required:ot(G()).optional()})}),nhe=un.extend({mode:Se("url"),message:G(),elicitationId:G(),url:G().url()}),ihe=Vt([rhe,nhe]),she=wr.extend({method:Se("elicitation/create"),params:ihe}),ahe=za.extend({elicitationId:G()}),ohe=Un.extend({method:Se("notifications/elicitation/complete"),params:ahe}),che=Ar.extend({action:Nr(["accept","decline","cancel"]),content:UL(t=>t===null?void 0:t,cr(G(),Vt([G(),At(),Cr(),ot(G())])).optional())}),uhe=re({type:Se("ref/resource"),uri:G()}),lhe=re({type:Se("ref/prompt"),name:G()}),dhe=un.extend({ref:Vt([lhe,uhe]),argument:re({name:G(),value:G()}),context:re({arguments:cr(G(),G()).optional()}).optional()}),phe=wr.extend({method:Se("completion/complete"),params:dhe});var fhe=Ar.extend({completion:ai({values:ot(G()).max(100),total:be(At().int()),hasMore:be(Cr())})}),mhe=re({uri:G().startsWith("file://"),name:G().optional(),_meta:cr(G(),or()).optional()}),hhe=wr.extend({method:Se("roots/list")}),ghe=Ar.extend({roots:ot(mhe)}),vhe=Un.extend({method:Se("notifications/roots/list_changed")}),XRe=Vt([BL,Ffe,phe,Pme,gme,fme,Xfe,Qfe,rme,ame,cme,Ime,$me,KL,XL,YL]),YRe=Vt([ZL,VL,Bfe,vhe,WL]),QRe=Vt([FL,Fme,Zme,che,ghe,JL,QL,GL]),ePe=Vt([BL,qme,she,hhe,KL,XL,YL]),tPe=Vt([ZL,VL,Nme,lme,ime,Ome,xme,WL,ohe]),rPe=Vt([FL,Hfe,fhe,Sme,mme,Yfe,eme,nme,s6,kme,JL,QL,GL]);var nPe=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");var iPe=pU(nae(),1),sPe=pU(Xae(),1);var dU;(function(t){t.Completable="McpCompletable"})(dU||(dU={}));function o6({prompt:t,options:e}){let{systemPrompt:r,settingSources:n,sandbox:i,...s}=e??{},a,o;r===void 0?a="":typeof r=="string"?a=r:r.type==="preset"&&(o=r.append);let c=s.pathToClaudeCodeExecutable;if(!c){let Z=(0,$U.fileURLToPath)(yhe.url),J=(0,GE.join)(Z,"..");c=(0,GE.join)(J,"cli.js")}process.env.CLAUDE_AGENT_SDK_VERSION="0.1.76";let{abortController:u=TU(),additionalDirectories:l=[],agents:d,allowedTools:p=[],betas:f,canUseTool:h,continue:y,cwd:g,disallowedTools:m=[],tools:_,env:v,executable:b=ZU()?"bun":"node",executableArgs:x=[],extraArgs:S={},fallbackModel:w,enableFileCheckpointing:k,forkSession:R,hooks:j,includePartialMessages:M,persistSession:L,maxThinkingTokens:B,maxTurns:U,maxBudgetUsd:Y,mcpServers:me,model:et,outputFormat:ht,permissionMode:fe="default",allowDangerouslySkipPermissions:F=!1,permissionPromptToolName:I,plugins:D,resume:C,resumeSessionAt:E,stderr:T,strictMcpConfig:N}=s,W=ht?.type==="json_schema"?ht.schema:void 0,K=v;if(K||(K={...process.env}),K.CLAUDE_CODE_ENTRYPOINT||(K.CLAUDE_CODE_ENTRYPOINT="sdk-ts"),k&&(K.CLAUDE_CODE_ENABLE_SDK_FILE_CHECKPOINTING="true"),!c)throw new Error("pathToClaudeCodeExecutable is required");let pe={},ce=new Map;if(me)for(let[Z,J]of Object.entries(me))J.type==="sdk"&&"instance"in J?(ce.set(Z,J.instance),pe[Z]={type:"sdk",name:Z}):pe[Z]=J;let je=typeof t=="string",O=new KE({abortController:u,additionalDirectories:l,betas:f,cwd:g,executable:b,executableArgs:x,extraArgs:S,pathToClaudeCodeExecutable:c,env:K,forkSession:R,stderr:T,maxThinkingTokens:B,maxTurns:U,maxBudgetUsd:Y,model:et,fallbackModel:w,jsonSchema:W,permissionMode:fe,allowDangerouslySkipPermissions:F,permissionPromptToolName:I,continueConversation:y,resume:C,resumeSessionAt:E,settingSources:n??[],allowedTools:p,disallowedTools:m,tools:_,mcpServers:pe,strictMcpConfig:N,canUseTool:!!h,hooks:!!j,includePartialMessages:M,persistSession:L,plugins:D,sandbox:i,spawnClaudeCodeProcess:s.spawnClaudeCodeProcess}),P={systemPrompt:a,appendSystemPrompt:o,agents:d},z=new YE(O,je,h,j,u,ce,W,P);return typeof t=="string"?O.write(JSON.stringify({type:"user",session_id:"",message:{role:"user",content:[{type:"text",text:t}]},parent_tool_use_id:null})+` `):z.streamInput(t),z}var Cg=class{dbManager;sessionManager;constructor(e,r){this.dbManager=e,this.sessionManager=r}async startSession(e,r){let n={lastCwd:void 0},i=this.findClaudeExecutable(),s=this.getModelId(),a=["Bash","Read","Write","Edit","Grep","Glob","WebFetch","WebSearch","Task","NotebookEdit","AskUserQuestion","TodoWrite"],o=this.createMessageGenerator(e,n),c=!!e.memorySessionId,u=c&&e.lastPromptNumber>1&&!e.forceInit;e.forceInit&&($.info("SDK","forceInit flag set, starting fresh SDK session",{sessionDbId:e.sessionDbId,previousMemorySessionId:e.memorySessionId}),e.forceInit=!1);let l=MC(),d=$m();if($.info("SDK","Starting SDK query",{sessionDbId:e.sessionDbId,contentSessionId:e.contentSessionId,memorySessionId:e.memorySessionId,hasRealMemorySessionId:c,shouldResume:u,resume_parameter:u?e.memorySessionId:"(none - fresh start)",lastPromptNumber:e.lastPromptNumber,authMethod:d}),e.lastPromptNumber>1)$.debug("SDK",`[ALIGNMENT] Resume Decision | contentSessionId=${e.contentSessionId} | memorySessionId=${e.memorySessionId} | prompt#=${e.lastPromptNumber} | hasRealMemorySessionId=${c} | shouldResume=${u} | resumeWith=${u?e.memorySessionId:"NONE"}`);else{let h=c;$.debug("SDK",`[ALIGNMENT] First Prompt (INIT) | contentSessionId=${e.contentSessionId} | prompt#=${e.lastPromptNumber} | hasStaleMemoryId=${h} | action=START_FRESH | Will capture new memorySessionId from SDK response`),h&&$.warn("SDK",`Skipping resume for INIT prompt despite existing memorySessionId=${e.memorySessionId} - SDK context was lost (worker restart or crash recovery)`)}Pr(Sm);let p=o6({prompt:o,options:{model:s,cwd:Sm,...u&&{resume:e.memorySessionId},disallowedTools:a,abortController:e.abortController,pathToClaudeCodeExecutable:i,spawnClaudeCodeProcess:$2(e.sessionDbId),env:l}});for await(let h of p){if(h.session_id&&h.session_id!==e.memorySessionId){let y=e.memorySessionId;e.memorySessionId=h.session_id,this.dbManager.getSessionStore().ensureMemorySessionIdRegistered(e.sessionDbId,h.session_id);let g=this.dbManager.getSessionStore().getSessionById(e.sessionDbId),m=g?.memory_session_id===h.session_id,_=y?`MEMORY_ID_CHANGED | sessionDbId=${e.sessionDbId} | from=${y} | to=${h.session_id} | dbVerified=${m}`:`MEMORY_ID_CAPTURED | sessionDbId=${e.sessionDbId} | memorySessionId=${h.session_id} | dbVerified=${m}`;$.info("SESSION",_,{sessionId:e.sessionDbId,memorySessionId:h.session_id,previousId:y}),m||$.error("SESSION",`MEMORY_ID_MISMATCH | sessionDbId=${e.sessionDbId} | expected=${h.session_id} | got=${g?.memory_session_id}`,{sessionId:e.sessionDbId}),$.debug("SDK",`[ALIGNMENT] ${y?"Updated":"Captured"} | contentSessionId=${e.contentSessionId} \u2192 memorySessionId=${h.session_id} | Future prompts will resume with this ID`)}if(h.type==="assistant"){let y=h.message.content,g=Array.isArray(y)?y.filter(S=>S.type==="text").map(S=>S.text).join(` -`):typeof y=="string"?y:"";if(g.includes("prompt is too long")||g.includes("context window")){$.error("SDK","Context overflow detected - terminating session"),e.abortController.abort();return}let m=g.length,_=e.cumulativeInputTokens+e.cumulativeOutputTokens,v=h.message.usage;v&&(e.cumulativeInputTokens+=v.input_tokens||0,e.cumulativeOutputTokens+=v.output_tokens||0,v.cache_creation_input_tokens&&(e.cumulativeInputTokens+=v.cache_creation_input_tokens),$.debug("SDK","Token usage captured",{sessionId:e.sessionDbId,inputTokens:v.input_tokens,outputTokens:v.output_tokens,cacheCreation:v.cache_creation_input_tokens||0,cacheRead:v.cache_read_input_tokens||0,cumulativeInput:e.cumulativeInputTokens,cumulativeOutput:e.cumulativeOutputTokens}));let b=e.cumulativeInputTokens+e.cumulativeOutputTokens-_,x=e.earliestPendingTimestamp;if(m>0){let S=m>100?g.substring(0,100)+"...":g;$.dataOut("SDK",`Response received (${m} chars)`,{sessionId:e.sessionDbId,promptNumber:e.lastPromptNumber},S)}if(typeof g=="string"&&g.includes("Prompt is too long"))throw new Error("Claude session context overflow: prompt is too long");await ni(g,e,this.dbManager,this.sessionManager,r,b,x,"SDK",n.lastCwd)}h.type==="result"&&h.subtype}let f=Date.now()-e.startTime;$.success("SDK","Agent completed",{sessionId:e.sessionDbId,duration:`${(f/1e3).toFixed(1)}s`})}async*createMessageGenerator(e,r){let n=Ve.getInstance().getActiveMode(),i=e.lastPromptNumber===1;$.info("SDK","Creating message generator",{sessionDbId:e.sessionDbId,contentSessionId:e.contentSessionId,lastPromptNumber:e.lastPromptNumber,isInitPrompt:i,promptType:i?"INIT":"CONTINUATION"});let s=i?hc(e.project,e.contentSessionId,e.userPrompt,n):yc(e.userPrompt,e.lastPromptNumber,e.contentSessionId,n);e.conversationHistory.push({role:"user",content:s}),yield{type:"user",message:{role:"user",content:s},session_id:e.contentSessionId,parent_tool_use_id:null,isSynthetic:!0};for await(let a of this.sessionManager.getMessageIterator(e.sessionDbId))if(e.processingMessageIds.push(a._persistentId),a.cwd&&(r.lastCwd=a.cwd),a.type==="observation"){a.prompt_number!==void 0&&(e.lastPromptNumber=a.prompt_number);let o=gc({id:0,tool_name:a.tool_name,tool_input:JSON.stringify(a.tool_input),tool_output:JSON.stringify(a.tool_response),created_at_epoch:Date.now(),cwd:a.cwd});e.conversationHistory.push({role:"user",content:o}),yield{type:"user",message:{role:"user",content:o},session_id:e.contentSessionId,parent_tool_use_id:null,isSynthetic:!0}}else if(a.type==="summarize"){let o=vc({id:e.sessionDbId,memory_session_id:e.memorySessionId,project:e.project,user_prompt:e.userPrompt,last_assistant_message:a.last_assistant_message||""},n);e.conversationHistory.push({role:"user",content:o}),yield{type:"user",message:{role:"user",content:o},session_id:e.contentSessionId,parent_tool_use_id:null,isSynthetic:!0}}}findClaudeExecutable(){let e=Ae.loadFromFile(pr);if(e.CLAUDE_CODE_PATH){let{existsSync:r}=require("fs");if(!r(e.CLAUDE_CODE_PATH))throw new Error(`CLAUDE_CODE_PATH is set to "${e.CLAUDE_CODE_PATH}" but the file does not exist.`);return e.CLAUDE_CODE_PATH}try{let r=(0,c6.execSync)(process.platform==="win32"?"where claude":"which claude",{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"]}).trim().split(` +`):typeof y=="string"?y:"";if(g.includes("prompt is too long")||g.includes("context window")){$.error("SDK","Context overflow detected - terminating session"),e.abortController.abort();return}let m=g.length,_=e.cumulativeInputTokens+e.cumulativeOutputTokens,v=h.message.usage;v&&(e.cumulativeInputTokens+=v.input_tokens||0,e.cumulativeOutputTokens+=v.output_tokens||0,v.cache_creation_input_tokens&&(e.cumulativeInputTokens+=v.cache_creation_input_tokens),$.debug("SDK","Token usage captured",{sessionId:e.sessionDbId,inputTokens:v.input_tokens,outputTokens:v.output_tokens,cacheCreation:v.cache_creation_input_tokens||0,cacheRead:v.cache_read_input_tokens||0,cumulativeInput:e.cumulativeInputTokens,cumulativeOutput:e.cumulativeOutputTokens}));let b=e.cumulativeInputTokens+e.cumulativeOutputTokens-_,x=e.earliestPendingTimestamp;if(m>0){let S=m>100?g.substring(0,100)+"...":g;$.dataOut("SDK",`Response received (${m} chars)`,{sessionId:e.sessionDbId,promptNumber:e.lastPromptNumber},S)}if(typeof g=="string"&&g.includes("Prompt is too long"))throw new Error("Claude session context overflow: prompt is too long");if(typeof g=="string"&&g.includes("Invalid API key"))throw new Error("Invalid API key: check your API key configuration in ~/.claude-mem/settings.json or ~/.claude-mem/.env");await ni(g,e,this.dbManager,this.sessionManager,r,b,x,"SDK",n.lastCwd)}h.type==="result"&&h.subtype}let f=Date.now()-e.startTime;$.success("SDK","Agent completed",{sessionId:e.sessionDbId,duration:`${(f/1e3).toFixed(1)}s`})}async*createMessageGenerator(e,r){let n=Ve.getInstance().getActiveMode(),i=e.lastPromptNumber===1;$.info("SDK","Creating message generator",{sessionDbId:e.sessionDbId,contentSessionId:e.contentSessionId,lastPromptNumber:e.lastPromptNumber,isInitPrompt:i,promptType:i?"INIT":"CONTINUATION"});let s=i?hc(e.project,e.contentSessionId,e.userPrompt,n):yc(e.userPrompt,e.lastPromptNumber,e.contentSessionId,n);e.conversationHistory.push({role:"user",content:s}),yield{type:"user",message:{role:"user",content:s},session_id:e.contentSessionId,parent_tool_use_id:null,isSynthetic:!0};for await(let a of this.sessionManager.getMessageIterator(e.sessionDbId))if(e.processingMessageIds.push(a._persistentId),a.cwd&&(r.lastCwd=a.cwd),a.type==="observation"){a.prompt_number!==void 0&&(e.lastPromptNumber=a.prompt_number);let o=gc({id:0,tool_name:a.tool_name,tool_input:JSON.stringify(a.tool_input),tool_output:JSON.stringify(a.tool_response),created_at_epoch:Date.now(),cwd:a.cwd});e.conversationHistory.push({role:"user",content:o}),yield{type:"user",message:{role:"user",content:o},session_id:e.contentSessionId,parent_tool_use_id:null,isSynthetic:!0}}else if(a.type==="summarize"){let o=vc({id:e.sessionDbId,memory_session_id:e.memorySessionId,project:e.project,user_prompt:e.userPrompt,last_assistant_message:a.last_assistant_message||""},n);e.conversationHistory.push({role:"user",content:o}),yield{type:"user",message:{role:"user",content:o},session_id:e.contentSessionId,parent_tool_use_id:null,isSynthetic:!0}}}findClaudeExecutable(){let e=Ae.loadFromFile(pr);if(e.CLAUDE_CODE_PATH){let{existsSync:r}=require("fs");if(!r(e.CLAUDE_CODE_PATH))throw new Error(`CLAUDE_CODE_PATH is set to "${e.CLAUDE_CODE_PATH}" but the file does not exist.`);return e.CLAUDE_CODE_PATH}try{let r=(0,c6.execSync)(process.platform==="win32"?"where claude":"which claude",{encoding:"utf8",windowsHide:!0,stdio:["ignore","pipe","ignore"]}).trim().split(` `)[0].trim();if(r)return r}catch(r){$.debug("SDK","Claude executable auto-detection failed",{},r)}throw new Error(`Claude executable not found. Please either: 1. Add "claude" to your system PATH, or 2. Set CLAUDE_CODE_PATH in ~/.claude-mem/settings.json`)}getModelId(){let e=l6.default.join((0,u6.homedir)(),".claude-mem","settings.json");return Ae.loadFromFile(e).CLAUDE_MEM_MODEL}};var Ag=nt(require("path"),1),jg=require("os");_e();lr();Gr();var _he="https://generativelanguage.googleapis.com/v1beta/models",bhe={"gemini-2.5-flash-lite":10,"gemini-2.5-flash":10,"gemini-2.5-pro":5,"gemini-2.0-flash":15,"gemini-2.0-flash-lite":30,"gemini-3-flash-preview":5},d6=0;async function She(t,e){if(!e)return;let r=bhe[t]||5,n=Math.ceil(6e4/r)+100,s=Date.now()-d6;if(ssetTimeout(o,a))}d6=Date.now()}var Ng=class{dbManager;sessionManager;fallbackAgent=null;constructor(e,r){this.dbManager=e,this.sessionManager=r}setFallbackAgent(e){this.fallbackAgent=e}async startSession(e,r){try{let{apiKey:n,model:i,rateLimitingEnabled:s}=this.getGeminiConfig();if(!n)throw new Error("Gemini API key not configured. Set CLAUDE_MEM_GEMINI_API_KEY in settings or GEMINI_API_KEY environment variable.");if(!e.memorySessionId){let d=`gemini-${e.contentSessionId}-${Date.now()}`;e.memorySessionId=d,this.dbManager.getSessionStore().updateMemorySessionId(e.sessionDbId,d),$.info("SESSION",`MEMORY_ID_GENERATED | sessionDbId=${e.sessionDbId} | provider=Gemini`)}let a=Ve.getInstance().getActiveMode(),o=e.lastPromptNumber===1?hc(e.project,e.contentSessionId,e.userPrompt,a):yc(e.userPrompt,e.lastPromptNumber,e.contentSessionId,a);e.conversationHistory.push({role:"user",content:o});let c=await this.queryGeminiMultiTurn(e.conversationHistory,n,i,s);if(c.content){e.conversationHistory.push({role:"assistant",content:c.content});let d=c.tokensUsed||0;e.cumulativeInputTokens+=Math.floor(d*.7),e.cumulativeOutputTokens+=Math.floor(d*.3),await ni(c.content,e,this.dbManager,this.sessionManager,r,d,null,"Gemini")}else $.error("SDK","Empty Gemini init response - session may lack context",{sessionId:e.sessionDbId,model:i});let u;for await(let d of this.sessionManager.getMessageIterator(e.sessionDbId)){e.processingMessageIds.push(d._persistentId),d.cwd&&(u=d.cwd);let p=e.earliestPendingTimestamp;if(d.type==="observation"){if(d.prompt_number!==void 0&&(e.lastPromptNumber=d.prompt_number),!e.memorySessionId)throw new Error("Cannot process observations: memorySessionId not yet captured. This session may need to be reinitialized.");let f=gc({id:0,tool_name:d.tool_name,tool_input:JSON.stringify(d.tool_input),tool_output:JSON.stringify(d.tool_response),created_at_epoch:p??Date.now(),cwd:d.cwd});e.conversationHistory.push({role:"user",content:f});let h=await this.queryGeminiMultiTurn(e.conversationHistory,n,i,s),y=0;h.content&&(e.conversationHistory.push({role:"assistant",content:h.content}),y=h.tokensUsed||0,e.cumulativeInputTokens+=Math.floor(y*.7),e.cumulativeOutputTokens+=Math.floor(y*.3)),await ni(h.content||"",e,this.dbManager,this.sessionManager,r,y,p,"Gemini",u)}else if(d.type==="summarize"){if(!e.memorySessionId)throw new Error("Cannot process summary: memorySessionId not yet captured. This session may need to be reinitialized.");let f=vc({id:e.sessionDbId,memory_session_id:e.memorySessionId,project:e.project,user_prompt:e.userPrompt,last_assistant_message:d.last_assistant_message||""},a);e.conversationHistory.push({role:"user",content:f});let h=await this.queryGeminiMultiTurn(e.conversationHistory,n,i,s),y=0;h.content&&(e.conversationHistory.push({role:"assistant",content:h.content}),y=h.tokensUsed||0,e.cumulativeInputTokens+=Math.floor(y*.7),e.cumulativeOutputTokens+=Math.floor(y*.3)),await ni(h.content||"",e,this.dbManager,this.sessionManager,r,y,p,"Gemini",u)}}let l=Date.now()-e.startTime;$.success("SDK","Gemini agent completed",{sessionId:e.sessionDbId,duration:`${(l/1e3).toFixed(1)}s`,historyLength:e.conversationHistory.length})}catch(n){if(Td(n))throw $.warn("SDK","Gemini agent aborted",{sessionId:e.sessionDbId}),n;if(kd(n)&&this.fallbackAgent)return $.warn("SDK","Gemini API failed, falling back to Claude SDK",{sessionDbId:e.sessionDbId,error:n instanceof Error?n.message:String(n),historyLength:e.conversationHistory.length}),this.fallbackAgent.startSession(e,r);throw $.failure("SDK","Gemini agent error",{sessionDbId:e.sessionDbId},n),n}}conversationToGeminiContents(e){return e.map(r=>({role:r.role==="assistant"?"model":"user",parts:[{text:r.content}]}))}async queryGeminiMultiTurn(e,r,n,i){let s=this.conversationToGeminiContents(e),a=e.reduce((p,f)=>p+f.content.length,0);$.debug("SDK",`Querying Gemini multi-turn (${n})`,{turns:e.length,totalChars:a});let o=`${_he}/${n}:generateContent?key=${r}`;await She(n,i);let c=await fetch(o,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contents:s,generationConfig:{temperature:.3,maxOutputTokens:4096}})});if(!c.ok){let p=await c.text();throw new Error(`Gemini API error: ${c.status} - ${p}`)}let u=await c.json();if(!u.candidates?.[0]?.content?.parts?.[0]?.text)return $.error("SDK","Empty response from Gemini"),{content:""};let l=u.candidates[0].content.parts[0].text,d=u.usageMetadata?.totalTokenCount;return{content:l,tokensUsed:d}}getGeminiConfig(){let e=Ag.default.join((0,jg.homedir)(),".claude-mem","settings.json"),r=Ae.loadFromFile(e),n=r.CLAUDE_MEM_GEMINI_API_KEY||qo("GEMINI_API_KEY")||"",i="gemini-2.5-flash",s=r.CLAUDE_MEM_GEMINI_MODEL||i,a=["gemini-2.5-flash-lite","gemini-2.5-flash","gemini-2.5-pro","gemini-2.0-flash","gemini-2.0-flash-lite","gemini-3-flash-preview"],o;a.includes(s)?o=s:($.warn("SDK",`Invalid Gemini model "${s}", falling back to ${i}`,{configured:s,validModels:a}),o=i);let c=r.CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED!=="false";return{apiKey:n,model:o,rateLimitingEnabled:c}}};function Ua(){let t=Ag.default.join((0,jg.homedir)(),".claude-mem","settings.json");return!!(Ae.loadFromFile(t).CLAUDE_MEM_GEMINI_API_KEY||qo("GEMINI_API_KEY"))}function Zc(){let t=Ag.default.join((0,jg.homedir)(),".claude-mem","settings.json");return Ae.loadFromFile(t).CLAUDE_MEM_PROVIDER==="gemini"}_e();lr();tr();Gr();var xhe="https://openrouter.ai/api/v1/chat/completions",whe=20,Ehe=1e5,$he=4,Mg=class{dbManager;sessionManager;fallbackAgent=null;constructor(e,r){this.dbManager=e,this.sessionManager=r}setFallbackAgent(e){this.fallbackAgent=e}async startSession(e,r){try{let{apiKey:n,model:i,siteUrl:s,appName:a}=this.getOpenRouterConfig();if(!n)throw new Error("OpenRouter API key not configured. Set CLAUDE_MEM_OPENROUTER_API_KEY in settings or OPENROUTER_API_KEY environment variable.");if(!e.memorySessionId){let p=`openrouter-${e.contentSessionId}-${Date.now()}`;e.memorySessionId=p,this.dbManager.getSessionStore().updateMemorySessionId(e.sessionDbId,p),$.info("SESSION",`MEMORY_ID_GENERATED | sessionDbId=${e.sessionDbId} | provider=OpenRouter`)}let o=Ve.getInstance().getActiveMode(),c=e.lastPromptNumber===1?hc(e.project,e.contentSessionId,e.userPrompt,o):yc(e.userPrompt,e.lastPromptNumber,e.contentSessionId,o);e.conversationHistory.push({role:"user",content:c});let u=await this.queryOpenRouterMultiTurn(e.conversationHistory,n,i,s,a);if(u.content){e.conversationHistory.push({role:"assistant",content:u.content});let p=u.tokensUsed||0;e.cumulativeInputTokens+=Math.floor(p*.7),e.cumulativeOutputTokens+=Math.floor(p*.3),await ni(u.content,e,this.dbManager,this.sessionManager,r,p,null,"OpenRouter",void 0)}else $.error("SDK","Empty OpenRouter init response - session may lack context",{sessionId:e.sessionDbId,model:i});let l;for await(let p of this.sessionManager.getMessageIterator(e.sessionDbId)){e.processingMessageIds.push(p._persistentId),p.cwd&&(l=p.cwd);let f=e.earliestPendingTimestamp;if(p.type==="observation"){if(p.prompt_number!==void 0&&(e.lastPromptNumber=p.prompt_number),!e.memorySessionId)throw new Error("Cannot process observations: memorySessionId not yet captured. This session may need to be reinitialized.");let h=gc({id:0,tool_name:p.tool_name,tool_input:JSON.stringify(p.tool_input),tool_output:JSON.stringify(p.tool_response),created_at_epoch:f??Date.now(),cwd:p.cwd});e.conversationHistory.push({role:"user",content:h});let y=await this.queryOpenRouterMultiTurn(e.conversationHistory,n,i,s,a),g=0;y.content&&(e.conversationHistory.push({role:"assistant",content:y.content}),g=y.tokensUsed||0,e.cumulativeInputTokens+=Math.floor(g*.7),e.cumulativeOutputTokens+=Math.floor(g*.3)),await ni(y.content||"",e,this.dbManager,this.sessionManager,r,g,f,"OpenRouter",l)}else if(p.type==="summarize"){if(!e.memorySessionId)throw new Error("Cannot process summary: memorySessionId not yet captured. This session may need to be reinitialized.");let h=vc({id:e.sessionDbId,memory_session_id:e.memorySessionId,project:e.project,user_prompt:e.userPrompt,last_assistant_message:p.last_assistant_message||""},o);e.conversationHistory.push({role:"user",content:h});let y=await this.queryOpenRouterMultiTurn(e.conversationHistory,n,i,s,a),g=0;y.content&&(e.conversationHistory.push({role:"assistant",content:y.content}),g=y.tokensUsed||0,e.cumulativeInputTokens+=Math.floor(g*.7),e.cumulativeOutputTokens+=Math.floor(g*.3)),await ni(y.content||"",e,this.dbManager,this.sessionManager,r,g,f,"OpenRouter",l)}}let d=Date.now()-e.startTime;$.success("SDK","OpenRouter agent completed",{sessionId:e.sessionDbId,duration:`${(d/1e3).toFixed(1)}s`,historyLength:e.conversationHistory.length,model:i})}catch(n){if(Td(n))throw $.warn("SDK","OpenRouter agent aborted",{sessionId:e.sessionDbId}),n;if(kd(n)&&this.fallbackAgent)return $.warn("SDK","OpenRouter API failed, falling back to Claude SDK",{sessionDbId:e.sessionDbId,error:n instanceof Error?n.message:String(n),historyLength:e.conversationHistory.length}),this.fallbackAgent.startSession(e,r);throw $.failure("SDK","OpenRouter agent error",{sessionDbId:e.sessionDbId},n),n}}estimateTokens(e){return Math.ceil(e.length/$he)}truncateHistory(e){let r=Ae.loadFromFile(pr),n=parseInt(r.CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES)||whe,i=parseInt(r.CLAUDE_MEM_OPENROUTER_MAX_TOKENS)||Ehe;if(e.length<=n&&e.reduce((c,u)=>c+this.estimateTokens(u.content),0)<=i)return e;let s=[],a=0;for(let o=e.length-1;o>=0;o--){let c=e[o],u=this.estimateTokens(c.content);if(s.length>=n||a+u>i){$.warn("SDK","Context window truncated to prevent runaway costs",{originalMessages:e.length,keptMessages:s.length,droppedMessages:o+1,estimatedTokens:a,tokenLimit:i});break}s.unshift(c),a+=u}return s}conversationToOpenAIMessages(e){return e.map(r=>({role:r.role==="assistant"?"assistant":"user",content:r.content}))}async queryOpenRouterMultiTurn(e,r,n,i,s){let a=this.truncateHistory(e),o=this.conversationToOpenAIMessages(a),c=a.reduce((h,y)=>h+y.content.length,0),u=this.estimateTokens(a.map(h=>h.content).join(""));$.debug("SDK",`Querying OpenRouter multi-turn (${n})`,{turns:a.length,totalChars:c,estimatedTokens:u});let l=await fetch(xhe,{method:"POST",headers:{Authorization:`Bearer ${r}`,"HTTP-Referer":i||"https://github.com/thedotmack/claude-mem","X-Title":s||"claude-mem","Content-Type":"application/json"},body:JSON.stringify({model:n,messages:o,temperature:.3,max_tokens:4096})});if(!l.ok){let h=await l.text();throw new Error(`OpenRouter API error: ${l.status} - ${h}`)}let d=await l.json();if(d.error)throw new Error(`OpenRouter API error: ${d.error.code} - ${d.error.message}`);if(!d.choices?.[0]?.message?.content)return $.error("SDK","Empty response from OpenRouter"),{content:""};let p=d.choices[0].message.content,f=d.usage?.total_tokens;if(f){let h=d.usage?.prompt_tokens||0,y=d.usage?.completion_tokens||0,g=h/1e6*3+y/1e6*15;$.info("SDK","OpenRouter API usage",{model:n,inputTokens:h,outputTokens:y,totalTokens:f,estimatedCostUSD:g.toFixed(4),messagesInContext:a.length}),f>5e4&&$.warn("SDK","High token usage detected - consider reducing context",{totalTokens:f,estimatedCost:g.toFixed(4)})}return{content:p,tokensUsed:f}}getOpenRouterConfig(){let e=pr,r=Ae.loadFromFile(e),n=r.CLAUDE_MEM_OPENROUTER_API_KEY||qo("OPENROUTER_API_KEY")||"",i=r.CLAUDE_MEM_OPENROUTER_MODEL||"xiaomi/mimo-v2-flash:free",s=r.CLAUDE_MEM_OPENROUTER_SITE_URL||"",a=r.CLAUDE_MEM_OPENROUTER_APP_NAME||"claude-mem";return{apiKey:n,model:i,siteUrl:s,appName:a}}};function La(){let t=pr;return!!(Ae.loadFromFile(t).CLAUDE_MEM_OPENROUTER_API_KEY||qo("OPENROUTER_API_KEY"))}function Hc(){let t=pr;return Ae.loadFromFile(t).CLAUDE_MEM_PROVIDER==="openrouter"}_e();var Dg=class{dbManager;constructor(e){this.dbManager=e}stripProjectPath(e,r){let n=`/${r}/`,i=e.indexOf(n);return i!==-1?e.substring(i+n.length):e}stripProjectPaths(e,r){if(!e)return e;try{let i=JSON.parse(e).map(s=>this.stripProjectPath(s,r));return JSON.stringify(i)}catch(n){return $.debug("WORKER","File paths is plain string, using as-is",{},n),e}}sanitizeObservation(e){return{...e,files_read:this.stripProjectPaths(e.files_read,e.project),files_modified:this.stripProjectPaths(e.files_modified,e.project)}}getObservations(e,r,n){let i=this.paginate("observations","id, memory_session_id, project, type, title, subtitle, narrative, text, facts, concepts, files_read, files_modified, prompt_number, created_at, created_at_epoch",e,r,n);return{...i,items:i.items.map(s=>this.sanitizeObservation(s))}}getSummaries(e,r,n){let i=this.dbManager.getSessionStore().db,s=` @@ -1412,7 +1412,7 @@ Tips: ORDER BY MAX(created_at_epoch) DESC `).all().map(o=>o.project);n.json({projects:a})});handleGetProcessingStatus=this.wrapHandler((r,n)=>{let i=this.sessionManager.isAnySessionProcessing(),s=this.sessionManager.getTotalActiveWork();n.json({isProcessing:i,queueDepth:s})});handleSetProcessing=this.wrapHandler((r,n)=>{this.workerService.broadcastProcessingStatus();let i=this.sessionManager.isAnySessionProcessing(),s=this.sessionManager.getTotalQueueDepth(),a=this.sessionManager.getActiveSessionCount();n.json({status:"ok",isProcessing:i,queueDepth:s,activeSessions:a})});parsePaginationParams(r){let n=parseInt(r.query.offset,10)||0,i=Math.min(parseInt(r.query.limit,10)||20,100),s=r.query.project;return{offset:n,limit:i,project:s}}handleImport=this.wrapHandler((r,n)=>{let{sessions:i,summaries:s,observations:a,prompts:o}=r.body,c={sessionsImported:0,sessionsSkipped:0,summariesImported:0,summariesSkipped:0,observationsImported:0,observationsSkipped:0,promptsImported:0,promptsSkipped:0},u=this.dbManager.getSessionStore();if(Array.isArray(i))for(let l of i)u.importSdkSession(l).imported?c.sessionsImported++:c.sessionsSkipped++;if(Array.isArray(s))for(let l of s)u.importSessionSummary(l).imported?c.summariesImported++:c.summariesSkipped++;if(Array.isArray(a))for(let l of a)u.importObservation(l).imported?c.observationsImported++:c.observationsSkipped++;if(Array.isArray(o))for(let l of o)u.importUserPrompt(l).imported?c.promptsImported++:c.promptsSkipped++;n.json({success:!0,stats:c})});handleGetPendingQueue=this.wrapHandler((r,n)=>{let{PendingMessageStore:i}=(As(),Xc(Pa)),s=new i(this.dbManager.getSessionStore().db,3),a=s.getQueueMessages(),o=s.getRecentlyProcessed(20,30),c=s.getStuckCount(300*1e3),u=s.getSessionsWithPendingMessages();n.json({queue:{messages:a,totalPending:a.filter(l=>l.status==="pending").length,totalProcessing:a.filter(l=>l.status==="processing").length,totalFailed:a.filter(l=>l.status==="failed").length,stuckCount:c},recentlyProcessed:o,sessionsWithPendingWork:u})});handleProcessPendingQueue=this.wrapHandler(async(r,n)=>{let i=Math.min(Math.max(parseInt(r.body.sessionLimit,10)||10,1),100),s=await this.workerService.processPendingQueues(i);n.json({success:!0,...s})});handleClearFailedQueue=this.wrapHandler((r,n)=>{let{PendingMessageStore:i}=(As(),Xc(Pa)),a=new i(this.dbManager.getSessionStore().db,3).clearFailed();$.info("QUEUE","Cleared failed queue messages",{clearedCount:a}),n.json({success:!0,clearedCount:a})});handleClearAllQueue=this.wrapHandler((r,n)=>{let{PendingMessageStore:i}=(As(),Xc(Pa)),a=new i(this.dbManager.getSessionStore().db,3).clearAll();$.warn("QUEUE","Cleared ALL queue messages (pending, processing, failed)",{clearedCount:a}),n.json({success:!0,clearedCount:a})})};var rv=class extends jr{constructor(r){super();this.searchManager=r}setupRoutes(r){r.get("/api/search",this.handleUnifiedSearch.bind(this)),r.get("/api/timeline",this.handleUnifiedTimeline.bind(this)),r.get("/api/decisions",this.handleDecisions.bind(this)),r.get("/api/changes",this.handleChanges.bind(this)),r.get("/api/how-it-works",this.handleHowItWorks.bind(this)),r.get("/api/search/observations",this.handleSearchObservations.bind(this)),r.get("/api/search/sessions",this.handleSearchSessions.bind(this)),r.get("/api/search/prompts",this.handleSearchPrompts.bind(this)),r.get("/api/search/by-concept",this.handleSearchByConcept.bind(this)),r.get("/api/search/by-file",this.handleSearchByFile.bind(this)),r.get("/api/search/by-type",this.handleSearchByType.bind(this)),r.get("/api/context/recent",this.handleGetRecentContext.bind(this)),r.get("/api/context/timeline",this.handleGetContextTimeline.bind(this)),r.get("/api/context/preview",this.handleContextPreview.bind(this)),r.get("/api/context/inject",this.handleContextInject.bind(this)),r.get("/api/timeline/by-query",this.handleGetTimelineByQuery.bind(this)),r.get("/api/search/help",this.handleSearchHelp.bind(this))}handleUnifiedSearch=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.search(r.query);n.json(i)});handleUnifiedTimeline=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.timeline(r.query);n.json(i)});handleDecisions=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.decisions(r.query);n.json(i)});handleChanges=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.changes(r.query);n.json(i)});handleHowItWorks=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.howItWorks(r.query);n.json(i)});handleSearchObservations=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.searchObservations(r.query);n.json(i)});handleSearchSessions=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.searchSessions(r.query);n.json(i)});handleSearchPrompts=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.searchUserPrompts(r.query);n.json(i)});handleSearchByConcept=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.findByConcept(r.query);n.json(i)});handleSearchByFile=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.findByFile(r.query);n.json(i)});handleSearchByType=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.findByType(r.query);n.json(i)});handleGetRecentContext=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.getRecentContext(r.query);n.json(i)});handleGetContextTimeline=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.getContextTimeline(r.query);n.json(i)});handleContextPreview=this.wrapHandler(async(r,n)=>{let i=r.query.project;if(!i){this.badRequest(n,"Project parameter is required");return}let{generateContext:s}=await Promise.resolve().then(()=>(W$(),G$)),a=`/preview/${i}`,o=await s({session_id:"preview-"+Date.now(),cwd:a},!0);n.setHeader("Content-Type","text/plain; charset=utf-8"),n.send(o)});handleContextInject=this.wrapHandler(async(r,n)=>{let i=r.query.projects||r.query.project,s=r.query.colors==="true";if(!i){this.badRequest(n,"Project(s) parameter is required");return}let a=i.split(",").map(d=>d.trim()).filter(Boolean);if(a.length===0){this.badRequest(n,"At least one project is required");return}let{generateContext:o}=await Promise.resolve().then(()=>(W$(),G$)),u=`/context/${a[a.length-1]}`,l=await o({session_id:"context-inject-"+Date.now(),cwd:u,projects:a},s);n.setHeader("Content-Type","text/plain; charset=utf-8"),n.send(l)});handleGetTimelineByQuery=this.wrapHandler(async(r,n)=>{let i=await this.searchManager.getTimelineByQuery(r.query);n.json(i)});handleSearchHelp=this.wrapHandler((r,n)=>{n.json({title:"Claude-Mem Search API",description:"HTTP API for searching persistent memory",endpoints:[{path:"/api/search/observations",method:"GET",description:"Search observations using full-text search",parameters:{query:"Search query (required)",limit:"Number of results (default: 20)",project:"Filter by project name (optional)"}},{path:"/api/search/sessions",method:"GET",description:"Search session summaries using full-text search",parameters:{query:"Search query (required)",limit:"Number of results (default: 20)"}},{path:"/api/search/prompts",method:"GET",description:"Search user prompts using full-text search",parameters:{query:"Search query (required)",limit:"Number of results (default: 20)",project:"Filter by project name (optional)"}},{path:"/api/search/by-concept",method:"GET",description:"Find observations by concept tag",parameters:{concept:"Concept tag (required): discovery, decision, bugfix, feature, refactor",limit:"Number of results (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/search/by-file",method:"GET",description:"Find observations and sessions by file path",parameters:{filePath:"File path or partial path (required)",limit:"Number of results per type (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/search/by-type",method:"GET",description:"Find observations by type",parameters:{type:"Observation type (required): discovery, decision, bugfix, feature, refactor",limit:"Number of results (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/context/recent",method:"GET",description:"Get recent session context including summaries and observations",parameters:{project:"Project name (default: current directory)",limit:"Number of recent sessions (default: 3)"}},{path:"/api/context/timeline",method:"GET",description:"Get unified timeline around a specific point in time",parameters:{anchor:'Anchor point: observation ID, session ID (e.g., "S123"), or ISO timestamp (required)',depth_before:"Number of records before anchor (default: 10)",depth_after:"Number of records after anchor (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/timeline/by-query",method:"GET",description:"Search for best match, then get timeline around it",parameters:{query:"Search query (required)",mode:'Search mode: "auto", "observations", or "sessions" (default: "auto")',depth_before:"Number of records before match (default: 10)",depth_after:"Number of records after match (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/search/help",method:"GET",description:"Get this help documentation"}],examples:['curl "http://localhost:37777/api/search/observations?query=authentication&limit=5"','curl "http://localhost:37777/api/search/by-type?type=bugfix&limit=10"','curl "http://localhost:37777/api/context/recent?project=claude-mem&limit=3"','curl "http://localhost:37777/api/context/timeline?anchor=123&depth_before=5&depth_after=5"']})})};var Ha=nt(require("path"),1),Er=require("fs"),Y$=require("os");tr();_e();var J$=require("child_process"),Za=require("fs"),nv=require("path");_e();tr();var cp=_i;function K$(t){return!t||typeof t!="string"?!1:/^[a-zA-Z0-9][a-zA-Z0-9._/-]*$/.test(t)&&!t.includes("..")}var Uhe=3e5,X$=6e5;function Ln(t){let e=(0,J$.spawnSync)("git",t,{cwd:cp,encoding:"utf-8",timeout:Uhe,windowsHide:!0,shell:!1});if(e.error)throw e.error;if(e.status!==0)throw new Error(e.stderr||e.stdout||"Git command failed");return e.stdout.trim()}function _q(t,e=X$){let n=process.platform==="win32"?"npm.cmd":"npm",i=(0,J$.spawnSync)(n,t,{cwd:cp,encoding:"utf-8",timeout:e,windowsHide:!0,shell:!1});if(i.error)throw i.error;if(i.status!==0)throw new Error(i.stderr||i.stdout||"npm command failed");return i.stdout.trim()}function iv(){let t=(0,nv.join)(cp,".git");if(!(0,Za.existsSync)(t))return{branch:null,isBeta:!1,isGitRepo:!1,isDirty:!1,canSwitch:!1,error:"Installed plugin is not a git repository"};try{let e=Ln(["rev-parse","--abbrev-ref","HEAD"]),n=Ln(["status","--porcelain"]).length>0,i=e.startsWith("beta");return{branch:e,isBeta:i,isGitRepo:!0,isDirty:n,canSwitch:!0}}catch(e){return $.error("BRANCH","Failed to get branch info",{},e),{branch:null,isBeta:!1,isGitRepo:!0,isDirty:!1,canSwitch:!1,error:e.message}}}async function bq(t){if(!K$(t))return{success:!1,error:`Invalid branch name: ${t}. Branch names must be alphanumeric with hyphens, underscores, slashes, or dots.`};let e=iv();if(!e.isGitRepo)return{success:!1,error:"Installed plugin is not a git repository. Please reinstall."};if(e.branch===t)return{success:!0,branch:t,message:`Already on branch ${t}`};try{$.info("BRANCH","Starting branch switch",{from:e.branch,to:t}),$.debug("BRANCH","Discarding local changes"),Ln(["checkout","--","."]),Ln(["clean","-fd"]),$.debug("BRANCH","Fetching from origin"),Ln(["fetch","origin"]),$.debug("BRANCH","Checking out branch",{branch:t});try{Ln(["checkout",t])}catch(n){$.debug("BRANCH","Branch not local, tracking remote",{branch:t,error:n instanceof Error?n.message:String(n)}),Ln(["checkout","-b",t,`origin/${t}`])}$.debug("BRANCH","Pulling latest"),Ln(["pull","origin",t]);let r=(0,nv.join)(cp,".install-version");return(0,Za.existsSync)(r)&&(0,Za.unlinkSync)(r),$.debug("BRANCH","Running npm install"),_q(["install"],X$),$.success("BRANCH","Branch switch complete",{branch:t}),{success:!0,branch:t,message:`Switched to ${t}. Worker will restart automatically.`}}catch(r){$.error("BRANCH","Branch switch failed",{targetBranch:t},r);try{e.branch&&K$(e.branch)&&Ln(["checkout",e.branch])}catch(n){$.error("BRANCH","Recovery checkout also failed",{originalBranch:e.branch},n)}return{success:!1,error:`Branch switch failed: ${r.message}`}}}async function Sq(){let t=iv();if(!t.isGitRepo||!t.branch)return{success:!1,error:"Cannot pull updates: not a git repository"};try{if(!K$(t.branch))return{success:!1,error:`Invalid current branch name: ${t.branch}`};$.info("BRANCH","Pulling updates",{branch:t.branch}),Ln(["checkout","--","."]),Ln(["fetch","origin"]),Ln(["pull","origin",t.branch]);let e=(0,nv.join)(cp,".install-version");return(0,Za.existsSync)(e)&&(0,Za.unlinkSync)(e),_q(["install"],X$),$.success("BRANCH","Updates pulled",{branch:t.branch}),{success:!0,branch:t.branch,message:`Updated ${t.branch}. Worker will restart automatically.`}}catch(e){return $.error("BRANCH","Pull failed",{},e),{success:!1,error:`Pull failed: ${e.message}`}}}lr();Hr();var sv=class extends jr{constructor(r){super();this.settingsManager=r}setupRoutes(r){r.get("/api/settings",this.handleGetSettings.bind(this)),r.post("/api/settings",this.handleUpdateSettings.bind(this)),r.get("/api/mcp/status",this.handleGetMcpStatus.bind(this)),r.post("/api/mcp/toggle",this.handleToggleMcp.bind(this)),r.get("/api/branch/status",this.handleGetBranchStatus.bind(this)),r.post("/api/branch/switch",this.handleSwitchBranch.bind(this)),r.post("/api/branch/update",this.handleUpdateBranch.bind(this))}handleGetSettings=this.wrapHandler((r,n)=>{let i=Ha.default.join((0,Y$.homedir)(),".claude-mem","settings.json");this.ensureSettingsFile(i);let s=Ae.loadFromFile(i);n.json(s)});handleUpdateSettings=this.wrapHandler((r,n)=>{let i=this.validateSettings(r.body);if(!i.valid){n.status(400).json({success:!1,error:i.error});return}let s=Ha.default.join((0,Y$.homedir)(),".claude-mem","settings.json");this.ensureSettingsFile(s);let a={};if((0,Er.existsSync)(s)){let c=(0,Er.readFileSync)(s,"utf-8");try{a=JSON.parse(c)}catch(u){$.error("SETTINGS","Failed to parse settings file",{settingsPath:s},u),n.status(500).json({success:!1,error:"Settings file is corrupted. Delete ~/.claude-mem/settings.json to reset."});return}}let o=["CLAUDE_MEM_MODEL","CLAUDE_MEM_CONTEXT_OBSERVATIONS","CLAUDE_MEM_WORKER_PORT","CLAUDE_MEM_WORKER_HOST","CLAUDE_MEM_PROVIDER","CLAUDE_MEM_GEMINI_API_KEY","CLAUDE_MEM_GEMINI_MODEL","CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED","CLAUDE_MEM_OPENROUTER_API_KEY","CLAUDE_MEM_OPENROUTER_MODEL","CLAUDE_MEM_OPENROUTER_SITE_URL","CLAUDE_MEM_OPENROUTER_APP_NAME","CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES","CLAUDE_MEM_OPENROUTER_MAX_TOKENS","CLAUDE_MEM_DATA_DIR","CLAUDE_MEM_LOG_LEVEL","CLAUDE_MEM_PYTHON_VERSION","CLAUDE_CODE_PATH","CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS","CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS","CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT","CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT","CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES","CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS","CLAUDE_MEM_CONTEXT_FULL_COUNT","CLAUDE_MEM_CONTEXT_FULL_FIELD","CLAUDE_MEM_CONTEXT_SESSION_COUNT","CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY","CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE","CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED"];for(let c of o)r.body[c]!==void 0&&(a[c]=r.body[c]);(0,Er.writeFileSync)(s,JSON.stringify(a,null,2),"utf-8"),AC(),$.info("WORKER","Settings updated"),n.json({success:!0,message:"Settings updated successfully"})});handleGetMcpStatus=this.wrapHandler((r,n)=>{let i=this.isMcpEnabled();n.json({enabled:i})});handleToggleMcp=this.wrapHandler((r,n)=>{let{enabled:i}=r.body;if(typeof i!="boolean"){this.badRequest(n,"enabled must be a boolean");return}this.toggleMcp(i),n.json({success:!0,enabled:this.isMcpEnabled()})});handleGetBranchStatus=this.wrapHandler((r,n)=>{let i=iv();n.json(i)});handleSwitchBranch=this.wrapHandler(async(r,n)=>{let{branch:i}=r.body;if(!i){n.status(400).json({success:!1,error:"Missing branch parameter"});return}let s=["main","beta/7.0","feature/bun-executable"];if(!s.includes(i)){n.status(400).json({success:!1,error:`Invalid branch. Allowed: ${s.join(", ")}`});return}$.info("WORKER","Branch switch requested",{branch:i});let a=await bq(i);a.success&&setTimeout(()=>{$.info("WORKER","Restarting worker after branch switch"),process.exit(0)},1e3),n.json(a)});handleUpdateBranch=this.wrapHandler(async(r,n)=>{$.info("WORKER","Branch update requested");let i=await Sq();i.success&&setTimeout(()=>{$.info("WORKER","Restarting worker after branch update"),process.exit(0)},1e3),n.json(i)});validateSettings(r){if(r.CLAUDE_MEM_PROVIDER&&!["claude","gemini","openrouter"].includes(r.CLAUDE_MEM_PROVIDER))return{valid:!1,error:'CLAUDE_MEM_PROVIDER must be "claude", "gemini", or "openrouter"'};if(r.CLAUDE_MEM_GEMINI_MODEL&&!["gemini-2.5-flash-lite","gemini-2.5-flash","gemini-3-flash-preview"].includes(r.CLAUDE_MEM_GEMINI_MODEL))return{valid:!1,error:"CLAUDE_MEM_GEMINI_MODEL must be one of: gemini-2.5-flash-lite, gemini-2.5-flash, gemini-3-flash-preview"};if(r.CLAUDE_MEM_CONTEXT_OBSERVATIONS){let i=parseInt(r.CLAUDE_MEM_CONTEXT_OBSERVATIONS,10);if(isNaN(i)||i<1||i>200)return{valid:!1,error:"CLAUDE_MEM_CONTEXT_OBSERVATIONS must be between 1 and 200"}}if(r.CLAUDE_MEM_WORKER_PORT){let i=parseInt(r.CLAUDE_MEM_WORKER_PORT,10);if(isNaN(i)||i<1024||i>65535)return{valid:!1,error:"CLAUDE_MEM_WORKER_PORT must be between 1024 and 65535"}}if(r.CLAUDE_MEM_WORKER_HOST){let i=r.CLAUDE_MEM_WORKER_HOST;if(!/^(127\.0\.0\.1|0\.0\.0\.0|localhost|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/.test(i))return{valid:!1,error:"CLAUDE_MEM_WORKER_HOST must be a valid IP address (e.g., 127.0.0.1, 0.0.0.0)"}}if(r.CLAUDE_MEM_LOG_LEVEL&&!["DEBUG","INFO","WARN","ERROR","SILENT"].includes(r.CLAUDE_MEM_LOG_LEVEL.toUpperCase()))return{valid:!1,error:"CLAUDE_MEM_LOG_LEVEL must be one of: DEBUG, INFO, WARN, ERROR, SILENT"};if(r.CLAUDE_MEM_PYTHON_VERSION&&!/^3\.\d{1,2}$/.test(r.CLAUDE_MEM_PYTHON_VERSION))return{valid:!1,error:'CLAUDE_MEM_PYTHON_VERSION must be in format "3.X" or "3.XX" (e.g., "3.13")'};let n=["CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS","CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS","CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT","CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT","CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY","CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE"];for(let i of n)if(r[i]&&!["true","false"].includes(r[i]))return{valid:!1,error:`${i} must be "true" or "false"`};if(r.CLAUDE_MEM_CONTEXT_FULL_COUNT){let i=parseInt(r.CLAUDE_MEM_CONTEXT_FULL_COUNT,10);if(isNaN(i)||i<0||i>20)return{valid:!1,error:"CLAUDE_MEM_CONTEXT_FULL_COUNT must be between 0 and 20"}}if(r.CLAUDE_MEM_CONTEXT_SESSION_COUNT){let i=parseInt(r.CLAUDE_MEM_CONTEXT_SESSION_COUNT,10);if(isNaN(i)||i<1||i>50)return{valid:!1,error:"CLAUDE_MEM_CONTEXT_SESSION_COUNT must be between 1 and 50"}}if(r.CLAUDE_MEM_CONTEXT_FULL_FIELD&&!["narrative","facts"].includes(r.CLAUDE_MEM_CONTEXT_FULL_FIELD))return{valid:!1,error:'CLAUDE_MEM_CONTEXT_FULL_FIELD must be "narrative" or "facts"'};if(r.CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES){let i=parseInt(r.CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES,10);if(isNaN(i)||i<1||i>100)return{valid:!1,error:"CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES must be between 1 and 100"}}if(r.CLAUDE_MEM_OPENROUTER_MAX_TOKENS){let i=parseInt(r.CLAUDE_MEM_OPENROUTER_MAX_TOKENS,10);if(isNaN(i)||i<1e3||i>1e6)return{valid:!1,error:"CLAUDE_MEM_OPENROUTER_MAX_TOKENS must be between 1000 and 1000000"}}if(r.CLAUDE_MEM_OPENROUTER_SITE_URL)try{new URL(r.CLAUDE_MEM_OPENROUTER_SITE_URL)}catch(i){return $.debug("SETTINGS","Invalid URL format",{url:r.CLAUDE_MEM_OPENROUTER_SITE_URL,error:i instanceof Error?i.message:String(i)}),{valid:!1,error:"CLAUDE_MEM_OPENROUTER_SITE_URL must be a valid URL"}}return{valid:!0}}isMcpEnabled(){let r=en(),n=Ha.default.join(r,"plugin",".mcp.json");return(0,Er.existsSync)(n)}toggleMcp(r){let n=en(),i=Ha.default.join(n,"plugin",".mcp.json"),s=Ha.default.join(n,"plugin",".mcp.json.disabled");r&&(0,Er.existsSync)(s)?((0,Er.renameSync)(s,i),$.info("WORKER","MCP search server enabled")):!r&&(0,Er.existsSync)(i)?((0,Er.renameSync)(i,s),$.info("WORKER","MCP search server disabled")):$.debug("WORKER","MCP toggle no-op (already in desired state)",{enabled:r})}ensureSettingsFile(r){if(!(0,Er.existsSync)(r)){let n=Ae.getAllDefaults(),i=Ha.default.dirname(r);(0,Er.existsSync)(i)||(0,Er.mkdirSync)(i,{recursive:!0}),(0,Er.writeFileSync)(r,JSON.stringify(n,null,2),"utf-8"),$.info("SETTINGS","Created settings file with defaults",{settingsPath:r})}}};var Ba=require("fs"),av=require("path");_e();lr();var ov=class extends jr{getLogFilePath(){let e=Ae.get("CLAUDE_MEM_DATA_DIR"),r=(0,av.join)(e,"logs"),n=new Date().toISOString().split("T")[0];return(0,av.join)(r,`claude-mem-${n}.log`)}getLogsDir(){let e=Ae.get("CLAUDE_MEM_DATA_DIR");return(0,av.join)(e,"logs")}setupRoutes(e){e.get("/api/logs",this.handleGetLogs.bind(this)),e.post("/api/logs/clear",this.handleClearLogs.bind(this))}handleGetLogs=this.wrapHandler((e,r)=>{let n=this.getLogFilePath();if(!(0,Ba.existsSync)(n)){r.json({logs:"",path:n,exists:!1});return}let i=parseInt(e.query.lines||"1000",10),s=Math.min(i,1e4),o=(0,Ba.readFileSync)(n,"utf-8").split(` `),c=Math.max(0,o.length-s),u=o.slice(c).join(` -`);r.json({logs:u,path:n,exists:!0,totalLines:o.length,returnedLines:o.length-c})});handleClearLogs=this.wrapHandler((e,r)=>{let n=this.getLogFilePath();if(!(0,Ba.existsSync)(n)){r.json({success:!0,message:"Log file does not exist",path:n});return}(0,Ba.writeFileSync)(n,"","utf-8"),$.info("SYSTEM","Log file cleared via UI",{path:n}),r.json({success:!0,message:"Log file cleared",path:n})})};_e();var cv=class extends jr{constructor(r,n){super();this.dbManager=r;this.defaultProject=n}setupRoutes(r){r.post("/api/memory/save",this.handleSaveMemory.bind(this))}handleSaveMemory=this.wrapHandler(async(r,n)=>{let{text:i,title:s,project:a}=r.body,o=a||this.defaultProject;if(!i||typeof i!="string"||i.trim().length===0){this.badRequest(n,"text is required and must be non-empty");return}let c=this.dbManager.getSessionStore(),u=this.dbManager.getChromaSync(),l=c.getOrCreateManualSession(o),d={type:"discovery",title:s||i.substring(0,60).trim()+(i.length>60?"...":""),subtitle:"Manual memory",facts:[],narrative:i,concepts:[],files_read:[],files_modified:[]},p=c.storeObservation(l,o,d,0,0);$.info("HTTP","Manual observation saved",{id:p.id,project:o,title:d.title}),u.syncObservation(p.id,l,o,d,0,p.createdAtEpoch,0).catch(f=>{$.error("CHROMA","ChromaDB sync failed",{id:p.id},f)}),n.json({success:!0,id:p.id,title:d.title,project:o,message:`Memory saved as observation #${p.id}`})})};var mge={},age=120*1e3;function yk(){return vk.default.join(Ae.get("CLAUDE_MEM_DATA_DIR"),".worker-start-attempted")}function oge(){if(process.platform!=="win32")return!1;let t=yk();if(!(0,is.existsSync)(t))return!1;try{let e=(0,is.statSync)(t).mtimeMs;return Date.now()-e{this.resolveInitialization=e}),this.dbManager=new Fh,this.sessionManager=new Gh(this.dbManager),this.sseBroadcaster=new Wh,this.sdkAgent=new Cg(this.dbManager,this.sessionManager),this.geminiAgent=new Ng(this.dbManager,this.sessionManager),this.openRouterAgent=new Mg(this.dbManager,this.sessionManager),this.paginationHelper=new Dg(this.dbManager),this.settingsManager=new zg(this.dbManager),this.sessionEventBroadcaster=new Fg(this.sseBroadcaster,this),this.sessionManager.setOnSessionDeleted(()=>{this.broadcastProcessingStatus()}),this.mcpClient=new Mo({name:"worker-search-proxy",version:lge},{capabilities:{}}),this.server=new zh({getInitializationComplete:()=>this.initializationCompleteFlag,getMcpReady:()=>this.mcpReady,onShutdown:()=>this.shutdown(),onRestart:()=>this.shutdown(),workerPath:__filename,getAiStatus:()=>{let e="claude";return Hc()&&La()?e="openrouter":Zc()&&Ua()&&(e="gemini"),{provider:e,authMethod:$m(),lastInteraction:this.lastAiInteraction?{timestamp:this.lastAiInteraction.timestamp,success:this.lastAiInteraction.success,...this.lastAiInteraction.error&&{error:this.lastAiInteraction.error}}:null}}}),this.registerRoutes(),this.registerSignalHandlers()}registerSignalHandlers(){let e={value:this.isShuttingDown},r=GC(()=>this.shutdown(),e);process.on("SIGTERM",()=>{this.isShuttingDown=e.value,r("SIGTERM")}),process.on("SIGINT",()=>{this.isShuttingDown=e.value,r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{$.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{this.isShuttingDown=e.value,r("SIGHUP")}))}registerRoutes(){this.server.app.get("/api/context/inject",async(e,r,n)=>{if(!this.initializationCompleteFlag||!this.searchRoutes){$.warn("SYSTEM","Context requested before initialization complete, returning empty"),r.status(200).json({content:[{type:"text",text:""}]});return}n()}),this.server.app.use("/api",async(e,r,n)=>{if(this.initializationCompleteFlag){n();return}let i=3e4,s=new Promise((a,o)=>setTimeout(()=>o(new Error("Database initialization timeout")),i));try{await Promise.race([this.initializationComplete,s]),n()}catch(a){$.error("HTTP",`Request to ${e.method} ${e.path} rejected \u2014 DB not initialized`,{},a),r.status(503).json({error:"Service initializing",message:"Database is still initializing, please retry"})}}),this.server.registerRoutes(new Hg(this.sseBroadcaster,this.dbManager,this.sessionManager)),this.server.registerRoutes(new Gg(this.sessionManager,this.dbManager,this.sdkAgent,this.geminiAgent,this.openRouterAgent,this.sessionEventBroadcaster,this)),this.server.registerRoutes(new Wg(this.paginationHelper,this.dbManager,this.sessionManager,this.sseBroadcaster,this,this.startTime)),this.server.registerRoutes(new sv(this.settingsManager)),this.server.registerRoutes(new ov),this.server.registerRoutes(new cv(this.dbManager,"claude-mem"))}async start(){let e=Et(),r=Em();await this.server.listen(e,r),qC({pid:process.pid,port:e,startedAt:new Date().toISOString()}),$.info("SYSTEM","Worker started",{host:r,port:e,pid:process.pid}),this.initializeBackground().catch(n=>{$.error("SYSTEM","Background initialization failed",{},n)})}async initializeBackground(){try{await BC();let{ModeManager:e}=await Promise.resolve().then(()=>(Gr(),I2)),{SettingsDefaultsManager:r}=await Promise.resolve().then(()=>(lr(),xC)),{USER_SETTINGS_PATH:n}=await Promise.resolve().then(()=>(tr(),PC)),s=r.loadFromFile(n).CLAUDE_MEM_MODE;e.getInstance().loadMode(s),$.info("SYSTEM",`Mode loaded: ${s}`),await this.dbManager.initialize();let{PendingMessageStore:a}=await Promise.resolve().then(()=>(As(),Pa)),c=new a(this.dbManager.getSessionStore().db,3).resetStaleProcessingMessages(0);c>0&&$.info("SYSTEM",`Reset ${c} stale processing messages to pending`);let u=new Lg,l=new qg,d=new Ug(this.dbManager.getSessionSearch(),this.dbManager.getSessionStore(),this.dbManager.getChromaSync(),u,l);this.searchRoutes=new rv(d),this.server.registerRoutes(this.searchRoutes),$.info("WORKER","SearchManager initialized and search routes registered");let p=vk.default.join(__dirname,"mcp-server.cjs"),f=new Uo({command:"node",args:[p],env:process.env}),h=3e5,y=this.mcpClient.connect(f),g=new Promise((m,_)=>setTimeout(()=>_(new Error("MCP connection timeout after 5 minutes")),h));await Promise.race([y,g]),this.mcpReady=!0,$.success("WORKER","Connected to MCP server"),this.initializationCompleteFlag=!0,this.resolveInitialization(),$.info("SYSTEM","Background initialization complete"),this.stopOrphanReaper=k2(()=>{let m=new Set;for(let[_]of this.sessionManager.sessions)m.add(_);return m}),$.info("SYSTEM","Started orphan reaper (runs every 5 minutes)"),this.processPendingQueues(50).then(m=>{m.sessionsStarted>0&&$.info("SYSTEM",`Auto-recovered ${m.sessionsStarted} sessions with pending work`,{totalPending:m.totalPendingSessions,started:m.sessionsStarted,sessionIds:m.startedSessionIds})}).catch(m=>{$.error("SYSTEM","Auto-recovery of pending queues failed",{},m)})}catch(e){throw $.error("SYSTEM","Background initialization failed",{},e),e}}getActiveAgent(){return Hc()&&La()?this.openRouterAgent:Zc()&&Ua()?this.geminiAgent:this.sdkAgent}startSessionProcessor(e,r){if(!e)return;let n=e.sessionDbId,i=this.getActiveAgent(),s=i.constructor.name;e.abortController.signal.aborted&&($.debug("SYSTEM","Replacing aborted AbortController before starting generator",{sessionId:e.sessionDbId}),e.abortController=new AbortController);let a=!1,o=!1;$.info("SYSTEM",`Starting generator (${r}) using ${s}`,{sessionId:n}),e.generatorPromise=i.startSession(e,this).catch(async c=>{let u=c?.message||"";if(["Claude executable not found","CLAUDE_CODE_PATH","ENOENT","spawn"].some(d=>u.includes(d))){a=!0,this.lastAiInteraction={timestamp:Date.now(),success:!1,provider:s,error:u},$.error("SDK","Unrecoverable generator error - will NOT restart",{sessionId:e.sessionDbId,project:e.project,errorMessage:u});return}if(this.isSessionTerminatedError(c))return $.warn("SDK","SDK resume failed, falling back to standalone processing",{sessionId:e.sessionDbId,project:e.project,reason:c instanceof Error?c.message:String(c)}),this.runFallbackForTerminatedSession(e,c);throw(u.includes("aborted by user")||u.includes("No conversation found"))&&e.memorySessionId&&($.warn("SDK","Detected stale resume failure, clearing memorySessionId for fresh start",{sessionId:e.sessionDbId,memorySessionId:e.memorySessionId,errorMessage:u}),this.dbManager.getSessionStore().updateMemorySessionId(e.sessionDbId,null),e.memorySessionId=null,e.forceInit=!0),$.error("SDK","Session generator failed",{sessionId:e.sessionDbId,project:e.project,provider:s},c),o=!0,this.lastAiInteraction={timestamp:Date.now(),success:!1,provider:s,error:u},c}).finally(()=>{if(e.generatorPromise=null,!o&&!a&&(this.lastAiInteraction={timestamp:Date.now(),success:!0,provider:s}),a){$.warn("SYSTEM","Skipping restart due to unrecoverable error",{sessionId:e.sessionDbId}),this.broadcastProcessingStatus();return}let{PendingMessageStore:c}=(As(),Xc(Pa)),l=new c(this.dbManager.getSessionStore().db,3).getPendingCount(e.sessionDbId);l>0&&($.info("SYSTEM","Pending work remains after generator exit, restarting with fresh AbortController",{sessionId:e.sessionDbId,pendingCount:l}),e.abortController=new AbortController,this.startSessionProcessor(e,"pending-work-restart")),this.broadcastProcessingStatus()})}isSessionTerminatedError(e){let n=(e instanceof Error?e.message:String(e)).toLowerCase();return n.includes("process aborted by user")||n.includes("processtransport")||n.includes("not ready for writing")||n.includes("session generator failed")||n.includes("claude code process")}async runFallbackForTerminatedSession(e,r){if(!e)return;let n=e.sessionDbId;if(!e.memorySessionId){let a=`fallback-${n}-${Date.now()}`;e.memorySessionId=a,this.dbManager.getSessionStore().updateMemorySessionId(n,a)}if(Ua())try{await this.geminiAgent.startSession(e,this);return}catch(a){$.warn("SDK","Fallback Gemini failed, trying OpenRouter",{sessionId:n,error:a instanceof Error?a.message:String(a)})}if(La())try{await this.openRouterAgent.startSession(e,this);return}catch(a){$.warn("SDK","Fallback OpenRouter failed",{sessionId:n,error:a instanceof Error?a.message:String(a)})}let s=this.sessionManager.getPendingMessageStore().markAllSessionMessagesAbandoned(n);s>0&&$.warn("SDK","No fallback available; marked pending messages abandoned",{sessionId:n,abandoned:s}),this.sessionManager.removeSessionImmediate(n),this.sessionEventBroadcaster.broadcastSessionCompleted(n)}async processPendingQueues(e=10){let{PendingMessageStore:r}=await Promise.resolve().then(()=>(As(),Pa)),n=new r(this.dbManager.getSessionStore().db,3),i=this.dbManager.getSessionStore(),s=360*60*1e3,a=Date.now()-s;try{let u=i.db.prepare(` +`);r.json({logs:u,path:n,exists:!0,totalLines:o.length,returnedLines:o.length-c})});handleClearLogs=this.wrapHandler((e,r)=>{let n=this.getLogFilePath();if(!(0,Ba.existsSync)(n)){r.json({success:!0,message:"Log file does not exist",path:n});return}(0,Ba.writeFileSync)(n,"","utf-8"),$.info("SYSTEM","Log file cleared via UI",{path:n}),r.json({success:!0,message:"Log file cleared",path:n})})};_e();var cv=class extends jr{constructor(r,n){super();this.dbManager=r;this.defaultProject=n}setupRoutes(r){r.post("/api/memory/save",this.handleSaveMemory.bind(this))}handleSaveMemory=this.wrapHandler(async(r,n)=>{let{text:i,title:s,project:a}=r.body,o=a||this.defaultProject;if(!i||typeof i!="string"||i.trim().length===0){this.badRequest(n,"text is required and must be non-empty");return}let c=this.dbManager.getSessionStore(),u=this.dbManager.getChromaSync(),l=c.getOrCreateManualSession(o),d={type:"discovery",title:s||i.substring(0,60).trim()+(i.length>60?"...":""),subtitle:"Manual memory",facts:[],narrative:i,concepts:[],files_read:[],files_modified:[]},p=c.storeObservation(l,o,d,0,0);$.info("HTTP","Manual observation saved",{id:p.id,project:o,title:d.title}),u.syncObservation(p.id,l,o,d,0,p.createdAtEpoch,0).catch(f=>{$.error("CHROMA","ChromaDB sync failed",{id:p.id},f)}),n.json({success:!0,id:p.id,title:d.title,project:o,message:`Memory saved as observation #${p.id}`})})};var mge={},age=120*1e3;function yk(){return vk.default.join(Ae.get("CLAUDE_MEM_DATA_DIR"),".worker-start-attempted")}function oge(){if(process.platform!=="win32")return!1;let t=yk();if(!(0,is.existsSync)(t))return!1;try{let e=(0,is.statSync)(t).mtimeMs;return Date.now()-e{this.resolveInitialization=e}),this.dbManager=new Fh,this.sessionManager=new Gh(this.dbManager),this.sseBroadcaster=new Wh,this.sdkAgent=new Cg(this.dbManager,this.sessionManager),this.geminiAgent=new Ng(this.dbManager,this.sessionManager),this.openRouterAgent=new Mg(this.dbManager,this.sessionManager),this.paginationHelper=new Dg(this.dbManager),this.settingsManager=new zg(this.dbManager),this.sessionEventBroadcaster=new Fg(this.sseBroadcaster,this),this.sessionManager.setOnSessionDeleted(()=>{this.broadcastProcessingStatus()}),this.mcpClient=new Mo({name:"worker-search-proxy",version:lge},{capabilities:{}}),this.server=new zh({getInitializationComplete:()=>this.initializationCompleteFlag,getMcpReady:()=>this.mcpReady,onShutdown:()=>this.shutdown(),onRestart:()=>this.shutdown(),workerPath:__filename,getAiStatus:()=>{let e="claude";return Hc()&&La()?e="openrouter":Zc()&&Ua()&&(e="gemini"),{provider:e,authMethod:$m(),lastInteraction:this.lastAiInteraction?{timestamp:this.lastAiInteraction.timestamp,success:this.lastAiInteraction.success,...this.lastAiInteraction.error&&{error:this.lastAiInteraction.error}}:null}}}),this.registerRoutes(),this.registerSignalHandlers()}registerSignalHandlers(){let e={value:this.isShuttingDown},r=GC(()=>this.shutdown(),e);process.on("SIGTERM",()=>{this.isShuttingDown=e.value,r("SIGTERM")}),process.on("SIGINT",()=>{this.isShuttingDown=e.value,r("SIGINT")}),process.platform!=="win32"&&(process.argv.includes("--daemon")?process.on("SIGHUP",()=>{$.debug("SYSTEM","Ignoring SIGHUP in daemon mode")}):process.on("SIGHUP",()=>{this.isShuttingDown=e.value,r("SIGHUP")}))}registerRoutes(){this.server.app.get("/api/context/inject",async(e,r,n)=>{if(!this.initializationCompleteFlag||!this.searchRoutes){$.warn("SYSTEM","Context requested before initialization complete, returning empty"),r.status(200).json({content:[{type:"text",text:""}]});return}n()}),this.server.app.use("/api",async(e,r,n)=>{if(this.initializationCompleteFlag){n();return}let i=3e4,s=new Promise((a,o)=>setTimeout(()=>o(new Error("Database initialization timeout")),i));try{await Promise.race([this.initializationComplete,s]),n()}catch(a){$.error("HTTP",`Request to ${e.method} ${e.path} rejected \u2014 DB not initialized`,{},a),r.status(503).json({error:"Service initializing",message:"Database is still initializing, please retry"})}}),this.server.registerRoutes(new Hg(this.sseBroadcaster,this.dbManager,this.sessionManager)),this.server.registerRoutes(new Gg(this.sessionManager,this.dbManager,this.sdkAgent,this.geminiAgent,this.openRouterAgent,this.sessionEventBroadcaster,this)),this.server.registerRoutes(new Wg(this.paginationHelper,this.dbManager,this.sessionManager,this.sseBroadcaster,this,this.startTime)),this.server.registerRoutes(new sv(this.settingsManager)),this.server.registerRoutes(new ov),this.server.registerRoutes(new cv(this.dbManager,"claude-mem"))}async start(){let e=Et(),r=Em();await this.server.listen(e,r),qC({pid:process.pid,port:e,startedAt:new Date().toISOString()}),$.info("SYSTEM","Worker started",{host:r,port:e,pid:process.pid}),this.initializeBackground().catch(n=>{$.error("SYSTEM","Background initialization failed",{},n)})}async initializeBackground(){try{await BC();let{ModeManager:e}=await Promise.resolve().then(()=>(Gr(),I2)),{SettingsDefaultsManager:r}=await Promise.resolve().then(()=>(lr(),xC)),{USER_SETTINGS_PATH:n}=await Promise.resolve().then(()=>(tr(),PC)),s=r.loadFromFile(n).CLAUDE_MEM_MODE;e.getInstance().loadMode(s),$.info("SYSTEM",`Mode loaded: ${s}`),await this.dbManager.initialize();let{PendingMessageStore:a}=await Promise.resolve().then(()=>(As(),Pa)),c=new a(this.dbManager.getSessionStore().db,3).resetStaleProcessingMessages(0);c>0&&$.info("SYSTEM",`Reset ${c} stale processing messages to pending`);let u=new Lg,l=new qg,d=new Ug(this.dbManager.getSessionSearch(),this.dbManager.getSessionStore(),this.dbManager.getChromaSync(),u,l);this.searchRoutes=new rv(d),this.server.registerRoutes(this.searchRoutes),$.info("WORKER","SearchManager initialized and search routes registered");let p=vk.default.join(__dirname,"mcp-server.cjs"),f=new Uo({command:"node",args:[p],env:process.env}),h=3e5,y=this.mcpClient.connect(f),g=new Promise((m,_)=>setTimeout(()=>_(new Error("MCP connection timeout after 5 minutes")),h));await Promise.race([y,g]),this.mcpReady=!0,$.success("WORKER","Connected to MCP server"),this.initializationCompleteFlag=!0,this.resolveInitialization(),$.info("SYSTEM","Background initialization complete"),this.stopOrphanReaper=k2(()=>{let m=new Set;for(let[_]of this.sessionManager.sessions)m.add(_);return m}),$.info("SYSTEM","Started orphan reaper (runs every 5 minutes)"),this.processPendingQueues(50).then(m=>{m.sessionsStarted>0&&$.info("SYSTEM",`Auto-recovered ${m.sessionsStarted} sessions with pending work`,{totalPending:m.totalPendingSessions,started:m.sessionsStarted,sessionIds:m.startedSessionIds})}).catch(m=>{$.error("SYSTEM","Auto-recovery of pending queues failed",{},m)})}catch(e){throw $.error("SYSTEM","Background initialization failed",{},e),e}}getActiveAgent(){return Hc()&&La()?this.openRouterAgent:Zc()&&Ua()?this.geminiAgent:this.sdkAgent}startSessionProcessor(e,r){if(!e)return;let n=e.sessionDbId,i=this.getActiveAgent(),s=i.constructor.name;e.abortController.signal.aborted&&($.debug("SYSTEM","Replacing aborted AbortController before starting generator",{sessionId:e.sessionDbId}),e.abortController=new AbortController);let a=!1,o=!1;$.info("SYSTEM",`Starting generator (${r}) using ${s}`,{sessionId:n}),e.generatorPromise=i.startSession(e,this).catch(async c=>{let u=c?.message||"";if(["Claude executable not found","CLAUDE_CODE_PATH","ENOENT","spawn","Invalid API key"].some(d=>u.includes(d))){a=!0,this.lastAiInteraction={timestamp:Date.now(),success:!1,provider:s,error:u},$.error("SDK","Unrecoverable generator error - will NOT restart",{sessionId:e.sessionDbId,project:e.project,errorMessage:u});return}if(this.isSessionTerminatedError(c))return $.warn("SDK","SDK resume failed, falling back to standalone processing",{sessionId:e.sessionDbId,project:e.project,reason:c instanceof Error?c.message:String(c)}),this.runFallbackForTerminatedSession(e,c);throw(u.includes("aborted by user")||u.includes("No conversation found"))&&e.memorySessionId&&($.warn("SDK","Detected stale resume failure, clearing memorySessionId for fresh start",{sessionId:e.sessionDbId,memorySessionId:e.memorySessionId,errorMessage:u}),this.dbManager.getSessionStore().updateMemorySessionId(e.sessionDbId,null),e.memorySessionId=null,e.forceInit=!0),$.error("SDK","Session generator failed",{sessionId:e.sessionDbId,project:e.project,provider:s},c),o=!0,this.lastAiInteraction={timestamp:Date.now(),success:!1,provider:s,error:u},c}).finally(()=>{if(e.generatorPromise=null,!o&&!a&&(this.lastAiInteraction={timestamp:Date.now(),success:!0,provider:s}),a){$.warn("SYSTEM","Skipping restart due to unrecoverable error",{sessionId:e.sessionDbId}),this.broadcastProcessingStatus();return}let{PendingMessageStore:c}=(As(),Xc(Pa)),l=new c(this.dbManager.getSessionStore().db,3).getPendingCount(e.sessionDbId);l>0&&($.info("SYSTEM","Pending work remains after generator exit, restarting with fresh AbortController",{sessionId:e.sessionDbId,pendingCount:l}),e.abortController=new AbortController,this.startSessionProcessor(e,"pending-work-restart")),this.broadcastProcessingStatus()})}isSessionTerminatedError(e){let n=(e instanceof Error?e.message:String(e)).toLowerCase();return n.includes("process aborted by user")||n.includes("processtransport")||n.includes("not ready for writing")||n.includes("session generator failed")||n.includes("claude code process")}async runFallbackForTerminatedSession(e,r){if(!e)return;let n=e.sessionDbId;if(!e.memorySessionId){let a=`fallback-${n}-${Date.now()}`;e.memorySessionId=a,this.dbManager.getSessionStore().updateMemorySessionId(n,a)}if(Ua())try{await this.geminiAgent.startSession(e,this);return}catch(a){$.warn("SDK","Fallback Gemini failed, trying OpenRouter",{sessionId:n,error:a instanceof Error?a.message:String(a)})}if(La())try{await this.openRouterAgent.startSession(e,this);return}catch(a){$.warn("SDK","Fallback OpenRouter failed",{sessionId:n,error:a instanceof Error?a.message:String(a)})}let s=this.sessionManager.getPendingMessageStore().markAllSessionMessagesAbandoned(n);s>0&&$.warn("SDK","No fallback available; marked pending messages abandoned",{sessionId:n,abandoned:s}),this.sessionManager.removeSessionImmediate(n),this.sessionEventBroadcaster.broadcastSessionCompleted(n)}async processPendingQueues(e=10){let{PendingMessageStore:r}=await Promise.resolve().then(()=>(As(),Pa)),n=new r(this.dbManager.getSessionStore().db,3),i=this.dbManager.getSessionStore(),s=360*60*1e3,a=Date.now()-s;try{let u=i.db.prepare(` SELECT id FROM sdk_sessions WHERE status = 'active' AND started_at_epoch < ? `).all(a);if(u.length>0){let l=u.map(f=>f.id),d=l.map(()=>"?").join(",");i.db.prepare(` diff --git a/src/services/worker-service.ts b/src/services/worker-service.ts index 823bd15e..f2498d3a 100644 --- a/src/services/worker-service.ts +++ b/src/services/worker-service.ts @@ -500,6 +500,7 @@ export class WorkerService { 'CLAUDE_CODE_PATH', 'ENOENT', 'spawn', + 'Invalid API key', ]; if (unrecoverablePatterns.some(pattern => errorMessage.includes(pattern))) { hadUnrecoverableError = true; diff --git a/src/services/worker/SDKAgent.ts b/src/services/worker/SDKAgent.ts index 89667580..5bf83bae 100644 --- a/src/services/worker/SDKAgent.ts +++ b/src/services/worker/SDKAgent.ts @@ -246,6 +246,12 @@ export class SDKAgent { throw new Error('Claude session context overflow: prompt is too long'); } + // Detect invalid API key — SDK returns this as response text, not an error. + // Throw so it surfaces in health endpoint and prevents silent failures. + if (typeof textContent === 'string' && textContent.includes('Invalid API key')) { + throw new Error('Invalid API key: check your API key configuration in ~/.claude-mem/settings.json or ~/.claude-mem/.env'); + } + // Parse and process response using shared ResponseProcessor await processAgentResponse( textContent,