From 34358ab33d46c3907f25f9d97a6c13782e673fdd Mon Sep 17 00:00:00 2001 From: Alex Newman Date: Mon, 16 Feb 2026 00:05:13 -0500 Subject: [PATCH 1/2] feat: add systemMessage support for SessionStart hook and tune defaults Add systemMessage field to HookResult so SessionStart can display a colored timeline directly to the user in the CLI. The handler now parallel-fetches both markdown (for Claude context) and ANSI-colored (for user display) timelines, appending a viewer URL link. Also update default settings to hide verbose token columns (read/work tokens, savings amount) and disable full observation expansion, keeping the cleaner index-only view by default. Co-Authored-By: Claude Opus 4.6 --- plugin/scripts/context-generator.cjs | 34 +++++++++++++-------------- plugin/scripts/mcp-server.cjs | 2 +- plugin/scripts/worker-service.cjs | 6 +++-- src/cli/adapters/claude-code.ts | 6 ++++- src/cli/handlers/context.ts | 17 +++++++++++--- src/cli/types.ts | 1 + src/shared/SettingsDefaultsManager.ts | 8 +++---- 7 files changed, 46 insertions(+), 28 deletions(-) diff --git a/plugin/scripts/context-generator.cjs b/plugin/scripts/context-generator.cjs index eb0a2a50..7c9bf02e 100644 --- a/plugin/scripts/context-generator.cjs +++ b/plugin/scripts/context-generator.cjs @@ -1,12 +1,12 @@ -"use strict";var ut=Object.create;var U=Object.defineProperty;var lt=Object.getOwnPropertyDescriptor;var Et=Object.getOwnPropertyNames;var Tt=Object.getPrototypeOf,gt=Object.prototype.hasOwnProperty;var ft=(r,e)=>{for(var t in e)U(r,t,{get:e[t],enumerable:!0})},se=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Et(e))!gt.call(r,n)&&n!==t&&U(r,n,{get:()=>e[n],enumerable:!(s=lt(e,n))||s.enumerable});return r};var v=(r,e,t)=>(t=r!=null?ut(Tt(r)):{},se(e||!r||!r.__esModule?U(t,"default",{value:r,enumerable:!0}):t,r)),St=r=>se(U({},"__esModule",{value:!0}),r);var xt={};ft(xt,{generateContext:()=>te});module.exports=St(xt);var ct=v(require("path"),1),mt=require("os"),_t=require("fs");var le=require("bun:sqlite");var b=require("path"),de=require("os"),pe=require("fs");var ce=require("url");var C=require("fs"),w=require("path"),oe=require("os");var re="bugfix,feature,refactor,discovery,decision,change",ne="how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off";var A=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777",CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,w.join)((0,oe.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"true",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"true",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"true",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:re,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:ne,CLAUDE_MEM_CONTEXT_FULL_COUNT:"5",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){return this.DEFAULTS[e]}static getInt(e){let t=this.get(e);return parseInt(t,10)}static getBool(e){let t=this.get(e);return t==="true"||t===!0}static applyEnvOverrides(e){let t={...e};for(let s of Object.keys(this.DEFAULTS))process.env[s]!==void 0&&(t[s]=process.env[s]);return t}static loadFromFile(e){try{if(!(0,C.existsSync)(e)){let i=this.getAllDefaults();try{let a=(0,w.dirname)(e);(0,C.existsSync)(a)||(0,C.mkdirSync)(a,{recursive:!0}),(0,C.writeFileSync)(e,JSON.stringify(i,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(a){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,a)}return this.applyEnvOverrides(i)}let t=(0,C.readFileSync)(e,"utf-8"),s=JSON.parse(t),n=s;if(s.env&&typeof s.env=="object"){n=s.env;try{(0,C.writeFileSync)(e,JSON.stringify(n,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(i){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,i)}}let o={...this.DEFAULTS};for(let i of Object.keys(this.DEFAULTS))n[i]!==void 0&&(o[i]=n[i]);return this.applyEnvOverrides(o)}catch(t){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,t),this.applyEnvOverrides(this.getAllDefaults())}}};var I=require("fs"),M=require("path"),ae=require("os"),H=(o=>(o[o.DEBUG=0]="DEBUG",o[o.INFO=1]="INFO",o[o.WARN=2]="WARN",o[o.ERROR=3]="ERROR",o[o.SILENT=4]="SILENT",o))(H||{}),ie=(0,M.join)((0,ae.homedir)(),".claude-mem"),W=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){if(!this.logFileInitialized){this.logFileInitialized=!0;try{let e=(0,M.join)(ie,"logs");(0,I.existsSync)(e)||(0,I.mkdirSync)(e,{recursive:!0});let t=new Date().toISOString().split("T")[0];this.logFilePath=(0,M.join)(e,`claude-mem-${t}.log`)}catch(e){console.error("[LOGGER] Failed to initialize log file:",e),this.logFilePath=null}}}getLevel(){if(this.level===null)try{let e=(0,M.join)(ie,"settings.json");if((0,I.existsSync)(e)){let t=(0,I.readFileSync)(e,"utf-8"),n=(JSON.parse(t).CLAUDE_MEM_LOG_LEVEL||"INFO").toUpperCase();this.level=H[n]??1}else this.level=1}catch{this.level=1}return this.level}correlationId(e,t){return`obs-${e}-${t}`}sessionId(e){return`session-${e}`}formatData(e){if(e==null)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return e.toString();if(typeof e=="object"){if(e instanceof Error)return this.getLevel()===0?`${e.message} +"use strict";var lt=Object.create;var U=Object.defineProperty;var ut=Object.getOwnPropertyDescriptor;var Et=Object.getOwnPropertyNames;var Tt=Object.getPrototypeOf,gt=Object.prototype.hasOwnProperty;var ft=(r,e)=>{for(var t in e)U(r,t,{get:e[t],enumerable:!0})},se=(r,e,t,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Et(e))!gt.call(r,n)&&n!==t&&U(r,n,{get:()=>e[n],enumerable:!(s=ut(e,n))||s.enumerable});return r};var v=(r,e,t)=>(t=r!=null?lt(Tt(r)):{},se(e||!r||!r.__esModule?U(t,"default",{value:r,enumerable:!0}):t,r)),St=r=>se(U({},"__esModule",{value:!0}),r);var xt={};ft(xt,{generateContext:()=>te});module.exports=St(xt);var ct=v(require("path"),1),mt=require("os"),_t=require("fs");var ue=require("bun:sqlite");var b=require("path"),de=require("os"),pe=require("fs");var ce=require("url");var C=require("fs"),w=require("path"),oe=require("os");var re="bugfix,feature,refactor,discovery,decision,change",ne="how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off";var A=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777",CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,w.join)((0,oe.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:re,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:ne,CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){return this.DEFAULTS[e]}static getInt(e){let t=this.get(e);return parseInt(t,10)}static getBool(e){let t=this.get(e);return t==="true"||t===!0}static applyEnvOverrides(e){let t={...e};for(let s of Object.keys(this.DEFAULTS))process.env[s]!==void 0&&(t[s]=process.env[s]);return t}static loadFromFile(e){try{if(!(0,C.existsSync)(e)){let i=this.getAllDefaults();try{let a=(0,w.dirname)(e);(0,C.existsSync)(a)||(0,C.mkdirSync)(a,{recursive:!0}),(0,C.writeFileSync)(e,JSON.stringify(i,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(a){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,a)}return this.applyEnvOverrides(i)}let t=(0,C.readFileSync)(e,"utf-8"),s=JSON.parse(t),n=s;if(s.env&&typeof s.env=="object"){n=s.env;try{(0,C.writeFileSync)(e,JSON.stringify(n,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(i){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,i)}}let o={...this.DEFAULTS};for(let i of Object.keys(this.DEFAULTS))n[i]!==void 0&&(o[i]=n[i]);return this.applyEnvOverrides(o)}catch(t){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,t),this.applyEnvOverrides(this.getAllDefaults())}}};var I=require("fs"),M=require("path"),ae=require("os"),H=(o=>(o[o.DEBUG=0]="DEBUG",o[o.INFO=1]="INFO",o[o.WARN=2]="WARN",o[o.ERROR=3]="ERROR",o[o.SILENT=4]="SILENT",o))(H||{}),ie=(0,M.join)((0,ae.homedir)(),".claude-mem"),W=class{level=null;useColor;logFilePath=null;logFileInitialized=!1;constructor(){this.useColor=process.stdout.isTTY??!1}ensureLogFileInitialized(){if(!this.logFileInitialized){this.logFileInitialized=!0;try{let e=(0,M.join)(ie,"logs");(0,I.existsSync)(e)||(0,I.mkdirSync)(e,{recursive:!0});let t=new Date().toISOString().split("T")[0];this.logFilePath=(0,M.join)(e,`claude-mem-${t}.log`)}catch(e){console.error("[LOGGER] Failed to initialize log file:",e),this.logFilePath=null}}}getLevel(){if(this.level===null)try{let e=(0,M.join)(ie,"settings.json");if((0,I.existsSync)(e)){let t=(0,I.readFileSync)(e,"utf-8"),n=(JSON.parse(t).CLAUDE_MEM_LOG_LEVEL||"INFO").toUpperCase();this.level=H[n]??1}else this.level=1}catch{this.level=1}return this.level}correlationId(e,t){return`obs-${e}-${t}`}sessionId(e){return`session-${e}`}formatData(e){if(e==null)return"";if(typeof e=="string")return e;if(typeof e=="number"||typeof e=="boolean")return e.toString();if(typeof e=="object"){if(e instanceof Error)return this.getLevel()===0?`${e.message} ${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let t=Object.keys(e);return t.length===0?"{}":t.length<=3?JSON.stringify(e):`{${t.length} keys: ${t.slice(0,3).join(", ")}...}`}return String(e)}formatTool(e,t){if(!t)return e;let s=t;if(typeof t=="string")try{s=JSON.parse(t)}catch{s=t}if(e==="Bash"&&s.command)return`${e}(${s.command})`;if(s.file_path)return`${e}(${s.file_path})`;if(s.notebook_path)return`${e}(${s.notebook_path})`;if(e==="Glob"&&s.pattern)return`${e}(${s.pattern})`;if(e==="Grep"&&s.pattern)return`${e}(${s.pattern})`;if(s.url)return`${e}(${s.url})`;if(s.query)return`${e}(${s.query})`;if(e==="Task"){if(s.subagent_type)return`${e}(${s.subagent_type})`;if(s.description)return`${e}(${s.description})`}return e==="Skill"&&s.skill?`${e}(${s.skill})`:e==="LSP"&&s.operation?`${e}(${s.operation})`:e}formatTimestamp(e){let t=e.getFullYear(),s=String(e.getMonth()+1).padStart(2,"0"),n=String(e.getDate()).padStart(2,"0"),o=String(e.getHours()).padStart(2,"0"),i=String(e.getMinutes()).padStart(2,"0"),a=String(e.getSeconds()).padStart(2,"0"),d=String(e.getMilliseconds()).padStart(3,"0");return`${t}-${s}-${n} ${o}:${i}:${a}.${d}`}log(e,t,s,n,o){if(e0&&(u=` {${Object.entries(l).map(([f,R])=>`${f}=${R}`).join(", ")}}`)}let T=`[${i}] [${a}] [${d}] ${c}${s}${u}${_}`;if(this.logFilePath)try{(0,I.appendFileSync)(this.logFilePath,T+` +`+JSON.stringify(o,null,2):_=" "+this.formatData(o));let l="";if(n){let{sessionId:E,memorySessionId:g,correlationId:h,...u}=n;Object.keys(u).length>0&&(l=` {${Object.entries(u).map(([f,R])=>`${f}=${R}`).join(", ")}}`)}let T=`[${i}] [${a}] [${d}] ${c}${s}${l}${_}`;if(this.logFilePath)try{(0,I.appendFileSync)(this.logFilePath,T+` `,"utf8")}catch(E){process.stderr.write(`[LOGGER] Failed to write to log file: ${E} `)}else process.stderr.write(T+` `)}debug(e,t,s,n){this.log(0,e,t,s,n)}info(e,t,s,n){this.log(1,e,t,s,n)}warn(e,t,s,n){this.log(2,e,t,s,n)}error(e,t,s,n){this.log(3,e,t,s,n)}dataIn(e,t,s,n){this.info(e,`\u2192 ${t}`,s,n)}dataOut(e,t,s,n){this.info(e,`\u2190 ${t}`,s,n)}success(e,t,s,n){this.info(e,`\u2713 ${t}`,s,n)}failure(e,t,s,n){this.error(e,`\u2717 ${t}`,s,n)}timing(e,t,s,n){this.info(e,`\u23F1 ${t}`,n,{duration:`${s}ms`})}happyPathError(e,t,s,n,o=""){let c=((new Error().stack||"").split(` -`)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),_=c?`${c[1].split("/").pop()}:${c[2]}`:"unknown",u={...s,location:_};return this.warn(e,`[HAPPY-PATH] ${t}`,u,n),o}},m=new W;var Ot={};function bt(){return typeof __dirname<"u"?__dirname:(0,b.dirname)((0,ce.fileURLToPath)(Ot.url))}var ht=bt(),N=A.get("CLAUDE_MEM_DATA_DIR"),y=process.env.CLAUDE_CONFIG_DIR||(0,b.join)((0,de.homedir)(),".claude"),Bt=(0,b.join)(y,"plugins","marketplaces","thedotmack"),Ht=(0,b.join)(N,"archives"),Wt=(0,b.join)(N,"logs"),Yt=(0,b.join)(N,"trash"),Vt=(0,b.join)(N,"backups"),qt=(0,b.join)(N,"modes"),Kt=(0,b.join)(N,"settings.json"),me=(0,b.join)(N,"claude-mem.db"),Jt=(0,b.join)(N,"vector-db"),zt=(0,b.join)(N,"observer-sessions"),Qt=(0,b.join)(y,"settings.json"),Zt=(0,b.join)(y,"commands"),es=(0,b.join)(y,"CLAUDE.md");function _e(r){(0,pe.mkdirSync)(r,{recursive:!0})}function ue(){return(0,b.join)(ht,"..")}var $=class{db;constructor(e=me){e!==":memory:"&&_e(N),this.db=new le.Database(e),this.db.run("PRAGMA journal_mode = WAL"),this.db.run("PRAGMA synchronous = NORMAL"),this.db.run("PRAGMA foreign_keys = ON"),this.initializeSchema(),this.ensureWorkerPortColumn(),this.ensurePromptTrackingColumns(),this.removeSessionSummariesUniqueConstraint(),this.addObservationHierarchicalFields(),this.makeObservationsTextNullable(),this.createUserPromptsTable(),this.ensureDiscoveryTokensColumn(),this.createPendingMessagesTable(),this.renameSessionIdColumns(),this.repairSessionIdColumnRename(),this.addFailedAtEpochColumn(),this.addOnUpdateCascadeToForeignKeys()}initializeSchema(){this.db.run(` +`)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),_=c?`${c[1].split("/").pop()}:${c[2]}`:"unknown",l={...s,location:_};return this.warn(e,`[HAPPY-PATH] ${t}`,l,n),o}},m=new W;var Ot={};function bt(){return typeof __dirname<"u"?__dirname:(0,b.dirname)((0,ce.fileURLToPath)(Ot.url))}var ht=bt(),N=A.get("CLAUDE_MEM_DATA_DIR"),y=process.env.CLAUDE_CONFIG_DIR||(0,b.join)((0,de.homedir)(),".claude"),Bt=(0,b.join)(y,"plugins","marketplaces","thedotmack"),Ht=(0,b.join)(N,"archives"),Wt=(0,b.join)(N,"logs"),Yt=(0,b.join)(N,"trash"),Vt=(0,b.join)(N,"backups"),qt=(0,b.join)(N,"modes"),Kt=(0,b.join)(N,"settings.json"),me=(0,b.join)(N,"claude-mem.db"),Jt=(0,b.join)(N,"vector-db"),zt=(0,b.join)(N,"observer-sessions"),Qt=(0,b.join)(y,"settings.json"),Zt=(0,b.join)(y,"commands"),es=(0,b.join)(y,"CLAUDE.md");function _e(r){(0,pe.mkdirSync)(r,{recursive:!0})}function le(){return(0,b.join)(ht,"..")}var $=class{db;constructor(e=me){e!==":memory:"&&_e(N),this.db=new ue.Database(e),this.db.run("PRAGMA journal_mode = WAL"),this.db.run("PRAGMA synchronous = NORMAL"),this.db.run("PRAGMA foreign_keys = ON"),this.initializeSchema(),this.ensureWorkerPortColumn(),this.ensurePromptTrackingColumns(),this.removeSessionSummariesUniqueConstraint(),this.addObservationHierarchicalFields(),this.makeObservationsTextNullable(),this.createUserPromptsTable(),this.ensureDiscoveryTokensColumn(),this.createPendingMessagesTable(),this.renameSessionIdColumns(),this.repairSessionIdColumnRename(),this.addFailedAtEpochColumn(),this.addOnUpdateCascadeToForeignKeys()}initializeSchema(){this.db.run(` CREATE TABLE IF NOT EXISTS schema_versions ( id INTEGER PRIMARY KEY, version INTEGER UNIQUE NOT NULL, @@ -382,7 +382,7 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=` SELECT * FROM observations WHERE id = ? - `).get(e)||null}getObservationsByIds(e,t={}){if(e.length===0)return[];let{orderBy:s="date_desc",limit:n,project:o,type:i,concepts:a,files:d}=t,c=s==="date_asc"?"ASC":"DESC",_=n?`LIMIT ${n}`:"",u=e.map(()=>"?").join(","),T=[...e],E=[];if(o&&(E.push("project = ?"),T.push(o)),i)if(Array.isArray(i)){let l=i.map(()=>"?").join(",");E.push(`type IN (${l})`),T.push(...i)}else E.push("type = ?"),T.push(i);if(a){let l=Array.isArray(a)?a:[a],S=l.map(()=>"EXISTS (SELECT 1 FROM json_each(concepts) WHERE value = ?)");T.push(...l),E.push(`(${S.join(" OR ")})`)}if(d){let l=Array.isArray(d)?d:[d],S=l.map(()=>"(EXISTS (SELECT 1 FROM json_each(files_read) WHERE value LIKE ?) OR EXISTS (SELECT 1 FROM json_each(files_modified) WHERE value LIKE ?))");l.forEach(f=>{T.push(`%${f}%`,`%${f}%`)}),E.push(`(${S.join(" OR ")})`)}let g=E.length>0?`WHERE id IN (${u}) AND ${E.join(" AND ")}`:`WHERE id IN (${u})`;return this.db.prepare(` + `).get(e)||null}getObservationsByIds(e,t={}){if(e.length===0)return[];let{orderBy:s="date_desc",limit:n,project:o,type:i,concepts:a,files:d}=t,c=s==="date_asc"?"ASC":"DESC",_=n?`LIMIT ${n}`:"",l=e.map(()=>"?").join(","),T=[...e],E=[];if(o&&(E.push("project = ?"),T.push(o)),i)if(Array.isArray(i)){let u=i.map(()=>"?").join(",");E.push(`type IN (${u})`),T.push(...i)}else E.push("type = ?"),T.push(i);if(a){let u=Array.isArray(a)?a:[a],S=u.map(()=>"EXISTS (SELECT 1 FROM json_each(concepts) WHERE value = ?)");T.push(...u),E.push(`(${S.join(" OR ")})`)}if(d){let u=Array.isArray(d)?d:[d],S=u.map(()=>"(EXISTS (SELECT 1 FROM json_each(files_read) WHERE value LIKE ?) OR EXISTS (SELECT 1 FROM json_each(files_modified) WHERE value LIKE ?))");u.forEach(f=>{T.push(`%${f}%`,`%${f}%`)}),E.push(`(${S.join(" OR ")})`)}let g=E.length>0?`WHERE id IN (${l}) AND ${E.join(" AND ")}`:`WHERE id IN (${l})`;return this.db.prepare(` SELECT * FROM observations ${g} @@ -442,27 +442,27 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=` (memory_session_id, project, request, investigated, learned, completed, next_steps, notes, prompt_number, discovery_tokens, created_at, created_at_epoch) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - `).run(e,t,s.request,s.investigated,s.learned,s.completed,s.next_steps,s.notes,n||null,o,d,a);return{id:Number(_.lastInsertRowid),createdAtEpoch:a}}storeObservations(e,t,s,n,o,i=0,a){let d=a??Date.now(),c=new Date(d).toISOString();return this.db.transaction(()=>{let u=[],T=this.db.prepare(` + `).run(e,t,s.request,s.investigated,s.learned,s.completed,s.next_steps,s.notes,n||null,o,d,a);return{id:Number(_.lastInsertRowid),createdAtEpoch:a}}storeObservations(e,t,s,n,o,i=0,a){let d=a??Date.now(),c=new Date(d).toISOString();return this.db.transaction(()=>{let l=[],T=this.db.prepare(` INSERT INTO observations (memory_session_id, project, type, title, subtitle, facts, narrative, concepts, files_read, files_modified, prompt_number, discovery_tokens, created_at, created_at_epoch) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - `);for(let g of s){let h=T.run(e,t,g.type,g.title,g.subtitle,JSON.stringify(g.facts),g.narrative,JSON.stringify(g.concepts),JSON.stringify(g.files_read),JSON.stringify(g.files_modified),o||null,i,c,d);u.push(Number(h.lastInsertRowid))}let E=null;if(n){let h=this.db.prepare(` + `);for(let g of s){let h=T.run(e,t,g.type,g.title,g.subtitle,JSON.stringify(g.facts),g.narrative,JSON.stringify(g.concepts),JSON.stringify(g.files_read),JSON.stringify(g.files_modified),o||null,i,c,d);l.push(Number(h.lastInsertRowid))}let E=null;if(n){let h=this.db.prepare(` INSERT INTO session_summaries (memory_session_id, project, request, investigated, learned, completed, next_steps, notes, prompt_number, discovery_tokens, created_at, created_at_epoch) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - `).run(e,t,n.request,n.investigated,n.learned,n.completed,n.next_steps,n.notes,o||null,i,c,d);E=Number(h.lastInsertRowid)}return{observationIds:u,summaryId:E,createdAtEpoch:d}})()}storeObservationsAndMarkComplete(e,t,s,n,o,i,a,d=0,c){let _=c??Date.now(),u=new Date(_).toISOString();return this.db.transaction(()=>{let E=[],g=this.db.prepare(` + `).run(e,t,n.request,n.investigated,n.learned,n.completed,n.next_steps,n.notes,o||null,i,c,d);E=Number(h.lastInsertRowid)}return{observationIds:l,summaryId:E,createdAtEpoch:d}})()}storeObservationsAndMarkComplete(e,t,s,n,o,i,a,d=0,c){let _=c??Date.now(),l=new Date(_).toISOString();return this.db.transaction(()=>{let E=[],g=this.db.prepare(` INSERT INTO observations (memory_session_id, project, type, title, subtitle, facts, narrative, concepts, files_read, files_modified, prompt_number, discovery_tokens, created_at, created_at_epoch) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - `);for(let S of s){let f=g.run(e,t,S.type,S.title,S.subtitle,JSON.stringify(S.facts),S.narrative,JSON.stringify(S.concepts),JSON.stringify(S.files_read),JSON.stringify(S.files_modified),a||null,d,u,_);E.push(Number(f.lastInsertRowid))}let h;if(n){let f=this.db.prepare(` + `);for(let S of s){let f=g.run(e,t,S.type,S.title,S.subtitle,JSON.stringify(S.facts),S.narrative,JSON.stringify(S.concepts),JSON.stringify(S.files_read),JSON.stringify(S.files_modified),a||null,d,l,_);E.push(Number(f.lastInsertRowid))}let h;if(n){let f=this.db.prepare(` INSERT INTO session_summaries (memory_session_id, project, request, investigated, learned, completed, next_steps, notes, prompt_number, discovery_tokens, created_at, created_at_epoch) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) - `).run(e,t,n.request,n.investigated,n.learned,n.completed,n.next_steps,n.notes,a||null,d,u,_);h=Number(f.lastInsertRowid)}return this.db.prepare(` + `).run(e,t,n.request,n.investigated,n.learned,n.completed,n.next_steps,n.notes,a||null,d,l,_);h=Number(f.lastInsertRowid)}return this.db.prepare(` UPDATE pending_messages SET status = 'processed', @@ -485,7 +485,7 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=` WHERE up.id IN (${d}) ${_} ORDER BY up.created_at_epoch ${i} ${a} - `).all(...c)}getTimelineAroundTimestamp(e,t=10,s=10,n){return this.getTimelineAroundObservation(null,e,t,s,n)}getTimelineAroundObservation(e,t,s=10,n=10,o){let i=o?"AND project = ?":"",a=o?[o]:[],d,c;if(e!==null){let l=` + `).all(...c)}getTimelineAroundTimestamp(e,t=10,s=10,n){return this.getTimelineAroundObservation(null,e,t,s,n)}getTimelineAroundObservation(e,t,s=10,n=10,o){let i=o?"AND project = ?":"",a=o?[o]:[],d,c;if(e!==null){let u=` SELECT id, created_at_epoch FROM observations WHERE id <= ? ${i} @@ -497,7 +497,7 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=` WHERE id >= ? ${i} ORDER BY id ASC LIMIT ? - `;try{let f=this.db.prepare(l).all(e,...a,s+1),R=this.db.prepare(S).all(e,...a,n+1);if(f.length===0&&R.length===0)return{observations:[],sessions:[],prompts:[]};d=f.length>0?f[f.length-1].created_at_epoch:t,c=R.length>0?R[R.length-1].created_at_epoch:t}catch(f){return m.error("DB","Error getting boundary observations",void 0,{error:f,project:o}),{observations:[],sessions:[],prompts:[]}}}else{let l=` + `;try{let f=this.db.prepare(u).all(e,...a,s+1),R=this.db.prepare(S).all(e,...a,n+1);if(f.length===0&&R.length===0)return{observations:[],sessions:[],prompts:[]};d=f.length>0?f[f.length-1].created_at_epoch:t,c=R.length>0?R[R.length-1].created_at_epoch:t}catch(f){return m.error("DB","Error getting boundary observations",void 0,{error:f,project:o}),{observations:[],sessions:[],prompts:[]}}}else{let u=` SELECT created_at_epoch FROM observations WHERE created_at_epoch <= ? ${i} @@ -509,12 +509,12 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=` WHERE created_at_epoch >= ? ${i} ORDER BY created_at_epoch ASC LIMIT ? - `;try{let f=this.db.prepare(l).all(t,...a,s),R=this.db.prepare(S).all(t,...a,n+1);if(f.length===0&&R.length===0)return{observations:[],sessions:[],prompts:[]};d=f.length>0?f[f.length-1].created_at_epoch:t,c=R.length>0?R[R.length-1].created_at_epoch:t}catch(f){return m.error("DB","Error getting boundary timestamps",void 0,{error:f,project:o}),{observations:[],sessions:[],prompts:[]}}}let _=` + `;try{let f=this.db.prepare(u).all(t,...a,s),R=this.db.prepare(S).all(t,...a,n+1);if(f.length===0&&R.length===0)return{observations:[],sessions:[],prompts:[]};d=f.length>0?f[f.length-1].created_at_epoch:t,c=R.length>0?R[R.length-1].created_at_epoch:t}catch(f){return m.error("DB","Error getting boundary timestamps",void 0,{error:f,project:o}),{observations:[],sessions:[],prompts:[]}}}let _=` SELECT * FROM observations WHERE created_at_epoch >= ? AND created_at_epoch <= ? ${i} ORDER BY created_at_epoch ASC - `,u=` + `,l=` SELECT * FROM session_summaries WHERE created_at_epoch >= ? AND created_at_epoch <= ? ${i} @@ -525,7 +525,7 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=` JOIN sdk_sessions s ON up.content_session_id = s.content_session_id WHERE up.created_at_epoch >= ? AND up.created_at_epoch <= ? ${i.replace("project","s.project")} ORDER BY up.created_at_epoch ASC - `,E=this.db.prepare(_).all(d,c,...a),g=this.db.prepare(u).all(d,c,...a),h=this.db.prepare(T).all(d,c,...a);return{observations:E,sessions:g.map(l=>({id:l.id,memory_session_id:l.memory_session_id,project:l.project,request:l.request,completed:l.completed,next_steps:l.next_steps,created_at:l.created_at,created_at_epoch:l.created_at_epoch})),prompts:h.map(l=>({id:l.id,content_session_id:l.content_session_id,prompt_number:l.prompt_number,prompt_text:l.prompt_text,project:l.project,created_at:l.created_at,created_at_epoch:l.created_at_epoch}))}}getPromptById(e){return this.db.prepare(` + `,E=this.db.prepare(_).all(d,c,...a),g=this.db.prepare(l).all(d,c,...a),h=this.db.prepare(T).all(d,c,...a);return{observations:E,sessions:g.map(u=>({id:u.id,memory_session_id:u.memory_session_id,project:u.project,request:u.request,completed:u.completed,next_steps:u.next_steps,created_at:u.created_at,created_at_epoch:u.created_at_epoch})),prompts:h.map(u=>({id:u.id,content_session_id:u.content_session_id,prompt_number:u.prompt_number,prompt_text:u.prompt_text,project:u.project,created_at:u.created_at,created_at_epoch:u.created_at_epoch}))}}getPromptById(e){return this.db.prepare(` SELECT p.id, p.content_session_id, @@ -597,7 +597,7 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=` content_session_id, prompt_number, prompt_text, created_at, created_at_epoch ) VALUES (?, ?, ?, ?, ?) - `).run(e.content_session_id,e.prompt_number,e.prompt_text,e.created_at,e.created_at_epoch).lastInsertRowid}}};var Ee=v(require("path"),1);function Te(r){if(!r||r.trim()==="")return m.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:r}),"unknown-project";let e=Ee.default.basename(r);if(e===""){if(process.platform==="win32"){let s=r.match(/^([A-Z]):\\/i);if(s){let o=`drive-${s[1].toUpperCase()}`;return m.info("PROJECT_NAME","Drive root detected",{cwd:r,projectName:o}),o}}return m.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:r}),"unknown-project"}return e}var ge=v(require("path"),1),fe=require("os");var D=require("fs"),F=require("path");var O=class r{static instance=null;activeMode=null;modesDir;constructor(){let e=ue(),t=[(0,F.join)(e,"modes"),(0,F.join)(e,"..","plugin","modes")],s=t.find(n=>(0,D.existsSync)(n));this.modesDir=s||t[0]}static getInstance(){return r.instance||(r.instance=new r),r.instance}parseInheritance(e){let t=e.split("--");if(t.length===1)return{hasParent:!1,parentId:"",overrideId:""};if(t.length>2)throw new Error(`Invalid mode inheritance: ${e}. Only one level of inheritance supported (parent--override)`);return{hasParent:!0,parentId:t[0],overrideId:e}}isPlainObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}deepMerge(e,t){let s={...e};for(let n in t){let o=t[n],i=e[n];this.isPlainObject(o)&&this.isPlainObject(i)?s[n]=this.deepMerge(i,o):s[n]=o}return s}loadModeFile(e){let t=(0,F.join)(this.modesDir,`${e}.json`);if(!(0,D.existsSync)(t))throw new Error(`Mode file not found: ${t}`);let s=(0,D.readFileSync)(t,"utf-8");return JSON.parse(s)}loadMode(e){let t=this.parseInheritance(e);if(!t.hasParent)try{let d=this.loadModeFile(e);return this.activeMode=d,m.debug("SYSTEM",`Loaded mode: ${d.name} (${e})`,void 0,{types:d.observation_types.map(c=>c.id),concepts:d.observation_concepts.map(c=>c.id)}),d}catch{if(m.warn("SYSTEM",`Mode file not found: ${e}, falling back to 'code'`),e==="code")throw new Error("Critical: code.json mode file missing");return this.loadMode("code")}let{parentId:s,overrideId:n}=t,o;try{o=this.loadMode(s)}catch{m.warn("SYSTEM",`Parent mode '${s}' not found for ${e}, falling back to 'code'`),o=this.loadMode("code")}let i;try{i=this.loadModeFile(n),m.debug("SYSTEM",`Loaded override file: ${n} for parent ${s}`)}catch{return m.warn("SYSTEM",`Override file '${n}' not found, using parent mode '${s}' only`),this.activeMode=o,o}if(!i)return m.warn("SYSTEM",`Invalid override file: ${n}, using parent mode '${s}' only`),this.activeMode=o,o;let a=this.deepMerge(o,i);return this.activeMode=a,m.debug("SYSTEM",`Loaded mode with inheritance: ${a.name} (${e} = ${s} + ${n})`,void 0,{parent:s,override:n,types:a.observation_types.map(d=>d.id),concepts:a.observation_concepts.map(d=>d.id)}),a}getActiveMode(){if(!this.activeMode)throw new Error("No mode loaded. Call loadMode() first.");return this.activeMode}getObservationTypes(){return this.getActiveMode().observation_types}getObservationConcepts(){return this.getActiveMode().observation_concepts}getTypeIcon(e){return this.getObservationTypes().find(s=>s.id===e)?.emoji||"\u{1F4DD}"}getWorkEmoji(e){return this.getObservationTypes().find(s=>s.id===e)?.work_emoji||"\u{1F4DD}"}validateType(e){return this.getObservationTypes().some(t=>t.id===e)}getTypeLabel(e){return this.getObservationTypes().find(s=>s.id===e)?.label||e}};function Y(){let r=ge.default.join((0,fe.homedir)(),".claude-mem","settings.json"),e=A.loadFromFile(r),t=e.CLAUDE_MEM_MODE,s=t==="code"||t.startsWith("code--"),n,o;if(s)n=new Set(e.CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES.split(",").map(i=>i.trim()).filter(Boolean)),o=new Set(e.CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS.split(",").map(i=>i.trim()).filter(Boolean));else{let i=O.getInstance().getActiveMode();n=new Set(i.observation_types.map(a=>a.id)),o=new Set(i.observation_concepts.map(a=>a.id))}return{totalObservationCount:parseInt(e.CLAUDE_MEM_CONTEXT_OBSERVATIONS,10),fullObservationCount:parseInt(e.CLAUDE_MEM_CONTEXT_FULL_COUNT,10),sessionCount:parseInt(e.CLAUDE_MEM_CONTEXT_SESSION_COUNT,10),showReadTokens:e.CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS==="true",showWorkTokens:e.CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS==="true",showSavingsAmount:e.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT==="true",showSavingsPercent:e.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT==="true",observationTypes:n,observationConcepts:o,fullObservationField:e.CLAUDE_MEM_CONTEXT_FULL_FIELD,showLastSummary:e.CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY==="true",showLastMessage:e.CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE==="true"}}var p={reset:"\x1B[0m",bright:"\x1B[1m",dim:"\x1B[2m",cyan:"\x1B[36m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",gray:"\x1B[90m",red:"\x1B[31m"},Se=4,V=1;function q(r){let e=(r.title?.length||0)+(r.subtitle?.length||0)+(r.narrative?.length||0)+JSON.stringify(r.facts||[]).length;return Math.ceil(e/Se)}function K(r){let e=r.length,t=r.reduce((i,a)=>i+q(a),0),s=r.reduce((i,a)=>i+(a.discovery_tokens||0),0),n=s-t,o=s>0?Math.round(n/s*100):0;return{totalObservations:e,totalReadTokens:t,totalDiscoveryTokens:s,savings:n,savingsPercent:o}}function Rt(r){return O.getInstance().getWorkEmoji(r)}function L(r,e){let t=q(r),s=r.discovery_tokens||0,n=Rt(r.type),o=s>0?`${n} ${s.toLocaleString()}`:"-";return{readTokens:t,discoveryTokens:s,discoveryDisplay:o,workEmoji:n}}function P(r){return r.showReadTokens||r.showWorkTokens||r.showSavingsAmount||r.showSavingsPercent}var be=v(require("path"),1),X=require("fs");function J(r,e,t){let s=Array.from(t.observationTypes),n=s.map(()=>"?").join(","),o=Array.from(t.observationConcepts),i=o.map(()=>"?").join(",");return r.db.prepare(` + `).run(e.content_session_id,e.prompt_number,e.prompt_text,e.created_at,e.created_at_epoch).lastInsertRowid}}};var Ee=v(require("path"),1);function Te(r){if(!r||r.trim()==="")return m.warn("PROJECT_NAME","Empty cwd provided, using fallback",{cwd:r}),"unknown-project";let e=Ee.default.basename(r);if(e===""){if(process.platform==="win32"){let s=r.match(/^([A-Z]):\\/i);if(s){let o=`drive-${s[1].toUpperCase()}`;return m.info("PROJECT_NAME","Drive root detected",{cwd:r,projectName:o}),o}}return m.warn("PROJECT_NAME","Root directory detected, using fallback",{cwd:r}),"unknown-project"}return e}var ge=v(require("path"),1),fe=require("os");var D=require("fs"),F=require("path");var O=class r{static instance=null;activeMode=null;modesDir;constructor(){let e=le(),t=[(0,F.join)(e,"modes"),(0,F.join)(e,"..","plugin","modes")],s=t.find(n=>(0,D.existsSync)(n));this.modesDir=s||t[0]}static getInstance(){return r.instance||(r.instance=new r),r.instance}parseInheritance(e){let t=e.split("--");if(t.length===1)return{hasParent:!1,parentId:"",overrideId:""};if(t.length>2)throw new Error(`Invalid mode inheritance: ${e}. Only one level of inheritance supported (parent--override)`);return{hasParent:!0,parentId:t[0],overrideId:e}}isPlainObject(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}deepMerge(e,t){let s={...e};for(let n in t){let o=t[n],i=e[n];this.isPlainObject(o)&&this.isPlainObject(i)?s[n]=this.deepMerge(i,o):s[n]=o}return s}loadModeFile(e){let t=(0,F.join)(this.modesDir,`${e}.json`);if(!(0,D.existsSync)(t))throw new Error(`Mode file not found: ${t}`);let s=(0,D.readFileSync)(t,"utf-8");return JSON.parse(s)}loadMode(e){let t=this.parseInheritance(e);if(!t.hasParent)try{let d=this.loadModeFile(e);return this.activeMode=d,m.debug("SYSTEM",`Loaded mode: ${d.name} (${e})`,void 0,{types:d.observation_types.map(c=>c.id),concepts:d.observation_concepts.map(c=>c.id)}),d}catch{if(m.warn("SYSTEM",`Mode file not found: ${e}, falling back to 'code'`),e==="code")throw new Error("Critical: code.json mode file missing");return this.loadMode("code")}let{parentId:s,overrideId:n}=t,o;try{o=this.loadMode(s)}catch{m.warn("SYSTEM",`Parent mode '${s}' not found for ${e}, falling back to 'code'`),o=this.loadMode("code")}let i;try{i=this.loadModeFile(n),m.debug("SYSTEM",`Loaded override file: ${n} for parent ${s}`)}catch{return m.warn("SYSTEM",`Override file '${n}' not found, using parent mode '${s}' only`),this.activeMode=o,o}if(!i)return m.warn("SYSTEM",`Invalid override file: ${n}, using parent mode '${s}' only`),this.activeMode=o,o;let a=this.deepMerge(o,i);return this.activeMode=a,m.debug("SYSTEM",`Loaded mode with inheritance: ${a.name} (${e} = ${s} + ${n})`,void 0,{parent:s,override:n,types:a.observation_types.map(d=>d.id),concepts:a.observation_concepts.map(d=>d.id)}),a}getActiveMode(){if(!this.activeMode)throw new Error("No mode loaded. Call loadMode() first.");return this.activeMode}getObservationTypes(){return this.getActiveMode().observation_types}getObservationConcepts(){return this.getActiveMode().observation_concepts}getTypeIcon(e){return this.getObservationTypes().find(s=>s.id===e)?.emoji||"\u{1F4DD}"}getWorkEmoji(e){return this.getObservationTypes().find(s=>s.id===e)?.work_emoji||"\u{1F4DD}"}validateType(e){return this.getObservationTypes().some(t=>t.id===e)}getTypeLabel(e){return this.getObservationTypes().find(s=>s.id===e)?.label||e}};function Y(){let r=ge.default.join((0,fe.homedir)(),".claude-mem","settings.json"),e=A.loadFromFile(r),t=e.CLAUDE_MEM_MODE,s=t==="code"||t.startsWith("code--"),n,o;if(s)n=new Set(e.CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES.split(",").map(i=>i.trim()).filter(Boolean)),o=new Set(e.CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS.split(",").map(i=>i.trim()).filter(Boolean));else{let i=O.getInstance().getActiveMode();n=new Set(i.observation_types.map(a=>a.id)),o=new Set(i.observation_concepts.map(a=>a.id))}return{totalObservationCount:parseInt(e.CLAUDE_MEM_CONTEXT_OBSERVATIONS,10),fullObservationCount:parseInt(e.CLAUDE_MEM_CONTEXT_FULL_COUNT,10),sessionCount:parseInt(e.CLAUDE_MEM_CONTEXT_SESSION_COUNT,10),showReadTokens:e.CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS==="true",showWorkTokens:e.CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS==="true",showSavingsAmount:e.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT==="true",showSavingsPercent:e.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT==="true",observationTypes:n,observationConcepts:o,fullObservationField:e.CLAUDE_MEM_CONTEXT_FULL_FIELD,showLastSummary:e.CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY==="true",showLastMessage:e.CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE==="true"}}var p={reset:"\x1B[0m",bright:"\x1B[1m",dim:"\x1B[2m",cyan:"\x1B[36m",green:"\x1B[32m",yellow:"\x1B[33m",blue:"\x1B[34m",magenta:"\x1B[35m",gray:"\x1B[90m",red:"\x1B[31m"},Se=4,V=1;function q(r){let e=(r.title?.length||0)+(r.subtitle?.length||0)+(r.narrative?.length||0)+JSON.stringify(r.facts||[]).length;return Math.ceil(e/Se)}function K(r){let e=r.length,t=r.reduce((i,a)=>i+q(a),0),s=r.reduce((i,a)=>i+(a.discovery_tokens||0),0),n=s-t,o=s>0?Math.round(n/s*100):0;return{totalObservations:e,totalReadTokens:t,totalDiscoveryTokens:s,savings:n,savingsPercent:o}}function Rt(r){return O.getInstance().getWorkEmoji(r)}function L(r,e){let t=q(r),s=r.discovery_tokens||0,n=Rt(r.type),o=s>0?`${n} ${s.toLocaleString()}`:"-";return{readTokens:t,discoveryTokens:s,discoveryDisplay:o,workEmoji:n}}function P(r){return r.showReadTokens||r.showWorkTokens||r.showSavingsAmount||r.showSavingsPercent}var be=v(require("path"),1),X=require("fs");function J(r,e,t){let s=Array.from(t.observationTypes),n=s.map(()=>"?").join(","),o=Array.from(t.observationConcepts),i=o.map(()=>"?").join(",");return r.db.prepare(` SELECT id, memory_session_id, type, title, subtitle, narrative, facts, concepts, files_read, files_modified, discovery_tokens, @@ -640,11 +640,11 @@ ${o.stack}`:` ${o.message}`:this.getLevel()===0&&typeof o=="object"?_=` `).all(...e,t.sessionCount+V)}function Nt(r){return r.replace(/\//g,"-")}function Ct(r){try{if(!(0,X.existsSync)(r))return{userMessage:"",assistantMessage:""};let e=(0,X.readFileSync)(r,"utf-8").trim();if(!e)return{userMessage:"",assistantMessage:""};let t=e.split(` `).filter(n=>n.trim()),s="";for(let n=t.length-1;n>=0;n--)try{let o=t[n];if(!o.includes('"type":"assistant"'))continue;let i=JSON.parse(o);if(i.type==="assistant"&&i.message?.content&&Array.isArray(i.message.content)){let a="";for(let d of i.message.content)d.type==="text"&&(a+=d.text);if(a=a.replace(/[\s\S]*?<\/system-reminder>/g,"").trim(),a){s=a;break}}}catch(o){m.debug("PARSER","Skipping malformed transcript line",{lineIndex:n},o);continue}return{userMessage:"",assistantMessage:s}}catch(e){return m.failure("WORKER","Failed to extract prior messages from transcript",{transcriptPath:r},e),{userMessage:"",assistantMessage:""}}}function Q(r,e,t,s){if(!e.showLastMessage||r.length===0)return{userMessage:"",assistantMessage:""};let n=r.find(d=>d.memory_session_id!==t);if(!n)return{userMessage:"",assistantMessage:""};let o=n.memory_session_id,i=Nt(s),a=be.default.join(y,"projects",i,`${o}.jsonl`);return Ct(a)}function Re(r,e){let t=e[0]?.id;return r.map((s,n)=>{let o=n===0?null:e[n+1];return{...s,displayEpoch:o?o.created_at_epoch:s.created_at_epoch,displayTime:o?o.created_at:s.created_at,shouldShowLink:s.id!==t}})}function Z(r,e){let t=[...r.map(s=>({type:"observation",data:s})),...e.map(s=>({type:"summary",data:s}))];return t.sort((s,n)=>{let o=s.type==="observation"?s.data.created_at_epoch:s.data.displayEpoch,i=n.type==="observation"?n.data.created_at_epoch:n.data.displayEpoch;return o-i}),t}function Ne(r,e){return new Set(r.slice(0,e).map(t=>t.id))}function Ce(){let r=new Date,e=r.toLocaleDateString("en-CA"),t=r.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0}).toLowerCase().replace(" ",""),s=r.toLocaleTimeString("en-US",{timeZoneName:"short"}).split(" ").pop();return`${e} ${t} ${s}`}function Ie(r){return[`# [${r}] recent context, ${Ce()}`,""]}function Ae(){return[`**Legend:** session-request | ${O.getInstance().getActiveMode().observation_types.map(t=>`${t.emoji} ${t.id}`).join(" | ")}`,""]}function ye(){return["**Column Key**:","- **Read**: Tokens to read this observation (cost to learn it now)","- **Work**: Tokens spent on work that produced this record ( research, building, deciding)",""]}function Le(){return["**Context Index:** This semantic index (titles, types, files, tokens) is usually sufficient to understand past work.","","When you need implementation details, rationale, or debugging context:","- Use MCP tools (search, get_observations) to fetch full observations on-demand","- Critical types ( bugfix, decision) often need detailed fetching","- Trust this index over re-reading code for past decisions and learnings",""]}function ve(r,e){let t=[];if(t.push("**Context Economics**:"),t.push(`- Loading: ${r.totalObservations} observations (${r.totalReadTokens.toLocaleString()} tokens to read)`),t.push(`- Work investment: ${r.totalDiscoveryTokens.toLocaleString()} tokens spent on research, building, and decisions`),r.totalDiscoveryTokens>0&&(e.showSavingsAmount||e.showSavingsPercent)){let s="- Your savings: ";e.showSavingsAmount&&e.showSavingsPercent?s+=`${r.savings.toLocaleString()} tokens (${r.savingsPercent}% reduction from reuse)`:e.showSavingsAmount?s+=`${r.savings.toLocaleString()} tokens`:s+=`${r.savingsPercent}% reduction from reuse`,t.push(s)}return t.push(""),t}function Me(r){return[`### ${r}`,""]}function De(r){return[`**${r}**`,"| ID | Time | T | Title | Read | Work |","|----|------|---|-------|------|------|"]}function xe(r,e,t){let s=r.title||"Untitled",n=O.getInstance().getTypeIcon(r.type),{readTokens:o,discoveryDisplay:i}=L(r,t),a=t.showReadTokens?`~${o}`:"",d=t.showWorkTokens?i:"";return`| #${r.id} | ${e||'"'} | ${n} | ${s} | ${a} | ${d} |`}function ke(r,e,t,s){let n=[],o=r.title||"Untitled",i=O.getInstance().getTypeIcon(r.type),{readTokens:a,discoveryDisplay:d}=L(r,s);n.push(`**#${r.id}** ${e||'"'} ${i} **${o}**`),t&&(n.push(""),n.push(t),n.push(""));let c=[];return s.showReadTokens&&c.push(`Read: ~${a}`),s.showWorkTokens&&c.push(`Work: ${d}`),c.length>0&&n.push(c.join(", ")),n.push(""),n}function Ue(r,e){let t=`${r.request||"Session started"} (${e})`;return[`**#S${r.id}** ${t}`,""]}function x(r,e){return e?[`**${r}**: ${e}`,""]:[]}function we(r){return r.assistantMessage?["","---","","**Previously**","",`A: ${r.assistantMessage}`,""]:[]}function $e(r,e){return["",`Access ${Math.round(r/1e3)}k tokens of past research & decisions for just ${e.toLocaleString()}t. Use MCP search tools to access memories by ID.`]}function Fe(r){return`# [${r}] recent context, ${Ce()} -No previous sessions found for this project yet.`}function Pe(){let r=new Date,e=r.toLocaleDateString("en-CA"),t=r.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0}).toLowerCase().replace(" ",""),s=r.toLocaleTimeString("en-US",{timeZoneName:"short"}).split(" ").pop();return`${e} ${t} ${s}`}function Xe(r){return["",`${p.bright}${p.cyan}[${r}] recent context, ${Pe()}${p.reset}`,`${p.gray}${"\u2500".repeat(60)}${p.reset}`,""]}function je(){let e=O.getInstance().getActiveMode().observation_types.map(t=>`${t.emoji} ${t.id}`).join(" | ");return[`${p.dim}Legend: session-request | ${e}${p.reset}`,""]}function Ge(){return[`${p.bright}Column Key${p.reset}`,`${p.dim} Read: Tokens to read this observation (cost to learn it now)${p.reset}`,`${p.dim} Work: Tokens spent on work that produced this record ( research, building, deciding)${p.reset}`,""]}function Be(){return[`${p.dim}Context Index: This semantic index (titles, types, files, tokens) is usually sufficient to understand past work.${p.reset}`,"",`${p.dim}When you need implementation details, rationale, or debugging context:${p.reset}`,`${p.dim} - Use MCP tools (search, get_observations) to fetch full observations on-demand${p.reset}`,`${p.dim} - Critical types ( bugfix, decision) often need detailed fetching${p.reset}`,`${p.dim} - Trust this index over re-reading code for past decisions and learnings${p.reset}`,""]}function He(r,e){let t=[];if(t.push(`${p.bright}${p.cyan}Context Economics${p.reset}`),t.push(`${p.dim} Loading: ${r.totalObservations} observations (${r.totalReadTokens.toLocaleString()} tokens to read)${p.reset}`),t.push(`${p.dim} Work investment: ${r.totalDiscoveryTokens.toLocaleString()} tokens spent on research, building, and decisions${p.reset}`),r.totalDiscoveryTokens>0&&(e.showSavingsAmount||e.showSavingsPercent)){let s=" Your savings: ";e.showSavingsAmount&&e.showSavingsPercent?s+=`${r.savings.toLocaleString()} tokens (${r.savingsPercent}% reduction from reuse)`:e.showSavingsAmount?s+=`${r.savings.toLocaleString()} tokens`:s+=`${r.savingsPercent}% reduction from reuse`,t.push(`${p.green}${s}${p.reset}`)}return t.push(""),t}function We(r){return[`${p.bright}${p.cyan}${r}${p.reset}`,""]}function Ye(r){return[`${p.dim}${r}${p.reset}`]}function Ve(r,e,t,s){let n=r.title||"Untitled",o=O.getInstance().getTypeIcon(r.type),{readTokens:i,discoveryTokens:a,workEmoji:d}=L(r,s),c=t?`${p.dim}${e}${p.reset}`:" ".repeat(e.length),_=s.showReadTokens&&i>0?`${p.dim}(~${i}t)${p.reset}`:"",u=s.showWorkTokens&&a>0?`${p.dim}(${d} ${a.toLocaleString()}t)${p.reset}`:"";return` ${p.dim}#${r.id}${p.reset} ${c} ${o} ${n} ${_} ${u}`}function qe(r,e,t,s,n){let o=[],i=r.title||"Untitled",a=O.getInstance().getTypeIcon(r.type),{readTokens:d,discoveryTokens:c,workEmoji:_}=L(r,n),u=t?`${p.dim}${e}${p.reset}`:" ".repeat(e.length),T=n.showReadTokens&&d>0?`${p.dim}(~${d}t)${p.reset}`:"",E=n.showWorkTokens&&c>0?`${p.dim}(${_} ${c.toLocaleString()}t)${p.reset}`:"";return o.push(` ${p.dim}#${r.id}${p.reset} ${u} ${a} ${p.bright}${i}${p.reset}`),s&&o.push(` ${p.dim}${s}${p.reset}`),(T||E)&&o.push(` ${T} ${E}`),o.push(""),o}function Ke(r,e){let t=`${r.request||"Session started"} (${e})`;return[`${p.yellow}#S${r.id}${p.reset} ${t}`,""]}function k(r,e,t){return e?[`${t}${r}:${p.reset} ${e}`,""]:[]}function Je(r){return r.assistantMessage?["","---","",`${p.bright}${p.magenta}Previously${p.reset}`,"",`${p.dim}A: ${r.assistantMessage}${p.reset}`,""]:[]}function ze(r,e){let t=Math.round(r/1e3);return["",`${p.dim}Access ${t}k tokens of past research & decisions for just ${e.toLocaleString()}t. Use MCP search tools to access memories by ID.${p.reset}`]}function Qe(r){return` +No previous sessions found for this project yet.`}function Pe(){let r=new Date,e=r.toLocaleDateString("en-CA"),t=r.toLocaleTimeString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0}).toLowerCase().replace(" ",""),s=r.toLocaleTimeString("en-US",{timeZoneName:"short"}).split(" ").pop();return`${e} ${t} ${s}`}function Xe(r){return["",`${p.bright}${p.cyan}[${r}] recent context, ${Pe()}${p.reset}`,`${p.gray}${"\u2500".repeat(60)}${p.reset}`,""]}function je(){let e=O.getInstance().getActiveMode().observation_types.map(t=>`${t.emoji} ${t.id}`).join(" | ");return[`${p.dim}Legend: session-request | ${e}${p.reset}`,""]}function Ge(){return[`${p.bright}Column Key${p.reset}`,`${p.dim} Read: Tokens to read this observation (cost to learn it now)${p.reset}`,`${p.dim} Work: Tokens spent on work that produced this record ( research, building, deciding)${p.reset}`,""]}function Be(){return[`${p.dim}Context Index: This semantic index (titles, types, files, tokens) is usually sufficient to understand past work.${p.reset}`,"",`${p.dim}When you need implementation details, rationale, or debugging context:${p.reset}`,`${p.dim} - Use MCP tools (search, get_observations) to fetch full observations on-demand${p.reset}`,`${p.dim} - Critical types ( bugfix, decision) often need detailed fetching${p.reset}`,`${p.dim} - Trust this index over re-reading code for past decisions and learnings${p.reset}`,""]}function He(r,e){let t=[];if(t.push(`${p.bright}${p.cyan}Context Economics${p.reset}`),t.push(`${p.dim} Loading: ${r.totalObservations} observations (${r.totalReadTokens.toLocaleString()} tokens to read)${p.reset}`),t.push(`${p.dim} Work investment: ${r.totalDiscoveryTokens.toLocaleString()} tokens spent on research, building, and decisions${p.reset}`),r.totalDiscoveryTokens>0&&(e.showSavingsAmount||e.showSavingsPercent)){let s=" Your savings: ";e.showSavingsAmount&&e.showSavingsPercent?s+=`${r.savings.toLocaleString()} tokens (${r.savingsPercent}% reduction from reuse)`:e.showSavingsAmount?s+=`${r.savings.toLocaleString()} tokens`:s+=`${r.savingsPercent}% reduction from reuse`,t.push(`${p.green}${s}${p.reset}`)}return t.push(""),t}function We(r){return[`${p.bright}${p.cyan}${r}${p.reset}`,""]}function Ye(r){return[`${p.dim}${r}${p.reset}`]}function Ve(r,e,t,s){let n=r.title||"Untitled",o=O.getInstance().getTypeIcon(r.type),{readTokens:i,discoveryTokens:a,workEmoji:d}=L(r,s),c=t?`${p.dim}${e}${p.reset}`:" ".repeat(e.length),_=s.showReadTokens&&i>0?`${p.dim}(~${i}t)${p.reset}`:"",l=s.showWorkTokens&&a>0?`${p.dim}(${d} ${a.toLocaleString()}t)${p.reset}`:"";return` ${p.dim}#${r.id}${p.reset} ${c} ${o} ${n} ${_} ${l}`}function qe(r,e,t,s,n){let o=[],i=r.title||"Untitled",a=O.getInstance().getTypeIcon(r.type),{readTokens:d,discoveryTokens:c,workEmoji:_}=L(r,n),l=t?`${p.dim}${e}${p.reset}`:" ".repeat(e.length),T=n.showReadTokens&&d>0?`${p.dim}(~${d}t)${p.reset}`:"",E=n.showWorkTokens&&c>0?`${p.dim}(${_} ${c.toLocaleString()}t)${p.reset}`:"";return o.push(` ${p.dim}#${r.id}${p.reset} ${l} ${a} ${p.bright}${i}${p.reset}`),s&&o.push(` ${p.dim}${s}${p.reset}`),(T||E)&&o.push(` ${T} ${E}`),o.push(""),o}function Ke(r,e){let t=`${r.request||"Session started"} (${e})`;return[`${p.yellow}#S${r.id}${p.reset} ${t}`,""]}function k(r,e,t){return e?[`${t}${r}:${p.reset} ${e}`,""]:[]}function Je(r){return r.assistantMessage?["","---","",`${p.bright}${p.magenta}Previously${p.reset}`,"",`${p.dim}A: ${r.assistantMessage}${p.reset}`,""]:[]}function ze(r,e){let t=Math.round(r/1e3);return["",`${p.dim}Access ${t}k tokens of past research & decisions for just ${e.toLocaleString()}t. Use MCP search tools to access memories by ID.${p.reset}`]}function Qe(r){return` ${p.bright}${p.cyan}[${r}] recent context, ${Pe()}${p.reset} ${p.gray}${"\u2500".repeat(60)}${p.reset} ${p.dim}No previous sessions found for this project yet.${p.reset} `}function Ze(r,e,t,s){let n=[];return s?n.push(...Xe(r)):n.push(...Ie(r)),s?n.push(...je()):n.push(...Ae()),s?n.push(...Ge()):n.push(...ye()),s?n.push(...Be()):n.push(...Le()),P(t)&&(s?n.push(...He(e,t)):n.push(...ve(e,t))),n}var ee=v(require("path"),1);function B(r){if(!r)return[];try{let e=JSON.parse(r);return Array.isArray(e)?e:[]}catch(e){return m.debug("PARSER","Failed to parse JSON array, using empty fallback",{preview:r?.substring(0,50)},e),[]}}function tt(r){return new Date(r).toLocaleString("en-US",{month:"short",day:"numeric",hour:"numeric",minute:"2-digit",hour12:!0})}function st(r){return new Date(r).toLocaleString("en-US",{hour:"numeric",minute:"2-digit",hour12:!0})}function rt(r){return new Date(r).toLocaleString("en-US",{month:"short",day:"numeric",year:"numeric"})}function et(r,e){return ee.default.isAbsolute(r)?ee.default.relative(e,r):r}function nt(r,e,t){let s=B(r);if(s.length>0)return et(s[0],e);if(t){let n=B(t);if(n.length>0)return et(n[0],e)}return"General"}function It(r){let e=new Map;for(let s of r){let n=s.type==="observation"?s.data.created_at:s.data.displayTime,o=rt(n);e.has(o)||e.set(o,[]),e.get(o).push(s)}let t=Array.from(e.entries()).sort((s,n)=>{let o=new Date(s[0]).getTime(),i=new Date(n[0]).getTime();return o-i});return new Map(t)}function At(r,e){return e.fullObservationField==="narrative"?r.narrative:r.facts?B(r.facts).join(` -`):null}function yt(r,e,t,s,n,o){let i=[];o?i.push(...We(r)):i.push(...Me(r));let a=null,d="",c=!1;for(let _ of e)if(_.type==="summary"){c&&(i.push(""),c=!1,a=null,d="");let u=_.data,T=tt(u.displayTime);o?i.push(...Ke(u,T)):i.push(...Ue(u,T))}else{let u=_.data,T=nt(u.files_modified,n,u.files_read),E=st(u.created_at),g=E!==d,h=g?E:"";d=E;let l=t.has(u.id);if(T!==a&&(c&&i.push(""),o?i.push(...Ye(T)):i.push(...De(T)),a=T,c=!0),l){let S=At(u,s);o?i.push(...qe(u,E,g,S,s)):(c&&!o&&(i.push(""),c=!1),i.push(...ke(u,h,S,s)),a=null)}else o?i.push(Ve(u,E,g,s)):i.push(xe(u,h,s))}return c&&i.push(""),i}function ot(r,e,t,s,n){let o=[],i=It(r);for(let[a,d]of i)o.push(...yt(a,d,e,t,s,n));return o}function it(r,e,t){return!(!r.showLastSummary||!e||!!!(e.investigated||e.learned||e.completed||e.next_steps)||t&&e.created_at_epoch<=t.created_at_epoch)}function at(r,e){let t=[];return e?(t.push(...k("Investigated",r.investigated,p.blue)),t.push(...k("Learned",r.learned,p.yellow)),t.push(...k("Completed",r.completed,p.green)),t.push(...k("Next Steps",r.next_steps,p.magenta))):(t.push(...x("Investigated",r.investigated)),t.push(...x("Learned",r.learned)),t.push(...x("Completed",r.completed)),t.push(...x("Next Steps",r.next_steps))),t}function dt(r,e){return e?Je(r):we(r)}function pt(r,e,t){return!P(e)||r.totalDiscoveryTokens<=0||r.savings<=0?[]:t?ze(r.totalDiscoveryTokens,r.totalReadTokens):$e(r.totalDiscoveryTokens,r.totalReadTokens)}var Lt=ct.default.join((0,mt.homedir)(),".claude","plugins","marketplaces","thedotmack","plugin",".install-version");function vt(){try{return new $}catch(r){if(r.code==="ERR_DLOPEN_FAILED"){try{(0,_t.unlinkSync)(Lt)}catch(e){m.debug("SYSTEM","Marker file cleanup failed (may not exist)",{},e)}return m.error("SYSTEM","Native module rebuild needed - restart Claude Code to auto-fix"),null}throw r}}function Mt(r,e){return e?Qe(r):Fe(r)}function Dt(r,e,t,s,n,o,i){let a=[],d=K(e);a.push(...Ze(r,d,s,i));let c=t.slice(0,s.sessionCount),_=Re(c,t),u=Z(e,_),T=Ne(e,s.fullObservationCount);a.push(...ot(u,T,s,n,i));let E=t[0],g=e[0];it(s,E,g)&&a.push(...at(E,i));let h=Q(e,s,o,n);return a.push(...dt(h,i)),a.push(...pt(d,s,i)),a.join(` +`):null}function yt(r,e,t,s,n,o){let i=[];o?i.push(...We(r)):i.push(...Me(r));let a=null,d="",c=!1;for(let _ of e)if(_.type==="summary"){c&&(i.push(""),c=!1,a=null,d="");let l=_.data,T=tt(l.displayTime);o?i.push(...Ke(l,T)):i.push(...Ue(l,T))}else{let l=_.data,T=nt(l.files_modified,n,l.files_read),E=st(l.created_at),g=E!==d,h=g?E:"";d=E;let u=t.has(l.id);if(T!==a&&(c&&i.push(""),o?i.push(...Ye(T)):i.push(...De(T)),a=T,c=!0),u){let S=At(l,s);o?i.push(...qe(l,E,g,S,s)):(c&&!o&&(i.push(""),c=!1),i.push(...ke(l,h,S,s)),a=null)}else o?i.push(Ve(l,E,g,s)):i.push(xe(l,h,s))}return c&&i.push(""),i}function ot(r,e,t,s,n){let o=[],i=It(r);for(let[a,d]of i)o.push(...yt(a,d,e,t,s,n));return o}function it(r,e,t){return!(!r.showLastSummary||!e||!!!(e.investigated||e.learned||e.completed||e.next_steps)||t&&e.created_at_epoch<=t.created_at_epoch)}function at(r,e){let t=[];return e?(t.push(...k("Investigated",r.investigated,p.blue)),t.push(...k("Learned",r.learned,p.yellow)),t.push(...k("Completed",r.completed,p.green)),t.push(...k("Next Steps",r.next_steps,p.magenta))):(t.push(...x("Investigated",r.investigated)),t.push(...x("Learned",r.learned)),t.push(...x("Completed",r.completed)),t.push(...x("Next Steps",r.next_steps))),t}function dt(r,e){return e?Je(r):we(r)}function pt(r,e,t){return!P(e)||r.totalDiscoveryTokens<=0||r.savings<=0?[]:t?ze(r.totalDiscoveryTokens,r.totalReadTokens):$e(r.totalDiscoveryTokens,r.totalReadTokens)}var Lt=ct.default.join((0,mt.homedir)(),".claude","plugins","marketplaces","thedotmack","plugin",".install-version");function vt(){try{return new $}catch(r){if(r.code==="ERR_DLOPEN_FAILED"){try{(0,_t.unlinkSync)(Lt)}catch(e){m.debug("SYSTEM","Marker file cleanup failed (may not exist)",{},e)}return m.error("SYSTEM","Native module rebuild needed - restart Claude Code to auto-fix"),null}throw r}}function Mt(r,e){return e?Qe(r):Fe(r)}function Dt(r,e,t,s,n,o,i){let a=[],d=K(e);a.push(...Ze(r,d,s,i));let c=t.slice(0,s.sessionCount),_=Re(c,t),l=Z(e,_),T=Ne(e,s.fullObservationCount);a.push(...ot(l,T,s,n,i));let E=t[0],g=e[0];it(s,E,g)&&a.push(...at(E,i));let h=Q(e,s,o,n);return a.push(...dt(h,i)),a.push(...pt(d,s,i)),a.join(` `).trimEnd()}async function te(r,e=!1){let t=Y(),s=r?.cwd??process.cwd(),n=Te(s),o=r?.projects||[n],i=vt();if(!i)return"";try{let a=o.length>1?he(i,o,t):J(i,n,t),d=o.length>1?Oe(i,o,t):z(i,n,t);return a.length===0&&d.length===0?Mt(n,e):Dt(n,a,d,t,s,r?.session_id,e)}finally{i.close()}}0&&(module.exports={generateContext}); diff --git a/plugin/scripts/mcp-server.cjs b/plugin/scripts/mcp-server.cjs index 4afa9610..0fde4e39 100755 --- a/plugin/scripts/mcp-server.cjs +++ b/plugin/scripts/mcp-server.cjs @@ -54,7 +54,7 @@ ${i.stack}`:` ${i.message}`:this.getLevel()===0&&typeof i=="object"?l=` Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let a of t.seen.entries()){let s=a[1];if(e===a[0]){i(a);continue}if(t.external){let u=t.external.registry.get(a[0])?.id;if(e!==a[0]&&u){i(a);continue}}if(t.metadataRegistry.get(a[0])?.id){i(a);continue}if(s.cycle){i(a);continue}if(s.count>1&&t.reused==="ref"){i(a);continue}}}function Xi(t,e){let r=t.seen.get(e);if(!r)throw new Error("Unprocessed schema. This is a bug in Zod.");let n=a=>{let s=t.seen.get(a);if(s.ref===null)return;let c=s.def??s.schema,u={...c},l=s.ref;if(s.ref=null,l){n(l);let m=t.seen.get(l),f=m.schema;if(f.$ref&&(t.target==="draft-07"||t.target==="draft-04"||t.target==="openapi-3.0")?(c.allOf=c.allOf??[],c.allOf.push(f)):Object.assign(c,f),Object.assign(c,u),a._zod.parent===l)for(let v in c)v==="$ref"||v==="allOf"||v in u||delete c[v];if(f.$ref)for(let v in c)v==="$ref"||v==="allOf"||v in m.def&&JSON.stringify(c[v])===JSON.stringify(m.def[v])&&delete c[v]}let d=a._zod.parent;if(d&&d!==l){n(d);let m=t.seen.get(d);if(m?.schema.$ref&&(c.$ref=m.schema.$ref,m.def))for(let f in c)f==="$ref"||f==="allOf"||f in m.def&&JSON.stringify(c[f])===JSON.stringify(m.def[f])&&delete c[f]}t.override({zodSchema:a,jsonSchema:c,path:s.path??[]})};for(let a of[...t.seen.entries()].reverse())n(a[0]);let o={};if(t.target==="draft-2020-12"?o.$schema="https://json-schema.org/draft/2020-12/schema":t.target==="draft-07"?o.$schema="http://json-schema.org/draft-07/schema#":t.target==="draft-04"?o.$schema="http://json-schema.org/draft-04/schema#":t.target,t.external?.uri){let a=t.external.registry.get(e)?.id;if(!a)throw new Error("Schema is missing an `id` property");o.$id=t.external.uri(a)}Object.assign(o,r.def??r.schema);let i=t.external?.defs??{};for(let a of t.seen.entries()){let s=a[1];s.def&&s.defId&&(i[s.defId]=s.def)}t.external||Object.keys(i).length>0&&(t.target==="draft-2020-12"?o.$defs=i:o.definitions=i);try{let a=JSON.parse(JSON.stringify(o));return Object.defineProperty(a,"~standard",{value:{...e["~standard"],jsonSchema:{input:fo(e,"input",t.processors),output:fo(e,"output",t.processors)}},enumerable:!1,writable:!1}),a}catch{throw new Error("Error converting schema to JSON.")}}function Ue(t,e){let r=e??{seen:new Set};if(r.seen.has(t))return!1;r.seen.add(t);let n=t._zod.def;if(n.type==="transform")return!0;if(n.type==="array")return Ue(n.element,r);if(n.type==="set")return Ue(n.valueType,r);if(n.type==="lazy")return Ue(n.getter(),r);if(n.type==="promise"||n.type==="optional"||n.type==="nonoptional"||n.type==="nullable"||n.type==="readonly"||n.type==="default"||n.type==="prefault")return Ue(n.innerType,r);if(n.type==="intersection")return Ue(n.left,r)||Ue(n.right,r);if(n.type==="record"||n.type==="map")return Ue(n.keyType,r)||Ue(n.valueType,r);if(n.type==="pipe")return Ue(n.in,r)||Ue(n.out,r);if(n.type==="object"){for(let o in n.shape)if(Ue(n.shape[o],r))return!0;return!1}if(n.type==="union"){for(let o of n.options)if(Ue(o,r))return!0;return!1}if(n.type==="tuple"){for(let o of n.items)if(Ue(o,r))return!0;return!!(n.rest&&Ue(n.rest,r))}return!1}var Em=(t,e={})=>r=>{let n=Gi({...r,processors:e});return de(t,n),Bi(n,t),Xi(n,t)},fo=(t,e,r={})=>n=>{let{libraryOptions:o,target:i}=n??{},a=Gi({...o??{},target:i,io:e,processors:r});return de(t,a),Bi(a,t),Xi(a,t)};var Sb={guid:"uuid",url:"uri",datetime:"date-time",json_string:"json-string",regex:""},Tm=(t,e,r,n)=>{let o=r;o.type="string";let{minimum:i,maximum:a,format:s,patterns:c,contentEncoding:u}=t._zod.bag;if(typeof i=="number"&&(o.minLength=i),typeof a=="number"&&(o.maxLength=a),s&&(o.format=Sb[s]??s,o.format===""&&delete o.format,s==="time"&&delete o.format),u&&(o.contentEncoding=u),c&&c.size>0){let l=[...c];l.length===1?o.pattern=l[0].source:l.length>1&&(o.allOf=[...l.map(d=>({...e.target==="draft-07"||e.target==="draft-04"||e.target==="openapi-3.0"?{type:"string"}:{},pattern:d.source}))])}},Pm=(t,e,r,n)=>{let o=r,{minimum:i,maximum:a,format:s,multipleOf:c,exclusiveMaximum:u,exclusiveMinimum:l}=t._zod.bag;typeof s=="string"&&s.includes("int")?o.type="integer":o.type="number",typeof l=="number"&&(e.target==="draft-04"||e.target==="openapi-3.0"?(o.minimum=l,o.exclusiveMinimum=!0):o.exclusiveMinimum=l),typeof i=="number"&&(o.minimum=i,typeof l=="number"&&e.target!=="draft-04"&&(l>=i?delete o.minimum:delete o.exclusiveMinimum)),typeof u=="number"&&(e.target==="draft-04"||e.target==="openapi-3.0"?(o.maximum=u,o.exclusiveMaximum=!0):o.exclusiveMaximum=u),typeof a=="number"&&(o.maximum=a,typeof u=="number"&&e.target!=="draft-04"&&(u<=a?delete o.maximum:delete o.exclusiveMaximum)),typeof c=="number"&&(o.multipleOf=c)},Om=(t,e,r,n)=>{r.type="boolean"},jm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("BigInt cannot be represented in JSON Schema")},Dm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Symbols cannot be represented in JSON Schema")},Nm=(t,e,r,n)=>{e.target==="openapi-3.0"?(r.type="string",r.nullable=!0,r.enum=[null]):r.type="null"},Rm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Undefined cannot be represented in JSON Schema")},Am=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Void cannot be represented in JSON Schema")},Um=(t,e,r,n)=>{r.not={}},Zm=(t,e,r,n)=>{},Mm=(t,e,r,n)=>{},Cm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Date cannot be represented in JSON Schema")},Lm=(t,e,r,n)=>{let o=t._zod.def,i=Nn(o.entries);i.every(a=>typeof a=="number")&&(r.type="number"),i.every(a=>typeof a=="string")&&(r.type="string"),r.enum=i},qm=(t,e,r,n)=>{let o=t._zod.def,i=[];for(let a of o.values)if(a===void 0){if(e.unrepresentable==="throw")throw new Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof a=="bigint"){if(e.unrepresentable==="throw")throw new Error("BigInt literals cannot be represented in JSON Schema");i.push(Number(a))}else i.push(a);if(i.length!==0)if(i.length===1){let a=i[0];r.type=a===null?"null":typeof a,e.target==="draft-04"||e.target==="openapi-3.0"?r.enum=[a]:r.const=a}else i.every(a=>typeof a=="number")&&(r.type="number"),i.every(a=>typeof a=="string")&&(r.type="string"),i.every(a=>typeof a=="boolean")&&(r.type="boolean"),i.every(a=>a===null)&&(r.type="null"),r.enum=i},Fm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("NaN cannot be represented in JSON Schema")},Vm=(t,e,r,n)=>{let o=r,i=t._zod.pattern;if(!i)throw new Error("Pattern not found in template literal");o.type="string",o.pattern=i.source},Jm=(t,e,r,n)=>{let o=r,i={type:"string",format:"binary",contentEncoding:"binary"},{minimum:a,maximum:s,mime:c}=t._zod.bag;a!==void 0&&(i.minLength=a),s!==void 0&&(i.maxLength=s),c?c.length===1?(i.contentMediaType=c[0],Object.assign(o,i)):(Object.assign(o,i),o.anyOf=c.map(u=>({contentMediaType:u}))):Object.assign(o,i)},Km=(t,e,r,n)=>{r.type="boolean"},Hm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Custom types cannot be represented in JSON Schema")},Wm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Function types cannot be represented in JSON Schema")},Gm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Transforms cannot be represented in JSON Schema")},Bm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Map cannot be represented in JSON Schema")},Xm=(t,e,r,n)=>{if(e.unrepresentable==="throw")throw new Error("Set cannot be represented in JSON Schema")},Ym=(t,e,r,n)=>{let o=r,i=t._zod.def,{minimum:a,maximum:s}=t._zod.bag;typeof a=="number"&&(o.minItems=a),typeof s=="number"&&(o.maxItems=s),o.type="array",o.items=de(i.element,e,{...n,path:[...n.path,"items"]})},Qm=(t,e,r,n)=>{let o=r,i=t._zod.def;o.type="object",o.properties={};let a=i.shape;for(let u in a)o.properties[u]=de(a[u],e,{...n,path:[...n.path,"properties",u]});let s=new Set(Object.keys(a)),c=new Set([...s].filter(u=>{let l=i.shape[u]._zod;return e.io==="input"?l.optin===void 0:l.optout===void 0}));c.size>0&&(o.required=Array.from(c)),i.catchall?._zod.def.type==="never"?o.additionalProperties=!1:i.catchall?i.catchall&&(o.additionalProperties=de(i.catchall,e,{...n,path:[...n.path,"additionalProperties"]})):e.io==="output"&&(o.additionalProperties=!1)},ml=(t,e,r,n)=>{let o=t._zod.def,i=o.inclusive===!1,a=o.options.map((s,c)=>de(s,e,{...n,path:[...n.path,i?"oneOf":"anyOf",c]}));i?r.oneOf=a:r.anyOf=a},eh=(t,e,r,n)=>{let o=t._zod.def,i=de(o.left,e,{...n,path:[...n.path,"allOf",0]}),a=de(o.right,e,{...n,path:[...n.path,"allOf",1]}),s=u=>"allOf"in u&&Object.keys(u).length===1,c=[...s(i)?i.allOf:[i],...s(a)?a.allOf:[a]];r.allOf=c},th=(t,e,r,n)=>{let o=r,i=t._zod.def;o.type="array";let a=e.target==="draft-2020-12"?"prefixItems":"items",s=e.target==="draft-2020-12"||e.target==="openapi-3.0"?"items":"additionalItems",c=i.items.map((m,f)=>de(m,e,{...n,path:[...n.path,a,f]})),u=i.rest?de(i.rest,e,{...n,path:[...n.path,s,...e.target==="openapi-3.0"?[i.items.length]:[]]}):null;e.target==="draft-2020-12"?(o.prefixItems=c,u&&(o.items=u)):e.target==="openapi-3.0"?(o.items={anyOf:c},u&&o.items.anyOf.push(u),o.minItems=c.length,u||(o.maxItems=c.length)):(o.items=c,u&&(o.additionalItems=u));let{minimum:l,maximum:d}=t._zod.bag;typeof l=="number"&&(o.minItems=l),typeof d=="number"&&(o.maxItems=d)},rh=(t,e,r,n)=>{let o=r,i=t._zod.def;o.type="object";let a=i.keyType,c=a._zod.bag?.patterns;if(i.mode==="loose"&&c&&c.size>0){let l=de(i.valueType,e,{...n,path:[...n.path,"patternProperties","*"]});o.patternProperties={};for(let d of c)o.patternProperties[d.source]=l}else(e.target==="draft-07"||e.target==="draft-2020-12")&&(o.propertyNames=de(i.keyType,e,{...n,path:[...n.path,"propertyNames"]})),o.additionalProperties=de(i.valueType,e,{...n,path:[...n.path,"additionalProperties"]});let u=a._zod.values;if(u){let l=[...u].filter(d=>typeof d=="string"||typeof d=="number");l.length>0&&(o.required=l)}},nh=(t,e,r,n)=>{let o=t._zod.def,i=de(o.innerType,e,n),a=e.seen.get(t);e.target==="openapi-3.0"?(a.ref=o.innerType,r.nullable=!0):r.anyOf=[i,{type:"null"}]},oh=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType},ih=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType,r.default=JSON.parse(JSON.stringify(o.defaultValue))},ah=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType,e.io==="input"&&(r._prefault=JSON.parse(JSON.stringify(o.defaultValue)))},sh=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType;let a;try{a=o.catchValue(void 0)}catch{throw new Error("Dynamic catch values are not supported in JSON Schema")}r.default=a},ch=(t,e,r,n)=>{let o=t._zod.def,i=e.io==="input"?o.in._zod.def.type==="transform"?o.out:o.in:o.out;de(i,e,n);let a=e.seen.get(t);a.ref=i},uh=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType,r.readOnly=!0},lh=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType},hl=(t,e,r,n)=>{let o=t._zod.def;de(o.innerType,e,n);let i=e.seen.get(t);i.ref=o.innerType},dh=(t,e,r,n)=>{let o=t._zod.innerType;de(o,e,n);let i=e.seen.get(t);i.ref=o};function Br(t){return!!t._zod}function Yt(t,e){return Br(t)?Jr(t,e):t.safeParse(e)}function Yi(t){if(!t)return;let e;if(Br(t)?e=t._zod?.def?.shape:e=t.shape,!!e){if(typeof e=="function")try{return e()}catch{return}return e}}function hh(t){if(Br(t)){let i=t._zod?.def;if(i){if(i.value!==void 0)return i.value;if(Array.isArray(i.values)&&i.values.length>0)return i.values[0]}}let r=t._def;if(r){if(r.value!==void 0)return r.value;if(Array.isArray(r.values)&&r.values.length>0)return r.values[0]}let n=t.value;if(n!==void 0)return n}var mo={};yn(mo,{ZodAny:()=>Dh,ZodArray:()=>Uh,ZodBase64:()=>Ml,ZodBase64URL:()=>Cl,ZodBigInt:()=>sa,ZodBigIntFormat:()=>Fl,ZodBoolean:()=>aa,ZodCIDRv4:()=>Ul,ZodCIDRv6:()=>Zl,ZodCUID:()=>Pl,ZodCUID2:()=>Ol,ZodCatch:()=>ng,ZodCodec:()=>Bl,ZodCustom:()=>pa,ZodCustomStringFormat:()=>go,ZodDate:()=>Jl,ZodDefault:()=>Xh,ZodDiscriminatedUnion:()=>Mh,ZodE164:()=>Ll,ZodEmail:()=>Il,ZodEmoji:()=>El,ZodEnum:()=>ho,ZodExactOptional:()=>Wh,ZodFile:()=>Kh,ZodFunction:()=>pg,ZodGUID:()=>ea,ZodIPv4:()=>Rl,ZodIPv6:()=>Al,ZodIntersection:()=>Ch,ZodJWT:()=>ql,ZodKSUID:()=>Nl,ZodLazy:()=>ug,ZodLiteral:()=>Jh,ZodMAC:()=>Th,ZodMap:()=>Fh,ZodNaN:()=>ig,ZodNanoID:()=>Tl,ZodNever:()=>Rh,ZodNonOptional:()=>Wl,ZodNull:()=>jh,ZodNullable:()=>Bh,ZodNumber:()=>ia,ZodNumberFormat:()=>Xr,ZodObject:()=>ca,ZodOptional:()=>Hl,ZodPipe:()=>Gl,ZodPrefault:()=>Qh,ZodPromise:()=>dg,ZodReadonly:()=>ag,ZodRecord:()=>da,ZodSet:()=>Vh,ZodString:()=>na,ZodStringFormat:()=>ce,ZodSuccess:()=>rg,ZodSymbol:()=>Ph,ZodTemplateLiteral:()=>cg,ZodTransform:()=>Hh,ZodTuple:()=>Lh,ZodType:()=>q,ZodULID:()=>jl,ZodURL:()=>oa,ZodUUID:()=>Rt,ZodUndefined:()=>Oh,ZodUnion:()=>ua,ZodUnknown:()=>Nh,ZodVoid:()=>Ah,ZodXID:()=>Dl,ZodXor:()=>Zh,_ZodString:()=>zl,_default:()=>Yh,_function:()=>qx,any:()=>Sx,array:()=>G,base64:()=>sx,base64url:()=>cx,bigint:()=>yx,boolean:()=>_e,catch:()=>og,check:()=>Fx,cidrv4:()=>ix,cidrv6:()=>ax,codec:()=>Mx,cuid:()=>Xb,cuid2:()=>Yb,custom:()=>Xl,date:()=>zx,describe:()=>Vx,discriminatedUnion:()=>la,e164:()=>ux,email:()=>Lb,emoji:()=>Gb,enum:()=>Te,exactOptional:()=>Gh,file:()=>Rx,float32:()=>hx,float64:()=>gx,function:()=>qx,guid:()=>qb,hash:()=>mx,hex:()=>fx,hostname:()=>px,httpUrl:()=>Wb,instanceof:()=>Kx,int:()=>wl,int32:()=>vx,int64:()=>$x,intersection:()=>_o,ipv4:()=>rx,ipv6:()=>ox,json:()=>Wx,jwt:()=>lx,keyof:()=>Ix,ksuid:()=>tx,lazy:()=>lg,literal:()=>T,looseObject:()=>Ee,looseRecord:()=>Ox,mac:()=>nx,map:()=>jx,meta:()=>Jx,nan:()=>Zx,nanoid:()=>Bb,nativeEnum:()=>Nx,never:()=>Vl,nonoptional:()=>tg,null:()=>vo,nullable:()=>ta,nullish:()=>Ax,number:()=>ne,object:()=>z,optional:()=>fe,partialRecord:()=>Px,pipe:()=>ra,prefault:()=>eg,preprocess:()=>fa,promise:()=>Lx,readonly:()=>sg,record:()=>pe,refine:()=>fg,set:()=>Dx,strictObject:()=>Ex,string:()=>h,stringFormat:()=>dx,stringbool:()=>Hx,success:()=>Ux,superRefine:()=>mg,symbol:()=>xx,templateLiteral:()=>Cx,transform:()=>Kl,tuple:()=>qh,uint32:()=>_x,uint64:()=>bx,ulid:()=>Qb,undefined:()=>kx,union:()=>ie,unknown:()=>ue,url:()=>Hb,uuid:()=>Fb,uuidv4:()=>Vb,uuidv6:()=>Jb,uuidv7:()=>Kb,void:()=>wx,xid:()=>ex,xor:()=>Tx});var Qi={};yn(Qi,{endsWith:()=>ao,gt:()=>Dt,gte:()=>Ae,includes:()=>oo,length:()=>Wr,lowercase:()=>ro,lt:()=>jt,lte:()=>We,maxLength:()=>Hr,maxSize:()=>gr,mime:()=>so,minLength:()=>Xt,minSize:()=>Nt,multipleOf:()=>hr,negative:()=>nl,nonnegative:()=>il,nonpositive:()=>ol,normalize:()=>co,overwrite:()=>_t,positive:()=>rl,property:()=>al,regex:()=>to,size:()=>Kr,slugify:()=>Wi,startsWith:()=>io,toLowerCase:()=>lo,toUpperCase:()=>po,trim:()=>uo,uppercase:()=>no});var vr={};yn(vr,{ZodISODate:()=>yl,ZodISODateTime:()=>vl,ZodISODuration:()=>kl,ZodISOTime:()=>bl,date:()=>$l,datetime:()=>_l,duration:()=>Sl,time:()=>xl});var vl=p("ZodISODateTime",(t,e)=>{Oc.init(t,e),ce.init(t,e)});function _l(t){return Du(vl,t)}var yl=p("ZodISODate",(t,e)=>{jc.init(t,e),ce.init(t,e)});function $l(t){return Nu(yl,t)}var bl=p("ZodISOTime",(t,e)=>{Dc.init(t,e),ce.init(t,e)});function xl(t){return Ru(bl,t)}var kl=p("ZodISODuration",(t,e)=>{Nc.init(t,e),ce.init(t,e)});function Sl(t){return Au(kl,t)}var gh=(t,e)=>{fi.init(t,e),t.name="ZodError",Object.defineProperties(t,{format:{value:r=>hi(t,r)},flatten:{value:r=>mi(t,r)},addIssue:{value:r=>{t.issues.push(r),t.message=JSON.stringify(t.issues,qr,2)}},addIssues:{value:r=>{t.issues.push(...r),t.message=JSON.stringify(t.issues,qr,2)}},isEmpty:{get(){return t.issues.length===0}}})},ZN=p("ZodError",gh),Ge=p("ZodError",gh,{Parent:Error});var vh=Cn(Ge),_h=qn(Ge),yh=Vn(Ge),$h=Jn(Ge),bh=Of(Ge),xh=jf(Ge),kh=Df(Ge),Sh=Nf(Ge),wh=Rf(Ge),zh=Af(Ge),Ih=Uf(Ge),Eh=Zf(Ge);var q=p("ZodType",(t,e)=>(C.init(t,e),Object.assign(t["~standard"],{jsonSchema:{input:fo(t,"input"),output:fo(t,"output")}}),t.toJSONSchema=Em(t,{}),t.def=e,t.type=e.type,Object.defineProperty(t,"_def",{value:e}),t.check=(...r)=>t.clone(y.mergeDefs(e,{checks:[...e.checks??[],...r.map(n=>typeof n=="function"?{_zod:{check:n,def:{check:"custom"},onattach:[]}}:n)]}),{parent:!0}),t.with=t.check,t.clone=(r,n)=>Ne(t,r,n),t.brand=()=>t,t.register=((r,n)=>(r.add(t,n),t)),t.parse=(r,n)=>vh(t,r,n,{callee:t.parse}),t.safeParse=(r,n)=>yh(t,r,n),t.parseAsync=async(r,n)=>_h(t,r,n,{callee:t.parseAsync}),t.safeParseAsync=async(r,n)=>$h(t,r,n),t.spa=t.safeParseAsync,t.encode=(r,n)=>bh(t,r,n),t.decode=(r,n)=>xh(t,r,n),t.encodeAsync=async(r,n)=>kh(t,r,n),t.decodeAsync=async(r,n)=>Sh(t,r,n),t.safeEncode=(r,n)=>wh(t,r,n),t.safeDecode=(r,n)=>zh(t,r,n),t.safeEncodeAsync=async(r,n)=>Ih(t,r,n),t.safeDecodeAsync=async(r,n)=>Eh(t,r,n),t.refine=(r,n)=>t.check(fg(r,n)),t.superRefine=r=>t.check(mg(r)),t.overwrite=r=>t.check(_t(r)),t.optional=()=>fe(t),t.exactOptional=()=>Gh(t),t.nullable=()=>ta(t),t.nullish=()=>fe(ta(t)),t.nonoptional=r=>tg(t,r),t.array=()=>G(t),t.or=r=>ie([t,r]),t.and=r=>_o(t,r),t.transform=r=>ra(t,Kl(r)),t.default=r=>Yh(t,r),t.prefault=r=>eg(t,r),t.catch=r=>og(t,r),t.pipe=r=>ra(t,r),t.readonly=()=>sg(t),t.describe=r=>{let n=t.clone();return Re.add(n,{description:r}),n},Object.defineProperty(t,"description",{get(){return Re.get(t)?.description},configurable:!0}),t.meta=(...r)=>{if(r.length===0)return Re.get(t);let n=t.clone();return Re.add(n,r[0]),n},t.isOptional=()=>t.safeParse(void 0).success,t.isNullable=()=>t.safeParse(null).success,t.apply=r=>r(t),t)),zl=p("_ZodString",(t,e)=>{mr.init(t,e),q.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Tm(t,n,o,i);let r=t._zod.bag;t.format=r.format??null,t.minLength=r.minimum??null,t.maxLength=r.maximum??null,t.regex=(...n)=>t.check(to(...n)),t.includes=(...n)=>t.check(oo(...n)),t.startsWith=(...n)=>t.check(io(...n)),t.endsWith=(...n)=>t.check(ao(...n)),t.min=(...n)=>t.check(Xt(...n)),t.max=(...n)=>t.check(Hr(...n)),t.length=(...n)=>t.check(Wr(...n)),t.nonempty=(...n)=>t.check(Xt(1,...n)),t.lowercase=n=>t.check(ro(n)),t.uppercase=n=>t.check(no(n)),t.trim=()=>t.check(uo()),t.normalize=(...n)=>t.check(co(...n)),t.toLowerCase=()=>t.check(lo()),t.toUpperCase=()=>t.check(po()),t.slugify=()=>t.check(Wi())}),na=p("ZodString",(t,e)=>{mr.init(t,e),zl.init(t,e),t.email=r=>t.check(Ei(Il,r)),t.url=r=>t.check(eo(oa,r)),t.jwt=r=>t.check(Hi(ql,r)),t.emoji=r=>t.check(Di(El,r)),t.guid=r=>t.check(Qn(ea,r)),t.uuid=r=>t.check(Ti(Rt,r)),t.uuidv4=r=>t.check(Pi(Rt,r)),t.uuidv6=r=>t.check(Oi(Rt,r)),t.uuidv7=r=>t.check(ji(Rt,r)),t.nanoid=r=>t.check(Ni(Tl,r)),t.guid=r=>t.check(Qn(ea,r)),t.cuid=r=>t.check(Ri(Pl,r)),t.cuid2=r=>t.check(Ai(Ol,r)),t.ulid=r=>t.check(Ui(jl,r)),t.base64=r=>t.check(Vi(Ml,r)),t.base64url=r=>t.check(Ji(Cl,r)),t.xid=r=>t.check(Zi(Dl,r)),t.ksuid=r=>t.check(Mi(Nl,r)),t.ipv4=r=>t.check(Ci(Rl,r)),t.ipv6=r=>t.check(Li(Al,r)),t.cidrv4=r=>t.check(qi(Ul,r)),t.cidrv6=r=>t.check(Fi(Zl,r)),t.e164=r=>t.check(Ki(Ll,r)),t.datetime=r=>t.check(_l(r)),t.date=r=>t.check($l(r)),t.time=r=>t.check(xl(r)),t.duration=r=>t.check(Sl(r))});function h(t){return Ou(na,t)}var ce=p("ZodStringFormat",(t,e)=>{oe.init(t,e),zl.init(t,e)}),Il=p("ZodEmail",(t,e)=>{xc.init(t,e),ce.init(t,e)});function Lb(t){return Ei(Il,t)}var ea=p("ZodGUID",(t,e)=>{$c.init(t,e),ce.init(t,e)});function qb(t){return Qn(ea,t)}var Rt=p("ZodUUID",(t,e)=>{bc.init(t,e),ce.init(t,e)});function Fb(t){return Ti(Rt,t)}function Vb(t){return Pi(Rt,t)}function Jb(t){return Oi(Rt,t)}function Kb(t){return ji(Rt,t)}var oa=p("ZodURL",(t,e)=>{kc.init(t,e),ce.init(t,e)});function Hb(t){return eo(oa,t)}function Wb(t){return eo(oa,{protocol:/^https?$/,hostname:Qe.domain,...y.normalizeParams(t)})}var El=p("ZodEmoji",(t,e)=>{Sc.init(t,e),ce.init(t,e)});function Gb(t){return Di(El,t)}var Tl=p("ZodNanoID",(t,e)=>{wc.init(t,e),ce.init(t,e)});function Bb(t){return Ni(Tl,t)}var Pl=p("ZodCUID",(t,e)=>{zc.init(t,e),ce.init(t,e)});function Xb(t){return Ri(Pl,t)}var Ol=p("ZodCUID2",(t,e)=>{Ic.init(t,e),ce.init(t,e)});function Yb(t){return Ai(Ol,t)}var jl=p("ZodULID",(t,e)=>{Ec.init(t,e),ce.init(t,e)});function Qb(t){return Ui(jl,t)}var Dl=p("ZodXID",(t,e)=>{Tc.init(t,e),ce.init(t,e)});function ex(t){return Zi(Dl,t)}var Nl=p("ZodKSUID",(t,e)=>{Pc.init(t,e),ce.init(t,e)});function tx(t){return Mi(Nl,t)}var Rl=p("ZodIPv4",(t,e)=>{Rc.init(t,e),ce.init(t,e)});function rx(t){return Ci(Rl,t)}var Th=p("ZodMAC",(t,e)=>{Uc.init(t,e),ce.init(t,e)});function nx(t){return ju(Th,t)}var Al=p("ZodIPv6",(t,e)=>{Ac.init(t,e),ce.init(t,e)});function ox(t){return Li(Al,t)}var Ul=p("ZodCIDRv4",(t,e)=>{Zc.init(t,e),ce.init(t,e)});function ix(t){return qi(Ul,t)}var Zl=p("ZodCIDRv6",(t,e)=>{Mc.init(t,e),ce.init(t,e)});function ax(t){return Fi(Zl,t)}var Ml=p("ZodBase64",(t,e)=>{Cc.init(t,e),ce.init(t,e)});function sx(t){return Vi(Ml,t)}var Cl=p("ZodBase64URL",(t,e)=>{Lc.init(t,e),ce.init(t,e)});function cx(t){return Ji(Cl,t)}var Ll=p("ZodE164",(t,e)=>{qc.init(t,e),ce.init(t,e)});function ux(t){return Ki(Ll,t)}var ql=p("ZodJWT",(t,e)=>{Fc.init(t,e),ce.init(t,e)});function lx(t){return Hi(ql,t)}var go=p("ZodCustomStringFormat",(t,e)=>{Vc.init(t,e),ce.init(t,e)});function dx(t,e,r={}){return Gr(go,t,e,r)}function px(t){return Gr(go,"hostname",Qe.hostname,t)}function fx(t){return Gr(go,"hex",Qe.hex,t)}function mx(t,e){let r=e?.enc??"hex",n=`${t}_${r}`,o=Qe[n];if(!o)throw new Error(`Unrecognized hash format: ${n}`);return Gr(go,n,o,e)}var ia=p("ZodNumber",(t,e)=>{Si.init(t,e),q.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Pm(t,n,o,i),t.gt=(n,o)=>t.check(Dt(n,o)),t.gte=(n,o)=>t.check(Ae(n,o)),t.min=(n,o)=>t.check(Ae(n,o)),t.lt=(n,o)=>t.check(jt(n,o)),t.lte=(n,o)=>t.check(We(n,o)),t.max=(n,o)=>t.check(We(n,o)),t.int=n=>t.check(wl(n)),t.safe=n=>t.check(wl(n)),t.positive=n=>t.check(Dt(0,n)),t.nonnegative=n=>t.check(Ae(0,n)),t.negative=n=>t.check(jt(0,n)),t.nonpositive=n=>t.check(We(0,n)),t.multipleOf=(n,o)=>t.check(hr(n,o)),t.step=(n,o)=>t.check(hr(n,o)),t.finite=()=>t;let r=t._zod.bag;t.minValue=Math.max(r.minimum??Number.NEGATIVE_INFINITY,r.exclusiveMinimum??Number.NEGATIVE_INFINITY)??null,t.maxValue=Math.min(r.maximum??Number.POSITIVE_INFINITY,r.exclusiveMaximum??Number.POSITIVE_INFINITY)??null,t.isInt=(r.format??"").includes("int")||Number.isSafeInteger(r.multipleOf??.5),t.isFinite=!0,t.format=r.format??null});function ne(t){return Uu(ia,t)}var Xr=p("ZodNumberFormat",(t,e)=>{Jc.init(t,e),ia.init(t,e)});function wl(t){return Zu(Xr,t)}function hx(t){return Mu(Xr,t)}function gx(t){return Cu(Xr,t)}function vx(t){return Lu(Xr,t)}function _x(t){return qu(Xr,t)}var aa=p("ZodBoolean",(t,e)=>{Bn.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Om(t,r,n,o)});function _e(t){return Fu(aa,t)}var sa=p("ZodBigInt",(t,e)=>{wi.init(t,e),q.init(t,e),t._zod.processJSONSchema=(n,o,i)=>jm(t,n,o,i),t.gte=(n,o)=>t.check(Ae(n,o)),t.min=(n,o)=>t.check(Ae(n,o)),t.gt=(n,o)=>t.check(Dt(n,o)),t.gte=(n,o)=>t.check(Ae(n,o)),t.min=(n,o)=>t.check(Ae(n,o)),t.lt=(n,o)=>t.check(jt(n,o)),t.lte=(n,o)=>t.check(We(n,o)),t.max=(n,o)=>t.check(We(n,o)),t.positive=n=>t.check(Dt(BigInt(0),n)),t.negative=n=>t.check(jt(BigInt(0),n)),t.nonpositive=n=>t.check(We(BigInt(0),n)),t.nonnegative=n=>t.check(Ae(BigInt(0),n)),t.multipleOf=(n,o)=>t.check(hr(n,o));let r=t._zod.bag;t.minValue=r.minimum??null,t.maxValue=r.maximum??null,t.format=r.format??null});function yx(t){return Vu(sa,t)}var Fl=p("ZodBigIntFormat",(t,e)=>{Kc.init(t,e),sa.init(t,e)});function $x(t){return Ju(Fl,t)}function bx(t){return Ku(Fl,t)}var Ph=p("ZodSymbol",(t,e)=>{Hc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Dm(t,r,n,o)});function xx(t){return Hu(Ph,t)}var Oh=p("ZodUndefined",(t,e)=>{Wc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Rm(t,r,n,o)});function kx(t){return Wu(Oh,t)}var jh=p("ZodNull",(t,e)=>{Gc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Nm(t,r,n,o)});function vo(t){return Gu(jh,t)}var Dh=p("ZodAny",(t,e)=>{Bc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Zm(t,r,n,o)});function Sx(){return Bu(Dh)}var Nh=p("ZodUnknown",(t,e)=>{Xc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Mm(t,r,n,o)});function ue(){return Xu(Nh)}var Rh=p("ZodNever",(t,e)=>{Yc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Um(t,r,n,o)});function Vl(t){return Yu(Rh,t)}var Ah=p("ZodVoid",(t,e)=>{Qc.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Am(t,r,n,o)});function wx(t){return Qu(Ah,t)}var Jl=p("ZodDate",(t,e)=>{eu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Cm(t,n,o,i),t.min=(n,o)=>t.check(Ae(n,o)),t.max=(n,o)=>t.check(We(n,o));let r=t._zod.bag;t.minDate=r.minimum?new Date(r.minimum):null,t.maxDate=r.maximum?new Date(r.maximum):null});function zx(t){return el(Jl,t)}var Uh=p("ZodArray",(t,e)=>{tu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Ym(t,r,n,o),t.element=e.element,t.min=(r,n)=>t.check(Xt(r,n)),t.nonempty=r=>t.check(Xt(1,r)),t.max=(r,n)=>t.check(Hr(r,n)),t.length=(r,n)=>t.check(Wr(r,n)),t.unwrap=()=>t.element});function G(t,e){return Im(Uh,t,e)}function Ix(t){let e=t._zod.def.shape;return Te(Object.keys(e))}var ca=p("ZodObject",(t,e)=>{wm.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Qm(t,r,n,o),y.defineLazy(t,"shape",()=>e.shape),t.keyof=()=>Te(Object.keys(t._zod.def.shape)),t.catchall=r=>t.clone({...t._zod.def,catchall:r}),t.passthrough=()=>t.clone({...t._zod.def,catchall:ue()}),t.loose=()=>t.clone({...t._zod.def,catchall:ue()}),t.strict=()=>t.clone({...t._zod.def,catchall:Vl()}),t.strip=()=>t.clone({...t._zod.def,catchall:void 0}),t.extend=r=>y.extend(t,r),t.safeExtend=r=>y.safeExtend(t,r),t.merge=r=>y.merge(t,r),t.pick=r=>y.pick(t,r),t.omit=r=>y.omit(t,r),t.partial=(...r)=>y.partial(Hl,t,r[0]),t.required=(...r)=>y.required(Wl,t,r[0])});function z(t,e){let r={type:"object",shape:t??{},...y.normalizeParams(e)};return new ca(r)}function Ex(t,e){return new ca({type:"object",shape:t,catchall:Vl(),...y.normalizeParams(e)})}function Ee(t,e){return new ca({type:"object",shape:t,catchall:ue(),...y.normalizeParams(e)})}var ua=p("ZodUnion",(t,e)=>{Xn.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>ml(t,r,n,o),t.options=e.options});function ie(t,e){return new ua({type:"union",options:t,...y.normalizeParams(e)})}var Zh=p("ZodXor",(t,e)=>{ua.init(t,e),ru.init(t,e),t._zod.processJSONSchema=(r,n,o)=>ml(t,r,n,o),t.options=e.options});function Tx(t,e){return new Zh({type:"union",options:t,inclusive:!1,...y.normalizeParams(e)})}var Mh=p("ZodDiscriminatedUnion",(t,e)=>{ua.init(t,e),nu.init(t,e)});function la(t,e,r){return new Mh({type:"union",options:e,discriminator:t,...y.normalizeParams(r)})}var Ch=p("ZodIntersection",(t,e)=>{ou.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>eh(t,r,n,o)});function _o(t,e){return new Ch({type:"intersection",left:t,right:e})}var Lh=p("ZodTuple",(t,e)=>{zi.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>th(t,r,n,o),t.rest=r=>t.clone({...t._zod.def,rest:r})});function qh(t,e,r){let n=e instanceof C,o=n?r:e,i=n?e:null;return new Lh({type:"tuple",items:t,rest:i,...y.normalizeParams(o)})}var da=p("ZodRecord",(t,e)=>{iu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>rh(t,r,n,o),t.keyType=e.keyType,t.valueType=e.valueType});function pe(t,e,r){return new da({type:"record",keyType:t,valueType:e,...y.normalizeParams(r)})}function Px(t,e,r){let n=Ne(t);return n._zod.values=void 0,new da({type:"record",keyType:n,valueType:e,...y.normalizeParams(r)})}function Ox(t,e,r){return new da({type:"record",keyType:t,valueType:e,mode:"loose",...y.normalizeParams(r)})}var Fh=p("ZodMap",(t,e)=>{au.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Bm(t,r,n,o),t.keyType=e.keyType,t.valueType=e.valueType,t.min=(...r)=>t.check(Nt(...r)),t.nonempty=r=>t.check(Nt(1,r)),t.max=(...r)=>t.check(gr(...r)),t.size=(...r)=>t.check(Kr(...r))});function jx(t,e,r){return new Fh({type:"map",keyType:t,valueType:e,...y.normalizeParams(r)})}var Vh=p("ZodSet",(t,e)=>{su.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Xm(t,r,n,o),t.min=(...r)=>t.check(Nt(...r)),t.nonempty=r=>t.check(Nt(1,r)),t.max=(...r)=>t.check(gr(...r)),t.size=(...r)=>t.check(Kr(...r))});function Dx(t,e){return new Vh({type:"set",valueType:t,...y.normalizeParams(e)})}var ho=p("ZodEnum",(t,e)=>{cu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(n,o,i)=>Lm(t,n,o,i),t.enum=e.entries,t.options=Object.values(e.entries);let r=new Set(Object.keys(e.entries));t.extract=(n,o)=>{let i={};for(let a of n)if(r.has(a))i[a]=e.entries[a];else throw new Error(`Key ${a} not found in enum`);return new ho({...e,checks:[],...y.normalizeParams(o),entries:i})},t.exclude=(n,o)=>{let i={...e.entries};for(let a of n)if(r.has(a))delete i[a];else throw new Error(`Key ${a} not found in enum`);return new ho({...e,checks:[],...y.normalizeParams(o),entries:i})}});function Te(t,e){let r=Array.isArray(t)?Object.fromEntries(t.map(n=>[n,n])):t;return new ho({type:"enum",entries:r,...y.normalizeParams(e)})}function Nx(t,e){return new ho({type:"enum",entries:t,...y.normalizeParams(e)})}var Jh=p("ZodLiteral",(t,e)=>{uu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>qm(t,r,n,o),t.values=new Set(e.values),Object.defineProperty(t,"value",{get(){if(e.values.length>1)throw new Error("This schema contains multiple valid literal values. Use `.values` instead.");return e.values[0]}})});function T(t,e){return new Jh({type:"literal",values:Array.isArray(t)?t:[t],...y.normalizeParams(e)})}var Kh=p("ZodFile",(t,e)=>{lu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Jm(t,r,n,o),t.min=(r,n)=>t.check(Nt(r,n)),t.max=(r,n)=>t.check(gr(r,n)),t.mime=(r,n)=>t.check(so(Array.isArray(r)?r:[r],n))});function Rx(t){return sl(Kh,t)}var Hh=p("ZodTransform",(t,e)=>{du.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Gm(t,r,n,o),t._zod.parse=(r,n)=>{if(n.direction==="backward")throw new dr(t.constructor.name);r.addIssue=i=>{if(typeof i=="string")r.issues.push(y.issue(i,r.value,e));else{let a=i;a.fatal&&(a.continue=!1),a.code??(a.code="custom"),a.input??(a.input=r.value),a.inst??(a.inst=t),r.issues.push(y.issue(a))}};let o=e.transform(r.value,r);return o instanceof Promise?o.then(i=>(r.value=i,r)):(r.value=o,r)}});function Kl(t){return new Hh({type:"transform",transform:t})}var Hl=p("ZodOptional",(t,e)=>{Ii.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>hl(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function fe(t){return new Hl({type:"optional",innerType:t})}var Wh=p("ZodExactOptional",(t,e)=>{pu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>hl(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function Gh(t){return new Wh({type:"optional",innerType:t})}var Bh=p("ZodNullable",(t,e)=>{fu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>nh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function ta(t){return new Bh({type:"nullable",innerType:t})}function Ax(t){return fe(ta(t))}var Xh=p("ZodDefault",(t,e)=>{mu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>ih(t,r,n,o),t.unwrap=()=>t._zod.def.innerType,t.removeDefault=t.unwrap});function Yh(t,e){return new Xh({type:"default",innerType:t,get defaultValue(){return typeof e=="function"?e():y.shallowClone(e)}})}var Qh=p("ZodPrefault",(t,e)=>{hu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>ah(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function eg(t,e){return new Qh({type:"prefault",innerType:t,get defaultValue(){return typeof e=="function"?e():y.shallowClone(e)}})}var Wl=p("ZodNonOptional",(t,e)=>{gu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>oh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function tg(t,e){return new Wl({type:"nonoptional",innerType:t,...y.normalizeParams(e)})}var rg=p("ZodSuccess",(t,e)=>{vu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Km(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function Ux(t){return new rg({type:"success",innerType:t})}var ng=p("ZodCatch",(t,e)=>{_u.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>sh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType,t.removeCatch=t.unwrap});function og(t,e){return new ng({type:"catch",innerType:t,catchValue:typeof e=="function"?e:()=>e})}var ig=p("ZodNaN",(t,e)=>{yu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Fm(t,r,n,o)});function Zx(t){return tl(ig,t)}var Gl=p("ZodPipe",(t,e)=>{$u.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>ch(t,r,n,o),t.in=e.in,t.out=e.out});function ra(t,e){return new Gl({type:"pipe",in:t,out:e})}var Bl=p("ZodCodec",(t,e)=>{Gl.init(t,e),Yn.init(t,e)});function Mx(t,e,r){return new Bl({type:"pipe",in:t,out:e,transform:r.decode,reverseTransform:r.encode})}var ag=p("ZodReadonly",(t,e)=>{bu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>uh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function sg(t){return new ag({type:"readonly",innerType:t})}var cg=p("ZodTemplateLiteral",(t,e)=>{xu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Vm(t,r,n,o)});function Cx(t,e){return new cg({type:"template_literal",parts:t,...y.normalizeParams(e)})}var ug=p("ZodLazy",(t,e)=>{wu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>dh(t,r,n,o),t.unwrap=()=>t._zod.def.getter()});function lg(t){return new ug({type:"lazy",getter:t})}var dg=p("ZodPromise",(t,e)=>{Su.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>lh(t,r,n,o),t.unwrap=()=>t._zod.def.innerType});function Lx(t){return new dg({type:"promise",innerType:t})}var pg=p("ZodFunction",(t,e)=>{ku.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Wm(t,r,n,o)});function qx(t){return new pg({type:"function",input:Array.isArray(t?.input)?qh(t?.input):t?.input??G(ue()),output:t?.output??ue()})}var pa=p("ZodCustom",(t,e)=>{zu.init(t,e),q.init(t,e),t._zod.processJSONSchema=(r,n,o)=>Hm(t,r,n,o)});function Fx(t){let e=new se({check:"custom"});return e._zod.check=t,e}function Xl(t,e){return cl(pa,t??(()=>!0),e)}function fg(t,e={}){return ul(pa,t,e)}function mg(t){return ll(t)}var Vx=dl,Jx=pl;function Kx(t,e={}){let r=new pa({type:"custom",check:"custom",fn:n=>n instanceof t,abort:!0,...y.normalizeParams(e)});return r._zod.bag.Class=t,r._zod.check=n=>{n.value instanceof t||n.issues.push({code:"invalid_type",expected:t.name,input:n.value,inst:r,path:[...r._zod.def.path??[]]})},r}var Hx=(...t)=>fl({Codec:Bl,Boolean:aa,String:na},...t);function Wx(t){let e=lg(()=>ie([h(t),ne(),_e(),vo(),G(e),pe(h(),e)]));return e}function fa(t,e){return ra(Kl(t),e)}var hg;hg||(hg={});var KN={...mo,...Qi,iso:vr};ye(Iu());var Ql="2025-11-25";var gg=[Ql,"2025-06-18","2025-03-26","2024-11-05","2024-10-07"],Qt="io.modelcontextprotocol/related-task",ha="2.0",be=Xl(t=>t!==null&&(typeof t=="object"||typeof t=="function")),vg=ie([h(),ne().int()]),_g=h(),d4=Ee({ttl:ie([ne(),vo()]).optional(),pollInterval:ne().optional()}),Yx=z({ttl:ne().optional()}),Qx=z({taskId:h()}),ed=Ee({progressToken:vg.optional(),[Qt]:Qx.optional()}),Be=z({_meta:ed.optional()}),yo=Be.extend({task:Yx.optional()}),yg=t=>yo.safeParse(t).success,xe=z({method:h(),params:Be.loose().optional()}),et=z({_meta:ed.optional()}),tt=z({method:h(),params:et.loose().optional()}),ke=Ee({_meta:ed.optional()}),ga=ie([h(),ne().int()]),$g=z({jsonrpc:T(ha),id:ga,...xe.shape}).strict(),td=t=>$g.safeParse(t).success,bg=z({jsonrpc:T(ha),...tt.shape}).strict(),xg=t=>bg.safeParse(t).success,rd=z({jsonrpc:T(ha),id:ga,result:ke}).strict(),$o=t=>rd.safeParse(t).success;var Y;(function(t){t[t.ConnectionClosed=-32e3]="ConnectionClosed",t[t.RequestTimeout=-32001]="RequestTimeout",t[t.ParseError=-32700]="ParseError",t[t.InvalidRequest=-32600]="InvalidRequest",t[t.MethodNotFound=-32601]="MethodNotFound",t[t.InvalidParams=-32602]="InvalidParams",t[t.InternalError=-32603]="InternalError",t[t.UrlElicitationRequired=-32042]="UrlElicitationRequired"})(Y||(Y={}));var nd=z({jsonrpc:T(ha),id:ga.optional(),error:z({code:ne().int(),message:h(),data:ue().optional()})}).strict();var kg=t=>nd.safeParse(t).success;var Sg=ie([$g,bg,rd,nd]),p4=ie([rd,nd]),va=ke.strict(),ek=et.extend({requestId:ga.optional(),reason:h().optional()}),_a=tt.extend({method:T("notifications/cancelled"),params:ek}),tk=z({src:h(),mimeType:h().optional(),sizes:G(h()).optional(),theme:Te(["light","dark"]).optional()}),bo=z({icons:G(tk).optional()}),Yr=z({name:h(),title:h().optional()}),wg=Yr.extend({...Yr.shape,...bo.shape,version:h(),websiteUrl:h().optional(),description:h().optional()}),rk=_o(z({applyDefaults:_e().optional()}),pe(h(),ue())),nk=fa(t=>t&&typeof t=="object"&&!Array.isArray(t)&&Object.keys(t).length===0?{form:{}}:t,_o(z({form:rk.optional(),url:be.optional()}),pe(h(),ue()).optional())),ok=Ee({list:be.optional(),cancel:be.optional(),requests:Ee({sampling:Ee({createMessage:be.optional()}).optional(),elicitation:Ee({create:be.optional()}).optional()}).optional()}),ik=Ee({list:be.optional(),cancel:be.optional(),requests:Ee({tools:Ee({call:be.optional()}).optional()}).optional()}),ak=z({experimental:pe(h(),be).optional(),sampling:z({context:be.optional(),tools:be.optional()}).optional(),elicitation:nk.optional(),roots:z({listChanged:_e().optional()}).optional(),tasks:ok.optional()}),sk=Be.extend({protocolVersion:h(),capabilities:ak,clientInfo:wg}),od=xe.extend({method:T("initialize"),params:sk});var ck=z({experimental:pe(h(),be).optional(),logging:be.optional(),completions:be.optional(),prompts:z({listChanged:_e().optional()}).optional(),resources:z({subscribe:_e().optional(),listChanged:_e().optional()}).optional(),tools:z({listChanged:_e().optional()}).optional(),tasks:ik.optional()}),uk=ke.extend({protocolVersion:h(),capabilities:ck,serverInfo:wg,instructions:h().optional()}),id=tt.extend({method:T("notifications/initialized"),params:et.optional()});var ya=xe.extend({method:T("ping"),params:Be.optional()}),lk=z({progress:ne(),total:fe(ne()),message:fe(h())}),dk=z({...et.shape,...lk.shape,progressToken:vg}),$a=tt.extend({method:T("notifications/progress"),params:dk}),pk=Be.extend({cursor:_g.optional()}),xo=xe.extend({params:pk.optional()}),ko=ke.extend({nextCursor:_g.optional()}),fk=Te(["working","input_required","completed","failed","cancelled"]),So=z({taskId:h(),status:fk,ttl:ie([ne(),vo()]),createdAt:h(),lastUpdatedAt:h(),pollInterval:fe(ne()),statusMessage:fe(h())}),Qr=ke.extend({task:So}),mk=et.merge(So),wo=tt.extend({method:T("notifications/tasks/status"),params:mk}),ba=xe.extend({method:T("tasks/get"),params:Be.extend({taskId:h()})}),xa=ke.merge(So),ka=xe.extend({method:T("tasks/result"),params:Be.extend({taskId:h()})}),f4=ke.loose(),Sa=xo.extend({method:T("tasks/list")}),wa=ko.extend({tasks:G(So)}),za=xe.extend({method:T("tasks/cancel"),params:Be.extend({taskId:h()})}),zg=ke.merge(So),Ig=z({uri:h(),mimeType:fe(h()),_meta:pe(h(),ue()).optional()}),Eg=Ig.extend({text:h()}),ad=h().refine(t=>{try{return atob(t),!0}catch{return!1}},{message:"Invalid Base64 string"}),Tg=Ig.extend({blob:ad}),zo=Te(["user","assistant"]),en=z({audience:G(zo).optional(),priority:ne().min(0).max(1).optional(),lastModified:vr.datetime({offset:!0}).optional()}),Pg=z({...Yr.shape,...bo.shape,uri:h(),description:fe(h()),mimeType:fe(h()),annotations:en.optional(),_meta:fe(Ee({}))}),hk=z({...Yr.shape,...bo.shape,uriTemplate:h(),description:fe(h()),mimeType:fe(h()),annotations:en.optional(),_meta:fe(Ee({}))}),gk=xo.extend({method:T("resources/list")}),vk=ko.extend({resources:G(Pg)}),_k=xo.extend({method:T("resources/templates/list")}),yk=ko.extend({resourceTemplates:G(hk)}),sd=Be.extend({uri:h()}),$k=sd,bk=xe.extend({method:T("resources/read"),params:$k}),xk=ke.extend({contents:G(ie([Eg,Tg]))}),kk=tt.extend({method:T("notifications/resources/list_changed"),params:et.optional()}),Sk=sd,wk=xe.extend({method:T("resources/subscribe"),params:Sk}),zk=sd,Ik=xe.extend({method:T("resources/unsubscribe"),params:zk}),Ek=et.extend({uri:h()}),Tk=tt.extend({method:T("notifications/resources/updated"),params:Ek}),Pk=z({name:h(),description:fe(h()),required:fe(_e())}),Ok=z({...Yr.shape,...bo.shape,description:fe(h()),arguments:fe(G(Pk)),_meta:fe(Ee({}))}),jk=xo.extend({method:T("prompts/list")}),Dk=ko.extend({prompts:G(Ok)}),Nk=Be.extend({name:h(),arguments:pe(h(),h()).optional()}),Rk=xe.extend({method:T("prompts/get"),params:Nk}),cd=z({type:T("text"),text:h(),annotations:en.optional(),_meta:pe(h(),ue()).optional()}),ud=z({type:T("image"),data:ad,mimeType:h(),annotations:en.optional(),_meta:pe(h(),ue()).optional()}),ld=z({type:T("audio"),data:ad,mimeType:h(),annotations:en.optional(),_meta:pe(h(),ue()).optional()}),Ak=z({type:T("tool_use"),name:h(),id:h(),input:pe(h(),ue()),_meta:pe(h(),ue()).optional()}),Uk=z({type:T("resource"),resource:ie([Eg,Tg]),annotations:en.optional(),_meta:pe(h(),ue()).optional()}),Zk=Pg.extend({type:T("resource_link")}),dd=ie([cd,ud,ld,Zk,Uk]),Mk=z({role:zo,content:dd}),Ck=ke.extend({description:h().optional(),messages:G(Mk)}),Lk=tt.extend({method:T("notifications/prompts/list_changed"),params:et.optional()}),qk=z({title:h().optional(),readOnlyHint:_e().optional(),destructiveHint:_e().optional(),idempotentHint:_e().optional(),openWorldHint:_e().optional()}),Fk=z({taskSupport:Te(["required","optional","forbidden"]).optional()}),Og=z({...Yr.shape,...bo.shape,description:h().optional(),inputSchema:z({type:T("object"),properties:pe(h(),be).optional(),required:G(h()).optional()}).catchall(ue()),outputSchema:z({type:T("object"),properties:pe(h(),be).optional(),required:G(h()).optional()}).catchall(ue()).optional(),annotations:qk.optional(),execution:Fk.optional(),_meta:pe(h(),ue()).optional()}),pd=xo.extend({method:T("tools/list")}),Vk=ko.extend({tools:G(Og)}),Ia=ke.extend({content:G(dd).default([]),structuredContent:pe(h(),ue()).optional(),isError:_e().optional()}),m4=Ia.or(ke.extend({toolResult:ue()})),Jk=yo.extend({name:h(),arguments:pe(h(),ue()).optional()}),Io=xe.extend({method:T("tools/call"),params:Jk}),Kk=tt.extend({method:T("notifications/tools/list_changed"),params:et.optional()}),h4=z({autoRefresh:_e().default(!0),debounceMs:ne().int().nonnegative().default(300)}),Eo=Te(["debug","info","notice","warning","error","critical","alert","emergency"]),Hk=Be.extend({level:Eo}),fd=xe.extend({method:T("logging/setLevel"),params:Hk}),Wk=et.extend({level:Eo,logger:h().optional(),data:ue()}),Gk=tt.extend({method:T("notifications/message"),params:Wk}),Bk=z({name:h().optional()}),Xk=z({hints:G(Bk).optional(),costPriority:ne().min(0).max(1).optional(),speedPriority:ne().min(0).max(1).optional(),intelligencePriority:ne().min(0).max(1).optional()}),Yk=z({mode:Te(["auto","required","none"]).optional()}),Qk=z({type:T("tool_result"),toolUseId:h().describe("The unique identifier for the corresponding tool call."),content:G(dd).default([]),structuredContent:z({}).loose().optional(),isError:_e().optional(),_meta:pe(h(),ue()).optional()}),eS=la("type",[cd,ud,ld]),ma=la("type",[cd,ud,ld,Ak,Qk]),tS=z({role:zo,content:ie([ma,G(ma)]),_meta:pe(h(),ue()).optional()}),rS=yo.extend({messages:G(tS),modelPreferences:Xk.optional(),systemPrompt:h().optional(),includeContext:Te(["none","thisServer","allServers"]).optional(),temperature:ne().optional(),maxTokens:ne().int(),stopSequences:G(h()).optional(),metadata:be.optional(),tools:G(Og).optional(),toolChoice:Yk.optional()}),nS=xe.extend({method:T("sampling/createMessage"),params:rS}),md=ke.extend({model:h(),stopReason:fe(Te(["endTurn","stopSequence","maxTokens"]).or(h())),role:zo,content:eS}),hd=ke.extend({model:h(),stopReason:fe(Te(["endTurn","stopSequence","maxTokens","toolUse"]).or(h())),role:zo,content:ie([ma,G(ma)])}),oS=z({type:T("boolean"),title:h().optional(),description:h().optional(),default:_e().optional()}),iS=z({type:T("string"),title:h().optional(),description:h().optional(),minLength:ne().optional(),maxLength:ne().optional(),format:Te(["email","uri","date","date-time"]).optional(),default:h().optional()}),aS=z({type:Te(["number","integer"]),title:h().optional(),description:h().optional(),minimum:ne().optional(),maximum:ne().optional(),default:ne().optional()}),sS=z({type:T("string"),title:h().optional(),description:h().optional(),enum:G(h()),default:h().optional()}),cS=z({type:T("string"),title:h().optional(),description:h().optional(),oneOf:G(z({const:h(),title:h()})),default:h().optional()}),uS=z({type:T("string"),title:h().optional(),description:h().optional(),enum:G(h()),enumNames:G(h()).optional(),default:h().optional()}),lS=ie([sS,cS]),dS=z({type:T("array"),title:h().optional(),description:h().optional(),minItems:ne().optional(),maxItems:ne().optional(),items:z({type:T("string"),enum:G(h())}),default:G(h()).optional()}),pS=z({type:T("array"),title:h().optional(),description:h().optional(),minItems:ne().optional(),maxItems:ne().optional(),items:z({anyOf:G(z({const:h(),title:h()}))}),default:G(h()).optional()}),fS=ie([dS,pS]),mS=ie([uS,lS,fS]),hS=ie([mS,oS,iS,aS]),gS=yo.extend({mode:T("form").optional(),message:h(),requestedSchema:z({type:T("object"),properties:pe(h(),hS),required:G(h()).optional()})}),vS=yo.extend({mode:T("url"),message:h(),elicitationId:h(),url:h().url()}),_S=ie([gS,vS]),yS=xe.extend({method:T("elicitation/create"),params:_S}),$S=et.extend({elicitationId:h()}),bS=tt.extend({method:T("notifications/elicitation/complete"),params:$S}),Ea=ke.extend({action:Te(["accept","decline","cancel"]),content:fa(t=>t===null?void 0:t,pe(h(),ie([h(),ne(),_e(),G(h())])).optional())}),xS=z({type:T("ref/resource"),uri:h()});var kS=z({type:T("ref/prompt"),name:h()}),SS=Be.extend({ref:ie([kS,xS]),argument:z({name:h(),value:h()}),context:z({arguments:pe(h(),h()).optional()}).optional()}),wS=xe.extend({method:T("completion/complete"),params:SS});var zS=ke.extend({completion:Ee({values:G(h()).max(100),total:fe(ne().int()),hasMore:fe(_e())})}),IS=z({uri:h().startsWith("file://"),name:h().optional(),_meta:pe(h(),ue()).optional()}),ES=xe.extend({method:T("roots/list"),params:Be.optional()}),gd=ke.extend({roots:G(IS)}),TS=tt.extend({method:T("notifications/roots/list_changed"),params:et.optional()}),g4=ie([ya,od,wS,fd,Rk,jk,gk,_k,bk,wk,Ik,Io,pd,ba,ka,Sa,za]),v4=ie([_a,$a,id,TS,wo]),_4=ie([va,md,hd,Ea,gd,xa,wa,Qr]),y4=ie([ya,nS,yS,ES,ba,ka,Sa,za]),$4=ie([_a,$a,Gk,Tk,kk,Kk,Lk,wo,bS]),b4=ie([va,uk,zS,Ck,Dk,vk,yk,xk,Ia,Vk,xa,wa,Qr]),J=class t extends Error{constructor(e,r,n){super(`MCP error ${e}: ${r}`),this.code=e,this.data=n,this.name="McpError"}static fromError(e,r,n){if(e===Y.UrlElicitationRequired&&n){let o=n;if(o.elicitations)return new Yl(o.elicitations,r)}return new t(e,r,n)}},Yl=class extends J{constructor(e,r=`URL elicitation${e.length>1?"s":""} required`){super(Y.UrlElicitationRequired,r,{elicitations:e})}get elicitations(){return this.data?.elicitations??[]}};function er(t){return t==="completed"||t==="failed"||t==="cancelled"}var t1=new Set("ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvxyz0123456789");function vd(t){let r=Yi(t)?.method;if(!r)throw new Error("Schema is missing a method literal");let n=hh(r);if(typeof n!="string")throw new Error("Schema method literal must be a string");return n}function _d(t,e){let r=Yt(t,e);if(!r.success)throw r.error;return r.data}var RS=6e4,Ta=class{constructor(e){this._options=e,this._requestMessageId=0,this._requestHandlers=new Map,this._requestHandlerAbortControllers=new Map,this._notificationHandlers=new Map,this._responseHandlers=new Map,this._progressHandlers=new Map,this._timeoutInfo=new Map,this._pendingDebouncedNotifications=new Set,this._taskProgressTokens=new Map,this._requestResolvers=new Map,this.setNotificationHandler(_a,r=>{this._oncancel(r)}),this.setNotificationHandler($a,r=>{this._onprogress(r)}),this.setRequestHandler(ya,r=>({})),this._taskStore=e?.taskStore,this._taskMessageQueue=e?.taskMessageQueue,this._taskStore&&(this.setRequestHandler(ba,async(r,n)=>{let o=await this._taskStore.getTask(r.params.taskId,n.sessionId);if(!o)throw new J(Y.InvalidParams,"Failed to retrieve task: Task not found");return{...o}}),this.setRequestHandler(ka,async(r,n)=>{let o=async()=>{let i=r.params.taskId;if(this._taskMessageQueue){let s;for(;s=await this._taskMessageQueue.dequeue(i,n.sessionId);){if(s.type==="response"||s.type==="error"){let c=s.message,u=c.id,l=this._requestResolvers.get(u);if(l)if(this._requestResolvers.delete(u),s.type==="response")l(c);else{let d=c,m=new J(d.error.code,d.error.message,d.error.data);l(m)}else{let d=s.type==="response"?"Response":"Error";this._onerror(new Error(`${d} handler missing for request ${u}`))}continue}await this._transport?.send(s.message,{relatedRequestId:n.requestId})}}let a=await this._taskStore.getTask(i,n.sessionId);if(!a)throw new J(Y.InvalidParams,`Task not found: ${i}`);if(!er(a.status))return await this._waitForTaskUpdate(i,n.signal),await o();if(er(a.status)){let s=await this._taskStore.getTaskResult(i,n.sessionId);return this._clearTaskQueue(i),{...s,_meta:{...s._meta,[Qt]:{taskId:i}}}}return await o()};return await o()}),this.setRequestHandler(Sa,async(r,n)=>{try{let{tasks:o,nextCursor:i}=await this._taskStore.listTasks(r.params?.cursor,n.sessionId);return{tasks:o,nextCursor:i,_meta:{}}}catch(o){throw new J(Y.InvalidParams,`Failed to list tasks: ${o instanceof Error?o.message:String(o)}`)}}),this.setRequestHandler(za,async(r,n)=>{try{let o=await this._taskStore.getTask(r.params.taskId,n.sessionId);if(!o)throw new J(Y.InvalidParams,`Task not found: ${r.params.taskId}`);if(er(o.status))throw new J(Y.InvalidParams,`Cannot cancel task in terminal status: ${o.status}`);await this._taskStore.updateTaskStatus(r.params.taskId,"cancelled","Client cancelled task execution.",n.sessionId),this._clearTaskQueue(r.params.taskId);let i=await this._taskStore.getTask(r.params.taskId,n.sessionId);if(!i)throw new J(Y.InvalidParams,`Task not found after cancellation: ${r.params.taskId}`);return{_meta:{},...i}}catch(o){throw o instanceof J?o:new J(Y.InvalidRequest,`Failed to cancel task: ${o instanceof Error?o.message:String(o)}`)}}))}async _oncancel(e){if(!e.params.requestId)return;this._requestHandlerAbortControllers.get(e.params.requestId)?.abort(e.params.reason)}_setupTimeout(e,r,n,o,i=!1){this._timeoutInfo.set(e,{timeoutId:setTimeout(o,r),startTime:Date.now(),timeout:r,maxTotalTimeout:n,resetTimeoutOnProgress:i,onTimeout:o})}_resetTimeout(e){let r=this._timeoutInfo.get(e);if(!r)return!1;let n=Date.now()-r.startTime;if(r.maxTotalTimeout&&n>=r.maxTotalTimeout)throw this._timeoutInfo.delete(e),J.fromError(Y.RequestTimeout,"Maximum total timeout exceeded",{maxTotalTimeout:r.maxTotalTimeout,totalElapsed:n});return clearTimeout(r.timeoutId),r.timeoutId=setTimeout(r.onTimeout,r.timeout),!0}_cleanupTimeout(e){let r=this._timeoutInfo.get(e);r&&(clearTimeout(r.timeoutId),this._timeoutInfo.delete(e))}async connect(e){this._transport=e;let r=this.transport?.onclose;this._transport.onclose=()=>{r?.(),this._onclose()};let n=this.transport?.onerror;this._transport.onerror=i=>{n?.(i),this._onerror(i)};let o=this._transport?.onmessage;this._transport.onmessage=(i,a)=>{o?.(i,a),$o(i)||kg(i)?this._onresponse(i):td(i)?this._onrequest(i,a):xg(i)?this._onnotification(i):this._onerror(new Error(`Unknown message type: ${JSON.stringify(i)}`))},await this._transport.start()}_onclose(){let e=this._responseHandlers;this._responseHandlers=new Map,this._progressHandlers.clear(),this._taskProgressTokens.clear(),this._pendingDebouncedNotifications.clear();let r=J.fromError(Y.ConnectionClosed,"Connection closed");this._transport=void 0,this.onclose?.();for(let n of e.values())n(r)}_onerror(e){this.onerror?.(e)}_onnotification(e){let r=this._notificationHandlers.get(e.method)??this.fallbackNotificationHandler;r!==void 0&&Promise.resolve().then(()=>r(e)).catch(n=>this._onerror(new Error(`Uncaught error in notification handler: ${n}`)))}_onrequest(e,r){let n=this._requestHandlers.get(e.method)??this.fallbackRequestHandler,o=this._transport,i=e.params?._meta?.[Qt]?.taskId;if(n===void 0){let l={jsonrpc:"2.0",id:e.id,error:{code:Y.MethodNotFound,message:"Method not found"}};i&&this._taskMessageQueue?this._enqueueTaskMessage(i,{type:"error",message:l,timestamp:Date.now()},o?.sessionId).catch(d=>this._onerror(new Error(`Failed to enqueue error response: ${d}`))):o?.send(l).catch(d=>this._onerror(new Error(`Failed to send an error response: ${d}`)));return}let a=new AbortController;this._requestHandlerAbortControllers.set(e.id,a);let s=yg(e.params)?e.params.task:void 0,c=this._taskStore?this.requestTaskStore(e,o?.sessionId):void 0,u={signal:a.signal,sessionId:o?.sessionId,_meta:e.params?._meta,sendNotification:async l=>{let d={relatedRequestId:e.id};i&&(d.relatedTask={taskId:i}),await this.notification(l,d)},sendRequest:async(l,d,m)=>{let f={...m,relatedRequestId:e.id};i&&!f.relatedTask&&(f.relatedTask={taskId:i});let g=f.relatedTask?.taskId??i;return g&&c&&await c.updateTaskStatus(g,"input_required"),await this.request(l,d,f)},authInfo:r?.authInfo,requestId:e.id,requestInfo:r?.requestInfo,taskId:i,taskStore:c,taskRequestedTtl:s?.ttl,closeSSEStream:r?.closeSSEStream,closeStandaloneSSEStream:r?.closeStandaloneSSEStream};Promise.resolve().then(()=>{s&&this.assertTaskHandlerCapability(e.method)}).then(()=>n(e,u)).then(async l=>{if(a.signal.aborted)return;let d={result:l,jsonrpc:"2.0",id:e.id};i&&this._taskMessageQueue?await this._enqueueTaskMessage(i,{type:"response",message:d,timestamp:Date.now()},o?.sessionId):await o?.send(d)},async l=>{if(a.signal.aborted)return;let d={jsonrpc:"2.0",id:e.id,error:{code:Number.isSafeInteger(l.code)?l.code:Y.InternalError,message:l.message??"Internal error",...l.data!==void 0&&{data:l.data}}};i&&this._taskMessageQueue?await this._enqueueTaskMessage(i,{type:"error",message:d,timestamp:Date.now()},o?.sessionId):await o?.send(d)}).catch(l=>this._onerror(new Error(`Failed to send response: ${l}`))).finally(()=>{this._requestHandlerAbortControllers.delete(e.id)})}_onprogress(e){let{progressToken:r,...n}=e.params,o=Number(r),i=this._progressHandlers.get(o);if(!i){this._onerror(new Error(`Received a progress notification for an unknown token: ${JSON.stringify(e)}`));return}let a=this._responseHandlers.get(o),s=this._timeoutInfo.get(o);if(s&&a&&s.resetTimeoutOnProgress)try{this._resetTimeout(o)}catch(c){this._responseHandlers.delete(o),this._progressHandlers.delete(o),this._cleanupTimeout(o),a(c);return}i(n)}_onresponse(e){let r=Number(e.id),n=this._requestResolvers.get(r);if(n){if(this._requestResolvers.delete(r),$o(e))n(e);else{let a=new J(e.error.code,e.error.message,e.error.data);n(a)}return}let o=this._responseHandlers.get(r);if(o===void 0){this._onerror(new Error(`Received a response for an unknown message ID: ${JSON.stringify(e)}`));return}this._responseHandlers.delete(r),this._cleanupTimeout(r);let i=!1;if($o(e)&&e.result&&typeof e.result=="object"){let a=e.result;if(a.task&&typeof a.task=="object"){let s=a.task;typeof s.taskId=="string"&&(i=!0,this._taskProgressTokens.set(s.taskId,r))}}if(i||this._progressHandlers.delete(r),$o(e))o(e);else{let a=J.fromError(e.error.code,e.error.message,e.error.data);o(a)}}get transport(){return this._transport}async close(){await this._transport?.close()}async*requestStream(e,r,n){let{task:o}=n??{};if(!o){try{yield{type:"result",result:await this.request(e,r,n)}}catch(a){yield{type:"error",error:a instanceof J?a:new J(Y.InternalError,String(a))}}return}let i;try{let a=await this.request(e,Qr,n);if(a.task)i=a.task.taskId,yield{type:"taskCreated",task:a.task};else throw new J(Y.InternalError,"Task creation did not return a task");for(;;){let s=await this.getTask({taskId:i},n);if(yield{type:"taskStatus",task:s},er(s.status)){s.status==="completed"?yield{type:"result",result:await this.getTaskResult({taskId:i},r,n)}:s.status==="failed"?yield{type:"error",error:new J(Y.InternalError,`Task ${i} failed`)}:s.status==="cancelled"&&(yield{type:"error",error:new J(Y.InternalError,`Task ${i} was cancelled`)});return}if(s.status==="input_required"){yield{type:"result",result:await this.getTaskResult({taskId:i},r,n)};return}let c=s.pollInterval??this._options?.defaultTaskPollInterval??1e3;await new Promise(u=>setTimeout(u,c)),n?.signal?.throwIfAborted()}}catch(a){yield{type:"error",error:a instanceof J?a:new J(Y.InternalError,String(a))}}}request(e,r,n){let{relatedRequestId:o,resumptionToken:i,onresumptiontoken:a,task:s,relatedTask:c}=n??{};return new Promise((u,l)=>{let d=O=>{l(O)};if(!this._transport){d(new Error("Not connected"));return}if(this._options?.enforceStrictCapabilities===!0)try{this.assertCapabilityForMethod(e.method),s&&this.assertTaskCapability(e.method)}catch(O){d(O);return}n?.signal?.throwIfAborted();let m=this._requestMessageId++,f={...e,jsonrpc:"2.0",id:m};n?.onprogress&&(this._progressHandlers.set(m,n.onprogress),f.params={...e.params,_meta:{...e.params?._meta||{},progressToken:m}}),s&&(f.params={...f.params,task:s}),c&&(f.params={...f.params,_meta:{...f.params?._meta||{},[Qt]:c}});let g=O=>{this._responseHandlers.delete(m),this._progressHandlers.delete(m),this._cleanupTimeout(m),this._transport?.send({jsonrpc:"2.0",method:"notifications/cancelled",params:{requestId:m,reason:String(O)}},{relatedRequestId:o,resumptionToken:i,onresumptiontoken:a}).catch(Z=>this._onerror(new Error(`Failed to send cancellation: ${Z}`)));let I=O instanceof J?O:new J(Y.RequestTimeout,String(O));l(I)};this._responseHandlers.set(m,O=>{if(!n?.signal?.aborted){if(O instanceof Error)return l(O);try{let I=Yt(r,O.result);I.success?u(I.data):l(I.error)}catch(I){l(I)}}}),n?.signal?.addEventListener("abort",()=>{g(n?.signal?.reason)});let v=n?.timeout??RS,$=()=>g(J.fromError(Y.RequestTimeout,"Request timed out",{timeout:v}));this._setupTimeout(m,v,n?.maxTotalTimeout,$,n?.resetTimeoutOnProgress??!1);let x=c?.taskId;if(x){let O=I=>{let Z=this._responseHandlers.get(m);Z?Z(I):this._onerror(new Error(`Response handler missing for side-channeled request ${m}`))};this._requestResolvers.set(m,O),this._enqueueTaskMessage(x,{type:"request",message:f,timestamp:Date.now()}).catch(I=>{this._cleanupTimeout(m),l(I)})}else this._transport.send(f,{relatedRequestId:o,resumptionToken:i,onresumptiontoken:a}).catch(O=>{this._cleanupTimeout(m),l(O)})})}async getTask(e,r){return this.request({method:"tasks/get",params:e},xa,r)}async getTaskResult(e,r,n){return this.request({method:"tasks/result",params:e},r,n)}async listTasks(e,r){return this.request({method:"tasks/list",params:e},wa,r)}async cancelTask(e,r){return this.request({method:"tasks/cancel",params:e},zg,r)}async notification(e,r){if(!this._transport)throw new Error("Not connected");this.assertNotificationCapability(e.method);let n=r?.relatedTask?.taskId;if(n){let s={...e,jsonrpc:"2.0",params:{...e.params,_meta:{...e.params?._meta||{},[Qt]:r.relatedTask}}};await this._enqueueTaskMessage(n,{type:"notification",message:s,timestamp:Date.now()});return}if((this._options?.debouncedNotificationMethods??[]).includes(e.method)&&!e.params&&!r?.relatedRequestId&&!r?.relatedTask){if(this._pendingDebouncedNotifications.has(e.method))return;this._pendingDebouncedNotifications.add(e.method),Promise.resolve().then(()=>{if(this._pendingDebouncedNotifications.delete(e.method),!this._transport)return;let s={...e,jsonrpc:"2.0"};r?.relatedTask&&(s={...s,params:{...s.params,_meta:{...s.params?._meta||{},[Qt]:r.relatedTask}}}),this._transport?.send(s,r).catch(c=>this._onerror(c))});return}let a={...e,jsonrpc:"2.0"};r?.relatedTask&&(a={...a,params:{...a.params,_meta:{...a.params?._meta||{},[Qt]:r.relatedTask}}}),await this._transport.send(a,r)}setRequestHandler(e,r){let n=vd(e);this.assertRequestHandlerCapability(n),this._requestHandlers.set(n,(o,i)=>{let a=_d(e,o);return Promise.resolve(r(a,i))})}removeRequestHandler(e){this._requestHandlers.delete(e)}assertCanSetRequestHandler(e){if(this._requestHandlers.has(e))throw new Error(`A request handler for ${e} already exists, which would be overridden`)}setNotificationHandler(e,r){let n=vd(e);this._notificationHandlers.set(n,o=>{let i=_d(e,o);return Promise.resolve(r(i))})}removeNotificationHandler(e){this._notificationHandlers.delete(e)}_cleanupTaskProgressHandler(e){let r=this._taskProgressTokens.get(e);r!==void 0&&(this._progressHandlers.delete(r),this._taskProgressTokens.delete(e))}async _enqueueTaskMessage(e,r,n){if(!this._taskStore||!this._taskMessageQueue)throw new Error("Cannot enqueue task message: taskStore and taskMessageQueue are not configured");let o=this._options?.maxTaskQueueSize;await this._taskMessageQueue.enqueue(e,r,n,o)}async _clearTaskQueue(e,r){if(this._taskMessageQueue){let n=await this._taskMessageQueue.dequeueAll(e,r);for(let o of n)if(o.type==="request"&&td(o.message)){let i=o.message.id,a=this._requestResolvers.get(i);a?(a(new J(Y.InternalError,"Task cancelled or completed")),this._requestResolvers.delete(i)):this._onerror(new Error(`Resolver missing for request ${i} during task ${e} cleanup`))}}}async _waitForTaskUpdate(e,r){let n=this._options?.defaultTaskPollInterval??1e3;try{let o=await this._taskStore?.getTask(e);o?.pollInterval&&(n=o.pollInterval)}catch{}return new Promise((o,i)=>{if(r.aborted){i(new J(Y.InvalidRequest,"Request cancelled"));return}let a=setTimeout(o,n);r.addEventListener("abort",()=>{clearTimeout(a),i(new J(Y.InvalidRequest,"Request cancelled"))},{once:!0})})}requestTaskStore(e,r){let n=this._taskStore;if(!n)throw new Error("No task store configured");return{createTask:async o=>{if(!e)throw new Error("No request provided");return await n.createTask(o,e.id,{method:e.method,params:e.params},r)},getTask:async o=>{let i=await n.getTask(o,r);if(!i)throw new J(Y.InvalidParams,"Failed to retrieve task: Task not found");return i},storeTaskResult:async(o,i,a)=>{await n.storeTaskResult(o,i,a,r);let s=await n.getTask(o,r);if(s){let c=wo.parse({method:"notifications/tasks/status",params:s});await this.notification(c),er(s.status)&&this._cleanupTaskProgressHandler(o)}},getTaskResult:o=>n.getTaskResult(o,r),updateTaskStatus:async(o,i,a)=>{let s=await n.getTask(o,r);if(!s)throw new J(Y.InvalidParams,`Task "${o}" not found - it may have been cleaned up`);if(er(s.status))throw new J(Y.InvalidParams,`Cannot update task "${o}" from terminal status "${s.status}" to "${i}". Terminal states (completed, failed, cancelled) cannot transition to other states.`);await n.updateTaskStatus(o,i,a,r);let c=await n.getTask(o,r);if(c){let u=wo.parse({method:"notifications/tasks/status",params:c});await this.notification(u),er(c.status)&&this._cleanupTaskProgressHandler(o)}},listTasks:o=>n.listTasks(o,r)}}};function jg(t){return t!==null&&typeof t=="object"&&!Array.isArray(t)}function Dg(t,e){let r={...t};for(let n in e){let o=n,i=e[o];if(i===void 0)continue;let a=r[o];jg(a)&&jg(i)?r[o]={...a,...i}:r[o]=i}return r}var yy=ai(nf(),1),$y=ai(_y(),1);function wT(){let t=new yy.default({strict:!1,validateFormats:!0,validateSchema:!1,allErrors:!0});return(0,$y.default)(t),t}var ps=class{constructor(e){this._ajv=e??wT()}getValidator(e){let r="$id"in e&&typeof e.$id=="string"?this._ajv.getSchema(e.$id)??this._ajv.compile(e):this._ajv.compile(e);return n=>r(n)?{valid:!0,data:n,errorMessage:void 0}:{valid:!1,data:void 0,errorMessage:this._ajv.errorsText(r.errors)}}};var fs=class{constructor(e){this._server=e}requestStream(e,r,n){return this._server.requestStream(e,r,n)}async getTask(e,r){return this._server.getTask({taskId:e},r)}async getTaskResult(e,r,n){return this._server.getTaskResult({taskId:e},r,n)}async listTasks(e,r){return this._server.listTasks(e?{cursor:e}:void 0,r)}async cancelTask(e,r){return this._server.cancelTask({taskId:e},r)}};function by(t,e,r){if(!t)throw new Error(`${r} does not support task creation (required for ${e})`);switch(e){case"tools/call":if(!t.tools?.call)throw new Error(`${r} does not support task creation for tools/call (required for ${e})`);break;default:break}}function xy(t,e,r){if(!t)throw new Error(`${r} does not support task creation (required for ${e})`);switch(e){case"sampling/createMessage":if(!t.sampling?.createMessage)throw new Error(`${r} does not support task creation for sampling/createMessage (required for ${e})`);break;case"elicitation/create":if(!t.elicitation?.create)throw new Error(`${r} does not support task creation for elicitation/create (required for ${e})`);break;default:break}}var ms=class extends Ta{constructor(e,r){super(r),this._serverInfo=e,this._loggingLevels=new Map,this.LOG_LEVEL_SEVERITY=new Map(Eo.options.map((n,o)=>[n,o])),this.isMessageIgnored=(n,o)=>{let i=this._loggingLevels.get(o);return i?this.LOG_LEVEL_SEVERITY.get(n)this._oninitialize(n)),this.setNotificationHandler(id,()=>this.oninitialized?.()),this._capabilities.logging&&this.setRequestHandler(fd,async(n,o)=>{let i=o.sessionId||o.requestInfo?.headers["mcp-session-id"]||void 0,{level:a}=n.params,s=Eo.safeParse(a);return s.success&&this._loggingLevels.set(i,s.data),{}})}get experimental(){return this._experimental||(this._experimental={tasks:new fs(this)}),this._experimental}registerCapabilities(e){if(this.transport)throw new Error("Cannot register capabilities after connecting to transport");this._capabilities=Dg(this._capabilities,e)}setRequestHandler(e,r){let o=Yi(e)?.method;if(!o)throw new Error("Schema is missing a method literal");let i;if(Br(o)){let s=o;i=s._zod?.def?.value??s.value}else{let s=o;i=s._def?.value??s.value}if(typeof i!="string")throw new Error("Schema method literal must be a string");if(i==="tools/call"){let s=async(c,u)=>{let l=Yt(Io,c);if(!l.success){let g=l.error instanceof Error?l.error.message:String(l.error);throw new J(Y.InvalidParams,`Invalid tools/call request: ${g}`)}let{params:d}=l.data,m=await Promise.resolve(r(c,u));if(d.task){let g=Yt(Qr,m);if(!g.success){let v=g.error instanceof Error?g.error.message:String(g.error);throw new J(Y.InvalidParams,`Invalid task creation result: ${v}`)}return g.data}let f=Yt(Ia,m);if(!f.success){let g=f.error instanceof Error?f.error.message:String(f.error);throw new J(Y.InvalidParams,`Invalid tools/call result: ${g}`)}return f.data};return super.setRequestHandler(e,s)}return super.setRequestHandler(e,r)}assertCapabilityForMethod(e){switch(e){case"sampling/createMessage":if(!this._clientCapabilities?.sampling)throw new Error(`Client does not support sampling (required for ${e})`);break;case"elicitation/create":if(!this._clientCapabilities?.elicitation)throw new Error(`Client does not support elicitation (required for ${e})`);break;case"roots/list":if(!this._clientCapabilities?.roots)throw new Error(`Client does not support listing roots (required for ${e})`);break;case"ping":break}}assertNotificationCapability(e){switch(e){case"notifications/message":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"notifications/resources/updated":case"notifications/resources/list_changed":if(!this._capabilities.resources)throw new Error(`Server does not support notifying about resources (required for ${e})`);break;case"notifications/tools/list_changed":if(!this._capabilities.tools)throw new Error(`Server does not support notifying of tool list changes (required for ${e})`);break;case"notifications/prompts/list_changed":if(!this._capabilities.prompts)throw new Error(`Server does not support notifying of prompt list changes (required for ${e})`);break;case"notifications/elicitation/complete":if(!this._clientCapabilities?.elicitation?.url)throw new Error(`Client does not support URL elicitation (required for ${e})`);break;case"notifications/cancelled":break;case"notifications/progress":break}}assertRequestHandlerCapability(e){if(this._capabilities)switch(e){case"completion/complete":if(!this._capabilities.completions)throw new Error(`Server does not support completions (required for ${e})`);break;case"logging/setLevel":if(!this._capabilities.logging)throw new Error(`Server does not support logging (required for ${e})`);break;case"prompts/get":case"prompts/list":if(!this._capabilities.prompts)throw new Error(`Server does not support prompts (required for ${e})`);break;case"resources/list":case"resources/templates/list":case"resources/read":if(!this._capabilities.resources)throw new Error(`Server does not support resources (required for ${e})`);break;case"tools/call":case"tools/list":if(!this._capabilities.tools)throw new Error(`Server does not support tools (required for ${e})`);break;case"tasks/get":case"tasks/list":case"tasks/result":case"tasks/cancel":if(!this._capabilities.tasks)throw new Error(`Server does not support tasks capability (required for ${e})`);break;case"ping":case"initialize":break}}assertTaskCapability(e){xy(this._clientCapabilities?.tasks?.requests,e,"Client")}assertTaskHandlerCapability(e){this._capabilities&&by(this._capabilities.tasks?.requests,e,"Server")}async _oninitialize(e){let r=e.params.protocolVersion;return this._clientCapabilities=e.params.capabilities,this._clientVersion=e.params.clientInfo,{protocolVersion:gg.includes(r)?r:Ql,capabilities:this.getCapabilities(),serverInfo:this._serverInfo,...this._instructions&&{instructions:this._instructions}}}getClientCapabilities(){return this._clientCapabilities}getClientVersion(){return this._clientVersion}getCapabilities(){return this._capabilities}async ping(){return this.request({method:"ping"},va)}async createMessage(e,r){if((e.tools||e.toolChoice)&&!this._clientCapabilities?.sampling?.tools)throw new Error("Client does not support sampling tools capability.");if(e.messages.length>0){let n=e.messages[e.messages.length-1],o=Array.isArray(n.content)?n.content:[n.content],i=o.some(u=>u.type==="tool_result"),a=e.messages.length>1?e.messages[e.messages.length-2]:void 0,s=a?Array.isArray(a.content)?a.content:[a.content]:[],c=s.some(u=>u.type==="tool_use");if(i){if(o.some(u=>u.type!=="tool_result"))throw new Error("The last message must contain only tool_result content if any is present");if(!c)throw new Error("tool_result blocks are not matching any tool_use from the previous message")}if(c){let u=new Set(s.filter(d=>d.type==="tool_use").map(d=>d.id)),l=new Set(o.filter(d=>d.type==="tool_result").map(d=>d.toolUseId));if(u.size!==l.size||![...u].every(d=>l.has(d)))throw new Error("ids of tool_result blocks and tool_use blocks from previous message do not match")}}return e.tools?this.request({method:"sampling/createMessage",params:e},hd,r):this.request({method:"sampling/createMessage",params:e},md,r)}async elicitInput(e,r){switch(e.mode??"form"){case"url":{if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support url elicitation.");let o=e;return this.request({method:"elicitation/create",params:o},Ea,r)}case"form":{if(!this._clientCapabilities?.elicitation?.form)throw new Error("Client does not support form elicitation.");let o=e.mode==="form"?e:{...e,mode:"form"},i=await this.request({method:"elicitation/create",params:o},Ea,r);if(i.action==="accept"&&i.content&&o.requestedSchema)try{let s=this._jsonSchemaValidator.getValidator(o.requestedSchema)(i.content);if(!s.valid)throw new J(Y.InvalidParams,`Elicitation response content does not match requested schema: ${s.errorMessage}`)}catch(a){throw a instanceof J?a:new J(Y.InternalError,`Error validating elicitation response: ${a instanceof Error?a.message:String(a)}`)}return i}}}createElicitationCompletionNotifier(e,r){if(!this._clientCapabilities?.elicitation?.url)throw new Error("Client does not support URL elicitation (required for notifications/elicitation/complete)");return()=>this.notification({method:"notifications/elicitation/complete",params:{elicitationId:e}},r)}async listRoots(e,r){return this.request({method:"roots/list",params:e},gd,r)}async sendLoggingMessage(e,r){if(this._capabilities.logging&&!this.isMessageIgnored(e.level,r))return this.notification({method:"notifications/message",params:e})}async sendResourceUpdated(e){return this.notification({method:"notifications/resources/updated",params:e})}async sendResourceListChanged(){return this.notification({method:"notifications/resources/list_changed"})}async sendToolListChanged(){return this.notification({method:"notifications/tools/list_changed"})}async sendPromptListChanged(){return this.notification({method:"notifications/prompts/list_changed"})}};var pf=ai(require("node:process"),1);var hs=class{append(e){this._buffer=this._buffer?Buffer.concat([this._buffer,e]):e}readMessage(){if(!this._buffer)return null;let e=this._buffer.indexOf(` `);if(e===-1)return null;let r=this._buffer.toString("utf8",0,e).replace(/\r$/,"");return this._buffer=this._buffer.subarray(e+1),zT(r)}clear(){this._buffer=void 0}};function zT(t){return Sg.parse(JSON.parse(t))}function ky(t){return JSON.stringify(t)+` -`}var gs=class{constructor(e=pf.default.stdin,r=pf.default.stdout){this._stdin=e,this._stdout=r,this._readBuffer=new hs,this._started=!1,this._ondata=n=>{this._readBuffer.append(n),this.processReadBuffer()},this._onerror=n=>{this.onerror?.(n)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(r=>{let n=ky(e);this._stdout.write(n)?r():this._stdout.once("drain",r)})}};var mf=ai(require("path"),1);var ff={DEFAULT:3e5,HEALTH_CHECK:3e3,POST_SPAWN_WAIT:5e3,PORT_IN_USE_WAIT:3e3,WORKER_STARTUP_WAIT:1e3,PRE_RESTART_SETTLE_DELAY:2e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5};function Sy(t){return process.platform==="win32"?Math.round(t*ff.WINDOWS_MULTIPLIER):t}var wt=require("fs"),vs=require("path"),Iy=require("os");var wy="bugfix,feature,refactor,discovery,decision,change",zy="how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off";var qt=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777",CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,vs.join)((0,Iy.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"true",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"true",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"true",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:wy,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:zy,CLAUDE_MEM_CONTEXT_FULL_COUNT:"5",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){return this.DEFAULTS[e]}static getInt(e){let r=this.get(e);return parseInt(r,10)}static getBool(e){let r=this.get(e);return r==="true"||r===!0}static applyEnvOverrides(e){let r={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(r[n]=process.env[n]);return r}static loadFromFile(e){try{if(!(0,wt.existsSync)(e)){let a=this.getAllDefaults();try{let s=(0,vs.dirname)(e);(0,wt.existsSync)(s)||(0,wt.mkdirSync)(s,{recursive:!0}),(0,wt.writeFileSync)(e,JSON.stringify(a,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(s){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,s)}return this.applyEnvOverrides(a)}let r=(0,wt.readFileSync)(e,"utf-8"),n=JSON.parse(r),o=n;if(n.env&&typeof n.env=="object"){o=n.env;try{(0,wt.writeFileSync)(e,JSON.stringify(o,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(a){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,a)}}let i={...this.DEFAULTS};for(let a of Object.keys(this.DEFAULTS))o[a]!==void 0&&(i[a]=o[a]);return this.applyEnvOverrides(i)}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,r),this.applyEnvOverrides(this.getAllDefaults())}}};var $e=require("path"),Ey=require("os");var Ty=require("url");var TT={};function IT(){return typeof __dirname<"u"?__dirname:(0,$e.dirname)((0,Ty.fileURLToPath)(TT.url))}var ZZ=IT(),Ft=qt.get("CLAUDE_MEM_DATA_DIR"),_s=process.env.CLAUDE_CONFIG_DIR||(0,$e.join)((0,Ey.homedir)(),".claude"),ET=(0,$e.join)(_s,"plugins","marketplaces","thedotmack"),MZ=(0,$e.join)(Ft,"archives"),CZ=(0,$e.join)(Ft,"logs"),LZ=(0,$e.join)(Ft,"trash"),qZ=(0,$e.join)(Ft,"backups"),FZ=(0,$e.join)(Ft,"modes"),VZ=(0,$e.join)(Ft,"settings.json"),JZ=(0,$e.join)(Ft,"claude-mem.db"),KZ=(0,$e.join)(Ft,"vector-db"),HZ=(0,$e.join)(Ft,"observer-sessions"),WZ=(0,$e.join)(_s,"settings.json"),GZ=(0,$e.join)(_s,"commands"),BZ=(0,$e.join)(_s,"CLAUDE.md");var rM=(()=>{let t=process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS;if(t){let e=parseInt(t,10);if(Number.isFinite(e)&&e>=500&&e<=3e5)return e;ve.warn("SYSTEM","Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default",{value:t,min:500,max:3e5})}return Sy(ff.HEALTH_CHECK)})();var ys=null,$s=null;function Py(){if(ys!==null)return ys;let t=mf.default.join(qt.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),e=qt.loadFromFile(t);return ys=parseInt(e.CLAUDE_MEM_WORKER_PORT,10),ys}function Oy(){if($s!==null)return $s;let t=mf.default.join(qt.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return $s=qt.loadFromFile(t).CLAUDE_MEM_WORKER_HOST,$s}var PT="10.0.8";console.log=(...t)=>{ve.error("CONSOLE","Intercepted console output (MCP protocol protection)",void 0,{args:t})};var OT=Py(),jT=Oy(),ii=`http://${jT}:${OT}`,jy={search:"/api/search",timeline:"/api/timeline"};async function Dy(t,e){ve.debug("SYSTEM","\u2192 Worker API",void 0,{endpoint:t,params:e});try{let r=new URLSearchParams;for(let[a,s]of Object.entries(e))s!=null&&r.append(a,String(s));let n=`${ii}${t}?${r}`,o=await fetch(n);if(!o.ok){let a=await o.text();throw new Error(`Worker API error (${o.status}): ${a}`)}let i=await o.json();return ve.debug("SYSTEM","\u2190 Worker API success",void 0,{endpoint:t}),i}catch(r){return ve.error("SYSTEM","\u2190 Worker API error",{endpoint:t},r),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function Ny(t,e){ve.debug("HTTP","Worker API request (POST)",void 0,{endpoint:t});try{let r=`${ii}${t}`,n=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!n.ok){let i=await n.text();throw new Error(`Worker API error (${n.status}): ${i}`)}let o=await n.json();return ve.debug("HTTP","Worker API success (POST)",void 0,{endpoint:t}),{content:[{type:"text",text:JSON.stringify(o,null,2)}]}}catch(r){return ve.error("HTTP","Worker API error (POST)",{endpoint:t},r),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function DT(){try{return(await fetch(`${ii}/api/health`)).ok}catch(t){return ve.debug("SYSTEM","Worker health check failed",{},t),!1}}var Ry=[{name:"__IMPORTANT",description:`3-LAYER WORKFLOW (ALWAYS FOLLOW): +`}var gs=class{constructor(e=pf.default.stdin,r=pf.default.stdout){this._stdin=e,this._stdout=r,this._readBuffer=new hs,this._started=!1,this._ondata=n=>{this._readBuffer.append(n),this.processReadBuffer()},this._onerror=n=>{this.onerror?.(n)}}async start(){if(this._started)throw new Error("StdioServerTransport already started! If using Server class, note that connect() calls start() automatically.");this._started=!0,this._stdin.on("data",this._ondata),this._stdin.on("error",this._onerror)}processReadBuffer(){for(;;)try{let e=this._readBuffer.readMessage();if(e===null)break;this.onmessage?.(e)}catch(e){this.onerror?.(e)}}async close(){this._stdin.off("data",this._ondata),this._stdin.off("error",this._onerror),this._stdin.listenerCount("data")===0&&this._stdin.pause(),this._readBuffer.clear(),this.onclose?.()}send(e){return new Promise(r=>{let n=ky(e);this._stdout.write(n)?r():this._stdout.once("drain",r)})}};var mf=ai(require("path"),1);var ff={DEFAULT:3e5,HEALTH_CHECK:3e3,POST_SPAWN_WAIT:5e3,PORT_IN_USE_WAIT:3e3,WORKER_STARTUP_WAIT:1e3,PRE_RESTART_SETTLE_DELAY:2e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5};function Sy(t){return process.platform==="win32"?Math.round(t*ff.WINDOWS_MULTIPLIER):t}var wt=require("fs"),vs=require("path"),Iy=require("os");var wy="bugfix,feature,refactor,discovery,decision,change",zy="how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off";var qt=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777",CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,vs.join)((0,Iy.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:wy,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:zy,CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){return this.DEFAULTS[e]}static getInt(e){let r=this.get(e);return parseInt(r,10)}static getBool(e){let r=this.get(e);return r==="true"||r===!0}static applyEnvOverrides(e){let r={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(r[n]=process.env[n]);return r}static loadFromFile(e){try{if(!(0,wt.existsSync)(e)){let a=this.getAllDefaults();try{let s=(0,vs.dirname)(e);(0,wt.existsSync)(s)||(0,wt.mkdirSync)(s,{recursive:!0}),(0,wt.writeFileSync)(e,JSON.stringify(a,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(s){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,s)}return this.applyEnvOverrides(a)}let r=(0,wt.readFileSync)(e,"utf-8"),n=JSON.parse(r),o=n;if(n.env&&typeof n.env=="object"){o=n.env;try{(0,wt.writeFileSync)(e,JSON.stringify(o,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(a){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,a)}}let i={...this.DEFAULTS};for(let a of Object.keys(this.DEFAULTS))o[a]!==void 0&&(i[a]=o[a]);return this.applyEnvOverrides(i)}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,r),this.applyEnvOverrides(this.getAllDefaults())}}};var $e=require("path"),Ey=require("os");var Ty=require("url");var TT={};function IT(){return typeof __dirname<"u"?__dirname:(0,$e.dirname)((0,Ty.fileURLToPath)(TT.url))}var ZZ=IT(),Ft=qt.get("CLAUDE_MEM_DATA_DIR"),_s=process.env.CLAUDE_CONFIG_DIR||(0,$e.join)((0,Ey.homedir)(),".claude"),ET=(0,$e.join)(_s,"plugins","marketplaces","thedotmack"),MZ=(0,$e.join)(Ft,"archives"),CZ=(0,$e.join)(Ft,"logs"),LZ=(0,$e.join)(Ft,"trash"),qZ=(0,$e.join)(Ft,"backups"),FZ=(0,$e.join)(Ft,"modes"),VZ=(0,$e.join)(Ft,"settings.json"),JZ=(0,$e.join)(Ft,"claude-mem.db"),KZ=(0,$e.join)(Ft,"vector-db"),HZ=(0,$e.join)(Ft,"observer-sessions"),WZ=(0,$e.join)(_s,"settings.json"),GZ=(0,$e.join)(_s,"commands"),BZ=(0,$e.join)(_s,"CLAUDE.md");var rM=(()=>{let t=process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS;if(t){let e=parseInt(t,10);if(Number.isFinite(e)&&e>=500&&e<=3e5)return e;ve.warn("SYSTEM","Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default",{value:t,min:500,max:3e5})}return Sy(ff.HEALTH_CHECK)})();var ys=null,$s=null;function Py(){if(ys!==null)return ys;let t=mf.default.join(qt.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),e=qt.loadFromFile(t);return ys=parseInt(e.CLAUDE_MEM_WORKER_PORT,10),ys}function Oy(){if($s!==null)return $s;let t=mf.default.join(qt.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return $s=qt.loadFromFile(t).CLAUDE_MEM_WORKER_HOST,$s}var PT="10.0.8";console.log=(...t)=>{ve.error("CONSOLE","Intercepted console output (MCP protocol protection)",void 0,{args:t})};var OT=Py(),jT=Oy(),ii=`http://${jT}:${OT}`,jy={search:"/api/search",timeline:"/api/timeline"};async function Dy(t,e){ve.debug("SYSTEM","\u2192 Worker API",void 0,{endpoint:t,params:e});try{let r=new URLSearchParams;for(let[a,s]of Object.entries(e))s!=null&&r.append(a,String(s));let n=`${ii}${t}?${r}`,o=await fetch(n);if(!o.ok){let a=await o.text();throw new Error(`Worker API error (${o.status}): ${a}`)}let i=await o.json();return ve.debug("SYSTEM","\u2190 Worker API success",void 0,{endpoint:t}),i}catch(r){return ve.error("SYSTEM","\u2190 Worker API error",{endpoint:t},r),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function Ny(t,e){ve.debug("HTTP","Worker API request (POST)",void 0,{endpoint:t});try{let r=`${ii}${t}`,n=await fetch(r,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(e)});if(!n.ok){let i=await n.text();throw new Error(`Worker API error (${n.status}): ${i}`)}let o=await n.json();return ve.debug("HTTP","Worker API success (POST)",void 0,{endpoint:t}),{content:[{type:"text",text:JSON.stringify(o,null,2)}]}}catch(r){return ve.error("HTTP","Worker API error (POST)",{endpoint:t},r),{content:[{type:"text",text:`Error calling Worker API: ${r instanceof Error?r.message:String(r)}`}],isError:!0}}}async function DT(){try{return(await fetch(`${ii}/api/health`)).ok}catch(t){return ve.debug("SYSTEM","Worker health check failed",{},t),!1}}var Ry=[{name:"__IMPORTANT",description:`3-LAYER WORKFLOW (ALWAYS FOLLOW): 1. search(query) \u2192 Get index with IDs (~50-100 tokens/result) 2. timeline(anchor=ID) \u2192 Get context around interesting results 3. get_observations([IDs]) \u2192 Fetch full details ONLY for filtered IDs diff --git a/plugin/scripts/worker-service.cjs b/plugin/scripts/worker-service.cjs index b16ca421..cdc9dd1c 100755 --- a/plugin/scripts/worker-service.cjs +++ b/plugin/scripts/worker-service.cjs @@ -14,7 +14,7 @@ ${a.stack}`:` ${a.message}`:this.getLevel()===0&&typeof a=="object"?l=` `,"utf8")}catch(m){process.stderr.write(`[LOGGER] Failed to write to log file: ${m} `)}else process.stderr.write(d+` `)}debug(e,r,n,i){this.log(0,e,r,n,i)}info(e,r,n,i){this.log(1,e,r,n,i)}warn(e,r,n,i){this.log(2,e,r,n,i)}error(e,r,n,i){this.log(3,e,r,n,i)}dataIn(e,r,n,i){this.info(e,`\u2192 ${r}`,n,i)}dataOut(e,r,n,i){this.info(e,`\u2190 ${r}`,n,i)}success(e,r,n,i){this.info(e,`\u2713 ${r}`,n,i)}failure(e,r,n,i){this.error(e,`\u2717 ${r}`,n,i)}timing(e,r,n,i){this.info(e,`\u23F1 ${r}`,i,{duration:`${n}ms`})}happyPathError(e,r,n,i,a=""){let u=((new Error().stack||"").split(` -`)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),l=u?`${u[1].split("/").pop()}:${u[2]}`:"unknown",p={...n,location:l};return this.warn(e,`[HAPPY-PATH] ${r}`,p,i),a}},_=new h0});function ph(t){return process.platform==="win32"?Math.round(t*Lr.WINDOWS_MULTIPLIER):t}var Lr,dt,An=Ae(()=>{"use strict";Lr={DEFAULT:3e5,HEALTH_CHECK:3e3,POST_SPAWN_WAIT:5e3,PORT_IN_USE_WAIT:3e3,WORKER_STARTUP_WAIT:1e3,PRE_RESTART_SETTLE_DELAY:2e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5},dt={SUCCESS:0,FAILURE:1,BLOCKING_ERROR:2,USER_MESSAGE_ONLY:3}});var ZA,HA,BA=Ae(()=>{"use strict";ZA="bugfix,feature,refactor,discovery,decision,change",HA="how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off"});var GA={};mn(GA,{SettingsDefaultsManager:()=>Re});var Ii,dh,VA,Re,ar=Ae(()=>{"use strict";Ii=require("fs"),dh=require("path"),VA=require("os");BA();Re=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777",CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,dh.join)((0,VA.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"true",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"true",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"true",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:ZA,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:HA,CLAUDE_MEM_CONTEXT_FULL_COUNT:"5",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){return this.DEFAULTS[e]}static getInt(e){let r=this.get(e);return parseInt(r,10)}static getBool(e){let r=this.get(e);return r==="true"||r===!0}static applyEnvOverrides(e){let r={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(r[n]=process.env[n]);return r}static loadFromFile(e){try{if(!(0,Ii.existsSync)(e)){let s=this.getAllDefaults();try{let o=(0,dh.dirname)(e);(0,Ii.existsSync)(o)||(0,Ii.mkdirSync)(o,{recursive:!0}),(0,Ii.writeFileSync)(e,JSON.stringify(s,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(o){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,o)}return this.applyEnvOverrides(s)}let r=(0,Ii.readFileSync)(e,"utf-8"),n=JSON.parse(r),i=n;if(n.env&&typeof n.env=="object"){i=n.env;try{(0,Ii.writeFileSync)(e,JSON.stringify(i,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(s){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,s)}}let a={...this.DEFAULTS};for(let s of Object.keys(this.DEFAULTS))i[s]!==void 0&&(a[s]=i[s]);return this.applyEnvOverrides(a)}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,r),this.applyEnvOverrides(this.getAllDefaults())}}}});var rN={};mn(rN,{ARCHIVES_DIR:()=>g0,BACKUPS_DIR:()=>eN,CLAUDE_COMMANDS_DIR:()=>tN,CLAUDE_CONFIG_DIR:()=>sa,CLAUDE_MD_PATH:()=>RJ,CLAUDE_SETTINGS_PATH:()=>OJ,DATA_DIR:()=>sr,DB_PATH:()=>fp,LOGS_DIR:()=>YA,MARKETPLACE_ROOT:()=>Oi,MODES_DIR:()=>v0,OBSERVER_SESSIONS_DIR:()=>mh,TRASH_DIR:()=>QA,USER_SETTINGS_PATH:()=>or,VECTOR_DB_DIR:()=>IJ,createBackupFilename:()=>zJ,ensureAllClaudeDirs:()=>jJ,ensureAllDataDirs:()=>AJ,ensureDir:()=>Ir,ensureModesDir:()=>NJ,getCurrentProjectName:()=>MJ,getPackageCommandsDir:()=>DJ,getPackageRoot:()=>Qr,getProjectArchiveDir:()=>CJ,getWorkerSocketPath:()=>PJ});function $J(){return typeof __dirname<"u"?__dirname:(0,Mt.dirname)((0,XA.fileURLToPath)(UJ.url))}function CJ(t){return(0,Mt.join)(g0,t)}function PJ(t){return(0,Mt.join)(sr,`worker-${t}.sock`)}function Ir(t){(0,KA.mkdirSync)(t,{recursive:!0})}function AJ(){Ir(sr),Ir(g0),Ir(YA),Ir(QA),Ir(eN),Ir(v0)}function NJ(){Ir(v0)}function jJ(){Ir(sa),Ir(tN)}function MJ(){try{let t=(0,JA.execSync)("git rev-parse --show-toplevel",{cwd:process.cwd(),encoding:"utf8",stdio:["pipe","pipe","ignore"],windowsHide:!0}).trim();return(0,Mt.basename)(t)}catch(t){return _.debug("SYSTEM","Git root detection failed, using cwd basename",{cwd:process.cwd()},t),(0,Mt.basename)(process.cwd())}}function Qr(){return(0,Mt.join)(TJ,"..")}function DJ(){let t=Qr();return(0,Mt.join)(t,"commands")}function zJ(t){let e=new Date().toISOString().replace(/[:.]/g,"-").replace("T","_").slice(0,19);return`${t}.backup.${e}`}var Mt,WA,KA,JA,XA,UJ,TJ,sr,sa,Oi,g0,YA,QA,eN,v0,or,fp,IJ,mh,OJ,tN,RJ,Wt=Ae(()=>{"use strict";Mt=require("path"),WA=require("os"),KA=require("fs"),JA=require("child_process"),XA=require("url");ar();he();UJ={};TJ=$J(),sr=Re.get("CLAUDE_MEM_DATA_DIR"),sa=process.env.CLAUDE_CONFIG_DIR||(0,Mt.join)((0,WA.homedir)(),".claude"),Oi=(0,Mt.join)(sa,"plugins","marketplaces","thedotmack"),g0=(0,Mt.join)(sr,"archives"),YA=(0,Mt.join)(sr,"logs"),QA=(0,Mt.join)(sr,"trash"),eN=(0,Mt.join)(sr,"backups"),v0=(0,Mt.join)(sr,"modes"),or=(0,Mt.join)(sr,"settings.json"),fp=(0,Mt.join)(sr,"claude-mem.db"),IJ=(0,Mt.join)(sr,"vector-db"),mh=(0,Mt.join)(sr,"observer-sessions"),OJ=(0,Mt.join)(sa,"settings.json"),tN=(0,Mt.join)(sa,"commands"),RJ=(0,Mt.join)(sa,"CLAUDE.md")});function hh(t,e={},r){return new Promise((n,i)=>{let a=setTimeout(()=>i(new Error(`Request timed out after ${r}ms`)),r);fetch(t,e).then(s=>{clearTimeout(a),n(s)},s=>{clearTimeout(a),i(s)})})}function gt(){if(hp!==null)return hp;let t=fh.default.join(Re.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),e=Re.loadFromFile(t);return hp=parseInt(e.CLAUDE_MEM_WORKER_PORT,10),hp}function gh(){if(gp!==null)return gp;let t=fh.default.join(Re.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return gp=Re.loadFromFile(t).CLAUDE_MEM_WORKER_HOST,gp}function aN(){hp=null,gp=null}async function LJ(){let t=gt();return(await hh(`http://127.0.0.1:${t}/api/health`,{},iN)).ok}function qJ(){try{let t=fh.default.join(Oi,"package.json");return JSON.parse((0,nN.readFileSync)(t,"utf-8")).version}catch(t){let e=t.code;if(e==="ENOENT"||e==="EBUSY")return _.debug("SYSTEM","Could not read plugin version (shutdown race)",{code:e}),"unknown";throw t}}async function FJ(){let t=gt(),e=await hh(`http://127.0.0.1:${t}/api/version`,{},iN);if(!e.ok)throw new Error(`Failed to get worker version: ${e.status}`);return(await e.json()).version}async function ZJ(){try{let t=qJ();if(t==="unknown")return;let e=await FJ();if(e==="unknown")return;t!==e&&_.debug("SYSTEM","Version check",{pluginVersion:t,workerVersion:e,note:"Mismatch will be auto-restarted by worker-service start command"})}catch(t){_.debug("SYSTEM","Version check failed",{error:t instanceof Error?t.message:String(t)})}}async function en(){try{if(await LJ())return await ZJ(),!0}catch(t){_.debug("SYSTEM","Worker health check failed",{error:t instanceof Error?t.message:String(t)})}return _.warn("SYSTEM","Worker not healthy, hook will proceed gracefully"),!1}var fh,nN,iN,hp,gp,qr=Ae(()=>{"use strict";fh=Ne(require("path"),1),nN=require("fs");he();An();ar();Wt();iN=(()=>{let t=process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS;if(t){let e=parseInt(t,10);if(Number.isFinite(e)&&e>=500&&e<=3e5)return e;_.warn("SYSTEM","Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default",{value:t,min:500,max:3e5})}return ph(Lr.HEALTH_CHECK)})();hp=null,gp=null});var Ci=T((J1e,$N)=>{var QJ=require("path").relative;$N.exports=iX;var eX=process.cwd();function EN(t,e){for(var r=t.split(/[ ,]+/),n=String(e).toLowerCase(),i=0;i{"use strict";Lr={DEFAULT:3e5,HEALTH_CHECK:3e3,POST_SPAWN_WAIT:5e3,PORT_IN_USE_WAIT:3e3,WORKER_STARTUP_WAIT:1e3,PRE_RESTART_SETTLE_DELAY:2e3,POWERSHELL_COMMAND:1e4,WINDOWS_MULTIPLIER:1.5},dt={SUCCESS:0,FAILURE:1,BLOCKING_ERROR:2,USER_MESSAGE_ONLY:3}});var ZA,HA,BA=Ae(()=>{"use strict";ZA="bugfix,feature,refactor,discovery,decision,change",HA="how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off"});var GA={};mn(GA,{SettingsDefaultsManager:()=>Re});var Ii,dh,VA,Re,ar=Ae(()=>{"use strict";Ii=require("fs"),dh=require("path"),VA=require("os");BA();Re=class{static DEFAULTS={CLAUDE_MEM_MODEL:"claude-sonnet-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777",CLAUDE_MEM_WORKER_HOST:"127.0.0.1",CLAUDE_MEM_SKIP_TOOLS:"ListMcpResourcesTool,SlashCommand,Skill,TodoWrite,AskUserQuestion",CLAUDE_MEM_PROVIDER:"claude",CLAUDE_MEM_CLAUDE_AUTH_METHOD:"cli",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_RATE_LIMITING_ENABLED:"true",CLAUDE_MEM_OPENROUTER_API_KEY:"",CLAUDE_MEM_OPENROUTER_MODEL:"xiaomi/mimo-v2-flash:free",CLAUDE_MEM_OPENROUTER_SITE_URL:"",CLAUDE_MEM_OPENROUTER_APP_NAME:"claude-mem",CLAUDE_MEM_OPENROUTER_MAX_CONTEXT_MESSAGES:"20",CLAUDE_MEM_OPENROUTER_MAX_TOKENS:"100000",CLAUDE_MEM_DATA_DIR:(0,dh.join)((0,VA.homedir)(),".claude-mem"),CLAUDE_MEM_LOG_LEVEL:"INFO",CLAUDE_MEM_PYTHON_VERSION:"3.13",CLAUDE_CODE_PATH:"",CLAUDE_MEM_MODE:"code",CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:"false",CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:"true",CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:ZA,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:HA,CLAUDE_MEM_CONTEXT_FULL_COUNT:"0",CLAUDE_MEM_CONTEXT_FULL_FIELD:"narrative",CLAUDE_MEM_CONTEXT_SESSION_COUNT:"10",CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:"true",CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:"false",CLAUDE_MEM_FOLDER_CLAUDEMD_ENABLED:"false",CLAUDE_MEM_EXCLUDED_PROJECTS:"",CLAUDE_MEM_FOLDER_MD_EXCLUDE:"[]",CLAUDE_MEM_CHROMA_MODE:"local",CLAUDE_MEM_CHROMA_HOST:"127.0.0.1",CLAUDE_MEM_CHROMA_PORT:"8000",CLAUDE_MEM_CHROMA_SSL:"false",CLAUDE_MEM_CHROMA_API_KEY:"",CLAUDE_MEM_CHROMA_TENANT:"default_tenant",CLAUDE_MEM_CHROMA_DATABASE:"default_database"};static getAllDefaults(){return{...this.DEFAULTS}}static get(e){return this.DEFAULTS[e]}static getInt(e){let r=this.get(e);return parseInt(r,10)}static getBool(e){let r=this.get(e);return r==="true"||r===!0}static applyEnvOverrides(e){let r={...e};for(let n of Object.keys(this.DEFAULTS))process.env[n]!==void 0&&(r[n]=process.env[n]);return r}static loadFromFile(e){try{if(!(0,Ii.existsSync)(e)){let s=this.getAllDefaults();try{let o=(0,dh.dirname)(e);(0,Ii.existsSync)(o)||(0,Ii.mkdirSync)(o,{recursive:!0}),(0,Ii.writeFileSync)(e,JSON.stringify(s,null,2),"utf-8"),console.log("[SETTINGS] Created settings file with defaults:",e)}catch(o){console.warn("[SETTINGS] Failed to create settings file, using in-memory defaults:",e,o)}return this.applyEnvOverrides(s)}let r=(0,Ii.readFileSync)(e,"utf-8"),n=JSON.parse(r),i=n;if(n.env&&typeof n.env=="object"){i=n.env;try{(0,Ii.writeFileSync)(e,JSON.stringify(i,null,2),"utf-8"),console.log("[SETTINGS] Migrated settings file from nested to flat schema:",e)}catch(s){console.warn("[SETTINGS] Failed to auto-migrate settings file:",e,s)}}let a={...this.DEFAULTS};for(let s of Object.keys(this.DEFAULTS))i[s]!==void 0&&(a[s]=i[s]);return this.applyEnvOverrides(a)}catch(r){return console.warn("[SETTINGS] Failed to load settings, using defaults:",e,r),this.applyEnvOverrides(this.getAllDefaults())}}}});var rN={};mn(rN,{ARCHIVES_DIR:()=>g0,BACKUPS_DIR:()=>eN,CLAUDE_COMMANDS_DIR:()=>tN,CLAUDE_CONFIG_DIR:()=>sa,CLAUDE_MD_PATH:()=>RJ,CLAUDE_SETTINGS_PATH:()=>OJ,DATA_DIR:()=>sr,DB_PATH:()=>fp,LOGS_DIR:()=>YA,MARKETPLACE_ROOT:()=>Oi,MODES_DIR:()=>v0,OBSERVER_SESSIONS_DIR:()=>mh,TRASH_DIR:()=>QA,USER_SETTINGS_PATH:()=>or,VECTOR_DB_DIR:()=>IJ,createBackupFilename:()=>zJ,ensureAllClaudeDirs:()=>jJ,ensureAllDataDirs:()=>AJ,ensureDir:()=>Ir,ensureModesDir:()=>NJ,getCurrentProjectName:()=>MJ,getPackageCommandsDir:()=>DJ,getPackageRoot:()=>Qr,getProjectArchiveDir:()=>CJ,getWorkerSocketPath:()=>PJ});function $J(){return typeof __dirname<"u"?__dirname:(0,Mt.dirname)((0,XA.fileURLToPath)(UJ.url))}function CJ(t){return(0,Mt.join)(g0,t)}function PJ(t){return(0,Mt.join)(sr,`worker-${t}.sock`)}function Ir(t){(0,KA.mkdirSync)(t,{recursive:!0})}function AJ(){Ir(sr),Ir(g0),Ir(YA),Ir(QA),Ir(eN),Ir(v0)}function NJ(){Ir(v0)}function jJ(){Ir(sa),Ir(tN)}function MJ(){try{let t=(0,JA.execSync)("git rev-parse --show-toplevel",{cwd:process.cwd(),encoding:"utf8",stdio:["pipe","pipe","ignore"],windowsHide:!0}).trim();return(0,Mt.basename)(t)}catch(t){return _.debug("SYSTEM","Git root detection failed, using cwd basename",{cwd:process.cwd()},t),(0,Mt.basename)(process.cwd())}}function Qr(){return(0,Mt.join)(TJ,"..")}function DJ(){let t=Qr();return(0,Mt.join)(t,"commands")}function zJ(t){let e=new Date().toISOString().replace(/[:.]/g,"-").replace("T","_").slice(0,19);return`${t}.backup.${e}`}var Mt,WA,KA,JA,XA,UJ,TJ,sr,sa,Oi,g0,YA,QA,eN,v0,or,fp,IJ,mh,OJ,tN,RJ,Wt=Ae(()=>{"use strict";Mt=require("path"),WA=require("os"),KA=require("fs"),JA=require("child_process"),XA=require("url");ar();he();UJ={};TJ=$J(),sr=Re.get("CLAUDE_MEM_DATA_DIR"),sa=process.env.CLAUDE_CONFIG_DIR||(0,Mt.join)((0,WA.homedir)(),".claude"),Oi=(0,Mt.join)(sa,"plugins","marketplaces","thedotmack"),g0=(0,Mt.join)(sr,"archives"),YA=(0,Mt.join)(sr,"logs"),QA=(0,Mt.join)(sr,"trash"),eN=(0,Mt.join)(sr,"backups"),v0=(0,Mt.join)(sr,"modes"),or=(0,Mt.join)(sr,"settings.json"),fp=(0,Mt.join)(sr,"claude-mem.db"),IJ=(0,Mt.join)(sr,"vector-db"),mh=(0,Mt.join)(sr,"observer-sessions"),OJ=(0,Mt.join)(sa,"settings.json"),tN=(0,Mt.join)(sa,"commands"),RJ=(0,Mt.join)(sa,"CLAUDE.md")});function hh(t,e={},r){return new Promise((n,i)=>{let a=setTimeout(()=>i(new Error(`Request timed out after ${r}ms`)),r);fetch(t,e).then(s=>{clearTimeout(a),n(s)},s=>{clearTimeout(a),i(s)})})}function gt(){if(hp!==null)return hp;let t=fh.default.join(Re.get("CLAUDE_MEM_DATA_DIR"),"settings.json"),e=Re.loadFromFile(t);return hp=parseInt(e.CLAUDE_MEM_WORKER_PORT,10),hp}function gh(){if(gp!==null)return gp;let t=fh.default.join(Re.get("CLAUDE_MEM_DATA_DIR"),"settings.json");return gp=Re.loadFromFile(t).CLAUDE_MEM_WORKER_HOST,gp}function aN(){hp=null,gp=null}async function LJ(){let t=gt();return(await hh(`http://127.0.0.1:${t}/api/health`,{},iN)).ok}function qJ(){try{let t=fh.default.join(Oi,"package.json");return JSON.parse((0,nN.readFileSync)(t,"utf-8")).version}catch(t){let e=t.code;if(e==="ENOENT"||e==="EBUSY")return _.debug("SYSTEM","Could not read plugin version (shutdown race)",{code:e}),"unknown";throw t}}async function FJ(){let t=gt(),e=await hh(`http://127.0.0.1:${t}/api/version`,{},iN);if(!e.ok)throw new Error(`Failed to get worker version: ${e.status}`);return(await e.json()).version}async function ZJ(){try{let t=qJ();if(t==="unknown")return;let e=await FJ();if(e==="unknown")return;t!==e&&_.debug("SYSTEM","Version check",{pluginVersion:t,workerVersion:e,note:"Mismatch will be auto-restarted by worker-service start command"})}catch(t){_.debug("SYSTEM","Version check failed",{error:t instanceof Error?t.message:String(t)})}}async function en(){try{if(await LJ())return await ZJ(),!0}catch(t){_.debug("SYSTEM","Worker health check failed",{error:t instanceof Error?t.message:String(t)})}return _.warn("SYSTEM","Worker not healthy, hook will proceed gracefully"),!1}var fh,nN,iN,hp,gp,qr=Ae(()=>{"use strict";fh=Ne(require("path"),1),nN=require("fs");he();An();ar();Wt();iN=(()=>{let t=process.env.CLAUDE_MEM_HEALTH_TIMEOUT_MS;if(t){let e=parseInt(t,10);if(Number.isFinite(e)&&e>=500&&e<=3e5)return e;_.warn("SYSTEM","Invalid CLAUDE_MEM_HEALTH_TIMEOUT_MS, using default",{value:t,min:500,max:3e5})}return ph(Lr.HEALTH_CHECK)})();hp=null,gp=null});var Ci=T((J1e,$N)=>{var QJ=require("path").relative;$N.exports=iX;var eX=process.cwd();function EN(t,e){for(var r=t.split(/[ ,]+/),n=String(e).toLowerCase(),i=0;i0}function sX(t){if(process.noDeprecation)return!0;var e=process.env.NO_DEPRECATION||"";return EN(e,t)}function oX(t){if(process.traceDeprecation)return!0;var e=process.env.TRACE_DEPRECATION||"";return EN(e,t)}function xh(t,e){var r=aX(process,"deprecation");if(!(!r&&this._ignored)){var n,i,a,s,o=0,c=!1,u=Sh(),l=this._file;for(e?(s=e,a=lc(u[1]),a.name=s.name,l=a[0]):(o=2,s=lc(u[o]),a=s);o",r=t.getLineNumber(),n=t.getColumnNumber();t.isEval()&&(e=t.getEvalOrigin()+", "+e);var i=[e,r,n];return i.callSite=t,i.name=t.getFunctionName(),i}function wN(t){var e=t.callSite,r=t.name;r||(r="");var n=e.getThis(),i=n&&e.getTypeName();return i==="Object"&&(i=void 0),i==="Function"&&(i=n.name||i),i&&e.getMethodName()?i+"."+r:r}function cX(t,e,r){var n=new Date().toUTCString(),i=n+" "+this._namespace+" deprecated "+t;if(this._traced){for(var a=0;a{"use strict";Kd();Hr();lo()});function w9(t,e,r,n){let i=[];return n?i.push(...l9(t)):i.push(...JF(t)),n?i.push(...p9()):i.push(...XF()),n?i.push(...d9()):i.push(...YF()),n?i.push(...m9()):i.push(...QF()),Xv(r)&&(n?i.push(...f9(e,r)):i.push(...e9(e,r))),i}var E9=Ae(()=>{"use strict";lo();Tu();Iu()});function Rye(t){let e=new Map;for(let n of t){let i=n.type==="observation"?n.data.created_at:n.data.displayTime,a=da(i);e.has(a)||e.set(a,[]),e.get(a).push(n)}let r=Array.from(e.entries()).sort((n,i)=>{let a=new Date(n[0]).getTime(),s=new Date(i[0]).getTime();return a-s});return new Map(r)}function Cye(t,e){return e.fullObservationField==="narrative"?t.narrative:t.facts?rv(t.facts).join(` `):null}function Pye(t,e,r,n,i,a){let s=[];a?s.push(...h9(t)):s.push(...t9(t));let o=null,c="",u=!1;for(let l of e)if(l.type==="summary"){u&&(s.push(""),u=!1,o=null,c="");let p=l.data,d=Zn(p.displayTime);a?s.push(...b9(p,d)):s.push(...a9(p,d))}else{let p=l.data,d=di(p.files_modified,i,p.files_read),m=br(p.created_at),f=m!==c,h=f?m:"";c=m;let g=r.has(p.id);if(d!==o&&(u&&s.push(""),a?s.push(...g9(d)):s.push(...r9(d)),o=d,u=!0),g){let v=Cye(p,n);a?s.push(...y9(p,m,f,v,n)):(u&&!a&&(s.push(""),u=!1),s.push(...i9(p,h,v,n)),o=null)}else a?s.push(v9(p,m,f,n)):s.push(n9(p,h,n))}return u&&s.push(""),s}function k9(t,e,r,n,i){let a=[],s=Rye(t);for(let[o,c]of s)a.push(...Pye(o,c,e,r,n,i));return a}var $9=Ae(()=>{"use strict";eo();Tu();Iu()});function T9(t,e,r){return!(!t.showLastSummary||!e||!!!(e.investigated||e.learned||e.completed||e.next_steps)||r&&e.created_at_epoch<=r.created_at_epoch)}function I9(t,e){let r=[];return e?(r.push(...Xd("Investigated",t.investigated,Y.blue)),r.push(...Xd("Learned",t.learned,Y.yellow)),r.push(...Xd("Completed",t.completed,Y.green)),r.push(...Xd("Next Steps",t.next_steps,Y.magenta))):(r.push(...Jd("Investigated",t.investigated)),r.push(...Jd("Learned",t.learned)),r.push(...Jd("Completed",t.completed)),r.push(...Jd("Next Steps",t.next_steps))),r}var O9=Ae(()=>{"use strict";Kd();Tu();Iu()});function R9(t,e){return e?_9(t):s9(t)}function C9(t,e,r){return!Xv(e)||t.totalDiscoveryTokens<=0||t.savings<=0?[]:r?x9(t.totalDiscoveryTokens,t.totalReadTokens):o9(t.totalDiscoveryTokens,t.totalReadTokens)}var P9=Ae(()=>{"use strict";lo();Tu();Iu()});function Nye(){try{return new Xa}catch(t){if(t.code==="ERR_DLOPEN_FAILED"){try{(0,j9.unlinkSync)(Aye)}catch(e){_.debug("SYSTEM","Marker file cleanup failed (may not exist)",{},e)}return _.error("SYSTEM","Native module rebuild needed - restart Claude Code to auto-fix"),null}throw t}}function jye(t,e){return e?S9(t):c9(t)}function Mye(t,e,r,n,i,a,s){let o=[],c=lT(e);o.push(...w9(t,c,n,s));let u=r.slice(0,n.sessionCount),l=GF(u,r),p=fT(e,l),d=WF(e,n.fullObservationCount);o.push(...k9(p,d,n,i,s));let m=r[0],f=e[0];T9(n,m,f)&&o.push(...I9(m,s));let h=mT(e,n,a,i);return o.push(...R9(h,s)),o.push(...C9(c,n,s)),o.join(` -`).trimEnd()}async function gT(t,e=!1){let r=sT(),n=t?.cwd??process.cwd(),i=Wd(n),a=t?.projects||[i],s=Nye();if(!s)return"";try{let o=a.length>1?BF(s,a,r):pT(s,i,r),c=a.length>1?VF(s,a,r):dT(s,i,r);return o.length===0&&c.length===0?jye(i,e):Mye(i,o,c,r,n,t?.session_id,e)}finally{s.close()}}var A9,N9,j9,Aye,M9=Ae(()=>{"use strict";A9=Ne(require("path"),1),N9=require("os"),j9=require("fs");Pg();he();Jv();oT();lo();hT();E9();$9();O9();P9();Tu();Iu();Aye=A9.default.join((0,N9.homedir)(),".claude","plugins","marketplaces","thedotmack","plugin",".install-version")});var D9=Ae(()=>{"use strict";M9();oT();lo();hT()});var vT={};mn(vT,{generateContext:()=>gT});var yT=Ae(()=>{"use strict";D9()});function zye(){try{let t=process.stdin;return t.isTTY?!1:(t.readable,!0)}catch{return!1}}function Uye(t){let e=t.trim();if(!e)return{success:!1};try{return{success:!0,value:JSON.parse(e)}}catch{return{success:!1}}}async function F9(){if(zye())return new Promise((t,e)=>{let r="",n=!1,i=null,a=()=>{try{process.stdin.removeAllListeners("data"),process.stdin.removeAllListeners("end"),process.stdin.removeAllListeners("error")}catch{}},s=l=>{n||(n=!0,i&&clearTimeout(i),clearTimeout(u),a(),t(l))},o=l=>{n||(n=!0,i&&clearTimeout(i),clearTimeout(u),a(),e(l))},c=()=>{let l=Uye(r);return l.success?(s(l.value),!0):!1},u=setTimeout(()=>{n||c()||(r.trim()?o(new Error(`Incomplete JSON after ${q9}ms: ${r.slice(0,100)}...`)):s(void 0))},q9);try{process.stdin.on("data",l=>{r+=l,i&&(clearTimeout(i),i=null),!c()&&(i=setTimeout(()=>{c()},Lye))}),process.stdin.on("end",()=>{n||c()||s((r.trim(),void 0))}),process.stdin.on("error",()=>{n||s(void 0)})}catch{n=!0,clearTimeout(u),a(),t(void 0)}})}var q9,Lye,Z9=Ae(()=>{"use strict";q9=3e4,Lye=50});var H9,B9=Ae(()=>{"use strict";H9={normalizeInput(t){let e=t??{};return{sessionId:e.session_id,cwd:e.cwd??process.cwd(),prompt:e.prompt,toolName:e.tool_name,toolInput:e.tool_input,toolResponse:e.tool_response,transcriptPath:e.transcript_path}},formatOutput(t){return t.hookSpecificOutput?{hookSpecificOutput:t.hookSpecificOutput}:{continue:t.continue??!0,suppressOutput:t.suppressOutput??!0}}}});var V9,G9=Ae(()=>{"use strict";V9={normalizeInput(t){let e=t??{},r=!!e.command&&!e.tool_name;return{sessionId:e.conversation_id||e.generation_id,cwd:e.workspace_roots?.[0]??process.cwd(),prompt:e.prompt,toolName:r?"Bash":e.tool_name,toolInput:r?{command:e.command}:e.tool_input,toolResponse:r?{output:e.output}:e.result_json,transcriptPath:void 0,filePath:e.file_path,edits:e.edits}},formatOutput(t){return{continue:t.continue??!0}}}});var W9,K9=Ae(()=>{"use strict";W9={normalizeInput(t){let e=t;return{sessionId:e.sessionId??e.session_id??"unknown",cwd:e.cwd??process.cwd(),prompt:e.prompt,toolName:e.toolName??e.tool_name,toolInput:e.toolInput??e.tool_input,toolResponse:e.toolResponse??e.tool_response,transcriptPath:e.transcriptPath??e.transcript_path,filePath:e.filePath??e.file_path,edits:e.edits}},formatOutput(t){return t}}});function J9(t){switch(t){case"claude-code":return H9;case"cursor":return V9;case"raw":return W9;default:throw new Error(`Unknown platform: ${t}`)}}var X9=Ae(()=>{"use strict";B9();G9();K9()});var wT,ET=Ae(()=>{"use strict";qr();Jv();An();he();wT={async execute(t){if(!await en())return{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:dt.SUCCESS};let r=t.cwd??process.cwd(),n=LF(r),i=gt(),a=n.allProjects.join(","),s=`http://127.0.0.1:${i}/api/context/inject?projects=${encodeURIComponent(a)}`;try{let o=await fetch(s);return o.ok?{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:(await o.text()).trim()}}:(_.warn("HOOK","Context generation failed, returning empty",{status:o.status}),{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:dt.SUCCESS})}catch(o){return _.warn("HOOK","Context fetch error, returning empty",{error:o instanceof Error?o.message:String(o)}),{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:dt.SUCCESS}}}}});function qye(t){let e=t.startsWith("~")?(0,Y9.homedir)()+t.slice(1):t;e=e.replace(/\\/g,"/");let r=e.replace(/[.+^${}()|[\]\\]/g,"\\$&");return r=r.replace(/\*\*/g,"<<>>").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]").replace(/<<>>/g,".*"),new RegExp(`^${r}$`)}function cy(t,e){if(!e||!e.trim())return!1;let r=t.replace(/\\/g,"/"),n=e.split(",").map(i=>i.trim()).filter(Boolean);for(let i of n)try{if(qye(i).test(r))return!0}catch{continue}return!1}var Y9,kT=Ae(()=>{"use strict";Y9=require("os")});var $T,TT=Ae(()=>{"use strict";qr();Jv();he();An();kT();ar();Wt();$T={async execute(t){if(!await en())return{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS};let{sessionId:r,cwd:n,prompt:i}=t,a=Re.loadFromFile(or);if(n&&cy(n,a.CLAUDE_MEM_EXCLUDED_PROJECTS))return _.info("HOOK","Project excluded from tracking",{cwd:n}),{continue:!0,suppressOutput:!0};let s=!i||!i.trim()?"[media prompt]":i,o=Wd(n),c=gt();_.debug("HOOK","session-init: Calling /api/sessions/init",{contentSessionId:r,project:o});let u=await fetch(`http://127.0.0.1:${c}/api/sessions/init`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contentSessionId:r,project:o,prompt:s})});if(!u.ok)return _.failure("HOOK",`Session initialization failed: ${u.status}`,{contentSessionId:r,project:o}),{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS};let l=await u.json(),p=l.sessionDbId,d=l.promptNumber;if(_.debug("HOOK","session-init: Received from /api/sessions/init",{sessionDbId:p,promptNumber:d,skipped:l.skipped}),_.debug("HOOK",`[ALIGNMENT] Hook Entry | contentSessionId=${r} | prompt#=${d} | sessionDbId=${p}`),l.skipped&&l.reason==="private")return _.info("HOOK",`INIT_COMPLETE | sessionDbId=${p} | promptNumber=${d} | skipped=true | reason=private`,{sessionId:p}),{continue:!0,suppressOutput:!0};if(t.platform!=="cursor"&&p){let m=s.startsWith("/")?s.substring(1):s;_.debug("HOOK","session-init: Calling /sessions/{sessionDbId}/init",{sessionDbId:p,promptNumber:d});let f=await fetch(`http://127.0.0.1:${c}/sessions/${p}/init`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({userPrompt:m,promptNumber:d})});f.ok||_.failure("HOOK",`SDK agent start failed: ${f.status}`,{sessionDbId:p,promptNumber:d})}else t.platform==="cursor"&&_.debug("HOOK","session-init: Skipping SDK agent init for Cursor platform",{sessionDbId:p,promptNumber:d});return _.info("HOOK",`INIT_COMPLETE | sessionDbId=${p} | promptNumber=${d} | project=${o}`,{sessionId:p}),{continue:!0,suppressOutput:!0}}}});var IT,OT=Ae(()=>{"use strict";qr();he();An();kT();ar();Wt();IT={async execute(t){if(!await en())return{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS};let{sessionId:r,cwd:n,toolName:i,toolInput:a,toolResponse:s}=t;if(!i)throw new Error("observationHandler requires toolName");let o=gt(),c=_.formatTool(i,a);if(_.dataIn("HOOK",`PostToolUse: ${c}`,{workerPort:o}),!n)throw new Error(`Missing cwd in PostToolUse hook input for session ${r}, tool ${i}`);let u=Re.loadFromFile(or);if(cy(n,u.CLAUDE_MEM_EXCLUDED_PROJECTS))return _.debug("HOOK","Project excluded from tracking, skipping observation",{cwd:n,toolName:i}),{continue:!0,suppressOutput:!0};try{let l=await fetch(`http://127.0.0.1:${o}/api/sessions/observations`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contentSessionId:r,tool_name:i,tool_input:a,tool_response:s,cwd:n})});if(!l.ok)return _.warn("HOOK","Observation storage failed, skipping",{status:l.status,toolName:i}),{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS};_.debug("HOOK","Observation sent successfully",{toolName:i})}catch(l){return _.warn("HOOK","Observation fetch error, skipping",{error:l instanceof Error?l.message:String(l)}),{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS}}return{continue:!0,suppressOutput:!0}}}});function Q9(t,e,r=!1){if(!t||!(0,uy.existsSync)(t))throw new Error(`Transcript path missing or file does not exist: ${t}`);let n=(0,uy.readFileSync)(t,"utf-8").trim();if(!n)throw new Error(`Transcript file exists but is empty: ${t}`);let i=n.split(` +`).trimEnd()}async function gT(t,e=!1){let r=sT(),n=t?.cwd??process.cwd(),i=Wd(n),a=t?.projects||[i],s=Nye();if(!s)return"";try{let o=a.length>1?BF(s,a,r):pT(s,i,r),c=a.length>1?VF(s,a,r):dT(s,i,r);return o.length===0&&c.length===0?jye(i,e):Mye(i,o,c,r,n,t?.session_id,e)}finally{s.close()}}var A9,N9,j9,Aye,M9=Ae(()=>{"use strict";A9=Ne(require("path"),1),N9=require("os"),j9=require("fs");Pg();he();Jv();oT();lo();hT();E9();$9();O9();P9();Tu();Iu();Aye=A9.default.join((0,N9.homedir)(),".claude","plugins","marketplaces","thedotmack","plugin",".install-version")});var D9=Ae(()=>{"use strict";M9();oT();lo();hT()});var vT={};mn(vT,{generateContext:()=>gT});var yT=Ae(()=>{"use strict";D9()});function zye(){try{let t=process.stdin;return t.isTTY?!1:(t.readable,!0)}catch{return!1}}function Uye(t){let e=t.trim();if(!e)return{success:!1};try{return{success:!0,value:JSON.parse(e)}}catch{return{success:!1}}}async function F9(){if(zye())return new Promise((t,e)=>{let r="",n=!1,i=null,a=()=>{try{process.stdin.removeAllListeners("data"),process.stdin.removeAllListeners("end"),process.stdin.removeAllListeners("error")}catch{}},s=l=>{n||(n=!0,i&&clearTimeout(i),clearTimeout(u),a(),t(l))},o=l=>{n||(n=!0,i&&clearTimeout(i),clearTimeout(u),a(),e(l))},c=()=>{let l=Uye(r);return l.success?(s(l.value),!0):!1},u=setTimeout(()=>{n||c()||(r.trim()?o(new Error(`Incomplete JSON after ${q9}ms: ${r.slice(0,100)}...`)):s(void 0))},q9);try{process.stdin.on("data",l=>{r+=l,i&&(clearTimeout(i),i=null),!c()&&(i=setTimeout(()=>{c()},Lye))}),process.stdin.on("end",()=>{n||c()||s((r.trim(),void 0))}),process.stdin.on("error",()=>{n||s(void 0)})}catch{n=!0,clearTimeout(u),a(),t(void 0)}})}var q9,Lye,Z9=Ae(()=>{"use strict";q9=3e4,Lye=50});var H9,B9=Ae(()=>{"use strict";H9={normalizeInput(t){let e=t??{};return{sessionId:e.session_id,cwd:e.cwd??process.cwd(),prompt:e.prompt,toolName:e.tool_name,toolInput:e.tool_input,toolResponse:e.tool_response,transcriptPath:e.transcript_path}},formatOutput(t){if(t.hookSpecificOutput){let e={hookSpecificOutput:t.hookSpecificOutput};return t.systemMessage&&(e.systemMessage=t.systemMessage),e}return{continue:t.continue??!0,suppressOutput:t.suppressOutput??!0}}}});var V9,G9=Ae(()=>{"use strict";V9={normalizeInput(t){let e=t??{},r=!!e.command&&!e.tool_name;return{sessionId:e.conversation_id||e.generation_id,cwd:e.workspace_roots?.[0]??process.cwd(),prompt:e.prompt,toolName:r?"Bash":e.tool_name,toolInput:r?{command:e.command}:e.tool_input,toolResponse:r?{output:e.output}:e.result_json,transcriptPath:void 0,filePath:e.file_path,edits:e.edits}},formatOutput(t){return{continue:t.continue??!0}}}});var W9,K9=Ae(()=>{"use strict";W9={normalizeInput(t){let e=t;return{sessionId:e.sessionId??e.session_id??"unknown",cwd:e.cwd??process.cwd(),prompt:e.prompt,toolName:e.toolName??e.tool_name,toolInput:e.toolInput??e.tool_input,toolResponse:e.toolResponse??e.tool_response,transcriptPath:e.transcriptPath??e.transcript_path,filePath:e.filePath??e.file_path,edits:e.edits}},formatOutput(t){return t}}});function J9(t){switch(t){case"claude-code":return H9;case"cursor":return V9;case"raw":return W9;default:throw new Error(`Unknown platform: ${t}`)}}var X9=Ae(()=>{"use strict";B9();G9();K9()});var wT,ET=Ae(()=>{"use strict";qr();Jv();An();he();wT={async execute(t){if(!await en())return{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:dt.SUCCESS};let r=t.cwd??process.cwd(),n=LF(r),i=gt(),a=n.allProjects.join(","),s=`http://127.0.0.1:${i}/api/context/inject?projects=${encodeURIComponent(a)}`;try{let o=await fetch(s);if(!o.ok)return _.warn("HOOK","Context generation failed, returning empty",{status:o.status}),{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:dt.SUCCESS};let c=`${s}&colors=true`,[u,l]=await Promise.all([o.text(),fetch(c).then(f=>f.ok?f.text():"").catch(()=>"")]),p=u.trim(),d=l.trim(),m=d?`${d} + +View Observations Live @ http://localhost:${i}`:void 0;return{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:p},systemMessage:m}}catch(o){return _.warn("HOOK","Context fetch error, returning empty",{error:o instanceof Error?o.message:String(o)}),{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:dt.SUCCESS}}}}});function qye(t){let e=t.startsWith("~")?(0,Y9.homedir)()+t.slice(1):t;e=e.replace(/\\/g,"/");let r=e.replace(/[.+^${}()|[\]\\]/g,"\\$&");return r=r.replace(/\*\*/g,"<<>>").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]").replace(/<<>>/g,".*"),new RegExp(`^${r}$`)}function cy(t,e){if(!e||!e.trim())return!1;let r=t.replace(/\\/g,"/"),n=e.split(",").map(i=>i.trim()).filter(Boolean);for(let i of n)try{if(qye(i).test(r))return!0}catch{continue}return!1}var Y9,kT=Ae(()=>{"use strict";Y9=require("os")});var $T,TT=Ae(()=>{"use strict";qr();Jv();he();An();kT();ar();Wt();$T={async execute(t){if(!await en())return{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS};let{sessionId:r,cwd:n,prompt:i}=t,a=Re.loadFromFile(or);if(n&&cy(n,a.CLAUDE_MEM_EXCLUDED_PROJECTS))return _.info("HOOK","Project excluded from tracking",{cwd:n}),{continue:!0,suppressOutput:!0};let s=!i||!i.trim()?"[media prompt]":i,o=Wd(n),c=gt();_.debug("HOOK","session-init: Calling /api/sessions/init",{contentSessionId:r,project:o});let u=await fetch(`http://127.0.0.1:${c}/api/sessions/init`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contentSessionId:r,project:o,prompt:s})});if(!u.ok)return _.failure("HOOK",`Session initialization failed: ${u.status}`,{contentSessionId:r,project:o}),{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS};let l=await u.json(),p=l.sessionDbId,d=l.promptNumber;if(_.debug("HOOK","session-init: Received from /api/sessions/init",{sessionDbId:p,promptNumber:d,skipped:l.skipped}),_.debug("HOOK",`[ALIGNMENT] Hook Entry | contentSessionId=${r} | prompt#=${d} | sessionDbId=${p}`),l.skipped&&l.reason==="private")return _.info("HOOK",`INIT_COMPLETE | sessionDbId=${p} | promptNumber=${d} | skipped=true | reason=private`,{sessionId:p}),{continue:!0,suppressOutput:!0};if(t.platform!=="cursor"&&p){let m=s.startsWith("/")?s.substring(1):s;_.debug("HOOK","session-init: Calling /sessions/{sessionDbId}/init",{sessionDbId:p,promptNumber:d});let f=await fetch(`http://127.0.0.1:${c}/sessions/${p}/init`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({userPrompt:m,promptNumber:d})});f.ok||_.failure("HOOK",`SDK agent start failed: ${f.status}`,{sessionDbId:p,promptNumber:d})}else t.platform==="cursor"&&_.debug("HOOK","session-init: Skipping SDK agent init for Cursor platform",{sessionDbId:p,promptNumber:d});return _.info("HOOK",`INIT_COMPLETE | sessionDbId=${p} | promptNumber=${d} | project=${o}`,{sessionId:p}),{continue:!0,suppressOutput:!0}}}});var IT,OT=Ae(()=>{"use strict";qr();he();An();kT();ar();Wt();IT={async execute(t){if(!await en())return{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS};let{sessionId:r,cwd:n,toolName:i,toolInput:a,toolResponse:s}=t;if(!i)throw new Error("observationHandler requires toolName");let o=gt(),c=_.formatTool(i,a);if(_.dataIn("HOOK",`PostToolUse: ${c}`,{workerPort:o}),!n)throw new Error(`Missing cwd in PostToolUse hook input for session ${r}, tool ${i}`);let u=Re.loadFromFile(or);if(cy(n,u.CLAUDE_MEM_EXCLUDED_PROJECTS))return _.debug("HOOK","Project excluded from tracking, skipping observation",{cwd:n,toolName:i}),{continue:!0,suppressOutput:!0};try{let l=await fetch(`http://127.0.0.1:${o}/api/sessions/observations`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contentSessionId:r,tool_name:i,tool_input:a,tool_response:s,cwd:n})});if(!l.ok)return _.warn("HOOK","Observation storage failed, skipping",{status:l.status,toolName:i}),{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS};_.debug("HOOK","Observation sent successfully",{toolName:i})}catch(l){return _.warn("HOOK","Observation fetch error, skipping",{error:l instanceof Error?l.message:String(l)}),{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS}}return{continue:!0,suppressOutput:!0}}}});function Q9(t,e,r=!1){if(!t||!(0,uy.existsSync)(t))throw new Error(`Transcript path missing or file does not exist: ${t}`);let n=(0,uy.readFileSync)(t,"utf-8").trim();if(!n)throw new Error(`Transcript file exists but is empty: ${t}`);let i=n.split(` `),a=!1;for(let s=i.length-1;s>=0;s--){let o=JSON.parse(i[s]);if(o.type===e&&(a=!0,o.message?.content)){let c="",u=o.message.content;if(typeof u=="string")c=u;else if(Array.isArray(u))c=u.filter(l=>l.type==="text").map(l=>l.text).join(` `);else throw new Error(`Unknown message content format in transcript. Type: ${typeof u}`);return r&&(c=c.replace(/[\s\S]*?<\/system-reminder>/g,""),c=c.replace(/\n{3,}/g,` diff --git a/src/cli/adapters/claude-code.ts b/src/cli/adapters/claude-code.ts index d26ea086..31d3d91c 100644 --- a/src/cli/adapters/claude-code.ts +++ b/src/cli/adapters/claude-code.ts @@ -17,7 +17,11 @@ export const claudeCodeAdapter: PlatformAdapter = { }, formatOutput(result) { if (result.hookSpecificOutput) { - return { hookSpecificOutput: result.hookSpecificOutput }; + const output: Record = { hookSpecificOutput: result.hookSpecificOutput }; + if (result.systemMessage) { + output.systemMessage = result.systemMessage; + } + return output; } return { continue: result.continue ?? true, suppressOutput: result.suppressOutput ?? true }; } diff --git a/src/cli/handlers/context.ts b/src/cli/handlers/context.ts index cb5e0f8f..aeea2df4 100644 --- a/src/cli/handlers/context.ts +++ b/src/cli/handlers/context.ts @@ -48,14 +48,25 @@ export const contextHandler: EventHandler = { }; } - const result = await response.text(); - const additionalContext = result.trim(); + // Fetch both markdown (for Claude context) and colored (for user display) in parallel + const colorUrl = `${url}&colors=true`; + const [contextResult, colorResult] = await Promise.all([ + response.text(), + fetch(colorUrl).then(r => r.ok ? r.text() : '').catch(() => '') + ]); + + const additionalContext = contextResult.trim(); + const coloredTimeline = colorResult.trim(); + const systemMessage = coloredTimeline + ? `${coloredTimeline}\n\nView Observations Live @ http://localhost:${port}` + : undefined; return { hookSpecificOutput: { hookEventName: 'SessionStart', additionalContext - } + }, + systemMessage }; } catch (error) { // Worker unreachable — return empty context gracefully diff --git a/src/cli/types.ts b/src/cli/types.ts index 77cb0e37..704a449e 100644 --- a/src/cli/types.ts +++ b/src/cli/types.ts @@ -16,6 +16,7 @@ export interface HookResult { continue?: boolean; suppressOutput?: boolean; hookSpecificOutput?: { hookEventName: string; additionalContext: string }; + systemMessage?: string; exitCode?: number; } diff --git a/src/shared/SettingsDefaultsManager.ts b/src/shared/SettingsDefaultsManager.ts index eb4264cf..ba69f56e 100644 --- a/src/shared/SettingsDefaultsManager.ts +++ b/src/shared/SettingsDefaultsManager.ts @@ -95,15 +95,15 @@ export class SettingsDefaultsManager { CLAUDE_CODE_PATH: '', // Empty means auto-detect via 'which claude' CLAUDE_MEM_MODE: 'code', // Default mode profile // Token Economics - CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS: 'true', - CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS: 'true', - CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT: 'true', + CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS: 'false', + CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS: 'false', + CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT: 'false', CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT: 'true', // Observation Filtering CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES: DEFAULT_OBSERVATION_TYPES_STRING, CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS: DEFAULT_OBSERVATION_CONCEPTS_STRING, // Display Configuration - CLAUDE_MEM_CONTEXT_FULL_COUNT: '5', + CLAUDE_MEM_CONTEXT_FULL_COUNT: '0', CLAUDE_MEM_CONTEXT_FULL_FIELD: 'narrative', CLAUDE_MEM_CONTEXT_SESSION_COUNT: '10', // Feature Toggles From 676a3d175e3bda00cfced04baf0769474ad2a8b3 Mon Sep 17 00:00:00 2001 From: Alex Newman Date: Mon, 16 Feb 2026 00:11:25 -0500 Subject: [PATCH 2/2] fix: make context and colored timeline fetches truly parallel Address PR #1125 review feedback - both fetches now start simultaneously via Promise.all instead of sequential-then-parallel. Co-Authored-By: Claude Opus 4.6 --- plugin/scripts/worker-service.cjs | 4 ++-- src/cli/handlers/context.ts | 11 +++++++---- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/plugin/scripts/worker-service.cjs b/plugin/scripts/worker-service.cjs index cdc9dd1c..1aacd59b 100755 --- a/plugin/scripts/worker-service.cjs +++ b/plugin/scripts/worker-service.cjs @@ -800,9 +800,9 @@ ${Y.gray}${"\u2500".repeat(60)}${Y.reset} ${Y.dim}No previous sessions found for this project yet.${Y.reset} `}var Iu=Ae(()=>{"use strict";Kd();Hr();lo()});function w9(t,e,r,n){let i=[];return n?i.push(...l9(t)):i.push(...JF(t)),n?i.push(...p9()):i.push(...XF()),n?i.push(...d9()):i.push(...YF()),n?i.push(...m9()):i.push(...QF()),Xv(r)&&(n?i.push(...f9(e,r)):i.push(...e9(e,r))),i}var E9=Ae(()=>{"use strict";lo();Tu();Iu()});function Rye(t){let e=new Map;for(let n of t){let i=n.type==="observation"?n.data.created_at:n.data.displayTime,a=da(i);e.has(a)||e.set(a,[]),e.get(a).push(n)}let r=Array.from(e.entries()).sort((n,i)=>{let a=new Date(n[0]).getTime(),s=new Date(i[0]).getTime();return a-s});return new Map(r)}function Cye(t,e){return e.fullObservationField==="narrative"?t.narrative:t.facts?rv(t.facts).join(` `):null}function Pye(t,e,r,n,i,a){let s=[];a?s.push(...h9(t)):s.push(...t9(t));let o=null,c="",u=!1;for(let l of e)if(l.type==="summary"){u&&(s.push(""),u=!1,o=null,c="");let p=l.data,d=Zn(p.displayTime);a?s.push(...b9(p,d)):s.push(...a9(p,d))}else{let p=l.data,d=di(p.files_modified,i,p.files_read),m=br(p.created_at),f=m!==c,h=f?m:"";c=m;let g=r.has(p.id);if(d!==o&&(u&&s.push(""),a?s.push(...g9(d)):s.push(...r9(d)),o=d,u=!0),g){let v=Cye(p,n);a?s.push(...y9(p,m,f,v,n)):(u&&!a&&(s.push(""),u=!1),s.push(...i9(p,h,v,n)),o=null)}else a?s.push(v9(p,m,f,n)):s.push(n9(p,h,n))}return u&&s.push(""),s}function k9(t,e,r,n,i){let a=[],s=Rye(t);for(let[o,c]of s)a.push(...Pye(o,c,e,r,n,i));return a}var $9=Ae(()=>{"use strict";eo();Tu();Iu()});function T9(t,e,r){return!(!t.showLastSummary||!e||!!!(e.investigated||e.learned||e.completed||e.next_steps)||r&&e.created_at_epoch<=r.created_at_epoch)}function I9(t,e){let r=[];return e?(r.push(...Xd("Investigated",t.investigated,Y.blue)),r.push(...Xd("Learned",t.learned,Y.yellow)),r.push(...Xd("Completed",t.completed,Y.green)),r.push(...Xd("Next Steps",t.next_steps,Y.magenta))):(r.push(...Jd("Investigated",t.investigated)),r.push(...Jd("Learned",t.learned)),r.push(...Jd("Completed",t.completed)),r.push(...Jd("Next Steps",t.next_steps))),r}var O9=Ae(()=>{"use strict";Kd();Tu();Iu()});function R9(t,e){return e?_9(t):s9(t)}function C9(t,e,r){return!Xv(e)||t.totalDiscoveryTokens<=0||t.savings<=0?[]:r?x9(t.totalDiscoveryTokens,t.totalReadTokens):o9(t.totalDiscoveryTokens,t.totalReadTokens)}var P9=Ae(()=>{"use strict";lo();Tu();Iu()});function Nye(){try{return new Xa}catch(t){if(t.code==="ERR_DLOPEN_FAILED"){try{(0,j9.unlinkSync)(Aye)}catch(e){_.debug("SYSTEM","Marker file cleanup failed (may not exist)",{},e)}return _.error("SYSTEM","Native module rebuild needed - restart Claude Code to auto-fix"),null}throw t}}function jye(t,e){return e?S9(t):c9(t)}function Mye(t,e,r,n,i,a,s){let o=[],c=lT(e);o.push(...w9(t,c,n,s));let u=r.slice(0,n.sessionCount),l=GF(u,r),p=fT(e,l),d=WF(e,n.fullObservationCount);o.push(...k9(p,d,n,i,s));let m=r[0],f=e[0];T9(n,m,f)&&o.push(...I9(m,s));let h=mT(e,n,a,i);return o.push(...R9(h,s)),o.push(...C9(c,n,s)),o.join(` -`).trimEnd()}async function gT(t,e=!1){let r=sT(),n=t?.cwd??process.cwd(),i=Wd(n),a=t?.projects||[i],s=Nye();if(!s)return"";try{let o=a.length>1?BF(s,a,r):pT(s,i,r),c=a.length>1?VF(s,a,r):dT(s,i,r);return o.length===0&&c.length===0?jye(i,e):Mye(i,o,c,r,n,t?.session_id,e)}finally{s.close()}}var A9,N9,j9,Aye,M9=Ae(()=>{"use strict";A9=Ne(require("path"),1),N9=require("os"),j9=require("fs");Pg();he();Jv();oT();lo();hT();E9();$9();O9();P9();Tu();Iu();Aye=A9.default.join((0,N9.homedir)(),".claude","plugins","marketplaces","thedotmack","plugin",".install-version")});var D9=Ae(()=>{"use strict";M9();oT();lo();hT()});var vT={};mn(vT,{generateContext:()=>gT});var yT=Ae(()=>{"use strict";D9()});function zye(){try{let t=process.stdin;return t.isTTY?!1:(t.readable,!0)}catch{return!1}}function Uye(t){let e=t.trim();if(!e)return{success:!1};try{return{success:!0,value:JSON.parse(e)}}catch{return{success:!1}}}async function F9(){if(zye())return new Promise((t,e)=>{let r="",n=!1,i=null,a=()=>{try{process.stdin.removeAllListeners("data"),process.stdin.removeAllListeners("end"),process.stdin.removeAllListeners("error")}catch{}},s=l=>{n||(n=!0,i&&clearTimeout(i),clearTimeout(u),a(),t(l))},o=l=>{n||(n=!0,i&&clearTimeout(i),clearTimeout(u),a(),e(l))},c=()=>{let l=Uye(r);return l.success?(s(l.value),!0):!1},u=setTimeout(()=>{n||c()||(r.trim()?o(new Error(`Incomplete JSON after ${q9}ms: ${r.slice(0,100)}...`)):s(void 0))},q9);try{process.stdin.on("data",l=>{r+=l,i&&(clearTimeout(i),i=null),!c()&&(i=setTimeout(()=>{c()},Lye))}),process.stdin.on("end",()=>{n||c()||s((r.trim(),void 0))}),process.stdin.on("error",()=>{n||s(void 0)})}catch{n=!0,clearTimeout(u),a(),t(void 0)}})}var q9,Lye,Z9=Ae(()=>{"use strict";q9=3e4,Lye=50});var H9,B9=Ae(()=>{"use strict";H9={normalizeInput(t){let e=t??{};return{sessionId:e.session_id,cwd:e.cwd??process.cwd(),prompt:e.prompt,toolName:e.tool_name,toolInput:e.tool_input,toolResponse:e.tool_response,transcriptPath:e.transcript_path}},formatOutput(t){if(t.hookSpecificOutput){let e={hookSpecificOutput:t.hookSpecificOutput};return t.systemMessage&&(e.systemMessage=t.systemMessage),e}return{continue:t.continue??!0,suppressOutput:t.suppressOutput??!0}}}});var V9,G9=Ae(()=>{"use strict";V9={normalizeInput(t){let e=t??{},r=!!e.command&&!e.tool_name;return{sessionId:e.conversation_id||e.generation_id,cwd:e.workspace_roots?.[0]??process.cwd(),prompt:e.prompt,toolName:r?"Bash":e.tool_name,toolInput:r?{command:e.command}:e.tool_input,toolResponse:r?{output:e.output}:e.result_json,transcriptPath:void 0,filePath:e.file_path,edits:e.edits}},formatOutput(t){return{continue:t.continue??!0}}}});var W9,K9=Ae(()=>{"use strict";W9={normalizeInput(t){let e=t;return{sessionId:e.sessionId??e.session_id??"unknown",cwd:e.cwd??process.cwd(),prompt:e.prompt,toolName:e.toolName??e.tool_name,toolInput:e.toolInput??e.tool_input,toolResponse:e.toolResponse??e.tool_response,transcriptPath:e.transcriptPath??e.transcript_path,filePath:e.filePath??e.file_path,edits:e.edits}},formatOutput(t){return t}}});function J9(t){switch(t){case"claude-code":return H9;case"cursor":return V9;case"raw":return W9;default:throw new Error(`Unknown platform: ${t}`)}}var X9=Ae(()=>{"use strict";B9();G9();K9()});var wT,ET=Ae(()=>{"use strict";qr();Jv();An();he();wT={async execute(t){if(!await en())return{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:dt.SUCCESS};let r=t.cwd??process.cwd(),n=LF(r),i=gt(),a=n.allProjects.join(","),s=`http://127.0.0.1:${i}/api/context/inject?projects=${encodeURIComponent(a)}`;try{let o=await fetch(s);if(!o.ok)return _.warn("HOOK","Context generation failed, returning empty",{status:o.status}),{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:dt.SUCCESS};let c=`${s}&colors=true`,[u,l]=await Promise.all([o.text(),fetch(c).then(f=>f.ok?f.text():"").catch(()=>"")]),p=u.trim(),d=l.trim(),m=d?`${d} +`).trimEnd()}async function gT(t,e=!1){let r=sT(),n=t?.cwd??process.cwd(),i=Wd(n),a=t?.projects||[i],s=Nye();if(!s)return"";try{let o=a.length>1?BF(s,a,r):pT(s,i,r),c=a.length>1?VF(s,a,r):dT(s,i,r);return o.length===0&&c.length===0?jye(i,e):Mye(i,o,c,r,n,t?.session_id,e)}finally{s.close()}}var A9,N9,j9,Aye,M9=Ae(()=>{"use strict";A9=Ne(require("path"),1),N9=require("os"),j9=require("fs");Pg();he();Jv();oT();lo();hT();E9();$9();O9();P9();Tu();Iu();Aye=A9.default.join((0,N9.homedir)(),".claude","plugins","marketplaces","thedotmack","plugin",".install-version")});var D9=Ae(()=>{"use strict";M9();oT();lo();hT()});var vT={};mn(vT,{generateContext:()=>gT});var yT=Ae(()=>{"use strict";D9()});function zye(){try{let t=process.stdin;return t.isTTY?!1:(t.readable,!0)}catch{return!1}}function Uye(t){let e=t.trim();if(!e)return{success:!1};try{return{success:!0,value:JSON.parse(e)}}catch{return{success:!1}}}async function F9(){if(zye())return new Promise((t,e)=>{let r="",n=!1,i=null,a=()=>{try{process.stdin.removeAllListeners("data"),process.stdin.removeAllListeners("end"),process.stdin.removeAllListeners("error")}catch{}},s=l=>{n||(n=!0,i&&clearTimeout(i),clearTimeout(u),a(),t(l))},o=l=>{n||(n=!0,i&&clearTimeout(i),clearTimeout(u),a(),e(l))},c=()=>{let l=Uye(r);return l.success?(s(l.value),!0):!1},u=setTimeout(()=>{n||c()||(r.trim()?o(new Error(`Incomplete JSON after ${q9}ms: ${r.slice(0,100)}...`)):s(void 0))},q9);try{process.stdin.on("data",l=>{r+=l,i&&(clearTimeout(i),i=null),!c()&&(i=setTimeout(()=>{c()},Lye))}),process.stdin.on("end",()=>{n||c()||s((r.trim(),void 0))}),process.stdin.on("error",()=>{n||s(void 0)})}catch{n=!0,clearTimeout(u),a(),t(void 0)}})}var q9,Lye,Z9=Ae(()=>{"use strict";q9=3e4,Lye=50});var H9,B9=Ae(()=>{"use strict";H9={normalizeInput(t){let e=t??{};return{sessionId:e.session_id,cwd:e.cwd??process.cwd(),prompt:e.prompt,toolName:e.tool_name,toolInput:e.tool_input,toolResponse:e.tool_response,transcriptPath:e.transcript_path}},formatOutput(t){if(t.hookSpecificOutput){let e={hookSpecificOutput:t.hookSpecificOutput};return t.systemMessage&&(e.systemMessage=t.systemMessage),e}return{continue:t.continue??!0,suppressOutput:t.suppressOutput??!0}}}});var V9,G9=Ae(()=>{"use strict";V9={normalizeInput(t){let e=t??{},r=!!e.command&&!e.tool_name;return{sessionId:e.conversation_id||e.generation_id,cwd:e.workspace_roots?.[0]??process.cwd(),prompt:e.prompt,toolName:r?"Bash":e.tool_name,toolInput:r?{command:e.command}:e.tool_input,toolResponse:r?{output:e.output}:e.result_json,transcriptPath:void 0,filePath:e.file_path,edits:e.edits}},formatOutput(t){return{continue:t.continue??!0}}}});var W9,K9=Ae(()=>{"use strict";W9={normalizeInput(t){let e=t;return{sessionId:e.sessionId??e.session_id??"unknown",cwd:e.cwd??process.cwd(),prompt:e.prompt,toolName:e.toolName??e.tool_name,toolInput:e.toolInput??e.tool_input,toolResponse:e.toolResponse??e.tool_response,transcriptPath:e.transcriptPath??e.transcript_path,filePath:e.filePath??e.file_path,edits:e.edits}},formatOutput(t){return t}}});function J9(t){switch(t){case"claude-code":return H9;case"cursor":return V9;case"raw":return W9;default:throw new Error(`Unknown platform: ${t}`)}}var X9=Ae(()=>{"use strict";B9();G9();K9()});var wT,ET=Ae(()=>{"use strict";qr();Jv();An();he();wT={async execute(t){if(!await en())return{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:dt.SUCCESS};let r=t.cwd??process.cwd(),n=LF(r),i=gt(),a=n.allProjects.join(","),s=`http://127.0.0.1:${i}/api/context/inject?projects=${encodeURIComponent(a)}`;try{let o=`${s}&colors=true`,[c,u]=await Promise.all([fetch(s),fetch(o).catch(()=>null)]);if(!c.ok)return _.warn("HOOK","Context generation failed, returning empty",{status:c.status}),{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:dt.SUCCESS};let[l,p]=await Promise.all([c.text(),u?.ok?u.text():Promise.resolve("")]),d=l.trim(),m=p.trim(),f=m?`${m} -View Observations Live @ http://localhost:${i}`:void 0;return{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:p},systemMessage:m}}catch(o){return _.warn("HOOK","Context fetch error, returning empty",{error:o instanceof Error?o.message:String(o)}),{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:dt.SUCCESS}}}}});function qye(t){let e=t.startsWith("~")?(0,Y9.homedir)()+t.slice(1):t;e=e.replace(/\\/g,"/");let r=e.replace(/[.+^${}()|[\]\\]/g,"\\$&");return r=r.replace(/\*\*/g,"<<>>").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]").replace(/<<>>/g,".*"),new RegExp(`^${r}$`)}function cy(t,e){if(!e||!e.trim())return!1;let r=t.replace(/\\/g,"/"),n=e.split(",").map(i=>i.trim()).filter(Boolean);for(let i of n)try{if(qye(i).test(r))return!0}catch{continue}return!1}var Y9,kT=Ae(()=>{"use strict";Y9=require("os")});var $T,TT=Ae(()=>{"use strict";qr();Jv();he();An();kT();ar();Wt();$T={async execute(t){if(!await en())return{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS};let{sessionId:r,cwd:n,prompt:i}=t,a=Re.loadFromFile(or);if(n&&cy(n,a.CLAUDE_MEM_EXCLUDED_PROJECTS))return _.info("HOOK","Project excluded from tracking",{cwd:n}),{continue:!0,suppressOutput:!0};let s=!i||!i.trim()?"[media prompt]":i,o=Wd(n),c=gt();_.debug("HOOK","session-init: Calling /api/sessions/init",{contentSessionId:r,project:o});let u=await fetch(`http://127.0.0.1:${c}/api/sessions/init`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contentSessionId:r,project:o,prompt:s})});if(!u.ok)return _.failure("HOOK",`Session initialization failed: ${u.status}`,{contentSessionId:r,project:o}),{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS};let l=await u.json(),p=l.sessionDbId,d=l.promptNumber;if(_.debug("HOOK","session-init: Received from /api/sessions/init",{sessionDbId:p,promptNumber:d,skipped:l.skipped}),_.debug("HOOK",`[ALIGNMENT] Hook Entry | contentSessionId=${r} | prompt#=${d} | sessionDbId=${p}`),l.skipped&&l.reason==="private")return _.info("HOOK",`INIT_COMPLETE | sessionDbId=${p} | promptNumber=${d} | skipped=true | reason=private`,{sessionId:p}),{continue:!0,suppressOutput:!0};if(t.platform!=="cursor"&&p){let m=s.startsWith("/")?s.substring(1):s;_.debug("HOOK","session-init: Calling /sessions/{sessionDbId}/init",{sessionDbId:p,promptNumber:d});let f=await fetch(`http://127.0.0.1:${c}/sessions/${p}/init`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({userPrompt:m,promptNumber:d})});f.ok||_.failure("HOOK",`SDK agent start failed: ${f.status}`,{sessionDbId:p,promptNumber:d})}else t.platform==="cursor"&&_.debug("HOOK","session-init: Skipping SDK agent init for Cursor platform",{sessionDbId:p,promptNumber:d});return _.info("HOOK",`INIT_COMPLETE | sessionDbId=${p} | promptNumber=${d} | project=${o}`,{sessionId:p}),{continue:!0,suppressOutput:!0}}}});var IT,OT=Ae(()=>{"use strict";qr();he();An();kT();ar();Wt();IT={async execute(t){if(!await en())return{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS};let{sessionId:r,cwd:n,toolName:i,toolInput:a,toolResponse:s}=t;if(!i)throw new Error("observationHandler requires toolName");let o=gt(),c=_.formatTool(i,a);if(_.dataIn("HOOK",`PostToolUse: ${c}`,{workerPort:o}),!n)throw new Error(`Missing cwd in PostToolUse hook input for session ${r}, tool ${i}`);let u=Re.loadFromFile(or);if(cy(n,u.CLAUDE_MEM_EXCLUDED_PROJECTS))return _.debug("HOOK","Project excluded from tracking, skipping observation",{cwd:n,toolName:i}),{continue:!0,suppressOutput:!0};try{let l=await fetch(`http://127.0.0.1:${o}/api/sessions/observations`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contentSessionId:r,tool_name:i,tool_input:a,tool_response:s,cwd:n})});if(!l.ok)return _.warn("HOOK","Observation storage failed, skipping",{status:l.status,toolName:i}),{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS};_.debug("HOOK","Observation sent successfully",{toolName:i})}catch(l){return _.warn("HOOK","Observation fetch error, skipping",{error:l instanceof Error?l.message:String(l)}),{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS}}return{continue:!0,suppressOutput:!0}}}});function Q9(t,e,r=!1){if(!t||!(0,uy.existsSync)(t))throw new Error(`Transcript path missing or file does not exist: ${t}`);let n=(0,uy.readFileSync)(t,"utf-8").trim();if(!n)throw new Error(`Transcript file exists but is empty: ${t}`);let i=n.split(` +View Observations Live @ http://localhost:${i}`:void 0;return{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:d},systemMessage:f}}catch(o){return _.warn("HOOK","Context fetch error, returning empty",{error:o instanceof Error?o.message:String(o)}),{hookSpecificOutput:{hookEventName:"SessionStart",additionalContext:""},exitCode:dt.SUCCESS}}}}});function qye(t){let e=t.startsWith("~")?(0,Y9.homedir)()+t.slice(1):t;e=e.replace(/\\/g,"/");let r=e.replace(/[.+^${}()|[\]\\]/g,"\\$&");return r=r.replace(/\*\*/g,"<<>>").replace(/\*/g,"[^/]*").replace(/\?/g,"[^/]").replace(/<<>>/g,".*"),new RegExp(`^${r}$`)}function cy(t,e){if(!e||!e.trim())return!1;let r=t.replace(/\\/g,"/"),n=e.split(",").map(i=>i.trim()).filter(Boolean);for(let i of n)try{if(qye(i).test(r))return!0}catch{continue}return!1}var Y9,kT=Ae(()=>{"use strict";Y9=require("os")});var $T,TT=Ae(()=>{"use strict";qr();Jv();he();An();kT();ar();Wt();$T={async execute(t){if(!await en())return{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS};let{sessionId:r,cwd:n,prompt:i}=t,a=Re.loadFromFile(or);if(n&&cy(n,a.CLAUDE_MEM_EXCLUDED_PROJECTS))return _.info("HOOK","Project excluded from tracking",{cwd:n}),{continue:!0,suppressOutput:!0};let s=!i||!i.trim()?"[media prompt]":i,o=Wd(n),c=gt();_.debug("HOOK","session-init: Calling /api/sessions/init",{contentSessionId:r,project:o});let u=await fetch(`http://127.0.0.1:${c}/api/sessions/init`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contentSessionId:r,project:o,prompt:s})});if(!u.ok)return _.failure("HOOK",`Session initialization failed: ${u.status}`,{contentSessionId:r,project:o}),{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS};let l=await u.json(),p=l.sessionDbId,d=l.promptNumber;if(_.debug("HOOK","session-init: Received from /api/sessions/init",{sessionDbId:p,promptNumber:d,skipped:l.skipped}),_.debug("HOOK",`[ALIGNMENT] Hook Entry | contentSessionId=${r} | prompt#=${d} | sessionDbId=${p}`),l.skipped&&l.reason==="private")return _.info("HOOK",`INIT_COMPLETE | sessionDbId=${p} | promptNumber=${d} | skipped=true | reason=private`,{sessionId:p}),{continue:!0,suppressOutput:!0};if(t.platform!=="cursor"&&p){let m=s.startsWith("/")?s.substring(1):s;_.debug("HOOK","session-init: Calling /sessions/{sessionDbId}/init",{sessionDbId:p,promptNumber:d});let f=await fetch(`http://127.0.0.1:${c}/sessions/${p}/init`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({userPrompt:m,promptNumber:d})});f.ok||_.failure("HOOK",`SDK agent start failed: ${f.status}`,{sessionDbId:p,promptNumber:d})}else t.platform==="cursor"&&_.debug("HOOK","session-init: Skipping SDK agent init for Cursor platform",{sessionDbId:p,promptNumber:d});return _.info("HOOK",`INIT_COMPLETE | sessionDbId=${p} | promptNumber=${d} | project=${o}`,{sessionId:p}),{continue:!0,suppressOutput:!0}}}});var IT,OT=Ae(()=>{"use strict";qr();he();An();kT();ar();Wt();IT={async execute(t){if(!await en())return{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS};let{sessionId:r,cwd:n,toolName:i,toolInput:a,toolResponse:s}=t;if(!i)throw new Error("observationHandler requires toolName");let o=gt(),c=_.formatTool(i,a);if(_.dataIn("HOOK",`PostToolUse: ${c}`,{workerPort:o}),!n)throw new Error(`Missing cwd in PostToolUse hook input for session ${r}, tool ${i}`);let u=Re.loadFromFile(or);if(cy(n,u.CLAUDE_MEM_EXCLUDED_PROJECTS))return _.debug("HOOK","Project excluded from tracking, skipping observation",{cwd:n,toolName:i}),{continue:!0,suppressOutput:!0};try{let l=await fetch(`http://127.0.0.1:${o}/api/sessions/observations`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({contentSessionId:r,tool_name:i,tool_input:a,tool_response:s,cwd:n})});if(!l.ok)return _.warn("HOOK","Observation storage failed, skipping",{status:l.status,toolName:i}),{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS};_.debug("HOOK","Observation sent successfully",{toolName:i})}catch(l){return _.warn("HOOK","Observation fetch error, skipping",{error:l instanceof Error?l.message:String(l)}),{continue:!0,suppressOutput:!0,exitCode:dt.SUCCESS}}return{continue:!0,suppressOutput:!0}}}});function Q9(t,e,r=!1){if(!t||!(0,uy.existsSync)(t))throw new Error(`Transcript path missing or file does not exist: ${t}`);let n=(0,uy.readFileSync)(t,"utf-8").trim();if(!n)throw new Error(`Transcript file exists but is empty: ${t}`);let i=n.split(` `),a=!1;for(let s=i.length-1;s>=0;s--){let o=JSON.parse(i[s]);if(o.type===e&&(a=!0,o.message?.content)){let c="",u=o.message.content;if(typeof u=="string")c=u;else if(Array.isArray(u))c=u.filter(l=>l.type==="text").map(l=>l.text).join(` `);else throw new Error(`Unknown message content format in transcript. Type: ${typeof u}`);return r&&(c=c.replace(/[\s\S]*?<\/system-reminder>/g,""),c=c.replace(/\n{3,}/g,` diff --git a/src/cli/handlers/context.ts b/src/cli/handlers/context.ts index aeea2df4..a373b8f5 100644 --- a/src/cli/handlers/context.ts +++ b/src/cli/handlers/context.ts @@ -37,7 +37,12 @@ export const contextHandler: EventHandler = { // Note: Removed AbortSignal.timeout due to Windows Bun cleanup issue (libuv assertion) // Worker service has its own timeouts, so client-side timeout is redundant try { - const response = await fetch(url); + // Fetch both markdown (for Claude context) and colored (for user display) truly in parallel + const colorUrl = `${url}&colors=true`; + const [response, colorResponse] = await Promise.all([ + fetch(url), + fetch(colorUrl).catch(() => null) + ]); if (!response.ok) { // Log but don't throw — context fetch failure should not block session start @@ -48,11 +53,9 @@ export const contextHandler: EventHandler = { }; } - // Fetch both markdown (for Claude context) and colored (for user display) in parallel - const colorUrl = `${url}&colors=true`; const [contextResult, colorResult] = await Promise.all([ response.text(), - fetch(colorUrl).then(r => r.ok ? r.text() : '').catch(() => '') + colorResponse?.ok ? colorResponse.text() : Promise.resolve('') ]); const additionalContext = contextResult.trim();