diff --git a/.claude-plugin/CLAUDE.md b/.claude-plugin/CLAUDE.md new file mode 100644 index 00000000..f1d5f402 --- /dev/null +++ b/.claude-plugin/CLAUDE.md @@ -0,0 +1,136 @@ + +# Recent Activity + +### Oct 25, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #2374 | 2:55 PM | ✅ | Marketplace metadata version synchronized to 4.2.11 | ~157 | + +### Oct 27, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #2757 | 1:23 AM | 🟣 | Released v4.3.3 with Configurable Session Display and First-Time Setup UX | ~391 | + +### Nov 4, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #3706 | 9:47 PM | ✅ | Marketplace Plugin Version Synchronized to 5.0.2 | ~162 | +| #3655 | 3:43 PM | ✅ | Version bumped to 5.0.1 across project | ~354 | + +### Nov 5, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #4068 | 10:58 PM | ✅ | Committed v5.1.0 release with comprehensive release notes | ~486 | +| #4066 | 10:57 PM | ✅ | Updated marketplace.json version to 5.1.0 | ~192 | +| #3739 | 2:24 PM | ✅ | Updated version to 5.0.3 across project manifests | ~322 | + +### Nov 6, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #4099 | 1:13 PM | 🟣 | Theme Toggle for Light/Dark Mode | ~253 | +| #4096 | " | ✅ | Marketplace Metadata Version Sync | ~179 | +| #4092 | 1:12 PM | 🔵 | Marketplace Configuration for Claude-Mem Plugin | ~194 | +| #4078 | 12:50 PM | 🔴 | Fixed PM2 ENOENT error on Windows systems | ~286 | +| #4075 | 12:49 PM | ✅ | Marketplace plugin version synchronized to 5.1.1 | ~189 | + +### Nov 7, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #4612 | 6:33 PM | ✅ | Version Bumped to 5.2.0 Across All Package Metadata | ~359 | +| #4598 | 6:31 PM | ✅ | PR #69 Merged: cleanup/worker Branch Integration | ~469 | +| #4298 | 11:54 AM | 🔴 | Fixed PostToolUse Hook Schema Compliance | ~310 | +| #4295 | 11:53 AM | ✅ | Synchronized Plugin Marketplace Version to 5.1.4 | ~188 | + +### Nov 8, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #5150 | 7:37 PM | 🟣 | Troubleshooting Skill Added to Claude-Mem Plugin | ~427 | +| #5133 | 7:29 PM | ✅ | Version 5.2.3 Released with Build Process | ~487 | + +### Nov 9, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #5941 | 7:14 PM | ✅ | Marketplace Version Updated to 5.4.0 | ~157 | + +### Nov 10, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #6341 | 1:49 PM | ✅ | Version Bumped to 5.4.1 | ~239 | + +### Nov 11, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #6602 | 1:51 PM | ✅ | Version 5.4.5 Released to GitHub | ~279 | +| #6601 | " | ✅ | Version Patch Bump 5.4.4 to 5.4.5 | ~233 | + +### Nov 14, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #8212 | 3:06 PM | 🔵 | Version Consistency Verification Across Multiple Configuration Files | ~238 | + +### Nov 25, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #14882 | 1:32 PM | 🔵 | Marketplace Configuration Defines Plugin Version and Source Directory | ~366 | + +### Nov 30, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #18064 | 10:52 PM | ✅ | Bumped version to 6.3.7 in marketplace.json | ~179 | +| #18060 | 10:51 PM | 🔵 | Read marketplace.json plugin manifest | ~190 | + +### Dec 1, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #18428 | 3:33 PM | 🔵 | Version Conflict in Marketplace Configuration | ~191 | + +### Dec 4, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #20049 | 3:23 PM | ✅ | Updated marketplace.json version to 6.5.2 | ~203 | + +### Dec 9, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #22559 | 1:08 AM | ✅ | Version 7.0.3 committed to repository | ~261 | +| #22551 | 1:07 AM | ✅ | Marketplace metadata updated to version 7.0.3 | ~179 | + +### Dec 10, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #23440 | 2:25 PM | ✅ | Marketplace Configuration Updated to 7.0.8 | ~188 | + +### Dec 14, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #26799 | 11:39 PM | ✅ | Marketplace Manifest Version Updated to 7.2.3 | ~248 | +| #26796 | " | ✅ | Version Bumped to 7.2.3 in marketplace.json | ~259 | +| #26792 | 11:38 PM | 🔵 | Current Version Confirmed as 7.2.2 Across All Configuration Files | ~291 | + +### Dec 16, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #28306 | 10:08 PM | 🔵 | Marketplace Configuration Also Shows Version 7.3.3 | ~220 | +| #27555 | 4:48 PM | ✅ | Version bump committed to main branch | ~242 | +| #27553 | " | ✅ | Version consistency verified across all configuration files | ~195 | +| #27551 | 4:47 PM | ✅ | Marketplace.json version updated to 7.3.1 | ~207 | + \ No newline at end of file diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index da9c39e1..1a44e89a 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -10,7 +10,7 @@ "plugins": [ { "name": "claude-mem", - "version": "9.0.13", + "version": "9.0.14", "source": "./plugin", "description": "Persistent memory system for Claude Code - context compression across sessions" } diff --git a/package.json b/package.json index b99aabb9..25b84147 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "claude-mem", - "version": "9.0.13", + "version": "9.0.14", "description": "Memory compression system for Claude Code - persist context across sessions", "keywords": [ "claude", diff --git a/plugin/.claude-plugin/CLAUDE.md b/plugin/.claude-plugin/CLAUDE.md new file mode 100644 index 00000000..f9635d63 --- /dev/null +++ b/plugin/.claude-plugin/CLAUDE.md @@ -0,0 +1,21 @@ + +# Recent Activity + +### Nov 6, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #4091 | 1:12 PM | 🔵 | Claude Plugin Configuration Structure | ~170 | + +### Nov 9, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #5739 | 4:43 PM | 🔵 | Plugin Metadata Configuration | ~199 | + +### Dec 8, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #22284 | 9:41 PM | 🔵 | Claude Plugin Metadata Configuration | ~183 | + \ No newline at end of file diff --git a/plugin/.claude-plugin/plugin.json b/plugin/.claude-plugin/plugin.json index 9ae85a82..a0185778 100644 --- a/plugin/.claude-plugin/plugin.json +++ b/plugin/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "claude-mem", - "version": "9.0.13", + "version": "9.0.14", "description": "Persistent memory system for Claude Code - seamlessly preserve context across sessions", "author": { "name": "Alex Newman" diff --git a/plugin/CLAUDE.md b/plugin/CLAUDE.md index 688dfbe6..fb048ea7 100644 --- a/plugin/CLAUDE.md +++ b/plugin/CLAUDE.md @@ -1,8 +1,6 @@ # Recent Activity - - ### Jan 10, 2026 | ID | Time | T | Title | Read | diff --git a/plugin/package.json b/plugin/package.json index fcf09f4f..283f0d8d 100644 --- a/plugin/package.json +++ b/plugin/package.json @@ -1,6 +1,6 @@ { "name": "claude-mem-plugin", - "version": "9.0.13", + "version": "9.0.14", "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 e891d148..1cc29ca5 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 Hi(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:lo(e,"input",t.processors),output:lo(e,"output",t.processors)}},enumerable:!1,writable:!1}),a}catch{throw new Error("Error converting schema to JSON.")}}function Ze(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 Ze(n.element,r);if(n.type==="set")return Ze(n.valueType,r);if(n.type==="lazy")return Ze(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 Ze(n.innerType,r);if(n.type==="intersection")return Ze(n.left,r)||Ze(n.right,r);if(n.type==="record"||n.type==="map")return Ze(n.keyType,r)||Ze(n.valueType,r);if(n.type==="pipe")return Ze(n.in,r)||Ze(n.out,r);if(n.type==="object"){for(let o in n.shape)if(Ze(n.shape[o],r))return!0;return!1}if(n.type==="union"){for(let o of n.options)if(Ze(o,r))return!0;return!1}if(n.type==="tuple"){for(let o of n.items)if(Ze(o,r))return!0;return!!(n.rest&&Ze(n.rest,r))}return!1}var wm=(t,e={})=>r=>{let n=Wi({...r,processors:e});return de(t,n),Gi(n,t),Hi(n,t)},lo=(t,e,r={})=>n=>{let{libraryOptions:o,target:i}=n??{},a=Wi({...o??{},target:i,io:e,processors:r});return de(t,a),Gi(a,t),Hi(a,t)};var yb={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},zm=(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=yb[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}))])}},Im=(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)},Em=(t,e,r,n)=>{r.type="boolean"},Tm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("BigInt cannot be represented in JSON Schema")},Pm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Symbols cannot be represented in JSON Schema")},Om=(t,e,r,n)=>{e.target==="openapi-3.0"?(r.type="string",r.nullable=!0,r.enum=[null]):r.type="null"},jm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Undefined cannot be represented in JSON Schema")},Nm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Void cannot be represented in JSON Schema")},Dm=(t,e,r,n)=>{r.not={}},Rm=(t,e,r,n)=>{},Zm=(t,e,r,n)=>{},Am=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Date cannot be represented in JSON Schema")},Um=(t,e,r,n)=>{let o=t._zod.def,i=jn(o.entries);i.every(a=>typeof a=="number")&&(r.type="number"),i.every(a=>typeof a=="string")&&(r.type="string"),r.enum=i},Cm=(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},Mm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("NaN cannot be represented in JSON Schema")},Lm=(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},qm=(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)},Fm=(t,e,r,n)=>{r.type="boolean"},Vm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Custom types cannot be represented in JSON Schema")},Jm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Function types cannot be represented in JSON Schema")},Km=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Transforms cannot be represented in JSON Schema")},Wm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Map cannot be represented in JSON Schema")},Gm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Set cannot be represented in JSON Schema")},Hm=(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"]})},Bm=(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)},pl=(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},Xm=(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},Ym=(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)},Qm=(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)}},eh=(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"}]},th=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType},rh=(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))},nh=(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)))},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;let a;try{a=o.catchValue(void 0)}catch{throw new Error("Dynamic catch values are not supported in JSON Schema")}r.default=a},ih=(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},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,r.readOnly=!0},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},fl=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType},ch=(t,e,r,n)=>{let o=t._zod.innerType;de(o,e,n);let i=e.seen.get(t);i.ref=o};function Gr(t){return!!t._zod}function Ht(t,e){return Gr(t)?Fr(t,e):t.safeParse(e)}function Bi(t){if(!t)return;let e;if(Gr(t)?e=t._zod?.def?.shape:e=t.shape,!!e){if(typeof e=="function")try{return e()}catch{return}return e}}function ph(t){if(Gr(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 po={};vn(po,{ZodAny:()=>Ph,ZodArray:()=>Dh,ZodBase64:()=>Al,ZodBase64URL:()=>Ul,ZodBigInt:()=>ia,ZodBigIntFormat:()=>Ll,ZodBoolean:()=>oa,ZodCIDRv4:()=>Rl,ZodCIDRv6:()=>Zl,ZodCUID:()=>El,ZodCUID2:()=>Tl,ZodCatch:()=>eg,ZodCodec:()=>Gl,ZodCustom:()=>la,ZodCustomStringFormat:()=>mo,ZodDate:()=>Fl,ZodDefault:()=>Gh,ZodDiscriminatedUnion:()=>Zh,ZodE164:()=>Cl,ZodEmail:()=>wl,ZodEmoji:()=>zl,ZodEnum:()=>fo,ZodExactOptional:()=>Jh,ZodFile:()=>Fh,ZodFunction:()=>ug,ZodGUID:()=>Yi,ZodIPv4:()=>Nl,ZodIPv6:()=>Dl,ZodIntersection:()=>Ah,ZodJWT:()=>Ml,ZodKSUID:()=>jl,ZodLazy:()=>ag,ZodLiteral:()=>qh,ZodMAC:()=>zh,ZodMap:()=>Mh,ZodNaN:()=>rg,ZodNanoID:()=>Il,ZodNever:()=>jh,ZodNonOptional:()=>Kl,ZodNull:()=>Th,ZodNullable:()=>Wh,ZodNumber:()=>na,ZodNumberFormat:()=>Hr,ZodObject:()=>aa,ZodOptional:()=>Jl,ZodPipe:()=>Wl,ZodPrefault:()=>Bh,ZodPromise:()=>cg,ZodReadonly:()=>ng,ZodRecord:()=>ua,ZodSet:()=>Lh,ZodString:()=>ta,ZodStringFormat:()=>ce,ZodSuccess:()=>Qh,ZodSymbol:()=>Ih,ZodTemplateLiteral:()=>ig,ZodTransform:()=>Vh,ZodTuple:()=>Uh,ZodType:()=>q,ZodULID:()=>Pl,ZodURL:()=>ra,ZodUUID:()=>Dt,ZodUndefined:()=>Eh,ZodUnion:()=>sa,ZodUnknown:()=>Oh,ZodVoid:()=>Nh,ZodXID:()=>Ol,ZodXor:()=>Rh,_ZodString:()=>Sl,_default:()=>Hh,_function:()=>Ax,any:()=>yx,array:()=>H,base64:()=>rx,base64url:()=>nx,bigint:()=>mx,boolean:()=>ve,catch:()=>tg,check:()=>Ux,cidrv4:()=>ex,cidrv6:()=>tx,codec:()=>Dx,cuid:()=>Kb,cuid2:()=>Wb,custom:()=>Hl,date:()=>bx,describe:()=>Cx,discriminatedUnion:()=>ca,e164:()=>ox,email:()=>Zb,emoji:()=>Vb,enum:()=>Ee,exactOptional:()=>Kh,file:()=>Px,float32:()=>lx,float64:()=>dx,function:()=>Ax,guid:()=>Ab,hash:()=>ux,hex:()=>cx,hostname:()=>sx,httpUrl:()=>Fb,instanceof:()=>Lx,int:()=>kl,int32:()=>px,int64:()=>hx,intersection:()=>go,ipv4:()=>Xb,ipv6:()=>Qb,json:()=>Fx,jwt:()=>ix,keyof:()=>xx,ksuid:()=>Bb,lazy:()=>sg,literal:()=>T,looseObject:()=>Ie,looseRecord:()=>zx,mac:()=>Yb,map:()=>Ix,meta:()=>Mx,nan:()=>Nx,nanoid:()=>Jb,nativeEnum:()=>Tx,never:()=>ql,nonoptional:()=>Yh,null:()=>ho,nullable:()=>Qi,nullish:()=>Ox,number:()=>ne,object:()=>z,optional:()=>fe,partialRecord:()=>wx,pipe:()=>ea,prefault:()=>Xh,preprocess:()=>da,promise:()=>Zx,readonly:()=>og,record:()=>pe,refine:()=>lg,set:()=>Ex,strictObject:()=>kx,string:()=>h,stringFormat:()=>ax,stringbool:()=>qx,success:()=>jx,superRefine:()=>dg,symbol:()=>vx,templateLiteral:()=>Rx,transform:()=>Vl,tuple:()=>Ch,uint32:()=>fx,uint64:()=>gx,ulid:()=>Gb,undefined:()=>_x,union:()=>ie,unknown:()=>ue,url:()=>qb,uuid:()=>Ub,uuidv4:()=>Cb,uuidv6:()=>Mb,uuidv7:()=>Lb,void:()=>$x,xid:()=>Hb,xor:()=>Sx});var Xi={};vn(Xi,{endsWith:()=>oo,gt:()=>jt,gte:()=>Re,includes:()=>ro,length:()=>Kr,lowercase:()=>eo,lt:()=>Ot,lte:()=>We,maxLength:()=>Jr,maxSize:()=>fr,mime:()=>io,minLength:()=>Gt,minSize:()=>Nt,multipleOf:()=>pr,negative:()=>tl,nonnegative:()=>nl,nonpositive:()=>rl,normalize:()=>ao,overwrite:()=>vt,positive:()=>el,property:()=>ol,regex:()=>Qn,size:()=>Vr,slugify:()=>Ki,startsWith:()=>no,toLowerCase:()=>co,toUpperCase:()=>uo,trim:()=>so,uppercase:()=>to});var mr={};vn(mr,{ZodISODate:()=>vl,ZodISODateTime:()=>hl,ZodISODuration:()=>bl,ZodISOTime:()=>yl,date:()=>_l,datetime:()=>gl,duration:()=>xl,time:()=>$l});var hl=p("ZodISODateTime",(t,e)=>{Tc.init(t,e),ce.init(t,e)});function gl(t){return Ou(hl,t)}var vl=p("ZodISODate",(t,e)=>{Pc.init(t,e),ce.init(t,e)});function _l(t){return ju(vl,t)}var yl=p("ZodISOTime",(t,e)=>{Oc.init(t,e),ce.init(t,e)});function $l(t){return Nu(yl,t)}var bl=p("ZodISODuration",(t,e)=>{jc.init(t,e),ce.init(t,e)});function xl(t){return Du(bl,t)}var fh=(t,e)=>{di.init(t,e),t.name="ZodError",Object.defineProperties(t,{format:{value:r=>fi(t,r)},flatten:{value:r=>pi(t,r)},addIssue:{value:r=>{t.issues.push(r),t.message=JSON.stringify(t.issues,Mr,2)}},addIssues:{value:r=>{t.issues.push(...r),t.message=JSON.stringify(t.issues,Mr,2)}},isEmpty:{get(){return t.issues.length===0}}})},OD=p("ZodError",fh),Ge=p("ZodError",fh,{Parent:Error});var mh=Un(Ge),hh=Mn(Ge),gh=qn(Ge),vh=Fn(Ge),_h=Ef(Ge),yh=Tf(Ge),$h=Pf(Ge),bh=Of(Ge),xh=jf(Ge),kh=Nf(Ge),Sh=Df(Ge),wh=Rf(Ge);var q=p("ZodType",(t,e)=>(M.init(t,e),Object.assign(t["~standard"],{jsonSchema:{input:lo(t,"input"),output:lo(t,"output")}}),t.toJSONSchema=wm(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)=>Ne(t,r,n),t.brand=()=>t,t.register=((r,n)=>(r.add(t,n),t)),t.parse=(r,n)=>mh(t,r,n,{callee:t.parse}),t.safeParse=(r,n)=>gh(t,r,n),t.parseAsync=async(r,n)=>hh(t,r,n,{callee:t.parseAsync}),t.safeParseAsync=async(r,n)=>vh(t,r,n),t.spa=t.safeParseAsync,t.encode=(r,n)=>_h(t,r,n),t.decode=(r,n)=>yh(t,r,n),t.encodeAsync=async(r,n)=>$h(t,r,n),t.decodeAsync=async(r,n)=>bh(t,r,n),t.safeEncode=(r,n)=>xh(t,r,n),t.safeDecode=(r,n)=>kh(t,r,n),t.safeEncodeAsync=async(r,n)=>Sh(t,r,n),t.safeDecodeAsync=async(r,n)=>wh(t,r,n),t.refine=(r,n)=>t.check(lg(r,n)),t.superRefine=r=>t.check(dg(r)),t.overwrite=r=>t.check(vt(r)),t.optional=()=>fe(t),t.exactOptional=()=>Kh(t),t.nullable=()=>Qi(t),t.nullish=()=>fe(Qi(t)),t.nonoptional=r=>Yh(t,r),t.array=()=>H(t),t.or=r=>ie([t,r]),t.and=r=>go(t,r),t.transform=r=>ea(t,Vl(r)),t.default=r=>Hh(t,r),t.prefault=r=>Xh(t,r),t.catch=r=>tg(t,r),t.pipe=r=>ea(t,r),t.readonly=()=>og(t),t.describe=r=>{let n=t.clone();return De.add(n,{description:r}),n},Object.defineProperty(t,"description",{get(){return De.get(t)?.description},configurable:!0}),t.meta=(...r)=>{if(r.length===0)return De.get(t);let n=t.clone();return De.add(n,r[0]),n},t.isOptional=()=>t.safeParse(void 0).success,t.isNullable=()=>t.safeParse(null).success,t.apply=r=>r(t),t)),Sl=p("_ZodString",(t,e)=>{dr.init(t,e),q.init(t,e),t._zod.processJSONSchema=(n,o,i)=>zm(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(Qn(...n)),t.includes=(...n)=>t.check(ro(...n)),t.startsWith=(...n)=>t.check(no(...n)),t.endsWith=(...n)=>t.check(oo(...n)),t.min=(...n)=>t.check(Gt(...n)),t.max=(...n)=>t.check(Jr(...n)),t.length=(...n)=>t.check(Kr(...n)),t.nonempty=(...n)=>t.check(Gt(1,...n)),t.lowercase=n=>t.check(eo(n)),t.uppercase=n=>t.check(to(n)),t.trim=()=>t.check(so()),t.normalize=(...n)=>t.check(ao(...n)),t.toLowerCase=()=>t.check(co()),t.toUpperCase=()=>t.check(uo()),t.slugify=()=>t.check(Ki())}),ta=p("ZodString",(t,e)=>{dr.init(t,e),Sl.init(t,e),t.email=r=>t.check(zi(wl,r)),t.url=r=>t.check(Yn(ra,r)),t.jwt=r=>t.check(Ji(Ml,r)),t.emoji=r=>t.check(Oi(zl,r)),t.guid=r=>t.check(Xn(Yi,r)),t.uuid=r=>t.check(Ii(Dt,r)),t.uuidv4=r=>t.check(Ei(Dt,r)),t.uuidv6=r=>t.check(Ti(Dt,r)),t.uuidv7=r=>t.check(Pi(Dt,r)),t.nanoid=r=>t.check(ji(Il,r)),t.guid=r=>t.check(Xn(Yi,r)),t.cuid=r=>t.check(Ni(El,r)),t.cuid2=r=>t.check(Di(Tl,r)),t.ulid=r=>t.check(Ri(Pl,r)),t.base64=r=>t.check(qi(Al,r)),t.base64url=r=>t.check(Fi(Ul,r)),t.xid=r=>t.check(Zi(Ol,r)),t.ksuid=r=>t.check(Ai(jl,r)),t.ipv4=r=>t.check(Ui(Nl,r)),t.ipv6=r=>t.check(Ci(Dl,r)),t.cidrv4=r=>t.check(Mi(Rl,r)),t.cidrv6=r=>t.check(Li(Zl,r)),t.e164=r=>t.check(Vi(Cl,r)),t.datetime=r=>t.check(gl(r)),t.date=r=>t.check(_l(r)),t.time=r=>t.check($l(r)),t.duration=r=>t.check(xl(r))});function h(t){return Tu(ta,t)}var ce=p("ZodStringFormat",(t,e)=>{oe.init(t,e),Sl.init(t,e)}),wl=p("ZodEmail",(t,e)=>{$c.init(t,e),ce.init(t,e)});function Zb(t){return zi(wl,t)}var Yi=p("ZodGUID",(t,e)=>{_c.init(t,e),ce.init(t,e)});function Ab(t){return Xn(Yi,t)}var Dt=p("ZodUUID",(t,e)=>{yc.init(t,e),ce.init(t,e)});function Ub(t){return Ii(Dt,t)}function Cb(t){return Ei(Dt,t)}function Mb(t){return Ti(Dt,t)}function Lb(t){return Pi(Dt,t)}var ra=p("ZodURL",(t,e)=>{bc.init(t,e),ce.init(t,e)});function qb(t){return Yn(ra,t)}function Fb(t){return Yn(ra,{protocol:/^https?$/,hostname:Ye.domain,...y.normalizeParams(t)})}var zl=p("ZodEmoji",(t,e)=>{xc.init(t,e),ce.init(t,e)});function Vb(t){return Oi(zl,t)}var Il=p("ZodNanoID",(t,e)=>{kc.init(t,e),ce.init(t,e)});function Jb(t){return ji(Il,t)}var El=p("ZodCUID",(t,e)=>{Sc.init(t,e),ce.init(t,e)});function Kb(t){return Ni(El,t)}var Tl=p("ZodCUID2",(t,e)=>{wc.init(t,e),ce.init(t,e)});function Wb(t){return Di(Tl,t)}var Pl=p("ZodULID",(t,e)=>{zc.init(t,e),ce.init(t,e)});function Gb(t){return Ri(Pl,t)}var Ol=p("ZodXID",(t,e)=>{Ic.init(t,e),ce.init(t,e)});function Hb(t){return Zi(Ol,t)}var jl=p("ZodKSUID",(t,e)=>{Ec.init(t,e),ce.init(t,e)});function Bb(t){return Ai(jl,t)}var Nl=p("ZodIPv4",(t,e)=>{Nc.init(t,e),ce.init(t,e)});function Xb(t){return Ui(Nl,t)}var zh=p("ZodMAC",(t,e)=>{Rc.init(t,e),ce.init(t,e)});function Yb(t){return Pu(zh,t)}var Dl=p("ZodIPv6",(t,e)=>{Dc.init(t,e),ce.init(t,e)});function Qb(t){return Ci(Dl,t)}var Rl=p("ZodCIDRv4",(t,e)=>{Zc.init(t,e),ce.init(t,e)});function ex(t){return Mi(Rl,t)}var Zl=p("ZodCIDRv6",(t,e)=>{Ac.init(t,e),ce.init(t,e)});function tx(t){return Li(Zl,t)}var Al=p("ZodBase64",(t,e)=>{Uc.init(t,e),ce.init(t,e)});function rx(t){return qi(Al,t)}var Ul=p("ZodBase64URL",(t,e)=>{Cc.init(t,e),ce.init(t,e)});function nx(t){return Fi(Ul,t)}var Cl=p("ZodE164",(t,e)=>{Mc.init(t,e),ce.init(t,e)});function ox(t){return Vi(Cl,t)}var Ml=p("ZodJWT",(t,e)=>{Lc.init(t,e),ce.init(t,e)});function ix(t){return Ji(Ml,t)}var mo=p("ZodCustomStringFormat",(t,e)=>{qc.init(t,e),ce.init(t,e)});function ax(t,e,r={}){return Wr(mo,t,e,r)}function sx(t){return Wr(mo,"hostname",Ye.hostname,t)}function cx(t){return Wr(mo,"hex",Ye.hex,t)}function ux(t,e){let r=e?.enc??"hex",n=`${t}_${r}`,o=Ye[n];if(!o)throw new Error(`Unrecognized hash format: ${n}`);return Wr(mo,n,o,e)}var na=p("ZodNumber",(t,e)=>{xi.init(t,e),q.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Im(t,n,o,i),t.gt=(n,o)=>t.check(jt(n,o)),t.gte=(n,o)=>t.check(Re(n,o)),t.min=(n,o)=>t.check(Re(n,o)),t.lt=(n,o)=>t.check(Ot(n,o)),t.lte=(n,o)=>t.check(We(n,o)),t.max=(n,o)=>t.check(We(n,o)),t.int=n=>t.check(kl(n)),t.safe=n=>t.check(kl(n)),t.positive=n=>t.check(jt(0,n)),t.nonnegative=n=>t.check(Re(0,n)),t.negative=n=>t.check(Ot(0,n)),t.nonpositive=n=>t.check(We(0,n)),t.multipleOf=(n,o)=>t.check(pr(n,o)),t.step=(n,o)=>t.check(pr(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 Ru(na,t)}var Hr=p("ZodNumberFormat",(t,e)=>{Fc.init(t,e),na.init(t,e)});function kl(t){return Zu(Hr,t)}function lx(t){return Au(Hr,t)}function dx(t){return Uu(Hr,t)}function px(t){return Cu(Hr,t)}function fx(t){return Mu(Hr,t)}var oa=p("ZodBoolean",(t,e)=>{Gn.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Em(t,r,n,o)});function ve(t){return Lu(oa,t)}var ia=p("ZodBigInt",(t,e)=>{ki.init(t,e),q.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Tm(t,n,o,i),t.gte=(n,o)=>t.check(Re(n,o)),t.min=(n,o)=>t.check(Re(n,o)),t.gt=(n,o)=>t.check(jt(n,o)),t.gte=(n,o)=>t.check(Re(n,o)),t.min=(n,o)=>t.check(Re(n,o)),t.lt=(n,o)=>t.check(Ot(n,o)),t.lte=(n,o)=>t.check(We(n,o)),t.max=(n,o)=>t.check(We(n,o)),t.positive=n=>t.check(jt(BigInt(0),n)),t.negative=n=>t.check(Ot(BigInt(0),n)),t.nonpositive=n=>t.check(We(BigInt(0),n)),t.nonnegative=n=>t.check(Re(BigInt(0),n)),t.multipleOf=(n,o)=>t.check(pr(n,o));let r=t._zod.bag;t.minValue=r.minimum??null,t.maxValue=r.maximum??null,t.format=r.format??null});function mx(t){return qu(ia,t)}var Ll=p("ZodBigIntFormat",(t,e)=>{Vc.init(t,e),ia.init(t,e)});function hx(t){return Fu(Ll,t)}function gx(t){return Vu(Ll,t)}var Ih=p("ZodSymbol",(t,e)=>{Jc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Pm(t,r,n,o)});function vx(t){return Ju(Ih,t)}var Eh=p("ZodUndefined",(t,e)=>{Kc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>jm(t,r,n,o)});function _x(t){return Ku(Eh,t)}var Th=p("ZodNull",(t,e)=>{Wc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Om(t,r,n,o)});function ho(t){return Wu(Th,t)}var Ph=p("ZodAny",(t,e)=>{Gc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Rm(t,r,n,o)});function yx(){return Gu(Ph)}var Oh=p("ZodUnknown",(t,e)=>{Hc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Zm(t,r,n,o)});function ue(){return Hu(Oh)}var jh=p("ZodNever",(t,e)=>{Bc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Dm(t,r,n,o)});function ql(t){return Bu(jh,t)}var Nh=p("ZodVoid",(t,e)=>{Xc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Nm(t,r,n,o)});function $x(t){return Xu(Nh,t)}var Fl=p("ZodDate",(t,e)=>{Yc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Am(t,n,o,i),t.min=(n,o)=>t.check(Re(n,o)),t.max=(n,o)=>t.check(We(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 bx(t){return Yu(Fl,t)}var Dh=p("ZodArray",(t,e)=>{Qc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Hm(t,r,n,o),t.element=e.element,t.min=(r,n)=>t.check(Gt(r,n)),t.nonempty=r=>t.check(Gt(1,r)),t.max=(r,n)=>t.check(Jr(r,n)),t.length=(r,n)=>t.check(Kr(r,n)),t.unwrap=()=>t.element});function H(t,e){return Sm(Dh,t,e)}function xx(t){let e=t._zod.def.shape;return Ee(Object.keys(e))}var aa=p("ZodObject",(t,e)=>{xm.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Bm(t,r,n,o),y.defineLazy(t,"shape",()=>e.shape),t.keyof=()=>Ee(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:ql()}),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(Jl,t,r[0]),t.required=(...r)=>y.required(Kl,t,r[0])});function z(t,e){let r={type:"object",shape:t??{},...y.normalizeParams(e)};return new aa(r)}function kx(t,e){return new aa({type:"object",shape:t,catchall:ql(),...y.normalizeParams(e)})}function Ie(t,e){return new aa({type:"object",shape:t,catchall:ue(),...y.normalizeParams(e)})}var sa=p("ZodUnion",(t,e)=>{Hn.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>pl(t,r,n,o),t.options=e.options});function ie(t,e){return new sa({type:"union",options:t,...y.normalizeParams(e)})}var Rh=p("ZodXor",(t,e)=>{sa.init(t,e),eu.init(t,e),t._zod.processJSONSchema=(r,n,o)=>pl(t,r,n,o),t.options=e.options});function Sx(t,e){return new Rh({type:"union",options:t,inclusive:!1,...y.normalizeParams(e)})}var Zh=p("ZodDiscriminatedUnion",(t,e)=>{sa.init(t,e),tu.init(t,e)});function ca(t,e,r){return new Zh({type:"union",options:e,discriminator:t,...y.normalizeParams(r)})}var Ah=p("ZodIntersection",(t,e)=>{ru.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Xm(t,r,n,o)});function go(t,e){return new Ah({type:"intersection",left:t,right:e})}var Uh=p("ZodTuple",(t,e)=>{Si.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Ym(t,r,n,o),t.rest=r=>t.clone({...t._zod.def,rest:r})});function Ch(t,e,r){let n=e instanceof M,o=n?r:e,i=n?e:null;return new Uh({type:"tuple",items:t,rest:i,...y.normalizeParams(o)})}var ua=p("ZodRecord",(t,e)=>{nu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Qm(t,r,n,o),t.keyType=e.keyType,t.valueType=e.valueType});function pe(t,e,r){return new ua({type:"record",keyType:t,valueType:e,...y.normalizeParams(r)})}function wx(t,e,r){let n=Ne(t);return n._zod.values=void 0,new ua({type:"record",keyType:n,valueType:e,...y.normalizeParams(r)})}function zx(t,e,r){return new ua({type:"record",keyType:t,valueType:e,mode:"loose",...y.normalizeParams(r)})}var Mh=p("ZodMap",(t,e)=>{ou.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Wm(t,r,n,o),t.keyType=e.keyType,t.valueType=e.valueType,t.min=(...r)=>t.check(Nt(...r)),t.nonempty=r=>t.check(Nt(1,r)),t.max=(...r)=>t.check(fr(...r)),t.size=(...r)=>t.check(Vr(...r))});function Ix(t,e,r){return new Mh({type:"map",keyType:t,valueType:e,...y.normalizeParams(r)})}var Lh=p("ZodSet",(t,e)=>{iu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Gm(t,r,n,o),t.min=(...r)=>t.check(Nt(...r)),t.nonempty=r=>t.check(Nt(1,r)),t.max=(...r)=>t.check(fr(...r)),t.size=(...r)=>t.check(Vr(...r))});function Ex(t,e){return new Lh({type:"set",valueType:t,...y.normalizeParams(e)})}var fo=p("ZodEnum",(t,e)=>{au.init(t,e),q.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Um(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 fo({...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 fo({...e,checks:[],...y.normalizeParams(o),entries:i})}});function Ee(t,e){let r=Array.isArray(t)?Object.fromEntries(t.map(n=>[n,n])):t;return new fo({type:"enum",entries:r,...y.normalizeParams(e)})}function Tx(t,e){return new fo({type:"enum",entries:t,...y.normalizeParams(e)})}var qh=p("ZodLiteral",(t,e)=>{su.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Cm(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 qh({type:"literal",values:Array.isArray(t)?t:[t],...y.normalizeParams(e)})}var Fh=p("ZodFile",(t,e)=>{cu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>qm(t,r,n,o),t.min=(r,n)=>t.check(Nt(r,n)),t.max=(r,n)=>t.check(fr(r,n)),t.mime=(r,n)=>t.check(io(Array.isArray(r)?r:[r],n))});function Px(t){return il(Fh,t)}var Vh=p("ZodTransform",(t,e)=>{uu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Km(t,r,n,o),t._zod.parse=(r,n)=>{if(n.direction==="backward")throw new cr(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 Vl(t){return new Vh({type:"transform",transform:t})}var Jl=p("ZodOptional",(t,e)=>{wi.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>fl(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function fe(t){return new Jl({type:"optional",innerType:t})}var Jh=p("ZodExactOptional",(t,e)=>{lu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>fl(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function Kh(t){return new Jh({type:"optional",innerType:t})}var Wh=p("ZodNullable",(t,e)=>{du.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>eh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function Qi(t){return new Wh({type:"nullable",innerType:t})}function Ox(t){return fe(Qi(t))}var Gh=p("ZodDefault",(t,e)=>{pu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>rh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType,t.removeDefault=t.unwrap});function Hh(t,e){return new Gh({type:"default",innerType:t,get defaultValue(){return typeof e=="function"?e():y.shallowClone(e)}})}var Bh=p("ZodPrefault",(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 Xh(t,e){return new Bh({type:"prefault",innerType:t,get defaultValue(){return typeof e=="function"?e():y.shallowClone(e)}})}var Kl=p("ZodNonOptional",(t,e)=>{mu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>th(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function Yh(t,e){return new Kl({type:"nonoptional",innerType:t,...y.normalizeParams(e)})}var Qh=p("ZodSuccess",(t,e)=>{hu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Fm(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function jx(t){return new Qh({type:"success",innerType:t})}var eg=p("ZodCatch",(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,t.removeCatch=t.unwrap});function tg(t,e){return new eg({type:"catch",innerType:t,catchValue:typeof e=="function"?e:()=>e})}var rg=p("ZodNaN",(t,e)=>{vu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Mm(t,r,n,o)});function Nx(t){return Qu(rg,t)}var Wl=p("ZodPipe",(t,e)=>{_u.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>ih(t,r,n,o),t.in=e.in,t.out=e.out});function ea(t,e){return new Wl({type:"pipe",in:t,out:e})}var Gl=p("ZodCodec",(t,e)=>{Wl.init(t,e),Bn.init(t,e)});function Dx(t,e,r){return new Gl({type:"pipe",in:t,out:e,transform:r.decode,reverseTransform:r.encode})}var ng=p("ZodReadonly",(t,e)=>{yu.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 og(t){return new ng({type:"readonly",innerType:t})}var ig=p("ZodTemplateLiteral",(t,e)=>{$u.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Lm(t,r,n,o)});function Rx(t,e){return new ig({type:"template_literal",parts:t,...y.normalizeParams(e)})}var ag=p("ZodLazy",(t,e)=>{ku.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>ch(t,r,n,o),t.unwrap=()=>t._zod.def.getter()});function sg(t){return new ag({type:"lazy",getter:t})}var cg=p("ZodPromise",(t,e)=>{xu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>sh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function Zx(t){return new cg({type:"promise",innerType:t})}var ug=p("ZodFunction",(t,e)=>{bu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Jm(t,r,n,o)});function Ax(t){return new ug({type:"function",input:Array.isArray(t?.input)?Ch(t?.input):t?.input??H(ue()),output:t?.output??ue()})}var la=p("ZodCustom",(t,e)=>{Su.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Vm(t,r,n,o)});function Ux(t){let e=new se({check:"custom"});return e._zod.check=t,e}function Hl(t,e){return al(la,t??(()=>!0),e)}function lg(t,e={}){return sl(la,t,e)}function dg(t){return cl(t)}var Cx=ul,Mx=ll;function Lx(t,e={}){let r=new la({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 qx=(...t)=>dl({Codec:Gl,Boolean:oa,String:ta},...t);function Fx(t){let e=sg(()=>ie([h(t),ne(),ve(),ho(),H(e),pe(h(),e)]));return e}function da(t,e){return ea(Vl(t),e)}var pg;pg||(pg={});var CD={...po,...Xi,iso:mr};_e(wu());var Xl="2025-11-25";var fg=[Xl,"2025-06-18","2025-03-26","2024-11-05","2024-10-07"],Bt="io.modelcontextprotocol/related-task",fa="2.0",$e=Hl(t=>t!==null&&(typeof t=="object"||typeof t=="function")),mg=ie([h(),ne().int()]),hg=h(),o4=Ie({ttl:ie([ne(),ho()]).optional(),pollInterval:ne().optional()}),Wx=z({ttl:ne().optional()}),Gx=z({taskId:h()}),Yl=Ie({progressToken:mg.optional(),[Bt]:Gx.optional()}),He=z({_meta:Yl.optional()}),vo=He.extend({task:Wx.optional()}),gg=t=>vo.safeParse(t).success,be=z({method:h(),params:He.loose().optional()}),Qe=z({_meta:Yl.optional()}),et=z({method:h(),params:Qe.loose().optional()}),xe=Ie({_meta:Yl.optional()}),ma=ie([h(),ne().int()]),vg=z({jsonrpc:T(fa),id:ma,...be.shape}).strict(),Ql=t=>vg.safeParse(t).success,_g=z({jsonrpc:T(fa),...et.shape}).strict(),yg=t=>_g.safeParse(t).success,ed=z({jsonrpc:T(fa),id:ma,result:xe}).strict(),_o=t=>ed.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 td=z({jsonrpc:T(fa),id:ma.optional(),error:z({code:ne().int(),message:h(),data:ue().optional()})}).strict();var $g=t=>td.safeParse(t).success;var bg=ie([vg,_g,ed,td]),i4=ie([ed,td]),ha=xe.strict(),Hx=Qe.extend({requestId:ma.optional(),reason:h().optional()}),ga=et.extend({method:T("notifications/cancelled"),params:Hx}),Bx=z({src:h(),mimeType:h().optional(),sizes:H(h()).optional(),theme:Ee(["light","dark"]).optional()}),yo=z({icons:H(Bx).optional()}),Br=z({name:h(),title:h().optional()}),xg=Br.extend({...Br.shape,...yo.shape,version:h(),websiteUrl:h().optional(),description:h().optional()}),Xx=go(z({applyDefaults:ve().optional()}),pe(h(),ue())),Yx=da(t=>t&&typeof t=="object"&&!Array.isArray(t)&&Object.keys(t).length===0?{form:{}}:t,go(z({form:Xx.optional(),url:$e.optional()}),pe(h(),ue()).optional())),Qx=Ie({list:$e.optional(),cancel:$e.optional(),requests:Ie({sampling:Ie({createMessage:$e.optional()}).optional(),elicitation:Ie({create:$e.optional()}).optional()}).optional()}),ek=Ie({list:$e.optional(),cancel:$e.optional(),requests:Ie({tools:Ie({call:$e.optional()}).optional()}).optional()}),tk=z({experimental:pe(h(),$e).optional(),sampling:z({context:$e.optional(),tools:$e.optional()}).optional(),elicitation:Yx.optional(),roots:z({listChanged:ve().optional()}).optional(),tasks:Qx.optional()}),rk=He.extend({protocolVersion:h(),capabilities:tk,clientInfo:xg}),rd=be.extend({method:T("initialize"),params:rk});var nk=z({experimental:pe(h(),$e).optional(),logging:$e.optional(),completions:$e.optional(),prompts:z({listChanged:ve().optional()}).optional(),resources:z({subscribe:ve().optional(),listChanged:ve().optional()}).optional(),tools:z({listChanged:ve().optional()}).optional(),tasks:ek.optional()}),ok=xe.extend({protocolVersion:h(),capabilities:nk,serverInfo:xg,instructions:h().optional()}),nd=et.extend({method:T("notifications/initialized"),params:Qe.optional()});var va=be.extend({method:T("ping"),params:He.optional()}),ik=z({progress:ne(),total:fe(ne()),message:fe(h())}),ak=z({...Qe.shape,...ik.shape,progressToken:mg}),_a=et.extend({method:T("notifications/progress"),params:ak}),sk=He.extend({cursor:hg.optional()}),$o=be.extend({params:sk.optional()}),bo=xe.extend({nextCursor:hg.optional()}),ck=Ee(["working","input_required","completed","failed","cancelled"]),xo=z({taskId:h(),status:ck,ttl:ie([ne(),ho()]),createdAt:h(),lastUpdatedAt:h(),pollInterval:fe(ne()),statusMessage:fe(h())}),Xr=xe.extend({task:xo}),uk=Qe.merge(xo),ko=et.extend({method:T("notifications/tasks/status"),params:uk}),ya=be.extend({method:T("tasks/get"),params:He.extend({taskId:h()})}),$a=xe.merge(xo),ba=be.extend({method:T("tasks/result"),params:He.extend({taskId:h()})}),a4=xe.loose(),xa=$o.extend({method:T("tasks/list")}),ka=bo.extend({tasks:H(xo)}),Sa=be.extend({method:T("tasks/cancel"),params:He.extend({taskId:h()})}),kg=xe.merge(xo),Sg=z({uri:h(),mimeType:fe(h()),_meta:pe(h(),ue()).optional()}),wg=Sg.extend({text:h()}),od=h().refine(t=>{try{return atob(t),!0}catch{return!1}},{message:"Invalid Base64 string"}),zg=Sg.extend({blob:od}),So=Ee(["user","assistant"]),Yr=z({audience:H(So).optional(),priority:ne().min(0).max(1).optional(),lastModified:mr.datetime({offset:!0}).optional()}),Ig=z({...Br.shape,...yo.shape,uri:h(),description:fe(h()),mimeType:fe(h()),annotations:Yr.optional(),_meta:fe(Ie({}))}),lk=z({...Br.shape,...yo.shape,uriTemplate:h(),description:fe(h()),mimeType:fe(h()),annotations:Yr.optional(),_meta:fe(Ie({}))}),dk=$o.extend({method:T("resources/list")}),pk=bo.extend({resources:H(Ig)}),fk=$o.extend({method:T("resources/templates/list")}),mk=bo.extend({resourceTemplates:H(lk)}),id=He.extend({uri:h()}),hk=id,gk=be.extend({method:T("resources/read"),params:hk}),vk=xe.extend({contents:H(ie([wg,zg]))}),_k=et.extend({method:T("notifications/resources/list_changed"),params:Qe.optional()}),yk=id,$k=be.extend({method:T("resources/subscribe"),params:yk}),bk=id,xk=be.extend({method:T("resources/unsubscribe"),params:bk}),kk=Qe.extend({uri:h()}),Sk=et.extend({method:T("notifications/resources/updated"),params:kk}),wk=z({name:h(),description:fe(h()),required:fe(ve())}),zk=z({...Br.shape,...yo.shape,description:fe(h()),arguments:fe(H(wk)),_meta:fe(Ie({}))}),Ik=$o.extend({method:T("prompts/list")}),Ek=bo.extend({prompts:H(zk)}),Tk=He.extend({name:h(),arguments:pe(h(),h()).optional()}),Pk=be.extend({method:T("prompts/get"),params:Tk}),ad=z({type:T("text"),text:h(),annotations:Yr.optional(),_meta:pe(h(),ue()).optional()}),sd=z({type:T("image"),data:od,mimeType:h(),annotations:Yr.optional(),_meta:pe(h(),ue()).optional()}),cd=z({type:T("audio"),data:od,mimeType:h(),annotations:Yr.optional(),_meta:pe(h(),ue()).optional()}),Ok=z({type:T("tool_use"),name:h(),id:h(),input:pe(h(),ue()),_meta:pe(h(),ue()).optional()}),jk=z({type:T("resource"),resource:ie([wg,zg]),annotations:Yr.optional(),_meta:pe(h(),ue()).optional()}),Nk=Ig.extend({type:T("resource_link")}),ud=ie([ad,sd,cd,Nk,jk]),Dk=z({role:So,content:ud}),Rk=xe.extend({description:h().optional(),messages:H(Dk)}),Zk=et.extend({method:T("notifications/prompts/list_changed"),params:Qe.optional()}),Ak=z({title:h().optional(),readOnlyHint:ve().optional(),destructiveHint:ve().optional(),idempotentHint:ve().optional(),openWorldHint:ve().optional()}),Uk=z({taskSupport:Ee(["required","optional","forbidden"]).optional()}),Eg=z({...Br.shape,...yo.shape,description:h().optional(),inputSchema:z({type:T("object"),properties:pe(h(),$e).optional(),required:H(h()).optional()}).catchall(ue()),outputSchema:z({type:T("object"),properties:pe(h(),$e).optional(),required:H(h()).optional()}).catchall(ue()).optional(),annotations:Ak.optional(),execution:Uk.optional(),_meta:pe(h(),ue()).optional()}),ld=$o.extend({method:T("tools/list")}),Ck=bo.extend({tools:H(Eg)}),wa=xe.extend({content:H(ud).default([]),structuredContent:pe(h(),ue()).optional(),isError:ve().optional()}),s4=wa.or(xe.extend({toolResult:ue()})),Mk=vo.extend({name:h(),arguments:pe(h(),ue()).optional()}),wo=be.extend({method:T("tools/call"),params:Mk}),Lk=et.extend({method:T("notifications/tools/list_changed"),params:Qe.optional()}),c4=z({autoRefresh:ve().default(!0),debounceMs:ne().int().nonnegative().default(300)}),zo=Ee(["debug","info","notice","warning","error","critical","alert","emergency"]),qk=He.extend({level:zo}),dd=be.extend({method:T("logging/setLevel"),params:qk}),Fk=Qe.extend({level:zo,logger:h().optional(),data:ue()}),Vk=et.extend({method:T("notifications/message"),params:Fk}),Jk=z({name:h().optional()}),Kk=z({hints:H(Jk).optional(),costPriority:ne().min(0).max(1).optional(),speedPriority:ne().min(0).max(1).optional(),intelligencePriority:ne().min(0).max(1).optional()}),Wk=z({mode:Ee(["auto","required","none"]).optional()}),Gk=z({type:T("tool_result"),toolUseId:h().describe("The unique identifier for the corresponding tool call."),content:H(ud).default([]),structuredContent:z({}).loose().optional(),isError:ve().optional(),_meta:pe(h(),ue()).optional()}),Hk=ca("type",[ad,sd,cd]),pa=ca("type",[ad,sd,cd,Ok,Gk]),Bk=z({role:So,content:ie([pa,H(pa)]),_meta:pe(h(),ue()).optional()}),Xk=vo.extend({messages:H(Bk),modelPreferences:Kk.optional(),systemPrompt:h().optional(),includeContext:Ee(["none","thisServer","allServers"]).optional(),temperature:ne().optional(),maxTokens:ne().int(),stopSequences:H(h()).optional(),metadata:$e.optional(),tools:H(Eg).optional(),toolChoice:Wk.optional()}),Yk=be.extend({method:T("sampling/createMessage"),params:Xk}),pd=xe.extend({model:h(),stopReason:fe(Ee(["endTurn","stopSequence","maxTokens"]).or(h())),role:So,content:Hk}),fd=xe.extend({model:h(),stopReason:fe(Ee(["endTurn","stopSequence","maxTokens","toolUse"]).or(h())),role:So,content:ie([pa,H(pa)])}),Qk=z({type:T("boolean"),title:h().optional(),description:h().optional(),default:ve().optional()}),eS=z({type:T("string"),title:h().optional(),description:h().optional(),minLength:ne().optional(),maxLength:ne().optional(),format:Ee(["email","uri","date","date-time"]).optional(),default:h().optional()}),tS=z({type:Ee(["number","integer"]),title:h().optional(),description:h().optional(),minimum:ne().optional(),maximum:ne().optional(),default:ne().optional()}),rS=z({type:T("string"),title:h().optional(),description:h().optional(),enum:H(h()),default:h().optional()}),nS=z({type:T("string"),title:h().optional(),description:h().optional(),oneOf:H(z({const:h(),title:h()})),default:h().optional()}),oS=z({type:T("string"),title:h().optional(),description:h().optional(),enum:H(h()),enumNames:H(h()).optional(),default:h().optional()}),iS=ie([rS,nS]),aS=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()}),sS=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()}),cS=ie([aS,sS]),uS=ie([oS,iS,cS]),lS=ie([uS,Qk,eS,tS]),dS=vo.extend({mode:T("form").optional(),message:h(),requestedSchema:z({type:T("object"),properties:pe(h(),lS),required:H(h()).optional()})}),pS=vo.extend({mode:T("url"),message:h(),elicitationId:h(),url:h().url()}),fS=ie([dS,pS]),mS=be.extend({method:T("elicitation/create"),params:fS}),hS=Qe.extend({elicitationId:h()}),gS=et.extend({method:T("notifications/elicitation/complete"),params:hS}),za=xe.extend({action:Ee(["accept","decline","cancel"]),content:da(t=>t===null?void 0:t,pe(h(),ie([h(),ne(),ve(),H(h())])).optional())}),vS=z({type:T("ref/resource"),uri:h()});var _S=z({type:T("ref/prompt"),name:h()}),yS=He.extend({ref:ie([_S,vS]),argument:z({name:h(),value:h()}),context:z({arguments:pe(h(),h()).optional()}).optional()}),$S=be.extend({method:T("completion/complete"),params:yS});var bS=xe.extend({completion:Ie({values:H(h()).max(100),total:fe(ne().int()),hasMore:fe(ve())})}),xS=z({uri:h().startsWith("file://"),name:h().optional(),_meta:pe(h(),ue()).optional()}),kS=be.extend({method:T("roots/list"),params:He.optional()}),md=xe.extend({roots:H(xS)}),SS=et.extend({method:T("notifications/roots/list_changed"),params:Qe.optional()}),u4=ie([va,rd,$S,dd,Pk,Ik,dk,fk,gk,$k,xk,wo,ld,ya,ba,xa,Sa]),l4=ie([ga,_a,nd,SS,ko]),d4=ie([ha,pd,fd,za,md,$a,ka,Xr]),p4=ie([va,Yk,mS,kS,ya,ba,xa,Sa]),f4=ie([ga,_a,Vk,Sk,_k,Lk,Zk,ko,gS]),m4=ie([ha,ok,bS,Rk,Ek,pk,mk,vk,wa,Ck,$a,ka,Xr]),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 Bl(o.elicitations,r)}return new t(e,r,n)}},Bl=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 Xt(t){return t==="completed"||t==="failed"||t==="cancelled"}var G4=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function hd(t){let r=Bi(t)?.method;if(!r)throw new Error("Schema is missing a method literal");let n=ph(r);if(typeof n!="string")throw new Error("Schema method literal must be a string");return n}function gd(t,e){let r=Ht(t,e);if(!r.success)throw r.error;return r.data}var PS=6e4,Ia=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(ga,r=>{this._oncancel(r)}),this.setNotificationHandler(_a,r=>{this._onprogress(r)}),this.setRequestHandler(va,r=>({})),this._taskStore=e?.taskStore,this._taskMessageQueue=e?.taskMessageQueue,this._taskStore&&(this.setRequestHandler(ya,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(ba,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(!Xt(a.status))return await this._waitForTaskUpdate(i,n.signal),await o();if(Xt(a.status)){let s=await this._taskStore.getTaskResult(i,n.sessionId);return this._clearTaskQueue(i),{...s,_meta:{...s._meta,[Bt]:{taskId:i}}}}return await o()};return await o()}),this.setRequestHandler(xa,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(Sa,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(Xt(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)||$g(i)?this._onresponse(i):Ql(i)?this._onrequest(i,a):yg(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?.[Bt]?.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=gg(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,Xr,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},Xt(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||{},[Bt]: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(U=>this._onerror(new Error(`Failed to send cancellation: ${U}`)));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=Ht(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??PS,$=()=>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 U=this._responseHandlers.get(m);U?U(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},$a,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},ka,r)}async cancelTask(e,r){return this.request({method:"tasks/cancel",params:e},kg,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||{},[Bt]: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||{},[Bt]: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||{},[Bt]:r.relatedTask}}}),await this._transport.send(a,r)}setRequestHandler(e,r){let n=hd(e);this.assertRequestHandlerCapability(n),this._requestHandlers.set(n,(o,i)=>{let a=gd(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=hd(e);this._notificationHandlers.set(n,o=>{let i=gd(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"&&Ql(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=ko.parse({method:"notifications/tasks/status",params:s});await this.notification(c),Xt(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(Xt(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=ko.parse({method:"notifications/tasks/status",params:c});await this.notification(u),Xt(c.status)&&this._cleanupTaskProgressHandler(o)}},listTasks:o=>n.listTasks(o,r)}}};function Tg(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Pg(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];Tg(a)&&Tg(i)?r[o]={...a,...i}:r[o]=i}return r}var gy=oi(tf(),1),vy=oi(hy(),1);function $T(){let t=new gy.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return(0,vy.default)(t),t}var ls=class{constructor(e){this._ajv=e??$T()}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 ds=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 _y(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 yy(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 ps=class extends Ia{constructor(e,r){super(r),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(zo.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(nd,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(dd,async(n,o)=>{let i=o.sessionId||o.requestInfo?.headers["mcp-session-id"]||void 0,{level:a}=n.params,s=zo.safeParse(a);return s.success&&this._loggingLevels.set(i,s.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new ds(this)}),this._experimental}registerCapabilities(e){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=Pg(this._capabilities,e)}setRequestHandler(e,r){let o=Bi(e)?.method;if(!o)throw new Error("Schema is missing a method literal");let i;if(Gr(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=Ht(wo,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=Ht(Xr,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=Ht(wa,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){yy(this._clientCapabilities?.tasks?.requests,e,"Client")}assertTaskHandlerCapability(e){this._capabilities&&_y(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:fg.includes(r)?r:Xl,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"},ha)}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},fd,r):this.request({method:"sampling/createMessage",params:e},pd,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},za,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},za,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},md,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 lf=oi(require("node:process"),1);var fs=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),bT(r)}clear(){this._buffer=void 0}};function bT(t){return bg.parse(JSON.parse(t))}function $y(t){return JSON.stringify(t)+` -`}var ms=class{constructor(e=lf.default.stdin,r=lf.default.stdout){this._stdin=e,this._stdout=r,this._readBuffer=new fs,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=$y(e);this._stdout.write(n)?r():this._stdout.once("drain",r)})}};var _s=oi(require("path"),1),wy=require("os");var df={DEFAULT:3e5,HEALTH_CHECK:3e4,WORKER_STARTUP_WAIT:1e3,WORKER_STARTUP_RETRIES:300,PRE_RESTART_SETTLE_DELAY:2e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5};function by(t){return process.platform==="win32"?Math.round(t*df.WINDOWS_MULTIPLIER):t}var St=require("fs"),hs=require("path"),Sy=require("os");var xy="bugfix,feature,refactor,discovery,decision,change",ky="how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off";var wr=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_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,hs.join)((0,Sy.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:xy,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:ky,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"};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){return this.get(e)==="true"}static loadFromFile(e){try{if(!(0,St.existsSync)(e)){let a=this.getAllDefaults();try{let s=(0,hs.dirname)(e);(0,St.existsSync)(s)||(0,St.mkdirSync)(s,{recursive:!0}),(0,St.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 a}let r=(0,St.readFileSync)(e,"utf-8"),n=JSON.parse(r),o=n;if(n.env&&typeof n.env=="object"){o=n.env;try{(0,St.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 i}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,r),this.getAllDefaults()}}};var OU=_s.default.join((0,wy.homedir)(),".claude","plugins","marketplaces","thedotmack"),jU=by(df.HEALTH_CHECK),gs=null,vs=null;function zy(){if(gs!==null)return gs;let t=_s.default.join(wr.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),e=wr.loadFromFile(t);return gs=parseInt(e.CLAUDE_MEM_WORKER_PORT,10),gs}function Iy(){if(vs!==null)return vs;let t=_s.default.join(wr.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return vs=wr.loadFromFile(t).CLAUDE_MEM_WORKER_HOST,vs}var xT="9.0.13";console.log=(...t)=>{ye.error("CONSOLE","Intercepted console output (MCP protocol protection)",void 0,{args:t})};var kT=zy(),ST=Iy(),ni=`http://${ST}:${kT}`,Ey={search:"/api/search",timeline:"/api/timeline"};async function Ty(t,e){ye.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=`${ni}${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 ye.debug("SYSTEM","\u2190 Worker API success",void 0,{endpoint:t}),i}catch(r){return ye.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 wT(t,e){ye.debug("HTTP","Worker API request (POST)",void 0,{endpoint:t});try{let r=`${ni}${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 ye.debug("HTTP","Worker API success (POST)",void 0,{endpoint:t}),{content:[{type:"text",text:JSON.stringify(o,null,2)}]}}catch(r){return ye.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 zT(){try{return(await fetch(`${ni}/api/health`)).ok}catch(t){return ye.debug("SYSTEM","Worker health check failed",{},t),!1}}var Py=[{name:"__IMPORTANT",description:`3-LAYER WORKFLOW (ALWAYS FOLLOW): +`}var ms=class{constructor(e=lf.default.stdin,r=lf.default.stdout){this._stdin=e,this._stdout=r,this._readBuffer=new fs,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=$y(e);this._stdout.write(n)?r():this._stdout.once("drain",r)})}};var _s=oi(require("path"),1),wy=require("os");var df={DEFAULT:3e5,HEALTH_CHECK:3e4,WORKER_STARTUP_WAIT:1e3,WORKER_STARTUP_RETRIES:300,PRE_RESTART_SETTLE_DELAY:2e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5};function by(t){return process.platform==="win32"?Math.round(t*df.WINDOWS_MULTIPLIER):t}var St=require("fs"),hs=require("path"),Sy=require("os");var xy="bugfix,feature,refactor,discovery,decision,change",ky="how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off";var wr=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_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,hs.join)((0,Sy.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:xy,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:ky,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"};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){return this.get(e)==="true"}static loadFromFile(e){try{if(!(0,St.existsSync)(e)){let a=this.getAllDefaults();try{let s=(0,hs.dirname)(e);(0,St.existsSync)(s)||(0,St.mkdirSync)(s,{recursive:!0}),(0,St.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 a}let r=(0,St.readFileSync)(e,"utf-8"),n=JSON.parse(r),o=n;if(n.env&&typeof n.env=="object"){o=n.env;try{(0,St.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 i}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,r),this.getAllDefaults()}}};var OU=_s.default.join((0,wy.homedir)(),".claude","plugins","marketplaces","thedotmack"),jU=by(df.HEALTH_CHECK),gs=null,vs=null;function zy(){if(gs!==null)return gs;let t=_s.default.join(wr.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),e=wr.loadFromFile(t);return gs=parseInt(e.CLAUDE_MEM_WORKER_PORT,10),gs}function Iy(){if(vs!==null)return vs;let t=_s.default.join(wr.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return vs=wr.loadFromFile(t).CLAUDE_MEM_WORKER_HOST,vs}var xT="9.0.14";console.log=(...t)=>{ye.error("CONSOLE","Intercepted console output (MCP protocol protection)",void 0,{args:t})};var kT=zy(),ST=Iy(),ni=`http://${ST}:${kT}`,Ey={search:"/api/search",timeline:"/api/timeline"};async function Ty(t,e){ye.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=`${ni}${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 ye.debug("SYSTEM","\u2190 Worker API success",void 0,{endpoint:t}),i}catch(r){return ye.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 wT(t,e){ye.debug("HTTP","Worker API request (POST)",void 0,{endpoint:t});try{let r=`${ni}${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 ye.debug("HTTP","Worker API success (POST)",void 0,{endpoint:t}),{content:[{type:"text",text:JSON.stringify(o,null,2)}]}}catch(r){return ye.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 zT(){try{return(await fetch(`${ni}/api/health`)).ok}catch(t){return ye.debug("SYSTEM","Worker health check failed",{},t),!1}}var Py=[{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 c37de462..b0e1eda0 100755 --- a/plugin/scripts/worker-service.cjs +++ b/plugin/scripts/worker-service.cjs @@ -740,7 +740,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs. `}var wG=bl.default.platform==="win32"?["APPDATA","HOMEDRIVE","HOMEPATH","LOCALAPPDATA","PATH","PROCESSOR_ARCHITECTURE","SYSTEMDRIVE","SYSTEMROOT","TEMP","USERNAME","USERPROFILE","PROGRAMFILES"]:["HOME","LOGNAME","PATH","SHELL","TERM","USER"];function $G(){let t={};for(let e of wG){let r=bl.default.env[e];r!==void 0&&(r.startsWith("()")||(t[e]=r))}return t}var Is=class{constructor(e){this._readBuffer=new cm,this._stderrStream=null,this._serverParams=e,(e.stderr==="pipe"||e.stderr==="overlapped")&&(this._stderrStream=new qR.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,LR.default)(this._serverParams.command,this._serverParams.args??[],{env:{...$G(),...this._serverParams.env},stdio:["pipe","pipe",this._serverParams.stderr??"inherit"],shell:!1,windowsHide:bl.default.platform==="win32"&&EG(),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=UR(e);this._process.stdin.write(n)?r():this._process.stdin.once("drain",r)})}};function EG(){return"type"in bl.default}Br();we();var YS=ut(require("path"),1),QR=require("os"),Vn=require("fs"),ao=require("child_process"),eC=require("util");we();fi();var dm=(0,eC.promisify)(ao.exec),tC=YS.default.join((0,QR.homedir)(),".claude-mem"),io=YS.default.join(tC,"worker.pid");function rC(t){(0,Vn.mkdirSync)(tC,{recursive:!0}),(0,Vn.writeFileSync)(io,JSON.stringify(t,null,2))}function nC(){if(!(0,Vn.existsSync)(io))return null;try{return JSON.parse((0,Vn.readFileSync)(io,"utf-8"))}catch(t){return E.warn("SYSTEM","Failed to parse PID file",{path:io},t),null}}function hi(){if((0,Vn.existsSync)(io))try{(0,Vn.unlinkSync)(io)}catch(t){E.warn("SYSTEM","Failed to remove PID file",{path:io},t)}}function oo(t){return process.platform==="win32"?Math.round(t*2):t}async function iC(t){if(process.platform!=="win32")return[];if(!Number.isInteger(t)||t<=0)return E.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 dm(e,{timeout:ga.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 E.error("SYSTEM","Failed to enumerate child processes",{parentPid:t},e),[]}}async function aC(t){if(!Number.isInteger(t)||t<=0){E.warn("SYSTEM","Invalid PID for force kill",{pid:t});return}try{process.platform==="win32"?await dm(`taskkill /PID ${t} /T /F`,{timeout:ga.POWERSHELL_COMMAND}):process.kill(t,"SIGKILL"),E.info("SYSTEM","Killed process",{pid:t})}catch(e){E.debug("SYSTEM","Process already exited during force kill",{pid:t},e)}}async function oC(t,e){let r=Date.now();for(;Date.now()-r{try{return process.kill(i,0),!0}catch{return!1}});if(n.length===0){E.info("SYSTEM","All child processes exited");return}E.debug("SYSTEM","Waiting for processes to exit",{stillAlive:n}),await new Promise(i=>setTimeout(i,100))}E.warn("SYSTEM","Timeout waiting for child processes to exit")}async function sC(){let t=process.platform==="win32",e=[];try{if(t){let r=`powershell -NoProfile -NonInteractive -Command "Get-CimInstance Win32_Process | Where-Object { \\$_.Name -like '*python*' -and \\$_.CommandLine -like '*chroma-mcp*' } | Select-Object -ExpandProperty ProcessId"`,{stdout:n}=await dm(r,{timeout:ga.POWERSHELL_COMMAND});if(!n.trim()){E.debug("SYSTEM","No orphaned chroma-mcp processes found (Windows)");return}let i=n.split(` `).map(a=>a.trim()).filter(a=>a.length>0&&/^\d+$/.test(a));for(let a of i){let o=parseInt(a,10);!isNaN(o)&&Number.isInteger(o)&&o>0&&e.push(o)}}else{let{stdout:r}=await dm('ps aux | grep "chroma-mcp" | grep -v grep || true');if(!r.trim()){E.debug("SYSTEM","No orphaned chroma-mcp processes found (Unix)");return}let n=r.trim().split(` -`);for(let i of n){let a=i.trim().split(/\s+/);if(a.length>1){let o=parseInt(a[1],10);!isNaN(o)&&Number.isInteger(o)&&o>0&&e.push(o)}}}}catch(r){E.error("SYSTEM","Failed to enumerate orphaned processes",{},r);return}if(e.length!==0){if(E.info("SYSTEM","Cleaning up orphaned chroma-mcp processes",{platform:t?"Windows":"Unix",count:e.length,pids:e}),t)for(let r of e){if(!Number.isInteger(r)||r<=0){E.warn("SYSTEM","Skipping invalid PID",{pid:r});continue}try{(0,ao.execSync)(`taskkill /PID ${r} /T /F`,{timeout:ga.POWERSHELL_COMMAND,stdio:"ignore"})}catch(n){E.debug("SYSTEM","Failed to kill process, may have already exited",{pid:r},n)}}else for(let r of e)try{process.kill(r,"SIGKILL")}catch(n){E.debug("SYSTEM","Process already exited",{pid:r},n)}E.info("SYSTEM","Orphaned processes cleaned up",{count:e.length})}}function QS(t,e,r={}){let n=process.platform==="win32",i={...process.env,CLAUDE_MEM_WORKER_PORT:String(e),...r};if(n){let c=`wmic process call create "\\"${process.execPath}\\" \\"${t}\\" --daemon"`;try{return(0,ao.execSync)(c,{stdio:"ignore",windowsHide:!0}),0}catch{return}}let a=(0,ao.spawn)(process.execPath,[t,"--daemon"],{detached:!0,stdio:"ignore",env:i});if(a.pid!==void 0)return a.unref(),a.pid}function cC(t,e){return async r=>{if(e.value){E.warn("SYSTEM",`Received ${r} but shutdown already in progress`);return}e.value=!0,E.info("SYSTEM",`Received ${r}, shutting down...`);try{await t(),process.exit(0)}catch(n){E.error("SYSTEM","Error during shutdown",{},n),process.exit(0)}}}var e0=ut(require("path"),1),uC=require("os"),lC=require("fs");we();async function El(t){try{return(await fetch(`http://127.0.0.1:${t}/api/health`)).ok}catch{return!1}}async function kl(t,e=3e4){let r=Date.now();for(;Date.now()-rsetTimeout(n,500))}return!1}async function pm(t,e=1e4){let r=Date.now();for(;Date.now()-rsetTimeout(n,500))}return!1}async function fm(t){try{let e=await fetch(`http://127.0.0.1:${t}/api/admin/shutdown`,{method:"POST"});return e.ok?!0:(E.warn("SYSTEM","Shutdown request returned error",{port:t,status:e.status}),!1)}catch(e){return e instanceof Error&&e.message?.includes("ECONNREFUSED")?(E.debug("SYSTEM","Worker already stopped",{port:t},e),!1):(E.error("SYSTEM","Shutdown request failed unexpectedly",{port:t},e),!1)}}function RG(){let t=e0.default.join((0,uC.homedir)(),".claude","plugins","marketplaces","thedotmack"),e=e0.default.join(t,"package.json");return JSON.parse((0,lC.readFileSync)(e,"utf-8")).version}async function CG(t){try{let e=await fetch(`http://127.0.0.1:${t}/api/version`);return e.ok?(await e.json()).version:null}catch{return E.debug("SYSTEM","Could not fetch worker version",{port:t}),null}}async function dC(t){let e=RG(),r=await CG(t);return r?{matches:e===r,pluginVersion:e,workerVersion:r}:{matches:!0,pluginVersion:e,workerVersion:r}}we();async function pC(t){E.info("SYSTEM","Shutdown initiated"),hi();let e=await iC(process.pid);if(E.info("SYSTEM","Found child processes",{count:e.length,pids:e}),t.server&&(await NG(t.server),E.info("SYSTEM","HTTP server closed")),await t.sessionManager.shutdownAll(),t.mcpClient&&(await t.mcpClient.close(),E.info("SYSTEM","MCP client closed")),t.dbManager&&await t.dbManager.close(),e.length>0){E.info("SYSTEM","Force killing remaining children");for(let r of e)await aC(r);await oC(e,5e3)}E.info("SYSTEM","Worker shutdown complete")}async function NG(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)),E.info("SYSTEM","Waited for Windows port cleanup"))}var R4=ut(xh(),1),c$=ut(require("fs"),1),u$=ut(require("path"),1);we();var a$=ut(xh(),1),k4=ut(g4(),1),T4=ut(require("path"),1);dn();we();function o$(t){let e=[];e.push(a$.default.json({limit:"50mb"})),e.push((0,k4.default)()),e.push((i,a,o)=>{let c=[".html",".js",".css",".svg",".png",".jpg",".jpeg",".webp",".woff",".woff2",".ttf",".eot"].some(g=>i.path.endsWith(g)),u=i.path==="/api/logs";if(i.path.startsWith("/health")||i.path==="/"||c||u)return o();let l=Date.now(),d=`${i.method}-${Date.now()}`,p=t(i.method,i.path,i.body);E.info("HTTP",`\u2192 ${i.method} ${i.path}`,{requestId:d},p);let f=a.send.bind(a);a.send=function(g){let _=Date.now()-l;return E.info("HTTP",`\u2190 ${a.statusCode} ${i.path}`,{requestId:d,duration:`${_}ms`}),f(g)},o()});let r=Jr(),n=T4.default.join(r,"plugin","ui");return e.push(a$.default.static(n)),e}function wh(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")){E.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 s$(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=${E.formatTool(n,i)}`}return e.includes("/summarize")?"requesting summary":""}we();var tc=class extends Error{constructor(r,n=500,i,a){super(r);this.statusCode=n;this.code=i;this.details=a;this.name="AppError"}};function I4(t,e,r,n){let i={error:t,message:e};return r&&(i.code=r),n&&(i.details=n),i}var O4=(t,e,r,n)=>{let i=t instanceof tc?t.statusCode:500;E.error("HTTP",`Error handling ${e.method} ${e.path}`,{statusCode:i,error:t.message,code:t instanceof tc?t.code:void 0},t);let a=I4(t.name||"Error",t.message,t instanceof tc?t.code:void 0,t instanceof tc?t.details:void 0);r.status(i).json(a)};function P4(t,e){e.status(404).json(I4("NotFound",`Cannot ${t.method} ${t.path}`))}var Gne="9.0.13",$h=class{app;server=null;options;startTime=Date.now();constructor(e){this.options=e,this.app=(0,R4.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,()=>{E.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,E.info("SYSTEM","HTTP server closed"))}registerRoutes(e){e.setupRoutes(this.app)}finalizeRoutes(){this.app.use(P4),this.app.use(O4)}setupMiddleware(){o$(s$).forEach(r=>this.app.use(r))}setupCoreRoutes(){let e="TEST-008-wrapper-ipc";this.app.get("/api/health",(r,n)=>{n.status(200).json({status:"ok",build:e,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()})}),this.app.get("/api/readiness",(r,n)=>{this.options.getInitializationComplete()?n.status(200).json({status:"ready",mcpReady:this.options.getMcpReady()}):n.status(503).json({status:"initializing",message:"Worker is still initializing, please retry"})}),this.app.get("/api/version",(r,n)=>{n.status(200).json({version:Gne})}),this.app.get("/api/instructions",async(r,n)=>{let i=r.query.topic||"all",a=r.query.operation;try{let o;if(a){let s=u$.default.join(__dirname,"../skills/mem-search/operations",`${a}.md`);o=await c$.promises.readFile(s,"utf-8")}else{let s=u$.default.join(__dirname,"../skills/mem-search/SKILL.md"),c=await c$.promises.readFile(s,"utf-8");o=this.extractInstructionSection(c,i)}n.json({content:[{type:"text",text:o}]})}catch{n.status(404).json({error:"Instruction not found"})}}),this.app.post("/api/admin/restart",wh,async(r,n)=>{n.json({status:"restarting"}),process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?(E.info("SYSTEM","Sending restart request to wrapper"),process.send({type:"restart"})):setTimeout(async()=>{await this.options.onRestart()},100)}),this.app.post("/api/admin/shutdown",wh,async(r,n)=>{n.json({status:"shutting_down"}),process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?(E.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),a=e.indexOf(n);return i===-1?e:a===-1?e.substring(i):e.substring(i,a).trim()}};var lt=ut(require("path"),1),rc=require("os"),Gt=require("fs"),j4=require("child_process"),A4=require("util");we();Br();var On=require("fs"),ld=require("path");we();function C4(t){try{return(0,On.existsSync)(t)?JSON.parse((0,On.readFileSync)(t,"utf-8")):{}}catch(e){return E.error("CONFIG","Failed to read Cursor registry, using empty registry",{file:t,error:e instanceof Error?e.message:String(e)}),{}}}function N4(t,e){let r=(0,ld.join)(t,"..");(0,On.mkdirSync)(r,{recursive:!0}),(0,On.writeFileSync)(t,JSON.stringify(e,null,2))}function l$(t,e){let r=(0,ld.join)(t,".cursor","rules"),n=(0,ld.join)(r,"claude-mem-context.mdc"),i=`${n}.tmp`;(0,On.mkdirSync)(r,{recursive:!0});let a=`--- +`);for(let i of n){let a=i.trim().split(/\s+/);if(a.length>1){let o=parseInt(a[1],10);!isNaN(o)&&Number.isInteger(o)&&o>0&&e.push(o)}}}}catch(r){E.error("SYSTEM","Failed to enumerate orphaned processes",{},r);return}if(e.length!==0){if(E.info("SYSTEM","Cleaning up orphaned chroma-mcp processes",{platform:t?"Windows":"Unix",count:e.length,pids:e}),t)for(let r of e){if(!Number.isInteger(r)||r<=0){E.warn("SYSTEM","Skipping invalid PID",{pid:r});continue}try{(0,ao.execSync)(`taskkill /PID ${r} /T /F`,{timeout:ga.POWERSHELL_COMMAND,stdio:"ignore"})}catch(n){E.debug("SYSTEM","Failed to kill process, may have already exited",{pid:r},n)}}else for(let r of e)try{process.kill(r,"SIGKILL")}catch(n){E.debug("SYSTEM","Process already exited",{pid:r},n)}E.info("SYSTEM","Orphaned processes cleaned up",{count:e.length})}}function QS(t,e,r={}){let n=process.platform==="win32",i={...process.env,CLAUDE_MEM_WORKER_PORT:String(e),...r};if(n){let c=`wmic process call create "\\"${process.execPath}\\" \\"${t}\\" --daemon"`;try{return(0,ao.execSync)(c,{stdio:"ignore",windowsHide:!0}),0}catch{return}}let a=(0,ao.spawn)(process.execPath,[t,"--daemon"],{detached:!0,stdio:"ignore",env:i});if(a.pid!==void 0)return a.unref(),a.pid}function cC(t,e){return async r=>{if(e.value){E.warn("SYSTEM",`Received ${r} but shutdown already in progress`);return}e.value=!0,E.info("SYSTEM",`Received ${r}, shutting down...`);try{await t(),process.exit(0)}catch(n){E.error("SYSTEM","Error during shutdown",{},n),process.exit(0)}}}var e0=ut(require("path"),1),uC=require("os"),lC=require("fs");we();async function El(t){try{return(await fetch(`http://127.0.0.1:${t}/api/health`)).ok}catch{return!1}}async function kl(t,e=3e4){let r=Date.now();for(;Date.now()-rsetTimeout(n,500))}return!1}async function pm(t,e=1e4){let r=Date.now();for(;Date.now()-rsetTimeout(n,500))}return!1}async function fm(t){try{let e=await fetch(`http://127.0.0.1:${t}/api/admin/shutdown`,{method:"POST"});return e.ok?!0:(E.warn("SYSTEM","Shutdown request returned error",{port:t,status:e.status}),!1)}catch(e){return e instanceof Error&&e.message?.includes("ECONNREFUSED")?(E.debug("SYSTEM","Worker already stopped",{port:t},e),!1):(E.error("SYSTEM","Shutdown request failed unexpectedly",{port:t},e),!1)}}function RG(){let t=e0.default.join((0,uC.homedir)(),".claude","plugins","marketplaces","thedotmack"),e=e0.default.join(t,"package.json");return JSON.parse((0,lC.readFileSync)(e,"utf-8")).version}async function CG(t){try{let e=await fetch(`http://127.0.0.1:${t}/api/version`);return e.ok?(await e.json()).version:null}catch{return E.debug("SYSTEM","Could not fetch worker version",{port:t}),null}}async function dC(t){let e=RG(),r=await CG(t);return r?{matches:e===r,pluginVersion:e,workerVersion:r}:{matches:!0,pluginVersion:e,workerVersion:r}}we();async function pC(t){E.info("SYSTEM","Shutdown initiated"),hi();let e=await iC(process.pid);if(E.info("SYSTEM","Found child processes",{count:e.length,pids:e}),t.server&&(await NG(t.server),E.info("SYSTEM","HTTP server closed")),await t.sessionManager.shutdownAll(),t.mcpClient&&(await t.mcpClient.close(),E.info("SYSTEM","MCP client closed")),t.dbManager&&await t.dbManager.close(),e.length>0){E.info("SYSTEM","Force killing remaining children");for(let r of e)await aC(r);await oC(e,5e3)}E.info("SYSTEM","Worker shutdown complete")}async function NG(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)),E.info("SYSTEM","Waited for Windows port cleanup"))}var R4=ut(xh(),1),c$=ut(require("fs"),1),u$=ut(require("path"),1);we();var a$=ut(xh(),1),k4=ut(g4(),1),T4=ut(require("path"),1);dn();we();function o$(t){let e=[];e.push(a$.default.json({limit:"50mb"})),e.push((0,k4.default)()),e.push((i,a,o)=>{let c=[".html",".js",".css",".svg",".png",".jpg",".jpeg",".webp",".woff",".woff2",".ttf",".eot"].some(g=>i.path.endsWith(g)),u=i.path==="/api/logs";if(i.path.startsWith("/health")||i.path==="/"||c||u)return o();let l=Date.now(),d=`${i.method}-${Date.now()}`,p=t(i.method,i.path,i.body);E.info("HTTP",`\u2192 ${i.method} ${i.path}`,{requestId:d},p);let f=a.send.bind(a);a.send=function(g){let _=Date.now()-l;return E.info("HTTP",`\u2190 ${a.statusCode} ${i.path}`,{requestId:d,duration:`${_}ms`}),f(g)},o()});let r=Jr(),n=T4.default.join(r,"plugin","ui");return e.push(a$.default.static(n)),e}function wh(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")){E.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 s$(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=${E.formatTool(n,i)}`}return e.includes("/summarize")?"requesting summary":""}we();var tc=class extends Error{constructor(r,n=500,i,a){super(r);this.statusCode=n;this.code=i;this.details=a;this.name="AppError"}};function I4(t,e,r,n){let i={error:t,message:e};return r&&(i.code=r),n&&(i.details=n),i}var O4=(t,e,r,n)=>{let i=t instanceof tc?t.statusCode:500;E.error("HTTP",`Error handling ${e.method} ${e.path}`,{statusCode:i,error:t.message,code:t instanceof tc?t.code:void 0},t);let a=I4(t.name||"Error",t.message,t instanceof tc?t.code:void 0,t instanceof tc?t.details:void 0);r.status(i).json(a)};function P4(t,e){e.status(404).json(I4("NotFound",`Cannot ${t.method} ${t.path}`))}var Gne="9.0.14",$h=class{app;server=null;options;startTime=Date.now();constructor(e){this.options=e,this.app=(0,R4.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,()=>{E.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,E.info("SYSTEM","HTTP server closed"))}registerRoutes(e){e.setupRoutes(this.app)}finalizeRoutes(){this.app.use(P4),this.app.use(O4)}setupMiddleware(){o$(s$).forEach(r=>this.app.use(r))}setupCoreRoutes(){let e="TEST-008-wrapper-ipc";this.app.get("/api/health",(r,n)=>{n.status(200).json({status:"ok",build:e,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()})}),this.app.get("/api/readiness",(r,n)=>{this.options.getInitializationComplete()?n.status(200).json({status:"ready",mcpReady:this.options.getMcpReady()}):n.status(503).json({status:"initializing",message:"Worker is still initializing, please retry"})}),this.app.get("/api/version",(r,n)=>{n.status(200).json({version:Gne})}),this.app.get("/api/instructions",async(r,n)=>{let i=r.query.topic||"all",a=r.query.operation;try{let o;if(a){let s=u$.default.join(__dirname,"../skills/mem-search/operations",`${a}.md`);o=await c$.promises.readFile(s,"utf-8")}else{let s=u$.default.join(__dirname,"../skills/mem-search/SKILL.md"),c=await c$.promises.readFile(s,"utf-8");o=this.extractInstructionSection(c,i)}n.json({content:[{type:"text",text:o}]})}catch{n.status(404).json({error:"Instruction not found"})}}),this.app.post("/api/admin/restart",wh,async(r,n)=>{n.json({status:"restarting"}),process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?(E.info("SYSTEM","Sending restart request to wrapper"),process.send({type:"restart"})):setTimeout(async()=>{await this.options.onRestart()},100)}),this.app.post("/api/admin/shutdown",wh,async(r,n)=>{n.json({status:"shutting_down"}),process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?(E.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),a=e.indexOf(n);return i===-1?e:a===-1?e.substring(i):e.substring(i,a).trim()}};var lt=ut(require("path"),1),rc=require("os"),Gt=require("fs"),j4=require("child_process"),A4=require("util");we();Br();var On=require("fs"),ld=require("path");we();function C4(t){try{return(0,On.existsSync)(t)?JSON.parse((0,On.readFileSync)(t,"utf-8")):{}}catch(e){return E.error("CONFIG","Failed to read Cursor registry, using empty registry",{file:t,error:e instanceof Error?e.message:String(e)}),{}}}function N4(t,e){let r=(0,ld.join)(t,"..");(0,On.mkdirSync)(r,{recursive:!0}),(0,On.writeFileSync)(t,JSON.stringify(e,null,2))}function l$(t,e){let r=(0,ld.join)(t,".cursor","rules"),n=(0,ld.join)(r,"claude-mem-context.mdc"),i=`${n}.tmp`;(0,On.mkdirSync)(r,{recursive:!0});let a=`--- alwaysApply: true description: "Claude-mem context from past sessions (auto-updated)" --- @@ -936,7 +936,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()}};Eh();we();un();dn();var H4=ut(require("path"),1),B4=ut(require("os"),1),nie="9.0.13",Th=class{client=null;transport=null;connected=!1;project;collectionName;VECTOR_DB_DIR;BATCH_SIZE=100;disabled;constructor(e){this.project=e,this.collectionName=`cm__${e}`,this.VECTOR_DB_DIR=H4.default.join(B4.default.homedir(),".claude-mem","vector-db"),this.disabled=process.platform==="win32",this.disabled&&E.warn("CHROMA_SYNC","Vector search disabled on Windows (prevents console popups)",{project:this.project,reason:"MCP SDK subprocess spawning causes visible console windows"})}isDisabled(){return this.disabled}async ensureConnection(){if(!(this.connected&&this.client)){E.info("CHROMA_SYNC","Connecting to Chroma MCP server...",{project:this.project});try{let r=Qe.loadFromFile(In).CLAUDE_MEM_PYTHON_VERSION,n=process.platform==="win32",i={command:"uvx",args:["--python",r,"chroma-mcp","--client-type","persistent","--data-dir",this.VECTOR_DB_DIR],stderr:"ignore"};n&&(i.windowsHide=!0,E.debug("CHROMA_SYNC","Windows detected, attempting to hide console window",{project:this.project})),this.transport=new Is(i),this.client=new Es({name:"claude-mem-chroma-sync",version:nie},{capabilities:{}}),await this.client.connect(this.transport),this.connected=!0,E.info("CHROMA_SYNC","Connected to Chroma MCP server",{project:this.project})}catch(e){throw E.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}}),E.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"))throw this.connected=!1,this.client=null,E.error("CHROMA_SYNC","Connection lost during collection check",{collection:this.collectionName},e),new Error(`Chroma connection lost: ${r}`);E.error("CHROMA_SYNC","Collection check failed, attempting to create",{collection:this.collectionName},e),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"}}),E.info("CHROMA_SYNC","Collection created",{collection:this.collectionName})}catch(i){throw E.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):[],a=e.files_read?JSON.parse(e.files_read):[],o=e.files_modified?JSON.parse(e.files_modified):[],s={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&&(s.subtitle=e.subtitle),i.length>0&&(s.concepts=i.join(",")),a.length>0&&(s.files_read=a.join(",")),o.length>0&&(s.files_modified=o.join(",")),e.narrative&&r.push({id:`obs_${e.id}_narrative`,document:e.narrative,metadata:{...s,field_type:"narrative"}}),e.text&&r.push({id:`obs_${e.id}_text`,document:e.text,metadata:{...s,field_type:"text"}}),n.forEach((c,u)=>{r.push({id:`obs_${e.id}_fact_${u}`,document:c,metadata:{...s,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)}}),E.debug("CHROMA_SYNC","Documents added",{collection:this.collectionName,count:e.length})}catch(r){throw E.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,a,o,s=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:a,discovery_tokens:s,created_at:new Date(o*1e3).toISOString(),created_at_epoch:o},u=this.formatObservationDocs(c);E.info("CHROMA_SYNC","Syncing observation",{observationId:e,documentCount:u.length,project:n}),await this.addDocuments(u)}async syncSummary(e,r,n,i,a,o,s=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:a,discovery_tokens:s,created_at:new Date(o*1e3).toISOString(),created_at_epoch:o},u=this.formatSummaryDocs(c);E.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,a,o){if(this.disabled)return;let s={id:e,content_session_id:"",prompt_number:a,prompt_text:i,created_at:new Date(o*1e3).toISOString(),created_at_epoch:o,memory_session_id:r,project:n},c=this.formatUserPromptDoc(s);E.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,a=1e3;for(E.info("CHROMA_SYNC","Fetching existing Chroma document IDs...",{project:this.project});;)try{let s=(await this.client.callTool({name:"chroma_get_documents",arguments:{collection_name:this.collectionName,limit:a,offset:i,where:{project:this.project},include:["metadatas"]}})).content[0];if(s.type!=="text")throw new Error("Unexpected response type from chroma_get_documents");let u=JSON.parse(s.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+=a,E.debug("CHROMA_SYNC","Fetched batch of existing IDs",{project:this.project,offset:i,batchSize:u.length})}catch(o){throw E.error("CHROMA_SYNC","Failed to fetch existing IDs",{project:this.project},o),o}return E.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;E.info("CHROMA_SYNC","Starting smart backfill",{project:this.project}),await this.ensureCollection();let e=await this.getExistingChromaIds(),r=new ka;try{let n=Array.from(e.observations),i=n.length>0?`AND id NOT IN (${n.join(",")})`:"",a=r.db.prepare(` + `).all(e)}close(){this.db.close()}};Eh();we();un();dn();var H4=ut(require("path"),1),B4=ut(require("os"),1),nie="9.0.14",Th=class{client=null;transport=null;connected=!1;project;collectionName;VECTOR_DB_DIR;BATCH_SIZE=100;disabled;constructor(e){this.project=e,this.collectionName=`cm__${e}`,this.VECTOR_DB_DIR=H4.default.join(B4.default.homedir(),".claude-mem","vector-db"),this.disabled=process.platform==="win32",this.disabled&&E.warn("CHROMA_SYNC","Vector search disabled on Windows (prevents console popups)",{project:this.project,reason:"MCP SDK subprocess spawning causes visible console windows"})}isDisabled(){return this.disabled}async ensureConnection(){if(!(this.connected&&this.client)){E.info("CHROMA_SYNC","Connecting to Chroma MCP server...",{project:this.project});try{let r=Qe.loadFromFile(In).CLAUDE_MEM_PYTHON_VERSION,n=process.platform==="win32",i={command:"uvx",args:["--python",r,"chroma-mcp","--client-type","persistent","--data-dir",this.VECTOR_DB_DIR],stderr:"ignore"};n&&(i.windowsHide=!0,E.debug("CHROMA_SYNC","Windows detected, attempting to hide console window",{project:this.project})),this.transport=new Is(i),this.client=new Es({name:"claude-mem-chroma-sync",version:nie},{capabilities:{}}),await this.client.connect(this.transport),this.connected=!0,E.info("CHROMA_SYNC","Connected to Chroma MCP server",{project:this.project})}catch(e){throw E.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}}),E.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"))throw this.connected=!1,this.client=null,E.error("CHROMA_SYNC","Connection lost during collection check",{collection:this.collectionName},e),new Error(`Chroma connection lost: ${r}`);E.error("CHROMA_SYNC","Collection check failed, attempting to create",{collection:this.collectionName},e),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"}}),E.info("CHROMA_SYNC","Collection created",{collection:this.collectionName})}catch(i){throw E.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):[],a=e.files_read?JSON.parse(e.files_read):[],o=e.files_modified?JSON.parse(e.files_modified):[],s={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&&(s.subtitle=e.subtitle),i.length>0&&(s.concepts=i.join(",")),a.length>0&&(s.files_read=a.join(",")),o.length>0&&(s.files_modified=o.join(",")),e.narrative&&r.push({id:`obs_${e.id}_narrative`,document:e.narrative,metadata:{...s,field_type:"narrative"}}),e.text&&r.push({id:`obs_${e.id}_text`,document:e.text,metadata:{...s,field_type:"text"}}),n.forEach((c,u)=>{r.push({id:`obs_${e.id}_fact_${u}`,document:c,metadata:{...s,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)}}),E.debug("CHROMA_SYNC","Documents added",{collection:this.collectionName,count:e.length})}catch(r){throw E.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,a,o,s=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:a,discovery_tokens:s,created_at:new Date(o*1e3).toISOString(),created_at_epoch:o},u=this.formatObservationDocs(c);E.info("CHROMA_SYNC","Syncing observation",{observationId:e,documentCount:u.length,project:n}),await this.addDocuments(u)}async syncSummary(e,r,n,i,a,o,s=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:a,discovery_tokens:s,created_at:new Date(o*1e3).toISOString(),created_at_epoch:o},u=this.formatSummaryDocs(c);E.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,a,o){if(this.disabled)return;let s={id:e,content_session_id:"",prompt_number:a,prompt_text:i,created_at:new Date(o*1e3).toISOString(),created_at_epoch:o,memory_session_id:r,project:n},c=this.formatUserPromptDoc(s);E.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,a=1e3;for(E.info("CHROMA_SYNC","Fetching existing Chroma document IDs...",{project:this.project});;)try{let s=(await this.client.callTool({name:"chroma_get_documents",arguments:{collection_name:this.collectionName,limit:a,offset:i,where:{project:this.project},include:["metadatas"]}})).content[0];if(s.type!=="text")throw new Error("Unexpected response type from chroma_get_documents");let u=JSON.parse(s.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+=a,E.debug("CHROMA_SYNC","Fetched batch of existing IDs",{project:this.project,offset:i,batchSize:u.length})}catch(o){throw E.error("CHROMA_SYNC","Failed to fetch existing IDs",{project:this.project},o),o}return E.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;E.info("CHROMA_SYNC","Starting smart backfill",{project:this.project}),await this.ensureCollection();let e=await this.getExistingChromaIds(),r=new ka;try{let n=Array.from(e.observations),i=n.length>0?`AND id NOT IN (${n.join(",")})`:"",a=r.db.prepare(` SELECT * FROM observations WHERE project = ? ${i} ORDER BY id ASC @@ -1275,7 +1275,7 @@ Tips: ORDER BY MAX(created_at_epoch) DESC `).all().map(s=>s.project);n.json({projects:o})});handleGetProcessingStatus=this.wrapHandler((r,n)=>{let i=this.sessionManager.isAnySessionProcessing(),a=this.sessionManager.getTotalActiveWork();n.json({isProcessing:i,queueDepth:a})});handleSetProcessing=this.wrapHandler((r,n)=>{this.workerService.broadcastProcessingStatus();let i=this.sessionManager.isAnySessionProcessing(),a=this.sessionManager.getTotalQueueDepth(),o=this.sessionManager.getActiveSessionCount();n.json({status:"ok",isProcessing:i,queueDepth:a,activeSessions:o})});parsePaginationParams(r){let n=parseInt(r.query.offset,10)||0,i=Math.min(parseInt(r.query.limit,10)||20,100),a=r.query.project;return{offset:n,limit:i,project:a}}handleImport=this.wrapHandler((r,n)=>{let{sessions:i,summaries:a,observations:o,prompts:s}=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(a))for(let l of a)u.importSessionSummary(l).imported?c.summariesImported++:c.summariesSkipped++;if(Array.isArray(o))for(let l of o)u.importObservation(l).imported?c.observationsImported++:c.observationsSkipped++;if(Array.isArray(s))for(let l of s)u.importUserPrompt(l).imported?c.promptsImported++:c.promptsSkipped++;n.json({success:!0,stats:c})});handleGetPendingQueue=this.wrapHandler((r,n)=>{let{PendingMessageStore:i}=(wo(),ep(nc)),a=new i(this.dbManager.getSessionStore().db,3),o=a.getQueueMessages(),s=a.getRecentlyProcessed(20,30),c=a.getStuckCount(300*1e3),u=a.getSessionsWithPendingMessages();n.json({queue:{messages:o,totalPending:o.filter(l=>l.status==="pending").length,totalProcessing:o.filter(l=>l.status==="processing").length,totalFailed:o.filter(l=>l.status==="failed").length,stuckCount:c},recentlyProcessed:s,sessionsWithPendingWork:u})});handleProcessPendingQueue=this.wrapHandler(async(r,n)=>{let i=Math.min(Math.max(parseInt(r.body.sessionLimit,10)||10,1),100),a=await this.workerService.processPendingQueues(i);n.json({success:!0,...a})});handleClearFailedQueue=this.wrapHandler((r,n)=>{let{PendingMessageStore:i}=(wo(),ep(nc)),o=new i(this.dbManager.getSessionStore().db,3).clearFailed();E.info("QUEUE","Cleared failed queue messages",{clearedCount:o}),n.json({success:!0,clearedCount:o})});handleClearAllQueue=this.wrapHandler((r,n)=>{let{PendingMessageStore:i}=(wo(),ep(nc)),o=new i(this.dbManager.getSessionStore().db,3).clearAll();E.warn("QUEUE","Cleared ALL queue messages (pending, processing, failed)",{clearedCount:o}),n.json({success:!0,clearedCount:o})})};var Fg=class extends en{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:a}=await Promise.resolve().then(()=>(IE(),TE)),o=`/preview/${i}`,s=await a({session_id:"preview-"+Date.now(),cwd:o},!0);n.setHeader("Content-Type","text/plain; charset=utf-8"),n.send(s)});handleContextInject=this.wrapHandler(async(r,n)=>{let i=r.query.projects||r.query.project,a=r.query.colors==="true";if(!i){this.badRequest(n,"Project(s) parameter is required");return}let o=i.split(",").map(d=>d.trim()).filter(Boolean);if(o.length===0){this.badRequest(n,"At least one project is required");return}let{generateContext:s}=await Promise.resolve().then(()=>(IE(),TE)),u=`/context/${o[o.length-1]}`,l=await s({session_id:"context-inject-"+Date.now(),cwd:u,projects:o},a);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 jo=ut(require("path"),1),hr=require("fs"),CE=require("os");dn();we();var PE=require("child_process"),No=require("fs"),HL=require("os"),Jd=require("path");we();var Xd=(0,Jd.join)((0,HL.homedir)(),".claude","plugins","marketplaces","thedotmack");function OE(t){return!t||typeof t!="string"?!1:/^[a-zA-Z0-9][a-zA-Z0-9._/-]*$/.test(t)&&!t.includes("..")}var Xme=3e5,RE=6e5;function An(t){let e=(0,PE.spawnSync)("git",t,{cwd:Xd,encoding:"utf-8",timeout:Xme,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 BL(t,e=RE){let n=process.platform==="win32"?"npm.cmd":"npm",i=(0,PE.spawnSync)(n,t,{cwd:Xd,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 Zg(){let t=(0,Jd.join)(Xd,".git");if(!(0,No.existsSync)(t))return{branch:null,isBeta:!1,isGitRepo:!1,isDirty:!1,canSwitch:!1,error:"Installed plugin is not a git repository"};try{let e=An(["rev-parse","--abbrev-ref","HEAD"]),n=An(["status","--porcelain"]).length>0,i=e.startsWith("beta");return{branch:e,isBeta:i,isGitRepo:!0,isDirty:n,canSwitch:!0}}catch(e){return E.error("BRANCH","Failed to get branch info",{},e),{branch:null,isBeta:!1,isGitRepo:!0,isDirty:!1,canSwitch:!1,error:e.message}}}async function VL(t){if(!OE(t))return{success:!1,error:`Invalid branch name: ${t}. Branch names must be alphanumeric with hyphens, underscores, slashes, or dots.`};let e=Zg();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{E.info("BRANCH","Starting branch switch",{from:e.branch,to:t}),E.debug("BRANCH","Discarding local changes"),An(["checkout","--","."]),An(["clean","-fd"]),E.debug("BRANCH","Fetching from origin"),An(["fetch","origin"]),E.debug("BRANCH","Checking out branch",{branch:t});try{An(["checkout",t])}catch(n){E.debug("BRANCH","Branch not local, tracking remote",{branch:t,error:n instanceof Error?n.message:String(n)}),An(["checkout","-b",t,`origin/${t}`])}E.debug("BRANCH","Pulling latest"),An(["pull","origin",t]);let r=(0,Jd.join)(Xd,".install-version");return(0,No.existsSync)(r)&&(0,No.unlinkSync)(r),E.debug("BRANCH","Running npm install"),BL(["install"],RE),E.success("BRANCH","Branch switch complete",{branch:t}),{success:!0,branch:t,message:`Switched to ${t}. Worker will restart automatically.`}}catch(r){E.error("BRANCH","Branch switch failed",{targetBranch:t},r);try{e.branch&&OE(e.branch)&&An(["checkout",e.branch])}catch(n){E.error("BRANCH","Recovery checkout also failed",{originalBranch:e.branch},n)}return{success:!1,error:`Branch switch failed: ${r.message}`}}}async function GL(){let t=Zg();if(!t.isGitRepo||!t.branch)return{success:!1,error:"Cannot pull updates: not a git repository"};try{if(!OE(t.branch))return{success:!1,error:`Invalid current branch name: ${t.branch}`};E.info("BRANCH","Pulling updates",{branch:t.branch}),An(["checkout","--","."]),An(["fetch","origin"]),An(["pull","origin",t.branch]);let e=(0,Jd.join)(Xd,".install-version");return(0,No.existsSync)(e)&&(0,No.unlinkSync)(e),BL(["install"],RE),E.success("BRANCH","Updates pulled",{branch:t.branch}),{success:!0,branch:t.branch,message:`Updated ${t.branch}. Worker will restart automatically.`}}catch(e){return E.error("BRANCH","Pull failed",{},e),{success:!1,error:`Pull failed: ${e.message}`}}}un();Br();var Hg=class extends en{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=jo.default.join((0,CE.homedir)(),".claude-mem","settings.json");this.ensureSettingsFile(i);let a=Qe.loadFromFile(i);n.json(a)});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 a=jo.default.join((0,CE.homedir)(),".claude-mem","settings.json");this.ensureSettingsFile(a);let o={};if((0,hr.existsSync)(a)){let c=(0,hr.readFileSync)(a,"utf-8");try{o=JSON.parse(c)}catch(u){E.error("SETTINGS","Failed to parse settings file",{settingsPath:a},u),n.status(500).json({success:!1,error:"Settings file is corrupted. Delete ~/.claude-mem/settings.json to reset."});return}}let s=["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"];for(let c of s)r.body[c]!==void 0&&(o[c]=r.body[c]);(0,hr.writeFileSync)(a,JSON.stringify(o,null,2),"utf-8"),YR(),E.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=Zg();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 a=["main","beta/7.0","feature/bun-executable"];if(!a.includes(i)){n.status(400).json({success:!1,error:`Invalid branch. Allowed: ${a.join(", ")}`});return}E.info("WORKER","Branch switch requested",{branch:i});let o=await VL(i);o.success&&setTimeout(()=>{E.info("WORKER","Restarting worker after branch switch"),process.exit(0)},1e3),n.json(o)});handleUpdateBranch=this.wrapHandler(async(r,n)=>{E.info("WORKER","Branch update requested");let i=await GL();i.success&&setTimeout(()=>{E.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"].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"};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 E.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=Jr(),n=jo.default.join(r,"plugin",".mcp.json");return(0,hr.existsSync)(n)}toggleMcp(r){let n=Jr(),i=jo.default.join(n,"plugin",".mcp.json"),a=jo.default.join(n,"plugin",".mcp.json.disabled");r&&(0,hr.existsSync)(a)?((0,hr.renameSync)(a,i),E.info("WORKER","MCP search server enabled")):!r&&(0,hr.existsSync)(i)?((0,hr.renameSync)(i,a),E.info("WORKER","MCP search server disabled")):E.debug("WORKER","MCP toggle no-op (already in desired state)",{enabled:r})}ensureSettingsFile(r){if(!(0,hr.existsSync)(r)){let n=Qe.getAllDefaults(),i=jo.default.dirname(r);(0,hr.existsSync)(i)||(0,hr.mkdirSync)(i,{recursive:!0}),(0,hr.writeFileSync)(r,JSON.stringify(n,null,2),"utf-8"),E.info("SETTINGS","Created settings file with defaults",{settingsPath:r})}}};var Ao=require("fs"),Bg=require("path");we();un();var Vg=class extends en{getLogFilePath(){let e=Qe.get("CLAUDE_MEM_DATA_DIR"),r=(0,Bg.join)(e,"logs"),n=new Date().toISOString().split("T")[0];return(0,Bg.join)(r,`claude-mem-${n}.log`)}getLogsDir(){let e=Qe.get("CLAUDE_MEM_DATA_DIR");return(0,Bg.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,Ao.existsSync)(n)){r.json({logs:"",path:n,exists:!1});return}let i=parseInt(e.query.lines||"1000",10),a=Math.min(i,1e4),s=(0,Ao.readFileSync)(n,"utf-8").split(` `),c=Math.max(0,s.length-a),u=s.slice(c).join(` -`);r.json({logs:u,path:n,exists:!0,totalLines:s.length,returnedLines:s.length-c})});handleClearLogs=this.wrapHandler((e,r)=>{let n=this.getLogFilePath();if(!(0,Ao.existsSync)(n)){r.json({success:!0,message:"Log file does not exist",path:n});return}(0,Ao.writeFileSync)(n,"","utf-8"),E.info("SYSTEM","Log file cleared via UI",{path:n}),r.json({success:!0,message:"Log file cleared",path:n})})};var ihe={},ehe="9.0.13";function fq(t,e){return{continue:!0,suppressOutput:!0,status:t,...e&&{message:e}}}var Yd=class{server;startTime=Date.now();mcpClient;mcpReady=!1;initializationCompleteFlag=!1;isShuttingDown=!1;dbManager;sessionManager;sseBroadcaster;sdkAgent;geminiAgent;openRouterAgent;paginationHelper;settingsManager;sessionEventBroadcaster;searchRoutes=null;initializationComplete;resolveInitialization;stopOrphanReaper=null;constructor(){this.initializationComplete=new Promise(e=>{this.resolveInitialization=e}),this.dbManager=new Ih,this.sessionManager=new Nh(this.dbManager),this.sseBroadcaster=new jh,this.sdkAgent=new yg(this.dbManager,this.sessionManager),this.geminiAgent=new _g(this.dbManager,this.sessionManager),this.openRouterAgent=new Sg(this.dbManager,this.sessionManager),this.paginationHelper=new wg(this.dbManager),this.settingsManager=new $g(this.dbManager),this.sessionEventBroadcaster=new Ig(this.sseBroadcaster,this),this.sessionManager.setOnSessionDeleted(()=>{this.broadcastProcessingStatus()}),this.mcpClient=new Es({name:"worker-search-proxy",version:ehe},{capabilities:{}}),this.server=new $h({getInitializationComplete:()=>this.initializationCompleteFlag,getMcpReady:()=>this.mcpReady,onShutdown:()=>this.shutdown(),onRestart:()=>this.shutdown()}),this.registerRoutes(),this.registerSignalHandlers()}registerSignalHandlers(){let e={value:this.isShuttingDown},r=cC(()=>this.shutdown(),e);process.on("SIGTERM",()=>{this.isShuttingDown=e.value,r("SIGTERM")}),process.on("SIGINT",()=>{this.isShuttingDown=e.value,r("SIGINT")})}registerRoutes(){this.server.registerRoutes(new Pg(this.sseBroadcaster,this.dbManager,this.sessionManager)),this.server.registerRoutes(new Ng(this.sessionManager,this.dbManager,this.sdkAgent,this.geminiAgent,this.openRouterAgent,this.sessionEventBroadcaster,this)),this.server.registerRoutes(new jg(this.paginationHelper,this.dbManager,this.sessionManager,this.sseBroadcaster,this,this.startTime)),this.server.registerRoutes(new Hg(this.settingsManager)),this.server.registerRoutes(new Vg),this.server.app.get("/api/context/inject",async(e,r,n)=>{let a=new Promise((o,s)=>setTimeout(()=>s(new Error("Initialization timeout")),3e5));if(await Promise.race([this.initializationComplete,a]),!this.searchRoutes){r.status(503).json({error:"Search routes not initialized"});return}n()})}async start(){let e=Rt(),r=lm();await this.server.listen(e,r),rC({pid:process.pid,port:e,startedAt:new Date().toISOString()}),E.info("SYSTEM","Worker started",{host:r,port:e,pid:process.pid}),this.initializeBackground().catch(n=>{E.error("SYSTEM","Background initialization failed",{},n)})}async initializeBackground(){try{await sC();let{ModeManager:e}=await Promise.resolve().then(()=>(Dr(),Y4)),{SettingsDefaultsManager:r}=await Promise.resolve().then(()=>(un(),KR)),{USER_SETTINGS_PATH:n}=await Promise.resolve().then(()=>(dn(),E4)),a=r.loadFromFile(n).CLAUDE_MEM_MODE;e.getInstance().loadMode(a),E.info("SYSTEM",`Mode loaded: ${a}`),await this.dbManager.initialize();let{PendingMessageStore:o}=await Promise.resolve().then(()=>(wo(),nc)),s=new o(this.dbManager.getSessionStore().db,3),c=300*1e3,u=s.resetStuckMessages(c);u>0&&E.info("SYSTEM",`Recovered ${u} stuck messages from previous session`,{thresholdMinutes:5});let l=new kg,d=new Tg,p=new Eg(this.dbManager.getSessionSearch(),this.dbManager.getSessionStore(),this.dbManager.getChromaSync(),l,d);this.searchRoutes=new Fg(p),this.server.registerRoutes(this.searchRoutes),E.info("WORKER","SearchManager initialized and search routes registered");let f=pq.default.join(__dirname,"mcp-server.cjs"),g=new Is({command:"node",args:[f],env:process.env}),_=3e5,h=this.mcpClient.connect(g),m=new Promise((y,v)=>setTimeout(()=>v(new Error("MCP connection timeout after 5 minutes")),_));await Promise.race([h,m]),this.mcpReady=!0,E.success("WORKER","Connected to MCP server"),this.initializationCompleteFlag=!0,this.resolveInitialization(),E.info("SYSTEM","Background initialization complete"),this.stopOrphanReaper=J4(()=>{let y=new Set;for(let[v]of this.sessionManager.sessions)y.add(v);return y}),E.info("SYSTEM","Started orphan reaper (runs every 5 minutes)"),this.processPendingQueues(50).then(y=>{y.sessionsStarted>0&&E.info("SYSTEM",`Auto-recovered ${y.sessionsStarted} sessions with pending work`,{totalPending:y.totalPendingSessions,started:y.sessionsStarted,sessionIds:y.startedSessionIds})}).catch(y=>{E.error("SYSTEM","Auto-recovery of pending queues failed",{},y)})}catch(e){throw E.error("SYSTEM","Background initialization failed",{},e),e}}startSessionProcessor(e,r){if(!e)return;let n=e.sessionDbId;E.info("SYSTEM",`Starting generator (${r})`,{sessionId:n}),e.generatorPromise=this.sdkAgent.startSession(e,this).catch(i=>{E.error("SDK","Session generator failed",{sessionId:e.sessionDbId,project:e.project},i)}).finally(()=>{e.generatorPromise=null,this.broadcastProcessingStatus()})}async processPendingQueues(e=10){let{PendingMessageStore:r}=await Promise.resolve().then(()=>(wo(),nc)),n=new r(this.dbManager.getSessionStore().db,3),i=n.getSessionsWithPendingMessages(),a={totalPendingSessions:i.length,sessionsStarted:0,sessionsSkipped:0,startedSessionIds:[]};if(i.length===0)return a;E.info("SYSTEM",`Processing up to ${e} of ${i.length} pending session queues`);for(let o of i){if(a.sessionsStarted>=e)break;try{if(this.sessionManager.getSession(o)?.generatorPromise){a.sessionsSkipped++;continue}let c=this.sessionManager.initializeSession(o);E.info("SYSTEM",`Starting processor for session ${o}`,{project:c.project,pendingCount:n.getPendingCount(o)}),this.startSessionProcessor(c,"startup-recovery"),a.sessionsStarted++,a.startedSessionIds.push(o),await new Promise(u=>setTimeout(u,100))}catch(s){E.error("SYSTEM",`Failed to process session ${o}`,{},s),a.sessionsSkipped++}}return a}async shutdown(){this.stopOrphanReaper&&(this.stopOrphanReaper(),this.stopOrphanReaper=null),await pC({server:this.server.getHttpServer(),sessionManager:this.sessionManager,mcpClient:this.mcpClient,dbManager:this.dbManager})}broadcastProcessingStatus(){let e=this.sessionManager.isAnySessionProcessing(),r=this.sessionManager.getTotalActiveWork(),n=this.sessionManager.getActiveSessionCount();E.info("WORKER","Broadcasting processing status",{isProcessing:e,queueDepth:r,activeSessions:n}),this.sseBroadcaster.broadcast({type:"processing_status",isProcessing:e,queueDepth:r})}};async function dq(t){if(await kl(t,1e3)){let i=await dC(t);if(i.matches)return E.info("SYSTEM","Worker already running and healthy"),!0;if(E.info("SYSTEM","Worker version mismatch detected - auto-restarting",{pluginVersion:i.pluginVersion,workerVersion:i.workerVersion}),await fm(t),!await pm(t,oo(15e3)))return E.error("SYSTEM","Port did not free up after shutdown for version mismatch restart",{port:t}),!1;hi()}return await El(t)?(E.info("SYSTEM","Port in use, waiting for worker to become healthy"),await kl(t,oo(15e3))?(E.info("SYSTEM","Worker is now healthy"),!0):(E.error("SYSTEM","Port in use but worker not responding to health checks"),!1)):(E.info("SYSTEM","Starting worker daemon"),QS(__filename,t)===void 0?(E.error("SYSTEM","Failed to spawn worker daemon"),!1):await kl(t,oo(3e4))?(E.info("SYSTEM","Worker started successfully"),!0):(hi(),E.error("SYSTEM","Worker failed to start (health check timeout)"),!1))}async function the(){let t=process.argv[2],e=Rt();function r(n,i){let a=fq(n,i);console.log(JSON.stringify(a)),process.exit(0)}switch(t){case"start":await dq(e)?r("ready"):r("error","Failed to start worker");case"stop":await fm(e),await pm(e,oo(15e3))||E.warn("SYSTEM","Port did not free up after shutdown",{port:e}),hi(),E.info("SYSTEM","Worker stopped successfully"),process.exit(0);case"restart":E.info("SYSTEM","Restarting worker"),await fm(e),await pm(e,oo(15e3))||(E.error("SYSTEM","Port did not free up after shutdown, aborting restart",{port:e}),process.exit(0)),hi(),QS(__filename,e)===void 0&&(E.error("SYSTEM","Failed to spawn worker daemon during restart"),process.exit(0)),await kl(e,oo(3e4))||(hi(),E.error("SYSTEM","Worker failed to restart"),process.exit(0)),E.info("SYSTEM","Worker restarted successfully"),process.exit(0);case"status":{let n=await El(e),i=nC();n&&i?(console.log("Worker is running"),console.log(` PID: ${i.pid}`),console.log(` Port: ${i.port}`),console.log(` Started: ${i.startedAt}`)):console.log("Worker is not running"),process.exit(0)}case"cursor":{let n=process.argv[3],i=await L4(n,process.argv.slice(4));process.exit(i)}case"hook":{await dq(e)||E.warn("SYSTEM","Worker failed to start before hook, handler will retry");let i=process.argv[3],a=process.argv[4];(!i||!a)&&(console.error("Usage: claude-mem hook "),console.error("Platforms: claude-code, cursor, raw"),console.error("Events: context, session-init, observation, summarize"),process.exit(1));let o=await El(e),s=!1;if(!o)try{E.info("SYSTEM","Starting worker in-process for hook",{event:a}),await new Yd().start(),s=!0}catch(u){E.failure("SYSTEM","Worker failed to start in hook",{},u),hi(),process.exit(0)}let{hookCommand:c}=await Promise.resolve().then(()=>(lq(),uq));await c(i,a,{skipExit:s});break}default:new Yd().start().catch(i=>{E.failure("SYSTEM","Worker failed to start",{},i),hi(),process.exit(0)})}}var rhe=typeof require<"u"&&typeof module<"u"?require.main===module||!module.parent:ihe.url===`file://${process.argv[1]}`||process.argv[1]?.endsWith("worker-service");rhe&&the();0&&(module.exports={WorkerService,buildStatusOutput}); +`);r.json({logs:u,path:n,exists:!0,totalLines:s.length,returnedLines:s.length-c})});handleClearLogs=this.wrapHandler((e,r)=>{let n=this.getLogFilePath();if(!(0,Ao.existsSync)(n)){r.json({success:!0,message:"Log file does not exist",path:n});return}(0,Ao.writeFileSync)(n,"","utf-8"),E.info("SYSTEM","Log file cleared via UI",{path:n}),r.json({success:!0,message:"Log file cleared",path:n})})};var ihe={},ehe="9.0.14";function fq(t,e){return{continue:!0,suppressOutput:!0,status:t,...e&&{message:e}}}var Yd=class{server;startTime=Date.now();mcpClient;mcpReady=!1;initializationCompleteFlag=!1;isShuttingDown=!1;dbManager;sessionManager;sseBroadcaster;sdkAgent;geminiAgent;openRouterAgent;paginationHelper;settingsManager;sessionEventBroadcaster;searchRoutes=null;initializationComplete;resolveInitialization;stopOrphanReaper=null;constructor(){this.initializationComplete=new Promise(e=>{this.resolveInitialization=e}),this.dbManager=new Ih,this.sessionManager=new Nh(this.dbManager),this.sseBroadcaster=new jh,this.sdkAgent=new yg(this.dbManager,this.sessionManager),this.geminiAgent=new _g(this.dbManager,this.sessionManager),this.openRouterAgent=new Sg(this.dbManager,this.sessionManager),this.paginationHelper=new wg(this.dbManager),this.settingsManager=new $g(this.dbManager),this.sessionEventBroadcaster=new Ig(this.sseBroadcaster,this),this.sessionManager.setOnSessionDeleted(()=>{this.broadcastProcessingStatus()}),this.mcpClient=new Es({name:"worker-search-proxy",version:ehe},{capabilities:{}}),this.server=new $h({getInitializationComplete:()=>this.initializationCompleteFlag,getMcpReady:()=>this.mcpReady,onShutdown:()=>this.shutdown(),onRestart:()=>this.shutdown()}),this.registerRoutes(),this.registerSignalHandlers()}registerSignalHandlers(){let e={value:this.isShuttingDown},r=cC(()=>this.shutdown(),e);process.on("SIGTERM",()=>{this.isShuttingDown=e.value,r("SIGTERM")}),process.on("SIGINT",()=>{this.isShuttingDown=e.value,r("SIGINT")})}registerRoutes(){this.server.registerRoutes(new Pg(this.sseBroadcaster,this.dbManager,this.sessionManager)),this.server.registerRoutes(new Ng(this.sessionManager,this.dbManager,this.sdkAgent,this.geminiAgent,this.openRouterAgent,this.sessionEventBroadcaster,this)),this.server.registerRoutes(new jg(this.paginationHelper,this.dbManager,this.sessionManager,this.sseBroadcaster,this,this.startTime)),this.server.registerRoutes(new Hg(this.settingsManager)),this.server.registerRoutes(new Vg),this.server.app.get("/api/context/inject",async(e,r,n)=>{let a=new Promise((o,s)=>setTimeout(()=>s(new Error("Initialization timeout")),3e5));if(await Promise.race([this.initializationComplete,a]),!this.searchRoutes){r.status(503).json({error:"Search routes not initialized"});return}n()})}async start(){let e=Rt(),r=lm();await this.server.listen(e,r),rC({pid:process.pid,port:e,startedAt:new Date().toISOString()}),E.info("SYSTEM","Worker started",{host:r,port:e,pid:process.pid}),this.initializeBackground().catch(n=>{E.error("SYSTEM","Background initialization failed",{},n)})}async initializeBackground(){try{await sC();let{ModeManager:e}=await Promise.resolve().then(()=>(Dr(),Y4)),{SettingsDefaultsManager:r}=await Promise.resolve().then(()=>(un(),KR)),{USER_SETTINGS_PATH:n}=await Promise.resolve().then(()=>(dn(),E4)),a=r.loadFromFile(n).CLAUDE_MEM_MODE;e.getInstance().loadMode(a),E.info("SYSTEM",`Mode loaded: ${a}`),await this.dbManager.initialize();let{PendingMessageStore:o}=await Promise.resolve().then(()=>(wo(),nc)),s=new o(this.dbManager.getSessionStore().db,3),c=300*1e3,u=s.resetStuckMessages(c);u>0&&E.info("SYSTEM",`Recovered ${u} stuck messages from previous session`,{thresholdMinutes:5});let l=new kg,d=new Tg,p=new Eg(this.dbManager.getSessionSearch(),this.dbManager.getSessionStore(),this.dbManager.getChromaSync(),l,d);this.searchRoutes=new Fg(p),this.server.registerRoutes(this.searchRoutes),E.info("WORKER","SearchManager initialized and search routes registered");let f=pq.default.join(__dirname,"mcp-server.cjs"),g=new Is({command:"node",args:[f],env:process.env}),_=3e5,h=this.mcpClient.connect(g),m=new Promise((y,v)=>setTimeout(()=>v(new Error("MCP connection timeout after 5 minutes")),_));await Promise.race([h,m]),this.mcpReady=!0,E.success("WORKER","Connected to MCP server"),this.initializationCompleteFlag=!0,this.resolveInitialization(),E.info("SYSTEM","Background initialization complete"),this.stopOrphanReaper=J4(()=>{let y=new Set;for(let[v]of this.sessionManager.sessions)y.add(v);return y}),E.info("SYSTEM","Started orphan reaper (runs every 5 minutes)"),this.processPendingQueues(50).then(y=>{y.sessionsStarted>0&&E.info("SYSTEM",`Auto-recovered ${y.sessionsStarted} sessions with pending work`,{totalPending:y.totalPendingSessions,started:y.sessionsStarted,sessionIds:y.startedSessionIds})}).catch(y=>{E.error("SYSTEM","Auto-recovery of pending queues failed",{},y)})}catch(e){throw E.error("SYSTEM","Background initialization failed",{},e),e}}startSessionProcessor(e,r){if(!e)return;let n=e.sessionDbId;E.info("SYSTEM",`Starting generator (${r})`,{sessionId:n}),e.generatorPromise=this.sdkAgent.startSession(e,this).catch(i=>{E.error("SDK","Session generator failed",{sessionId:e.sessionDbId,project:e.project},i)}).finally(()=>{e.generatorPromise=null,this.broadcastProcessingStatus()})}async processPendingQueues(e=10){let{PendingMessageStore:r}=await Promise.resolve().then(()=>(wo(),nc)),n=new r(this.dbManager.getSessionStore().db,3),i=n.getSessionsWithPendingMessages(),a={totalPendingSessions:i.length,sessionsStarted:0,sessionsSkipped:0,startedSessionIds:[]};if(i.length===0)return a;E.info("SYSTEM",`Processing up to ${e} of ${i.length} pending session queues`);for(let o of i){if(a.sessionsStarted>=e)break;try{if(this.sessionManager.getSession(o)?.generatorPromise){a.sessionsSkipped++;continue}let c=this.sessionManager.initializeSession(o);E.info("SYSTEM",`Starting processor for session ${o}`,{project:c.project,pendingCount:n.getPendingCount(o)}),this.startSessionProcessor(c,"startup-recovery"),a.sessionsStarted++,a.startedSessionIds.push(o),await new Promise(u=>setTimeout(u,100))}catch(s){E.error("SYSTEM",`Failed to process session ${o}`,{},s),a.sessionsSkipped++}}return a}async shutdown(){this.stopOrphanReaper&&(this.stopOrphanReaper(),this.stopOrphanReaper=null),await pC({server:this.server.getHttpServer(),sessionManager:this.sessionManager,mcpClient:this.mcpClient,dbManager:this.dbManager})}broadcastProcessingStatus(){let e=this.sessionManager.isAnySessionProcessing(),r=this.sessionManager.getTotalActiveWork(),n=this.sessionManager.getActiveSessionCount();E.info("WORKER","Broadcasting processing status",{isProcessing:e,queueDepth:r,activeSessions:n}),this.sseBroadcaster.broadcast({type:"processing_status",isProcessing:e,queueDepth:r})}};async function dq(t){if(await kl(t,1e3)){let i=await dC(t);if(i.matches)return E.info("SYSTEM","Worker already running and healthy"),!0;if(E.info("SYSTEM","Worker version mismatch detected - auto-restarting",{pluginVersion:i.pluginVersion,workerVersion:i.workerVersion}),await fm(t),!await pm(t,oo(15e3)))return E.error("SYSTEM","Port did not free up after shutdown for version mismatch restart",{port:t}),!1;hi()}return await El(t)?(E.info("SYSTEM","Port in use, waiting for worker to become healthy"),await kl(t,oo(15e3))?(E.info("SYSTEM","Worker is now healthy"),!0):(E.error("SYSTEM","Port in use but worker not responding to health checks"),!1)):(E.info("SYSTEM","Starting worker daemon"),QS(__filename,t)===void 0?(E.error("SYSTEM","Failed to spawn worker daemon"),!1):await kl(t,oo(3e4))?(E.info("SYSTEM","Worker started successfully"),!0):(hi(),E.error("SYSTEM","Worker failed to start (health check timeout)"),!1))}async function the(){let t=process.argv[2],e=Rt();function r(n,i){let a=fq(n,i);console.log(JSON.stringify(a)),process.exit(0)}switch(t){case"start":await dq(e)?r("ready"):r("error","Failed to start worker");case"stop":await fm(e),await pm(e,oo(15e3))||E.warn("SYSTEM","Port did not free up after shutdown",{port:e}),hi(),E.info("SYSTEM","Worker stopped successfully"),process.exit(0);case"restart":E.info("SYSTEM","Restarting worker"),await fm(e),await pm(e,oo(15e3))||(E.error("SYSTEM","Port did not free up after shutdown, aborting restart",{port:e}),process.exit(0)),hi(),QS(__filename,e)===void 0&&(E.error("SYSTEM","Failed to spawn worker daemon during restart"),process.exit(0)),await kl(e,oo(3e4))||(hi(),E.error("SYSTEM","Worker failed to restart"),process.exit(0)),E.info("SYSTEM","Worker restarted successfully"),process.exit(0);case"status":{let n=await El(e),i=nC();n&&i?(console.log("Worker is running"),console.log(` PID: ${i.pid}`),console.log(` Port: ${i.port}`),console.log(` Started: ${i.startedAt}`)):console.log("Worker is not running"),process.exit(0)}case"cursor":{let n=process.argv[3],i=await L4(n,process.argv.slice(4));process.exit(i)}case"hook":{await dq(e)||E.warn("SYSTEM","Worker failed to start before hook, handler will retry");let i=process.argv[3],a=process.argv[4];(!i||!a)&&(console.error("Usage: claude-mem hook "),console.error("Platforms: claude-code, cursor, raw"),console.error("Events: context, session-init, observation, summarize"),process.exit(1));let o=await El(e),s=!1;if(!o)try{E.info("SYSTEM","Starting worker in-process for hook",{event:a}),await new Yd().start(),s=!0}catch(u){E.failure("SYSTEM","Worker failed to start in hook",{},u),hi(),process.exit(0)}let{hookCommand:c}=await Promise.resolve().then(()=>(lq(),uq));await c(i,a,{skipExit:s});break}default:new Yd().start().catch(i=>{E.failure("SYSTEM","Worker failed to start",{},i),hi(),process.exit(0)})}}var rhe=typeof require<"u"&&typeof module<"u"?require.main===module||!module.parent:ihe.url===`file://${process.argv[1]}`||process.argv[1]?.endsWith("worker-service");rhe&&the();0&&(module.exports={WorkerService,buildStatusOutput}); /*! Bundled license information: depd/index.js: diff --git a/plugin/ui/CLAUDE.md b/plugin/ui/CLAUDE.md new file mode 100644 index 00000000..66c38643 --- /dev/null +++ b/plugin/ui/CLAUDE.md @@ -0,0 +1,60 @@ + +# Recent Activity + +### Nov 5, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #3910 | 8:28 PM | ✅ | Refined stats counter visual design | ~343 | +| #3909 | " | 🟣 | Added clarifying descriptions to settings UI | ~335 | +| #3812 | 6:08 PM | 🟣 | Enhanced card typography and centered content layout | ~358 | + +### Nov 8, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #5133 | 7:29 PM | ✅ | Version 5.2.3 Released with Build Process | ~487 | +| #4916 | 1:49 PM | ⚖️ | Claude Mem Pro Premium Offering Implementation Plan Finalized | ~946 | +| #4902 | 1:35 PM | 🟣 | Claude Mem Pro Premium Project Initialization | ~679 | +| #4901 | 1:31 PM | ⚖️ | Premium claude-mem Project Architecture and Planning | ~797 | + +### Dec 1, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #18480 | 3:39 PM | ✅ | Successfully Rebuilt Plugin After Merge Conflict Resolution | ~294 | + +### Dec 4, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #20052 | 3:23 PM | ✅ | Built and deployed version 6.5.2 to marketplace | ~321 | + +### Dec 9, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #22557 | 1:08 AM | ✅ | Build completed for version 7.0.3 | ~342 | + +### Dec 10, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #23444 | 2:25 PM | 🟣 | Build Pipeline Execution Successful | ~293 | + +### Dec 16, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #27554 | 4:48 PM | ✅ | Project built successfully with version 7.3.1 | ~306 | + +### Dec 26, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #32983 | 11:04 PM | 🟣 | Complete build and deployment pipeline executed | ~260 | +| #32965 | 10:53 PM | 🔵 | Found plugin/ui/viewer.html - potential styling source | ~201 | +| #32966 | " | 🔵 | viewer.html contains modal CSS including modal-header and modal-body | ~218 | +| #32967 | " | 🔵 | ContextSettingsModal.tsx uses CSS classes defined in viewer.html | ~218 | +| #32968 | " | 🔵 | Need to add CSS for footer to viewer.html | ~223 | + \ No newline at end of file diff --git a/src/CLAUDE.md b/src/CLAUDE.md new file mode 100644 index 00000000..ed7e9ebe --- /dev/null +++ b/src/CLAUDE.md @@ -0,0 +1,9 @@ + +# Recent Activity + +### Dec 26, 2025 + +| ID | Time | T | Title | Read | +|----|------|---|-------|------| +| #32964 | 10:53 PM | 🔵 | No CSS or SCSS files found in entire src/ui directory | ~225 | + \ No newline at end of file