claude-mem 13.24.11 → 13.24.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codex-plugin/plugin.json +1 -1
- package/README.md +1 -1
- package/dist/bug-report/index.js +314 -0
- package/dist/npx-cli/index.js +328 -327
- package/openclaw/openclaw.plugin.json +1 -1
- package/package.json +2 -2
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/.codex-plugin/plugin.json +1 -1
- package/plugin/package.json +1 -1
- package/plugin/scripts/mcp-server.cjs +1 -1
- package/plugin/scripts/server-service.cjs +146 -146
- package/plugin/scripts/transcript-watcher.cjs +24 -24
- package/plugin/scripts/worker-service.cjs +327 -323
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"name": "Claude-Mem (Persistent Memory)",
|
|
4
4
|
"description": "OpenClaw plugin for Claude-Mem. Records observations from embedded runner sessions and streams them to messaging channels.",
|
|
5
5
|
"kind": "memory",
|
|
6
|
-
"version": "13.24.
|
|
6
|
+
"version": "13.24.13",
|
|
7
7
|
"license": "Apache-2.0",
|
|
8
8
|
"author": "thedotmack",
|
|
9
9
|
"homepage": "https://claude-mem.ai",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "claude-mem",
|
|
3
|
-
"version": "13.24.
|
|
3
|
+
"version": "13.24.13",
|
|
4
4
|
"description": "Memory compression system for Claude Code - persist context across sessions",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"claude",
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
"translate:tier3": "npm run translate-readme -- vi tl id th hi bn ur ro sv",
|
|
86
86
|
"translate:tier4": "npm run translate-readme -- it el hu fi da no",
|
|
87
87
|
"translate:all": "npm run translate:tier1 & npm run translate:tier2 & npm run translate:tier3 & npm run translate:tier4 & wait",
|
|
88
|
-
"bug-report": "
|
|
88
|
+
"bug-report": "node dist/bug-report/index.js",
|
|
89
89
|
"cursor:install": "bun plugin/scripts/worker-service.cjs cursor install",
|
|
90
90
|
"cursor:uninstall": "bun plugin/scripts/worker-service.cjs cursor uninstall",
|
|
91
91
|
"cursor:status": "bun plugin/scripts/worker-service.cjs cursor status",
|
package/plugin/package.json
CHANGED
|
@@ -219,7 +219,7 @@ ${f}`}let a=s.lineStart;for(let u=s.lineStart-1;u>=0;u--){let l=i[u].trim();if(l
|
|
|
219
219
|
${c}`}ne();var $I=new Set([".js",".jsx",".ts",".tsx",".mjs",".cjs",".py",".pyw",".go",".rs",".rb",".java",".cs",".cpp",".cc",".cxx",".c",".h",".hpp",".hh",".swift",".kt",".kts",".php",".vue",".svelte",".lua",".scala",".sc",".sh",".bash",".zsh",".hs",".zig",".css",".scss",".toml",".yml",".yaml",".sql",".md",".mdx"]),TI=new Set(["node_modules",".git","dist","build",".next","__pycache__",".venv","venv","env",".env","target","vendor",".cache",".turbo","coverage",".nyc_output",".claude",".smart-file-read"]),RI=512*1024;async function*ab(e,t,r=20){if(r<=0)return;let n;try{n=await(0,cn.readdir)(e,{withFileTypes:!0})}catch(o){_.debug("WORKER",`walkDir: failed to read directory ${e}`,void 0,o instanceof Error?o:void 0);return}for(let o of n){if(o.name.startsWith(".")&&o.name!=="."||TI.has(o.name))continue;let s=(0,Po.join)(e,o.name);if(o.isDirectory())yield*ab(s,t,r-1);else if(o.isFile()){let i=o.name.slice(o.name.lastIndexOf("."));$I.has(i)&&(yield s)}}}async function OI(e){try{let t=await(0,cn.stat)(e);if(t.size>RI||t.size===0)return null;let r=await(0,cn.readFile)(e,"utf-8");return r.slice(0,1e3).includes("\0")?null:r}catch(t){return _.debug("WORKER",`safeReadFile: failed to read ${e}`,void 0,t instanceof Error?t:void 0),null}}async function cb(e,t,r={}){let n=r.maxResults||20,o=t.toLowerCase(),s=o.split(/[\s_\-./]+/).filter(h=>h.length>0),i=[];for await(let h of ab(e,e,20)){if(r.filePattern&&!(0,Po.relative)(e,h).toLowerCase().includes(r.filePattern.toLowerCase()))continue;let g=await OI(h);g&&i.push({absolutePath:h,relativePath:(0,Po.relative)(e,h),content:g})}let a=ob(i),c=[],u=[],l=0;for(let[h,g]of a){l+=II(g);let E=Wi(h.toLowerCase(),s)>0,v=[],I=(x,z)=>{for(let j of x){let Ve=0,Pe="",Be=Wi(j.name.toLowerCase(),s);Be>0&&(Ve+=Be*3,Pe="name match"),j.signature.toLowerCase().includes(o)&&(Ve+=2,Pe=Pe?`${Pe} + signature`:"signature match"),j.jsdoc&&j.jsdoc.toLowerCase().includes(o)&&(Ve+=1,Pe=Pe?`${Pe} + jsdoc`:"jsdoc match"),Ve>0&&(E=!0,v.push({filePath:h,symbolName:z?`${z}.${j.name}`:j.name,kind:j.kind,signature:j.signature,jsdoc:j.jsdoc,lineStart:j.lineStart,lineEnd:j.lineEnd,matchReason:Pe})),j.children&&I(j.children,j.name)}};I(g.symbols),E&&(c.push(g),u.push(...v))}u.sort((h,g)=>{let y=Wi(h.symbolName.toLowerCase(),s);return Wi(g.symbolName.toLowerCase(),s)-y});let d=u.slice(0,n),p=new Set(d.map(h=>h.filePath)),f=c.filter(h=>p.has(h.filePath)).slice(0,n),m=f.reduce((h,g)=>h+g.foldedTokenEstimate,0);return{foldedFiles:f,matchingSymbols:d,totalFilesScanned:i.length,totalSymbolsFound:l,tokenEstimate:m}}function Wi(e,t){let r=0;for(let n of t)if(e===n)r+=10;else if(e.includes(n))r+=5;else{let o=0,s=0;for(let i of n){let a=e.indexOf(i,o);a!==-1&&(s++,o=a+1)}s===n.length&&(r+=1)}return r}function II(e){let t=e.symbols.length;for(let r of e.symbols)r.children&&(t+=r.children.length);return t}function ub(e,t){let r=[];if(r.push(`\u{1F50D} Smart Search: "${t}"`),r.push(` Scanned ${e.totalFilesScanned} files, found ${e.totalSymbolsFound} symbols`),r.push(` ${e.matchingSymbols.length} matches across ${e.foldedFiles.length} files (~${e.tokenEstimate} tokens for folded view)`),r.push(""),e.matchingSymbols.length===0)return r.push(" No matching symbols found."),r.join(`
|
|
220
220
|
`);r.push("\u2500\u2500 Matching Symbols \u2500\u2500"),r.push("");for(let n of e.matchingSymbols){if(r.push(` ${n.kind} ${n.symbolName} (${n.filePath}:${n.lineStart+1})`),r.push(` ${n.signature}`),n.jsdoc){let o=n.jsdoc.split(`
|
|
221
221
|
`).find(s=>s.replace(/^[\s*/]+/,"").trim().length>0);o&&r.push(` \u{1F4AC} ${o.replace(/^[\s*/]+/,"").trim()}`)}r.push("")}r.push("\u2500\u2500 Folded File Views \u2500\u2500"),r.push("");for(let n of e.foldedFiles)r.push(an(n)),r.push("");return r.push("\u2500\u2500 Actions \u2500\u2500"),r.push(" To see full implementation: use smart_unfold with file path and symbol name"),r.join(`
|
|
222
|
-
`)}var nd=require("node:fs/promises"),od=require("node:os"),kr=require("node:path");function AI(e){return e==="~"?(0,od.homedir)():e.startsWith("~/")||e.startsWith("~\\")?(0,kr.join)((0,od.homedir)(),e.slice(2)):e}async function Vi(e,t=process.cwd()){if(typeof e!="string"||e.trim().length===0)throw new Error("file_path is required");let r=await(0,nd.realpath)((0,kr.resolve)(t)),n=(0,kr.resolve)(r,AI(e.trim())),o;try{o=await(0,nd.realpath)(n)}catch{o=n}if(o!==r&&!o.startsWith(r+kr.sep))throw new Error(`Access denied: "${e}" resolves outside the workspace (${r}). MCP file tools can only read files within the current project.`);return o}var id=require("node:fs/promises"),Yi=require("node:fs"),rr=require("node:path"),gb=require("node:os"),_b=require("node:url");var lb="claude";function CI(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function Bi(e){if(!e)return lb;let t=CI(e);return t?t==="transcript"||t.includes("codex")?"codex":t.includes("cursor")?"cursor":t.includes("claude")?"claude":t:lb}var MI=er(Oe.API_REQUEST),st=class extends Error{kind;status;cause;constructor(t,r,n={}){super(r),this.name="ServerClientError",this.kind=t,this.status=n.status??null,this.cause=n.cause}isFallbackEligible(){return this.kind==="transport"||this.kind==="timeout"||this.kind==="missing_api_key"||this.kind==="http_error"&&(this.status!==null&&this.status>=500||this.status===429)}},Ki=class{baseUrl;apiKey;timeoutMs;constructor(t){this.baseUrl=zI(t.serverBaseUrl),this.apiKey=t.apiKey,this.timeoutMs=t.timeoutMs??MI}async startSession(t){let r=this.buildStartSessionPayload(t);return this.request("POST","/v1/sessions/start",r)}async recordEvent(t){let r=this.buildEventPayload(t),n=t.generate===!1?"/v1/events?generate=false":"/v1/events";return this.request("POST",n,r)}async endSession(t){if(!t.sessionId)throw new st("invalid_response","sessionId is required for endSession");return this.request("POST",`/v1/sessions/${encodeURIComponent(t.sessionId)}/end`,{})}async addObservation(t){return this.request("POST","/v1/memories",this.buildAddObservationPayload(t))}async searchObservations(t){return this.request("POST","/v1/search",this.buildSearchPayload(t))}async contextObservations(t){return this.request("POST","/v1/context",this.buildSearchPayload(t))}async getJobStatus(t){if(!t)throw new st("invalid_response","jobId is required for getJobStatus");return this.request("GET",`/v1/jobs/${encodeURIComponent(t)}`)}buildAddObservationPayload(t){let r=t.content,n=t.kind??"manual",o=typeof t.metadata?.title=="string"?t.metadata.title:void 0;return{projectId:t.projectId,kind:n,type:n,narrative:r,...o?{title:o}:{},...t.serverSessionId!==void 0?{serverSessionId:t.serverSessionId}:{},...t.contentSessionId!==void 0?{contentSessionId:t.contentSessionId}:{},...t.platformSource!==void 0?{platformSource:t.platformSource}:{},...t.metadata!==void 0?{metadata:t.metadata}:{}}}buildSearchPayload(t){return{projectId:t.projectId,query:t.query,...t.limit!==void 0?{limit:t.limit}:{},...t.platformSource!==void 0?{platformSource:sd(t.platformSource)}:{}}}buildStartSessionPayload(t){return{projectId:t.projectId,...t.externalSessionId!==void 0?{externalSessionId:t.externalSessionId}:{},...t.contentSessionId!==void 0?{contentSessionId:t.contentSessionId}:{},...t.agentId!==void 0?{agentId:t.agentId}:{},...t.agentType!==void 0?{agentType:t.agentType}:{},...t.platformSource!==void 0?{platformSource:sd(t.platformSource)}:{},...t.metadata!==void 0?{metadata:t.metadata}:{}}}buildEventPayload(t){return{projectId:t.projectId,sourceType:t.sourceType,eventType:t.eventType,occurredAtEpoch:t.occurredAtEpoch,...t.serverSessionId!==void 0?{serverSessionId:t.serverSessionId}:{},...t.contentSessionId!==void 0?{contentSessionId:t.contentSessionId}:{},...t.memorySessionId!==void 0?{memorySessionId:t.memorySessionId}:{},...t.platformSource!==void 0?{platformSource:sd(t.platformSource)}:{},...t.payload!==void 0?{payload:t.payload}:{}}}async request(t,r,n){if(!this.apiKey||!this.apiKey.trim())throw new st("missing_api_key","Server API key is not configured (CLAUDE_MEM_SERVER_API_KEY).");let o=`${this.baseUrl}${r}`,s={method:t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}};n!==void 0&&(s.body=JSON.stringify(n));let i;try{i=await Wl(o,s,this.timeoutMs)}catch(c){let u=c instanceof Error?c.message:String(c),l=/timed out|timeout/i.test(u);throw new st(l?"timeout":"transport",`Server ${t} ${r} failed: ${u}`,{cause:c})}if(!i.ok){let c=await i.text().catch(()=>"");throw new st("http_error",`Server ${t} ${r} returned ${i.status}: ${DI(c,200)}`,{status:i.status})}let a=await i.text();if(!a||a.length===0)return{};try{return JSON.parse(a)}catch(c){let u=c instanceof Error?c:new Error(String(c));throw new st("invalid_response",`Server ${t} ${r} returned non-JSON response`,{cause:u})}}};function db(e){return e instanceof st}function zI(e){return e.replace(/\/+$/,"")}function sd(e){return typeof e=="string"?Bi(e):null}function DI(e,t){return e.length<=t?e:`${e.slice(0,t)}\u2026`}ne();function Gi(){let t=(Ti().CLAUDE_MEM_RUNTIME??"worker").trim().toLowerCase();return t==="server"||t==="server-beta"?"server":"worker"}function fb(){let e=Ti(),t=(...i)=>{for(let a of i){let c=(a??"").trim();if(c.length>0)return c}return""},r=t(e.CLAUDE_MEM_SERVER_URL,e.CLAUDE_MEM_SERVER_BETA_URL),n=t(e.CLAUDE_MEM_SERVER_API_KEY,e.CLAUDE_MEM_SERVER_BETA_API_KEY),o=t(e.CLAUDE_MEM_SERVER_PROJECT_ID,e.CLAUDE_MEM_SERVER_BETA_PROJECT_ID);if(!r)return _.warn("HOOK","[server-fallback] reason=missing_base_url"),null;if(!n)return _.warn("HOOK","[server-fallback] reason=missing_api_key"),null;if(!o)return _.warn("HOOK","[server-fallback] reason=missing_project_id"),null;let s={serverBaseUrl:r,apiKey:n};return{runtime:"server",client:new Ki(s),projectId:o,serverBaseUrl:r}}ne();var pb=["observation_add","observation_record_event","observation_search","observation_context","observation_generation_status","memory_add","memory_search","memory_context"],NI=new Set(pb);function mb(e,t){return t==="server"?[...e]:(_.debug("SYSTEM","Filtering server-beta-only MCP tools from worker runtime advertisement",{runtime:t,hiddenToolCount:pb.length}),e.filter(r=>!NI.has(r.name)))}var nA={},LI="13.24.11";console.log=(...e)=>{_.error("CONSOLE","Intercepted console output (MCP protocol protection)",void 0,{args:e})};var yb=!1,Sb=(()=>{if(typeof __dirname<"u")return __dirname;try{return(0,rr.dirname)((0,_b.fileURLToPath)(nA.url))}catch(e){return yb=!0,_.warn("SYSTEM","mcp-server: failed to resolve module directory from import.meta.url, falling back to process.cwd()",void 0,e instanceof Error?e:new Error(String(e))),process.cwd()}})(),ad=jS()??(0,rr.resolve)(Sb,"worker-service.cjs");function jI(){yb&&((0,Yi.existsSync)(ad)||_.error("SYSTEM","mcp-server: dirname resolution failed (both __dirname and import.meta.url are unavailable). Fell back to process.cwd() and the resolved WORKER_SCRIPT_PATH does not exist. This is the actual problem \u2014 the worker bundle is fine, but mcp-server cannot locate it. Worker auto-start will fail until the dirname-resolution path is fixed.",{workerScriptPath:ad,mcpServerDir:Sb}))}async function _t(e,t={}){_.debug("SYSTEM","\u2192 Worker API",void 0,{endpoint:e});try{let r;if(t.body)r=await Fi(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t.body)});else{let n=new URLSearchParams;for(let[o,s]of Object.entries(t.query??{}))s!=null&&n.append(o,String(s));r=await Fi(`${e}?${n}`)}if(!r.ok){let n=await r.text();throw new Error(`Worker API error (${r.status}): ${n}`)}return _.debug("SYSTEM","\u2190 Worker API success",void 0,{endpoint:e}),t.text?{content:[{type:"text",text:await r.text()}]}:t.body?{content:[{type:"text",text:JSON.stringify(await r.json(),null,2)}]}:await r.json()}catch(r){return _.error("SYSTEM","\u2190 Worker API error",{endpoint:e},r instanceof Error?r:new Error(String(r))),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function UI(){try{return(await Fi("/api/health")).ok}catch(e){return _.debug("SYSTEM","Worker health check failed",{},e instanceof Error?e:new Error(String(e))),!1}}function bb(){if(Gi()!=="server")return null;let t=fb();return t?{...t,available:!0}:{runtime:"server",available:!1,reason:"server runtime is selected but configuration is incomplete (missing url, api key, or project id)"}}function FI(e){return db(e)?{content:[{type:"text",text:`Server error (${e.kind}${e.status?` ${e.status}`:""}): ${e.message}`}],isError:!0}:{content:[{type:"text",text:`Tool error: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}function un(e){return{content:[{type:"text",text:JSON.stringify(e,null,2)}]}}function To(e){let t=bb();if(!t)throw new st("transport",`${e} requires CLAUDE_MEM_RUNTIME=server. Current runtime is "worker"; use the existing search/timeline/get_observations tools for worker-mode memory access.`);if(!t.available)throw new st("missing_api_key",`${e}: ${t.reason}`);return t}function Ro(e,t){return async r=>{try{return await t(r)}catch(n){let o=n instanceof Error?n:new Error(String(n));return _.warn("SYSTEM",`${e} failed`,void 0,o),FI(n)}}}var qI=Ro("observation_add",async e=>{let t=To("observation_add");if(typeof e?.content!="string"||e.content.trim().length===0)throw new Error('observation_add: "content" is required');let n={projectId:e.projectId&&e.projectId.trim().length>0?e.projectId:t.projectId,content:e.content,...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.platformSource!==void 0?{platformSource:e.platformSource}:{},...e.kind!==void 0?{kind:e.kind}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}},o=await t.client.addObservation(n);return un(o)});function Xi(e){return typeof e=="string"?Bi(e):null}var ZI=Ro("observation_record_event",async e=>{let t=To("observation_record_event");if(typeof e?.eventType!="string"||e.eventType.trim().length===0)throw new Error('observation_record_event: "eventType" is required');let n={projectId:e.projectId&&e.projectId.trim().length>0?e.projectId:t.projectId,sourceType:e.sourceType??"api",eventType:e.eventType,occurredAtEpoch:typeof e.occurredAtEpoch=="number"?e.occurredAtEpoch:Date.now(),...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.memorySessionId!==void 0?{memorySessionId:e.memorySessionId}:{},...e.platformSource!==void 0?{platformSource:Xi(e.platformSource)}:{},...e.payload!==void 0?{payload:e.payload}:{},...e.generate!==void 0?{generate:e.generate}:{}},o=await t.client.recordEvent(n);return un(o)}),HI=Ro("observation_search",async e=>{let t=To("observation_search");if(typeof e?.query!="string"||e.query.trim().length===0)throw new Error('observation_search: "query" is required');let n={projectId:e.projectId&&e.projectId.trim().length>0?e.projectId:t.projectId,query:e.query,...e.limit!==void 0?{limit:e.limit}:{},...e.platformSource!==void 0?{platformSource:Xi(e.platformSource)}:{}},o=await t.client.searchObservations(n);return un(o)}),WI=Ro("observation_context",async e=>{let t=To("observation_context");if(typeof e?.query!="string"||e.query.trim().length===0)throw new Error('observation_context: "query" is required');let n={projectId:e.projectId&&e.projectId.trim().length>0?e.projectId:t.projectId,query:e.query,...e.limit!==void 0?{limit:e.limit}:{},...e.platformSource!==void 0?{platformSource:Xi(e.platformSource)}:{}},o=await t.client.contextObservations(n);return un(o)});function VI(e){return Array.isArray(e.projects)?e.projects.map(t=>typeof t=="string"?t.trim():"").filter(Boolean):typeof e.projects=="string"?e.projects.split(",").map(t=>t.trim()).filter(Boolean):typeof e.project=="string"&&e.project.trim().length>0?[e.project.trim()]:[]}async function BI(e){let t=VI(e);return t.length===0?{content:[{type:"text",text:'session_start_context: "project" or "projects" is required'}],isError:!0}:_t("/api/context/inject",{query:{projects:t.join(","),...e.platformSource!==void 0?{platformSource:Xi(e.platformSource)}:{},...e.full!==void 0?{full:e.full}:{},...e.colors!==void 0?{colors:e.colors}:{}},text:!0})}var KI=Ro("observation_generation_status",async e=>{let t=To("observation_generation_status"),r=(e?.jobId??e?.job_id??"").trim();if(!r)throw new Error('observation_generation_status: "jobId" is required');let n=await t.client.getJobStatus(r);return un(n)});async function GI(){if(await UI())return!0;_.warn("SYSTEM","Worker not available, attempting auto-start for MCP client"),jI();try{let e=Bl(),t=await WS(e,ad);return t==="dead"&&_.error("SYSTEM","Worker auto-start failed \u2014 MCP tools that require the worker (search, timeline, get_observations) will fail until the worker is running. Check earlier log lines for the specific failure reason (Bun not found, missing worker bundle, port conflict, etc.)."),t!=="dead"}catch(e){return _.error("SYSTEM","Worker auto-start threw \u2014 MCP tools that require the worker (search, timeline, get_observations) will fail until the worker is running.",void 0,e instanceof Error?e:new Error(String(e))),!1}}var Eb=[{name:"important_workflow",description:`LAYERED WORKFLOW (ALWAYS FOLLOW):
|
|
222
|
+
`)}var nd=require("node:fs/promises"),od=require("node:os"),kr=require("node:path");function AI(e){return e==="~"?(0,od.homedir)():e.startsWith("~/")||e.startsWith("~\\")?(0,kr.join)((0,od.homedir)(),e.slice(2)):e}async function Vi(e,t=process.cwd()){if(typeof e!="string"||e.trim().length===0)throw new Error("file_path is required");let r=await(0,nd.realpath)((0,kr.resolve)(t)),n=(0,kr.resolve)(r,AI(e.trim())),o;try{o=await(0,nd.realpath)(n)}catch{o=n}if(o!==r&&!o.startsWith(r+kr.sep))throw new Error(`Access denied: "${e}" resolves outside the workspace (${r}). MCP file tools can only read files within the current project.`);return o}var id=require("node:fs/promises"),Yi=require("node:fs"),rr=require("node:path"),gb=require("node:os"),_b=require("node:url");var lb="claude";function CI(e){return e.trim().toLowerCase().replace(/\s+/g,"-")}function Bi(e){if(!e)return lb;let t=CI(e);return t?t==="transcript"||t.includes("codex")?"codex":t.includes("cursor")?"cursor":t.includes("claude")?"claude":t:lb}var MI=er(Oe.API_REQUEST),st=class extends Error{kind;status;cause;constructor(t,r,n={}){super(r),this.name="ServerClientError",this.kind=t,this.status=n.status??null,this.cause=n.cause}isFallbackEligible(){return this.kind==="transport"||this.kind==="timeout"||this.kind==="missing_api_key"||this.kind==="http_error"&&(this.status!==null&&this.status>=500||this.status===429)}},Ki=class{baseUrl;apiKey;timeoutMs;constructor(t){this.baseUrl=zI(t.serverBaseUrl),this.apiKey=t.apiKey,this.timeoutMs=t.timeoutMs??MI}async startSession(t){let r=this.buildStartSessionPayload(t);return this.request("POST","/v1/sessions/start",r)}async recordEvent(t){let r=this.buildEventPayload(t),n=t.generate===!1?"/v1/events?generate=false":"/v1/events";return this.request("POST",n,r)}async endSession(t){if(!t.sessionId)throw new st("invalid_response","sessionId is required for endSession");return this.request("POST",`/v1/sessions/${encodeURIComponent(t.sessionId)}/end`,{})}async addObservation(t){return this.request("POST","/v1/memories",this.buildAddObservationPayload(t))}async searchObservations(t){return this.request("POST","/v1/search",this.buildSearchPayload(t))}async contextObservations(t){return this.request("POST","/v1/context",this.buildSearchPayload(t))}async getJobStatus(t){if(!t)throw new st("invalid_response","jobId is required for getJobStatus");return this.request("GET",`/v1/jobs/${encodeURIComponent(t)}`)}buildAddObservationPayload(t){let r=t.content,n=t.kind??"manual",o=typeof t.metadata?.title=="string"?t.metadata.title:void 0;return{projectId:t.projectId,kind:n,type:n,narrative:r,...o?{title:o}:{},...t.serverSessionId!==void 0?{serverSessionId:t.serverSessionId}:{},...t.contentSessionId!==void 0?{contentSessionId:t.contentSessionId}:{},...t.platformSource!==void 0?{platformSource:t.platformSource}:{},...t.metadata!==void 0?{metadata:t.metadata}:{}}}buildSearchPayload(t){return{projectId:t.projectId,query:t.query,...t.limit!==void 0?{limit:t.limit}:{},...t.platformSource!==void 0?{platformSource:sd(t.platformSource)}:{}}}buildStartSessionPayload(t){return{projectId:t.projectId,...t.externalSessionId!==void 0?{externalSessionId:t.externalSessionId}:{},...t.contentSessionId!==void 0?{contentSessionId:t.contentSessionId}:{},...t.agentId!==void 0?{agentId:t.agentId}:{},...t.agentType!==void 0?{agentType:t.agentType}:{},...t.platformSource!==void 0?{platformSource:sd(t.platformSource)}:{},...t.metadata!==void 0?{metadata:t.metadata}:{}}}buildEventPayload(t){return{projectId:t.projectId,sourceType:t.sourceType,eventType:t.eventType,occurredAtEpoch:t.occurredAtEpoch,...t.serverSessionId!==void 0?{serverSessionId:t.serverSessionId}:{},...t.contentSessionId!==void 0?{contentSessionId:t.contentSessionId}:{},...t.memorySessionId!==void 0?{memorySessionId:t.memorySessionId}:{},...t.platformSource!==void 0?{platformSource:sd(t.platformSource)}:{},...t.payload!==void 0?{payload:t.payload}:{}}}async request(t,r,n){if(!this.apiKey||!this.apiKey.trim())throw new st("missing_api_key","Server API key is not configured (CLAUDE_MEM_SERVER_API_KEY).");let o=`${this.baseUrl}${r}`,s={method:t,headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.apiKey}`}};n!==void 0&&(s.body=JSON.stringify(n));let i;try{i=await Wl(o,s,this.timeoutMs)}catch(c){let u=c instanceof Error?c.message:String(c),l=/timed out|timeout/i.test(u);throw new st(l?"timeout":"transport",`Server ${t} ${r} failed: ${u}`,{cause:c})}if(!i.ok){let c=await i.text().catch(()=>"");throw new st("http_error",`Server ${t} ${r} returned ${i.status}: ${DI(c,200)}`,{status:i.status})}let a=await i.text();if(!a||a.length===0)return{};try{return JSON.parse(a)}catch(c){let u=c instanceof Error?c:new Error(String(c));throw new st("invalid_response",`Server ${t} ${r} returned non-JSON response`,{cause:u})}}};function db(e){return e instanceof st}function zI(e){return e.replace(/\/+$/,"")}function sd(e){return typeof e=="string"?Bi(e):null}function DI(e,t){return e.length<=t?e:`${e.slice(0,t)}\u2026`}ne();function Gi(){let t=(Ti().CLAUDE_MEM_RUNTIME??"worker").trim().toLowerCase();return t==="server"||t==="server-beta"?"server":"worker"}function fb(){let e=Ti(),t=(...i)=>{for(let a of i){let c=(a??"").trim();if(c.length>0)return c}return""},r=t(e.CLAUDE_MEM_SERVER_URL,e.CLAUDE_MEM_SERVER_BETA_URL),n=t(e.CLAUDE_MEM_SERVER_API_KEY,e.CLAUDE_MEM_SERVER_BETA_API_KEY),o=t(e.CLAUDE_MEM_SERVER_PROJECT_ID,e.CLAUDE_MEM_SERVER_BETA_PROJECT_ID);if(!r)return _.warn("HOOK","[server-fallback] reason=missing_base_url"),null;if(!n)return _.warn("HOOK","[server-fallback] reason=missing_api_key"),null;if(!o)return _.warn("HOOK","[server-fallback] reason=missing_project_id"),null;let s={serverBaseUrl:r,apiKey:n};return{runtime:"server",client:new Ki(s),projectId:o,serverBaseUrl:r}}ne();var pb=["observation_add","observation_record_event","observation_search","observation_context","observation_generation_status","memory_add","memory_search","memory_context"],NI=new Set(pb);function mb(e,t){return t==="server"?[...e]:(_.debug("SYSTEM","Filtering server-beta-only MCP tools from worker runtime advertisement",{runtime:t,hiddenToolCount:pb.length}),e.filter(r=>!NI.has(r.name)))}var nA={},LI="13.24.13";console.log=(...e)=>{_.error("CONSOLE","Intercepted console output (MCP protocol protection)",void 0,{args:e})};var yb=!1,Sb=(()=>{if(typeof __dirname<"u")return __dirname;try{return(0,rr.dirname)((0,_b.fileURLToPath)(nA.url))}catch(e){return yb=!0,_.warn("SYSTEM","mcp-server: failed to resolve module directory from import.meta.url, falling back to process.cwd()",void 0,e instanceof Error?e:new Error(String(e))),process.cwd()}})(),ad=jS()??(0,rr.resolve)(Sb,"worker-service.cjs");function jI(){yb&&((0,Yi.existsSync)(ad)||_.error("SYSTEM","mcp-server: dirname resolution failed (both __dirname and import.meta.url are unavailable). Fell back to process.cwd() and the resolved WORKER_SCRIPT_PATH does not exist. This is the actual problem \u2014 the worker bundle is fine, but mcp-server cannot locate it. Worker auto-start will fail until the dirname-resolution path is fixed.",{workerScriptPath:ad,mcpServerDir:Sb}))}async function _t(e,t={}){_.debug("SYSTEM","\u2192 Worker API",void 0,{endpoint:e});try{let r;if(t.body)r=await Fi(e,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t.body)});else{let n=new URLSearchParams;for(let[o,s]of Object.entries(t.query??{}))s!=null&&n.append(o,String(s));r=await Fi(`${e}?${n}`)}if(!r.ok){let n=await r.text();throw new Error(`Worker API error (${r.status}): ${n}`)}return _.debug("SYSTEM","\u2190 Worker API success",void 0,{endpoint:e}),t.text?{content:[{type:"text",text:await r.text()}]}:t.body?{content:[{type:"text",text:JSON.stringify(await r.json(),null,2)}]}:await r.json()}catch(r){return _.error("SYSTEM","\u2190 Worker API error",{endpoint:e},r instanceof Error?r:new Error(String(r))),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function UI(){try{return(await Fi("/api/health")).ok}catch(e){return _.debug("SYSTEM","Worker health check failed",{},e instanceof Error?e:new Error(String(e))),!1}}function bb(){if(Gi()!=="server")return null;let t=fb();return t?{...t,available:!0}:{runtime:"server",available:!1,reason:"server runtime is selected but configuration is incomplete (missing url, api key, or project id)"}}function FI(e){return db(e)?{content:[{type:"text",text:`Server error (${e.kind}${e.status?` ${e.status}`:""}): ${e.message}`}],isError:!0}:{content:[{type:"text",text:`Tool error: ${e instanceof Error?e.message:String(e)}`}],isError:!0}}function un(e){return{content:[{type:"text",text:JSON.stringify(e,null,2)}]}}function To(e){let t=bb();if(!t)throw new st("transport",`${e} requires CLAUDE_MEM_RUNTIME=server. Current runtime is "worker"; use the existing search/timeline/get_observations tools for worker-mode memory access.`);if(!t.available)throw new st("missing_api_key",`${e}: ${t.reason}`);return t}function Ro(e,t){return async r=>{try{return await t(r)}catch(n){let o=n instanceof Error?n:new Error(String(n));return _.warn("SYSTEM",`${e} failed`,void 0,o),FI(n)}}}var qI=Ro("observation_add",async e=>{let t=To("observation_add");if(typeof e?.content!="string"||e.content.trim().length===0)throw new Error('observation_add: "content" is required');let n={projectId:e.projectId&&e.projectId.trim().length>0?e.projectId:t.projectId,content:e.content,...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.platformSource!==void 0?{platformSource:e.platformSource}:{},...e.kind!==void 0?{kind:e.kind}:{},...e.metadata!==void 0?{metadata:e.metadata}:{}},o=await t.client.addObservation(n);return un(o)});function Xi(e){return typeof e=="string"?Bi(e):null}var ZI=Ro("observation_record_event",async e=>{let t=To("observation_record_event");if(typeof e?.eventType!="string"||e.eventType.trim().length===0)throw new Error('observation_record_event: "eventType" is required');let n={projectId:e.projectId&&e.projectId.trim().length>0?e.projectId:t.projectId,sourceType:e.sourceType??"api",eventType:e.eventType,occurredAtEpoch:typeof e.occurredAtEpoch=="number"?e.occurredAtEpoch:Date.now(),...e.serverSessionId!==void 0?{serverSessionId:e.serverSessionId}:{},...e.contentSessionId!==void 0?{contentSessionId:e.contentSessionId}:{},...e.memorySessionId!==void 0?{memorySessionId:e.memorySessionId}:{},...e.platformSource!==void 0?{platformSource:Xi(e.platformSource)}:{},...e.payload!==void 0?{payload:e.payload}:{},...e.generate!==void 0?{generate:e.generate}:{}},o=await t.client.recordEvent(n);return un(o)}),HI=Ro("observation_search",async e=>{let t=To("observation_search");if(typeof e?.query!="string"||e.query.trim().length===0)throw new Error('observation_search: "query" is required');let n={projectId:e.projectId&&e.projectId.trim().length>0?e.projectId:t.projectId,query:e.query,...e.limit!==void 0?{limit:e.limit}:{},...e.platformSource!==void 0?{platformSource:Xi(e.platformSource)}:{}},o=await t.client.searchObservations(n);return un(o)}),WI=Ro("observation_context",async e=>{let t=To("observation_context");if(typeof e?.query!="string"||e.query.trim().length===0)throw new Error('observation_context: "query" is required');let n={projectId:e.projectId&&e.projectId.trim().length>0?e.projectId:t.projectId,query:e.query,...e.limit!==void 0?{limit:e.limit}:{},...e.platformSource!==void 0?{platformSource:Xi(e.platformSource)}:{}},o=await t.client.contextObservations(n);return un(o)});function VI(e){return Array.isArray(e.projects)?e.projects.map(t=>typeof t=="string"?t.trim():"").filter(Boolean):typeof e.projects=="string"?e.projects.split(",").map(t=>t.trim()).filter(Boolean):typeof e.project=="string"&&e.project.trim().length>0?[e.project.trim()]:[]}async function BI(e){let t=VI(e);return t.length===0?{content:[{type:"text",text:'session_start_context: "project" or "projects" is required'}],isError:!0}:_t("/api/context/inject",{query:{projects:t.join(","),...e.platformSource!==void 0?{platformSource:Xi(e.platformSource)}:{},...e.full!==void 0?{full:e.full}:{},...e.colors!==void 0?{colors:e.colors}:{}},text:!0})}var KI=Ro("observation_generation_status",async e=>{let t=To("observation_generation_status"),r=(e?.jobId??e?.job_id??"").trim();if(!r)throw new Error('observation_generation_status: "jobId" is required');let n=await t.client.getJobStatus(r);return un(n)});async function GI(){if(await UI())return!0;_.warn("SYSTEM","Worker not available, attempting auto-start for MCP client"),jI();try{let e=Bl(),t=await WS(e,ad);return t==="dead"&&_.error("SYSTEM","Worker auto-start failed \u2014 MCP tools that require the worker (search, timeline, get_observations) will fail until the worker is running. Check earlier log lines for the specific failure reason (Bun not found, missing worker bundle, port conflict, etc.)."),t!=="dead"}catch(e){return _.error("SYSTEM","Worker auto-start threw \u2014 MCP tools that require the worker (search, timeline, get_observations) will fail until the worker is running.",void 0,e instanceof Error?e:new Error(String(e))),!1}}var Eb=[{name:"important_workflow",description:`LAYERED WORKFLOW (ALWAYS FOLLOW):
|
|
223
223
|
1. search(query) \u2192 Get index with IDs (~50-100 tokens/result)
|
|
224
224
|
2. timeline(anchor=ID) \u2192 Get context around interesting results
|
|
225
225
|
3. get_observations([IDs]) \u2192 Fetch full details ONLY for filtered IDs
|