From f8906e6f98069baa072eb25e6c67ada95d5a4a79 Mon Sep 17 00:00:00 2001 From: Prasanna721 Date: Wed, 4 Feb 2026 19:14:37 -0800 Subject: [PATCH 1/3] v2: Claude Code Supermemory Refreshed Refresh plugin architecture with Supermemory - Add project-level configuration system (.claude/.supermemory-claude/config.json) for per-repo API keys and container tags - Add /project-config command to manage project settings - Add /super-save skill for saving project knowledge (architectural decisions, bug fixes, design patterns) - Add repo container tag support for team-shared memories (separate from personal memories) - Rename prompt-hook to save-project-memory with dedicated repo-level memory saving - Remove observation hook (consolidate into other hooks) - Enhance context hook, search memory, and summary hook scripts - Update supermemory client with repo entity context support - Remove MCP config file --- plugin/.mcp.json | 12 --- plugin/commands/project-config.md | 48 ++++++++++++ plugin/hooks/hooks.json | 23 ------ plugin/scripts/add-memory.cjs | 48 +++++++++++- plugin/scripts/context-hook.cjs | 64 +++++++++++++--- plugin/scripts/observation-hook.cjs | 58 --------------- ...rompt-hook.cjs => save-project-memory.cjs} | 50 ++++++++++++- plugin/scripts/search-memory.cjs | 54 ++++++++++++-- plugin/scripts/summary-hook.cjs | 73 +++++++++++++------ plugin/skills/super-save/SKILL.md | 52 +++++++++++++ scripts/build.js | 3 +- src/add-memory.js | 20 +++-- src/lib/container-tag.js | 16 ++++ src/lib/project-config.js | 60 +++++++++++++++ src/lib/settings.js | 43 +++++++---- src/lib/supermemory-client.js | 64 +++++++++++----- src/lib/transcript-formatter.js | 62 +++++++++++----- src/observation-hook.js | 24 ------ src/prompt-hook.js | 23 ------ src/save-project-memory.js | 56 ++++++++++++++ src/summary-hook.js | 9 ++- 21 files changed, 610 insertions(+), 252 deletions(-) delete mode 100644 plugin/.mcp.json create mode 100644 plugin/commands/project-config.md delete mode 100755 plugin/scripts/observation-hook.cjs rename plugin/scripts/{prompt-hook.cjs => save-project-memory.cjs} (74%) create mode 100644 plugin/skills/super-save/SKILL.md create mode 100644 src/lib/project-config.js delete mode 100644 src/observation-hook.js delete mode 100644 src/prompt-hook.js create mode 100644 src/save-project-memory.js diff --git a/plugin/.mcp.json b/plugin/.mcp.json deleted file mode 100644 index 04f5353..0000000 --- a/plugin/.mcp.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "_comment": "MCP disabled - using direct SDK calls via skill instead", - "_mcpServers": { - "super-search": { - "type": "sse", - "url": "https://mcp.supermemory.ai/mcp", - "headers": { - "Authorization": "Bearer ${SUPERMEMORY_CC_API_KEY}" - } - } - } -} diff --git a/plugin/commands/project-config.md b/plugin/commands/project-config.md new file mode 100644 index 0000000..79466ad --- /dev/null +++ b/plugin/commands/project-config.md @@ -0,0 +1,48 @@ +--- +description: Update Supermemory project-level configuration +allowed-tools: ["Bash", "Read", "Edit", "AskUserQuestion"] +--- + +# Project Config + +Update project-level config stored in `.claude/.supermemory-claude/config.json`. + +## Steps + +1. First, find the git root and read the current project config: + + ```bash + git_root=$(git rev-parse --show-toplevel 2>/dev/null || echo "$(pwd)") + cat "$git_root/.claude/.supermemory-claude/config.json" 2>/dev/null || echo "{}" + ``` + +2. Ask the user what they want to update using AskUserQuestion: + - **API Key** (`apiKey`): Project-level API key that overrides global + - **Personal Container Tag** (`personalContainerTag`): Used for saving and searching personal memories across sessions + - **Repo Container Tag** (`repoContainerTag`): Used for repo-level memories shared across team + +3. Ask the user for the new value. Confirm the value they provide. + +4. Update the project config file: + + ```bash + node -e " + const fs = require('fs'); + const path = require('path'); + const { execSync } = require('child_process'); + let gitRoot; + try { gitRoot = execSync('git rev-parse --show-toplevel', { encoding: 'utf-8' }).trim(); } catch { gitRoot = process.cwd(); } + const dir = path.join(gitRoot, '.claude', '.supermemory-claude'); + const file = path.join(dir, 'config.json'); + let data = {}; + try { data = JSON.parse(fs.readFileSync(file, 'utf-8')); } catch {} + data['KEY_NAME'] = 'NEW_VALUE'; + fs.mkdirSync(dir, { recursive: true }); + fs.writeFileSync(file, JSON.stringify(data, null, 2)); + console.log('Updated: ' + file); + " + ``` + + Replace `KEY_NAME` with `apiKey`, `personalContainerTag`, or `repoContainerTag` and `NEW_VALUE` with the user's provided value. + +5. Confirm to the user the project configuration has been updated. diff --git a/plugin/hooks/hooks.json b/plugin/hooks/hooks.json index f389d50..df0e901 100644 --- a/plugin/hooks/hooks.json +++ b/plugin/hooks/hooks.json @@ -12,29 +12,6 @@ ] } ], - "UserPromptSubmit": [ - { - "hooks": [ - { - "type": "command", - "command": "node ${CLAUDE_PLUGIN_ROOT}/scripts/prompt-hook.cjs", - "timeout": 15 - } - ] - } - ], - "PostToolUse": [ - { - "matcher": "Edit|Write|Bash|Task", - "hooks": [ - { - "type": "command", - "command": "node ${CLAUDE_PLUGIN_ROOT}/scripts/observation-hook.cjs", - "timeout": 15 - } - ] - } - ], "Stop": [ { "hooks": [ diff --git a/plugin/scripts/add-memory.cjs b/plugin/scripts/add-memory.cjs index febded2..ff1e6b0 100755 --- a/plugin/scripts/add-memory.cjs +++ b/plugin/scripts/add-memory.cjs @@ -1,9 +1,49 @@ #!/usr/bin/env node -var Re=Object.defineProperty;var mr=Object.getOwnPropertyDescriptor;var jr=Object.getOwnPropertyNames;var xr=Object.prototype.hasOwnProperty;var Xr=(e,t)=>()=>(e&&(t=e(e=0)),t);var v=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Or=(e,t)=>{for(var r in t)Re(e,r,{get:t[r],enumerable:!0})},yr=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of jr(t))!xr.call(e,s)&&s!==r&&Re(e,s,{get:()=>t[s],enumerable:!(n=mr(t,s))||n.enumerable});return e};var Hr=e=>yr(Re({},"__esModule",{value:!0}),e);var we=v(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0});h.__setModuleDefault=h.__createBinding=void 0;h.__classPrivateFieldSet=qr;h.__classPrivateFieldGet=hr;h.__importStar=Wr;h.__exportStar=Tr;function qr(e,t,r,n,s){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!s)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!s:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?s.call(e,r):s?s.value=r:t.set(e,r),r}function hr(e,t,r,n){if(r==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return r==="m"?n:r==="a"?n.call(e):n?n.value:t.get(e)}var Me=Object.create?function(e,t,r,n){n===void 0&&(n=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,s)}:function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]};h.__createBinding=Me;var Tt=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};h.__setModuleDefault=Tt;var Ze=function(e){return Ze=Object.getOwnPropertyNames||function(t){var r=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(r[r.length]=n);return r},Ze(e)};function Wr(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r=Ze(e),n=0;n{"use strict";Object.defineProperty(Y,"__esModule",{value:!0});Y.uuid4=void 0;var Vr=function(){let{crypto:e}=globalThis;if(e?.randomUUID)return Y.uuid4=e.randomUUID.bind(e),e.randomUUID();let t=new Uint8Array(1),r=e?()=>e.getRandomValues(t)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,n=>(+n^r()&15>>+n/4).toString(16))};Y.uuid4=Vr});var ge=v(G=>{"use strict";Object.defineProperty(G,"__esModule",{value:!0});G.castToError=void 0;G.isAbortError=Nr;function Nr(e){return typeof e=="object"&&e!==null&&("name"in e&&e.name==="AbortError"||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}var Lr=e=>{if(e instanceof Error)return e;if(typeof e=="object"&&e!==null){try{if(Object.prototype.toString.call(e)==="[object Error]"){let t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};G.castToError=Lr});var K=v(d=>{"use strict";Object.defineProperty(d,"__esModule",{value:!0});d.InternalServerError=d.RateLimitError=d.UnprocessableEntityError=d.ConflictError=d.NotFoundError=d.PermissionDeniedError=d.AuthenticationError=d.BadRequestError=d.APIConnectionTimeoutError=d.APIConnectionError=d.APIUserAbortError=d.APIError=d.SupermemoryError=void 0;var Rr=ge(),re=class extends Error{};d.SupermemoryError=re;var X=class e extends re{constructor(t,r,n,s){super(`${e.makeMessage(t,r,n)}`),this.status=t,this.headers=s,this.error=r}static makeMessage(t,r,n){let s=r?.message?typeof r.message=="string"?r.message:JSON.stringify(r.message):r?JSON.stringify(r):n;return t&&s?`${t} ${s}`:t?`${t} status code (no body)`:s||"(no status code or body)"}static generate(t,r,n,s){if(!t||!s)return new S({message:n,cause:(0,Rr.castToError)(r)});let o=r;return t===400?new ne(t,o,n,s):t===401?new se(t,o,n,s):t===403?new oe(t,o,n,s):t===404?new fe(t,o,n,s):t===409?new ae(t,o,n,s):t===422?new ce(t,o,n,s):t===429?new ie(t,o,n,s):t>=500?new ue(t,o,n,s):new e(t,o,n,s)}};d.APIError=X;var Fe=class extends X{constructor({message:t}={}){super(void 0,void 0,t||"Request was aborted.",void 0)}};d.APIUserAbortError=Fe;var S=class extends X{constructor({message:t,cause:r}){super(void 0,void 0,t||"Connection error.",void 0),r&&(this.cause=r)}};d.APIConnectionError=S;var De=class extends S{constructor({message:t}={}){super({message:t??"Request timed out."})}};d.APIConnectionTimeoutError=De;var ne=class extends X{};d.BadRequestError=ne;var se=class extends X{};d.AuthenticationError=se;var oe=class extends X{};d.PermissionDeniedError=oe;var fe=class extends X{};d.NotFoundError=fe;var ae=class extends X{};d.ConflictError=ae;var ce=class extends X{};d.UnprocessableEntityError=ce;var ie=class extends X{};d.RateLimitError=ie;var ue=class extends X{};d.InternalServerError=ue});var E=v(u=>{"use strict";Object.defineProperty(u,"__esModule",{value:!0});u.safeJSON=u.maybeCoerceBoolean=u.maybeCoerceFloat=u.maybeCoerceInteger=u.coerceBoolean=u.coerceFloat=u.coerceInteger=u.validatePositiveInteger=u.ensurePresent=u.isReadonlyArray=u.isArray=u.isAbsoluteURL=void 0;u.maybeObj=gr;u.isEmptyObj=Fr;u.hasOwn=Dr;u.isObj=Ur;var k=K(),Zr=/^[a-z][a-z0-9+.-]*:/i,Mr=e=>Zr.test(e);u.isAbsoluteURL=Mr;var wr=e=>(u.isArray=Array.isArray,(0,u.isArray)(e));u.isArray=wr;u.isReadonlyArray=u.isArray;function gr(e){return typeof e!="object"?{}:e??{}}function Fr(e){if(!e)return!0;for(let t in e)return!1;return!0}function Dr(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Ur(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}var Yr=e=>{if(e==null)throw new k.SupermemoryError(`Expected a value to be given but received ${e} instead.`);return e};u.ensurePresent=Yr;var Gr=(e,t)=>{if(typeof t!="number"||!Number.isInteger(t))throw new k.SupermemoryError(`${e} must be an integer`);if(t<0)throw new k.SupermemoryError(`${e} must be a positive integer`);return t};u.validatePositiveInteger=Gr;var Sr=e=>{if(typeof e=="number")return Math.round(e);if(typeof e=="string")return parseInt(e,10);throw new k.SupermemoryError(`Could not coerce ${e} (type: ${typeof e}) into a number`)};u.coerceInteger=Sr;var Kr=e=>{if(typeof e=="number")return e;if(typeof e=="string")return parseFloat(e);throw new k.SupermemoryError(`Could not coerce ${e} (type: ${typeof e}) into a number`)};u.coerceFloat=Kr;var kr=e=>typeof e=="boolean"?e:typeof e=="string"?e==="true":!!e;u.coerceBoolean=kr;var Er=e=>{if(e!=null)return(0,u.coerceInteger)(e)};u.maybeCoerceInteger=Er;var Jr=e=>{if(e!=null)return(0,u.coerceFloat)(e)};u.maybeCoerceFloat=Jr;var Ir=e=>{if(e!=null)return(0,u.coerceBoolean)(e)};u.maybeCoerceBoolean=Ir;var Cr=e=>{try{return JSON.parse(e)}catch{return}};u.safeJSON=Cr});var Nt=v(ve=>{"use strict";Object.defineProperty(ve,"__esModule",{value:!0});ve.sleep=void 0;var Br=e=>new Promise(t=>setTimeout(t,e));ve.sleep=Br});var Ue=v(de=>{"use strict";Object.defineProperty(de,"__esModule",{value:!0});de.VERSION=void 0;de.VERSION="4.0.0"});var Mt=v(M=>{"use strict";Object.defineProperty(M,"__esModule",{value:!0});M.getPlatformHeaders=M.isRunningInBrowser=void 0;var J=Ue(),Ar=()=>typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u";M.isRunningInBrowser=Ar;function Qr(){return typeof Deno<"u"&&Deno.build!=null?"deno":typeof EdgeRuntime<"u"?"edge":Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]"?"node":"unknown"}var _r=()=>{let e=Qr();if(e==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":J.VERSION,"X-Stainless-OS":Rt(Deno.build.os),"X-Stainless-Arch":Lt(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version=="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":J.VERSION,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if(e==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":J.VERSION,"X-Stainless-OS":Rt(globalThis.process.platform??"unknown"),"X-Stainless-Arch":Lt(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let t=$r();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":J.VERSION,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":J.VERSION,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};function $r(){if(typeof navigator>"u"||!navigator)return null;let e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:t,pattern:r}of e){let n=r.exec(navigator.userAgent);if(n){let s=n[1]||0,o=n[2]||0,f=n[3]||0;return{browser:t,version:`${s}.${o}.${f}`}}}return null}var Lt=e=>e==="x32"?"x32":e==="x86_64"||e==="x64"?"x64":e==="arm"?"arm":e==="aarch64"||e==="arm64"?"arm64":e?`other:${e}`:"unknown",Rt=e=>(e=e.toLowerCase(),e.includes("ios")?"iOS":e==="android"?"Android":e==="darwin"?"MacOS":e==="win32"?"Windows":e==="freebsd"?"FreeBSD":e==="openbsd"?"OpenBSD":e==="linux"?"Linux":e?`Other:${e}`:"Unknown"),Zt,en=()=>Zt??(Zt=_r());M.getPlatformHeaders=en});var Ye=v(L=>{"use strict";Object.defineProperty(L,"__esModule",{value:!0});L.getDefaultFetch=tn;L.makeReadableStream=wt;L.ReadableStreamFrom=rn;L.ReadableStreamToAsyncIterable=nn;L.CancelReadableStream=sn;function tn(){if(typeof fetch<"u")return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Supermemory({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function wt(...e){let t=globalThis.ReadableStream;if(typeof t>"u")throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function rn(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return wt({start(){},async pull(r){let{done:n,value:s}=await t.next();n?r.close():r.enqueue(s)},async cancel(){await t.return?.()}})}function nn(e){if(e[Symbol.asyncIterator])return e;let t=e.getReader();return{async next(){try{let r=await t.read();return r?.done&&t.releaseLock(),r}catch(r){throw t.releaseLock(),r}},async return(){let r=t.cancel();return t.releaseLock(),await r,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function sn(e){if(e===null||typeof e!="object")return;if(e[Symbol.asyncIterator]){await e[Symbol.asyncIterator]().return?.();return}let t=e.getReader(),r=t.cancel();t.releaseLock(),await r}});var gt=v(le=>{"use strict";Object.defineProperty(le,"__esModule",{value:!0});le.FallbackEncoder=void 0;var on=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)});le.FallbackEncoder=on});var I=v(p=>{"use strict";Object.defineProperty(p,"__esModule",{value:!0});p.createForm=p.multipartFormRequestOptions=p.maybeMultipartFormRequestOptions=p.isAsyncIterable=p.checkFileSupport=void 0;p.makeFile=Ge;p.getName=Pe;var fn=Ye(),an=()=>{if(typeof File>"u"){let{process:e}=globalThis,t=typeof e?.versions?.node=="string"&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};p.checkFileSupport=an;function Ge(e,t,r){return(0,p.checkFileSupport)(),new File(e,t??"unknown_file",r)}function Pe(e){return(typeof e=="object"&&e!==null&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}var cn=e=>e!=null&&typeof e=="object"&&typeof e[Symbol.asyncIterator]=="function";p.isAsyncIterable=cn;var un=async(e,t)=>Se(e.body)?{...e,body:await(0,p.createForm)(e.body,t)}:e;p.maybeMultipartFormRequestOptions=un;var vn=async(e,t)=>({...e,body:await(0,p.createForm)(e.body,t)});p.multipartFormRequestOptions=vn;var Ft=new WeakMap;function dn(e){let t=typeof e=="function"?e:e.fetch,r=Ft.get(t);if(r)return r;let n=(async()=>{try{let s="Response"in t?t.Response:(await t("data:,")).constructor,o=new FormData;return o.toString()!==await new s(o).text()}catch{return!0}})();return Ft.set(t,n),n}var ln=async(e,t)=>{if(!await dn(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");let r=new FormData;return await Promise.all(Object.entries(e||{}).map(([n,s])=>Ke(r,n,s))),r};p.createForm=ln;var Dt=e=>e instanceof Blob&&"name"in e,Pn=e=>typeof e=="object"&&e!==null&&(e instanceof Response||(0,p.isAsyncIterable)(e)||Dt(e)),Se=e=>{if(Pn(e))return!0;if(Array.isArray(e))return e.some(Se);if(e&&typeof e=="object"){for(let t in e)if(Se(e[t]))return!0}return!1},Ke=async(e,t,r)=>{if(r!==void 0){if(r==null)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if(typeof r=="string"||typeof r=="number"||typeof r=="boolean")e.append(t,String(r));else if(r instanceof Response)e.append(t,Ge([await r.blob()],Pe(r)));else if((0,p.isAsyncIterable)(r))e.append(t,Ge([await new Response((0,fn.ReadableStreamFrom)(r)).blob()],Pe(r)));else if(Dt(r))e.append(t,r,Pe(r));else if(Array.isArray(r))await Promise.all(r.map(n=>Ke(e,t+"[]",n)));else if(typeof r=="object")await Promise.all(Object.entries(r).map(([n,s])=>Ke(e,`${t}[${n}]`,s)));else throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${r} instead`)}}});var Yt=v(Ee=>{"use strict";Object.defineProperty(Ee,"__esModule",{value:!0});Ee.toFile=mn;var C=I(),zn=I(),Ut=e=>e!=null&&typeof e=="object"&&typeof e.size=="number"&&typeof e.type=="string"&&typeof e.text=="function"&&typeof e.slice=="function"&&typeof e.arrayBuffer=="function",pn=e=>e!=null&&typeof e=="object"&&typeof e.name=="string"&&typeof e.lastModified=="number"&&Ut(e),bn=e=>e!=null&&typeof e=="object"&&typeof e.url=="string"&&typeof e.blob=="function";async function mn(e,t,r){if((0,zn.checkFileSupport)(),e=await e,pn(e))return e instanceof File?e:(0,C.makeFile)([await e.arrayBuffer()],e.name);if(bn(e)){let s=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),(0,C.makeFile)(await ke(s),t,r)}let n=await ke(e);if(t||(t=(0,C.getName)(e)),!r?.type){let s=n.find(o=>typeof o=="object"&&"type"in o&&o.type);typeof s=="string"&&(r={...r,type:s})}return(0,C.makeFile)(n,t,r)}async function ke(e){let t=[];if(typeof e=="string"||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Ut(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else if((0,C.isAsyncIterable)(e))for await(let r of e)t.push(...await ke(r));else{let r=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${r?`; constructor: ${r}`:""}${jn(e)}`)}return t}function jn(e){return typeof e!="object"||e===null?"":`; props: [${Object.getOwnPropertyNames(e).map(r=>`"${r}"`).join(", ")}]`}});var Je=v(ze=>{"use strict";Object.defineProperty(ze,"__esModule",{value:!0});ze.toFile=void 0;var xn=Yt();Object.defineProperty(ze,"toFile",{enumerable:!0,get:function(){return xn.toFile}})});var w=v(pe=>{"use strict";Object.defineProperty(pe,"__esModule",{value:!0});pe.APIResource=void 0;var Ie=class{constructor(t){this._client=t}};pe.APIResource=Ie});var B=v(g=>{"use strict";Object.defineProperty(g,"__esModule",{value:!0});g.isEmptyHeaders=g.buildHeaders=void 0;var Gt=E(),St=Symbol("brand.privateNullableHeaders");function*Kt(e){if(!e)return;if(St in e){let{values:n,nulls:s}=e;yield*n.entries();for(let o of s)yield[o,null];return}let t=!1,r;e instanceof Headers?r=e.entries():(0,Gt.isReadonlyArray)(e)?r=e:(t=!0,r=Object.entries(e??{}));for(let n of r){let s=n[0];if(typeof s!="string")throw new TypeError("expected header name to be a string");let o=(0,Gt.isReadonlyArray)(n[1])?n[1]:[n[1]],f=!1;for(let i of o)i!==void 0&&(t&&!f&&(f=!0,yield[s,null]),yield[s,i])}}var Xn=e=>{let t=new Headers,r=new Set;for(let n of e){let s=new Set;for(let[o,f]of Kt(n)){let i=o.toLowerCase();s.has(i)||(t.delete(o),s.add(i)),f===null?(t.delete(o),r.add(i)):(t.append(o,f),r.delete(i))}}return{[St]:!0,values:t,nulls:r}};g.buildHeaders=Xn;var On=e=>{for(let t of Kt(e))return!1;return!0};g.isEmptyHeaders=On});var be=v(V=>{"use strict";Object.defineProperty(V,"__esModule",{value:!0});V.path=V.createPathTagFunction=void 0;V.encodeURIPath=Ce;var yn=K();function Ce(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}var kt=Object.freeze(Object.create(null)),Hn=(e=Ce)=>function(r,...n){if(r.length===1)return r[0];let s=!1,o=[],f=r.reduce((x,j,H)=>{/[?#]/.test(j)&&(s=!0);let a=n[H],q=(s?encodeURIComponent:e)(""+a);return H!==n.length&&(a==null||typeof a=="object"&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??kt)??kt)?.toString)&&(q=a+"",o.push({start:x.length+j.length,length:q.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),x+j+(H===n.length?"":q)},""),i=f.split(/[?#]/,1)[0],m=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi,P;for(;(P=m.exec(i))!==null;)o.push({start:P.index,length:P[0].length,error:`Value "${P[0]}" can't be safely passed as a path parameter`});if(o.sort((x,j)=>x.start-j.start),o.length>0){let x=0,j=o.reduce((H,a)=>{let q=" ".repeat(a.start-x),D="^".repeat(a.length);return x=a.start+a.length,H+q+D},"");throw new yn.SupermemoryError(`Path parameters result in path with invalid segments: +var we=Object.defineProperty;var Vr=Object.getOwnPropertyDescriptor;var Lr=Object.getOwnPropertyNames;var Rr=Object.prototype.hasOwnProperty;var Zr=(e,t)=>()=>(e&&(t=e(e=0)),t);var v=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Mr=(e,t)=>{for(var r in t)we(e,r,{get:t[r],enumerable:!0})},wr=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Lr(t))!Rr.call(e,s)&&s!==r&&we(e,s,{get:()=>t[s],enumerable:!(n=Vr(t,s))||n.enumerable});return e};var gr=e=>wr(we({},"__esModule",{value:!0}),e);var De=v(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0});h.__setModuleDefault=h.__createBinding=void 0;h.__classPrivateFieldSet=Fr;h.__classPrivateFieldGet=Dr;h.__importStar=Ur;h.__exportStar=Yr;function Fr(e,t,r,n,s){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!s)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!s:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?s.call(e,r):s?s.value=r:t.set(e,r),r}function Dr(e,t,r,n){if(r==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return r==="m"?n:r==="a"?n.call(e):n?n.value:t.get(e)}var Fe=Object.create?function(e,t,r,n){n===void 0&&(n=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,s)}:function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]};h.__createBinding=Fe;var Lt=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};h.__setModuleDefault=Lt;var ge=function(e){return ge=Object.getOwnPropertyNames||function(t){var r=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(r[r.length]=n);return r},ge(e)};function Ur(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r=ge(e),n=0;n{"use strict";Object.defineProperty(Y,"__esModule",{value:!0});Y.uuid4=void 0;var Sr=function(){let{crypto:e}=globalThis;if(e?.randomUUID)return Y.uuid4=e.randomUUID.bind(e),e.randomUUID();let t=new Uint8Array(1),r=e?()=>e.getRandomValues(t)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,n=>(+n^r()&15>>+n/4).toString(16))};Y.uuid4=Sr});var Ue=v(S=>{"use strict";Object.defineProperty(S,"__esModule",{value:!0});S.castToError=void 0;S.isAbortError=Gr;function Gr(e){return typeof e=="object"&&e!==null&&("name"in e&&e.name==="AbortError"||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}var Kr=e=>{if(e instanceof Error)return e;if(typeof e=="object"&&e!==null){try{if(Object.prototype.toString.call(e)==="[object Error]"){let t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};S.castToError=Kr});var K=v(d=>{"use strict";Object.defineProperty(d,"__esModule",{value:!0});d.InternalServerError=d.RateLimitError=d.UnprocessableEntityError=d.ConflictError=d.NotFoundError=d.PermissionDeniedError=d.AuthenticationError=d.BadRequestError=d.APIConnectionTimeoutError=d.APIConnectionError=d.APIUserAbortError=d.APIError=d.SupermemoryError=void 0;var kr=Ue(),se=class extends Error{};d.SupermemoryError=se;var X=class e extends se{constructor(t,r,n,s){super(`${e.makeMessage(t,r,n)}`),this.status=t,this.headers=s,this.error=r}static makeMessage(t,r,n){let s=r?.message?typeof r.message=="string"?r.message:JSON.stringify(r.message):r?JSON.stringify(r):n;return t&&s?`${t} ${s}`:t?`${t} status code (no body)`:s||"(no status code or body)"}static generate(t,r,n,s){if(!t||!s)return new G({message:n,cause:(0,kr.castToError)(r)});let o=r;return t===400?new oe(t,o,n,s):t===401?new fe(t,o,n,s):t===403?new ae(t,o,n,s):t===404?new ce(t,o,n,s):t===409?new ie(t,o,n,s):t===422?new ue(t,o,n,s):t===429?new ve(t,o,n,s):t>=500?new de(t,o,n,s):new e(t,o,n,s)}};d.APIError=X;var Ye=class extends X{constructor({message:t}={}){super(void 0,void 0,t||"Request was aborted.",void 0)}};d.APIUserAbortError=Ye;var G=class extends X{constructor({message:t,cause:r}){super(void 0,void 0,t||"Connection error.",void 0),r&&(this.cause=r)}};d.APIConnectionError=G;var Se=class extends G{constructor({message:t}={}){super({message:t??"Request timed out."})}};d.APIConnectionTimeoutError=Se;var oe=class extends X{};d.BadRequestError=oe;var fe=class extends X{};d.AuthenticationError=fe;var ae=class extends X{};d.PermissionDeniedError=ae;var ce=class extends X{};d.NotFoundError=ce;var ie=class extends X{};d.ConflictError=ie;var ue=class extends X{};d.UnprocessableEntityError=ue;var ve=class extends X{};d.RateLimitError=ve;var de=class extends X{};d.InternalServerError=de});var E=v(u=>{"use strict";Object.defineProperty(u,"__esModule",{value:!0});u.safeJSON=u.maybeCoerceBoolean=u.maybeCoerceFloat=u.maybeCoerceInteger=u.coerceBoolean=u.coerceFloat=u.coerceInteger=u.validatePositiveInteger=u.ensurePresent=u.isReadonlyArray=u.isArray=u.isAbsoluteURL=void 0;u.maybeObj=Jr;u.isEmptyObj=Br;u.hasOwn=Ar;u.isObj=Qr;var k=K(),Er=/^[a-z][a-z0-9+.-]*:/i,Ir=e=>Er.test(e);u.isAbsoluteURL=Ir;var Cr=e=>(u.isArray=Array.isArray,(0,u.isArray)(e));u.isArray=Cr;u.isReadonlyArray=u.isArray;function Jr(e){return typeof e!="object"?{}:e??{}}function Br(e){if(!e)return!0;for(let t in e)return!1;return!0}function Ar(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Qr(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}var _r=e=>{if(e==null)throw new k.SupermemoryError(`Expected a value to be given but received ${e} instead.`);return e};u.ensurePresent=_r;var $r=(e,t)=>{if(typeof t!="number"||!Number.isInteger(t))throw new k.SupermemoryError(`${e} must be an integer`);if(t<0)throw new k.SupermemoryError(`${e} must be a positive integer`);return t};u.validatePositiveInteger=$r;var en=e=>{if(typeof e=="number")return Math.round(e);if(typeof e=="string")return parseInt(e,10);throw new k.SupermemoryError(`Could not coerce ${e} (type: ${typeof e}) into a number`)};u.coerceInteger=en;var tn=e=>{if(typeof e=="number")return e;if(typeof e=="string")return parseFloat(e);throw new k.SupermemoryError(`Could not coerce ${e} (type: ${typeof e}) into a number`)};u.coerceFloat=tn;var rn=e=>typeof e=="boolean"?e:typeof e=="string"?e==="true":!!e;u.coerceBoolean=rn;var nn=e=>{if(e!=null)return(0,u.coerceInteger)(e)};u.maybeCoerceInteger=nn;var sn=e=>{if(e!=null)return(0,u.coerceFloat)(e)};u.maybeCoerceFloat=sn;var on=e=>{if(e!=null)return(0,u.coerceBoolean)(e)};u.maybeCoerceBoolean=on;var fn=e=>{try{return JSON.parse(e)}catch{return}};u.safeJSON=fn});var Zt=v(le=>{"use strict";Object.defineProperty(le,"__esModule",{value:!0});le.sleep=void 0;var an=e=>new Promise(t=>setTimeout(t,e));le.sleep=an});var Ge=v(Pe=>{"use strict";Object.defineProperty(Pe,"__esModule",{value:!0});Pe.VERSION=void 0;Pe.VERSION="4.0.0"});var Ft=v(M=>{"use strict";Object.defineProperty(M,"__esModule",{value:!0});M.getPlatformHeaders=M.isRunningInBrowser=void 0;var I=Ge(),cn=()=>typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u";M.isRunningInBrowser=cn;function un(){return typeof Deno<"u"&&Deno.build!=null?"deno":typeof EdgeRuntime<"u"?"edge":Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]"?"node":"unknown"}var vn=()=>{let e=un();if(e==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":I.VERSION,"X-Stainless-OS":wt(Deno.build.os),"X-Stainless-Arch":Mt(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version=="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":I.VERSION,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if(e==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":I.VERSION,"X-Stainless-OS":wt(globalThis.process.platform??"unknown"),"X-Stainless-Arch":Mt(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let t=dn();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":I.VERSION,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":I.VERSION,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};function dn(){if(typeof navigator>"u"||!navigator)return null;let e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:t,pattern:r}of e){let n=r.exec(navigator.userAgent);if(n){let s=n[1]||0,o=n[2]||0,f=n[3]||0;return{browser:t,version:`${s}.${o}.${f}`}}}return null}var Mt=e=>e==="x32"?"x32":e==="x86_64"||e==="x64"?"x64":e==="arm"?"arm":e==="aarch64"||e==="arm64"?"arm64":e?`other:${e}`:"unknown",wt=e=>(e=e.toLowerCase(),e.includes("ios")?"iOS":e==="android"?"Android":e==="darwin"?"MacOS":e==="win32"?"Windows":e==="freebsd"?"FreeBSD":e==="openbsd"?"OpenBSD":e==="linux"?"Linux":e?`Other:${e}`:"Unknown"),gt,ln=()=>gt??(gt=vn());M.getPlatformHeaders=ln});var Ke=v(L=>{"use strict";Object.defineProperty(L,"__esModule",{value:!0});L.getDefaultFetch=Pn;L.makeReadableStream=Dt;L.ReadableStreamFrom=pn;L.ReadableStreamToAsyncIterable=zn;L.CancelReadableStream=mn;function Pn(){if(typeof fetch<"u")return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Supermemory({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function Dt(...e){let t=globalThis.ReadableStream;if(typeof t>"u")throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function pn(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return Dt({start(){},async pull(r){let{done:n,value:s}=await t.next();n?r.close():r.enqueue(s)},async cancel(){await t.return?.()}})}function zn(e){if(e[Symbol.asyncIterator])return e;let t=e.getReader();return{async next(){try{let r=await t.read();return r?.done&&t.releaseLock(),r}catch(r){throw t.releaseLock(),r}},async return(){let r=t.cancel();return t.releaseLock(),await r,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function mn(e){if(e===null||typeof e!="object")return;if(e[Symbol.asyncIterator]){await e[Symbol.asyncIterator]().return?.();return}let t=e.getReader(),r=t.cancel();t.releaseLock(),await r}});var Ut=v(pe=>{"use strict";Object.defineProperty(pe,"__esModule",{value:!0});pe.FallbackEncoder=void 0;var bn=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)});pe.FallbackEncoder=bn});var C=v(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z.createForm=z.multipartFormRequestOptions=z.maybeMultipartFormRequestOptions=z.isAsyncIterable=z.checkFileSupport=void 0;z.makeFile=ke;z.getName=ze;var jn=Ke(),xn=()=>{if(typeof File>"u"){let{process:e}=globalThis,t=typeof e?.versions?.node=="string"&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};z.checkFileSupport=xn;function ke(e,t,r){return(0,z.checkFileSupport)(),new File(e,t??"unknown_file",r)}function ze(e){return(typeof e=="object"&&e!==null&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}var Xn=e=>e!=null&&typeof e=="object"&&typeof e[Symbol.asyncIterator]=="function";z.isAsyncIterable=Xn;var On=async(e,t)=>Ee(e.body)?{...e,body:await(0,z.createForm)(e.body,t)}:e;z.maybeMultipartFormRequestOptions=On;var yn=async(e,t)=>({...e,body:await(0,z.createForm)(e.body,t)});z.multipartFormRequestOptions=yn;var Yt=new WeakMap;function Hn(e){let t=typeof e=="function"?e:e.fetch,r=Yt.get(t);if(r)return r;let n=(async()=>{try{let s="Response"in t?t.Response:(await t("data:,")).constructor,o=new FormData;return o.toString()!==await new s(o).text()}catch{return!0}})();return Yt.set(t,n),n}var qn=async(e,t)=>{if(!await Hn(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");let r=new FormData;return await Promise.all(Object.entries(e||{}).map(([n,s])=>Ie(r,n,s))),r};z.createForm=qn;var St=e=>e instanceof Blob&&"name"in e,hn=e=>typeof e=="object"&&e!==null&&(e instanceof Response||(0,z.isAsyncIterable)(e)||St(e)),Ee=e=>{if(hn(e))return!0;if(Array.isArray(e))return e.some(Ee);if(e&&typeof e=="object"){for(let t in e)if(Ee(e[t]))return!0}return!1},Ie=async(e,t,r)=>{if(r!==void 0){if(r==null)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if(typeof r=="string"||typeof r=="number"||typeof r=="boolean")e.append(t,String(r));else if(r instanceof Response)e.append(t,ke([await r.blob()],ze(r)));else if((0,z.isAsyncIterable)(r))e.append(t,ke([await new Response((0,jn.ReadableStreamFrom)(r)).blob()],ze(r)));else if(St(r))e.append(t,r,ze(r));else if(Array.isArray(r))await Promise.all(r.map(n=>Ie(e,t+"[]",n)));else if(typeof r=="object")await Promise.all(Object.entries(r).map(([n,s])=>Ie(e,`${t}[${n}]`,s)));else throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${r} instead`)}}});var Kt=v(Je=>{"use strict";Object.defineProperty(Je,"__esModule",{value:!0});Je.toFile=Vn;var J=C(),Wn=C(),Gt=e=>e!=null&&typeof e=="object"&&typeof e.size=="number"&&typeof e.type=="string"&&typeof e.text=="function"&&typeof e.slice=="function"&&typeof e.arrayBuffer=="function",Tn=e=>e!=null&&typeof e=="object"&&typeof e.name=="string"&&typeof e.lastModified=="number"&&Gt(e),Nn=e=>e!=null&&typeof e=="object"&&typeof e.url=="string"&&typeof e.blob=="function";async function Vn(e,t,r){if((0,Wn.checkFileSupport)(),e=await e,Tn(e))return e instanceof File?e:(0,J.makeFile)([await e.arrayBuffer()],e.name);if(Nn(e)){let s=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),(0,J.makeFile)(await Ce(s),t,r)}let n=await Ce(e);if(t||(t=(0,J.getName)(e)),!r?.type){let s=n.find(o=>typeof o=="object"&&"type"in o&&o.type);typeof s=="string"&&(r={...r,type:s})}return(0,J.makeFile)(n,t,r)}async function Ce(e){let t=[];if(typeof e=="string"||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Gt(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else if((0,J.isAsyncIterable)(e))for await(let r of e)t.push(...await Ce(r));else{let r=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${r?`; constructor: ${r}`:""}${Ln(e)}`)}return t}function Ln(e){return typeof e!="object"||e===null?"":`; props: [${Object.getOwnPropertyNames(e).map(r=>`"${r}"`).join(", ")}]`}});var Be=v(me=>{"use strict";Object.defineProperty(me,"__esModule",{value:!0});me.toFile=void 0;var Rn=Kt();Object.defineProperty(me,"toFile",{enumerable:!0,get:function(){return Rn.toFile}})});var w=v(be=>{"use strict";Object.defineProperty(be,"__esModule",{value:!0});be.APIResource=void 0;var Ae=class{constructor(t){this._client=t}};be.APIResource=Ae});var B=v(g=>{"use strict";Object.defineProperty(g,"__esModule",{value:!0});g.isEmptyHeaders=g.buildHeaders=void 0;var kt=E(),Et=Symbol("brand.privateNullableHeaders");function*It(e){if(!e)return;if(Et in e){let{values:n,nulls:s}=e;yield*n.entries();for(let o of s)yield[o,null];return}let t=!1,r;e instanceof Headers?r=e.entries():(0,kt.isReadonlyArray)(e)?r=e:(t=!0,r=Object.entries(e??{}));for(let n of r){let s=n[0];if(typeof s!="string")throw new TypeError("expected header name to be a string");let o=(0,kt.isReadonlyArray)(n[1])?n[1]:[n[1]],f=!1;for(let c of o)c!==void 0&&(t&&!f&&(f=!0,yield[s,null]),yield[s,c])}}var Zn=e=>{let t=new Headers,r=new Set;for(let n of e){let s=new Set;for(let[o,f]of It(n)){let c=o.toLowerCase();s.has(c)||(t.delete(o),s.add(c)),f===null?(t.delete(o),r.add(c)):(t.append(o,f),r.delete(c))}}return{[Et]:!0,values:t,nulls:r}};g.buildHeaders=Zn;var Mn=e=>{for(let t of It(e))return!1;return!0};g.isEmptyHeaders=Mn});var je=v(N=>{"use strict";Object.defineProperty(N,"__esModule",{value:!0});N.path=N.createPathTagFunction=void 0;N.encodeURIPath=Qe;var wn=K();function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}var Ct=Object.freeze(Object.create(null)),gn=(e=Qe)=>function(r,...n){if(r.length===1)return r[0];let s=!1,o=[],f=r.reduce((x,j,H)=>{/[?#]/.test(j)&&(s=!0);let a=n[H],q=(s?encodeURIComponent:e)(""+a);return H!==n.length&&(a==null||typeof a=="object"&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ct)??Ct)?.toString)&&(q=a+"",o.push({start:x.length+j.length,length:q.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),x+j+(H===n.length?"":q)},""),c=f.split(/[?#]/,1)[0],b=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi,P;for(;(P=b.exec(c))!==null;)o.push({start:P.index,length:P[0].length,error:`Value "${P[0]}" can't be safely passed as a path parameter`});if(o.sort((x,j)=>x.start-j.start),o.length>0){let x=0,j=o.reduce((H,a)=>{let q=" ".repeat(a.start-x),D="^".repeat(a.length);return x=a.start+a.length,H+q+D},"");throw new wn.SupermemoryError(`Path parameters result in path with invalid segments: ${o.map(H=>H.error).join(` `)} ${f} -${j}`)}return f};V.createPathTagFunction=Hn;V.path=(0,V.createPathTagFunction)(Ce)});var Ae=v(me=>{"use strict";Object.defineProperty(me,"__esModule",{value:!0});me.Connections=void 0;var qn=w(),hn=B(),W=be(),Be=class extends qn.APIResource{create(t,r={},n){return this._client.post((0,W.path)`/v3/connections/${t}`,{body:r,...n})}list(t={},r){return this._client.post("/v3/connections/list",{body:t,...r})}configure(t,r,n){return this._client.post((0,W.path)`/v3/connections/${t}/configure`,{body:r,...n})}deleteByID(t,r){return this._client.delete((0,W.path)`/v3/connections/${t}`,r)}deleteByProvider(t,r,n){return this._client.delete((0,W.path)`/v3/connections/${t}`,{body:r,...n})}getByID(t,r){return this._client.get((0,W.path)`/v3/connections/${t}`,r)}getByTag(t,r,n){return this._client.post((0,W.path)`/v3/connections/${t}/connection`,{body:r,...n})}import(t,r={},n){return this._client.post((0,W.path)`/v3/connections/${t}/import`,{body:r,...n,headers:(0,hn.buildHeaders)([{Accept:"text/plain"},n?.headers])})}listDocuments(t,r={},n){return this._client.post((0,W.path)`/v3/connections/${t}/documents`,{body:r,...n})}resources(t,r={},n){return this._client.get((0,W.path)`/v3/connections/${t}/resources`,{query:r,...n})}};me.Connections=Be});var $e=v(je=>{"use strict";Object.defineProperty(je,"__esModule",{value:!0});je.Documents=void 0;var Wn=w(),Tn=B(),Vn=I(),Qe=be(),_e=class extends Wn.APIResource{update(t,r={},n){return this._client.patch((0,Qe.path)`/v3/documents/${t}`,{body:r,...n})}list(t={},r){return this._client.post("/v3/documents/list",{body:t,...r})}delete(t,r){return this._client.delete((0,Qe.path)`/v3/documents/${t}`,{...r,headers:(0,Tn.buildHeaders)([{Accept:"*/*"},r?.headers])})}add(t,r){return this._client.post("/v3/documents",{body:t,...r})}batchAdd(t,r){return this._client.post("/v3/documents/batch",{body:t,...r})}deleteBulk(t={},r){return this._client.delete("/v3/documents/bulk",{body:t,...r})}get(t,r){return this._client.get((0,Qe.path)`/v3/documents/${t}`,r)}listProcessing(t){return this._client.get("/v3/documents/processing",t)}uploadFile(t,r){return this._client.post("/v3/documents/file",(0,Vn.multipartFormRequestOptions)({body:t,...r},this._client))}};je.Documents=_e});var rt=v(xe=>{"use strict";Object.defineProperty(xe,"__esModule",{value:!0});xe.Memories=void 0;var Nn=w(),Ln=B(),Rn=I(),et=be(),tt=class extends Nn.APIResource{update(t,r={},n){return this._client.patch((0,et.path)`/v3/documents/${t}`,{body:r,...n})}list(t={},r){return this._client.post("/v3/documents/list",{body:t,...r})}delete(t,r){return this._client.delete((0,et.path)`/v3/documents/${t}`,{...r,headers:(0,Ln.buildHeaders)([{Accept:"*/*"},r?.headers])})}add(t,r){return this._client.post("/v3/documents",{body:t,...r})}forget(t,r){return this._client.delete("/v4/memories",{body:t,...r})}get(t,r){return this._client.get((0,et.path)`/v3/documents/${t}`,r)}updateMemory(t,r){return this._client.patch("/v4/memories",{body:t,...r})}uploadFile(t,r){return this._client.post("/v3/documents/file",(0,Rn.multipartFormRequestOptions)({body:t,...r},this._client))}};xe.Memories=tt});var st=v(Xe=>{"use strict";Object.defineProperty(Xe,"__esModule",{value:!0});Xe.Search=void 0;var Zn=w(),nt=class extends Zn.APIResource{documents(t,r){return this._client.post("/v3/search",{body:t,...r})}execute(t,r){return this._client.post("/v3/search",{body:t,...r})}memories(t,r){return this._client.post("/v4/search",{body:t,...r})}};Xe.Search=nt});var ft=v(Oe=>{"use strict";Object.defineProperty(Oe,"__esModule",{value:!0});Oe.Settings=void 0;var Mn=w(),ot=class extends Mn.APIResource{update(t={},r){return this._client.patch("/v3/settings",{body:t,...r})}get(t){return this._client.get("/v3/settings",t)}};Oe.Settings=ot});var Et=v(y=>{"use strict";Object.defineProperty(y,"__esModule",{value:!0});y.Settings=y.Search=y.Memories=y.Documents=y.Connections=void 0;var wn=Ae();Object.defineProperty(y,"Connections",{enumerable:!0,get:function(){return wn.Connections}});var gn=$e();Object.defineProperty(y,"Documents",{enumerable:!0,get:function(){return gn.Documents}});var Fn=rt();Object.defineProperty(y,"Memories",{enumerable:!0,get:function(){return Fn.Memories}});var Dn=st();Object.defineProperty(y,"Search",{enumerable:!0,get:function(){return Dn.Search}});var Un=ft();Object.defineProperty(y,"Settings",{enumerable:!0,get:function(){return Un.Settings}})});var at=v(R=>{"use strict";Object.defineProperty(R,"__esModule",{value:!0});R.formatRequestDetails=R.parseLogLevel=void 0;R.loggerFor=It;var Yn=E(),He={off:0,error:200,warn:300,info:400,debug:500},Gn=(e,t,r)=>{if(e){if((0,Yn.hasOwn)(He,e))return e;It(r).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(He))}`)}};R.parseLogLevel=Gn;function A(){}function ye(e,t,r){return!t||He[e]>He[r]?A:t[e].bind(t)}var Sn={error:A,warn:A,info:A,debug:A},Jt=new WeakMap;function It(e){let t=e.logger,r=e.logLevel??"off";if(!t)return Sn;let n=Jt.get(t);if(n&&n[0]===r)return n[1];let s={error:ye("error",t,r),warn:ye("warn",t,r),info:ye("info",t,r),debug:ye("debug",t,r)};return Jt.set(t,[r,s]),s}var Kn=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map(([t,r])=>[t,t.toLowerCase()==="authorization"||t.toLowerCase()==="cookie"||t.toLowerCase()==="set-cookie"?"***":r]))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);R.formatRequestDetails=Kn});var Bt=v(ct=>{"use strict";Object.defineProperty(ct,"__esModule",{value:!0});ct.defaultParseResponse=kn;var Ct=at();async function kn(e,t){let{response:r,requestLogID:n,retryOfRequestLogID:s,startTime:o}=t,f=await(async()=>{if(r.status===204)return null;if(t.options.__binaryResponse)return r;let m=r.headers.get("content-type")?.split(";")[0]?.trim();return m?.includes("application/json")||m?.endsWith("+json")?await r.json():await r.text()})();return(0,Ct.loggerFor)(e).debug(`[${n}] response parsed`,(0,Ct.formatRequestDetails)({retryOfRequestLogID:s,url:r.url,status:r.status,body:f,durationMs:Date.now()-o})),f}});var vt=v(qe=>{"use strict";var Q;Object.defineProperty(qe,"__esModule",{value:!0});qe.APIPromise=void 0;var it=we(),En=Bt(),ut=class e extends Promise{constructor(t,r,n=En.defaultParseResponse){super(s=>{s(null)}),this.responsePromise=r,this.parseResponse=n,Q.set(this,void 0),it.__classPrivateFieldSet(this,Q,t,"f")}_thenUnwrap(t){return new e(it.__classPrivateFieldGet(this,Q,"f"),this.responsePromise,async(r,n)=>t(await this.parseResponse(r,n),n))}asResponse(){return this.responsePromise.then(t=>t.response)}async withResponse(){let[t,r]=await Promise.all([this.parse(),this.asResponse()]);return{data:t,response:r}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then(t=>this.parseResponse(it.__classPrivateFieldGet(this,Q,"f"),t))),this.parsedPromise}then(t,r){return this.parse().then(t,r)}catch(t){return this.parse().catch(t)}finally(t){return this.parse().finally(t)}};qe.APIPromise=ut;Q=new WeakMap});var At=v(he=>{"use strict";Object.defineProperty(he,"__esModule",{value:!0});he.readEnv=void 0;var Jn=e=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[e]?.trim()??void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.(e)?.trim()};he.readEnv=Jn});var jt=v(Te=>{"use strict";var bt,mt,We,Qt;Object.defineProperty(Te,"__esModule",{value:!0});Te.Supermemory=void 0;var N=we(),In=Vt(),dt=E(),Cn=Nt(),lt=ge(),Bn=Mt(),Pt=N.__importStar(Ye()),An=N.__importStar(gt()),Qn=Ue(),z=N.__importStar(K()),_n=N.__importStar(Je()),_=N.__importStar(Et()),$n=vt(),es=Ae(),ts=$e(),rs=rt(),ns=st(),ss=ft(),zt=B(),pt=At(),b=at(),os=E(),l=class{constructor({baseURL:t=(0,pt.readEnv)("SUPERMEMORY_BASE_URL"),apiKey:r=(0,pt.readEnv)("SUPERMEMORY_API_KEY"),...n}={}){if(bt.add(this),We.set(this,void 0),this.memories=new _.Memories(this),this.documents=new _.Documents(this),this.search=new _.Search(this),this.settings=new _.Settings(this),this.connections=new _.Connections(this),r===void 0)throw new z.SupermemoryError("The SUPERMEMORY_API_KEY environment variable is missing or empty; either provide it, or instantiate the Supermemory client with an apiKey option, like new Supermemory({ apiKey: 'My API Key' }).");let s={apiKey:r,...n,baseURL:t||"https://api.supermemory.ai"};this.baseURL=s.baseURL,this.timeout=s.timeout??mt.DEFAULT_TIMEOUT,this.logger=s.logger??console;let o="warn";this.logLevel=o,this.logLevel=(0,b.parseLogLevel)(s.logLevel,"ClientOptions.logLevel",this)??(0,b.parseLogLevel)((0,pt.readEnv)("SUPERMEMORY_LOG"),"process.env['SUPERMEMORY_LOG']",this)??o,this.fetchOptions=s.fetchOptions,this.maxRetries=s.maxRetries??2,this.fetch=s.fetch??Pt.getDefaultFetch(),N.__classPrivateFieldSet(this,We,An.FallbackEncoder,"f"),this._options=s,this.apiKey=r}withOptions(t){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,...t})}add(t,r){return this.post("/v3/documents",{body:t,...r})}profile(t,r){return this.post("/v4/profile",{body:t,...r})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:t,nulls:r}){}async authHeaders(t){return(0,zt.buildHeaders)([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(t){return Object.entries(t).filter(([r,n])=>typeof n<"u").map(([r,n])=>{if(typeof n=="string"||typeof n=="number"||typeof n=="boolean")return`${encodeURIComponent(r)}=${encodeURIComponent(n)}`;if(n===null)return`${encodeURIComponent(r)}=`;throw new z.SupermemoryError(`Cannot stringify type ${typeof n}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join("&")}getUserAgent(){return`${this.constructor.name}/JS ${Qn.VERSION}`}defaultIdempotencyKey(){return`stainless-node-retry-${(0,In.uuid4)()}`}makeStatusError(t,r,n,s){return z.APIError.generate(t,r,n,s)}buildURL(t,r,n){let s=!N.__classPrivateFieldGet(this,bt,"m",Qt).call(this)&&n||this.baseURL,o=(0,dt.isAbsoluteURL)(t)?new URL(t):new URL(s+(s.endsWith("/")&&t.startsWith("/")?t.slice(1):t)),f=this.defaultQuery();return(0,os.isEmptyObj)(f)||(r={...f,...r}),typeof r=="object"&&r&&!Array.isArray(r)&&(o.search=this.stringifyQuery(r)),o.toString()}async prepareOptions(t){}async prepareRequest(t,{url:r,options:n}){}get(t,r){return this.methodRequest("get",t,r)}post(t,r){return this.methodRequest("post",t,r)}patch(t,r){return this.methodRequest("patch",t,r)}put(t,r){return this.methodRequest("put",t,r)}delete(t,r){return this.methodRequest("delete",t,r)}methodRequest(t,r,n){return this.request(Promise.resolve(n).then(s=>({method:t,path:r,...s})))}request(t,r=null){return new $n.APIPromise(this,this.makeRequest(t,r,void 0))}async makeRequest(t,r,n){let s=await t,o=s.maxRetries??this.maxRetries;r==null&&(r=o),await this.prepareOptions(s);let{req:f,url:i,timeout:m}=await this.buildRequest(s,{retryCount:o-r});await this.prepareRequest(f,{url:i,options:s});let P="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),x=n===void 0?"":`, retryOf: ${n}`,j=Date.now();if((0,b.loggerFor)(this).debug(`[${P}] sending request`,(0,b.formatRequestDetails)({retryOfRequestLogID:n,method:s.method,url:i,options:s,headers:f.headers})),s.signal?.aborted)throw new z.APIUserAbortError;let H=new AbortController,a=await this.fetchWithTimeout(i,f,m,H).catch(lt.castToError),q=Date.now();if(a instanceof globalThis.Error){let U=`retrying, ${r} attempts remaining`;if(s.signal?.aborted)throw new z.APIUserAbortError;let T=(0,lt.isAbortError)(a)||/timed? ?out/i.test(String(a)+("cause"in a?String(a.cause):""));if(r)return(0,b.loggerFor)(this).info(`[${P}] connection ${T?"timed out":"failed"} - ${U}`),(0,b.loggerFor)(this).debug(`[${P}] connection ${T?"timed out":"failed"} (${U})`,(0,b.formatRequestDetails)({retryOfRequestLogID:n,url:i,durationMs:q-j,message:a.message})),this.retryRequest(s,r,n??P);throw(0,b.loggerFor)(this).info(`[${P}] connection ${T?"timed out":"failed"} - error; no more retries left`),(0,b.loggerFor)(this).debug(`[${P}] connection ${T?"timed out":"failed"} (error; no more retries left)`,(0,b.formatRequestDetails)({retryOfRequestLogID:n,url:i,durationMs:q-j,message:a.message})),T?new z.APIConnectionTimeoutError:new z.APIConnectionError({cause:a})}let D=`[${P}${x}] ${f.method} ${i} ${a.ok?"succeeded":"failed"} with status ${a.status} in ${q-j}ms`;if(!a.ok){let U=await this.shouldRetry(a);if(r&&U){let te=`retrying, ${r} attempts remaining`;return await Pt.CancelReadableStream(a.body),(0,b.loggerFor)(this).info(`${D} - ${te}`),(0,b.loggerFor)(this).debug(`[${P}] response error (${te})`,(0,b.formatRequestDetails)({retryOfRequestLogID:n,url:a.url,status:a.status,headers:a.headers,durationMs:q-j})),this.retryRequest(s,r,n??P,a.headers)}let T=U?"error; no more retries left":"error; not retryable";(0,b.loggerFor)(this).info(`${D} - ${T}`);let qt=await a.text().catch(te=>(0,lt.castToError)(te).message),ht=(0,dt.safeJSON)(qt),Wt=ht?void 0:qt;throw(0,b.loggerFor)(this).debug(`[${P}] response error (${T})`,(0,b.formatRequestDetails)({retryOfRequestLogID:n,url:a.url,status:a.status,headers:a.headers,message:Wt,durationMs:Date.now()-j})),this.makeStatusError(a.status,ht,Wt,a.headers)}return(0,b.loggerFor)(this).info(D),(0,b.loggerFor)(this).debug(`[${P}] response start`,(0,b.formatRequestDetails)({retryOfRequestLogID:n,url:a.url,status:a.status,headers:a.headers,durationMs:q-j})),{response:a,options:s,controller:H,requestLogID:P,retryOfRequestLogID:n,startTime:j}}async fetchWithTimeout(t,r,n,s){let{signal:o,method:f,...i}=r||{};o&&o.addEventListener("abort",()=>s.abort());let m=setTimeout(()=>s.abort(),n),P=globalThis.ReadableStream&&i.body instanceof globalThis.ReadableStream||typeof i.body=="object"&&i.body!==null&&Symbol.asyncIterator in i.body,x={signal:s.signal,...P?{duplex:"half"}:{},method:"GET",...i};f&&(x.method=f.toUpperCase());try{return await this.fetch.call(void 0,t,x)}finally{clearTimeout(m)}}async shouldRetry(t){let r=t.headers.get("x-should-retry");return r==="true"?!0:r==="false"?!1:t.status===408||t.status===409||t.status===429||t.status>=500}async retryRequest(t,r,n,s){let o,f=s?.get("retry-after-ms");if(f){let m=parseFloat(f);Number.isNaN(m)||(o=m)}let i=s?.get("retry-after");if(i&&!o){let m=parseFloat(i);Number.isNaN(m)?o=Date.parse(i)-Date.now():o=m*1e3}if(!(o&&0<=o&&o<60*1e3)){let m=t.maxRetries??this.maxRetries;o=this.calculateDefaultRetryTimeoutMillis(r,m)}return await(0,Cn.sleep)(o),this.makeRequest(t,r-1,n)}calculateDefaultRetryTimeoutMillis(t,r){let o=r-t,f=Math.min(.5*Math.pow(2,o),8),i=1-Math.random()*.25;return f*i*1e3}async buildRequest(t,{retryCount:r=0}={}){let n={...t},{method:s,path:o,query:f,defaultBaseURL:i}=n,m=this.buildURL(o,f,i);"timeout"in n&&(0,dt.validatePositiveInteger)("timeout",n.timeout),n.timeout=n.timeout??this.timeout;let{bodyHeaders:P,body:x}=this.buildBody({options:n}),j=await this.buildHeaders({options:t,method:s,bodyHeaders:P,retryCount:r});return{req:{method:s,headers:j,...n.signal&&{signal:n.signal},...globalThis.ReadableStream&&x instanceof globalThis.ReadableStream&&{duplex:"half"},...x&&{body:x},...this.fetchOptions??{},...n.fetchOptions??{}},url:m,timeout:n.timeout}}async buildHeaders({options:t,method:r,bodyHeaders:n,retryCount:s}){let o={};this.idempotencyHeader&&r!=="get"&&(t.idempotencyKey||(t.idempotencyKey=this.defaultIdempotencyKey()),o[this.idempotencyHeader]=t.idempotencyKey);let f=(0,zt.buildHeaders)([o,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(s),...t.timeout?{"X-Stainless-Timeout":String(Math.trunc(t.timeout/1e3))}:{},...(0,Bn.getPlatformHeaders)()},await this.authHeaders(t),this._options.defaultHeaders,n,t.headers]);return this.validateHeaders(f),f.values}buildBody({options:{body:t,headers:r}}){if(!t)return{bodyHeaders:void 0,body:void 0};let n=(0,zt.buildHeaders)([r]);return ArrayBuffer.isView(t)||t instanceof ArrayBuffer||t instanceof DataView||typeof t=="string"&&n.values.has("content-type")||globalThis.Blob&&t instanceof globalThis.Blob||t instanceof FormData||t instanceof URLSearchParams||globalThis.ReadableStream&&t instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:t}:typeof t=="object"&&(Symbol.asyncIterator in t||Symbol.iterator in t&&"next"in t&&typeof t.next=="function")?{bodyHeaders:void 0,body:Pt.ReadableStreamFrom(t)}:N.__classPrivateFieldGet(this,We,"f").call(this,{body:t,headers:n})}};Te.Supermemory=l;mt=l,We=new WeakMap,bt=new WeakSet,Qt=function(){return this.baseURL!=="https://api.supermemory.ai"};l.Supermemory=mt;l.DEFAULT_TIMEOUT=6e4;l.SupermemoryError=z.SupermemoryError;l.APIError=z.APIError;l.APIConnectionError=z.APIConnectionError;l.APIConnectionTimeoutError=z.APIConnectionTimeoutError;l.APIUserAbortError=z.APIUserAbortError;l.NotFoundError=z.NotFoundError;l.ConflictError=z.ConflictError;l.RateLimitError=z.RateLimitError;l.BadRequestError=z.BadRequestError;l.AuthenticationError=z.AuthenticationError;l.InternalServerError=z.InternalServerError;l.PermissionDeniedError=z.PermissionDeniedError;l.UnprocessableEntityError=z.UnprocessableEntityError;l.toFile=_n.toFile;l.Memories=rs.Memories;l.Documents=ts.Documents;l.Search=ns.Search;l.Settings=ss.Settings;l.Connections=es.Connections});var $t=v((c,_t)=>{"use strict";c=_t.exports=function(...e){return new c.default(...e)};Object.defineProperty(c,"__esModule",{value:!0});c.UnprocessableEntityError=c.PermissionDeniedError=c.InternalServerError=c.AuthenticationError=c.BadRequestError=c.RateLimitError=c.ConflictError=c.NotFoundError=c.APIUserAbortError=c.APIConnectionTimeoutError=c.APIConnectionError=c.APIError=c.SupermemoryError=c.Supermemory=c.APIPromise=c.toFile=c.default=void 0;var fs=jt();Object.defineProperty(c,"default",{enumerable:!0,get:function(){return fs.Supermemory}});var as=Je();Object.defineProperty(c,"toFile",{enumerable:!0,get:function(){return as.toFile}});var cs=vt();Object.defineProperty(c,"APIPromise",{enumerable:!0,get:function(){return cs.APIPromise}});var is=jt();Object.defineProperty(c,"Supermemory",{enumerable:!0,get:function(){return is.Supermemory}});var O=K();Object.defineProperty(c,"SupermemoryError",{enumerable:!0,get:function(){return O.SupermemoryError}});Object.defineProperty(c,"APIError",{enumerable:!0,get:function(){return O.APIError}});Object.defineProperty(c,"APIConnectionError",{enumerable:!0,get:function(){return O.APIConnectionError}});Object.defineProperty(c,"APIConnectionTimeoutError",{enumerable:!0,get:function(){return O.APIConnectionTimeoutError}});Object.defineProperty(c,"APIUserAbortError",{enumerable:!0,get:function(){return O.APIUserAbortError}});Object.defineProperty(c,"NotFoundError",{enumerable:!0,get:function(){return O.NotFoundError}});Object.defineProperty(c,"ConflictError",{enumerable:!0,get:function(){return O.ConflictError}});Object.defineProperty(c,"RateLimitError",{enumerable:!0,get:function(){return O.RateLimitError}});Object.defineProperty(c,"BadRequestError",{enumerable:!0,get:function(){return O.BadRequestError}});Object.defineProperty(c,"AuthenticationError",{enumerable:!0,get:function(){return O.AuthenticationError}});Object.defineProperty(c,"InternalServerError",{enumerable:!0,get:function(){return O.InternalServerError}});Object.defineProperty(c,"PermissionDeniedError",{enumerable:!0,get:function(){return O.PermissionDeniedError}});Object.defineProperty(c,"UnprocessableEntityError",{enumerable:!0,get:function(){return O.UnprocessableEntityError}})});var tr={};Or(tr,{getRequestIntegrity:()=>Os,sanitizeContent:()=>ls,sanitizeMetadata:()=>ms,validateApiKeyFormat:()=>us,validateContainerTag:()=>vs,validateContentLength:()=>Ps,validateRecallConfig:()=>js});function us(e){return!e||typeof e!="string"?{valid:!1,reason:"key is empty or not a string"}:e.startsWith("sm_")?e.length<20?{valid:!1,reason:"key is too short"}:/\s/.test(e)?{valid:!1,reason:"key contains whitespace"}:{valid:!0}:{valid:!1,reason:"key must start with sm_ prefix"}}function vs(e){return!e||typeof e!="string"?{valid:!1,reason:"tag is empty"}:e.length>100?{valid:!1,reason:"tag exceeds 100 characters"}:/^[a-zA-Z0-9_-]+$/.test(e)?/^[-_]|[-_]$/.test(e)?{valid:!1,reason:"tag must not start or end with - or _"}:{valid:!0}:{valid:!1,reason:"tag contains invalid characters (only alphanumeric, underscore, hyphen allowed)"}}function ls(e,t=1e5){if(!e||typeof e!="string")return"";let r=e;for(let n of ds)r=r.replace(n,"");return r.length>t&&(r=r.slice(0,t)),r}function Ps(e,t=1,r=1e5){return e.lengthr?{valid:!1,reason:`content exceeds maximum length (${r})`}:{valid:!0}}function ms(e){let t={},r=0;for(let[n,s]of Object.entries(e)){if(r>=zs)break;n.length>ps||/[^\w.-]/.test(n)||(typeof s=="string"?(t[n]=s.slice(0,bs),r++):(typeof s=="number"&&Number.isFinite(s)||typeof s=="boolean")&&(t[n]=s,r++))}return t}function js(e,t){let r=[];return(!Number.isInteger(e)||e<1||e>20)&&r.push("maxRecallResults must be an integer between 1 and 20"),(!Number.isInteger(t)||t<1||t>500)&&r.push("profileFrequency must be an integer between 1 and 500"),r}function xt(e){return(0,Ve.createHash)("sha256").update(e).digest("hex")}function Xs(e,t){let r=[xt(e),xt(t),er].join(":");return(0,Ve.createHmac)("sha256",xs).update(r).digest("base64url")}function Os(e,t){let r=xt(t),n=Xs(e,t);return{"X-Content-Hash":r,"X-Request-Integrity":[`v${er}`,n].join(".")}}var Ve,ds,zs,ps,bs,er,xs,rr=Xr(()=>{Ve=require("node:crypto");ds=[/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g,/\uFEFF/g,/[\uFFF0-\uFFFF]/g];zs=50,ps=128,bs=1024;er=1,xs="7f2a9c4b8e1d6f3a5c0b9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a"});var sr=v((Fo,nr)=>{var ys=$t().default,{getRequestIntegrity:Hs,validateApiKeyFormat:qs,validateContainerTag:hs}=(rr(),Hr(tr)),Ws="claudecode_default",Ts=process.env.SUPERMEMORY_API_URL||"https://api.supermemory.ai",Xt=class{constructor(t,r){if(!t)throw new Error("SUPERMEMORY_CC_API_KEY is required");let n=qs(t);if(!n.valid)throw new Error(`Invalid API key: ${n.reason}`);let s=r||Ws,o=hs(s);o.valid||console.warn(`Container tag warning: ${o.reason}`);let f=Hs(t,s);this.client=new ys({apiKey:t,baseURL:Ts,defaultHeaders:f}),this.containerTag=s}async addMemory(t,r,n={},s=null){let o={content:t,containerTag:r||this.containerTag,metadata:{sm_source:"claude-code-plugin",...n}};s&&(o.customId=s);let f=await this.client.add(o);return{id:f.id,status:f.status,containerTag:r||this.containerTag}}async search(t,r,n={}){let s=await this.client.search.memories({q:t,containerTag:r||this.containerTag,limit:n.limit||10,searchMode:n.searchMode||"hybrid"});return{results:s.results.map(o=>({id:o.id,memory:o.content||o.memory||o.context||"",similarity:o.similarity,title:o.title,content:o.content})),total:s.total,timing:s.timing}}async getProfile(t,r){let n=await this.client.profile({containerTag:t||this.containerTag,q:r});return{profile:{static:n.profile?.static||[],dynamic:n.profile?.dynamic||[]},searchResults:n.searchResults?{results:n.searchResults.results.map(s=>({id:s.id,memory:s.content||s.context||"",similarity:s.similarity,title:s.title})),total:n.searchResults.total,timing:n.searchResults.timing}:void 0}}async listMemories(t,r=20){let n=await this.client.memories.list({containerTags:t||this.containerTag,limit:r,order:"desc",sort:"createdAt"});return{memories:n.memories||n.results||[]}}async deleteMemory(t){return this.client.memories.delete(t)}};nr.exports={SupermemoryClient:Xt}});var ar=v((Do,fr)=>{var{execSync:or}=require("node:child_process"),Vs=require("node:crypto");function Ne(e){return Vs.createHash("sha256").update(e).digest("hex").slice(0,16)}function Ot(e){try{return or("git rev-parse --show-toplevel",{cwd:e,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||null}catch{return null}}function Ns(e){let r=Ot(e)||e;return`claudecode_project_${Ne(r)}`}function Ls(e){return(Ot(e)||e).split("/").pop()||"unknown"}function Rs(){try{let t=or("git config user.email",{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();if(t)return`claudecode_user_${Ne(t)}`}catch{}let e=process.env.USER||process.env.USERNAME||"anonymous";return`claudecode_user_${Ne(e)}`}fr.exports={sha256:Ne,getGitRoot:Ot,getContainerTag:Ns,getProjectName:Ls,getUserContainerTag:Rs}});var cr=v((Uo,Zs)=>{Zs.exports=` +${j}`)}return f};N.createPathTagFunction=gn;N.path=(0,N.createPathTagFunction)(Qe)});var $e=v(xe=>{"use strict";Object.defineProperty(xe,"__esModule",{value:!0});xe.Connections=void 0;var Fn=w(),Dn=B(),W=je(),_e=class extends Fn.APIResource{create(t,r={},n){return this._client.post((0,W.path)`/v3/connections/${t}`,{body:r,...n})}list(t={},r){return this._client.post("/v3/connections/list",{body:t,...r})}configure(t,r,n){return this._client.post((0,W.path)`/v3/connections/${t}/configure`,{body:r,...n})}deleteByID(t,r){return this._client.delete((0,W.path)`/v3/connections/${t}`,r)}deleteByProvider(t,r,n){return this._client.delete((0,W.path)`/v3/connections/${t}`,{body:r,...n})}getByID(t,r){return this._client.get((0,W.path)`/v3/connections/${t}`,r)}getByTag(t,r,n){return this._client.post((0,W.path)`/v3/connections/${t}/connection`,{body:r,...n})}import(t,r={},n){return this._client.post((0,W.path)`/v3/connections/${t}/import`,{body:r,...n,headers:(0,Dn.buildHeaders)([{Accept:"text/plain"},n?.headers])})}listDocuments(t,r={},n){return this._client.post((0,W.path)`/v3/connections/${t}/documents`,{body:r,...n})}resources(t,r={},n){return this._client.get((0,W.path)`/v3/connections/${t}/resources`,{query:r,...n})}};xe.Connections=_e});var rt=v(Xe=>{"use strict";Object.defineProperty(Xe,"__esModule",{value:!0});Xe.Documents=void 0;var Un=w(),Yn=B(),Sn=C(),et=je(),tt=class extends Un.APIResource{update(t,r={},n){return this._client.patch((0,et.path)`/v3/documents/${t}`,{body:r,...n})}list(t={},r){return this._client.post("/v3/documents/list",{body:t,...r})}delete(t,r){return this._client.delete((0,et.path)`/v3/documents/${t}`,{...r,headers:(0,Yn.buildHeaders)([{Accept:"*/*"},r?.headers])})}add(t,r){return this._client.post("/v3/documents",{body:t,...r})}batchAdd(t,r){return this._client.post("/v3/documents/batch",{body:t,...r})}deleteBulk(t={},r){return this._client.delete("/v3/documents/bulk",{body:t,...r})}get(t,r){return this._client.get((0,et.path)`/v3/documents/${t}`,r)}listProcessing(t){return this._client.get("/v3/documents/processing",t)}uploadFile(t,r){return this._client.post("/v3/documents/file",(0,Sn.multipartFormRequestOptions)({body:t,...r},this._client))}};Xe.Documents=tt});var ot=v(Oe=>{"use strict";Object.defineProperty(Oe,"__esModule",{value:!0});Oe.Memories=void 0;var Gn=w(),Kn=B(),kn=C(),nt=je(),st=class extends Gn.APIResource{update(t,r={},n){return this._client.patch((0,nt.path)`/v3/documents/${t}`,{body:r,...n})}list(t={},r){return this._client.post("/v3/documents/list",{body:t,...r})}delete(t,r){return this._client.delete((0,nt.path)`/v3/documents/${t}`,{...r,headers:(0,Kn.buildHeaders)([{Accept:"*/*"},r?.headers])})}add(t,r){return this._client.post("/v3/documents",{body:t,...r})}forget(t,r){return this._client.delete("/v4/memories",{body:t,...r})}get(t,r){return this._client.get((0,nt.path)`/v3/documents/${t}`,r)}updateMemory(t,r){return this._client.patch("/v4/memories",{body:t,...r})}uploadFile(t,r){return this._client.post("/v3/documents/file",(0,kn.multipartFormRequestOptions)({body:t,...r},this._client))}};Oe.Memories=st});var at=v(ye=>{"use strict";Object.defineProperty(ye,"__esModule",{value:!0});ye.Search=void 0;var En=w(),ft=class extends En.APIResource{documents(t,r){return this._client.post("/v3/search",{body:t,...r})}execute(t,r){return this._client.post("/v3/search",{body:t,...r})}memories(t,r){return this._client.post("/v4/search",{body:t,...r})}};ye.Search=ft});var it=v(He=>{"use strict";Object.defineProperty(He,"__esModule",{value:!0});He.Settings=void 0;var In=w(),ct=class extends In.APIResource{update(t={},r){return this._client.patch("/v3/settings",{body:t,...r})}get(t){return this._client.get("/v3/settings",t)}};He.Settings=ct});var Jt=v(y=>{"use strict";Object.defineProperty(y,"__esModule",{value:!0});y.Settings=y.Search=y.Memories=y.Documents=y.Connections=void 0;var Cn=$e();Object.defineProperty(y,"Connections",{enumerable:!0,get:function(){return Cn.Connections}});var Jn=rt();Object.defineProperty(y,"Documents",{enumerable:!0,get:function(){return Jn.Documents}});var Bn=ot();Object.defineProperty(y,"Memories",{enumerable:!0,get:function(){return Bn.Memories}});var An=at();Object.defineProperty(y,"Search",{enumerable:!0,get:function(){return An.Search}});var Qn=it();Object.defineProperty(y,"Settings",{enumerable:!0,get:function(){return Qn.Settings}})});var ut=v(R=>{"use strict";Object.defineProperty(R,"__esModule",{value:!0});R.formatRequestDetails=R.parseLogLevel=void 0;R.loggerFor=At;var _n=E(),he={off:0,error:200,warn:300,info:400,debug:500},$n=(e,t,r)=>{if(e){if((0,_n.hasOwn)(he,e))return e;At(r).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(he))}`)}};R.parseLogLevel=$n;function A(){}function qe(e,t,r){return!t||he[e]>he[r]?A:t[e].bind(t)}var es={error:A,warn:A,info:A,debug:A},Bt=new WeakMap;function At(e){let t=e.logger,r=e.logLevel??"off";if(!t)return es;let n=Bt.get(t);if(n&&n[0]===r)return n[1];let s={error:qe("error",t,r),warn:qe("warn",t,r),info:qe("info",t,r),debug:qe("debug",t,r)};return Bt.set(t,[r,s]),s}var ts=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map(([t,r])=>[t,t.toLowerCase()==="authorization"||t.toLowerCase()==="cookie"||t.toLowerCase()==="set-cookie"?"***":r]))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);R.formatRequestDetails=ts});var _t=v(vt=>{"use strict";Object.defineProperty(vt,"__esModule",{value:!0});vt.defaultParseResponse=rs;var Qt=ut();async function rs(e,t){let{response:r,requestLogID:n,retryOfRequestLogID:s,startTime:o}=t,f=await(async()=>{if(r.status===204)return null;if(t.options.__binaryResponse)return r;let b=r.headers.get("content-type")?.split(";")[0]?.trim();return b?.includes("application/json")||b?.endsWith("+json")?await r.json():await r.text()})();return(0,Qt.loggerFor)(e).debug(`[${n}] response parsed`,(0,Qt.formatRequestDetails)({retryOfRequestLogID:s,url:r.url,status:r.status,body:f,durationMs:Date.now()-o})),f}});var Pt=v(We=>{"use strict";var Q;Object.defineProperty(We,"__esModule",{value:!0});We.APIPromise=void 0;var dt=De(),ns=_t(),lt=class e extends Promise{constructor(t,r,n=ns.defaultParseResponse){super(s=>{s(null)}),this.responsePromise=r,this.parseResponse=n,Q.set(this,void 0),dt.__classPrivateFieldSet(this,Q,t,"f")}_thenUnwrap(t){return new e(dt.__classPrivateFieldGet(this,Q,"f"),this.responsePromise,async(r,n)=>t(await this.parseResponse(r,n),n))}asResponse(){return this.responsePromise.then(t=>t.response)}async withResponse(){let[t,r]=await Promise.all([this.parse(),this.asResponse()]);return{data:t,response:r}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then(t=>this.parseResponse(dt.__classPrivateFieldGet(this,Q,"f"),t))),this.parsedPromise}then(t,r){return this.parse().then(t,r)}catch(t){return this.parse().catch(t)}finally(t){return this.parse().finally(t)}};We.APIPromise=lt;Q=new WeakMap});var $t=v(Te=>{"use strict";Object.defineProperty(Te,"__esModule",{value:!0});Te.readEnv=void 0;var ss=e=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[e]?.trim()??void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.(e)?.trim()};Te.readEnv=ss});var Ot=v(Ve=>{"use strict";var xt,Xt,Ne,er;Object.defineProperty(Ve,"__esModule",{value:!0});Ve.Supermemory=void 0;var V=De(),os=Rt(),pt=E(),fs=Zt(),zt=Ue(),as=Ft(),mt=V.__importStar(Ke()),cs=V.__importStar(Ut()),is=Ge(),p=V.__importStar(K()),us=V.__importStar(Be()),_=V.__importStar(Jt()),vs=Pt(),ds=$e(),ls=rt(),Ps=ot(),ps=at(),zs=it(),bt=B(),jt=$t(),m=ut(),ms=E(),l=class{constructor({baseURL:t=(0,jt.readEnv)("SUPERMEMORY_BASE_URL"),apiKey:r=(0,jt.readEnv)("SUPERMEMORY_API_KEY"),...n}={}){if(xt.add(this),Ne.set(this,void 0),this.memories=new _.Memories(this),this.documents=new _.Documents(this),this.search=new _.Search(this),this.settings=new _.Settings(this),this.connections=new _.Connections(this),r===void 0)throw new p.SupermemoryError("The SUPERMEMORY_API_KEY environment variable is missing or empty; either provide it, or instantiate the Supermemory client with an apiKey option, like new Supermemory({ apiKey: 'My API Key' }).");let s={apiKey:r,...n,baseURL:t||"https://api.supermemory.ai"};this.baseURL=s.baseURL,this.timeout=s.timeout??Xt.DEFAULT_TIMEOUT,this.logger=s.logger??console;let o="warn";this.logLevel=o,this.logLevel=(0,m.parseLogLevel)(s.logLevel,"ClientOptions.logLevel",this)??(0,m.parseLogLevel)((0,jt.readEnv)("SUPERMEMORY_LOG"),"process.env['SUPERMEMORY_LOG']",this)??o,this.fetchOptions=s.fetchOptions,this.maxRetries=s.maxRetries??2,this.fetch=s.fetch??mt.getDefaultFetch(),V.__classPrivateFieldSet(this,Ne,cs.FallbackEncoder,"f"),this._options=s,this.apiKey=r}withOptions(t){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,...t})}add(t,r){return this.post("/v3/documents",{body:t,...r})}profile(t,r){return this.post("/v4/profile",{body:t,...r})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:t,nulls:r}){}async authHeaders(t){return(0,bt.buildHeaders)([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(t){return Object.entries(t).filter(([r,n])=>typeof n<"u").map(([r,n])=>{if(typeof n=="string"||typeof n=="number"||typeof n=="boolean")return`${encodeURIComponent(r)}=${encodeURIComponent(n)}`;if(n===null)return`${encodeURIComponent(r)}=`;throw new p.SupermemoryError(`Cannot stringify type ${typeof n}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join("&")}getUserAgent(){return`${this.constructor.name}/JS ${is.VERSION}`}defaultIdempotencyKey(){return`stainless-node-retry-${(0,os.uuid4)()}`}makeStatusError(t,r,n,s){return p.APIError.generate(t,r,n,s)}buildURL(t,r,n){let s=!V.__classPrivateFieldGet(this,xt,"m",er).call(this)&&n||this.baseURL,o=(0,pt.isAbsoluteURL)(t)?new URL(t):new URL(s+(s.endsWith("/")&&t.startsWith("/")?t.slice(1):t)),f=this.defaultQuery();return(0,ms.isEmptyObj)(f)||(r={...f,...r}),typeof r=="object"&&r&&!Array.isArray(r)&&(o.search=this.stringifyQuery(r)),o.toString()}async prepareOptions(t){}async prepareRequest(t,{url:r,options:n}){}get(t,r){return this.methodRequest("get",t,r)}post(t,r){return this.methodRequest("post",t,r)}patch(t,r){return this.methodRequest("patch",t,r)}put(t,r){return this.methodRequest("put",t,r)}delete(t,r){return this.methodRequest("delete",t,r)}methodRequest(t,r,n){return this.request(Promise.resolve(n).then(s=>({method:t,path:r,...s})))}request(t,r=null){return new vs.APIPromise(this,this.makeRequest(t,r,void 0))}async makeRequest(t,r,n){let s=await t,o=s.maxRetries??this.maxRetries;r==null&&(r=o),await this.prepareOptions(s);let{req:f,url:c,timeout:b}=await this.buildRequest(s,{retryCount:o-r});await this.prepareRequest(f,{url:c,options:s});let P="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),x=n===void 0?"":`, retryOf: ${n}`,j=Date.now();if((0,m.loggerFor)(this).debug(`[${P}] sending request`,(0,m.formatRequestDetails)({retryOfRequestLogID:n,method:s.method,url:c,options:s,headers:f.headers})),s.signal?.aborted)throw new p.APIUserAbortError;let H=new AbortController,a=await this.fetchWithTimeout(c,f,b,H).catch(zt.castToError),q=Date.now();if(a instanceof globalThis.Error){let U=`retrying, ${r} attempts remaining`;if(s.signal?.aborted)throw new p.APIUserAbortError;let T=(0,zt.isAbortError)(a)||/timed? ?out/i.test(String(a)+("cause"in a?String(a.cause):""));if(r)return(0,m.loggerFor)(this).info(`[${P}] connection ${T?"timed out":"failed"} - ${U}`),(0,m.loggerFor)(this).debug(`[${P}] connection ${T?"timed out":"failed"} (${U})`,(0,m.formatRequestDetails)({retryOfRequestLogID:n,url:c,durationMs:q-j,message:a.message})),this.retryRequest(s,r,n??P);throw(0,m.loggerFor)(this).info(`[${P}] connection ${T?"timed out":"failed"} - error; no more retries left`),(0,m.loggerFor)(this).debug(`[${P}] connection ${T?"timed out":"failed"} (error; no more retries left)`,(0,m.formatRequestDetails)({retryOfRequestLogID:n,url:c,durationMs:q-j,message:a.message})),T?new p.APIConnectionTimeoutError:new p.APIConnectionError({cause:a})}let D=`[${P}${x}] ${f.method} ${c} ${a.ok?"succeeded":"failed"} with status ${a.status} in ${q-j}ms`;if(!a.ok){let U=await this.shouldRetry(a);if(r&&U){let ne=`retrying, ${r} attempts remaining`;return await mt.CancelReadableStream(a.body),(0,m.loggerFor)(this).info(`${D} - ${ne}`),(0,m.loggerFor)(this).debug(`[${P}] response error (${ne})`,(0,m.formatRequestDetails)({retryOfRequestLogID:n,url:a.url,status:a.status,headers:a.headers,durationMs:q-j})),this.retryRequest(s,r,n??P,a.headers)}let T=U?"error; no more retries left":"error; not retryable";(0,m.loggerFor)(this).info(`${D} - ${T}`);let Tt=await a.text().catch(ne=>(0,zt.castToError)(ne).message),Nt=(0,pt.safeJSON)(Tt),Vt=Nt?void 0:Tt;throw(0,m.loggerFor)(this).debug(`[${P}] response error (${T})`,(0,m.formatRequestDetails)({retryOfRequestLogID:n,url:a.url,status:a.status,headers:a.headers,message:Vt,durationMs:Date.now()-j})),this.makeStatusError(a.status,Nt,Vt,a.headers)}return(0,m.loggerFor)(this).info(D),(0,m.loggerFor)(this).debug(`[${P}] response start`,(0,m.formatRequestDetails)({retryOfRequestLogID:n,url:a.url,status:a.status,headers:a.headers,durationMs:q-j})),{response:a,options:s,controller:H,requestLogID:P,retryOfRequestLogID:n,startTime:j}}async fetchWithTimeout(t,r,n,s){let{signal:o,method:f,...c}=r||{};o&&o.addEventListener("abort",()=>s.abort());let b=setTimeout(()=>s.abort(),n),P=globalThis.ReadableStream&&c.body instanceof globalThis.ReadableStream||typeof c.body=="object"&&c.body!==null&&Symbol.asyncIterator in c.body,x={signal:s.signal,...P?{duplex:"half"}:{},method:"GET",...c};f&&(x.method=f.toUpperCase());try{return await this.fetch.call(void 0,t,x)}finally{clearTimeout(b)}}async shouldRetry(t){let r=t.headers.get("x-should-retry");return r==="true"?!0:r==="false"?!1:t.status===408||t.status===409||t.status===429||t.status>=500}async retryRequest(t,r,n,s){let o,f=s?.get("retry-after-ms");if(f){let b=parseFloat(f);Number.isNaN(b)||(o=b)}let c=s?.get("retry-after");if(c&&!o){let b=parseFloat(c);Number.isNaN(b)?o=Date.parse(c)-Date.now():o=b*1e3}if(!(o&&0<=o&&o<60*1e3)){let b=t.maxRetries??this.maxRetries;o=this.calculateDefaultRetryTimeoutMillis(r,b)}return await(0,fs.sleep)(o),this.makeRequest(t,r-1,n)}calculateDefaultRetryTimeoutMillis(t,r){let o=r-t,f=Math.min(.5*Math.pow(2,o),8),c=1-Math.random()*.25;return f*c*1e3}async buildRequest(t,{retryCount:r=0}={}){let n={...t},{method:s,path:o,query:f,defaultBaseURL:c}=n,b=this.buildURL(o,f,c);"timeout"in n&&(0,pt.validatePositiveInteger)("timeout",n.timeout),n.timeout=n.timeout??this.timeout;let{bodyHeaders:P,body:x}=this.buildBody({options:n}),j=await this.buildHeaders({options:t,method:s,bodyHeaders:P,retryCount:r});return{req:{method:s,headers:j,...n.signal&&{signal:n.signal},...globalThis.ReadableStream&&x instanceof globalThis.ReadableStream&&{duplex:"half"},...x&&{body:x},...this.fetchOptions??{},...n.fetchOptions??{}},url:b,timeout:n.timeout}}async buildHeaders({options:t,method:r,bodyHeaders:n,retryCount:s}){let o={};this.idempotencyHeader&&r!=="get"&&(t.idempotencyKey||(t.idempotencyKey=this.defaultIdempotencyKey()),o[this.idempotencyHeader]=t.idempotencyKey);let f=(0,bt.buildHeaders)([o,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(s),...t.timeout?{"X-Stainless-Timeout":String(Math.trunc(t.timeout/1e3))}:{},...(0,as.getPlatformHeaders)()},await this.authHeaders(t),this._options.defaultHeaders,n,t.headers]);return this.validateHeaders(f),f.values}buildBody({options:{body:t,headers:r}}){if(!t)return{bodyHeaders:void 0,body:void 0};let n=(0,bt.buildHeaders)([r]);return ArrayBuffer.isView(t)||t instanceof ArrayBuffer||t instanceof DataView||typeof t=="string"&&n.values.has("content-type")||globalThis.Blob&&t instanceof globalThis.Blob||t instanceof FormData||t instanceof URLSearchParams||globalThis.ReadableStream&&t instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:t}:typeof t=="object"&&(Symbol.asyncIterator in t||Symbol.iterator in t&&"next"in t&&typeof t.next=="function")?{bodyHeaders:void 0,body:mt.ReadableStreamFrom(t)}:V.__classPrivateFieldGet(this,Ne,"f").call(this,{body:t,headers:n})}};Ve.Supermemory=l;Xt=l,Ne=new WeakMap,xt=new WeakSet,er=function(){return this.baseURL!=="https://api.supermemory.ai"};l.Supermemory=Xt;l.DEFAULT_TIMEOUT=6e4;l.SupermemoryError=p.SupermemoryError;l.APIError=p.APIError;l.APIConnectionError=p.APIConnectionError;l.APIConnectionTimeoutError=p.APIConnectionTimeoutError;l.APIUserAbortError=p.APIUserAbortError;l.NotFoundError=p.NotFoundError;l.ConflictError=p.ConflictError;l.RateLimitError=p.RateLimitError;l.BadRequestError=p.BadRequestError;l.AuthenticationError=p.AuthenticationError;l.InternalServerError=p.InternalServerError;l.PermissionDeniedError=p.PermissionDeniedError;l.UnprocessableEntityError=p.UnprocessableEntityError;l.toFile=us.toFile;l.Memories=Ps.Memories;l.Documents=ls.Documents;l.Search=ps.Search;l.Settings=zs.Settings;l.Connections=ds.Connections});var rr=v((i,tr)=>{"use strict";i=tr.exports=function(...e){return new i.default(...e)};Object.defineProperty(i,"__esModule",{value:!0});i.UnprocessableEntityError=i.PermissionDeniedError=i.InternalServerError=i.AuthenticationError=i.BadRequestError=i.RateLimitError=i.ConflictError=i.NotFoundError=i.APIUserAbortError=i.APIConnectionTimeoutError=i.APIConnectionError=i.APIError=i.SupermemoryError=i.Supermemory=i.APIPromise=i.toFile=i.default=void 0;var bs=Ot();Object.defineProperty(i,"default",{enumerable:!0,get:function(){return bs.Supermemory}});var js=Be();Object.defineProperty(i,"toFile",{enumerable:!0,get:function(){return js.toFile}});var xs=Pt();Object.defineProperty(i,"APIPromise",{enumerable:!0,get:function(){return xs.APIPromise}});var Xs=Ot();Object.defineProperty(i,"Supermemory",{enumerable:!0,get:function(){return Xs.Supermemory}});var O=K();Object.defineProperty(i,"SupermemoryError",{enumerable:!0,get:function(){return O.SupermemoryError}});Object.defineProperty(i,"APIError",{enumerable:!0,get:function(){return O.APIError}});Object.defineProperty(i,"APIConnectionError",{enumerable:!0,get:function(){return O.APIConnectionError}});Object.defineProperty(i,"APIConnectionTimeoutError",{enumerable:!0,get:function(){return O.APIConnectionTimeoutError}});Object.defineProperty(i,"APIUserAbortError",{enumerable:!0,get:function(){return O.APIUserAbortError}});Object.defineProperty(i,"NotFoundError",{enumerable:!0,get:function(){return O.NotFoundError}});Object.defineProperty(i,"ConflictError",{enumerable:!0,get:function(){return O.ConflictError}});Object.defineProperty(i,"RateLimitError",{enumerable:!0,get:function(){return O.RateLimitError}});Object.defineProperty(i,"BadRequestError",{enumerable:!0,get:function(){return O.BadRequestError}});Object.defineProperty(i,"AuthenticationError",{enumerable:!0,get:function(){return O.AuthenticationError}});Object.defineProperty(i,"InternalServerError",{enumerable:!0,get:function(){return O.InternalServerError}});Object.defineProperty(i,"PermissionDeniedError",{enumerable:!0,get:function(){return O.PermissionDeniedError}});Object.defineProperty(i,"UnprocessableEntityError",{enumerable:!0,get:function(){return O.UnprocessableEntityError}})});var sr={};Mr(sr,{getRequestIntegrity:()=>Ms,sanitizeContent:()=>qs,sanitizeMetadata:()=>Vs,validateApiKeyFormat:()=>Os,validateContainerTag:()=>ys,validateContentLength:()=>hs,validateRecallConfig:()=>Ls});function Os(e){return!e||typeof e!="string"?{valid:!1,reason:"key is empty or not a string"}:e.startsWith("sm_")?e.length<20?{valid:!1,reason:"key is too short"}:/\s/.test(e)?{valid:!1,reason:"key contains whitespace"}:{valid:!0}:{valid:!1,reason:"key must start with sm_ prefix"}}function ys(e){return!e||typeof e!="string"?{valid:!1,reason:"tag is empty"}:e.length>100?{valid:!1,reason:"tag exceeds 100 characters"}:/^[a-zA-Z0-9_-]+$/.test(e)?/^[-_]|[-_]$/.test(e)?{valid:!1,reason:"tag must not start or end with - or _"}:{valid:!0}:{valid:!1,reason:"tag contains invalid characters (only alphanumeric, underscore, hyphen allowed)"}}function qs(e,t=1e5){if(!e||typeof e!="string")return"";let r=e;for(let n of Hs)r=r.replace(n,"");return r.length>t&&(r=r.slice(0,t)),r}function hs(e,t=1,r=1e5){return e.lengthr?{valid:!1,reason:`content exceeds maximum length (${r})`}:{valid:!0}}function Vs(e){let t={},r=0;for(let[n,s]of Object.entries(e)){if(r>=Ws)break;n.length>Ts||/[^\w.-]/.test(n)||(typeof s=="string"?(t[n]=s.slice(0,Ns),r++):(typeof s=="number"&&Number.isFinite(s)||typeof s=="boolean")&&(t[n]=s,r++))}return t}function Ls(e,t){let r=[];return(!Number.isInteger(e)||e<1||e>20)&&r.push("maxRecallResults must be an integer between 1 and 20"),(!Number.isInteger(t)||t<1||t>500)&&r.push("profileFrequency must be an integer between 1 and 500"),r}function yt(e){return(0,Le.createHash)("sha256").update(e).digest("hex")}function Zs(e,t){let r=[yt(e),yt(t),nr].join(":");return(0,Le.createHmac)("sha256",Rs).update(r).digest("base64url")}function Ms(e,t){let r=yt(t),n=Zs(e,t);return{"X-Content-Hash":r,"X-Request-Integrity":[`v${nr}`,n].join(".")}}var Le,Hs,Ws,Ts,Ns,nr,Rs,or=Zr(()=>{Le=require("node:crypto");Hs=[/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g,/\uFEFF/g,/[\uFFF0-\uFFFF]/g];Ws=50,Ts=128,Ns=1024;nr=1,Rs="7f2a9c4b8e1d6f3a5c0b9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a"});var ar=v((tf,fr)=>{var ws=rr().default,{getRequestIntegrity:gs,validateApiKeyFormat:Fs,validateContainerTag:Ds}=(or(),gr(sr)),Us="claudecode_default",Ys=process.env.SUPERMEMORY_API_URL||"https://api.supermemory.ai",Ss=`Developer coding session transcript. Focus on USER message and intent. + +RULES: +- Extract USER's action/intent, not every detail assistant provides matter +- Condense assistant responses into what user gained from it +- Skip granular facts from assistant output + +EXTRACT: +- Research: "researched whisper.cpp for speech recognition" +- Actions: "built auth flow with JWT", "fixed memory leak in useEffect" +- Preferences: "prefers Tailwind over CSS modules" +- Decisions: "chose SQLite for local storage" +- Learnings: "learned about React Server Components" + +EXAMPLES: +| Transcript | Memory | +| [role:user] research about the whisper.cpp -> https://github.com/ggml-org/whisper.cpp/blob/master/src/whisper.cpp [user:end]| " starts research about whisper.cpp" | +| [role:assistant] ## whisper.cpp Architecture Summary + This is highly relevant for your parakeet.cpp implementation. Here are the key patterns: + ### Core Architecture + **Two-level context design:** + - whisper_context - holds model weights, vocab, hyperparameters (persistent) + - whisper_state - runtime state, KV caches, backends (can have multiple per context) [assistant:end] | "Assistant did a deep dive on whisper architecture" | +| [role:user] Can we explain what we are currently doing in this repository? [user:end] | "" | + +SKIP: +- Every fact assistant mentions (condense to user's action) +- Generic assistant explanations user didn't confirm/use`,Gs=`Project/codebase knowledge for team sharing. + +EXTRACT: +- Architecture: "uses monorepo with turborepo", "API in /apps/api" +- Conventions: "components in PascalCase", "hooks prefixed with use" +- Patterns: "all API routes use withAuth wrapper", "errors thrown as ApiError" +- Setup: "requires .env with DATABASE_URL", "run pnpm db:migrate first" +- Decisions: "chose Drizzle over Prisma for performance", "using RSC for data fetching" + +EXAMPLES: +| Input | Memory | +| "The auth flow works by..." | "Auth flow: [description]" | +| "We structure components like..." | "Component structure convention: [pattern]" | +| "To add a new API route..." | "Adding API routes: [steps]" |`,Ht=class{constructor(t,r){if(!t)throw new Error("SUPERMEMORY_CC_API_KEY is required");let n=Fs(t);if(!n.valid)throw new Error(`Invalid API key: ${n.reason}`);let s=r||Us,o=Ds(s);o.valid||console.warn(`Container tag warning: ${o.reason}`);let f=gs(t,s);this.client=new ws({apiKey:t,baseURL:Ys,defaultHeaders:f}),this.containerTag=s}async addMemory(t,r,n={},s={}){let o={content:t,containerTag:r||this.containerTag,metadata:{sm_source:"claude-code-plugin",...n}};s.customId&&(o.customId=s.customId),s.entityContext&&(o.entityContext=s.entityContext);let f=await this.client.add(o);return{id:f.id,status:f.status,containerTag:r||this.containerTag}}async search(t,r,n={}){let s=await this.client.search.memories({q:t,containerTag:r||this.containerTag,limit:n.limit||10,searchMode:n.searchMode||"hybrid"});return{results:s.results.map(o=>({id:o.id,memory:o.content||o.memory||o.context||"",similarity:o.similarity,title:o.title,content:o.content})),total:s.total,timing:s.timing}}async getProfile(t,r){let n=await this.client.profile({containerTag:t||this.containerTag,q:r});return{profile:{static:n.profile?.static||[],dynamic:n.profile?.dynamic||[]},searchResults:n.searchResults?{results:n.searchResults.results.map(s=>({id:s.id,memory:s.content||s.context||"",similarity:s.similarity,title:s.title})),total:n.searchResults.total,timing:n.searchResults.timing}:void 0}}};fr.exports={SupermemoryClient:Ht,PERSONAL_ENTITY_CONTEXT:Ss,REPO_ENTITY_CONTEXT:Gs}});var qt=v((rf,lr)=>{var $=require("node:fs"),Re=require("node:path"),{execSync:Ks}=require("node:child_process"),cr=Re.join(".claude",".supermemory-claude"),ir="config.json";function ur(e){try{return Ks("git rev-parse --show-toplevel",{cwd:e,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||null}catch{return null}}function vr(e){let r=ur(e)||e;return Re.join(r,cr,ir)}function dr(e){try{let t=vr(e);if($.existsSync(t))return JSON.parse($.readFileSync(t,"utf-8"))}catch{}return null}function ks(e,t){let n=ur(e)||e,s=Re.join(n,cr),o=Re.join(s,ir);$.existsSync(s)||$.mkdirSync(s,{recursive:!0});let c={...dr(e)||{},...t};return $.writeFileSync(o,JSON.stringify(c,null,2)),o}lr.exports={getConfigPath:vr,loadProjectConfig:dr,saveProjectConfig:ks}});var mr=v((nf,zr)=>{var{execSync:Pr}=require("node:child_process"),Es=require("node:crypto"),{loadProjectConfig:pr}=qt();function ee(e){return Es.createHash("sha256").update(e).digest("hex").slice(0,16)}function Ze(e){try{return Pr("git rev-parse --show-toplevel",{cwd:e,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||null}catch{return null}}function Is(e){let t=pr(e);if(t?.personalContainerTag)return t.personalContainerTag;let n=Ze(e)||e;return`claudecode_project_${ee(n)}`}function Cs(e){let t=pr(e);if(t?.repoContainerTag)return t.repoContainerTag;let n=Ze(e)||e;return`repo_${ee(n)}`}function Js(e){return(Ze(e)||e).split("/").pop()||"unknown"}function Bs(){try{let t=Pr("git config user.email",{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();if(t)return`claudecode_user_${ee(t)}`}catch{}let e=process.env.USER||process.env.USERNAME||"anonymous";return`claudecode_user_${ee(e)}`}zr.exports={sha256:ee,getGitRoot:Ze,getContainerTag:Is,getRepoContainerTag:Cs,getProjectName:Js,getUserContainerTag:Bs}});var br=v((sf,As)=>{As.exports=` Connected - Supermemory - - -
-
Connected . . .
- -
- - + - -
-

Supercharge your Claude Code with Supermemory.

-
- - -`});var q=c((P3,R)=>{R.exports=` - -Error - Supermemory - -
Error . . .
-

Connection Failed

-

Invalid API key received. Please try again.

- -`});var l=c((c3,p)=>{var h=require("node:http"),z=require("node:fs"),b=require("node:path"),M=require("node:os"),{exec:Y}=require("node:child_process"),D=s(),G=q(),H=b.join(M.homedir(),".supermemory-claude"),t=b.join(H,"credentials.json"),U=process.env.SUPERMEMORY_AUTH_URL||"https://console.supermemory.ai/auth/connect",O=19876,F=25e3;function w(){z.existsSync(H)||z.mkdirSync(H,{recursive:!0})}function K(){try{if(z.existsSync(t)){let e=JSON.parse(z.readFileSync(t,"utf-8"));if(e.apiKey)return e}}catch{}return null}function W(e){w();let f={apiKey:e,savedAt:new Date().toISOString()};z.writeFileSync(t,JSON.stringify(f,null,2))}function k(){try{z.existsSync(t)&&z.unlinkSync(t)}catch{}}function S(e){let f=process.platform==="darwin"?"open":process.platform==="win32"?"start":"xdg-open";Y(`${f} "${e}"`)}function g(){return new Promise((e,f)=>{let n=!1,v=h.createServer((P,r)=>{let u=new URL(P.url,`http://localhost:${O}`);if(u.pathname==="/callback"){let a=u.searchParams.get("apikey")||u.searchParams.get("api_key");a?.startsWith("sm_")?(W(a),r.writeHead(200,{"Content-Type":"text/html"}),r.end(D),n=!0,v.close(),e(a)):(r.writeHead(400,{"Content-Type":"text/html"}),r.end(G))}else r.writeHead(404),r.end("Not found")});v.listen(O,"127.0.0.1",()=>{let P=`http://localhost:${O}/callback`,r=`${U}?callback=${encodeURIComponent(P)}&client=claude_code`;S(r)}),v.on("error",P=>{n||f(new Error(`Failed to start auth server: ${P.message}`))}),setTimeout(()=>{n||(v.close(),f(new Error("AUTH_TIMEOUT")))},F)})}p.exports={CREDENTIALS_FILE:t,loadCredentials:K,saveCredentials:W,clearCredentials:k,startAuthFlow:g}});var V=c((X3,o)=>{var d=require("node:fs"),m=require("node:path"),J=require("node:os"),{loadCredentials:E}=l(),x=m.join(J.homedir(),".supermemory-claude"),X=m.join(x,"settings.json"),T={skipTools:["Read","Glob","Grep","TodoWrite","AskUserQuestion"],captureTools:["Edit","Write","Bash","Task"],maxProfileItems:5,debug:!1,injectProfile:!0};function B(){d.existsSync(x)||d.mkdirSync(x,{recursive:!0})}function C(){let e={...T};try{if(d.existsSync(X)){let f=d.readFileSync(X,"utf-8");Object.assign(e,JSON.parse(f))}}catch(f){console.error(`Settings: Failed to load ${X}: ${f.message}`)}return process.env.SUPERMEMORY_CC_API_KEY&&(e.apiKey=process.env.SUPERMEMORY_CC_API_KEY),process.env.SUPERMEMORY_SKIP_TOOLS&&(e.skipTools=process.env.SUPERMEMORY_SKIP_TOOLS.split(",").map(f=>f.trim())),process.env.SUPERMEMORY_DEBUG==="true"&&(e.debug=!0),e}function I(e){B();let f={...e};delete f.apiKey,d.writeFileSync(X,JSON.stringify(f,null,2))}function Q(e){if(e.apiKey)return e.apiKey;if(process.env.SUPERMEMORY_CC_API_KEY)return process.env.SUPERMEMORY_CC_API_KEY;let f=E();if(f?.apiKey)return f.apiKey;throw new Error("NO_API_KEY")}function A(e,f){return f.skipTools.includes(e)?!1:f.captureTools&&f.captureTools.length>0?f.captureTools.includes(e):!0}function _(e,f,n){if(e.debug){let v=new Date().toISOString();console.error(n?`[${v}] ${f}: ${JSON.stringify(n)}`:`[${v}] ${f}`)}}o.exports={SETTINGS_DIR:x,SETTINGS_FILE:X,DEFAULT_SETTINGS:T,loadSettings:C,saveSettings:I,getApiKey:Q,shouldCaptureTool:A,debugLog:_}});var y=c((d3,N)=>{async function $(){return new Promise((e,f)=>{let n="";process.stdin.setEncoding("utf8"),process.stdin.on("data",v=>{n+=v}),process.stdin.on("end",()=>{try{e(n.trim()?JSON.parse(n):{})}catch(v){f(new Error(`Failed to parse stdin JSON: ${v.message}`))}}),process.stdin.on("error",f),process.stdin.isTTY&&e({})})}function j(e){console.log(JSON.stringify(e))}function e3(e=null){j(e?{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:e}}:{continue:!0,suppressOutput:!0})}function f3(e){console.error(`Supermemory: ${e}`),j({continue:!0,suppressOutput:!0})}N.exports={readStdin:$,writeOutput:j,outputSuccess:e3,outputError:f3}});var{loadSettings:v3,debugLog:i}=V(),{readStdin:n3,outputSuccess:L}=y();async function r3(){let e=v3();try{let f=await n3(),n=f.session_id,v=f.tool_name;i(e,"PostToolUse",{sessionId:n,toolName:v}),L()}catch(f){i(e,"Error",{error:f.message}),L()}}r3().catch(e=>{console.error(`Supermemory fatal: ${e.message}`),process.exit(1)}); diff --git a/plugin/scripts/prompt-hook.cjs b/plugin/scripts/save-project-memory.cjs similarity index 74% rename from plugin/scripts/prompt-hook.cjs rename to plugin/scripts/save-project-memory.cjs index 07883fd..23c2582 100755 --- a/plugin/scripts/prompt-hook.cjs +++ b/plugin/scripts/save-project-memory.cjs @@ -1,5 +1,49 @@ #!/usr/bin/env node -var c=(e,f)=>()=>(f||e((f={exports:{}}).exports,f),f.exports);var s=c((t3,Z)=>{Z.exports=` +var we=Object.defineProperty;var Vr=Object.getOwnPropertyDescriptor;var Lr=Object.getOwnPropertyNames;var Rr=Object.prototype.hasOwnProperty;var Zr=(e,t)=>()=>(e&&(t=e(e=0)),t);var v=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Mr=(e,t)=>{for(var r in t)we(e,r,{get:t[r],enumerable:!0})},wr=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of Lr(t))!Rr.call(e,s)&&s!==r&&we(e,s,{get:()=>t[s],enumerable:!(n=Vr(t,s))||n.enumerable});return e};var gr=e=>wr(we({},"__esModule",{value:!0}),e);var De=v(h=>{"use strict";Object.defineProperty(h,"__esModule",{value:!0});h.__setModuleDefault=h.__createBinding=void 0;h.__classPrivateFieldSet=Fr;h.__classPrivateFieldGet=Dr;h.__importStar=Ur;h.__exportStar=Yr;function Fr(e,t,r,n,s){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!s)throw new TypeError("Private accessor was defined without a setter");if(typeof t=="function"?e!==t||!s:!t.has(e))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?s.call(e,r):s?s.value=r:t.set(e,r),r}function Dr(e,t,r,n){if(r==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof t=="function"?e!==t||!n:!t.has(e))throw new TypeError("Cannot read private member from an object whose class did not declare it");return r==="m"?n:r==="a"?n.call(e):n?n.value:t.get(e)}var Fe=Object.create?function(e,t,r,n){n===void 0&&(n=r);var s=Object.getOwnPropertyDescriptor(t,r);(!s||("get"in s?!t.__esModule:s.writable||s.configurable))&&(s={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,n,s)}:function(e,t,r,n){n===void 0&&(n=r),e[n]=t[r]};h.__createBinding=Fe;var Lt=Object.create?function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}:function(e,t){e.default=t};h.__setModuleDefault=Lt;var ge=function(e){return ge=Object.getOwnPropertyNames||function(t){var r=[];for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(r[r.length]=n);return r},ge(e)};function Ur(e){if(e&&e.__esModule)return e;var t={};if(e!=null)for(var r=ge(e),n=0;n{"use strict";Object.defineProperty(Y,"__esModule",{value:!0});Y.uuid4=void 0;var Sr=function(){let{crypto:e}=globalThis;if(e?.randomUUID)return Y.uuid4=e.randomUUID.bind(e),e.randomUUID();let t=new Uint8Array(1),r=e?()=>e.getRandomValues(t)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,n=>(+n^r()&15>>+n/4).toString(16))};Y.uuid4=Sr});var Ue=v(S=>{"use strict";Object.defineProperty(S,"__esModule",{value:!0});S.castToError=void 0;S.isAbortError=Gr;function Gr(e){return typeof e=="object"&&e!==null&&("name"in e&&e.name==="AbortError"||"message"in e&&String(e.message).includes("FetchRequestCanceledException"))}var Kr=e=>{if(e instanceof Error)return e;if(typeof e=="object"&&e!==null){try{if(Object.prototype.toString.call(e)==="[object Error]"){let t=new Error(e.message,e.cause?{cause:e.cause}:{});return e.stack&&(t.stack=e.stack),e.cause&&!t.cause&&(t.cause=e.cause),e.name&&(t.name=e.name),t}}catch{}try{return new Error(JSON.stringify(e))}catch{}}return new Error(e)};S.castToError=Kr});var K=v(d=>{"use strict";Object.defineProperty(d,"__esModule",{value:!0});d.InternalServerError=d.RateLimitError=d.UnprocessableEntityError=d.ConflictError=d.NotFoundError=d.PermissionDeniedError=d.AuthenticationError=d.BadRequestError=d.APIConnectionTimeoutError=d.APIConnectionError=d.APIUserAbortError=d.APIError=d.SupermemoryError=void 0;var kr=Ue(),se=class extends Error{};d.SupermemoryError=se;var X=class e extends se{constructor(t,r,n,s){super(`${e.makeMessage(t,r,n)}`),this.status=t,this.headers=s,this.error=r}static makeMessage(t,r,n){let s=r?.message?typeof r.message=="string"?r.message:JSON.stringify(r.message):r?JSON.stringify(r):n;return t&&s?`${t} ${s}`:t?`${t} status code (no body)`:s||"(no status code or body)"}static generate(t,r,n,s){if(!t||!s)return new G({message:n,cause:(0,kr.castToError)(r)});let o=r;return t===400?new oe(t,o,n,s):t===401?new fe(t,o,n,s):t===403?new ae(t,o,n,s):t===404?new ce(t,o,n,s):t===409?new ie(t,o,n,s):t===422?new ue(t,o,n,s):t===429?new ve(t,o,n,s):t>=500?new de(t,o,n,s):new e(t,o,n,s)}};d.APIError=X;var Ye=class extends X{constructor({message:t}={}){super(void 0,void 0,t||"Request was aborted.",void 0)}};d.APIUserAbortError=Ye;var G=class extends X{constructor({message:t,cause:r}){super(void 0,void 0,t||"Connection error.",void 0),r&&(this.cause=r)}};d.APIConnectionError=G;var Se=class extends G{constructor({message:t}={}){super({message:t??"Request timed out."})}};d.APIConnectionTimeoutError=Se;var oe=class extends X{};d.BadRequestError=oe;var fe=class extends X{};d.AuthenticationError=fe;var ae=class extends X{};d.PermissionDeniedError=ae;var ce=class extends X{};d.NotFoundError=ce;var ie=class extends X{};d.ConflictError=ie;var ue=class extends X{};d.UnprocessableEntityError=ue;var ve=class extends X{};d.RateLimitError=ve;var de=class extends X{};d.InternalServerError=de});var E=v(u=>{"use strict";Object.defineProperty(u,"__esModule",{value:!0});u.safeJSON=u.maybeCoerceBoolean=u.maybeCoerceFloat=u.maybeCoerceInteger=u.coerceBoolean=u.coerceFloat=u.coerceInteger=u.validatePositiveInteger=u.ensurePresent=u.isReadonlyArray=u.isArray=u.isAbsoluteURL=void 0;u.maybeObj=Jr;u.isEmptyObj=Br;u.hasOwn=Ar;u.isObj=Qr;var k=K(),Er=/^[a-z][a-z0-9+.-]*:/i,Ir=e=>Er.test(e);u.isAbsoluteURL=Ir;var Cr=e=>(u.isArray=Array.isArray,(0,u.isArray)(e));u.isArray=Cr;u.isReadonlyArray=u.isArray;function Jr(e){return typeof e!="object"?{}:e??{}}function Br(e){if(!e)return!0;for(let t in e)return!1;return!0}function Ar(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function Qr(e){return e!=null&&typeof e=="object"&&!Array.isArray(e)}var _r=e=>{if(e==null)throw new k.SupermemoryError(`Expected a value to be given but received ${e} instead.`);return e};u.ensurePresent=_r;var $r=(e,t)=>{if(typeof t!="number"||!Number.isInteger(t))throw new k.SupermemoryError(`${e} must be an integer`);if(t<0)throw new k.SupermemoryError(`${e} must be a positive integer`);return t};u.validatePositiveInteger=$r;var en=e=>{if(typeof e=="number")return Math.round(e);if(typeof e=="string")return parseInt(e,10);throw new k.SupermemoryError(`Could not coerce ${e} (type: ${typeof e}) into a number`)};u.coerceInteger=en;var tn=e=>{if(typeof e=="number")return e;if(typeof e=="string")return parseFloat(e);throw new k.SupermemoryError(`Could not coerce ${e} (type: ${typeof e}) into a number`)};u.coerceFloat=tn;var rn=e=>typeof e=="boolean"?e:typeof e=="string"?e==="true":!!e;u.coerceBoolean=rn;var nn=e=>{if(e!=null)return(0,u.coerceInteger)(e)};u.maybeCoerceInteger=nn;var sn=e=>{if(e!=null)return(0,u.coerceFloat)(e)};u.maybeCoerceFloat=sn;var on=e=>{if(e!=null)return(0,u.coerceBoolean)(e)};u.maybeCoerceBoolean=on;var fn=e=>{try{return JSON.parse(e)}catch{return}};u.safeJSON=fn});var Zt=v(le=>{"use strict";Object.defineProperty(le,"__esModule",{value:!0});le.sleep=void 0;var an=e=>new Promise(t=>setTimeout(t,e));le.sleep=an});var Ge=v(Pe=>{"use strict";Object.defineProperty(Pe,"__esModule",{value:!0});Pe.VERSION=void 0;Pe.VERSION="4.0.0"});var Ft=v(M=>{"use strict";Object.defineProperty(M,"__esModule",{value:!0});M.getPlatformHeaders=M.isRunningInBrowser=void 0;var I=Ge(),cn=()=>typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u";M.isRunningInBrowser=cn;function un(){return typeof Deno<"u"&&Deno.build!=null?"deno":typeof EdgeRuntime<"u"?"edge":Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]"?"node":"unknown"}var vn=()=>{let e=un();if(e==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":I.VERSION,"X-Stainless-OS":wt(Deno.build.os),"X-Stainless-Arch":Mt(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version=="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":I.VERSION,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if(e==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":I.VERSION,"X-Stainless-OS":wt(globalThis.process.platform??"unknown"),"X-Stainless-Arch":Mt(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let t=dn();return t?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":I.VERSION,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${t.browser}`,"X-Stainless-Runtime-Version":t.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":I.VERSION,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};function dn(){if(typeof navigator>"u"||!navigator)return null;let e=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:t,pattern:r}of e){let n=r.exec(navigator.userAgent);if(n){let s=n[1]||0,o=n[2]||0,f=n[3]||0;return{browser:t,version:`${s}.${o}.${f}`}}}return null}var Mt=e=>e==="x32"?"x32":e==="x86_64"||e==="x64"?"x64":e==="arm"?"arm":e==="aarch64"||e==="arm64"?"arm64":e?`other:${e}`:"unknown",wt=e=>(e=e.toLowerCase(),e.includes("ios")?"iOS":e==="android"?"Android":e==="darwin"?"MacOS":e==="win32"?"Windows":e==="freebsd"?"FreeBSD":e==="openbsd"?"OpenBSD":e==="linux"?"Linux":e?`Other:${e}`:"Unknown"),gt,ln=()=>gt??(gt=vn());M.getPlatformHeaders=ln});var Ke=v(L=>{"use strict";Object.defineProperty(L,"__esModule",{value:!0});L.getDefaultFetch=Pn;L.makeReadableStream=Dt;L.ReadableStreamFrom=pn;L.ReadableStreamToAsyncIterable=zn;L.CancelReadableStream=mn;function Pn(){if(typeof fetch<"u")return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Supermemory({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function Dt(...e){let t=globalThis.ReadableStream;if(typeof t>"u")throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new t(...e)}function pn(e){let t=Symbol.asyncIterator in e?e[Symbol.asyncIterator]():e[Symbol.iterator]();return Dt({start(){},async pull(r){let{done:n,value:s}=await t.next();n?r.close():r.enqueue(s)},async cancel(){await t.return?.()}})}function zn(e){if(e[Symbol.asyncIterator])return e;let t=e.getReader();return{async next(){try{let r=await t.read();return r?.done&&t.releaseLock(),r}catch(r){throw t.releaseLock(),r}},async return(){let r=t.cancel();return t.releaseLock(),await r,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function mn(e){if(e===null||typeof e!="object")return;if(e[Symbol.asyncIterator]){await e[Symbol.asyncIterator]().return?.();return}let t=e.getReader(),r=t.cancel();t.releaseLock(),await r}});var Ut=v(pe=>{"use strict";Object.defineProperty(pe,"__esModule",{value:!0});pe.FallbackEncoder=void 0;var bn=({headers:e,body:t})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(t)});pe.FallbackEncoder=bn});var C=v(z=>{"use strict";Object.defineProperty(z,"__esModule",{value:!0});z.createForm=z.multipartFormRequestOptions=z.maybeMultipartFormRequestOptions=z.isAsyncIterable=z.checkFileSupport=void 0;z.makeFile=ke;z.getName=ze;var jn=Ke(),xn=()=>{if(typeof File>"u"){let{process:e}=globalThis,t=typeof e?.versions?.node=="string"&&parseInt(e.versions.node.split("."))<20;throw new Error("`File` is not defined as a global, which is required for file uploads."+(t?" Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`.":""))}};z.checkFileSupport=xn;function ke(e,t,r){return(0,z.checkFileSupport)(),new File(e,t??"unknown_file",r)}function ze(e){return(typeof e=="object"&&e!==null&&("name"in e&&e.name&&String(e.name)||"url"in e&&e.url&&String(e.url)||"filename"in e&&e.filename&&String(e.filename)||"path"in e&&e.path&&String(e.path))||"").split(/[\\/]/).pop()||void 0}var Xn=e=>e!=null&&typeof e=="object"&&typeof e[Symbol.asyncIterator]=="function";z.isAsyncIterable=Xn;var On=async(e,t)=>Ee(e.body)?{...e,body:await(0,z.createForm)(e.body,t)}:e;z.maybeMultipartFormRequestOptions=On;var yn=async(e,t)=>({...e,body:await(0,z.createForm)(e.body,t)});z.multipartFormRequestOptions=yn;var Yt=new WeakMap;function Hn(e){let t=typeof e=="function"?e:e.fetch,r=Yt.get(t);if(r)return r;let n=(async()=>{try{let s="Response"in t?t.Response:(await t("data:,")).constructor,o=new FormData;return o.toString()!==await new s(o).text()}catch{return!0}})();return Yt.set(t,n),n}var qn=async(e,t)=>{if(!await Hn(t))throw new TypeError("The provided fetch function does not support file uploads with the current global FormData class.");let r=new FormData;return await Promise.all(Object.entries(e||{}).map(([n,s])=>Ie(r,n,s))),r};z.createForm=qn;var St=e=>e instanceof Blob&&"name"in e,hn=e=>typeof e=="object"&&e!==null&&(e instanceof Response||(0,z.isAsyncIterable)(e)||St(e)),Ee=e=>{if(hn(e))return!0;if(Array.isArray(e))return e.some(Ee);if(e&&typeof e=="object"){for(let t in e)if(Ee(e[t]))return!0}return!1},Ie=async(e,t,r)=>{if(r!==void 0){if(r==null)throw new TypeError(`Received null for "${t}"; to pass null in FormData, you must use the string 'null'`);if(typeof r=="string"||typeof r=="number"||typeof r=="boolean")e.append(t,String(r));else if(r instanceof Response)e.append(t,ke([await r.blob()],ze(r)));else if((0,z.isAsyncIterable)(r))e.append(t,ke([await new Response((0,jn.ReadableStreamFrom)(r)).blob()],ze(r)));else if(St(r))e.append(t,r,ze(r));else if(Array.isArray(r))await Promise.all(r.map(n=>Ie(e,t+"[]",n)));else if(typeof r=="object")await Promise.all(Object.entries(r).map(([n,s])=>Ie(e,`${t}[${n}]`,s)));else throw new TypeError(`Invalid value given to form, expected a string, number, boolean, object, Array, File or Blob but got ${r} instead`)}}});var Kt=v(Je=>{"use strict";Object.defineProperty(Je,"__esModule",{value:!0});Je.toFile=Vn;var J=C(),Wn=C(),Gt=e=>e!=null&&typeof e=="object"&&typeof e.size=="number"&&typeof e.type=="string"&&typeof e.text=="function"&&typeof e.slice=="function"&&typeof e.arrayBuffer=="function",Tn=e=>e!=null&&typeof e=="object"&&typeof e.name=="string"&&typeof e.lastModified=="number"&&Gt(e),Nn=e=>e!=null&&typeof e=="object"&&typeof e.url=="string"&&typeof e.blob=="function";async function Vn(e,t,r){if((0,Wn.checkFileSupport)(),e=await e,Tn(e))return e instanceof File?e:(0,J.makeFile)([await e.arrayBuffer()],e.name);if(Nn(e)){let s=await e.blob();return t||(t=new URL(e.url).pathname.split(/[\\/]/).pop()),(0,J.makeFile)(await Ce(s),t,r)}let n=await Ce(e);if(t||(t=(0,J.getName)(e)),!r?.type){let s=n.find(o=>typeof o=="object"&&"type"in o&&o.type);typeof s=="string"&&(r={...r,type:s})}return(0,J.makeFile)(n,t,r)}async function Ce(e){let t=[];if(typeof e=="string"||ArrayBuffer.isView(e)||e instanceof ArrayBuffer)t.push(e);else if(Gt(e))t.push(e instanceof Blob?e:await e.arrayBuffer());else if((0,J.isAsyncIterable)(e))for await(let r of e)t.push(...await Ce(r));else{let r=e?.constructor?.name;throw new Error(`Unexpected data type: ${typeof e}${r?`; constructor: ${r}`:""}${Ln(e)}`)}return t}function Ln(e){return typeof e!="object"||e===null?"":`; props: [${Object.getOwnPropertyNames(e).map(r=>`"${r}"`).join(", ")}]`}});var Be=v(me=>{"use strict";Object.defineProperty(me,"__esModule",{value:!0});me.toFile=void 0;var Rn=Kt();Object.defineProperty(me,"toFile",{enumerable:!0,get:function(){return Rn.toFile}})});var w=v(be=>{"use strict";Object.defineProperty(be,"__esModule",{value:!0});be.APIResource=void 0;var Ae=class{constructor(t){this._client=t}};be.APIResource=Ae});var B=v(g=>{"use strict";Object.defineProperty(g,"__esModule",{value:!0});g.isEmptyHeaders=g.buildHeaders=void 0;var kt=E(),Et=Symbol("brand.privateNullableHeaders");function*It(e){if(!e)return;if(Et in e){let{values:n,nulls:s}=e;yield*n.entries();for(let o of s)yield[o,null];return}let t=!1,r;e instanceof Headers?r=e.entries():(0,kt.isReadonlyArray)(e)?r=e:(t=!0,r=Object.entries(e??{}));for(let n of r){let s=n[0];if(typeof s!="string")throw new TypeError("expected header name to be a string");let o=(0,kt.isReadonlyArray)(n[1])?n[1]:[n[1]],f=!1;for(let c of o)c!==void 0&&(t&&!f&&(f=!0,yield[s,null]),yield[s,c])}}var Zn=e=>{let t=new Headers,r=new Set;for(let n of e){let s=new Set;for(let[o,f]of It(n)){let c=o.toLowerCase();s.has(c)||(t.delete(o),s.add(c)),f===null?(t.delete(o),r.add(c)):(t.append(o,f),r.delete(c))}}return{[Et]:!0,values:t,nulls:r}};g.buildHeaders=Zn;var Mn=e=>{for(let t of It(e))return!1;return!0};g.isEmptyHeaders=Mn});var je=v(N=>{"use strict";Object.defineProperty(N,"__esModule",{value:!0});N.path=N.createPathTagFunction=void 0;N.encodeURIPath=Qe;var wn=K();function Qe(e){return e.replace(/[^A-Za-z0-9\-._~!$&'()*+,;=:@]+/g,encodeURIComponent)}var Ct=Object.freeze(Object.create(null)),gn=(e=Qe)=>function(r,...n){if(r.length===1)return r[0];let s=!1,o=[],f=r.reduce((x,j,H)=>{/[?#]/.test(j)&&(s=!0);let a=n[H],q=(s?encodeURIComponent:e)(""+a);return H!==n.length&&(a==null||typeof a=="object"&&a.toString===Object.getPrototypeOf(Object.getPrototypeOf(a.hasOwnProperty??Ct)??Ct)?.toString)&&(q=a+"",o.push({start:x.length+j.length,length:q.length,error:`Value of type ${Object.prototype.toString.call(a).slice(8,-1)} is not a valid path parameter`})),x+j+(H===n.length?"":q)},""),c=f.split(/[?#]/,1)[0],b=/(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi,P;for(;(P=b.exec(c))!==null;)o.push({start:P.index,length:P[0].length,error:`Value "${P[0]}" can't be safely passed as a path parameter`});if(o.sort((x,j)=>x.start-j.start),o.length>0){let x=0,j=o.reduce((H,a)=>{let q=" ".repeat(a.start-x),D="^".repeat(a.length);return x=a.start+a.length,H+q+D},"");throw new wn.SupermemoryError(`Path parameters result in path with invalid segments: +${o.map(H=>H.error).join(` +`)} +${f} +${j}`)}return f};N.createPathTagFunction=gn;N.path=(0,N.createPathTagFunction)(Qe)});var $e=v(xe=>{"use strict";Object.defineProperty(xe,"__esModule",{value:!0});xe.Connections=void 0;var Fn=w(),Dn=B(),W=je(),_e=class extends Fn.APIResource{create(t,r={},n){return this._client.post((0,W.path)`/v3/connections/${t}`,{body:r,...n})}list(t={},r){return this._client.post("/v3/connections/list",{body:t,...r})}configure(t,r,n){return this._client.post((0,W.path)`/v3/connections/${t}/configure`,{body:r,...n})}deleteByID(t,r){return this._client.delete((0,W.path)`/v3/connections/${t}`,r)}deleteByProvider(t,r,n){return this._client.delete((0,W.path)`/v3/connections/${t}`,{body:r,...n})}getByID(t,r){return this._client.get((0,W.path)`/v3/connections/${t}`,r)}getByTag(t,r,n){return this._client.post((0,W.path)`/v3/connections/${t}/connection`,{body:r,...n})}import(t,r={},n){return this._client.post((0,W.path)`/v3/connections/${t}/import`,{body:r,...n,headers:(0,Dn.buildHeaders)([{Accept:"text/plain"},n?.headers])})}listDocuments(t,r={},n){return this._client.post((0,W.path)`/v3/connections/${t}/documents`,{body:r,...n})}resources(t,r={},n){return this._client.get((0,W.path)`/v3/connections/${t}/resources`,{query:r,...n})}};xe.Connections=_e});var rt=v(Xe=>{"use strict";Object.defineProperty(Xe,"__esModule",{value:!0});Xe.Documents=void 0;var Un=w(),Yn=B(),Sn=C(),et=je(),tt=class extends Un.APIResource{update(t,r={},n){return this._client.patch((0,et.path)`/v3/documents/${t}`,{body:r,...n})}list(t={},r){return this._client.post("/v3/documents/list",{body:t,...r})}delete(t,r){return this._client.delete((0,et.path)`/v3/documents/${t}`,{...r,headers:(0,Yn.buildHeaders)([{Accept:"*/*"},r?.headers])})}add(t,r){return this._client.post("/v3/documents",{body:t,...r})}batchAdd(t,r){return this._client.post("/v3/documents/batch",{body:t,...r})}deleteBulk(t={},r){return this._client.delete("/v3/documents/bulk",{body:t,...r})}get(t,r){return this._client.get((0,et.path)`/v3/documents/${t}`,r)}listProcessing(t){return this._client.get("/v3/documents/processing",t)}uploadFile(t,r){return this._client.post("/v3/documents/file",(0,Sn.multipartFormRequestOptions)({body:t,...r},this._client))}};Xe.Documents=tt});var ot=v(Oe=>{"use strict";Object.defineProperty(Oe,"__esModule",{value:!0});Oe.Memories=void 0;var Gn=w(),Kn=B(),kn=C(),nt=je(),st=class extends Gn.APIResource{update(t,r={},n){return this._client.patch((0,nt.path)`/v3/documents/${t}`,{body:r,...n})}list(t={},r){return this._client.post("/v3/documents/list",{body:t,...r})}delete(t,r){return this._client.delete((0,nt.path)`/v3/documents/${t}`,{...r,headers:(0,Kn.buildHeaders)([{Accept:"*/*"},r?.headers])})}add(t,r){return this._client.post("/v3/documents",{body:t,...r})}forget(t,r){return this._client.delete("/v4/memories",{body:t,...r})}get(t,r){return this._client.get((0,nt.path)`/v3/documents/${t}`,r)}updateMemory(t,r){return this._client.patch("/v4/memories",{body:t,...r})}uploadFile(t,r){return this._client.post("/v3/documents/file",(0,kn.multipartFormRequestOptions)({body:t,...r},this._client))}};Oe.Memories=st});var at=v(ye=>{"use strict";Object.defineProperty(ye,"__esModule",{value:!0});ye.Search=void 0;var En=w(),ft=class extends En.APIResource{documents(t,r){return this._client.post("/v3/search",{body:t,...r})}execute(t,r){return this._client.post("/v3/search",{body:t,...r})}memories(t,r){return this._client.post("/v4/search",{body:t,...r})}};ye.Search=ft});var it=v(He=>{"use strict";Object.defineProperty(He,"__esModule",{value:!0});He.Settings=void 0;var In=w(),ct=class extends In.APIResource{update(t={},r){return this._client.patch("/v3/settings",{body:t,...r})}get(t){return this._client.get("/v3/settings",t)}};He.Settings=ct});var Jt=v(y=>{"use strict";Object.defineProperty(y,"__esModule",{value:!0});y.Settings=y.Search=y.Memories=y.Documents=y.Connections=void 0;var Cn=$e();Object.defineProperty(y,"Connections",{enumerable:!0,get:function(){return Cn.Connections}});var Jn=rt();Object.defineProperty(y,"Documents",{enumerable:!0,get:function(){return Jn.Documents}});var Bn=ot();Object.defineProperty(y,"Memories",{enumerable:!0,get:function(){return Bn.Memories}});var An=at();Object.defineProperty(y,"Search",{enumerable:!0,get:function(){return An.Search}});var Qn=it();Object.defineProperty(y,"Settings",{enumerable:!0,get:function(){return Qn.Settings}})});var ut=v(R=>{"use strict";Object.defineProperty(R,"__esModule",{value:!0});R.formatRequestDetails=R.parseLogLevel=void 0;R.loggerFor=At;var _n=E(),he={off:0,error:200,warn:300,info:400,debug:500},$n=(e,t,r)=>{if(e){if((0,_n.hasOwn)(he,e))return e;At(r).warn(`${t} was set to ${JSON.stringify(e)}, expected one of ${JSON.stringify(Object.keys(he))}`)}};R.parseLogLevel=$n;function A(){}function qe(e,t,r){return!t||he[e]>he[r]?A:t[e].bind(t)}var es={error:A,warn:A,info:A,debug:A},Bt=new WeakMap;function At(e){let t=e.logger,r=e.logLevel??"off";if(!t)return es;let n=Bt.get(t);if(n&&n[0]===r)return n[1];let s={error:qe("error",t,r),warn:qe("warn",t,r),info:qe("info",t,r),debug:qe("debug",t,r)};return Bt.set(t,[r,s]),s}var ts=e=>(e.options&&(e.options={...e.options},delete e.options.headers),e.headers&&(e.headers=Object.fromEntries((e.headers instanceof Headers?[...e.headers]:Object.entries(e.headers)).map(([t,r])=>[t,t.toLowerCase()==="authorization"||t.toLowerCase()==="cookie"||t.toLowerCase()==="set-cookie"?"***":r]))),"retryOfRequestLogID"in e&&(e.retryOfRequestLogID&&(e.retryOf=e.retryOfRequestLogID),delete e.retryOfRequestLogID),e);R.formatRequestDetails=ts});var _t=v(vt=>{"use strict";Object.defineProperty(vt,"__esModule",{value:!0});vt.defaultParseResponse=rs;var Qt=ut();async function rs(e,t){let{response:r,requestLogID:n,retryOfRequestLogID:s,startTime:o}=t,f=await(async()=>{if(r.status===204)return null;if(t.options.__binaryResponse)return r;let b=r.headers.get("content-type")?.split(";")[0]?.trim();return b?.includes("application/json")||b?.endsWith("+json")?await r.json():await r.text()})();return(0,Qt.loggerFor)(e).debug(`[${n}] response parsed`,(0,Qt.formatRequestDetails)({retryOfRequestLogID:s,url:r.url,status:r.status,body:f,durationMs:Date.now()-o})),f}});var Pt=v(We=>{"use strict";var Q;Object.defineProperty(We,"__esModule",{value:!0});We.APIPromise=void 0;var dt=De(),ns=_t(),lt=class e extends Promise{constructor(t,r,n=ns.defaultParseResponse){super(s=>{s(null)}),this.responsePromise=r,this.parseResponse=n,Q.set(this,void 0),dt.__classPrivateFieldSet(this,Q,t,"f")}_thenUnwrap(t){return new e(dt.__classPrivateFieldGet(this,Q,"f"),this.responsePromise,async(r,n)=>t(await this.parseResponse(r,n),n))}asResponse(){return this.responsePromise.then(t=>t.response)}async withResponse(){let[t,r]=await Promise.all([this.parse(),this.asResponse()]);return{data:t,response:r}}parse(){return this.parsedPromise||(this.parsedPromise=this.responsePromise.then(t=>this.parseResponse(dt.__classPrivateFieldGet(this,Q,"f"),t))),this.parsedPromise}then(t,r){return this.parse().then(t,r)}catch(t){return this.parse().catch(t)}finally(t){return this.parse().finally(t)}};We.APIPromise=lt;Q=new WeakMap});var $t=v(Te=>{"use strict";Object.defineProperty(Te,"__esModule",{value:!0});Te.readEnv=void 0;var ss=e=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[e]?.trim()??void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.(e)?.trim()};Te.readEnv=ss});var Ot=v(Ve=>{"use strict";var xt,Xt,Ne,er;Object.defineProperty(Ve,"__esModule",{value:!0});Ve.Supermemory=void 0;var V=De(),os=Rt(),pt=E(),fs=Zt(),zt=Ue(),as=Ft(),mt=V.__importStar(Ke()),cs=V.__importStar(Ut()),is=Ge(),p=V.__importStar(K()),us=V.__importStar(Be()),_=V.__importStar(Jt()),vs=Pt(),ds=$e(),ls=rt(),Ps=ot(),ps=at(),zs=it(),bt=B(),jt=$t(),m=ut(),ms=E(),l=class{constructor({baseURL:t=(0,jt.readEnv)("SUPERMEMORY_BASE_URL"),apiKey:r=(0,jt.readEnv)("SUPERMEMORY_API_KEY"),...n}={}){if(xt.add(this),Ne.set(this,void 0),this.memories=new _.Memories(this),this.documents=new _.Documents(this),this.search=new _.Search(this),this.settings=new _.Settings(this),this.connections=new _.Connections(this),r===void 0)throw new p.SupermemoryError("The SUPERMEMORY_API_KEY environment variable is missing or empty; either provide it, or instantiate the Supermemory client with an apiKey option, like new Supermemory({ apiKey: 'My API Key' }).");let s={apiKey:r,...n,baseURL:t||"https://api.supermemory.ai"};this.baseURL=s.baseURL,this.timeout=s.timeout??Xt.DEFAULT_TIMEOUT,this.logger=s.logger??console;let o="warn";this.logLevel=o,this.logLevel=(0,m.parseLogLevel)(s.logLevel,"ClientOptions.logLevel",this)??(0,m.parseLogLevel)((0,jt.readEnv)("SUPERMEMORY_LOG"),"process.env['SUPERMEMORY_LOG']",this)??o,this.fetchOptions=s.fetchOptions,this.maxRetries=s.maxRetries??2,this.fetch=s.fetch??mt.getDefaultFetch(),V.__classPrivateFieldSet(this,Ne,cs.FallbackEncoder,"f"),this._options=s,this.apiKey=r}withOptions(t){return new this.constructor({...this._options,baseURL:this.baseURL,maxRetries:this.maxRetries,timeout:this.timeout,logger:this.logger,logLevel:this.logLevel,fetch:this.fetch,fetchOptions:this.fetchOptions,apiKey:this.apiKey,...t})}add(t,r){return this.post("/v3/documents",{body:t,...r})}profile(t,r){return this.post("/v4/profile",{body:t,...r})}defaultQuery(){return this._options.defaultQuery}validateHeaders({values:t,nulls:r}){}async authHeaders(t){return(0,bt.buildHeaders)([{Authorization:`Bearer ${this.apiKey}`}])}stringifyQuery(t){return Object.entries(t).filter(([r,n])=>typeof n<"u").map(([r,n])=>{if(typeof n=="string"||typeof n=="number"||typeof n=="boolean")return`${encodeURIComponent(r)}=${encodeURIComponent(n)}`;if(n===null)return`${encodeURIComponent(r)}=`;throw new p.SupermemoryError(`Cannot stringify type ${typeof n}; Expected string, number, boolean, or null. If you need to pass nested query parameters, you can manually encode them, e.g. { query: { 'foo[key1]': value1, 'foo[key2]': value2 } }, and please open a GitHub issue requesting better support for your use case.`)}).join("&")}getUserAgent(){return`${this.constructor.name}/JS ${is.VERSION}`}defaultIdempotencyKey(){return`stainless-node-retry-${(0,os.uuid4)()}`}makeStatusError(t,r,n,s){return p.APIError.generate(t,r,n,s)}buildURL(t,r,n){let s=!V.__classPrivateFieldGet(this,xt,"m",er).call(this)&&n||this.baseURL,o=(0,pt.isAbsoluteURL)(t)?new URL(t):new URL(s+(s.endsWith("/")&&t.startsWith("/")?t.slice(1):t)),f=this.defaultQuery();return(0,ms.isEmptyObj)(f)||(r={...f,...r}),typeof r=="object"&&r&&!Array.isArray(r)&&(o.search=this.stringifyQuery(r)),o.toString()}async prepareOptions(t){}async prepareRequest(t,{url:r,options:n}){}get(t,r){return this.methodRequest("get",t,r)}post(t,r){return this.methodRequest("post",t,r)}patch(t,r){return this.methodRequest("patch",t,r)}put(t,r){return this.methodRequest("put",t,r)}delete(t,r){return this.methodRequest("delete",t,r)}methodRequest(t,r,n){return this.request(Promise.resolve(n).then(s=>({method:t,path:r,...s})))}request(t,r=null){return new vs.APIPromise(this,this.makeRequest(t,r,void 0))}async makeRequest(t,r,n){let s=await t,o=s.maxRetries??this.maxRetries;r==null&&(r=o),await this.prepareOptions(s);let{req:f,url:c,timeout:b}=await this.buildRequest(s,{retryCount:o-r});await this.prepareRequest(f,{url:c,options:s});let P="log_"+(Math.random()*(1<<24)|0).toString(16).padStart(6,"0"),x=n===void 0?"":`, retryOf: ${n}`,j=Date.now();if((0,m.loggerFor)(this).debug(`[${P}] sending request`,(0,m.formatRequestDetails)({retryOfRequestLogID:n,method:s.method,url:c,options:s,headers:f.headers})),s.signal?.aborted)throw new p.APIUserAbortError;let H=new AbortController,a=await this.fetchWithTimeout(c,f,b,H).catch(zt.castToError),q=Date.now();if(a instanceof globalThis.Error){let U=`retrying, ${r} attempts remaining`;if(s.signal?.aborted)throw new p.APIUserAbortError;let T=(0,zt.isAbortError)(a)||/timed? ?out/i.test(String(a)+("cause"in a?String(a.cause):""));if(r)return(0,m.loggerFor)(this).info(`[${P}] connection ${T?"timed out":"failed"} - ${U}`),(0,m.loggerFor)(this).debug(`[${P}] connection ${T?"timed out":"failed"} (${U})`,(0,m.formatRequestDetails)({retryOfRequestLogID:n,url:c,durationMs:q-j,message:a.message})),this.retryRequest(s,r,n??P);throw(0,m.loggerFor)(this).info(`[${P}] connection ${T?"timed out":"failed"} - error; no more retries left`),(0,m.loggerFor)(this).debug(`[${P}] connection ${T?"timed out":"failed"} (error; no more retries left)`,(0,m.formatRequestDetails)({retryOfRequestLogID:n,url:c,durationMs:q-j,message:a.message})),T?new p.APIConnectionTimeoutError:new p.APIConnectionError({cause:a})}let D=`[${P}${x}] ${f.method} ${c} ${a.ok?"succeeded":"failed"} with status ${a.status} in ${q-j}ms`;if(!a.ok){let U=await this.shouldRetry(a);if(r&&U){let ne=`retrying, ${r} attempts remaining`;return await mt.CancelReadableStream(a.body),(0,m.loggerFor)(this).info(`${D} - ${ne}`),(0,m.loggerFor)(this).debug(`[${P}] response error (${ne})`,(0,m.formatRequestDetails)({retryOfRequestLogID:n,url:a.url,status:a.status,headers:a.headers,durationMs:q-j})),this.retryRequest(s,r,n??P,a.headers)}let T=U?"error; no more retries left":"error; not retryable";(0,m.loggerFor)(this).info(`${D} - ${T}`);let Tt=await a.text().catch(ne=>(0,zt.castToError)(ne).message),Nt=(0,pt.safeJSON)(Tt),Vt=Nt?void 0:Tt;throw(0,m.loggerFor)(this).debug(`[${P}] response error (${T})`,(0,m.formatRequestDetails)({retryOfRequestLogID:n,url:a.url,status:a.status,headers:a.headers,message:Vt,durationMs:Date.now()-j})),this.makeStatusError(a.status,Nt,Vt,a.headers)}return(0,m.loggerFor)(this).info(D),(0,m.loggerFor)(this).debug(`[${P}] response start`,(0,m.formatRequestDetails)({retryOfRequestLogID:n,url:a.url,status:a.status,headers:a.headers,durationMs:q-j})),{response:a,options:s,controller:H,requestLogID:P,retryOfRequestLogID:n,startTime:j}}async fetchWithTimeout(t,r,n,s){let{signal:o,method:f,...c}=r||{};o&&o.addEventListener("abort",()=>s.abort());let b=setTimeout(()=>s.abort(),n),P=globalThis.ReadableStream&&c.body instanceof globalThis.ReadableStream||typeof c.body=="object"&&c.body!==null&&Symbol.asyncIterator in c.body,x={signal:s.signal,...P?{duplex:"half"}:{},method:"GET",...c};f&&(x.method=f.toUpperCase());try{return await this.fetch.call(void 0,t,x)}finally{clearTimeout(b)}}async shouldRetry(t){let r=t.headers.get("x-should-retry");return r==="true"?!0:r==="false"?!1:t.status===408||t.status===409||t.status===429||t.status>=500}async retryRequest(t,r,n,s){let o,f=s?.get("retry-after-ms");if(f){let b=parseFloat(f);Number.isNaN(b)||(o=b)}let c=s?.get("retry-after");if(c&&!o){let b=parseFloat(c);Number.isNaN(b)?o=Date.parse(c)-Date.now():o=b*1e3}if(!(o&&0<=o&&o<60*1e3)){let b=t.maxRetries??this.maxRetries;o=this.calculateDefaultRetryTimeoutMillis(r,b)}return await(0,fs.sleep)(o),this.makeRequest(t,r-1,n)}calculateDefaultRetryTimeoutMillis(t,r){let o=r-t,f=Math.min(.5*Math.pow(2,o),8),c=1-Math.random()*.25;return f*c*1e3}async buildRequest(t,{retryCount:r=0}={}){let n={...t},{method:s,path:o,query:f,defaultBaseURL:c}=n,b=this.buildURL(o,f,c);"timeout"in n&&(0,pt.validatePositiveInteger)("timeout",n.timeout),n.timeout=n.timeout??this.timeout;let{bodyHeaders:P,body:x}=this.buildBody({options:n}),j=await this.buildHeaders({options:t,method:s,bodyHeaders:P,retryCount:r});return{req:{method:s,headers:j,...n.signal&&{signal:n.signal},...globalThis.ReadableStream&&x instanceof globalThis.ReadableStream&&{duplex:"half"},...x&&{body:x},...this.fetchOptions??{},...n.fetchOptions??{}},url:b,timeout:n.timeout}}async buildHeaders({options:t,method:r,bodyHeaders:n,retryCount:s}){let o={};this.idempotencyHeader&&r!=="get"&&(t.idempotencyKey||(t.idempotencyKey=this.defaultIdempotencyKey()),o[this.idempotencyHeader]=t.idempotencyKey);let f=(0,bt.buildHeaders)([o,{Accept:"application/json","User-Agent":this.getUserAgent(),"X-Stainless-Retry-Count":String(s),...t.timeout?{"X-Stainless-Timeout":String(Math.trunc(t.timeout/1e3))}:{},...(0,as.getPlatformHeaders)()},await this.authHeaders(t),this._options.defaultHeaders,n,t.headers]);return this.validateHeaders(f),f.values}buildBody({options:{body:t,headers:r}}){if(!t)return{bodyHeaders:void 0,body:void 0};let n=(0,bt.buildHeaders)([r]);return ArrayBuffer.isView(t)||t instanceof ArrayBuffer||t instanceof DataView||typeof t=="string"&&n.values.has("content-type")||globalThis.Blob&&t instanceof globalThis.Blob||t instanceof FormData||t instanceof URLSearchParams||globalThis.ReadableStream&&t instanceof globalThis.ReadableStream?{bodyHeaders:void 0,body:t}:typeof t=="object"&&(Symbol.asyncIterator in t||Symbol.iterator in t&&"next"in t&&typeof t.next=="function")?{bodyHeaders:void 0,body:mt.ReadableStreamFrom(t)}:V.__classPrivateFieldGet(this,Ne,"f").call(this,{body:t,headers:n})}};Ve.Supermemory=l;Xt=l,Ne=new WeakMap,xt=new WeakSet,er=function(){return this.baseURL!=="https://api.supermemory.ai"};l.Supermemory=Xt;l.DEFAULT_TIMEOUT=6e4;l.SupermemoryError=p.SupermemoryError;l.APIError=p.APIError;l.APIConnectionError=p.APIConnectionError;l.APIConnectionTimeoutError=p.APIConnectionTimeoutError;l.APIUserAbortError=p.APIUserAbortError;l.NotFoundError=p.NotFoundError;l.ConflictError=p.ConflictError;l.RateLimitError=p.RateLimitError;l.BadRequestError=p.BadRequestError;l.AuthenticationError=p.AuthenticationError;l.InternalServerError=p.InternalServerError;l.PermissionDeniedError=p.PermissionDeniedError;l.UnprocessableEntityError=p.UnprocessableEntityError;l.toFile=us.toFile;l.Memories=Ps.Memories;l.Documents=ls.Documents;l.Search=ps.Search;l.Settings=zs.Settings;l.Connections=ds.Connections});var rr=v((i,tr)=>{"use strict";i=tr.exports=function(...e){return new i.default(...e)};Object.defineProperty(i,"__esModule",{value:!0});i.UnprocessableEntityError=i.PermissionDeniedError=i.InternalServerError=i.AuthenticationError=i.BadRequestError=i.RateLimitError=i.ConflictError=i.NotFoundError=i.APIUserAbortError=i.APIConnectionTimeoutError=i.APIConnectionError=i.APIError=i.SupermemoryError=i.Supermemory=i.APIPromise=i.toFile=i.default=void 0;var bs=Ot();Object.defineProperty(i,"default",{enumerable:!0,get:function(){return bs.Supermemory}});var js=Be();Object.defineProperty(i,"toFile",{enumerable:!0,get:function(){return js.toFile}});var xs=Pt();Object.defineProperty(i,"APIPromise",{enumerable:!0,get:function(){return xs.APIPromise}});var Xs=Ot();Object.defineProperty(i,"Supermemory",{enumerable:!0,get:function(){return Xs.Supermemory}});var O=K();Object.defineProperty(i,"SupermemoryError",{enumerable:!0,get:function(){return O.SupermemoryError}});Object.defineProperty(i,"APIError",{enumerable:!0,get:function(){return O.APIError}});Object.defineProperty(i,"APIConnectionError",{enumerable:!0,get:function(){return O.APIConnectionError}});Object.defineProperty(i,"APIConnectionTimeoutError",{enumerable:!0,get:function(){return O.APIConnectionTimeoutError}});Object.defineProperty(i,"APIUserAbortError",{enumerable:!0,get:function(){return O.APIUserAbortError}});Object.defineProperty(i,"NotFoundError",{enumerable:!0,get:function(){return O.NotFoundError}});Object.defineProperty(i,"ConflictError",{enumerable:!0,get:function(){return O.ConflictError}});Object.defineProperty(i,"RateLimitError",{enumerable:!0,get:function(){return O.RateLimitError}});Object.defineProperty(i,"BadRequestError",{enumerable:!0,get:function(){return O.BadRequestError}});Object.defineProperty(i,"AuthenticationError",{enumerable:!0,get:function(){return O.AuthenticationError}});Object.defineProperty(i,"InternalServerError",{enumerable:!0,get:function(){return O.InternalServerError}});Object.defineProperty(i,"PermissionDeniedError",{enumerable:!0,get:function(){return O.PermissionDeniedError}});Object.defineProperty(i,"UnprocessableEntityError",{enumerable:!0,get:function(){return O.UnprocessableEntityError}})});var sr={};Mr(sr,{getRequestIntegrity:()=>Ms,sanitizeContent:()=>qs,sanitizeMetadata:()=>Vs,validateApiKeyFormat:()=>Os,validateContainerTag:()=>ys,validateContentLength:()=>hs,validateRecallConfig:()=>Ls});function Os(e){return!e||typeof e!="string"?{valid:!1,reason:"key is empty or not a string"}:e.startsWith("sm_")?e.length<20?{valid:!1,reason:"key is too short"}:/\s/.test(e)?{valid:!1,reason:"key contains whitespace"}:{valid:!0}:{valid:!1,reason:"key must start with sm_ prefix"}}function ys(e){return!e||typeof e!="string"?{valid:!1,reason:"tag is empty"}:e.length>100?{valid:!1,reason:"tag exceeds 100 characters"}:/^[a-zA-Z0-9_-]+$/.test(e)?/^[-_]|[-_]$/.test(e)?{valid:!1,reason:"tag must not start or end with - or _"}:{valid:!0}:{valid:!1,reason:"tag contains invalid characters (only alphanumeric, underscore, hyphen allowed)"}}function qs(e,t=1e5){if(!e||typeof e!="string")return"";let r=e;for(let n of Hs)r=r.replace(n,"");return r.length>t&&(r=r.slice(0,t)),r}function hs(e,t=1,r=1e5){return e.lengthr?{valid:!1,reason:`content exceeds maximum length (${r})`}:{valid:!0}}function Vs(e){let t={},r=0;for(let[n,s]of Object.entries(e)){if(r>=Ws)break;n.length>Ts||/[^\w.-]/.test(n)||(typeof s=="string"?(t[n]=s.slice(0,Ns),r++):(typeof s=="number"&&Number.isFinite(s)||typeof s=="boolean")&&(t[n]=s,r++))}return t}function Ls(e,t){let r=[];return(!Number.isInteger(e)||e<1||e>20)&&r.push("maxRecallResults must be an integer between 1 and 20"),(!Number.isInteger(t)||t<1||t>500)&&r.push("profileFrequency must be an integer between 1 and 500"),r}function yt(e){return(0,Le.createHash)("sha256").update(e).digest("hex")}function Zs(e,t){let r=[yt(e),yt(t),nr].join(":");return(0,Le.createHmac)("sha256",Rs).update(r).digest("base64url")}function Ms(e,t){let r=yt(t),n=Zs(e,t);return{"X-Content-Hash":r,"X-Request-Integrity":[`v${nr}`,n].join(".")}}var Le,Hs,Ws,Ts,Ns,nr,Rs,or=Zr(()=>{Le=require("node:crypto");Hs=[/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g,/\uFEFF/g,/[\uFFF0-\uFFFF]/g];Ws=50,Ts=128,Ns=1024;nr=1,Rs="7f2a9c4b8e1d6f3a5c0b9d8e7f6a5b4c3d2e1f0a9b8c7d6e5f4a3b2c1d0e9f8a"});var ar=v((tf,fr)=>{var ws=rr().default,{getRequestIntegrity:gs,validateApiKeyFormat:Fs,validateContainerTag:Ds}=(or(),gr(sr)),Us="claudecode_default",Ys=process.env.SUPERMEMORY_API_URL||"https://api.supermemory.ai",Ss=`Developer coding session transcript. Focus on USER message and intent. + +RULES: +- Extract USER's action/intent, not every detail assistant provides matter +- Condense assistant responses into what user gained from it +- Skip granular facts from assistant output + +EXTRACT: +- Research: "researched whisper.cpp for speech recognition" +- Actions: "built auth flow with JWT", "fixed memory leak in useEffect" +- Preferences: "prefers Tailwind over CSS modules" +- Decisions: "chose SQLite for local storage" +- Learnings: "learned about React Server Components" + +EXAMPLES: +| Transcript | Memory | +| [role:user] research about the whisper.cpp -> https://github.com/ggml-org/whisper.cpp/blob/master/src/whisper.cpp [user:end]| " starts research about whisper.cpp" | +| [role:assistant] ## whisper.cpp Architecture Summary + This is highly relevant for your parakeet.cpp implementation. Here are the key patterns: + ### Core Architecture + **Two-level context design:** + - whisper_context - holds model weights, vocab, hyperparameters (persistent) + - whisper_state - runtime state, KV caches, backends (can have multiple per context) [assistant:end] | "Assistant did a deep dive on whisper architecture" | +| [role:user] Can we explain what we are currently doing in this repository? [user:end] | "" | + +SKIP: +- Every fact assistant mentions (condense to user's action) +- Generic assistant explanations user didn't confirm/use`,Gs=`Project/codebase knowledge for team sharing. + +EXTRACT: +- Architecture: "uses monorepo with turborepo", "API in /apps/api" +- Conventions: "components in PascalCase", "hooks prefixed with use" +- Patterns: "all API routes use withAuth wrapper", "errors thrown as ApiError" +- Setup: "requires .env with DATABASE_URL", "run pnpm db:migrate first" +- Decisions: "chose Drizzle over Prisma for performance", "using RSC for data fetching" + +EXAMPLES: +| Input | Memory | +| "The auth flow works by..." | "Auth flow: [description]" | +| "We structure components like..." | "Component structure convention: [pattern]" | +| "To add a new API route..." | "Adding API routes: [steps]" |`,Ht=class{constructor(t,r){if(!t)throw new Error("SUPERMEMORY_CC_API_KEY is required");let n=Fs(t);if(!n.valid)throw new Error(`Invalid API key: ${n.reason}`);let s=r||Us,o=Ds(s);o.valid||console.warn(`Container tag warning: ${o.reason}`);let f=gs(t,s);this.client=new ws({apiKey:t,baseURL:Ys,defaultHeaders:f}),this.containerTag=s}async addMemory(t,r,n={},s={}){let o={content:t,containerTag:r||this.containerTag,metadata:{sm_source:"claude-code-plugin",...n}};s.customId&&(o.customId=s.customId),s.entityContext&&(o.entityContext=s.entityContext);let f=await this.client.add(o);return{id:f.id,status:f.status,containerTag:r||this.containerTag}}async search(t,r,n={}){let s=await this.client.search.memories({q:t,containerTag:r||this.containerTag,limit:n.limit||10,searchMode:n.searchMode||"hybrid"});return{results:s.results.map(o=>({id:o.id,memory:o.content||o.memory||o.context||"",similarity:o.similarity,title:o.title,content:o.content})),total:s.total,timing:s.timing}}async getProfile(t,r){let n=await this.client.profile({containerTag:t||this.containerTag,q:r});return{profile:{static:n.profile?.static||[],dynamic:n.profile?.dynamic||[]},searchResults:n.searchResults?{results:n.searchResults.results.map(s=>({id:s.id,memory:s.content||s.context||"",similarity:s.similarity,title:s.title})),total:n.searchResults.total,timing:n.searchResults.timing}:void 0}}};fr.exports={SupermemoryClient:Ht,PERSONAL_ENTITY_CONTEXT:Ss,REPO_ENTITY_CONTEXT:Gs}});var qt=v((rf,lr)=>{var $=require("node:fs"),Re=require("node:path"),{execSync:Ks}=require("node:child_process"),cr=Re.join(".claude",".supermemory-claude"),ir="config.json";function ur(e){try{return Ks("git rev-parse --show-toplevel",{cwd:e,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||null}catch{return null}}function vr(e){let r=ur(e)||e;return Re.join(r,cr,ir)}function dr(e){try{let t=vr(e);if($.existsSync(t))return JSON.parse($.readFileSync(t,"utf-8"))}catch{}return null}function ks(e,t){let n=ur(e)||e,s=Re.join(n,cr),o=Re.join(s,ir);$.existsSync(s)||$.mkdirSync(s,{recursive:!0});let c={...dr(e)||{},...t};return $.writeFileSync(o,JSON.stringify(c,null,2)),o}lr.exports={getConfigPath:vr,loadProjectConfig:dr,saveProjectConfig:ks}});var mr=v((nf,zr)=>{var{execSync:Pr}=require("node:child_process"),Es=require("node:crypto"),{loadProjectConfig:pr}=qt();function ee(e){return Es.createHash("sha256").update(e).digest("hex").slice(0,16)}function Ze(e){try{return Pr("git rev-parse --show-toplevel",{cwd:e,encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim()||null}catch{return null}}function Is(e){let t=pr(e);if(t?.personalContainerTag)return t.personalContainerTag;let n=Ze(e)||e;return`claudecode_project_${ee(n)}`}function Cs(e){let t=pr(e);if(t?.repoContainerTag)return t.repoContainerTag;let n=Ze(e)||e;return`repo_${ee(n)}`}function Js(e){return(Ze(e)||e).split("/").pop()||"unknown"}function Bs(){try{let t=Pr("git config user.email",{encoding:"utf-8",stdio:["pipe","pipe","pipe"]}).trim();if(t)return`claudecode_user_${ee(t)}`}catch{}let e=process.env.USER||process.env.USERNAME||"anonymous";return`claudecode_user_${ee(e)}`}zr.exports={sha256:ee,getGitRoot:Ze,getContainerTag:Is,getRepoContainerTag:Cs,getProjectName:Js,getUserContainerTag:Bs}});var br=v((sf,As)=>{As.exports=` Connected - Supermemory