From ee9a391d351978da114f67d4355a1ca8994eb12f Mon Sep 17 00:00:00 2001 From: Alex Newman Date: Thu, 25 Dec 2025 20:25:11 -0500 Subject: [PATCH] build --- plugin/scripts/worker-service.cjs | 2 +- plugin/ui/viewer-bundle.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/plugin/scripts/worker-service.cjs b/plugin/scripts/worker-service.cjs index 3862276e..4909670f 100755 --- a/plugin/scripts/worker-service.cjs +++ b/plugin/scripts/worker-service.cjs @@ -1064,7 +1064,7 @@ Tips: WHERE project IS NOT NULL GROUP BY project ORDER BY MAX(created_at_epoch) DESC - `).all().map(o=>o.project);n.json({projects:i})});handleGetProcessingStatus=this.wrapHandler((r,n)=>{let a=this.sessionManager.isAnySessionProcessing(),s=this.sessionManager.getTotalActiveWork();n.json({isProcessing:a,queueDepth:s})});handleSetProcessing=this.wrapHandler((r,n)=>{this.workerService.broadcastProcessingStatus();let a=this.sessionManager.isAnySessionProcessing(),s=this.sessionManager.getTotalQueueDepth(),i=this.sessionManager.getActiveSessionCount();n.json({status:"ok",isProcessing:a,queueDepth:s,activeSessions:i})});parsePaginationParams(r){let n=parseInt(r.query.offset,10)||0,a=Math.min(parseInt(r.query.limit,10)||20,100),s=r.query.project;return{offset:n,limit:a,project:s}}handleImport=this.wrapHandler((r,n)=>{let{sessions:a,summaries:s,observations:i,prompts:o}=r.body,c={sessionsImported:0,sessionsSkipped:0,summariesImported:0,summariesSkipped:0,observationsImported:0,observationsSkipped:0,promptsImported:0,promptsSkipped:0},u=this.dbManager.getSessionStore();if(Array.isArray(a))for(let l of a)u.importSdkSession(l).imported?c.sessionsImported++:c.sessionsSkipped++;if(Array.isArray(s))for(let l of s)u.importSessionSummary(l).imported?c.summariesImported++:c.summariesSkipped++;if(Array.isArray(i))for(let l of i)u.importObservation(l).imported?c.observationsImported++:c.observationsSkipped++;if(Array.isArray(o))for(let l of o)u.importUserPrompt(l).imported?c.promptsImported++:c.promptsSkipped++;n.json({success:!0,stats:c})});handleGetPendingQueue=this.wrapHandler((r,n)=>{let{PendingMessageStore:a}=(fo(),Sh(Du)),s=new a(this.dbManager.getSessionStore().db,3),i=s.getQueueMessages(),o=s.getRecentlyProcessed(20,30),c=s.getStuckCount(300*1e3),u=s.getSessionsWithPendingMessages();n.json({queue:{messages:i,totalPending:i.filter(l=>l.status==="pending").length,totalProcessing:i.filter(l=>l.status==="processing").length,totalFailed:i.filter(l=>l.status==="failed").length,stuckCount:c},recentlyProcessed:o,sessionsWithPendingWork:u})});handleProcessPendingQueue=this.wrapHandler(async(r,n)=>{let a=Math.min(Math.max(parseInt(r.body.sessionLimit,10)||10,1),100),s=await this.workerService.processPendingQueues(a);n.json({success:!0,...s})})};var Xl=class extends Or{constructor(r){super();this.searchManager=r}setupRoutes(r){r.get("/api/search",this.handleUnifiedSearch.bind(this)),r.get("/api/timeline",this.handleUnifiedTimeline.bind(this)),r.get("/api/decisions",this.handleDecisions.bind(this)),r.get("/api/changes",this.handleChanges.bind(this)),r.get("/api/how-it-works",this.handleHowItWorks.bind(this)),r.get("/api/search/observations",this.handleSearchObservations.bind(this)),r.get("/api/search/sessions",this.handleSearchSessions.bind(this)),r.get("/api/search/prompts",this.handleSearchPrompts.bind(this)),r.get("/api/search/by-concept",this.handleSearchByConcept.bind(this)),r.get("/api/search/by-file",this.handleSearchByFile.bind(this)),r.get("/api/search/by-type",this.handleSearchByType.bind(this)),r.get("/api/context/recent",this.handleGetRecentContext.bind(this)),r.get("/api/context/timeline",this.handleGetContextTimeline.bind(this)),r.get("/api/context/preview",this.handleContextPreview.bind(this)),r.get("/api/context/inject",this.handleContextInject.bind(this)),r.get("/api/timeline/by-query",this.handleGetTimelineByQuery.bind(this)),r.get("/api/search/help",this.handleSearchHelp.bind(this))}handleUnifiedSearch=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.search(r.query);n.json(a)});handleUnifiedTimeline=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.timeline(r.query);n.json(a)});handleDecisions=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.decisions(r.query);n.json(a)});handleChanges=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.changes(r.query);n.json(a)});handleHowItWorks=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.howItWorks(r.query);n.json(a)});handleSearchObservations=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.searchObservations(r.query);n.json(a)});handleSearchSessions=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.searchSessions(r.query);n.json(a)});handleSearchPrompts=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.searchUserPrompts(r.query);n.json(a)});handleSearchByConcept=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.findByConcept(r.query);n.json(a)});handleSearchByFile=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.findByFile(r.query);n.json(a)});handleSearchByType=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.findByType(r.query);n.json(a)});handleGetRecentContext=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.getRecentContext(r.query);n.json(a)});handleGetContextTimeline=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.getContextTimeline(r.query);n.json(a)});handleContextPreview=this.wrapHandler(async(r,n)=>{let a=r.query.project;if(!a){this.badRequest(n,"Project parameter is required");return}let{generateContext:s}=await Promise.resolve().then(()=>(Kl(),Wl)),i=`/preview/${a}`,o=await s({session_id:"preview-"+Date.now(),cwd:i},!0);n.setHeader("Content-Type","text/plain; charset=utf-8"),n.send(o)});handleContextInject=this.wrapHandler(async(r,n)=>{let a=r.query.project,s=r.query.colors==="true";if(!a){this.badRequest(n,"Project parameter is required");return}let{generateContext:i}=await Promise.resolve().then(()=>(Kl(),Wl)),o=`/context/${a}`,c=await i({session_id:"context-inject-"+Date.now(),cwd:o},s);n.setHeader("Content-Type","text/plain; charset=utf-8"),n.send(c)});handleGetTimelineByQuery=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.getTimelineByQuery(r.query);n.json(a)});handleSearchHelp=this.wrapHandler((r,n)=>{n.json({title:"Claude-Mem Search API",description:"HTTP API for searching persistent memory",endpoints:[{path:"/api/search/observations",method:"GET",description:"Search observations using full-text search",parameters:{query:"Search query (required)",limit:"Number of results (default: 20)",project:"Filter by project name (optional)"}},{path:"/api/search/sessions",method:"GET",description:"Search session summaries using full-text search",parameters:{query:"Search query (required)",limit:"Number of results (default: 20)"}},{path:"/api/search/prompts",method:"GET",description:"Search user prompts using full-text search",parameters:{query:"Search query (required)",limit:"Number of results (default: 20)",project:"Filter by project name (optional)"}},{path:"/api/search/by-concept",method:"GET",description:"Find observations by concept tag",parameters:{concept:"Concept tag (required): discovery, decision, bugfix, feature, refactor",limit:"Number of results (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/search/by-file",method:"GET",description:"Find observations and sessions by file path",parameters:{filePath:"File path or partial path (required)",limit:"Number of results per type (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/search/by-type",method:"GET",description:"Find observations by type",parameters:{type:"Observation type (required): discovery, decision, bugfix, feature, refactor",limit:"Number of results (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/context/recent",method:"GET",description:"Get recent session context including summaries and observations",parameters:{project:"Project name (default: current directory)",limit:"Number of recent sessions (default: 3)"}},{path:"/api/context/timeline",method:"GET",description:"Get unified timeline around a specific point in time",parameters:{anchor:'Anchor point: observation ID, session ID (e.g., "S123"), or ISO timestamp (required)',depth_before:"Number of records before anchor (default: 10)",depth_after:"Number of records after anchor (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/timeline/by-query",method:"GET",description:"Search for best match, then get timeline around it",parameters:{query:"Search query (required)",mode:'Search mode: "auto", "observations", or "sessions" (default: "auto")',depth_before:"Number of records before match (default: 10)",depth_after:"Number of records after match (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/search/help",method:"GET",description:"Get this help documentation"}],examples:['curl "http://localhost:37777/api/search/observations?query=authentication&limit=5"','curl "http://localhost:37777/api/search/by-type?type=bugfix&limit=10"','curl "http://localhost:37777/api/context/recent?project=claude-mem&limit=3"','curl "http://localhost:37777/api/context/timeline?anchor=123&depth_before=5&depth_after=5"']})})};var Hn=St(require("path"),1),Ft=require("fs"),lh=require("os");kr();mt();var ch=require("child_process"),zn=require("fs"),v$=require("os"),Lo=require("path");mt();var Fo=(0,Lo.join)((0,v$.homedir)(),".claude","plugins","marketplaces","thedotmack");function oh(t){return!t||typeof t!="string"?!1:/^[a-zA-Z0-9][a-zA-Z0-9._/-]*$/.test(t)&&!t.includes("..")}var Z7=3e4,uh=12e4;function Cr(t){let e=(0,ch.spawnSync)("git",t,{cwd:Fo,encoding:"utf-8",timeout:Z7,windowsHide:!0,shell:!1});if(e.error)throw e.error;if(e.status!==0)throw new Error(e.stderr||e.stdout||"Git command failed");return e.stdout.trim()}function g$(t,e=uh){let n=process.platform==="win32"?"npm.cmd":"npm",a=(0,ch.spawnSync)(n,t,{cwd:Fo,encoding:"utf-8",timeout:e,windowsHide:!0,shell:!1});if(a.error)throw a.error;if(a.status!==0)throw new Error(a.stderr||a.stdout||"npm command failed");return a.stdout.trim()}function Jl(){let t=(0,Lo.join)(Fo,".git");if(!(0,zn.existsSync)(t))return{branch:null,isBeta:!1,isGitRepo:!1,isDirty:!1,canSwitch:!1,error:"Installed plugin is not a git repository"};try{let e=Cr(["rev-parse","--abbrev-ref","HEAD"]),n=Cr(["status","--porcelain"]).length>0,a=e.startsWith("beta");return{branch:e,isBeta:a,isGitRepo:!0,isDirty:n,canSwitch:!0}}catch(e){return q.error("BRANCH","Failed to get branch info",{},e),{branch:null,isBeta:!1,isGitRepo:!0,isDirty:!1,canSwitch:!1,error:e.message}}}async function y$(t){if(!oh(t))return{success:!1,error:`Invalid branch name: ${t}. Branch names must be alphanumeric with hyphens, underscores, slashes, or dots.`};let e=Jl();if(!e.isGitRepo)return{success:!1,error:"Installed plugin is not a git repository. Please reinstall."};if(e.branch===t)return{success:!0,branch:t,message:`Already on branch ${t}`};try{q.info("BRANCH","Starting branch switch",{from:e.branch,to:t}),q.debug("BRANCH","Discarding local changes"),Cr(["checkout","--","."]),Cr(["clean","-fd"]),q.debug("BRANCH","Fetching from origin"),Cr(["fetch","origin"]),q.debug("BRANCH","Checking out branch",{branch:t});try{Cr(["checkout",t])}catch{Cr(["checkout","-b",t,`origin/${t}`])}q.debug("BRANCH","Pulling latest"),Cr(["pull","origin",t]);let r=(0,Lo.join)(Fo,".install-version");return(0,zn.existsSync)(r)&&(0,zn.unlinkSync)(r),q.debug("BRANCH","Running npm install"),g$(["install"],uh),q.success("BRANCH","Branch switch complete",{branch:t}),{success:!0,branch:t,message:`Switched to ${t}. Worker will restart automatically.`}}catch(r){q.error("BRANCH","Branch switch failed",{targetBranch:t},r);try{e.branch&&oh(e.branch)&&Cr(["checkout",e.branch])}catch{}return{success:!1,error:`Branch switch failed: ${r.message}`}}}async function _$(){let t=Jl();if(!t.isGitRepo||!t.branch)return{success:!1,error:"Cannot pull updates: not a git repository"};try{if(!oh(t.branch))return{success:!1,error:`Invalid current branch name: ${t.branch}`};q.info("BRANCH","Pulling updates",{branch:t.branch}),Cr(["checkout","--","."]),Cr(["fetch","origin"]),Cr(["pull","origin",t.branch]);let e=(0,Lo.join)(Fo,".install-version");return(0,zn.existsSync)(e)&&(0,zn.unlinkSync)(e),g$(["install"],uh),q.success("BRANCH","Updates pulled",{branch:t.branch}),{success:!0,branch:t.branch,message:`Updated ${t.branch}. Worker will restart automatically.`}}catch(e){return q.error("BRANCH","Pull failed",{},e),{success:!1,error:`Pull failed: ${e.message}`}}}Dr();var Yl=class extends Or{constructor(r){super();this.settingsManager=r}setupRoutes(r){r.get("/api/settings",this.handleGetSettings.bind(this)),r.post("/api/settings",this.handleUpdateSettings.bind(this)),r.get("/api/mcp/status",this.handleGetMcpStatus.bind(this)),r.post("/api/mcp/toggle",this.handleToggleMcp.bind(this)),r.get("/api/branch/status",this.handleGetBranchStatus.bind(this)),r.post("/api/branch/switch",this.handleSwitchBranch.bind(this)),r.post("/api/branch/update",this.handleUpdateBranch.bind(this))}handleGetSettings=this.wrapHandler((r,n)=>{let a=Hn.default.join((0,lh.homedir)(),".claude-mem","settings.json");this.ensureSettingsFile(a);let s=nt.loadFromFile(a);n.json(s)});handleUpdateSettings=this.wrapHandler((r,n)=>{let a=this.validateSettings(r.body);if(!a.valid){n.status(400).json({success:!1,error:a.error});return}let s=Hn.default.join((0,lh.homedir)(),".claude-mem","settings.json");this.ensureSettingsFile(s);let i={};if((0,Ft.existsSync)(s)){let c=(0,Ft.readFileSync)(s,"utf-8");i=JSON.parse(c)}let o=["CLAUDE_MEM_MODEL","CLAUDE_MEM_CONTEXT_OBSERVATIONS","CLAUDE_MEM_WORKER_PORT","CLAUDE_MEM_WORKER_HOST","CLAUDE_MEM_PROVIDER","CLAUDE_MEM_GEMINI_API_KEY","CLAUDE_MEM_GEMINI_MODEL","CLAUDE_MEM_DATA_DIR","CLAUDE_MEM_LOG_LEVEL","CLAUDE_MEM_PYTHON_VERSION","CLAUDE_CODE_PATH","CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS","CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS","CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT","CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT","CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES","CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS","CLAUDE_MEM_CONTEXT_FULL_COUNT","CLAUDE_MEM_CONTEXT_FULL_FIELD","CLAUDE_MEM_CONTEXT_SESSION_COUNT","CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY","CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE"];for(let c of o)r.body[c]!==void 0&&(i[c]=r.body[c]);(0,Ft.writeFileSync)(s,JSON.stringify(i,null,2),"utf-8"),r1(),q.info("WORKER","Settings updated"),n.json({success:!0,message:"Settings updated successfully"})});handleGetMcpStatus=this.wrapHandler((r,n)=>{let a=this.isMcpEnabled();n.json({enabled:a})});handleToggleMcp=this.wrapHandler((r,n)=>{let{enabled:a}=r.body;if(typeof a!="boolean"){this.badRequest(n,"enabled must be a boolean");return}this.toggleMcp(a),n.json({success:!0,enabled:this.isMcpEnabled()})});handleGetBranchStatus=this.wrapHandler((r,n)=>{let a=Jl();n.json(a)});handleSwitchBranch=this.wrapHandler(async(r,n)=>{let{branch:a}=r.body;if(!a){n.status(400).json({success:!1,error:"Missing branch parameter"});return}let s=["main","beta/7.0","feature/bun-executable"];if(!s.includes(a)){n.status(400).json({success:!1,error:`Invalid branch. Allowed: ${s.join(", ")}`});return}q.info("WORKER","Branch switch requested",{branch:a});let i=await y$(a);i.success&&setTimeout(()=>{q.info("WORKER","Restarting worker after branch switch"),process.exit(0)},1e3),n.json(i)});handleUpdateBranch=this.wrapHandler(async(r,n)=>{q.info("WORKER","Branch update requested");let a=await _$();a.success&&setTimeout(()=>{q.info("WORKER","Restarting worker after branch update"),process.exit(0)},1e3),n.json(a)});validateSettings(r){if(r.CLAUDE_MEM_PROVIDER&&!["claude","gemini"].includes(r.CLAUDE_MEM_PROVIDER))return{valid:!1,error:'CLAUDE_MEM_PROVIDER must be "claude" or "gemini"'};if(r.CLAUDE_MEM_GEMINI_MODEL&&!["gemini-2.0-flash-exp","gemini-1.5-flash","gemini-1.5-pro"].includes(r.CLAUDE_MEM_GEMINI_MODEL))return{valid:!1,error:"CLAUDE_MEM_GEMINI_MODEL must be one of: gemini-2.0-flash-exp, gemini-1.5-flash, gemini-1.5-pro"};if(r.CLAUDE_MEM_CONTEXT_OBSERVATIONS){let a=parseInt(r.CLAUDE_MEM_CONTEXT_OBSERVATIONS,10);if(isNaN(a)||a<1||a>200)return{valid:!1,error:"CLAUDE_MEM_CONTEXT_OBSERVATIONS must be between 1 and 200"}}if(r.CLAUDE_MEM_WORKER_PORT){let a=parseInt(r.CLAUDE_MEM_WORKER_PORT,10);if(isNaN(a)||a<1024||a>65535)return{valid:!1,error:"CLAUDE_MEM_WORKER_PORT must be between 1024 and 65535"}}if(r.CLAUDE_MEM_WORKER_HOST){let a=r.CLAUDE_MEM_WORKER_HOST;if(!/^(127\.0\.0\.1|0\.0\.0\.0|localhost|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/.test(a))return{valid:!1,error:"CLAUDE_MEM_WORKER_HOST must be a valid IP address (e.g., 127.0.0.1, 0.0.0.0)"}}if(r.CLAUDE_MEM_LOG_LEVEL&&!["DEBUG","INFO","WARN","ERROR","SILENT"].includes(r.CLAUDE_MEM_LOG_LEVEL.toUpperCase()))return{valid:!1,error:"CLAUDE_MEM_LOG_LEVEL must be one of: DEBUG, INFO, WARN, ERROR, SILENT"};if(r.CLAUDE_MEM_PYTHON_VERSION&&!/^3\.\d{1,2}$/.test(r.CLAUDE_MEM_PYTHON_VERSION))return{valid:!1,error:'CLAUDE_MEM_PYTHON_VERSION must be in format "3.X" or "3.XX" (e.g., "3.13")'};let n=["CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS","CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS","CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT","CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT","CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY","CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE"];for(let a of n)if(r[a]&&!["true","false"].includes(r[a]))return{valid:!1,error:`${a} must be "true" or "false"`};if(r.CLAUDE_MEM_CONTEXT_FULL_COUNT){let a=parseInt(r.CLAUDE_MEM_CONTEXT_FULL_COUNT,10);if(isNaN(a)||a<0||a>20)return{valid:!1,error:"CLAUDE_MEM_CONTEXT_FULL_COUNT must be between 0 and 20"}}if(r.CLAUDE_MEM_CONTEXT_SESSION_COUNT){let a=parseInt(r.CLAUDE_MEM_CONTEXT_SESSION_COUNT,10);if(isNaN(a)||a<1||a>50)return{valid:!1,error:"CLAUDE_MEM_CONTEXT_SESSION_COUNT must be between 1 and 50"}}return r.CLAUDE_MEM_CONTEXT_FULL_FIELD&&!["narrative","facts"].includes(r.CLAUDE_MEM_CONTEXT_FULL_FIELD)?{valid:!1,error:'CLAUDE_MEM_CONTEXT_FULL_FIELD must be "narrative" or "facts"'}:{valid:!0}}isMcpEnabled(){let r=nr(),n=Hn.default.join(r,"plugin",".mcp.json");return(0,Ft.existsSync)(n)}toggleMcp(r){let n=nr(),a=Hn.default.join(n,"plugin",".mcp.json"),s=Hn.default.join(n,"plugin",".mcp.json.disabled");r&&(0,Ft.existsSync)(s)?((0,Ft.renameSync)(s,a),q.info("WORKER","MCP search server enabled")):!r&&(0,Ft.existsSync)(a)?((0,Ft.renameSync)(a,s),q.info("WORKER","MCP search server disabled")):q.debug("WORKER","MCP toggle no-op (already in desired state)",{enabled:r})}ensureSettingsFile(r){if(!(0,Ft.existsSync)(r)){let n=nt.getAllDefaults(),a=Hn.default.dirname(r);(0,Ft.existsSync)(a)||(0,Ft.mkdirSync)(a,{recursive:!0}),(0,Ft.writeFileSync)(r,JSON.stringify(n,null,2),"utf-8"),q.info("SETTINGS","Created settings file with defaults",{settingsPath:r})}}};var Uo=(0,x$.promisify)(ed.exec),Ql=class{app;server=null;startTime=Date.now();mcpClient;mcpReady=!1;initializationCompleteFlag=!1;dbManager;sessionManager;sseBroadcaster;sdkAgent;geminiAgent;paginationHelper;settingsManager;sessionEventBroadcaster;viewerRoutes;sessionRoutes;dataRoutes;searchRoutes;settingsRoutes;initializationComplete;resolveInitialization;constructor(){this.app=(0,b$.default)(),this.initializationComplete=new Promise(e=>{this.resolveInitialization=e}),this.dbManager=new Mu,this.sessionManager=new qu(this.dbManager),this.sseBroadcaster=new Lu,this.sdkAgent=new Rl(this.dbManager,this.sessionManager),this.geminiAgent=new Pl(this.dbManager,this.sessionManager),this.geminiAgent.setFallbackAgent(this.sdkAgent),this.paginationHelper=new Il(this.dbManager),this.settingsManager=new Al(this.dbManager),this.sessionEventBroadcaster=new ql(this.sseBroadcaster,this),this.sessionManager.setOnSessionDeleted(()=>{this.broadcastProcessingStatus()}),this.mcpClient=new As({name:"worker-search-proxy",version:"1.0.0"},{capabilities:{}}),this.viewerRoutes=new Fl(this.sseBroadcaster,this.dbManager,this.sessionManager),this.sessionRoutes=new Hl(this.sessionManager,this.dbManager,this.sdkAgent,this.geminiAgent,this.sessionEventBroadcaster,this),this.dataRoutes=new Bl(this.paginationHelper,this.dbManager,this.sessionManager,this.sseBroadcaster,this,this.startTime),this.searchRoutes=null,this.settingsRoutes=new Yl(this.settingsManager),this.setupMiddleware(),this.setupRoutes()}setupMiddleware(){s$(this.summarizeRequestBody.bind(this)).forEach(r=>this.app.use(r))}setupRoutes(){let e="TEST-008-wrapper-ipc";this.app.get("/api/health",(r,n)=>{n.status(200).json({status:"ok",build:e,managed:process.env.CLAUDE_MEM_MANAGED==="true",hasIpc:typeof process.send=="function",platform:process.platform,pid:process.pid,initialized:this.initializationCompleteFlag,mcpReady:this.mcpReady})}),this.app.get("/api/readiness",(r,n)=>{this.initializationCompleteFlag?n.status(200).json({status:"ready",mcpReady:this.mcpReady}):n.status(503).json({status:"initializing",message:"Worker is still initializing, please retry"})}),this.app.get("/api/version",(r,n)=>{let{homedir:a}=require("os"),{readFileSync:s}=require("fs"),i=pi.default.join(a(),".claude","plugins","marketplaces","thedotmack"),o=pi.default.join(i,"package.json"),c=JSON.parse(s(o,"utf-8"));n.status(200).json({version:c.version})}),this.app.get("/api/instructions",async(r,n)=>{let a=r.query.topic||"all",s=r.query.operation;try{let i;if(s){let o=pi.default.join(__dirname,"../skills/mem-search/operations",`${s}.md`);i=await dh.promises.readFile(o,"utf-8")}else{let o=pi.default.join(__dirname,"../skills/mem-search/SKILL.md"),c=await dh.promises.readFile(o,"utf-8");i=this.extractInstructionSection(c,a)}n.json({content:[{type:"text",text:i}]})}catch(i){q.error("WORKER","Failed to load instructions",{topic:a,operation:s},i),n.status(500).json({content:[{type:"text",text:`Error loading instructions: ${i instanceof Error?i.message:"Unknown error"}`}],isError:!0})}}),this.app.post("/api/admin/restart",nh,async(r,n)=>{n.json({status:"restarting"}),process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?(q.info("SYSTEM","Sending restart request to wrapper"),process.send({type:"restart"})):setTimeout(async()=>{await this.shutdown(),process.exit(0)},100)}),this.app.post("/api/admin/shutdown",nh,async(r,n)=>{n.json({status:"shutting_down"}),process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?(q.info("SYSTEM","Sending shutdown request to wrapper"),process.send({type:"shutdown"})):setTimeout(async()=>{await this.shutdown(),process.exit(0)},100)}),this.viewerRoutes.setupRoutes(this.app),this.sessionRoutes.setupRoutes(this.app),this.dataRoutes.setupRoutes(this.app),this.settingsRoutes.setupRoutes(this.app),this.app.get("/api/context/inject",async(r,n,a)=>{try{let i=new Promise((p,m)=>setTimeout(()=>m(new Error("Initialization timeout")),3e4));if(await Promise.race([this.initializationComplete,i]),!this.searchRoutes){n.status(503).json({error:"Search routes not initialized"});return}let o=r.query.project,c=r.query.colors==="true";if(!o){n.status(400).json({error:"Project parameter is required"});return}let{generateContext:u}=await Promise.resolve().then(()=>(Kl(),Wl)),l=`/context/${o}`,d=await u({session_id:"context-inject-"+Date.now(),cwd:l},c);n.setHeader("Content-Type","text/plain; charset=utf-8"),n.send(d)}catch(s){q.error("WORKER","Context inject handler failed",{},s),n.status(500).json({error:s instanceof Error?s.message:"Internal server error"})}})}async cleanupOrphanedProcesses(){let e=process.platform==="win32",r=[];if(e){let n=`powershell -Command "Get-CimInstance Win32_Process | Where-Object { $_.Name -like '*python*' -and $_.CommandLine -like '*chroma-mcp*' } | Select-Object -ExpandProperty ProcessId"`,{stdout:a}=await Uo(n,{timeout:5e3});if(!a.trim()){q.debug("SYSTEM","No orphaned chroma-mcp processes found (Windows)");return}let s=a.trim().split(` + `).all().map(o=>o.project);n.json({projects:i})});handleGetProcessingStatus=this.wrapHandler((r,n)=>{let a=this.sessionManager.isAnySessionProcessing(),s=this.sessionManager.getTotalActiveWork();n.json({isProcessing:a,queueDepth:s})});handleSetProcessing=this.wrapHandler((r,n)=>{this.workerService.broadcastProcessingStatus();let a=this.sessionManager.isAnySessionProcessing(),s=this.sessionManager.getTotalQueueDepth(),i=this.sessionManager.getActiveSessionCount();n.json({status:"ok",isProcessing:a,queueDepth:s,activeSessions:i})});parsePaginationParams(r){let n=parseInt(r.query.offset,10)||0,a=Math.min(parseInt(r.query.limit,10)||20,100),s=r.query.project;return{offset:n,limit:a,project:s}}handleImport=this.wrapHandler((r,n)=>{let{sessions:a,summaries:s,observations:i,prompts:o}=r.body,c={sessionsImported:0,sessionsSkipped:0,summariesImported:0,summariesSkipped:0,observationsImported:0,observationsSkipped:0,promptsImported:0,promptsSkipped:0},u=this.dbManager.getSessionStore();if(Array.isArray(a))for(let l of a)u.importSdkSession(l).imported?c.sessionsImported++:c.sessionsSkipped++;if(Array.isArray(s))for(let l of s)u.importSessionSummary(l).imported?c.summariesImported++:c.summariesSkipped++;if(Array.isArray(i))for(let l of i)u.importObservation(l).imported?c.observationsImported++:c.observationsSkipped++;if(Array.isArray(o))for(let l of o)u.importUserPrompt(l).imported?c.promptsImported++:c.promptsSkipped++;n.json({success:!0,stats:c})});handleGetPendingQueue=this.wrapHandler((r,n)=>{let{PendingMessageStore:a}=(fo(),Sh(Du)),s=new a(this.dbManager.getSessionStore().db,3),i=s.getQueueMessages(),o=s.getRecentlyProcessed(20,30),c=s.getStuckCount(300*1e3),u=s.getSessionsWithPendingMessages();n.json({queue:{messages:i,totalPending:i.filter(l=>l.status==="pending").length,totalProcessing:i.filter(l=>l.status==="processing").length,totalFailed:i.filter(l=>l.status==="failed").length,stuckCount:c},recentlyProcessed:o,sessionsWithPendingWork:u})});handleProcessPendingQueue=this.wrapHandler(async(r,n)=>{let a=Math.min(Math.max(parseInt(r.body.sessionLimit,10)||10,1),100),s=await this.workerService.processPendingQueues(a);n.json({success:!0,...s})})};var Xl=class extends Or{constructor(r){super();this.searchManager=r}setupRoutes(r){r.get("/api/search",this.handleUnifiedSearch.bind(this)),r.get("/api/timeline",this.handleUnifiedTimeline.bind(this)),r.get("/api/decisions",this.handleDecisions.bind(this)),r.get("/api/changes",this.handleChanges.bind(this)),r.get("/api/how-it-works",this.handleHowItWorks.bind(this)),r.get("/api/search/observations",this.handleSearchObservations.bind(this)),r.get("/api/search/sessions",this.handleSearchSessions.bind(this)),r.get("/api/search/prompts",this.handleSearchPrompts.bind(this)),r.get("/api/search/by-concept",this.handleSearchByConcept.bind(this)),r.get("/api/search/by-file",this.handleSearchByFile.bind(this)),r.get("/api/search/by-type",this.handleSearchByType.bind(this)),r.get("/api/context/recent",this.handleGetRecentContext.bind(this)),r.get("/api/context/timeline",this.handleGetContextTimeline.bind(this)),r.get("/api/context/preview",this.handleContextPreview.bind(this)),r.get("/api/context/inject",this.handleContextInject.bind(this)),r.get("/api/timeline/by-query",this.handleGetTimelineByQuery.bind(this)),r.get("/api/search/help",this.handleSearchHelp.bind(this))}handleUnifiedSearch=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.search(r.query);n.json(a)});handleUnifiedTimeline=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.timeline(r.query);n.json(a)});handleDecisions=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.decisions(r.query);n.json(a)});handleChanges=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.changes(r.query);n.json(a)});handleHowItWorks=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.howItWorks(r.query);n.json(a)});handleSearchObservations=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.searchObservations(r.query);n.json(a)});handleSearchSessions=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.searchSessions(r.query);n.json(a)});handleSearchPrompts=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.searchUserPrompts(r.query);n.json(a)});handleSearchByConcept=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.findByConcept(r.query);n.json(a)});handleSearchByFile=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.findByFile(r.query);n.json(a)});handleSearchByType=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.findByType(r.query);n.json(a)});handleGetRecentContext=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.getRecentContext(r.query);n.json(a)});handleGetContextTimeline=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.getContextTimeline(r.query);n.json(a)});handleContextPreview=this.wrapHandler(async(r,n)=>{let a=r.query.project;if(!a){this.badRequest(n,"Project parameter is required");return}let{generateContext:s}=await Promise.resolve().then(()=>(Kl(),Wl)),i=`/preview/${a}`,o=await s({session_id:"preview-"+Date.now(),cwd:i},!0);n.setHeader("Content-Type","text/plain; charset=utf-8"),n.send(o)});handleContextInject=this.wrapHandler(async(r,n)=>{let a=r.query.project,s=r.query.colors==="true";if(!a){this.badRequest(n,"Project parameter is required");return}let{generateContext:i}=await Promise.resolve().then(()=>(Kl(),Wl)),o=`/context/${a}`,c=await i({session_id:"context-inject-"+Date.now(),cwd:o},s);n.setHeader("Content-Type","text/plain; charset=utf-8"),n.send(c)});handleGetTimelineByQuery=this.wrapHandler(async(r,n)=>{let a=await this.searchManager.getTimelineByQuery(r.query);n.json(a)});handleSearchHelp=this.wrapHandler((r,n)=>{n.json({title:"Claude-Mem Search API",description:"HTTP API for searching persistent memory",endpoints:[{path:"/api/search/observations",method:"GET",description:"Search observations using full-text search",parameters:{query:"Search query (required)",limit:"Number of results (default: 20)",project:"Filter by project name (optional)"}},{path:"/api/search/sessions",method:"GET",description:"Search session summaries using full-text search",parameters:{query:"Search query (required)",limit:"Number of results (default: 20)"}},{path:"/api/search/prompts",method:"GET",description:"Search user prompts using full-text search",parameters:{query:"Search query (required)",limit:"Number of results (default: 20)",project:"Filter by project name (optional)"}},{path:"/api/search/by-concept",method:"GET",description:"Find observations by concept tag",parameters:{concept:"Concept tag (required): discovery, decision, bugfix, feature, refactor",limit:"Number of results (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/search/by-file",method:"GET",description:"Find observations and sessions by file path",parameters:{filePath:"File path or partial path (required)",limit:"Number of results per type (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/search/by-type",method:"GET",description:"Find observations by type",parameters:{type:"Observation type (required): discovery, decision, bugfix, feature, refactor",limit:"Number of results (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/context/recent",method:"GET",description:"Get recent session context including summaries and observations",parameters:{project:"Project name (default: current directory)",limit:"Number of recent sessions (default: 3)"}},{path:"/api/context/timeline",method:"GET",description:"Get unified timeline around a specific point in time",parameters:{anchor:'Anchor point: observation ID, session ID (e.g., "S123"), or ISO timestamp (required)',depth_before:"Number of records before anchor (default: 10)",depth_after:"Number of records after anchor (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/timeline/by-query",method:"GET",description:"Search for best match, then get timeline around it",parameters:{query:"Search query (required)",mode:'Search mode: "auto", "observations", or "sessions" (default: "auto")',depth_before:"Number of records before match (default: 10)",depth_after:"Number of records after match (default: 10)",project:"Filter by project name (optional)"}},{path:"/api/search/help",method:"GET",description:"Get this help documentation"}],examples:['curl "http://localhost:37777/api/search/observations?query=authentication&limit=5"','curl "http://localhost:37777/api/search/by-type?type=bugfix&limit=10"','curl "http://localhost:37777/api/context/recent?project=claude-mem&limit=3"','curl "http://localhost:37777/api/context/timeline?anchor=123&depth_before=5&depth_after=5"']})})};var Hn=St(require("path"),1),Ft=require("fs"),lh=require("os");kr();mt();var ch=require("child_process"),zn=require("fs"),v$=require("os"),Lo=require("path");mt();var Fo=(0,Lo.join)((0,v$.homedir)(),".claude","plugins","marketplaces","thedotmack");function oh(t){return!t||typeof t!="string"?!1:/^[a-zA-Z0-9][a-zA-Z0-9._/-]*$/.test(t)&&!t.includes("..")}var Z7=3e4,uh=12e4;function Cr(t){let e=(0,ch.spawnSync)("git",t,{cwd:Fo,encoding:"utf-8",timeout:Z7,windowsHide:!0,shell:!1});if(e.error)throw e.error;if(e.status!==0)throw new Error(e.stderr||e.stdout||"Git command failed");return e.stdout.trim()}function g$(t,e=uh){let n=process.platform==="win32"?"npm.cmd":"npm",a=(0,ch.spawnSync)(n,t,{cwd:Fo,encoding:"utf-8",timeout:e,windowsHide:!0,shell:!1});if(a.error)throw a.error;if(a.status!==0)throw new Error(a.stderr||a.stdout||"npm command failed");return a.stdout.trim()}function Jl(){let t=(0,Lo.join)(Fo,".git");if(!(0,zn.existsSync)(t))return{branch:null,isBeta:!1,isGitRepo:!1,isDirty:!1,canSwitch:!1,error:"Installed plugin is not a git repository"};try{let e=Cr(["rev-parse","--abbrev-ref","HEAD"]),n=Cr(["status","--porcelain"]).length>0,a=e.startsWith("beta");return{branch:e,isBeta:a,isGitRepo:!0,isDirty:n,canSwitch:!0}}catch(e){return q.error("BRANCH","Failed to get branch info",{},e),{branch:null,isBeta:!1,isGitRepo:!0,isDirty:!1,canSwitch:!1,error:e.message}}}async function y$(t){if(!oh(t))return{success:!1,error:`Invalid branch name: ${t}. Branch names must be alphanumeric with hyphens, underscores, slashes, or dots.`};let e=Jl();if(!e.isGitRepo)return{success:!1,error:"Installed plugin is not a git repository. Please reinstall."};if(e.branch===t)return{success:!0,branch:t,message:`Already on branch ${t}`};try{q.info("BRANCH","Starting branch switch",{from:e.branch,to:t}),q.debug("BRANCH","Discarding local changes"),Cr(["checkout","--","."]),Cr(["clean","-fd"]),q.debug("BRANCH","Fetching from origin"),Cr(["fetch","origin"]),q.debug("BRANCH","Checking out branch",{branch:t});try{Cr(["checkout",t])}catch{Cr(["checkout","-b",t,`origin/${t}`])}q.debug("BRANCH","Pulling latest"),Cr(["pull","origin",t]);let r=(0,Lo.join)(Fo,".install-version");return(0,zn.existsSync)(r)&&(0,zn.unlinkSync)(r),q.debug("BRANCH","Running npm install"),g$(["install"],uh),q.success("BRANCH","Branch switch complete",{branch:t}),{success:!0,branch:t,message:`Switched to ${t}. Worker will restart automatically.`}}catch(r){q.error("BRANCH","Branch switch failed",{targetBranch:t},r);try{e.branch&&oh(e.branch)&&Cr(["checkout",e.branch])}catch{}return{success:!1,error:`Branch switch failed: ${r.message}`}}}async function _$(){let t=Jl();if(!t.isGitRepo||!t.branch)return{success:!1,error:"Cannot pull updates: not a git repository"};try{if(!oh(t.branch))return{success:!1,error:`Invalid current branch name: ${t.branch}`};q.info("BRANCH","Pulling updates",{branch:t.branch}),Cr(["checkout","--","."]),Cr(["fetch","origin"]),Cr(["pull","origin",t.branch]);let e=(0,Lo.join)(Fo,".install-version");return(0,zn.existsSync)(e)&&(0,zn.unlinkSync)(e),g$(["install"],uh),q.success("BRANCH","Updates pulled",{branch:t.branch}),{success:!0,branch:t.branch,message:`Updated ${t.branch}. Worker will restart automatically.`}}catch(e){return q.error("BRANCH","Pull failed",{},e),{success:!1,error:`Pull failed: ${e.message}`}}}Dr();var Yl=class extends Or{constructor(r){super();this.settingsManager=r}setupRoutes(r){r.get("/api/settings",this.handleGetSettings.bind(this)),r.post("/api/settings",this.handleUpdateSettings.bind(this)),r.get("/api/mcp/status",this.handleGetMcpStatus.bind(this)),r.post("/api/mcp/toggle",this.handleToggleMcp.bind(this)),r.get("/api/branch/status",this.handleGetBranchStatus.bind(this)),r.post("/api/branch/switch",this.handleSwitchBranch.bind(this)),r.post("/api/branch/update",this.handleUpdateBranch.bind(this))}handleGetSettings=this.wrapHandler((r,n)=>{let a=Hn.default.join((0,lh.homedir)(),".claude-mem","settings.json");this.ensureSettingsFile(a);let s=nt.loadFromFile(a);n.json(s)});handleUpdateSettings=this.wrapHandler((r,n)=>{let a=this.validateSettings(r.body);if(!a.valid){n.status(400).json({success:!1,error:a.error});return}let s=Hn.default.join((0,lh.homedir)(),".claude-mem","settings.json");this.ensureSettingsFile(s);let i={};if((0,Ft.existsSync)(s)){let c=(0,Ft.readFileSync)(s,"utf-8");i=JSON.parse(c)}let o=["CLAUDE_MEM_MODEL","CLAUDE_MEM_CONTEXT_OBSERVATIONS","CLAUDE_MEM_WORKER_PORT","CLAUDE_MEM_WORKER_HOST","CLAUDE_MEM_PROVIDER","CLAUDE_MEM_GEMINI_API_KEY","CLAUDE_MEM_GEMINI_MODEL","CLAUDE_MEM_DATA_DIR","CLAUDE_MEM_LOG_LEVEL","CLAUDE_MEM_PYTHON_VERSION","CLAUDE_CODE_PATH","CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS","CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS","CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT","CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT","CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES","CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS","CLAUDE_MEM_CONTEXT_FULL_COUNT","CLAUDE_MEM_CONTEXT_FULL_FIELD","CLAUDE_MEM_CONTEXT_SESSION_COUNT","CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY","CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE"];for(let c of o)r.body[c]!==void 0&&(i[c]=r.body[c]);(0,Ft.writeFileSync)(s,JSON.stringify(i,null,2),"utf-8"),r1(),q.info("WORKER","Settings updated"),n.json({success:!0,message:"Settings updated successfully"})});handleGetMcpStatus=this.wrapHandler((r,n)=>{let a=this.isMcpEnabled();n.json({enabled:a})});handleToggleMcp=this.wrapHandler((r,n)=>{let{enabled:a}=r.body;if(typeof a!="boolean"){this.badRequest(n,"enabled must be a boolean");return}this.toggleMcp(a),n.json({success:!0,enabled:this.isMcpEnabled()})});handleGetBranchStatus=this.wrapHandler((r,n)=>{let a=Jl();n.json(a)});handleSwitchBranch=this.wrapHandler(async(r,n)=>{let{branch:a}=r.body;if(!a){n.status(400).json({success:!1,error:"Missing branch parameter"});return}let s=["main","beta/7.0","feature/bun-executable"];if(!s.includes(a)){n.status(400).json({success:!1,error:`Invalid branch. Allowed: ${s.join(", ")}`});return}q.info("WORKER","Branch switch requested",{branch:a});let i=await y$(a);i.success&&setTimeout(()=>{q.info("WORKER","Restarting worker after branch switch"),process.exit(0)},1e3),n.json(i)});handleUpdateBranch=this.wrapHandler(async(r,n)=>{q.info("WORKER","Branch update requested");let a=await _$();a.success&&setTimeout(()=>{q.info("WORKER","Restarting worker after branch update"),process.exit(0)},1e3),n.json(a)});validateSettings(r){if(r.CLAUDE_MEM_PROVIDER&&!["claude","gemini"].includes(r.CLAUDE_MEM_PROVIDER))return{valid:!1,error:'CLAUDE_MEM_PROVIDER must be "claude" or "gemini"'};if(r.CLAUDE_MEM_GEMINI_MODEL&&!["gemini-2.5-flash-lite","gemini-2.5-flash","gemini-3-flash"].includes(r.CLAUDE_MEM_GEMINI_MODEL))return{valid:!1,error:"CLAUDE_MEM_GEMINI_MODEL must be one of: gemini-2.5-flash-lite, gemini-2.5-flash, gemini-3-flash"};if(r.CLAUDE_MEM_CONTEXT_OBSERVATIONS){let a=parseInt(r.CLAUDE_MEM_CONTEXT_OBSERVATIONS,10);if(isNaN(a)||a<1||a>200)return{valid:!1,error:"CLAUDE_MEM_CONTEXT_OBSERVATIONS must be between 1 and 200"}}if(r.CLAUDE_MEM_WORKER_PORT){let a=parseInt(r.CLAUDE_MEM_WORKER_PORT,10);if(isNaN(a)||a<1024||a>65535)return{valid:!1,error:"CLAUDE_MEM_WORKER_PORT must be between 1024 and 65535"}}if(r.CLAUDE_MEM_WORKER_HOST){let a=r.CLAUDE_MEM_WORKER_HOST;if(!/^(127\.0\.0\.1|0\.0\.0\.0|localhost|\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})$/.test(a))return{valid:!1,error:"CLAUDE_MEM_WORKER_HOST must be a valid IP address (e.g., 127.0.0.1, 0.0.0.0)"}}if(r.CLAUDE_MEM_LOG_LEVEL&&!["DEBUG","INFO","WARN","ERROR","SILENT"].includes(r.CLAUDE_MEM_LOG_LEVEL.toUpperCase()))return{valid:!1,error:"CLAUDE_MEM_LOG_LEVEL must be one of: DEBUG, INFO, WARN, ERROR, SILENT"};if(r.CLAUDE_MEM_PYTHON_VERSION&&!/^3\.\d{1,2}$/.test(r.CLAUDE_MEM_PYTHON_VERSION))return{valid:!1,error:'CLAUDE_MEM_PYTHON_VERSION must be in format "3.X" or "3.XX" (e.g., "3.13")'};let n=["CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS","CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS","CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT","CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT","CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY","CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE"];for(let a of n)if(r[a]&&!["true","false"].includes(r[a]))return{valid:!1,error:`${a} must be "true" or "false"`};if(r.CLAUDE_MEM_CONTEXT_FULL_COUNT){let a=parseInt(r.CLAUDE_MEM_CONTEXT_FULL_COUNT,10);if(isNaN(a)||a<0||a>20)return{valid:!1,error:"CLAUDE_MEM_CONTEXT_FULL_COUNT must be between 0 and 20"}}if(r.CLAUDE_MEM_CONTEXT_SESSION_COUNT){let a=parseInt(r.CLAUDE_MEM_CONTEXT_SESSION_COUNT,10);if(isNaN(a)||a<1||a>50)return{valid:!1,error:"CLAUDE_MEM_CONTEXT_SESSION_COUNT must be between 1 and 50"}}return r.CLAUDE_MEM_CONTEXT_FULL_FIELD&&!["narrative","facts"].includes(r.CLAUDE_MEM_CONTEXT_FULL_FIELD)?{valid:!1,error:'CLAUDE_MEM_CONTEXT_FULL_FIELD must be "narrative" or "facts"'}:{valid:!0}}isMcpEnabled(){let r=nr(),n=Hn.default.join(r,"plugin",".mcp.json");return(0,Ft.existsSync)(n)}toggleMcp(r){let n=nr(),a=Hn.default.join(n,"plugin",".mcp.json"),s=Hn.default.join(n,"plugin",".mcp.json.disabled");r&&(0,Ft.existsSync)(s)?((0,Ft.renameSync)(s,a),q.info("WORKER","MCP search server enabled")):!r&&(0,Ft.existsSync)(a)?((0,Ft.renameSync)(a,s),q.info("WORKER","MCP search server disabled")):q.debug("WORKER","MCP toggle no-op (already in desired state)",{enabled:r})}ensureSettingsFile(r){if(!(0,Ft.existsSync)(r)){let n=nt.getAllDefaults(),a=Hn.default.dirname(r);(0,Ft.existsSync)(a)||(0,Ft.mkdirSync)(a,{recursive:!0}),(0,Ft.writeFileSync)(r,JSON.stringify(n,null,2),"utf-8"),q.info("SETTINGS","Created settings file with defaults",{settingsPath:r})}}};var Uo=(0,x$.promisify)(ed.exec),Ql=class{app;server=null;startTime=Date.now();mcpClient;mcpReady=!1;initializationCompleteFlag=!1;dbManager;sessionManager;sseBroadcaster;sdkAgent;geminiAgent;paginationHelper;settingsManager;sessionEventBroadcaster;viewerRoutes;sessionRoutes;dataRoutes;searchRoutes;settingsRoutes;initializationComplete;resolveInitialization;constructor(){this.app=(0,b$.default)(),this.initializationComplete=new Promise(e=>{this.resolveInitialization=e}),this.dbManager=new Mu,this.sessionManager=new qu(this.dbManager),this.sseBroadcaster=new Lu,this.sdkAgent=new Rl(this.dbManager,this.sessionManager),this.geminiAgent=new Pl(this.dbManager,this.sessionManager),this.geminiAgent.setFallbackAgent(this.sdkAgent),this.paginationHelper=new Il(this.dbManager),this.settingsManager=new Al(this.dbManager),this.sessionEventBroadcaster=new ql(this.sseBroadcaster,this),this.sessionManager.setOnSessionDeleted(()=>{this.broadcastProcessingStatus()}),this.mcpClient=new As({name:"worker-search-proxy",version:"1.0.0"},{capabilities:{}}),this.viewerRoutes=new Fl(this.sseBroadcaster,this.dbManager,this.sessionManager),this.sessionRoutes=new Hl(this.sessionManager,this.dbManager,this.sdkAgent,this.geminiAgent,this.sessionEventBroadcaster,this),this.dataRoutes=new Bl(this.paginationHelper,this.dbManager,this.sessionManager,this.sseBroadcaster,this,this.startTime),this.searchRoutes=null,this.settingsRoutes=new Yl(this.settingsManager),this.setupMiddleware(),this.setupRoutes()}setupMiddleware(){s$(this.summarizeRequestBody.bind(this)).forEach(r=>this.app.use(r))}setupRoutes(){let e="TEST-008-wrapper-ipc";this.app.get("/api/health",(r,n)=>{n.status(200).json({status:"ok",build:e,managed:process.env.CLAUDE_MEM_MANAGED==="true",hasIpc:typeof process.send=="function",platform:process.platform,pid:process.pid,initialized:this.initializationCompleteFlag,mcpReady:this.mcpReady})}),this.app.get("/api/readiness",(r,n)=>{this.initializationCompleteFlag?n.status(200).json({status:"ready",mcpReady:this.mcpReady}):n.status(503).json({status:"initializing",message:"Worker is still initializing, please retry"})}),this.app.get("/api/version",(r,n)=>{let{homedir:a}=require("os"),{readFileSync:s}=require("fs"),i=pi.default.join(a(),".claude","plugins","marketplaces","thedotmack"),o=pi.default.join(i,"package.json"),c=JSON.parse(s(o,"utf-8"));n.status(200).json({version:c.version})}),this.app.get("/api/instructions",async(r,n)=>{let a=r.query.topic||"all",s=r.query.operation;try{let i;if(s){let o=pi.default.join(__dirname,"../skills/mem-search/operations",`${s}.md`);i=await dh.promises.readFile(o,"utf-8")}else{let o=pi.default.join(__dirname,"../skills/mem-search/SKILL.md"),c=await dh.promises.readFile(o,"utf-8");i=this.extractInstructionSection(c,a)}n.json({content:[{type:"text",text:i}]})}catch(i){q.error("WORKER","Failed to load instructions",{topic:a,operation:s},i),n.status(500).json({content:[{type:"text",text:`Error loading instructions: ${i instanceof Error?i.message:"Unknown error"}`}],isError:!0})}}),this.app.post("/api/admin/restart",nh,async(r,n)=>{n.json({status:"restarting"}),process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?(q.info("SYSTEM","Sending restart request to wrapper"),process.send({type:"restart"})):setTimeout(async()=>{await this.shutdown(),process.exit(0)},100)}),this.app.post("/api/admin/shutdown",nh,async(r,n)=>{n.json({status:"shutting_down"}),process.platform==="win32"&&process.env.CLAUDE_MEM_MANAGED==="true"&&process.send?(q.info("SYSTEM","Sending shutdown request to wrapper"),process.send({type:"shutdown"})):setTimeout(async()=>{await this.shutdown(),process.exit(0)},100)}),this.viewerRoutes.setupRoutes(this.app),this.sessionRoutes.setupRoutes(this.app),this.dataRoutes.setupRoutes(this.app),this.settingsRoutes.setupRoutes(this.app),this.app.get("/api/context/inject",async(r,n,a)=>{try{let i=new Promise((p,m)=>setTimeout(()=>m(new Error("Initialization timeout")),3e4));if(await Promise.race([this.initializationComplete,i]),!this.searchRoutes){n.status(503).json({error:"Search routes not initialized"});return}let o=r.query.project,c=r.query.colors==="true";if(!o){n.status(400).json({error:"Project parameter is required"});return}let{generateContext:u}=await Promise.resolve().then(()=>(Kl(),Wl)),l=`/context/${o}`,d=await u({session_id:"context-inject-"+Date.now(),cwd:l},c);n.setHeader("Content-Type","text/plain; charset=utf-8"),n.send(d)}catch(s){q.error("WORKER","Context inject handler failed",{},s),n.status(500).json({error:s instanceof Error?s.message:"Internal server error"})}})}async cleanupOrphanedProcesses(){let e=process.platform==="win32",r=[];if(e){let n=`powershell -Command "Get-CimInstance Win32_Process | Where-Object { $_.Name -like '*python*' -and $_.CommandLine -like '*chroma-mcp*' } | Select-Object -ExpandProperty ProcessId"`,{stdout:a}=await Uo(n,{timeout:5e3});if(!a.trim()){q.debug("SYSTEM","No orphaned chroma-mcp processes found (Windows)");return}let s=a.trim().split(` `);for(let i of s){let o=parseInt(i.trim(),10);!isNaN(o)&&Number.isInteger(o)&&o>0&&r.push(o)}}else{let{stdout:n}=await Uo('ps aux | grep "chroma-mcp" | grep -v grep || true');if(!n.trim()){q.debug("SYSTEM","No orphaned chroma-mcp processes found (Unix)");return}let a=n.trim().split(` `);for(let s of a){let i=s.trim().split(/\s+/);if(i.length>1){let o=parseInt(i[1],10);!isNaN(o)&&Number.isInteger(o)&&o>0&&r.push(o)}}}if(r.length!==0){if(q.info("SYSTEM","Cleaning up orphaned chroma-mcp processes",{platform:e?"Windows":"Unix",count:r.length,pids:r}),e)for(let n of r){if(!Number.isInteger(n)||n<=0){q.warn("SYSTEM","Skipping invalid PID",{pid:n});continue}(0,ed.execSync)(`taskkill /PID ${n} /T /F`,{timeout:5e3,stdio:"ignore"})}else await Uo(`kill ${r.join(" ")}`);q.info("SYSTEM","Orphaned processes cleaned up",{count:r.length})}}async start(){let e=qs(),r=t1();this.server=await new Promise((n,a)=>{let s=this.app.listen(e,r,()=>n(s));s.on("error",a)}),q.info("SYSTEM","Worker started",{host:r,port:e,pid:process.pid}),this.initializeBackground().catch(n=>{q.error("SYSTEM","Background initialization failed",{},n)})}async initializeBackground(){try{await this.cleanupOrphanedProcesses();let{ModeManager:e}=await Promise.resolve().then(()=>(ha(),g1)),{SettingsDefaultsManager:r}=await Promise.resolve().then(()=>(Dr(),YE)),{USER_SETTINGS_PATH:n}=await Promise.resolve().then(()=>(kr(),d1)),s=r.loadFromFile(n).CLAUDE_MEM_MODE;e.getInstance().loadMode(s),q.info("SYSTEM",`Mode loaded: ${s}`),await this.dbManager.initialize();let{PendingMessageStore:i}=await Promise.resolve().then(()=>(fo(),Du)),o=new i(this.dbManager.getSessionStore().db,3),c=300*1e3,u=o.resetStuckMessages(c);u>0&&q.info("SYSTEM",`Recovered ${u} stuck messages from previous session`,{thresholdMinutes:5});let l=new Ml,d=new Dl,p=new jl(this.dbManager.getSessionSearch(),this.dbManager.getSessionStore(),this.dbManager.getChromaSync(),l,d);this.searchRoutes=new Xl(p),this.searchRoutes.setupRoutes(this.app),q.info("WORKER","SearchManager initialized and search routes registered");let m=pi.default.join(__dirname,"mcp-server.cjs"),g=new Ms({command:"node",args:[m],env:process.env}),b=15e3,f=this.mcpClient.connect(g),h=new Promise((y,v)=>setTimeout(()=>v(new Error("MCP connection timeout after 15s")),b));await Promise.race([f,h]),this.mcpReady=!0,q.success("WORKER","Connected to MCP server"),this.initializationCompleteFlag=!0,this.resolveInitialization(),q.info("SYSTEM","Background initialization complete")}catch(e){throw q.error("SYSTEM","Background initialization failed",{},e),e}}async processPendingQueues(e=10){let{PendingMessageStore:r}=await Promise.resolve().then(()=>(fo(),Du)),n=new r(this.dbManager.getSessionStore().db,3),a=n.getSessionsWithPendingMessages(),s={totalPendingSessions:a.length,sessionsStarted:0,sessionsSkipped:0,startedSessionIds:[]};if(a.length===0)return s;q.info("SYSTEM",`Processing up to ${e} of ${a.length} pending session queues`);for(let i of a){if(s.sessionsStarted>=e)break;try{if(this.sessionManager.getSession(i)?.generatorPromise){s.sessionsSkipped++;continue}let c=this.sessionManager.initializeSession(i);q.info("SYSTEM",`Starting processor for session ${i}`,{project:c.project,pendingCount:n.getPendingCount(i)}),c.generatorPromise=this.sdkAgent.startSession(c,this).finally(()=>{c.generatorPromise=null,this.broadcastProcessingStatus()}),s.sessionsStarted++,s.startedSessionIds.push(i),await new Promise(u=>setTimeout(u,100))}catch(o){q.warn("SYSTEM",`Failed to process session ${i}`,{},o),s.sessionsSkipped++}}return s}extractInstructionSection(e,r){let n={workflow:this.extractBetween(e,"## The Workflow","## Search Parameters"),search_params:this.extractBetween(e,"## Search Parameters","## Examples"),examples:this.extractBetween(e,"## Examples","## Why This Workflow"),all:e};return n[r]||n.all}extractBetween(e,r,n){let a=e.indexOf(r),s=e.indexOf(n);return a===-1?e:s===-1?e.substring(a):e.substring(a,s).trim()}async shutdown(){q.info("SYSTEM","Shutdown initiated");let e=await this.getChildProcesses(process.pid);if(q.info("SYSTEM","Found child processes",{count:e.length,pids:e}),this.server&&(this.server.closeAllConnections(),await new Promise((r,n)=>{this.server.close(a=>a?n(a):r())}),this.server=null,q.info("SYSTEM","HTTP server closed")),await this.sessionManager.shutdownAll(),this.mcpClient&&(await this.mcpClient.close(),q.info("SYSTEM","MCP client closed")),await this.dbManager.close(),e.length>0){q.info("SYSTEM","Force killing remaining children");for(let r of e)await this.forceKillProcess(r);await this.waitForProcessesExit(e,5e3)}q.info("SYSTEM","Worker shutdown complete")}async getChildProcesses(e){if(process.platform!=="win32")return[];if(!Number.isInteger(e)||e<=0)return q.warn("SYSTEM","Invalid parent PID for child process enumeration",{parentPid:e}),[];let r=`powershell -Command "Get-CimInstance Win32_Process | Where-Object { $_.ParentProcessId -eq ${e} } | Select-Object -ExpandProperty ProcessId"`,{stdout:n}=await Uo(r,{timeout:5e3});return n.trim().split(` `).map(a=>parseInt(a.trim(),10)).filter(a=>!isNaN(a)&&Number.isInteger(a)&&a>0)}async forceKillProcess(e){if(!Number.isInteger(e)||e<=0){q.warn("SYSTEM","Invalid PID for force kill",{pid:e});return}process.platform==="win32"?(await Uo(`taskkill /PID ${e} /T /F`,{timeout:5e3}),q.info("SYSTEM","Killed process",{pid:e})):process.kill(e,"SIGKILL")}async waitForProcessesExit(e,r){let n=Date.now();for(;Date.now()-n(process.kill(s,0),!0));if(a.length===0){q.info("SYSTEM","All child processes exited");return}q.debug("SYSTEM","Waiting for processes to exit",{stillAlive:a}),await new Promise(s=>setTimeout(s,100))}q.warn("SYSTEM","Timeout waiting for child processes to exit")}summarizeRequestBody(e,r,n){return i$(e,r,n)}broadcastProcessingStatus(){let e=this.sessionManager.isAnySessionProcessing(),r=this.sessionManager.getTotalActiveWork(),n=this.sessionManager.getActiveSessionCount();q.info("WORKER","Broadcasting processing status",{isProcessing:e,queueDepth:r,activeSessions:n}),this.sseBroadcaster.broadcast({type:"processing_status",isProcessing:e,queueDepth:r})}};if(require.main===module||!module.parent){let t=new Ql;process.on("SIGTERM",async()=>{q.info("SYSTEM","Received SIGTERM, shutting down gracefully"),await t.shutdown(),process.exit(0)}),process.on("SIGINT",async()=>{q.info("SYSTEM","Received SIGINT, shutting down gracefully"),await t.shutdown(),process.exit(0)}),t.start().catch(e=>{q.failure("SYSTEM","Worker failed to start",{},e),process.exit(1)})}0&&(module.exports={WorkerService}); diff --git a/plugin/ui/viewer-bundle.js b/plugin/ui/viewer-bundle.js index d62416b6..40cfaa0c 100644 --- a/plugin/ui/viewer-bundle.js +++ b/plugin/ui/viewer-bundle.js @@ -7,7 +7,7 @@ Error generating stack: `+l.message+` `+l.stack}return{value:e,source:t,stack:o,digest:null}}function Ql(e,t,r){return{value:e,source:null,stack:r??null,digest:t??null}}function Di(e,t){try{console.error(t.value)}catch(r){setTimeout(function(){throw r})}}var Pm=typeof WeakMap=="function"?WeakMap:Map;function Yc(e,t,r){r=ut(-1,r),r.tag=3,r.payload={element:null};var n=t.value;return r.callback=function(){Vo||(Vo=!0,Ri=n),Di(e,t)},r}function Zc(e,t,r){r=ut(-1,r),r.tag=3;var n=e.type.getDerivedStateFromError;if(typeof n=="function"){var o=t.value;r.payload=function(){return n(o)},r.callback=function(){Di(e,t)}}var l=e.stateNode;return l!==null&&typeof l.componentDidCatch=="function"&&(r.callback=function(){Di(e,t),typeof n!="function"&&(Mt===null?Mt=new Set([this]):Mt.add(this));var i=t.stack;this.componentDidCatch(t.value,{componentStack:i!==null?i:""})}),r}function aa(e,t,r){var n=e.pingCache;if(n===null){n=e.pingCache=new Pm;var o=new Set;n.set(t,o)}else o=n.get(t),o===void 0&&(o=new Set,n.set(t,o));o.has(r)||(o.add(r),e=bm.bind(null,e,t,r),t.then(e,e))}function ca(e){do{var t;if((t=e.tag===13)&&(t=e.memoizedState,t=t!==null?t.dehydrated!==null:!0),t)return e;e=e.return}while(e!==null);return null}function fa(e,t,r,n,o){return(e.mode&1)===0?(e===t?e.flags|=65536:(e.flags|=128,r.flags|=131072,r.flags&=-52805,r.tag===1&&(r.alternate===null?r.tag=17:(t=ut(-1,1),t.tag=2,Lt(r,t,1))),r.lanes|=1),e):(e.flags|=65536,e.lanes=o,e)}var Im=dt.ReactCurrentOwner,Ee=!1;function ge(e,t,r,n){t.child=e===null?xc(t,null,r,n):Or(t,e.child,r,n)}function da(e,t,r,n,o){r=r.render;var l=t.ref;return kr(t,o),n=Su(e,t,r,n,l,o),r=wu(),e!==null&&!Ee?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,ft(e,t,o)):(q&&r&&su(t),t.flags|=1,ge(e,t,n,o),t.child)}function pa(e,t,r,n,o){if(e===null){var l=r.type;return typeof l=="function"&&!Au(l)&&l.defaultProps===void 0&&r.compare===null&&r.defaultProps===void 0?(t.tag=15,t.type=l,Jc(e,t,l,n,o)):(e=So(r.type,null,n,t,t.mode,o),e.ref=t.ref,e.return=t,t.child=e)}if(l=e.child,(e.lanes&o)===0){var i=l.memoizedProps;if(r=r.compare,r=r!==null?r:wn,r(i,n)&&e.ref===t.ref)return ft(e,t,o)}return t.flags|=1,e=At(l,n),e.ref=t.ref,e.return=t,t.child=e}function Jc(e,t,r,n,o){if(e!==null){var l=e.memoizedProps;if(wn(l,n)&&e.ref===t.ref)if(Ee=!1,t.pendingProps=n=l,(e.lanes&o)!==0)(e.flags&131072)!==0&&(Ee=!0);else return t.lanes=e.lanes,ft(e,t,o)}return Pi(e,t,r,n,o)}function ef(e,t,r){var n=t.pendingProps,o=n.children,l=e!==null?e.memoizedState:null;if(n.mode==="hidden")if((t.mode&1)===0)t.memoizedState={baseLanes:0,cachePool:null,transitions:null},z(Sr,Ce),Ce|=r;else{if((r&1073741824)===0)return e=l!==null?l.baseLanes|r:r,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,z(Sr,Ce),Ce|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},n=l!==null?l.baseLanes:r,z(Sr,Ce),Ce|=n}else l!==null?(n=l.baseLanes|r,t.memoizedState=null):n=r,z(Sr,Ce),Ce|=n;return ge(e,t,o,r),t.child}function tf(e,t){var r=t.ref;(e===null&&r!==null||e!==null&&e.ref!==r)&&(t.flags|=512,t.flags|=2097152)}function Pi(e,t,r,n,o){var l=we(r)?Yt:pe.current;return l=Lr(t,l),kr(t,o),r=Su(e,t,r,n,l,o),n=wu(),e!==null&&!Ee?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~o,ft(e,t,o)):(q&&n&&su(t),t.flags|=1,ge(e,t,r,o),t.child)}function ma(e,t,r,n,o){if(we(r)){var l=!0;Ao(t)}else l=!1;if(kr(t,o),t.stateNode===null)vo(e,t),Qc(t,r,n),Ai(t,r,n,o),n=!0;else if(e===null){var i=t.stateNode,u=t.memoizedProps;i.props=u;var s=i.context,a=r.contextType;typeof a=="object"&&a!==null?a=ze(a):(a=we(r)?Yt:pe.current,a=Lr(t,a));var p=r.getDerivedStateFromProps,m=typeof p=="function"||typeof i.getSnapshotBeforeUpdate=="function";m||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(u!==n||s!==a)&&sa(t,i,n,a),Et=!1;var g=t.memoizedState;i.state=g,Fo(t,n,i,o),s=t.memoizedState,u!==n||g!==s||Se.current||Et?(typeof p=="function"&&(Oi(t,r,p,n),s=t.memoizedState),(u=Et||ua(t,r,u,n,g,s,a))?(m||typeof i.UNSAFE_componentWillMount!="function"&&typeof i.componentWillMount!="function"||(typeof i.componentWillMount=="function"&&i.componentWillMount(),typeof i.UNSAFE_componentWillMount=="function"&&i.UNSAFE_componentWillMount()),typeof i.componentDidMount=="function"&&(t.flags|=4194308)):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),t.memoizedProps=n,t.memoizedState=s),i.props=n,i.state=s,i.context=a,n=u):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),n=!1)}else{i=t.stateNode,Mc(e,t),u=t.memoizedProps,a=t.type===t.elementType?u:Ve(t.type,u),i.props=a,m=t.pendingProps,g=i.context,s=r.contextType,typeof s=="object"&&s!==null?s=ze(s):(s=we(r)?Yt:pe.current,s=Lr(t,s));var w=r.getDerivedStateFromProps;(p=typeof w=="function"||typeof i.getSnapshotBeforeUpdate=="function")||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(u!==m||g!==s)&&sa(t,i,n,s),Et=!1,g=t.memoizedState,i.state=g,Fo(t,n,i,o);var _=t.memoizedState;u!==m||g!==_||Se.current||Et?(typeof w=="function"&&(Oi(t,r,w,n),_=t.memoizedState),(a=Et||ua(t,r,a,n,g,_,s)||!1)?(p||typeof i.UNSAFE_componentWillUpdate!="function"&&typeof i.componentWillUpdate!="function"||(typeof i.componentWillUpdate=="function"&&i.componentWillUpdate(n,_,s),typeof i.UNSAFE_componentWillUpdate=="function"&&i.UNSAFE_componentWillUpdate(n,_,s)),typeof i.componentDidUpdate=="function"&&(t.flags|=4),typeof i.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof i.componentDidUpdate!="function"||u===e.memoizedProps&&g===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||u===e.memoizedProps&&g===e.memoizedState||(t.flags|=1024),t.memoizedProps=n,t.memoizedState=_),i.props=n,i.state=_,i.context=s,n=a):(typeof i.componentDidUpdate!="function"||u===e.memoizedProps&&g===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||u===e.memoizedProps&&g===e.memoizedState||(t.flags|=1024),n=!1)}return Ii(e,t,r,n,l,o)}function Ii(e,t,r,n,o,l){tf(e,t);var i=(t.flags&128)!==0;if(!n&&!i)return o&&Js(t,r,!1),ft(e,t,l);n=t.stateNode,Im.current=t;var u=i&&typeof r.getDerivedStateFromError!="function"?null:n.render();return t.flags|=1,e!==null&&i?(t.child=Or(t,e.child,null,l),t.child=Or(t,null,u,l)):ge(e,t,u,l),t.memoizedState=n.state,o&&Js(t,r,!0),t.child}function rf(e){var t=e.stateNode;t.pendingContext?Zs(e,t.pendingContext,t.pendingContext!==t.context):t.context&&Zs(e,t.context,!1),hu(e,t.containerInfo)}function ga(e,t,r,n,o){return Mr(),cu(o),t.flags|=256,ge(e,t,r,n),t.child}var Ui={dehydrated:null,treeContext:null,retryLane:0};function Fi(e){return{baseLanes:e,cachePool:null,transitions:null}}function nf(e,t,r){var n=t.pendingProps,o=B.current,l=!1,i=(t.flags&128)!==0,u;if((u=i)||(u=e!==null&&e.memoizedState===null?!1:(o&2)!==0),u?(l=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(o|=1),z(B,o&1),e===null)return Li(t),e=t.memoizedState,e!==null&&(e=e.dehydrated,e!==null)?((t.mode&1)===0?t.lanes=1:e.data==="$!"?t.lanes=8:t.lanes=1073741824,null):(i=n.children,e=n.fallback,l?(n=t.mode,l=t.child,i={mode:"hidden",children:i},(n&1)===0&&l!==null?(l.childLanes=0,l.pendingProps=i):l=tl(i,n,0,null),e=Qt(e,n,r,null),l.return=t,e.return=t,l.sibling=e,t.child=l,t.child.memoizedState=Fi(r),t.memoizedState=Ui,e):Cu(t,i));if(o=e.memoizedState,o!==null&&(u=o.dehydrated,u!==null))return Um(e,t,i,n,u,o,r);if(l){l=n.fallback,i=t.mode,o=e.child,u=o.sibling;var s={mode:"hidden",children:n.children};return(i&1)===0&&t.child!==o?(n=t.child,n.childLanes=0,n.pendingProps=s,t.deletions=null):(n=At(o,s),n.subtreeFlags=o.subtreeFlags&14680064),u!==null?l=At(u,l):(l=Qt(l,i,r,null),l.flags|=2),l.return=t,n.return=t,n.sibling=l,t.child=n,n=l,l=t.child,i=e.child.memoizedState,i=i===null?Fi(r):{baseLanes:i.baseLanes|r,cachePool:null,transitions:i.transitions},l.memoizedState=i,l.childLanes=e.childLanes&~r,t.memoizedState=Ui,n}return l=e.child,e=l.sibling,n=At(l,{mode:"visible",children:n.children}),(t.mode&1)===0&&(n.lanes=r),n.return=t,n.sibling=null,e!==null&&(r=t.deletions,r===null?(t.deletions=[e],t.flags|=16):r.push(e)),t.child=n,t.memoizedState=null,n}function Cu(e,t){return t=tl({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function uo(e,t,r,n){return n!==null&&cu(n),Or(t,e.child,null,r),e=Cu(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Um(e,t,r,n,o,l,i){if(r)return t.flags&256?(t.flags&=-257,n=Ql(Error(E(422))),uo(e,t,i,n)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(l=n.fallback,o=t.mode,n=tl({mode:"visible",children:n.children},o,0,null),l=Qt(l,o,i,null),l.flags|=2,n.return=t,l.return=t,n.sibling=l,t.child=n,(t.mode&1)!==0&&Or(t,e.child,null,i),t.child.memoizedState=Fi(i),t.memoizedState=Ui,l);if((t.mode&1)===0)return uo(e,t,i,null);if(o.data==="$!"){if(n=o.nextSibling&&o.nextSibling.dataset,n)var u=n.dgst;return n=u,l=Error(E(419)),n=Ql(l,n,void 0),uo(e,t,i,n)}if(u=(i&e.childLanes)!==0,Ee||u){if(n=re,n!==null){switch(i&-i){case 4:o=2;break;case 16:o=8;break;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:o=32;break;case 536870912:o=268435456;break;default:o=0}o=(o&(n.suspendedLanes|i))!==0?0:o,o!==0&&o!==l.retryLane&&(l.retryLane=o,ct(e,o),Ge(n,e,o,-1))}return Ou(),n=Ql(Error(E(421))),uo(e,t,i,n)}return o.data==="$?"?(t.flags|=128,t.child=e.child,t=$m.bind(null,e),o._reactRetry=t,null):(e=l.treeContext,ke=xt(o.nextSibling),Ne=t,q=!0,Be=null,e!==null&&(Pe[Ie++]=lt,Pe[Ie++]=it,Pe[Ie++]=Zt,lt=e.id,it=e.overflow,Zt=t),t=Cu(t,n.children),t.flags|=4096,t)}function ha(e,t,r){e.lanes|=t;var n=e.alternate;n!==null&&(n.lanes|=t),Mi(e.return,t,r)}function Yl(e,t,r,n,o){var l=e.memoizedState;l===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:n,tail:r,tailMode:o}:(l.isBackwards=t,l.rendering=null,l.renderingStartTime=0,l.last=n,l.tail=r,l.tailMode=o)}function of(e,t,r){var n=t.pendingProps,o=n.revealOrder,l=n.tail;if(ge(e,t,n.children,r),n=B.current,(n&2)!==0)n=n&1|2,t.flags|=128;else{if(e!==null&&(e.flags&128)!==0)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&ha(e,r,t);else if(e.tag===19)ha(e,r,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}n&=1}if(z(B,n),(t.mode&1)===0)t.memoizedState=null;else switch(o){case"forwards":for(r=t.child,o=null;r!==null;)e=r.alternate,e!==null&&zo(e)===null&&(o=r),r=r.sibling;r=o,r===null?(o=t.child,t.child=null):(o=r.sibling,r.sibling=null),Yl(t,!1,o,r,l);break;case"backwards":for(r=null,o=t.child,t.child=null;o!==null;){if(e=o.alternate,e!==null&&zo(e)===null){t.child=o;break}e=o.sibling,o.sibling=r,r=o,o=e}Yl(t,!0,r,null,l);break;case"together":Yl(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function vo(e,t){(t.mode&1)===0&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function ft(e,t,r){if(e!==null&&(t.dependencies=e.dependencies),er|=t.lanes,(r&t.childLanes)===0)return null;if(e!==null&&t.child!==e.child)throw Error(E(153));if(t.child!==null){for(e=t.child,r=At(e,e.pendingProps),t.child=r,r.return=t;e.sibling!==null;)e=e.sibling,r=r.sibling=At(e,e.pendingProps),r.return=t;r.sibling=null}return t.child}function Fm(e,t,r){switch(t.tag){case 3:rf(t),Mr();break;case 5:Oc(t);break;case 1:we(t.type)&&Ao(t);break;case 4:hu(t,t.stateNode.containerInfo);break;case 10:var n=t.type._context,o=t.memoizedProps.value;z(Io,n._currentValue),n._currentValue=o;break;case 13:if(n=t.memoizedState,n!==null)return n.dehydrated!==null?(z(B,B.current&1),t.flags|=128,null):(r&t.child.childLanes)!==0?nf(e,t,r):(z(B,B.current&1),e=ft(e,t,r),e!==null?e.sibling:null);z(B,B.current&1);break;case 19:if(n=(r&t.childLanes)!==0,(e.flags&128)!==0){if(n)return of(e,t,r);t.flags|=128}if(o=t.memoizedState,o!==null&&(o.rendering=null,o.tail=null,o.lastEffect=null),z(B,B.current),n)break;return null;case 22:case 23:return t.lanes=0,ef(e,t,r)}return ft(e,t,r)}var lf,zi,uf,sf;lf=function(e,t){for(var r=t.child;r!==null;){if(r.tag===5||r.tag===6)e.appendChild(r.stateNode);else if(r.tag!==4&&r.child!==null){r.child.return=r,r=r.child;continue}if(r===t)break;for(;r.sibling===null;){if(r.return===null||r.return===t)return;r=r.return}r.sibling.return=r.return,r=r.sibling}};zi=function(){};uf=function(e,t,r,n){var o=e.memoizedProps;if(o!==n){e=t.stateNode,$t(et.current);var l=null;switch(r){case"input":o=li(e,o),n=li(e,n),l=[];break;case"select":o=G({},o,{value:void 0}),n=G({},n,{value:void 0}),l=[];break;case"textarea":o=si(e,o),n=si(e,n),l=[];break;default:typeof o.onClick!="function"&&typeof n.onClick=="function"&&(e.onclick=Mo)}ci(r,n);var i;r=null;for(a in o)if(!n.hasOwnProperty(a)&&o.hasOwnProperty(a)&&o[a]!=null)if(a==="style"){var u=o[a];for(i in u)u.hasOwnProperty(i)&&(r||(r={}),r[i]="")}else a!=="dangerouslySetInnerHTML"&&a!=="children"&&a!=="suppressContentEditableWarning"&&a!=="suppressHydrationWarning"&&a!=="autoFocus"&&(mn.hasOwnProperty(a)?l||(l=[]):(l=l||[]).push(a,null));for(a in n){var s=n[a];if(u=o?.[a],n.hasOwnProperty(a)&&s!==u&&(s!=null||u!=null))if(a==="style")if(u){for(i in u)!u.hasOwnProperty(i)||s&&s.hasOwnProperty(i)||(r||(r={}),r[i]="");for(i in s)s.hasOwnProperty(i)&&u[i]!==s[i]&&(r||(r={}),r[i]=s[i])}else r||(l||(l=[]),l.push(a,r)),r=s;else a==="dangerouslySetInnerHTML"?(s=s?s.__html:void 0,u=u?u.__html:void 0,s!=null&&u!==s&&(l=l||[]).push(a,s)):a==="children"?typeof s!="string"&&typeof s!="number"||(l=l||[]).push(a,""+s):a!=="suppressContentEditableWarning"&&a!=="suppressHydrationWarning"&&(mn.hasOwnProperty(a)?(s!=null&&a==="onScroll"&&j("scroll",e),l||u===s||(l=[])):(l=l||[]).push(a,s))}r&&(l=l||[]).push("style",r);var a=l;(t.updateQueue=a)&&(t.flags|=4)}};sf=function(e,t,r,n){r!==n&&(t.flags|=4)};function Yr(e,t){if(!q)switch(e.tailMode){case"hidden":t=e.tail;for(var r=null;t!==null;)t.alternate!==null&&(r=t),t=t.sibling;r===null?e.tail=null:r.sibling=null;break;case"collapsed":r=e.tail;for(var n=null;r!==null;)r.alternate!==null&&(n=r),r=r.sibling;n===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:n.sibling=null}}function fe(e){var t=e.alternate!==null&&e.alternate.child===e.child,r=0,n=0;if(t)for(var o=e.child;o!==null;)r|=o.lanes|o.childLanes,n|=o.subtreeFlags&14680064,n|=o.flags&14680064,o.return=e,o=o.sibling;else for(o=e.child;o!==null;)r|=o.lanes|o.childLanes,n|=o.subtreeFlags,n|=o.flags,o.return=e,o=o.sibling;return e.subtreeFlags|=n,e.childLanes=r,t}function zm(e,t,r){var n=t.pendingProps;switch(au(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return fe(t),null;case 1:return we(t.type)&&Oo(),fe(t),null;case 3:return n=t.stateNode,Ar(),H(Se),H(pe),yu(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),(e===null||e.child===null)&&(lo(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&(t.flags&256)===0||(t.flags|=1024,Be!==null&&(Gi(Be),Be=null))),zi(e,t),fe(t),null;case 5:vu(t);var o=$t(Nn.current);if(r=t.type,e!==null&&t.stateNode!=null)uf(e,t,r,n,o),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!n){if(t.stateNode===null)throw Error(E(166));return fe(t),null}if(e=$t(et.current),lo(t)){n=t.stateNode,r=t.type;var l=t.memoizedProps;switch(n[Ze]=t,n[Cn]=l,e=(t.mode&1)!==0,r){case"dialog":j("cancel",n),j("close",n);break;case"iframe":case"object":case"embed":j("load",n);break;case"video":case"audio":for(o=0;o<\/script>",e=e.removeChild(e.firstChild)):typeof n.is=="string"?e=i.createElement(r,{is:n.is}):(e=i.createElement(r),r==="select"&&(i=e,n.multiple?i.multiple=!0:n.size&&(i.size=n.size))):e=i.createElementNS(e,r),e[Ze]=t,e[Cn]=n,lf(e,t,!1,!1),t.stateNode=e;e:{switch(i=fi(r,n),r){case"dialog":j("cancel",e),j("close",e),o=n;break;case"iframe":case"object":case"embed":j("load",e),o=n;break;case"video":case"audio":for(o=0;oPr&&(t.flags|=128,n=!0,Yr(l,!1),t.lanes=4194304)}else{if(!n)if(e=zo(i),e!==null){if(t.flags|=128,n=!0,r=e.updateQueue,r!==null&&(t.updateQueue=r,t.flags|=4),Yr(l,!0),l.tail===null&&l.tailMode==="hidden"&&!i.alternate&&!q)return fe(t),null}else 2*b()-l.renderingStartTime>Pr&&r!==1073741824&&(t.flags|=128,n=!0,Yr(l,!1),t.lanes=4194304);l.isBackwards?(i.sibling=t.child,t.child=i):(r=l.last,r!==null?r.sibling=i:t.child=i,l.last=i)}return l.tail!==null?(t=l.tail,l.rendering=t,l.tail=t.sibling,l.renderingStartTime=b(),t.sibling=null,r=B.current,z(B,n?r&1|2:r&1),t):(fe(t),null);case 22:case 23:return Mu(),n=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==n&&(t.flags|=8192),n&&(t.mode&1)!==0?(Ce&1073741824)!==0&&(fe(t),t.subtreeFlags&6&&(t.flags|=8192)):fe(t),null;case 24:return null;case 25:return null}throw Error(E(156,t.tag))}function jm(e,t){switch(au(t),t.tag){case 1:return we(t.type)&&Oo(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return Ar(),H(Se),H(pe),yu(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return vu(t),null;case 13:if(H(B),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(E(340));Mr()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return H(B),null;case 4:return Ar(),null;case 10:return pu(t.type._context),null;case 22:case 23:return Mu(),null;case 24:return null;default:return null}}var so=!1,de=!1,Hm=typeof WeakSet=="function"?WeakSet:Set,k=null;function Er(e,t){var r=e.ref;if(r!==null)if(typeof r=="function")try{r(null)}catch(n){X(e,t,n)}else r.current=null}function ji(e,t,r){try{r()}catch(n){X(e,t,n)}}var va=!1;function qm(e,t){if(wi=No,e=dc(),uu(e)){if("selectionStart"in e)var r={start:e.selectionStart,end:e.selectionEnd};else e:{r=(r=e.ownerDocument)&&r.defaultView||window;var n=r.getSelection&&r.getSelection();if(n&&n.rangeCount!==0){r=n.anchorNode;var o=n.anchorOffset,l=n.focusNode;n=n.focusOffset;try{r.nodeType,l.nodeType}catch{r=null;break e}var i=0,u=-1,s=-1,a=0,p=0,m=e,g=null;t:for(;;){for(var w;m!==r||o!==0&&m.nodeType!==3||(u=i+o),m!==l||n!==0&&m.nodeType!==3||(s=i+n),m.nodeType===3&&(i+=m.nodeValue.length),(w=m.firstChild)!==null;)g=m,m=w;for(;;){if(m===e)break t;if(g===r&&++a===o&&(u=i),g===l&&++p===n&&(s=i),(w=m.nextSibling)!==null)break;m=g,g=m.parentNode}m=w}r=u===-1||s===-1?null:{start:u,end:s}}else r=null}r=r||{start:0,end:0}}else r=null;for(_i={focusedElem:e,selectionRange:r},No=!1,k=t;k!==null;)if(t=k,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,k=e;else for(;k!==null;){t=k;try{var _=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(_!==null){var S=_.memoizedProps,L=_.memoizedState,d=t.stateNode,c=d.getSnapshotBeforeUpdate(t.elementType===t.type?S:Ve(t.type,S),L);d.__reactInternalSnapshotBeforeUpdate=c}break;case 3:var f=t.stateNode.containerInfo;f.nodeType===1?f.textContent="":f.nodeType===9&&f.documentElement&&f.removeChild(f.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(E(163))}}catch(y){X(t,t.return,y)}if(e=t.sibling,e!==null){e.return=t.return,k=e;break}k=t.return}return _=va,va=!1,_}function fn(e,t,r){var n=t.updateQueue;if(n=n!==null?n.lastEffect:null,n!==null){var o=n=n.next;do{if((o.tag&e)===e){var l=o.destroy;o.destroy=void 0,l!==void 0&&ji(t,r,l)}o=o.next}while(o!==n)}}function Jo(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var r=t=t.next;do{if((r.tag&e)===e){var n=r.create;r.destroy=n()}r=r.next}while(r!==t)}}function Hi(e){var t=e.ref;if(t!==null){var r=e.stateNode;switch(e.tag){case 5:e=r;break;default:e=r}typeof t=="function"?t(e):t.current=e}}function af(e){var t=e.alternate;t!==null&&(e.alternate=null,af(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Ze],delete t[Cn],delete t[ki],delete t[_m],delete t[Tm])),e.stateNode=null,e.return=null,e.dependencies=null,e.memoizedProps=null,e.memoizedState=null,e.pendingProps=null,e.stateNode=null,e.updateQueue=null}function cf(e){return e.tag===5||e.tag===3||e.tag===4}function ya(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||cf(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function qi(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.nodeType===8?r.parentNode.insertBefore(e,t):r.insertBefore(e,t):(r.nodeType===8?(t=r.parentNode,t.insertBefore(e,r)):(t=r,t.appendChild(e)),r=r._reactRootContainer,r!=null||t.onclick!==null||(t.onclick=Mo));else if(n!==4&&(e=e.child,e!==null))for(qi(e,t,r),e=e.sibling;e!==null;)qi(e,t,r),e=e.sibling}function Vi(e,t,r){var n=e.tag;if(n===5||n===6)e=e.stateNode,t?r.insertBefore(e,t):r.appendChild(e);else if(n!==4&&(e=e.child,e!==null))for(Vi(e,t,r),e=e.sibling;e!==null;)Vi(e,t,r),e=e.sibling}var oe=null,Re=!1;function vt(e,t,r){for(r=r.child;r!==null;)ff(e,t,r),r=r.sibling}function ff(e,t,r){if(Je&&typeof Je.onCommitFiberUnmount=="function")try{Je.onCommitFiberUnmount(Go,r)}catch{}switch(r.tag){case 5:de||Er(r,t);case 6:var n=oe,o=Re;oe=null,vt(e,t,r),oe=n,Re=o,oe!==null&&(Re?(e=oe,r=r.stateNode,e.nodeType===8?e.parentNode.removeChild(r):e.removeChild(r)):oe.removeChild(r.stateNode));break;case 18:oe!==null&&(Re?(e=oe,r=r.stateNode,e.nodeType===8?Wl(e.parentNode,r):e.nodeType===1&&Wl(e,r),En(e)):Wl(oe,r.stateNode));break;case 4:n=oe,o=Re,oe=r.stateNode.containerInfo,Re=!0,vt(e,t,r),oe=n,Re=o;break;case 0:case 11:case 14:case 15:if(!de&&(n=r.updateQueue,n!==null&&(n=n.lastEffect,n!==null))){o=n=n.next;do{var l=o,i=l.destroy;l=l.tag,i!==void 0&&((l&2)!==0||(l&4)!==0)&&ji(r,t,i),o=o.next}while(o!==n)}vt(e,t,r);break;case 1:if(!de&&(Er(r,t),n=r.stateNode,typeof n.componentWillUnmount=="function"))try{n.props=r.memoizedProps,n.state=r.memoizedState,n.componentWillUnmount()}catch(u){X(r,t,u)}vt(e,t,r);break;case 21:vt(e,t,r);break;case 22:r.mode&1?(de=(n=de)||r.memoizedState!==null,vt(e,t,r),de=n):vt(e,t,r);break;default:vt(e,t,r)}}function Ea(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var r=e.stateNode;r===null&&(r=e.stateNode=new Hm),t.forEach(function(n){var o=Km.bind(null,e,n);r.has(n)||(r.add(n),n.then(o,o))})}}function qe(e,t){var r=t.deletions;if(r!==null)for(var n=0;no&&(o=i),n&=~l}if(n=o,n=b()-n,n=(120>n?120:480>n?480:1080>n?1080:1920>n?1920:3e3>n?3e3:4320>n?4320:1960*Rm(n/1960))-n,10e?16:e,Tt===null)var n=!1;else{if(e=Tt,Tt=null,Ro=0,(D&6)!==0)throw Error(E(331));var o=D;for(D|=4,k=e.current;k!==null;){var l=k,i=l.child;if((k.flags&16)!==0){var u=l.deletions;if(u!==null){for(var s=0;sb()-xu?Kt(e,0):Nu|=r),_e(e,t)}function Ef(e,t){t===0&&((e.mode&1)===0?t=1:(t=Kn,Kn<<=1,(Kn&130023424)===0&&(Kn=4194304)));var r=he();e=ct(e,t),e!==null&&(An(e,t,r),_e(e,r))}function $m(e){var t=e.memoizedState,r=0;t!==null&&(r=t.retryLane),Ef(e,r)}function Km(e,t){var r=0;switch(e.tag){case 13:var n=e.stateNode,o=e.memoizedState;o!==null&&(r=o.retryLane);break;case 19:n=e.stateNode;break;default:throw Error(E(314))}n!==null&&n.delete(t),Ef(e,r)}var Sf;Sf=function(e,t,r){if(e!==null)if(e.memoizedProps!==t.pendingProps||Se.current)Ee=!0;else{if((e.lanes&r)===0&&(t.flags&128)===0)return Ee=!1,Fm(e,t,r);Ee=(e.flags&131072)!==0}else Ee=!1,q&&(t.flags&1048576)!==0&&Tc(t,Po,t.index);switch(t.lanes=0,t.tag){case 2:var n=t.type;vo(e,t),e=t.pendingProps;var o=Lr(t,pe.current);kr(t,r),o=Su(null,t,n,e,o,r);var l=wu();return t.flags|=1,typeof o=="object"&&o!==null&&typeof o.render=="function"&&o.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,we(n)?(l=!0,Ao(t)):l=!1,t.memoizedState=o.state!==null&&o.state!==void 0?o.state:null,gu(t),o.updater=Zo,t.stateNode=o,o._reactInternals=t,Ai(t,n,e,r),t=Ii(null,t,n,!0,l,r)):(t.tag=0,q&&l&&su(t),ge(null,t,o,r),t=t.child),t;case 16:n=t.elementType;e:{switch(vo(e,t),e=t.pendingProps,o=n._init,n=o(n._payload),t.type=n,o=t.tag=Ym(n),e=Ve(n,e),o){case 0:t=Pi(null,t,n,e,r);break e;case 1:t=ma(null,t,n,e,r);break e;case 11:t=da(null,t,n,e,r);break e;case 14:t=pa(null,t,n,Ve(n.type,e),r);break e}throw Error(E(306,n,""))}return t;case 0:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:Ve(n,o),Pi(e,t,n,o,r);case 1:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:Ve(n,o),ma(e,t,n,o,r);case 3:e:{if(rf(t),e===null)throw Error(E(387));n=t.pendingProps,l=t.memoizedState,o=l.element,Mc(e,t),Fo(t,n,null,r);var i=t.memoizedState;if(n=i.element,l.isDehydrated)if(l={element:n,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=l,t.memoizedState=l,t.flags&256){o=Dr(Error(E(423)),t),t=ga(e,t,n,r,o);break e}else if(n!==o){o=Dr(Error(E(424)),t),t=ga(e,t,n,r,o);break e}else for(ke=xt(t.stateNode.containerInfo.firstChild),Ne=t,q=!0,Be=null,r=xc(t,null,n,r),t.child=r;r;)r.flags=r.flags&-3|4096,r=r.sibling;else{if(Mr(),n===o){t=ft(e,t,r);break e}ge(e,t,n,r)}t=t.child}return t;case 5:return Oc(t),e===null&&Li(t),n=t.type,o=t.pendingProps,l=e!==null?e.memoizedProps:null,i=o.children,Ti(n,o)?i=null:l!==null&&Ti(n,l)&&(t.flags|=32),tf(e,t),ge(e,t,i,r),t.child;case 6:return e===null&&Li(t),null;case 13:return nf(e,t,r);case 4:return hu(t,t.stateNode.containerInfo),n=t.pendingProps,e===null?t.child=Or(t,null,n,r):ge(e,t,n,r),t.child;case 11:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:Ve(n,o),da(e,t,n,o,r);case 7:return ge(e,t,t.pendingProps,r),t.child;case 8:return ge(e,t,t.pendingProps.children,r),t.child;case 12:return ge(e,t,t.pendingProps.children,r),t.child;case 10:e:{if(n=t.type._context,o=t.pendingProps,l=t.memoizedProps,i=o.value,z(Io,n._currentValue),n._currentValue=i,l!==null)if(Xe(l.value,i)){if(l.children===o.children&&!Se.current){t=ft(e,t,r);break e}}else for(l=t.child,l!==null&&(l.return=t);l!==null;){var u=l.dependencies;if(u!==null){i=l.child;for(var s=u.firstContext;s!==null;){if(s.context===n){if(l.tag===1){s=ut(-1,r&-r),s.tag=2;var a=l.updateQueue;if(a!==null){a=a.shared;var p=a.pending;p===null?s.next=s:(s.next=p.next,p.next=s),a.pending=s}}l.lanes|=r,s=l.alternate,s!==null&&(s.lanes|=r),Mi(l.return,r,t),u.lanes|=r;break}s=s.next}}else if(l.tag===10)i=l.type===t.type?null:l.child;else if(l.tag===18){if(i=l.return,i===null)throw Error(E(341));i.lanes|=r,u=i.alternate,u!==null&&(u.lanes|=r),Mi(i,r,t),i=l.sibling}else i=l.child;if(i!==null)i.return=l;else for(i=l;i!==null;){if(i===t){i=null;break}if(l=i.sibling,l!==null){l.return=i.return,i=l;break}i=i.return}l=i}ge(e,t,o.children,r),t=t.child}return t;case 9:return o=t.type,n=t.pendingProps.children,kr(t,r),o=ze(o),n=n(o),t.flags|=1,ge(e,t,n,r),t.child;case 14:return n=t.type,o=Ve(n,t.pendingProps),o=Ve(n.type,o),pa(e,t,n,o,r);case 15:return Jc(e,t,t.type,t.pendingProps,r);case 17:return n=t.type,o=t.pendingProps,o=t.elementType===n?o:Ve(n,o),vo(e,t),t.tag=1,we(n)?(e=!0,Ao(t)):e=!1,kr(t,r),Qc(t,n,o),Ai(t,n,o,r),Ii(null,t,n,!0,e,r);case 19:return of(e,t,r);case 22:return ef(e,t,r)}throw Error(E(156,t.tag))};function wf(e,t){return ba(e,t)}function Qm(e,t,r,n){this.tag=e,this.key=r,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=n,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Ue(e,t,r,n){return new Qm(e,t,r,n)}function Au(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Ym(e){if(typeof e=="function")return Au(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Qi)return 11;if(e===Yi)return 14}return 2}function At(e,t){var r=e.alternate;return r===null?(r=Ue(e.tag,t,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=t,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&14680064,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,t=e.dependencies,r.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r}function So(e,t,r,n,o,l){var i=2;if(n=e,typeof e=="function")Au(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case cr:return Qt(r.children,o,l,t);case Ki:i=8,o|=8;break;case ti:return e=Ue(12,r,t,o|2),e.elementType=ti,e.lanes=l,e;case ri:return e=Ue(13,r,t,o),e.elementType=ri,e.lanes=l,e;case ni:return e=Ue(19,r,t,o),e.elementType=ni,e.lanes=l,e;case Oa:return tl(r,o,l,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case La:i=10;break e;case Ma:i=9;break e;case Qi:i=11;break e;case Yi:i=14;break e;case yt:i=16,n=null;break e}throw Error(E(130,e==null?e:typeof e,""))}return t=Ue(i,r,t,o),t.elementType=e,t.type=n,t.lanes=l,t}function Qt(e,t,r,n){return e=Ue(7,e,n,t),e.lanes=r,e}function tl(e,t,r,n){return e=Ue(22,e,n,t),e.elementType=Oa,e.lanes=r,e.stateNode={isHidden:!1},e}function Zl(e,t,r){return e=Ue(6,e,null,t),e.lanes=r,e}function Jl(e,t,r){return t=Ue(4,e.children!==null?e.children:[],e.key,t),t.lanes=r,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Zm(e,t,r,n,o){this.tag=t,this.containerInfo=e,this.finishedWork=this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=-1,this.callbackNode=this.pendingContext=this.context=null,this.callbackPriority=0,this.eventTimes=Fl(0),this.expirationTimes=Fl(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=Fl(0),this.identifierPrefix=n,this.onRecoverableError=o,this.mutableSourceEagerHydrationData=null}function Du(e,t,r,n,o,l,i,u,s){return e=new Zm(e,t,r,u,s),t===1?(t=1,l===!0&&(t|=8)):t=0,l=Ue(3,null,null,t),e.current=l,l.stateNode=e,l.memoizedState={element:n,isDehydrated:r,cache:null,transitions:null,pendingSuspenseBoundaries:null},gu(l),e}function Jm(e,t,r){var n=3{"use strict";function Nf(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Nf)}catch(e){console.error(e)}}Nf(),xf.exports=kf()});var Of=se(Fu=>{"use strict";var Mf=Lf();Fu.createRoot=Mf.createRoot,Fu.hydrateRoot=Mf.hydrateRoot;var Kg});var zu=se((Th,og)=>{og.exports={Aacute:"\xC1",aacute:"\xE1",Abreve:"\u0102",abreve:"\u0103",ac:"\u223E",acd:"\u223F",acE:"\u223E\u0333",Acirc:"\xC2",acirc:"\xE2",acute:"\xB4",Acy:"\u0410",acy:"\u0430",AElig:"\xC6",aelig:"\xE6",af:"\u2061",Afr:"\u{1D504}",afr:"\u{1D51E}",Agrave:"\xC0",agrave:"\xE0",alefsym:"\u2135",aleph:"\u2135",Alpha:"\u0391",alpha:"\u03B1",Amacr:"\u0100",amacr:"\u0101",amalg:"\u2A3F",amp:"&",AMP:"&",andand:"\u2A55",And:"\u2A53",and:"\u2227",andd:"\u2A5C",andslope:"\u2A58",andv:"\u2A5A",ang:"\u2220",ange:"\u29A4",angle:"\u2220",angmsdaa:"\u29A8",angmsdab:"\u29A9",angmsdac:"\u29AA",angmsdad:"\u29AB",angmsdae:"\u29AC",angmsdaf:"\u29AD",angmsdag:"\u29AE",angmsdah:"\u29AF",angmsd:"\u2221",angrt:"\u221F",angrtvb:"\u22BE",angrtvbd:"\u299D",angsph:"\u2222",angst:"\xC5",angzarr:"\u237C",Aogon:"\u0104",aogon:"\u0105",Aopf:"\u{1D538}",aopf:"\u{1D552}",apacir:"\u2A6F",ap:"\u2248",apE:"\u2A70",ape:"\u224A",apid:"\u224B",apos:"'",ApplyFunction:"\u2061",approx:"\u2248",approxeq:"\u224A",Aring:"\xC5",aring:"\xE5",Ascr:"\u{1D49C}",ascr:"\u{1D4B6}",Assign:"\u2254",ast:"*",asymp:"\u2248",asympeq:"\u224D",Atilde:"\xC3",atilde:"\xE3",Auml:"\xC4",auml:"\xE4",awconint:"\u2233",awint:"\u2A11",backcong:"\u224C",backepsilon:"\u03F6",backprime:"\u2035",backsim:"\u223D",backsimeq:"\u22CD",Backslash:"\u2216",Barv:"\u2AE7",barvee:"\u22BD",barwed:"\u2305",Barwed:"\u2306",barwedge:"\u2305",bbrk:"\u23B5",bbrktbrk:"\u23B6",bcong:"\u224C",Bcy:"\u0411",bcy:"\u0431",bdquo:"\u201E",becaus:"\u2235",because:"\u2235",Because:"\u2235",bemptyv:"\u29B0",bepsi:"\u03F6",bernou:"\u212C",Bernoullis:"\u212C",Beta:"\u0392",beta:"\u03B2",beth:"\u2136",between:"\u226C",Bfr:"\u{1D505}",bfr:"\u{1D51F}",bigcap:"\u22C2",bigcirc:"\u25EF",bigcup:"\u22C3",bigodot:"\u2A00",bigoplus:"\u2A01",bigotimes:"\u2A02",bigsqcup:"\u2A06",bigstar:"\u2605",bigtriangledown:"\u25BD",bigtriangleup:"\u25B3",biguplus:"\u2A04",bigvee:"\u22C1",bigwedge:"\u22C0",bkarow:"\u290D",blacklozenge:"\u29EB",blacksquare:"\u25AA",blacktriangle:"\u25B4",blacktriangledown:"\u25BE",blacktriangleleft:"\u25C2",blacktriangleright:"\u25B8",blank:"\u2423",blk12:"\u2592",blk14:"\u2591",blk34:"\u2593",block:"\u2588",bne:"=\u20E5",bnequiv:"\u2261\u20E5",bNot:"\u2AED",bnot:"\u2310",Bopf:"\u{1D539}",bopf:"\u{1D553}",bot:"\u22A5",bottom:"\u22A5",bowtie:"\u22C8",boxbox:"\u29C9",boxdl:"\u2510",boxdL:"\u2555",boxDl:"\u2556",boxDL:"\u2557",boxdr:"\u250C",boxdR:"\u2552",boxDr:"\u2553",boxDR:"\u2554",boxh:"\u2500",boxH:"\u2550",boxhd:"\u252C",boxHd:"\u2564",boxhD:"\u2565",boxHD:"\u2566",boxhu:"\u2534",boxHu:"\u2567",boxhU:"\u2568",boxHU:"\u2569",boxminus:"\u229F",boxplus:"\u229E",boxtimes:"\u22A0",boxul:"\u2518",boxuL:"\u255B",boxUl:"\u255C",boxUL:"\u255D",boxur:"\u2514",boxuR:"\u2558",boxUr:"\u2559",boxUR:"\u255A",boxv:"\u2502",boxV:"\u2551",boxvh:"\u253C",boxvH:"\u256A",boxVh:"\u256B",boxVH:"\u256C",boxvl:"\u2524",boxvL:"\u2561",boxVl:"\u2562",boxVL:"\u2563",boxvr:"\u251C",boxvR:"\u255E",boxVr:"\u255F",boxVR:"\u2560",bprime:"\u2035",breve:"\u02D8",Breve:"\u02D8",brvbar:"\xA6",bscr:"\u{1D4B7}",Bscr:"\u212C",bsemi:"\u204F",bsim:"\u223D",bsime:"\u22CD",bsolb:"\u29C5",bsol:"\\",bsolhsub:"\u27C8",bull:"\u2022",bullet:"\u2022",bump:"\u224E",bumpE:"\u2AAE",bumpe:"\u224F",Bumpeq:"\u224E",bumpeq:"\u224F",Cacute:"\u0106",cacute:"\u0107",capand:"\u2A44",capbrcup:"\u2A49",capcap:"\u2A4B",cap:"\u2229",Cap:"\u22D2",capcup:"\u2A47",capdot:"\u2A40",CapitalDifferentialD:"\u2145",caps:"\u2229\uFE00",caret:"\u2041",caron:"\u02C7",Cayleys:"\u212D",ccaps:"\u2A4D",Ccaron:"\u010C",ccaron:"\u010D",Ccedil:"\xC7",ccedil:"\xE7",Ccirc:"\u0108",ccirc:"\u0109",Cconint:"\u2230",ccups:"\u2A4C",ccupssm:"\u2A50",Cdot:"\u010A",cdot:"\u010B",cedil:"\xB8",Cedilla:"\xB8",cemptyv:"\u29B2",cent:"\xA2",centerdot:"\xB7",CenterDot:"\xB7",cfr:"\u{1D520}",Cfr:"\u212D",CHcy:"\u0427",chcy:"\u0447",check:"\u2713",checkmark:"\u2713",Chi:"\u03A7",chi:"\u03C7",circ:"\u02C6",circeq:"\u2257",circlearrowleft:"\u21BA",circlearrowright:"\u21BB",circledast:"\u229B",circledcirc:"\u229A",circleddash:"\u229D",CircleDot:"\u2299",circledR:"\xAE",circledS:"\u24C8",CircleMinus:"\u2296",CirclePlus:"\u2295",CircleTimes:"\u2297",cir:"\u25CB",cirE:"\u29C3",cire:"\u2257",cirfnint:"\u2A10",cirmid:"\u2AEF",cirscir:"\u29C2",ClockwiseContourIntegral:"\u2232",CloseCurlyDoubleQuote:"\u201D",CloseCurlyQuote:"\u2019",clubs:"\u2663",clubsuit:"\u2663",colon:":",Colon:"\u2237",Colone:"\u2A74",colone:"\u2254",coloneq:"\u2254",comma:",",commat:"@",comp:"\u2201",compfn:"\u2218",complement:"\u2201",complexes:"\u2102",cong:"\u2245",congdot:"\u2A6D",Congruent:"\u2261",conint:"\u222E",Conint:"\u222F",ContourIntegral:"\u222E",copf:"\u{1D554}",Copf:"\u2102",coprod:"\u2210",Coproduct:"\u2210",copy:"\xA9",COPY:"\xA9",copysr:"\u2117",CounterClockwiseContourIntegral:"\u2233",crarr:"\u21B5",cross:"\u2717",Cross:"\u2A2F",Cscr:"\u{1D49E}",cscr:"\u{1D4B8}",csub:"\u2ACF",csube:"\u2AD1",csup:"\u2AD0",csupe:"\u2AD2",ctdot:"\u22EF",cudarrl:"\u2938",cudarrr:"\u2935",cuepr:"\u22DE",cuesc:"\u22DF",cularr:"\u21B6",cularrp:"\u293D",cupbrcap:"\u2A48",cupcap:"\u2A46",CupCap:"\u224D",cup:"\u222A",Cup:"\u22D3",cupcup:"\u2A4A",cupdot:"\u228D",cupor:"\u2A45",cups:"\u222A\uFE00",curarr:"\u21B7",curarrm:"\u293C",curlyeqprec:"\u22DE",curlyeqsucc:"\u22DF",curlyvee:"\u22CE",curlywedge:"\u22CF",curren:"\xA4",curvearrowleft:"\u21B6",curvearrowright:"\u21B7",cuvee:"\u22CE",cuwed:"\u22CF",cwconint:"\u2232",cwint:"\u2231",cylcty:"\u232D",dagger:"\u2020",Dagger:"\u2021",daleth:"\u2138",darr:"\u2193",Darr:"\u21A1",dArr:"\u21D3",dash:"\u2010",Dashv:"\u2AE4",dashv:"\u22A3",dbkarow:"\u290F",dblac:"\u02DD",Dcaron:"\u010E",dcaron:"\u010F",Dcy:"\u0414",dcy:"\u0434",ddagger:"\u2021",ddarr:"\u21CA",DD:"\u2145",dd:"\u2146",DDotrahd:"\u2911",ddotseq:"\u2A77",deg:"\xB0",Del:"\u2207",Delta:"\u0394",delta:"\u03B4",demptyv:"\u29B1",dfisht:"\u297F",Dfr:"\u{1D507}",dfr:"\u{1D521}",dHar:"\u2965",dharl:"\u21C3",dharr:"\u21C2",DiacriticalAcute:"\xB4",DiacriticalDot:"\u02D9",DiacriticalDoubleAcute:"\u02DD",DiacriticalGrave:"`",DiacriticalTilde:"\u02DC",diam:"\u22C4",diamond:"\u22C4",Diamond:"\u22C4",diamondsuit:"\u2666",diams:"\u2666",die:"\xA8",DifferentialD:"\u2146",digamma:"\u03DD",disin:"\u22F2",div:"\xF7",divide:"\xF7",divideontimes:"\u22C7",divonx:"\u22C7",DJcy:"\u0402",djcy:"\u0452",dlcorn:"\u231E",dlcrop:"\u230D",dollar:"$",Dopf:"\u{1D53B}",dopf:"\u{1D555}",Dot:"\xA8",dot:"\u02D9",DotDot:"\u20DC",doteq:"\u2250",doteqdot:"\u2251",DotEqual:"\u2250",dotminus:"\u2238",dotplus:"\u2214",dotsquare:"\u22A1",doublebarwedge:"\u2306",DoubleContourIntegral:"\u222F",DoubleDot:"\xA8",DoubleDownArrow:"\u21D3",DoubleLeftArrow:"\u21D0",DoubleLeftRightArrow:"\u21D4",DoubleLeftTee:"\u2AE4",DoubleLongLeftArrow:"\u27F8",DoubleLongLeftRightArrow:"\u27FA",DoubleLongRightArrow:"\u27F9",DoubleRightArrow:"\u21D2",DoubleRightTee:"\u22A8",DoubleUpArrow:"\u21D1",DoubleUpDownArrow:"\u21D5",DoubleVerticalBar:"\u2225",DownArrowBar:"\u2913",downarrow:"\u2193",DownArrow:"\u2193",Downarrow:"\u21D3",DownArrowUpArrow:"\u21F5",DownBreve:"\u0311",downdownarrows:"\u21CA",downharpoonleft:"\u21C3",downharpoonright:"\u21C2",DownLeftRightVector:"\u2950",DownLeftTeeVector:"\u295E",DownLeftVectorBar:"\u2956",DownLeftVector:"\u21BD",DownRightTeeVector:"\u295F",DownRightVectorBar:"\u2957",DownRightVector:"\u21C1",DownTeeArrow:"\u21A7",DownTee:"\u22A4",drbkarow:"\u2910",drcorn:"\u231F",drcrop:"\u230C",Dscr:"\u{1D49F}",dscr:"\u{1D4B9}",DScy:"\u0405",dscy:"\u0455",dsol:"\u29F6",Dstrok:"\u0110",dstrok:"\u0111",dtdot:"\u22F1",dtri:"\u25BF",dtrif:"\u25BE",duarr:"\u21F5",duhar:"\u296F",dwangle:"\u29A6",DZcy:"\u040F",dzcy:"\u045F",dzigrarr:"\u27FF",Eacute:"\xC9",eacute:"\xE9",easter:"\u2A6E",Ecaron:"\u011A",ecaron:"\u011B",Ecirc:"\xCA",ecirc:"\xEA",ecir:"\u2256",ecolon:"\u2255",Ecy:"\u042D",ecy:"\u044D",eDDot:"\u2A77",Edot:"\u0116",edot:"\u0117",eDot:"\u2251",ee:"\u2147",efDot:"\u2252",Efr:"\u{1D508}",efr:"\u{1D522}",eg:"\u2A9A",Egrave:"\xC8",egrave:"\xE8",egs:"\u2A96",egsdot:"\u2A98",el:"\u2A99",Element:"\u2208",elinters:"\u23E7",ell:"\u2113",els:"\u2A95",elsdot:"\u2A97",Emacr:"\u0112",emacr:"\u0113",empty:"\u2205",emptyset:"\u2205",EmptySmallSquare:"\u25FB",emptyv:"\u2205",EmptyVerySmallSquare:"\u25AB",emsp13:"\u2004",emsp14:"\u2005",emsp:"\u2003",ENG:"\u014A",eng:"\u014B",ensp:"\u2002",Eogon:"\u0118",eogon:"\u0119",Eopf:"\u{1D53C}",eopf:"\u{1D556}",epar:"\u22D5",eparsl:"\u29E3",eplus:"\u2A71",epsi:"\u03B5",Epsilon:"\u0395",epsilon:"\u03B5",epsiv:"\u03F5",eqcirc:"\u2256",eqcolon:"\u2255",eqsim:"\u2242",eqslantgtr:"\u2A96",eqslantless:"\u2A95",Equal:"\u2A75",equals:"=",EqualTilde:"\u2242",equest:"\u225F",Equilibrium:"\u21CC",equiv:"\u2261",equivDD:"\u2A78",eqvparsl:"\u29E5",erarr:"\u2971",erDot:"\u2253",escr:"\u212F",Escr:"\u2130",esdot:"\u2250",Esim:"\u2A73",esim:"\u2242",Eta:"\u0397",eta:"\u03B7",ETH:"\xD0",eth:"\xF0",Euml:"\xCB",euml:"\xEB",euro:"\u20AC",excl:"!",exist:"\u2203",Exists:"\u2203",expectation:"\u2130",exponentiale:"\u2147",ExponentialE:"\u2147",fallingdotseq:"\u2252",Fcy:"\u0424",fcy:"\u0444",female:"\u2640",ffilig:"\uFB03",fflig:"\uFB00",ffllig:"\uFB04",Ffr:"\u{1D509}",ffr:"\u{1D523}",filig:"\uFB01",FilledSmallSquare:"\u25FC",FilledVerySmallSquare:"\u25AA",fjlig:"fj",flat:"\u266D",fllig:"\uFB02",fltns:"\u25B1",fnof:"\u0192",Fopf:"\u{1D53D}",fopf:"\u{1D557}",forall:"\u2200",ForAll:"\u2200",fork:"\u22D4",forkv:"\u2AD9",Fouriertrf:"\u2131",fpartint:"\u2A0D",frac12:"\xBD",frac13:"\u2153",frac14:"\xBC",frac15:"\u2155",frac16:"\u2159",frac18:"\u215B",frac23:"\u2154",frac25:"\u2156",frac34:"\xBE",frac35:"\u2157",frac38:"\u215C",frac45:"\u2158",frac56:"\u215A",frac58:"\u215D",frac78:"\u215E",frasl:"\u2044",frown:"\u2322",fscr:"\u{1D4BB}",Fscr:"\u2131",gacute:"\u01F5",Gamma:"\u0393",gamma:"\u03B3",Gammad:"\u03DC",gammad:"\u03DD",gap:"\u2A86",Gbreve:"\u011E",gbreve:"\u011F",Gcedil:"\u0122",Gcirc:"\u011C",gcirc:"\u011D",Gcy:"\u0413",gcy:"\u0433",Gdot:"\u0120",gdot:"\u0121",ge:"\u2265",gE:"\u2267",gEl:"\u2A8C",gel:"\u22DB",geq:"\u2265",geqq:"\u2267",geqslant:"\u2A7E",gescc:"\u2AA9",ges:"\u2A7E",gesdot:"\u2A80",gesdoto:"\u2A82",gesdotol:"\u2A84",gesl:"\u22DB\uFE00",gesles:"\u2A94",Gfr:"\u{1D50A}",gfr:"\u{1D524}",gg:"\u226B",Gg:"\u22D9",ggg:"\u22D9",gimel:"\u2137",GJcy:"\u0403",gjcy:"\u0453",gla:"\u2AA5",gl:"\u2277",glE:"\u2A92",glj:"\u2AA4",gnap:"\u2A8A",gnapprox:"\u2A8A",gne:"\u2A88",gnE:"\u2269",gneq:"\u2A88",gneqq:"\u2269",gnsim:"\u22E7",Gopf:"\u{1D53E}",gopf:"\u{1D558}",grave:"`",GreaterEqual:"\u2265",GreaterEqualLess:"\u22DB",GreaterFullEqual:"\u2267",GreaterGreater:"\u2AA2",GreaterLess:"\u2277",GreaterSlantEqual:"\u2A7E",GreaterTilde:"\u2273",Gscr:"\u{1D4A2}",gscr:"\u210A",gsim:"\u2273",gsime:"\u2A8E",gsiml:"\u2A90",gtcc:"\u2AA7",gtcir:"\u2A7A",gt:">",GT:">",Gt:"\u226B",gtdot:"\u22D7",gtlPar:"\u2995",gtquest:"\u2A7C",gtrapprox:"\u2A86",gtrarr:"\u2978",gtrdot:"\u22D7",gtreqless:"\u22DB",gtreqqless:"\u2A8C",gtrless:"\u2277",gtrsim:"\u2273",gvertneqq:"\u2269\uFE00",gvnE:"\u2269\uFE00",Hacek:"\u02C7",hairsp:"\u200A",half:"\xBD",hamilt:"\u210B",HARDcy:"\u042A",hardcy:"\u044A",harrcir:"\u2948",harr:"\u2194",hArr:"\u21D4",harrw:"\u21AD",Hat:"^",hbar:"\u210F",Hcirc:"\u0124",hcirc:"\u0125",hearts:"\u2665",heartsuit:"\u2665",hellip:"\u2026",hercon:"\u22B9",hfr:"\u{1D525}",Hfr:"\u210C",HilbertSpace:"\u210B",hksearow:"\u2925",hkswarow:"\u2926",hoarr:"\u21FF",homtht:"\u223B",hookleftarrow:"\u21A9",hookrightarrow:"\u21AA",hopf:"\u{1D559}",Hopf:"\u210D",horbar:"\u2015",HorizontalLine:"\u2500",hscr:"\u{1D4BD}",Hscr:"\u210B",hslash:"\u210F",Hstrok:"\u0126",hstrok:"\u0127",HumpDownHump:"\u224E",HumpEqual:"\u224F",hybull:"\u2043",hyphen:"\u2010",Iacute:"\xCD",iacute:"\xED",ic:"\u2063",Icirc:"\xCE",icirc:"\xEE",Icy:"\u0418",icy:"\u0438",Idot:"\u0130",IEcy:"\u0415",iecy:"\u0435",iexcl:"\xA1",iff:"\u21D4",ifr:"\u{1D526}",Ifr:"\u2111",Igrave:"\xCC",igrave:"\xEC",ii:"\u2148",iiiint:"\u2A0C",iiint:"\u222D",iinfin:"\u29DC",iiota:"\u2129",IJlig:"\u0132",ijlig:"\u0133",Imacr:"\u012A",imacr:"\u012B",image:"\u2111",ImaginaryI:"\u2148",imagline:"\u2110",imagpart:"\u2111",imath:"\u0131",Im:"\u2111",imof:"\u22B7",imped:"\u01B5",Implies:"\u21D2",incare:"\u2105",in:"\u2208",infin:"\u221E",infintie:"\u29DD",inodot:"\u0131",intcal:"\u22BA",int:"\u222B",Int:"\u222C",integers:"\u2124",Integral:"\u222B",intercal:"\u22BA",Intersection:"\u22C2",intlarhk:"\u2A17",intprod:"\u2A3C",InvisibleComma:"\u2063",InvisibleTimes:"\u2062",IOcy:"\u0401",iocy:"\u0451",Iogon:"\u012E",iogon:"\u012F",Iopf:"\u{1D540}",iopf:"\u{1D55A}",Iota:"\u0399",iota:"\u03B9",iprod:"\u2A3C",iquest:"\xBF",iscr:"\u{1D4BE}",Iscr:"\u2110",isin:"\u2208",isindot:"\u22F5",isinE:"\u22F9",isins:"\u22F4",isinsv:"\u22F3",isinv:"\u2208",it:"\u2062",Itilde:"\u0128",itilde:"\u0129",Iukcy:"\u0406",iukcy:"\u0456",Iuml:"\xCF",iuml:"\xEF",Jcirc:"\u0134",jcirc:"\u0135",Jcy:"\u0419",jcy:"\u0439",Jfr:"\u{1D50D}",jfr:"\u{1D527}",jmath:"\u0237",Jopf:"\u{1D541}",jopf:"\u{1D55B}",Jscr:"\u{1D4A5}",jscr:"\u{1D4BF}",Jsercy:"\u0408",jsercy:"\u0458",Jukcy:"\u0404",jukcy:"\u0454",Kappa:"\u039A",kappa:"\u03BA",kappav:"\u03F0",Kcedil:"\u0136",kcedil:"\u0137",Kcy:"\u041A",kcy:"\u043A",Kfr:"\u{1D50E}",kfr:"\u{1D528}",kgreen:"\u0138",KHcy:"\u0425",khcy:"\u0445",KJcy:"\u040C",kjcy:"\u045C",Kopf:"\u{1D542}",kopf:"\u{1D55C}",Kscr:"\u{1D4A6}",kscr:"\u{1D4C0}",lAarr:"\u21DA",Lacute:"\u0139",lacute:"\u013A",laemptyv:"\u29B4",lagran:"\u2112",Lambda:"\u039B",lambda:"\u03BB",lang:"\u27E8",Lang:"\u27EA",langd:"\u2991",langle:"\u27E8",lap:"\u2A85",Laplacetrf:"\u2112",laquo:"\xAB",larrb:"\u21E4",larrbfs:"\u291F",larr:"\u2190",Larr:"\u219E",lArr:"\u21D0",larrfs:"\u291D",larrhk:"\u21A9",larrlp:"\u21AB",larrpl:"\u2939",larrsim:"\u2973",larrtl:"\u21A2",latail:"\u2919",lAtail:"\u291B",lat:"\u2AAB",late:"\u2AAD",lates:"\u2AAD\uFE00",lbarr:"\u290C",lBarr:"\u290E",lbbrk:"\u2772",lbrace:"{",lbrack:"[",lbrke:"\u298B",lbrksld:"\u298F",lbrkslu:"\u298D",Lcaron:"\u013D",lcaron:"\u013E",Lcedil:"\u013B",lcedil:"\u013C",lceil:"\u2308",lcub:"{",Lcy:"\u041B",lcy:"\u043B",ldca:"\u2936",ldquo:"\u201C",ldquor:"\u201E",ldrdhar:"\u2967",ldrushar:"\u294B",ldsh:"\u21B2",le:"\u2264",lE:"\u2266",LeftAngleBracket:"\u27E8",LeftArrowBar:"\u21E4",leftarrow:"\u2190",LeftArrow:"\u2190",Leftarrow:"\u21D0",LeftArrowRightArrow:"\u21C6",leftarrowtail:"\u21A2",LeftCeiling:"\u2308",LeftDoubleBracket:"\u27E6",LeftDownTeeVector:"\u2961",LeftDownVectorBar:"\u2959",LeftDownVector:"\u21C3",LeftFloor:"\u230A",leftharpoondown:"\u21BD",leftharpoonup:"\u21BC",leftleftarrows:"\u21C7",leftrightarrow:"\u2194",LeftRightArrow:"\u2194",Leftrightarrow:"\u21D4",leftrightarrows:"\u21C6",leftrightharpoons:"\u21CB",leftrightsquigarrow:"\u21AD",LeftRightVector:"\u294E",LeftTeeArrow:"\u21A4",LeftTee:"\u22A3",LeftTeeVector:"\u295A",leftthreetimes:"\u22CB",LeftTriangleBar:"\u29CF",LeftTriangle:"\u22B2",LeftTriangleEqual:"\u22B4",LeftUpDownVector:"\u2951",LeftUpTeeVector:"\u2960",LeftUpVectorBar:"\u2958",LeftUpVector:"\u21BF",LeftVectorBar:"\u2952",LeftVector:"\u21BC",lEg:"\u2A8B",leg:"\u22DA",leq:"\u2264",leqq:"\u2266",leqslant:"\u2A7D",lescc:"\u2AA8",les:"\u2A7D",lesdot:"\u2A7F",lesdoto:"\u2A81",lesdotor:"\u2A83",lesg:"\u22DA\uFE00",lesges:"\u2A93",lessapprox:"\u2A85",lessdot:"\u22D6",lesseqgtr:"\u22DA",lesseqqgtr:"\u2A8B",LessEqualGreater:"\u22DA",LessFullEqual:"\u2266",LessGreater:"\u2276",lessgtr:"\u2276",LessLess:"\u2AA1",lesssim:"\u2272",LessSlantEqual:"\u2A7D",LessTilde:"\u2272",lfisht:"\u297C",lfloor:"\u230A",Lfr:"\u{1D50F}",lfr:"\u{1D529}",lg:"\u2276",lgE:"\u2A91",lHar:"\u2962",lhard:"\u21BD",lharu:"\u21BC",lharul:"\u296A",lhblk:"\u2584",LJcy:"\u0409",ljcy:"\u0459",llarr:"\u21C7",ll:"\u226A",Ll:"\u22D8",llcorner:"\u231E",Lleftarrow:"\u21DA",llhard:"\u296B",lltri:"\u25FA",Lmidot:"\u013F",lmidot:"\u0140",lmoustache:"\u23B0",lmoust:"\u23B0",lnap:"\u2A89",lnapprox:"\u2A89",lne:"\u2A87",lnE:"\u2268",lneq:"\u2A87",lneqq:"\u2268",lnsim:"\u22E6",loang:"\u27EC",loarr:"\u21FD",lobrk:"\u27E6",longleftarrow:"\u27F5",LongLeftArrow:"\u27F5",Longleftarrow:"\u27F8",longleftrightarrow:"\u27F7",LongLeftRightArrow:"\u27F7",Longleftrightarrow:"\u27FA",longmapsto:"\u27FC",longrightarrow:"\u27F6",LongRightArrow:"\u27F6",Longrightarrow:"\u27F9",looparrowleft:"\u21AB",looparrowright:"\u21AC",lopar:"\u2985",Lopf:"\u{1D543}",lopf:"\u{1D55D}",loplus:"\u2A2D",lotimes:"\u2A34",lowast:"\u2217",lowbar:"_",LowerLeftArrow:"\u2199",LowerRightArrow:"\u2198",loz:"\u25CA",lozenge:"\u25CA",lozf:"\u29EB",lpar:"(",lparlt:"\u2993",lrarr:"\u21C6",lrcorner:"\u231F",lrhar:"\u21CB",lrhard:"\u296D",lrm:"\u200E",lrtri:"\u22BF",lsaquo:"\u2039",lscr:"\u{1D4C1}",Lscr:"\u2112",lsh:"\u21B0",Lsh:"\u21B0",lsim:"\u2272",lsime:"\u2A8D",lsimg:"\u2A8F",lsqb:"[",lsquo:"\u2018",lsquor:"\u201A",Lstrok:"\u0141",lstrok:"\u0142",ltcc:"\u2AA6",ltcir:"\u2A79",lt:"<",LT:"<",Lt:"\u226A",ltdot:"\u22D6",lthree:"\u22CB",ltimes:"\u22C9",ltlarr:"\u2976",ltquest:"\u2A7B",ltri:"\u25C3",ltrie:"\u22B4",ltrif:"\u25C2",ltrPar:"\u2996",lurdshar:"\u294A",luruhar:"\u2966",lvertneqq:"\u2268\uFE00",lvnE:"\u2268\uFE00",macr:"\xAF",male:"\u2642",malt:"\u2720",maltese:"\u2720",Map:"\u2905",map:"\u21A6",mapsto:"\u21A6",mapstodown:"\u21A7",mapstoleft:"\u21A4",mapstoup:"\u21A5",marker:"\u25AE",mcomma:"\u2A29",Mcy:"\u041C",mcy:"\u043C",mdash:"\u2014",mDDot:"\u223A",measuredangle:"\u2221",MediumSpace:"\u205F",Mellintrf:"\u2133",Mfr:"\u{1D510}",mfr:"\u{1D52A}",mho:"\u2127",micro:"\xB5",midast:"*",midcir:"\u2AF0",mid:"\u2223",middot:"\xB7",minusb:"\u229F",minus:"\u2212",minusd:"\u2238",minusdu:"\u2A2A",MinusPlus:"\u2213",mlcp:"\u2ADB",mldr:"\u2026",mnplus:"\u2213",models:"\u22A7",Mopf:"\u{1D544}",mopf:"\u{1D55E}",mp:"\u2213",mscr:"\u{1D4C2}",Mscr:"\u2133",mstpos:"\u223E",Mu:"\u039C",mu:"\u03BC",multimap:"\u22B8",mumap:"\u22B8",nabla:"\u2207",Nacute:"\u0143",nacute:"\u0144",nang:"\u2220\u20D2",nap:"\u2249",napE:"\u2A70\u0338",napid:"\u224B\u0338",napos:"\u0149",napprox:"\u2249",natural:"\u266E",naturals:"\u2115",natur:"\u266E",nbsp:"\xA0",nbump:"\u224E\u0338",nbumpe:"\u224F\u0338",ncap:"\u2A43",Ncaron:"\u0147",ncaron:"\u0148",Ncedil:"\u0145",ncedil:"\u0146",ncong:"\u2247",ncongdot:"\u2A6D\u0338",ncup:"\u2A42",Ncy:"\u041D",ncy:"\u043D",ndash:"\u2013",nearhk:"\u2924",nearr:"\u2197",neArr:"\u21D7",nearrow:"\u2197",ne:"\u2260",nedot:"\u2250\u0338",NegativeMediumSpace:"\u200B",NegativeThickSpace:"\u200B",NegativeThinSpace:"\u200B",NegativeVeryThinSpace:"\u200B",nequiv:"\u2262",nesear:"\u2928",nesim:"\u2242\u0338",NestedGreaterGreater:"\u226B",NestedLessLess:"\u226A",NewLine:` `,nexist:"\u2204",nexists:"\u2204",Nfr:"\u{1D511}",nfr:"\u{1D52B}",ngE:"\u2267\u0338",nge:"\u2271",ngeq:"\u2271",ngeqq:"\u2267\u0338",ngeqslant:"\u2A7E\u0338",nges:"\u2A7E\u0338",nGg:"\u22D9\u0338",ngsim:"\u2275",nGt:"\u226B\u20D2",ngt:"\u226F",ngtr:"\u226F",nGtv:"\u226B\u0338",nharr:"\u21AE",nhArr:"\u21CE",nhpar:"\u2AF2",ni:"\u220B",nis:"\u22FC",nisd:"\u22FA",niv:"\u220B",NJcy:"\u040A",njcy:"\u045A",nlarr:"\u219A",nlArr:"\u21CD",nldr:"\u2025",nlE:"\u2266\u0338",nle:"\u2270",nleftarrow:"\u219A",nLeftarrow:"\u21CD",nleftrightarrow:"\u21AE",nLeftrightarrow:"\u21CE",nleq:"\u2270",nleqq:"\u2266\u0338",nleqslant:"\u2A7D\u0338",nles:"\u2A7D\u0338",nless:"\u226E",nLl:"\u22D8\u0338",nlsim:"\u2274",nLt:"\u226A\u20D2",nlt:"\u226E",nltri:"\u22EA",nltrie:"\u22EC",nLtv:"\u226A\u0338",nmid:"\u2224",NoBreak:"\u2060",NonBreakingSpace:"\xA0",nopf:"\u{1D55F}",Nopf:"\u2115",Not:"\u2AEC",not:"\xAC",NotCongruent:"\u2262",NotCupCap:"\u226D",NotDoubleVerticalBar:"\u2226",NotElement:"\u2209",NotEqual:"\u2260",NotEqualTilde:"\u2242\u0338",NotExists:"\u2204",NotGreater:"\u226F",NotGreaterEqual:"\u2271",NotGreaterFullEqual:"\u2267\u0338",NotGreaterGreater:"\u226B\u0338",NotGreaterLess:"\u2279",NotGreaterSlantEqual:"\u2A7E\u0338",NotGreaterTilde:"\u2275",NotHumpDownHump:"\u224E\u0338",NotHumpEqual:"\u224F\u0338",notin:"\u2209",notindot:"\u22F5\u0338",notinE:"\u22F9\u0338",notinva:"\u2209",notinvb:"\u22F7",notinvc:"\u22F6",NotLeftTriangleBar:"\u29CF\u0338",NotLeftTriangle:"\u22EA",NotLeftTriangleEqual:"\u22EC",NotLess:"\u226E",NotLessEqual:"\u2270",NotLessGreater:"\u2278",NotLessLess:"\u226A\u0338",NotLessSlantEqual:"\u2A7D\u0338",NotLessTilde:"\u2274",NotNestedGreaterGreater:"\u2AA2\u0338",NotNestedLessLess:"\u2AA1\u0338",notni:"\u220C",notniva:"\u220C",notnivb:"\u22FE",notnivc:"\u22FD",NotPrecedes:"\u2280",NotPrecedesEqual:"\u2AAF\u0338",NotPrecedesSlantEqual:"\u22E0",NotReverseElement:"\u220C",NotRightTriangleBar:"\u29D0\u0338",NotRightTriangle:"\u22EB",NotRightTriangleEqual:"\u22ED",NotSquareSubset:"\u228F\u0338",NotSquareSubsetEqual:"\u22E2",NotSquareSuperset:"\u2290\u0338",NotSquareSupersetEqual:"\u22E3",NotSubset:"\u2282\u20D2",NotSubsetEqual:"\u2288",NotSucceeds:"\u2281",NotSucceedsEqual:"\u2AB0\u0338",NotSucceedsSlantEqual:"\u22E1",NotSucceedsTilde:"\u227F\u0338",NotSuperset:"\u2283\u20D2",NotSupersetEqual:"\u2289",NotTilde:"\u2241",NotTildeEqual:"\u2244",NotTildeFullEqual:"\u2247",NotTildeTilde:"\u2249",NotVerticalBar:"\u2224",nparallel:"\u2226",npar:"\u2226",nparsl:"\u2AFD\u20E5",npart:"\u2202\u0338",npolint:"\u2A14",npr:"\u2280",nprcue:"\u22E0",nprec:"\u2280",npreceq:"\u2AAF\u0338",npre:"\u2AAF\u0338",nrarrc:"\u2933\u0338",nrarr:"\u219B",nrArr:"\u21CF",nrarrw:"\u219D\u0338",nrightarrow:"\u219B",nRightarrow:"\u21CF",nrtri:"\u22EB",nrtrie:"\u22ED",nsc:"\u2281",nsccue:"\u22E1",nsce:"\u2AB0\u0338",Nscr:"\u{1D4A9}",nscr:"\u{1D4C3}",nshortmid:"\u2224",nshortparallel:"\u2226",nsim:"\u2241",nsime:"\u2244",nsimeq:"\u2244",nsmid:"\u2224",nspar:"\u2226",nsqsube:"\u22E2",nsqsupe:"\u22E3",nsub:"\u2284",nsubE:"\u2AC5\u0338",nsube:"\u2288",nsubset:"\u2282\u20D2",nsubseteq:"\u2288",nsubseteqq:"\u2AC5\u0338",nsucc:"\u2281",nsucceq:"\u2AB0\u0338",nsup:"\u2285",nsupE:"\u2AC6\u0338",nsupe:"\u2289",nsupset:"\u2283\u20D2",nsupseteq:"\u2289",nsupseteqq:"\u2AC6\u0338",ntgl:"\u2279",Ntilde:"\xD1",ntilde:"\xF1",ntlg:"\u2278",ntriangleleft:"\u22EA",ntrianglelefteq:"\u22EC",ntriangleright:"\u22EB",ntrianglerighteq:"\u22ED",Nu:"\u039D",nu:"\u03BD",num:"#",numero:"\u2116",numsp:"\u2007",nvap:"\u224D\u20D2",nvdash:"\u22AC",nvDash:"\u22AD",nVdash:"\u22AE",nVDash:"\u22AF",nvge:"\u2265\u20D2",nvgt:">\u20D2",nvHarr:"\u2904",nvinfin:"\u29DE",nvlArr:"\u2902",nvle:"\u2264\u20D2",nvlt:"<\u20D2",nvltrie:"\u22B4\u20D2",nvrArr:"\u2903",nvrtrie:"\u22B5\u20D2",nvsim:"\u223C\u20D2",nwarhk:"\u2923",nwarr:"\u2196",nwArr:"\u21D6",nwarrow:"\u2196",nwnear:"\u2927",Oacute:"\xD3",oacute:"\xF3",oast:"\u229B",Ocirc:"\xD4",ocirc:"\xF4",ocir:"\u229A",Ocy:"\u041E",ocy:"\u043E",odash:"\u229D",Odblac:"\u0150",odblac:"\u0151",odiv:"\u2A38",odot:"\u2299",odsold:"\u29BC",OElig:"\u0152",oelig:"\u0153",ofcir:"\u29BF",Ofr:"\u{1D512}",ofr:"\u{1D52C}",ogon:"\u02DB",Ograve:"\xD2",ograve:"\xF2",ogt:"\u29C1",ohbar:"\u29B5",ohm:"\u03A9",oint:"\u222E",olarr:"\u21BA",olcir:"\u29BE",olcross:"\u29BB",oline:"\u203E",olt:"\u29C0",Omacr:"\u014C",omacr:"\u014D",Omega:"\u03A9",omega:"\u03C9",Omicron:"\u039F",omicron:"\u03BF",omid:"\u29B6",ominus:"\u2296",Oopf:"\u{1D546}",oopf:"\u{1D560}",opar:"\u29B7",OpenCurlyDoubleQuote:"\u201C",OpenCurlyQuote:"\u2018",operp:"\u29B9",oplus:"\u2295",orarr:"\u21BB",Or:"\u2A54",or:"\u2228",ord:"\u2A5D",order:"\u2134",orderof:"\u2134",ordf:"\xAA",ordm:"\xBA",origof:"\u22B6",oror:"\u2A56",orslope:"\u2A57",orv:"\u2A5B",oS:"\u24C8",Oscr:"\u{1D4AA}",oscr:"\u2134",Oslash:"\xD8",oslash:"\xF8",osol:"\u2298",Otilde:"\xD5",otilde:"\xF5",otimesas:"\u2A36",Otimes:"\u2A37",otimes:"\u2297",Ouml:"\xD6",ouml:"\xF6",ovbar:"\u233D",OverBar:"\u203E",OverBrace:"\u23DE",OverBracket:"\u23B4",OverParenthesis:"\u23DC",para:"\xB6",parallel:"\u2225",par:"\u2225",parsim:"\u2AF3",parsl:"\u2AFD",part:"\u2202",PartialD:"\u2202",Pcy:"\u041F",pcy:"\u043F",percnt:"%",period:".",permil:"\u2030",perp:"\u22A5",pertenk:"\u2031",Pfr:"\u{1D513}",pfr:"\u{1D52D}",Phi:"\u03A6",phi:"\u03C6",phiv:"\u03D5",phmmat:"\u2133",phone:"\u260E",Pi:"\u03A0",pi:"\u03C0",pitchfork:"\u22D4",piv:"\u03D6",planck:"\u210F",planckh:"\u210E",plankv:"\u210F",plusacir:"\u2A23",plusb:"\u229E",pluscir:"\u2A22",plus:"+",plusdo:"\u2214",plusdu:"\u2A25",pluse:"\u2A72",PlusMinus:"\xB1",plusmn:"\xB1",plussim:"\u2A26",plustwo:"\u2A27",pm:"\xB1",Poincareplane:"\u210C",pointint:"\u2A15",popf:"\u{1D561}",Popf:"\u2119",pound:"\xA3",prap:"\u2AB7",Pr:"\u2ABB",pr:"\u227A",prcue:"\u227C",precapprox:"\u2AB7",prec:"\u227A",preccurlyeq:"\u227C",Precedes:"\u227A",PrecedesEqual:"\u2AAF",PrecedesSlantEqual:"\u227C",PrecedesTilde:"\u227E",preceq:"\u2AAF",precnapprox:"\u2AB9",precneqq:"\u2AB5",precnsim:"\u22E8",pre:"\u2AAF",prE:"\u2AB3",precsim:"\u227E",prime:"\u2032",Prime:"\u2033",primes:"\u2119",prnap:"\u2AB9",prnE:"\u2AB5",prnsim:"\u22E8",prod:"\u220F",Product:"\u220F",profalar:"\u232E",profline:"\u2312",profsurf:"\u2313",prop:"\u221D",Proportional:"\u221D",Proportion:"\u2237",propto:"\u221D",prsim:"\u227E",prurel:"\u22B0",Pscr:"\u{1D4AB}",pscr:"\u{1D4C5}",Psi:"\u03A8",psi:"\u03C8",puncsp:"\u2008",Qfr:"\u{1D514}",qfr:"\u{1D52E}",qint:"\u2A0C",qopf:"\u{1D562}",Qopf:"\u211A",qprime:"\u2057",Qscr:"\u{1D4AC}",qscr:"\u{1D4C6}",quaternions:"\u210D",quatint:"\u2A16",quest:"?",questeq:"\u225F",quot:'"',QUOT:'"',rAarr:"\u21DB",race:"\u223D\u0331",Racute:"\u0154",racute:"\u0155",radic:"\u221A",raemptyv:"\u29B3",rang:"\u27E9",Rang:"\u27EB",rangd:"\u2992",range:"\u29A5",rangle:"\u27E9",raquo:"\xBB",rarrap:"\u2975",rarrb:"\u21E5",rarrbfs:"\u2920",rarrc:"\u2933",rarr:"\u2192",Rarr:"\u21A0",rArr:"\u21D2",rarrfs:"\u291E",rarrhk:"\u21AA",rarrlp:"\u21AC",rarrpl:"\u2945",rarrsim:"\u2974",Rarrtl:"\u2916",rarrtl:"\u21A3",rarrw:"\u219D",ratail:"\u291A",rAtail:"\u291C",ratio:"\u2236",rationals:"\u211A",rbarr:"\u290D",rBarr:"\u290F",RBarr:"\u2910",rbbrk:"\u2773",rbrace:"}",rbrack:"]",rbrke:"\u298C",rbrksld:"\u298E",rbrkslu:"\u2990",Rcaron:"\u0158",rcaron:"\u0159",Rcedil:"\u0156",rcedil:"\u0157",rceil:"\u2309",rcub:"}",Rcy:"\u0420",rcy:"\u0440",rdca:"\u2937",rdldhar:"\u2969",rdquo:"\u201D",rdquor:"\u201D",rdsh:"\u21B3",real:"\u211C",realine:"\u211B",realpart:"\u211C",reals:"\u211D",Re:"\u211C",rect:"\u25AD",reg:"\xAE",REG:"\xAE",ReverseElement:"\u220B",ReverseEquilibrium:"\u21CB",ReverseUpEquilibrium:"\u296F",rfisht:"\u297D",rfloor:"\u230B",rfr:"\u{1D52F}",Rfr:"\u211C",rHar:"\u2964",rhard:"\u21C1",rharu:"\u21C0",rharul:"\u296C",Rho:"\u03A1",rho:"\u03C1",rhov:"\u03F1",RightAngleBracket:"\u27E9",RightArrowBar:"\u21E5",rightarrow:"\u2192",RightArrow:"\u2192",Rightarrow:"\u21D2",RightArrowLeftArrow:"\u21C4",rightarrowtail:"\u21A3",RightCeiling:"\u2309",RightDoubleBracket:"\u27E7",RightDownTeeVector:"\u295D",RightDownVectorBar:"\u2955",RightDownVector:"\u21C2",RightFloor:"\u230B",rightharpoondown:"\u21C1",rightharpoonup:"\u21C0",rightleftarrows:"\u21C4",rightleftharpoons:"\u21CC",rightrightarrows:"\u21C9",rightsquigarrow:"\u219D",RightTeeArrow:"\u21A6",RightTee:"\u22A2",RightTeeVector:"\u295B",rightthreetimes:"\u22CC",RightTriangleBar:"\u29D0",RightTriangle:"\u22B3",RightTriangleEqual:"\u22B5",RightUpDownVector:"\u294F",RightUpTeeVector:"\u295C",RightUpVectorBar:"\u2954",RightUpVector:"\u21BE",RightVectorBar:"\u2953",RightVector:"\u21C0",ring:"\u02DA",risingdotseq:"\u2253",rlarr:"\u21C4",rlhar:"\u21CC",rlm:"\u200F",rmoustache:"\u23B1",rmoust:"\u23B1",rnmid:"\u2AEE",roang:"\u27ED",roarr:"\u21FE",robrk:"\u27E7",ropar:"\u2986",ropf:"\u{1D563}",Ropf:"\u211D",roplus:"\u2A2E",rotimes:"\u2A35",RoundImplies:"\u2970",rpar:")",rpargt:"\u2994",rppolint:"\u2A12",rrarr:"\u21C9",Rrightarrow:"\u21DB",rsaquo:"\u203A",rscr:"\u{1D4C7}",Rscr:"\u211B",rsh:"\u21B1",Rsh:"\u21B1",rsqb:"]",rsquo:"\u2019",rsquor:"\u2019",rthree:"\u22CC",rtimes:"\u22CA",rtri:"\u25B9",rtrie:"\u22B5",rtrif:"\u25B8",rtriltri:"\u29CE",RuleDelayed:"\u29F4",ruluhar:"\u2968",rx:"\u211E",Sacute:"\u015A",sacute:"\u015B",sbquo:"\u201A",scap:"\u2AB8",Scaron:"\u0160",scaron:"\u0161",Sc:"\u2ABC",sc:"\u227B",sccue:"\u227D",sce:"\u2AB0",scE:"\u2AB4",Scedil:"\u015E",scedil:"\u015F",Scirc:"\u015C",scirc:"\u015D",scnap:"\u2ABA",scnE:"\u2AB6",scnsim:"\u22E9",scpolint:"\u2A13",scsim:"\u227F",Scy:"\u0421",scy:"\u0441",sdotb:"\u22A1",sdot:"\u22C5",sdote:"\u2A66",searhk:"\u2925",searr:"\u2198",seArr:"\u21D8",searrow:"\u2198",sect:"\xA7",semi:";",seswar:"\u2929",setminus:"\u2216",setmn:"\u2216",sext:"\u2736",Sfr:"\u{1D516}",sfr:"\u{1D530}",sfrown:"\u2322",sharp:"\u266F",SHCHcy:"\u0429",shchcy:"\u0449",SHcy:"\u0428",shcy:"\u0448",ShortDownArrow:"\u2193",ShortLeftArrow:"\u2190",shortmid:"\u2223",shortparallel:"\u2225",ShortRightArrow:"\u2192",ShortUpArrow:"\u2191",shy:"\xAD",Sigma:"\u03A3",sigma:"\u03C3",sigmaf:"\u03C2",sigmav:"\u03C2",sim:"\u223C",simdot:"\u2A6A",sime:"\u2243",simeq:"\u2243",simg:"\u2A9E",simgE:"\u2AA0",siml:"\u2A9D",simlE:"\u2A9F",simne:"\u2246",simplus:"\u2A24",simrarr:"\u2972",slarr:"\u2190",SmallCircle:"\u2218",smallsetminus:"\u2216",smashp:"\u2A33",smeparsl:"\u29E4",smid:"\u2223",smile:"\u2323",smt:"\u2AAA",smte:"\u2AAC",smtes:"\u2AAC\uFE00",SOFTcy:"\u042C",softcy:"\u044C",solbar:"\u233F",solb:"\u29C4",sol:"/",Sopf:"\u{1D54A}",sopf:"\u{1D564}",spades:"\u2660",spadesuit:"\u2660",spar:"\u2225",sqcap:"\u2293",sqcaps:"\u2293\uFE00",sqcup:"\u2294",sqcups:"\u2294\uFE00",Sqrt:"\u221A",sqsub:"\u228F",sqsube:"\u2291",sqsubset:"\u228F",sqsubseteq:"\u2291",sqsup:"\u2290",sqsupe:"\u2292",sqsupset:"\u2290",sqsupseteq:"\u2292",square:"\u25A1",Square:"\u25A1",SquareIntersection:"\u2293",SquareSubset:"\u228F",SquareSubsetEqual:"\u2291",SquareSuperset:"\u2290",SquareSupersetEqual:"\u2292",SquareUnion:"\u2294",squarf:"\u25AA",squ:"\u25A1",squf:"\u25AA",srarr:"\u2192",Sscr:"\u{1D4AE}",sscr:"\u{1D4C8}",ssetmn:"\u2216",ssmile:"\u2323",sstarf:"\u22C6",Star:"\u22C6",star:"\u2606",starf:"\u2605",straightepsilon:"\u03F5",straightphi:"\u03D5",strns:"\xAF",sub:"\u2282",Sub:"\u22D0",subdot:"\u2ABD",subE:"\u2AC5",sube:"\u2286",subedot:"\u2AC3",submult:"\u2AC1",subnE:"\u2ACB",subne:"\u228A",subplus:"\u2ABF",subrarr:"\u2979",subset:"\u2282",Subset:"\u22D0",subseteq:"\u2286",subseteqq:"\u2AC5",SubsetEqual:"\u2286",subsetneq:"\u228A",subsetneqq:"\u2ACB",subsim:"\u2AC7",subsub:"\u2AD5",subsup:"\u2AD3",succapprox:"\u2AB8",succ:"\u227B",succcurlyeq:"\u227D",Succeeds:"\u227B",SucceedsEqual:"\u2AB0",SucceedsSlantEqual:"\u227D",SucceedsTilde:"\u227F",succeq:"\u2AB0",succnapprox:"\u2ABA",succneqq:"\u2AB6",succnsim:"\u22E9",succsim:"\u227F",SuchThat:"\u220B",sum:"\u2211",Sum:"\u2211",sung:"\u266A",sup1:"\xB9",sup2:"\xB2",sup3:"\xB3",sup:"\u2283",Sup:"\u22D1",supdot:"\u2ABE",supdsub:"\u2AD8",supE:"\u2AC6",supe:"\u2287",supedot:"\u2AC4",Superset:"\u2283",SupersetEqual:"\u2287",suphsol:"\u27C9",suphsub:"\u2AD7",suplarr:"\u297B",supmult:"\u2AC2",supnE:"\u2ACC",supne:"\u228B",supplus:"\u2AC0",supset:"\u2283",Supset:"\u22D1",supseteq:"\u2287",supseteqq:"\u2AC6",supsetneq:"\u228B",supsetneqq:"\u2ACC",supsim:"\u2AC8",supsub:"\u2AD4",supsup:"\u2AD6",swarhk:"\u2926",swarr:"\u2199",swArr:"\u21D9",swarrow:"\u2199",swnwar:"\u292A",szlig:"\xDF",Tab:" ",target:"\u2316",Tau:"\u03A4",tau:"\u03C4",tbrk:"\u23B4",Tcaron:"\u0164",tcaron:"\u0165",Tcedil:"\u0162",tcedil:"\u0163",Tcy:"\u0422",tcy:"\u0442",tdot:"\u20DB",telrec:"\u2315",Tfr:"\u{1D517}",tfr:"\u{1D531}",there4:"\u2234",therefore:"\u2234",Therefore:"\u2234",Theta:"\u0398",theta:"\u03B8",thetasym:"\u03D1",thetav:"\u03D1",thickapprox:"\u2248",thicksim:"\u223C",ThickSpace:"\u205F\u200A",ThinSpace:"\u2009",thinsp:"\u2009",thkap:"\u2248",thksim:"\u223C",THORN:"\xDE",thorn:"\xFE",tilde:"\u02DC",Tilde:"\u223C",TildeEqual:"\u2243",TildeFullEqual:"\u2245",TildeTilde:"\u2248",timesbar:"\u2A31",timesb:"\u22A0",times:"\xD7",timesd:"\u2A30",tint:"\u222D",toea:"\u2928",topbot:"\u2336",topcir:"\u2AF1",top:"\u22A4",Topf:"\u{1D54B}",topf:"\u{1D565}",topfork:"\u2ADA",tosa:"\u2929",tprime:"\u2034",trade:"\u2122",TRADE:"\u2122",triangle:"\u25B5",triangledown:"\u25BF",triangleleft:"\u25C3",trianglelefteq:"\u22B4",triangleq:"\u225C",triangleright:"\u25B9",trianglerighteq:"\u22B5",tridot:"\u25EC",trie:"\u225C",triminus:"\u2A3A",TripleDot:"\u20DB",triplus:"\u2A39",trisb:"\u29CD",tritime:"\u2A3B",trpezium:"\u23E2",Tscr:"\u{1D4AF}",tscr:"\u{1D4C9}",TScy:"\u0426",tscy:"\u0446",TSHcy:"\u040B",tshcy:"\u045B",Tstrok:"\u0166",tstrok:"\u0167",twixt:"\u226C",twoheadleftarrow:"\u219E",twoheadrightarrow:"\u21A0",Uacute:"\xDA",uacute:"\xFA",uarr:"\u2191",Uarr:"\u219F",uArr:"\u21D1",Uarrocir:"\u2949",Ubrcy:"\u040E",ubrcy:"\u045E",Ubreve:"\u016C",ubreve:"\u016D",Ucirc:"\xDB",ucirc:"\xFB",Ucy:"\u0423",ucy:"\u0443",udarr:"\u21C5",Udblac:"\u0170",udblac:"\u0171",udhar:"\u296E",ufisht:"\u297E",Ufr:"\u{1D518}",ufr:"\u{1D532}",Ugrave:"\xD9",ugrave:"\xF9",uHar:"\u2963",uharl:"\u21BF",uharr:"\u21BE",uhblk:"\u2580",ulcorn:"\u231C",ulcorner:"\u231C",ulcrop:"\u230F",ultri:"\u25F8",Umacr:"\u016A",umacr:"\u016B",uml:"\xA8",UnderBar:"_",UnderBrace:"\u23DF",UnderBracket:"\u23B5",UnderParenthesis:"\u23DD",Union:"\u22C3",UnionPlus:"\u228E",Uogon:"\u0172",uogon:"\u0173",Uopf:"\u{1D54C}",uopf:"\u{1D566}",UpArrowBar:"\u2912",uparrow:"\u2191",UpArrow:"\u2191",Uparrow:"\u21D1",UpArrowDownArrow:"\u21C5",updownarrow:"\u2195",UpDownArrow:"\u2195",Updownarrow:"\u21D5",UpEquilibrium:"\u296E",upharpoonleft:"\u21BF",upharpoonright:"\u21BE",uplus:"\u228E",UpperLeftArrow:"\u2196",UpperRightArrow:"\u2197",upsi:"\u03C5",Upsi:"\u03D2",upsih:"\u03D2",Upsilon:"\u03A5",upsilon:"\u03C5",UpTeeArrow:"\u21A5",UpTee:"\u22A5",upuparrows:"\u21C8",urcorn:"\u231D",urcorner:"\u231D",urcrop:"\u230E",Uring:"\u016E",uring:"\u016F",urtri:"\u25F9",Uscr:"\u{1D4B0}",uscr:"\u{1D4CA}",utdot:"\u22F0",Utilde:"\u0168",utilde:"\u0169",utri:"\u25B5",utrif:"\u25B4",uuarr:"\u21C8",Uuml:"\xDC",uuml:"\xFC",uwangle:"\u29A7",vangrt:"\u299C",varepsilon:"\u03F5",varkappa:"\u03F0",varnothing:"\u2205",varphi:"\u03D5",varpi:"\u03D6",varpropto:"\u221D",varr:"\u2195",vArr:"\u21D5",varrho:"\u03F1",varsigma:"\u03C2",varsubsetneq:"\u228A\uFE00",varsubsetneqq:"\u2ACB\uFE00",varsupsetneq:"\u228B\uFE00",varsupsetneqq:"\u2ACC\uFE00",vartheta:"\u03D1",vartriangleleft:"\u22B2",vartriangleright:"\u22B3",vBar:"\u2AE8",Vbar:"\u2AEB",vBarv:"\u2AE9",Vcy:"\u0412",vcy:"\u0432",vdash:"\u22A2",vDash:"\u22A8",Vdash:"\u22A9",VDash:"\u22AB",Vdashl:"\u2AE6",veebar:"\u22BB",vee:"\u2228",Vee:"\u22C1",veeeq:"\u225A",vellip:"\u22EE",verbar:"|",Verbar:"\u2016",vert:"|",Vert:"\u2016",VerticalBar:"\u2223",VerticalLine:"|",VerticalSeparator:"\u2758",VerticalTilde:"\u2240",VeryThinSpace:"\u200A",Vfr:"\u{1D519}",vfr:"\u{1D533}",vltri:"\u22B2",vnsub:"\u2282\u20D2",vnsup:"\u2283\u20D2",Vopf:"\u{1D54D}",vopf:"\u{1D567}",vprop:"\u221D",vrtri:"\u22B3",Vscr:"\u{1D4B1}",vscr:"\u{1D4CB}",vsubnE:"\u2ACB\uFE00",vsubne:"\u228A\uFE00",vsupnE:"\u2ACC\uFE00",vsupne:"\u228B\uFE00",Vvdash:"\u22AA",vzigzag:"\u299A",Wcirc:"\u0174",wcirc:"\u0175",wedbar:"\u2A5F",wedge:"\u2227",Wedge:"\u22C0",wedgeq:"\u2259",weierp:"\u2118",Wfr:"\u{1D51A}",wfr:"\u{1D534}",Wopf:"\u{1D54E}",wopf:"\u{1D568}",wp:"\u2118",wr:"\u2240",wreath:"\u2240",Wscr:"\u{1D4B2}",wscr:"\u{1D4CC}",xcap:"\u22C2",xcirc:"\u25EF",xcup:"\u22C3",xdtri:"\u25BD",Xfr:"\u{1D51B}",xfr:"\u{1D535}",xharr:"\u27F7",xhArr:"\u27FA",Xi:"\u039E",xi:"\u03BE",xlarr:"\u27F5",xlArr:"\u27F8",xmap:"\u27FC",xnis:"\u22FB",xodot:"\u2A00",Xopf:"\u{1D54F}",xopf:"\u{1D569}",xoplus:"\u2A01",xotime:"\u2A02",xrarr:"\u27F6",xrArr:"\u27F9",Xscr:"\u{1D4B3}",xscr:"\u{1D4CD}",xsqcup:"\u2A06",xuplus:"\u2A04",xutri:"\u25B3",xvee:"\u22C1",xwedge:"\u22C0",Yacute:"\xDD",yacute:"\xFD",YAcy:"\u042F",yacy:"\u044F",Ycirc:"\u0176",ycirc:"\u0177",Ycy:"\u042B",ycy:"\u044B",yen:"\xA5",Yfr:"\u{1D51C}",yfr:"\u{1D536}",YIcy:"\u0407",yicy:"\u0457",Yopf:"\u{1D550}",yopf:"\u{1D56A}",Yscr:"\u{1D4B4}",yscr:"\u{1D4CE}",YUcy:"\u042E",yucy:"\u044E",yuml:"\xFF",Yuml:"\u0178",Zacute:"\u0179",zacute:"\u017A",Zcaron:"\u017D",zcaron:"\u017E",Zcy:"\u0417",zcy:"\u0437",Zdot:"\u017B",zdot:"\u017C",zeetrf:"\u2128",ZeroWidthSpace:"\u200B",Zeta:"\u0396",zeta:"\u03B6",zfr:"\u{1D537}",Zfr:"\u2128",ZHcy:"\u0416",zhcy:"\u0436",zigrarr:"\u21DD",zopf:"\u{1D56B}",Zopf:"\u2124",Zscr:"\u{1D4B5}",zscr:"\u{1D4CF}",zwj:"\u200D",zwnj:"\u200C"}});var Bf=se((Ch,lg)=>{lg.exports={Aacute:"\xC1",aacute:"\xE1",Acirc:"\xC2",acirc:"\xE2",acute:"\xB4",AElig:"\xC6",aelig:"\xE6",Agrave:"\xC0",agrave:"\xE0",amp:"&",AMP:"&",Aring:"\xC5",aring:"\xE5",Atilde:"\xC3",atilde:"\xE3",Auml:"\xC4",auml:"\xE4",brvbar:"\xA6",Ccedil:"\xC7",ccedil:"\xE7",cedil:"\xB8",cent:"\xA2",copy:"\xA9",COPY:"\xA9",curren:"\xA4",deg:"\xB0",divide:"\xF7",Eacute:"\xC9",eacute:"\xE9",Ecirc:"\xCA",ecirc:"\xEA",Egrave:"\xC8",egrave:"\xE8",ETH:"\xD0",eth:"\xF0",Euml:"\xCB",euml:"\xEB",frac12:"\xBD",frac14:"\xBC",frac34:"\xBE",gt:">",GT:">",Iacute:"\xCD",iacute:"\xED",Icirc:"\xCE",icirc:"\xEE",iexcl:"\xA1",Igrave:"\xCC",igrave:"\xEC",iquest:"\xBF",Iuml:"\xCF",iuml:"\xEF",laquo:"\xAB",lt:"<",LT:"<",macr:"\xAF",micro:"\xB5",middot:"\xB7",nbsp:"\xA0",not:"\xAC",Ntilde:"\xD1",ntilde:"\xF1",Oacute:"\xD3",oacute:"\xF3",Ocirc:"\xD4",ocirc:"\xF4",Ograve:"\xD2",ograve:"\xF2",ordf:"\xAA",ordm:"\xBA",Oslash:"\xD8",oslash:"\xF8",Otilde:"\xD5",otilde:"\xF5",Ouml:"\xD6",ouml:"\xF6",para:"\xB6",plusmn:"\xB1",pound:"\xA3",quot:'"',QUOT:'"',raquo:"\xBB",reg:"\xAE",REG:"\xAE",sect:"\xA7",shy:"\xAD",sup1:"\xB9",sup2:"\xB2",sup3:"\xB3",szlig:"\xDF",THORN:"\xDE",thorn:"\xFE",times:"\xD7",Uacute:"\xDA",uacute:"\xFA",Ucirc:"\xDB",ucirc:"\xFB",Ugrave:"\xD9",ugrave:"\xF9",uml:"\xA8",Uuml:"\xDC",uuml:"\xFC",Yacute:"\xDD",yacute:"\xFD",yen:"\xA5",yuml:"\xFF"}});var ju=se((kh,ig)=>{ig.exports={amp:"&",apos:"'",gt:">",lt:"<",quot:'"'}});var Wf=se((Nh,ug)=>{ug.exports={"0":65533,"128":8364,"130":8218,"131":402,"132":8222,"133":8230,"134":8224,"135":8225,"136":710,"137":8240,"138":352,"139":8249,"140":338,"142":381,"145":8216,"146":8217,"147":8220,"148":8221,"149":8226,"150":8211,"151":8212,"152":732,"153":8482,"154":353,"155":8250,"156":339,"158":382,"159":376}});var Xf=se(Fn=>{"use strict";var sg=Fn&&Fn.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Fn,"__esModule",{value:!0});var Gf=sg(Wf()),ag=String.fromCodePoint||function(e){var t="";return e>65535&&(e-=65536,t+=String.fromCharCode(e>>>10&1023|55296),e=56320|e&1023),t+=String.fromCharCode(e),t};function cg(e){return e>=55296&&e<=57343||e>1114111?"\uFFFD":(e in Gf.default&&(e=Gf.default[e]),ag(e))}Fn.default=cg});var qu=se(rt=>{"use strict";var il=rt&&rt.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(rt,"__esModule",{value:!0});rt.decodeHTML=rt.decodeHTMLStrict=rt.decodeXML=void 0;var Hu=il(zu()),fg=il(Bf()),dg=il(ju()),bf=il(Xf()),pg=/&(?:[a-zA-Z0-9]+|#[xX][\da-fA-F]+|#\d+);/g;rt.decodeXML=Kf(dg.default);rt.decodeHTMLStrict=Kf(Hu.default);function Kf(e){var t=Qf(e);return function(r){return String(r).replace(pg,t)}}var $f=function(e,t){return e{"use strict";var Yf=Te&&Te.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(Te,"__esModule",{value:!0});Te.escapeUTF8=Te.escape=Te.encodeNonAsciiHTML=Te.encodeHTML=Te.encodeXML=void 0;var mg=Yf(ju()),Zf=ed(mg.default),Jf=td(Zf);Te.encodeXML=od(Zf);var gg=Yf(zu()),Vu=ed(gg.default),hg=td(Vu);Te.encodeHTML=yg(Vu,hg);Te.encodeNonAsciiHTML=od(Vu);function ed(e){return Object.keys(e).sort().reduce(function(t,r){return t[e[r]]="&"+r+";",t},{})}function td(e){for(var t=[],r=[],n=0,o=Object.keys(e);n1?vg(e):e.charCodeAt(0)).toString(16).toUpperCase()+";"}function yg(e,t){return function(r){return r.replace(t,function(n){return e[n]}).replace(rd,ul)}}var nd=new RegExp(Jf.source+"|"+rd.source,"g");function Eg(e){return e.replace(nd,ul)}Te.escape=Eg;function Sg(e){return e.replace(Jf,ul)}Te.escapeUTF8=Sg;function od(e){return function(t){return t.replace(nd,function(r){return e[r]||ul(r)})}}});var id=se(M=>{"use strict";Object.defineProperty(M,"__esModule",{value:!0});M.decodeXMLStrict=M.decodeHTML5Strict=M.decodeHTML4Strict=M.decodeHTML5=M.decodeHTML4=M.decodeHTMLStrict=M.decodeHTML=M.decodeXML=M.encodeHTML5=M.encodeHTML4=M.escapeUTF8=M.escape=M.encodeNonAsciiHTML=M.encodeHTML=M.encodeXML=M.encode=M.decodeStrict=M.decode=void 0;var sl=qu(),ld=Ru();function wg(e,t){return(!t||t<=0?sl.decodeXML:sl.decodeHTML)(e)}M.decode=wg;function _g(e,t){return(!t||t<=0?sl.decodeXML:sl.decodeHTMLStrict)(e)}M.decodeStrict=_g;function Tg(e,t){return(!t||t<=0?ld.encodeXML:ld.encodeHTML)(e)}M.encode=Tg;var or=Ru();Object.defineProperty(M,"encodeXML",{enumerable:!0,get:function(){return or.encodeXML}});Object.defineProperty(M,"encodeHTML",{enumerable:!0,get:function(){return or.encodeHTML}});Object.defineProperty(M,"encodeNonAsciiHTML",{enumerable:!0,get:function(){return or.encodeNonAsciiHTML}});Object.defineProperty(M,"escape",{enumerable:!0,get:function(){return or.escape}});Object.defineProperty(M,"escapeUTF8",{enumerable:!0,get:function(){return or.escapeUTF8}});Object.defineProperty(M,"encodeHTML4",{enumerable:!0,get:function(){return or.encodeHTML}});Object.defineProperty(M,"encodeHTML5",{enumerable:!0,get:function(){return or.encodeHTML}});var qt=qu();Object.defineProperty(M,"decodeXML",{enumerable:!0,get:function(){return qt.decodeXML}});Object.defineProperty(M,"decodeHTML",{enumerable:!0,get:function(){return qt.decodeHTML}});Object.defineProperty(M,"decodeHTMLStrict",{enumerable:!0,get:function(){return qt.decodeHTMLStrict}});Object.defineProperty(M,"decodeHTML4",{enumerable:!0,get:function(){return qt.decodeHTML}});Object.defineProperty(M,"decodeHTML5",{enumerable:!0,get:function(){return qt.decodeHTML}});Object.defineProperty(M,"decodeHTML4Strict",{enumerable:!0,get:function(){return qt.decodeHTMLStrict}});Object.defineProperty(M,"decodeHTML5Strict",{enumerable:!0,get:function(){return qt.decodeHTMLStrict}});Object.defineProperty(M,"decodeXMLStrict",{enumerable:!0,get:function(){return qt.decodeXML}})});var vd=se((Ah,hd)=>{"use strict";function Cg(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function ud(e,t){for(var r=0;r=e.length?{done:!0}:{done:!1,value:e[n++]}},e:function(a){throw a},f:o}}throw new TypeError(`Invalid attempt to iterate non-iterable instance. -In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var l=!0,i=!1,u;return{s:function(){r=r.call(e)},n:function(){var a=r.next();return l=a.done,a},e:function(a){i=!0,u=a},f:function(){try{!l&&r.return!=null&&r.return()}finally{if(i)throw u}}}}function Ng(e,t){if(e){if(typeof e=="string")return sd(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return sd(e,t)}}function sd(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0?e*40+55:0,i=t>0?t*40+55:0,u=r>0?r*40+55:0;n[o]=Og([l,i,u])}function md(e){for(var t=e.toString(16);t.length<2;)t="0"+t;return t}function Og(e){var t=[],r=pd(e),n;try{for(r.s();!(n=r.n()).done;){var o=n.value;t.push(md(o))}}catch(l){r.e(l)}finally{r.f()}return"#"+t.join("")}function cd(e,t,r,n){var o;return t==="text"?o=Ig(r,n):t==="display"?o=Dg(e,r,n):t==="xterm256Foreground"?o=fl(e,n.colors[r]):t==="xterm256Background"?o=dl(e,n.colors[r]):t==="rgb"&&(o=Ag(e,r)),o}function Ag(e,t){t=t.substring(2).slice(0,-1);var r=+t.substr(0,2),n=t.substring(5).split(";"),o=n.map(function(l){return("0"+Number(l).toString(16)).substr(-2)}).join("");return cl(e,(r===38?"color:#":"background-color:#")+o)}function Dg(e,t,r){t=parseInt(t,10);var n={"-1":function(){return"
"},0:function(){return e.length&&gd(e)},1:function(){return Vt(e,"b")},3:function(){return Vt(e,"i")},4:function(){return Vt(e,"u")},8:function(){return cl(e,"display:none")},9:function(){return Vt(e,"strike")},22:function(){return cl(e,"font-weight:normal;text-decoration:none;font-style:normal")},23:function(){return dd(e,"i")},24:function(){return dd(e,"u")},39:function(){return fl(e,r.fg)},49:function(){return dl(e,r.bg)},53:function(){return cl(e,"text-decoration:overline")}},o;return n[t]?o=n[t]():4"}).join("")}function al(e,t){for(var r=[],n=e;n<=t;n++)r.push(n);return r}function Pg(e){return function(t){return(e===null||t.category!==e)&&e!=="all"}}function fd(e){e=parseInt(e,10);var t=null;return e===0?t="all":e===1?t="bold":2")}function cl(e,t){return Vt(e,"span",t)}function fl(e,t){return Vt(e,"span","color:"+t)}function dl(e,t){return Vt(e,"span","background-color:"+t)}function dd(e,t){var r;if(e.slice(-1)[0]===t&&(r=e.pop()),r)return""}function Ug(e,t,r){var n=!1,o=3;function l(){return""}function i(T,h){return r("xterm256Foreground",h),""}function u(T,h){return r("xterm256Background",h),""}function s(T){return t.newline?r("display",-1):r("text",T),""}function a(T,h){n=!0,h.trim().length===0&&(h="0"),h=h.trimRight(";").split(";");var C=pd(h),N;try{for(C.s();!(N=C.n()).done;){var U=N.value;r("display",U)}}catch(x){C.e(x)}finally{C.f()}return""}function p(T){return r("text",T),""}function m(T){return r("rgb",T),""}var g=[{pattern:/^\x08+/,sub:l},{pattern:/^\x1b\[[012]?K/,sub:l},{pattern:/^\x1b\[\(B/,sub:l},{pattern:/^\x1b\[[34]8;2;\d+;\d+;\d+m/,sub:m},{pattern:/^\x1b\[38;5;(\d+)m/,sub:i},{pattern:/^\x1b\[48;5;(\d+)m/,sub:u},{pattern:/^\n/,sub:s},{pattern:/^\r+\n/,sub:s},{pattern:/^\r/,sub:s},{pattern:/^\x1b\[((?:\d{1,3};?)+|)m/,sub:a},{pattern:/^\x1b\[\d?J/,sub:l},{pattern:/^\x1b\[\d{0,3};\d{0,3}f/,sub:l},{pattern:/^\x1b\[?[\d;]{0,3}/,sub:l},{pattern:/^(([^\x1b\x08\r\n])+)/,sub:p}];function w(T,h){h>o&&n||(n=!1,e=e.replace(T.pattern,T.sub))}var _=[],S=e,L=S.length;e:for(;L>0;){for(var d=0,c=0,f=g.length;c{let l=["system","light","dark"],u=(l.indexOf(e)+1)%l.length;t(l[u])},n=()=>{switch(e){case"light":return ne.default.createElement("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},ne.default.createElement("circle",{cx:"12",cy:"12",r:"5"}),ne.default.createElement("line",{x1:"12",y1:"1",x2:"12",y2:"3"}),ne.default.createElement("line",{x1:"12",y1:"21",x2:"12",y2:"23"}),ne.default.createElement("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"}),ne.default.createElement("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"}),ne.default.createElement("line",{x1:"1",y1:"12",x2:"3",y2:"12"}),ne.default.createElement("line",{x1:"21",y1:"12",x2:"23",y2:"12"}),ne.default.createElement("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"}),ne.default.createElement("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"}));case"dark":return ne.default.createElement("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},ne.default.createElement("path",{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"}));case"system":default:return ne.default.createElement("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},ne.default.createElement("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"}),ne.default.createElement("line",{x1:"8",y1:"21",x2:"16",y2:"21"}),ne.default.createElement("line",{x1:"12",y1:"17",x2:"12",y2:"21"}))}},o=()=>{switch(e){case"light":return"Theme: Light (click for Dark)";case"dark":return"Theme: Dark (click for System)";case"system":default:return"Theme: System (click for Light)"}};return ne.default.createElement("button",{className:"theme-toggle-btn",onClick:r,title:o(),"aria-label":o()},n())}var tt=V(R(),1);var zt=V(R(),1);function Df(e,t){let[r,n]=(0,zt.useState)(null),[o,l]=(0,zt.useState)(!0),[i,u]=(0,zt.useState)(null),s=(0,zt.useCallback)(async()=>{try{l(!0),u(null);let a=await fetch(`https://api.github.com/repos/${e}/${t}`);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let p=await a.json();n(p.stargazers_count)}catch(a){console.error("Failed to fetch GitHub stars:",a),u(a instanceof Error?a:new Error("Unknown error"))}finally{l(!1)}},[e,t]);return(0,zt.useEffect)(()=>{s()},[s]),{stars:r,isLoading:o,error:i}}function Pf(e){return e<1e3?e.toString():e<1e6?`${(e/1e3).toFixed(1)}k`:`${(e/1e6).toFixed(1)}M`}function If({username:e,repo:t,className:r=""}){let{stars:n,isLoading:o,error:l}=Df(e,t),i=`https://github.com/${e}/${t}`;return l?tt.default.createElement("a",{href:i,target:"_blank",rel:"noopener noreferrer",title:"GitHub",className:"icon-link"},tt.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor"},tt.default.createElement("path",{d:"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"}))):tt.default.createElement("a",{href:i,target:"_blank",rel:"noopener noreferrer",className:`github-stars-btn ${r}`,title:`Star us on GitHub${n!==null?` (${n.toLocaleString()} stars)`:""}`},tt.default.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor",style:{marginRight:"6px"}},tt.default.createElement("path",{d:"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"})),tt.default.createElement("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor",style:{marginRight:"4px"}},tt.default.createElement("path",{d:"M12 .587l3.668 7.431 8.2 1.192-5.934 5.787 1.4 8.166L12 18.896l-7.334 3.867 1.4-8.166-5.934-5.787 8.2-1.192z"})),tt.default.createElement("span",{className:o?"stars-loading":"stars-count"},o?"...":n!==null?Pf(n):"\u2014"))}var jt=V(R(),1);function Uf(e){let t=(0,jt.useRef)(null),r=(0,jt.useRef)(null),n=(0,jt.useRef)(null),o=(0,jt.useRef)(0),l=(0,jt.useRef)(null);(0,jt.useEffect)(()=>{if(r.current||(r.current=document.createElement("canvas"),r.current.width=32,r.current.height=32),n.current||(n.current=new Image,n.current.src="claude-mem-logomark.webp"),!l.current){let m=document.querySelector('link[rel="icon"]');m&&(l.current=m.href)}let i=r.current,u=i.getContext("2d"),s=n.current;if(!u)return;let a=m=>{let g=document.querySelector('link[rel="icon"]');g||(g=document.createElement("link"),g.rel="icon",document.head.appendChild(g)),g.href=m},p=()=>{if(!s.complete){t.current=requestAnimationFrame(p);return}o.current+=2*Math.PI/90,u.clearRect(0,0,32,32),u.save(),u.translate(16,16),u.rotate(o.current),u.drawImage(s,-16,-16,32,32),u.restore(),a(i.toDataURL("image/png")),t.current=requestAnimationFrame(p)};return e?(o.current=0,p()):(t.current&&(cancelAnimationFrame(t.current),t.current=null),l.current&&a(l.current)),()=>{t.current&&(cancelAnimationFrame(t.current),t.current=null)}},[e])}function Ff({isConnected:e,projects:t,currentFilter:r,onFilterChange:n,isProcessing:o,queueDepth:l,themePreference:i,onThemeChange:u,onContextPreviewToggle:s}){return Uf(o),I.default.createElement("div",{className:"header"},I.default.createElement("h1",null,I.default.createElement("div",{style:{position:"relative",display:"inline-block"}},I.default.createElement("img",{src:"claude-mem-logomark.webp",alt:"",className:`logomark ${o?"spinning":""}`}),l>0&&I.default.createElement("div",{className:"queue-bubble"},l)),I.default.createElement("span",{className:"logo-text"},"claude-mem")),I.default.createElement("div",{className:"status"},I.default.createElement("a",{href:"https://docs.claude-mem.ai",target:"_blank",rel:"noopener noreferrer",className:"icon-link",title:"Documentation"},I.default.createElement("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},I.default.createElement("path",{d:"M4 19.5A2.5 2.5 0 0 1 6.5 17H20"}),I.default.createElement("path",{d:"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"}))),I.default.createElement("a",{href:"https://x.com/Claude_Memory",target:"_blank",rel:"noopener noreferrer",className:"icon-link",title:"Follow us on X"},I.default.createElement("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"currentColor"},I.default.createElement("path",{d:"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"}))),I.default.createElement("a",{href:"https://discord.gg/J4wttp9vDu",target:"_blank",rel:"noopener noreferrer",className:"icon-link",title:"Join our Discord community"},I.default.createElement("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"currentColor"},I.default.createElement("path",{d:"M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z"}))),I.default.createElement(If,{username:"thedotmack",repo:"claude-mem"}),I.default.createElement("select",{value:r,onChange:a=>n(a.target.value)},I.default.createElement("option",{value:""},"All Projects"),t.map(a=>I.default.createElement("option",{key:a,value:a},a))),I.default.createElement(Af,{preference:i,onThemeChange:u}),I.default.createElement("button",{className:"settings-btn",onClick:s,title:"Settings"},I.default.createElement("svg",{className:"settings-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},I.default.createElement("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}),I.default.createElement("circle",{cx:"12",cy:"12",r:"3"})))))}var $=V(R(),1);var A=V(R(),1);function Fr(e){return new Date(e).toLocaleString()}function zf(e){let t=["/Scripts/","/src/","/plugin/","/docs/"];for(let o of t){let l=e.indexOf(o);if(l!==-1)return e.substring(l+1)}let r=e.indexOf("claude-mem/");if(r!==-1)return e.substring(r+11);let n=e.split("/");return n.length>3?n.slice(-3).join("/"):e}function jf({observation:e}){let[t,r]=(0,A.useState)(!1),[n,o]=(0,A.useState)(!1),l=Fr(e.created_at_epoch),i=e.facts?JSON.parse(e.facts):[],u=e.concepts?JSON.parse(e.concepts):[],s=e.files_read?JSON.parse(e.files_read).map(zf):[],a=e.files_modified?JSON.parse(e.files_modified).map(zf):[],p=i.length>0||u.length>0||s.length>0||a.length>0;return A.default.createElement("div",{className:"card"},A.default.createElement("div",{className:"card-header"},A.default.createElement("div",{className:"card-header-left"},A.default.createElement("span",{className:`card-type type-${e.type}`},e.type),A.default.createElement("span",{className:"card-project"},e.project)),A.default.createElement("div",{className:"view-mode-toggles"},p&&A.default.createElement("button",{className:`view-mode-toggle ${t?"active":""}`,onClick:()=>{r(!t),t||o(!1)}},A.default.createElement("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},A.default.createElement("polyline",{points:"9 11 12 14 22 4"}),A.default.createElement("path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"})),A.default.createElement("span",null,"facts")),e.narrative&&A.default.createElement("button",{className:`view-mode-toggle ${n?"active":""}`,onClick:()=>{o(!n),n||r(!1)}},A.default.createElement("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},A.default.createElement("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),A.default.createElement("polyline",{points:"14 2 14 8 20 8"}),A.default.createElement("line",{x1:"16",y1:"13",x2:"8",y2:"13"}),A.default.createElement("line",{x1:"16",y1:"17",x2:"8",y2:"17"})),A.default.createElement("span",null,"narrative")))),A.default.createElement("div",{className:"card-title"},e.title||"Untitled"),A.default.createElement("div",{className:"view-mode-content"},!t&&!n&&e.subtitle&&A.default.createElement("div",{className:"card-subtitle"},e.subtitle),t&&i.length>0&&A.default.createElement("ul",{className:"facts-list"},i.map((m,g)=>A.default.createElement("li",{key:g},m))),n&&e.narrative&&A.default.createElement("div",{className:"narrative"},e.narrative)),A.default.createElement("div",{className:"card-meta"},A.default.createElement("span",{className:"meta-date"},"#",e.id," \u2022 ",l),t&&(u.length>0||s.length>0||a.length>0)&&A.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px",alignItems:"center"}},u.map((m,g)=>A.default.createElement("span",{key:g,style:{padding:"2px 8px",background:"var(--color-type-badge-bg)",color:"var(--color-type-badge-text)",borderRadius:"3px",fontWeight:"500",fontSize:"10px"}},m)),s.length>0&&A.default.createElement("span",{className:"meta-files"},A.default.createElement("span",{className:"file-label"},"read:")," ",s.join(", ")),a.length>0&&A.default.createElement("span",{className:"meta-files"},A.default.createElement("span",{className:"file-label"},"modified:")," ",a.join(", ")))))}var ue=V(R(),1);function Hf({summary:e}){let t=Fr(e.created_at_epoch),r=[{key:"investigated",label:"Investigated",content:e.investigated,icon:"/icon-thick-investigated.svg"},{key:"learned",label:"Learned",content:e.learned,icon:"/icon-thick-learned.svg"},{key:"completed",label:"Completed",content:e.completed,icon:"/icon-thick-completed.svg"},{key:"next_steps",label:"Next Steps",content:e.next_steps,icon:"/icon-thick-next-steps.svg"}].filter(n=>n.content);return ue.default.createElement("article",{className:"card summary-card"},ue.default.createElement("header",{className:"summary-card-header"},ue.default.createElement("div",{className:"summary-badge-row"},ue.default.createElement("span",{className:"card-type summary-badge"},"Session Summary"),ue.default.createElement("span",{className:"summary-project-badge"},e.project)),e.request&&ue.default.createElement("h2",{className:"summary-title"},e.request)),ue.default.createElement("div",{className:"summary-sections"},r.map((n,o)=>ue.default.createElement("section",{key:n.key,className:"summary-section",style:{animationDelay:`${o*50}ms`}},ue.default.createElement("div",{className:"summary-section-header"},ue.default.createElement("img",{src:n.icon,alt:n.label,className:`summary-section-icon summary-section-icon--${n.key}`}),ue.default.createElement("h3",{className:"summary-section-label"},n.label)),ue.default.createElement("div",{className:"summary-section-content"},n.content)))),ue.default.createElement("footer",{className:"summary-card-footer"},ue.default.createElement("span",{className:"summary-meta-id"},"Session #",e.id),ue.default.createElement("span",{className:"summary-meta-divider"},"\u2022"),ue.default.createElement("time",{className:"summary-meta-date",dateTime:new Date(e.created_at_epoch).toISOString()},t)))}var pt=V(R(),1);function qf({prompt:e}){let t=Fr(e.created_at_epoch);return pt.default.createElement("div",{className:"card prompt-card"},pt.default.createElement("div",{className:"card-header"},pt.default.createElement("div",{className:"card-header-left"},pt.default.createElement("span",{className:"card-type"},"Prompt"),pt.default.createElement("span",{className:"card-project"},e.project))),pt.default.createElement("div",{className:"card-content"},e.prompt_text),pt.default.createElement("div",{className:"card-meta"},pt.default.createElement("span",{className:"meta-date"},"#",e.id," \u2022 ",t)))}var Ht=V(R(),1);function Vf({targetRef:e}){let[t,r]=(0,Ht.useState)(!1);(0,Ht.useEffect)(()=>{let o=()=>{let i=e.current;i&&r(i.scrollTop>300)},l=e.current;if(l)return l.addEventListener("scroll",o),()=>l.removeEventListener("scroll",o)},[]);let n=()=>{let o=e.current;o&&o.scrollTo({top:0,behavior:"smooth"})};return t?Ht.default.createElement("button",{onClick:n,className:"scroll-to-top","aria-label":"Scroll to top"},Ht.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},Ht.default.createElement("polyline",{points:"18 15 12 9 6 15"}))):null}var Un={PAGINATION_PAGE_SIZE:50,LOAD_MORE_THRESHOLD:.1};function Rf({observations:e,summaries:t,prompts:r,onLoadMore:n,isLoading:o,hasMore:l}){let i=(0,$.useRef)(null),u=(0,$.useRef)(null),s=(0,$.useRef)(n);(0,$.useEffect)(()=>{s.current=n},[n]),(0,$.useEffect)(()=>{let p=i.current;if(!p)return;let m=new IntersectionObserver(g=>{g[0].isIntersecting&&l&&!o&&s.current?.()},{threshold:Un.LOAD_MORE_THRESHOLD});return m.observe(p),()=>{p&&m.unobserve(p),m.disconnect()}},[l,o]);let a=(0,$.useMemo)(()=>[...e.map(m=>({...m,itemType:"observation"})),...t.map(m=>({...m,itemType:"summary"})),...r.map(m=>({...m,itemType:"prompt"}))].sort((m,g)=>g.created_at_epoch-m.created_at_epoch),[e,t,r]);return $.default.createElement("div",{className:"feed",ref:u},$.default.createElement(Vf,{targetRef:u}),$.default.createElement("div",{className:"feed-content"},a.map(p=>{let m=`${p.itemType}-${p.id}`;return p.itemType==="observation"?$.default.createElement(jf,{key:m,observation:p}):p.itemType==="summary"?$.default.createElement(Hf,{key:m,summary:p}):$.default.createElement(qf,{key:m,prompt:p})}),a.length===0&&!o&&$.default.createElement("div",{style:{textAlign:"center",padding:"40px",color:"#8b949e"}},"No items to display"),o&&$.default.createElement("div",{style:{textAlign:"center",padding:"20px",color:"#8b949e"}},$.default.createElement("div",{className:"spinner",style:{display:"inline-block",marginRight:"10px"}}),"Loading more..."),l&&!o&&a.length>0&&$.default.createElement("div",{ref:i,style:{height:"20px",margin:"10px 0"}}),!l&&a.length>0&&$.default.createElement("div",{style:{textAlign:"center",padding:"20px",color:"#8b949e",fontSize:"14px"}},"No more items to load")))}var v=V(R(),1);var ee=V(R(),1),yd=V(vd(),1),jg=new yd.default({fg:"#dcd6cc",bg:"#252320",newline:!1,escapeXML:!0,stream:!1});function Ed({content:e,isLoading:t=!1,className:r=""}){let n=(0,ee.useRef)(null),o=(0,ee.useRef)(0),[l,i]=(0,ee.useState)(!0),u=(0,ee.useMemo)(()=>(n.current&&(o.current=n.current.scrollTop),e?jg.toHtml(e):""),[e]);return(0,ee.useLayoutEffect)(()=>{n.current&&o.current>0&&(n.current.scrollTop=o.current)},[u]),ee.default.createElement("div",{className:r,style:{backgroundColor:"var(--color-bg-card)",border:"1px solid var(--color-border-primary)",borderRadius:"8px",overflow:"hidden",height:"100%",display:"flex",flexDirection:"column",boxShadow:"0 10px 40px rgba(0, 0, 0, 0.4), 0 4px 12px rgba(0, 0, 0, 0.3)"}},ee.default.createElement("div",{style:{padding:"12px",borderBottom:"1px solid var(--color-border-primary)",display:"flex",gap:"6px",alignItems:"center",backgroundColor:"var(--color-bg-header)"}},ee.default.createElement("div",{style:{width:"12px",height:"12px",borderRadius:"50%",backgroundColor:"#ff5f57"}}),ee.default.createElement("div",{style:{width:"12px",height:"12px",borderRadius:"50%",backgroundColor:"#ffbd2e"}}),ee.default.createElement("div",{style:{width:"12px",height:"12px",borderRadius:"50%",backgroundColor:"#28c840"}}),ee.default.createElement("button",{onClick:()=>i(!l),style:{marginLeft:"auto",padding:"4px 8px",fontSize:"11px",fontWeight:500,color:l?"var(--color-text-secondary)":"var(--color-accent-primary)",backgroundColor:"transparent",border:"1px solid",borderColor:l?"var(--color-border-primary)":"var(--color-accent-primary)",borderRadius:"4px",cursor:"pointer",transition:"all 0.2s",whiteSpace:"nowrap"},onMouseEnter:a=>{a.currentTarget.style.borderColor="var(--color-accent-primary)",a.currentTarget.style.color="var(--color-accent-primary)"},onMouseLeave:a=>{a.currentTarget.style.borderColor=l?"var(--color-border-primary)":"var(--color-accent-primary)",a.currentTarget.style.color=l?"var(--color-text-secondary)":"var(--color-accent-primary)"},title:l?"Disable word wrap (scroll horizontally)":"Enable word wrap"},l?"\u2922 Wrap":"\u21C4 Scroll")),t?ee.default.createElement("div",{style:{padding:"16px",fontFamily:"var(--font-terminal)",fontSize:"12px",color:"var(--color-text-secondary)"}},"Loading preview..."):ee.default.createElement("div",{style:{position:"relative",flex:1,overflow:"hidden"}},ee.default.createElement("pre",{ref:n,style:{padding:"16px",margin:0,fontFamily:"var(--font-terminal)",fontSize:"12px",lineHeight:"1.6",overflow:"auto",color:"var(--color-text-primary)",backgroundColor:"var(--color-bg-card)",whiteSpace:l?"pre-wrap":"pre",wordBreak:l?"break-word":"normal",position:"absolute",inset:0},dangerouslySetInnerHTML:{__html:u}})))}var be=V(R(),1);function Sd(e){let[t,r]=(0,be.useState)(""),[n,o]=(0,be.useState)(!1),[l,i]=(0,be.useState)(null),[u,s]=(0,be.useState)([]),[a,p]=(0,be.useState)(null);(0,be.useEffect)(()=>{async function g(){try{let _=await(await fetch("/api/projects")).json();_.projects&&_.projects.length>0&&(s(_.projects),p(_.projects[0]))}catch(w){console.error("Failed to fetch projects:",w)}}g()},[]);let m=(0,be.useCallback)(async()=>{if(!a){r("No project selected");return}o(!0),i(null);try{let g=new URLSearchParams({project:a}),w=await fetch(`/api/context/preview?${g}`),_=await w.text();w.ok?r(_):i("Failed to load preview")}catch(g){i(g.message)}finally{o(!1)}},[a]);return(0,be.useEffect)(()=>{let g=setTimeout(()=>{m()},300);return()=>clearTimeout(g)},[e,m]),{preview:t,isLoading:n,error:l,refresh:m,projects:u,selectedProject:a,setSelectedProject:p}}function Hg(e,t){let r;return((...n)=>{clearTimeout(r),r=setTimeout(()=>e(...n),t)})}function pl({title:e,description:t,children:r,defaultOpen:n=!0}){let[o,l]=(0,v.useState)(n);return v.default.createElement("div",{className:`settings-section-collapsible ${o?"open":""}`},v.default.createElement("button",{className:"section-header-btn",onClick:()=>l(!o),type:"button"},v.default.createElement("div",{className:"section-header-content"},v.default.createElement("span",{className:"section-title"},e),t&&v.default.createElement("span",{className:"section-description"},t)),v.default.createElement("svg",{className:`chevron-icon ${o?"rotated":""}`,width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},v.default.createElement("polyline",{points:"6 9 12 15 18 9"}))),o&&v.default.createElement("div",{className:"section-content"},r))}function wd({label:e,options:t,selectedValues:r,onToggle:n,onSelectAll:o,onSelectNone:l}){let i=t.every(s=>r.includes(s)),u=t.every(s=>!r.includes(s));return v.default.createElement("div",{className:"chip-group"},v.default.createElement("div",{className:"chip-group-header"},v.default.createElement("span",{className:"chip-group-label"},e),v.default.createElement("div",{className:"chip-group-actions"},v.default.createElement("button",{type:"button",className:`chip-action ${i?"active":""}`,onClick:o},"All"),v.default.createElement("button",{type:"button",className:`chip-action ${u?"active":""}`,onClick:l},"None"))),v.default.createElement("div",{className:"chips-container"},t.map(s=>v.default.createElement("button",{key:s,type:"button",className:`chip ${r.includes(s)?"selected":""}`,onClick:()=>n(s)},s))))}function mt({label:e,tooltip:t,children:r}){return v.default.createElement("div",{className:"form-field"},v.default.createElement("label",{className:"form-field-label"},e,t&&v.default.createElement("span",{className:"tooltip-trigger",title:t},v.default.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},v.default.createElement("circle",{cx:"12",cy:"12",r:"10"}),v.default.createElement("path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"}),v.default.createElement("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})))),r)}function zr({id:e,label:t,description:r,checked:n,onChange:o,disabled:l}){return v.default.createElement("div",{className:"toggle-row"},v.default.createElement("div",{className:"toggle-info"},v.default.createElement("label",{htmlFor:e,className:"toggle-label"},t),r&&v.default.createElement("span",{className:"toggle-description"},r)),v.default.createElement("button",{type:"button",id:e,role:"switch","aria-checked":n,className:`toggle-switch ${n?"on":""} ${l?"disabled":""}`,onClick:()=>!l&&o(!n),disabled:l},v.default.createElement("span",{className:"toggle-knob"})))}function _d({isOpen:e,onClose:t,settings:r,onSave:n,isSaving:o,saveStatus:l}){let[i,u]=(0,v.useState)(r),s=(0,v.useCallback)(Hg(h=>{n(h)},300),[n]);(0,v.useEffect)(()=>{u(r)},[r]);let{preview:a,isLoading:p,error:m,projects:g,selectedProject:w,setSelectedProject:_}=Sd(i),S=(0,v.useCallback)((h,C)=>{let N={...i,[h]:C};u(N),s(N)},[i,s]),L=(0,v.useCallback)(h=>{let N=i[h]==="true"?"false":"true";S(h,N)},[i,S]),d=(0,v.useCallback)((h,C)=>{let N=i[h]||"",U=N?N.split(","):[],x=U.includes(C)?U.filter(Ae=>Ae!==C):[...U,C];S(h,x.join(","))},[i,S]),c=(0,v.useCallback)(h=>{let C=i[h]||"";return C?C.split(","):[]},[i]),f=(0,v.useCallback)((h,C)=>{S(h,C.join(","))},[S]);if((0,v.useEffect)(()=>{let h=C=>{C.key==="Escape"&&t()};if(e)return window.addEventListener("keydown",h),()=>window.removeEventListener("keydown",h)},[e,t]),!e)return null;let y=["bugfix","feature","refactor","discovery","decision","change"],T=["how-it-works","why-it-exists","what-changed","problem-solution","gotcha","pattern","trade-off"];return v.default.createElement("div",{className:"modal-backdrop",onClick:t},v.default.createElement("div",{className:"context-settings-modal",onClick:h=>h.stopPropagation()},v.default.createElement("div",{className:"modal-header"},v.default.createElement("h2",null,"Settings"),v.default.createElement("div",{className:"header-controls"},v.default.createElement("label",{className:"preview-selector"},"Preview for:",v.default.createElement("select",{value:w||"",onChange:h=>_(h.target.value)},g.map(h=>v.default.createElement("option",{key:h,value:h},h)))),v.default.createElement("button",{onClick:t,className:"modal-close-btn",title:"Close (Esc)"},v.default.createElement("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},v.default.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),v.default.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))))),v.default.createElement("div",{className:"modal-body"},v.default.createElement("div",{className:"preview-column"},v.default.createElement("div",{className:"preview-content"},m?v.default.createElement("div",{style:{color:"#ff6b6b"}},"Error loading preview: ",m):v.default.createElement(Ed,{content:a,isLoading:p}))),v.default.createElement("div",{className:"settings-column"},v.default.createElement(pl,{title:"Loading",description:"How many observations to inject"},v.default.createElement(mt,{label:"Observations",tooltip:"Number of recent observations to include in context (1-200)"},v.default.createElement("input",{type:"number",min:"1",max:"200",value:i.CLAUDE_MEM_CONTEXT_OBSERVATIONS||"50",onChange:h=>S("CLAUDE_MEM_CONTEXT_OBSERVATIONS",h.target.value)})),v.default.createElement(mt,{label:"Sessions",tooltip:"Number of recent sessions to pull observations from (1-50)"},v.default.createElement("input",{type:"number",min:"1",max:"50",value:i.CLAUDE_MEM_CONTEXT_SESSION_COUNT||"10",onChange:h=>S("CLAUDE_MEM_CONTEXT_SESSION_COUNT",h.target.value)}))),v.default.createElement(pl,{title:"Filters",description:"Which observation types to include"},v.default.createElement(wd,{label:"Type",options:y,selectedValues:c("CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES"),onToggle:h=>d("CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES",h),onSelectAll:()=>f("CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES",y),onSelectNone:()=>f("CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES",[])}),v.default.createElement(wd,{label:"Concept",options:T,selectedValues:c("CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS"),onToggle:h=>d("CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS",h),onSelectAll:()=>f("CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS",T),onSelectNone:()=>f("CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS",[])})),v.default.createElement(pl,{title:"Display",description:"What to show in context tables"},v.default.createElement("div",{className:"display-subsection"},v.default.createElement("span",{className:"subsection-label"},"Full Observations"),v.default.createElement(mt,{label:"Count",tooltip:"How many observations show expanded details (0-20)"},v.default.createElement("input",{type:"number",min:"0",max:"20",value:i.CLAUDE_MEM_CONTEXT_FULL_COUNT||"5",onChange:h=>S("CLAUDE_MEM_CONTEXT_FULL_COUNT",h.target.value)})),v.default.createElement(mt,{label:"Field",tooltip:"Which field to expand for full observations"},v.default.createElement("select",{value:i.CLAUDE_MEM_CONTEXT_FULL_FIELD||"narrative",onChange:h=>S("CLAUDE_MEM_CONTEXT_FULL_FIELD",h.target.value)},v.default.createElement("option",{value:"narrative"},"Narrative"),v.default.createElement("option",{value:"facts"},"Facts")))),v.default.createElement("div",{className:"display-subsection"},v.default.createElement("span",{className:"subsection-label"},"Token Economics"),v.default.createElement("div",{className:"toggle-group"},v.default.createElement(zr,{id:"show-read-tokens",label:"Read cost",description:"Tokens to read this observation",checked:i.CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS==="true",onChange:()=>L("CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS")}),v.default.createElement(zr,{id:"show-work-tokens",label:"Work investment",description:"Tokens spent creating this observation",checked:i.CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS==="true",onChange:()=>L("CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS")}),v.default.createElement(zr,{id:"show-savings-amount",label:"Savings",description:"Total tokens saved by reusing context",checked:i.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT==="true",onChange:()=>L("CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT")})))),v.default.createElement(pl,{title:"Advanced",description:"AI provider and model selection",defaultOpen:!1},v.default.createElement(mt,{label:"AI Provider",tooltip:"Choose between Claude (via Agent SDK) or Gemini (via REST API)"},v.default.createElement("select",{value:i.CLAUDE_MEM_PROVIDER||"claude",onChange:h=>S("CLAUDE_MEM_PROVIDER",h.target.value)},v.default.createElement("option",{value:"claude"},"Claude (uses your Claude account)"),v.default.createElement("option",{value:"gemini"},"Gemini (uses API key)"))),i.CLAUDE_MEM_PROVIDER==="claude"?v.default.createElement(mt,{label:"Claude Model",tooltip:"Claude model used for generating observations"},v.default.createElement("select",{value:i.CLAUDE_MEM_MODEL||"haiku",onChange:h=>S("CLAUDE_MEM_MODEL",h.target.value)},v.default.createElement("option",{value:"haiku"},"haiku (fastest)"),v.default.createElement("option",{value:"sonnet"},"sonnet (balanced)"),v.default.createElement("option",{value:"opus"},"opus (highest quality)"))):v.default.createElement(v.default.Fragment,null,v.default.createElement(mt,{label:"Gemini API Key",tooltip:"Your Google AI Studio API key (or set GEMINI_API_KEY env var)"},v.default.createElement("input",{type:"password",value:i.CLAUDE_MEM_GEMINI_API_KEY||"",onChange:h=>S("CLAUDE_MEM_GEMINI_API_KEY",h.target.value),placeholder:"Enter Gemini API key..."})),v.default.createElement(mt,{label:"Gemini Model",tooltip:"Gemini model used for generating observations"},v.default.createElement("select",{value:i.CLAUDE_MEM_GEMINI_MODEL||"gemini-2.5-flash-lite",onChange:h=>S("CLAUDE_MEM_GEMINI_MODEL",h.target.value)},v.default.createElement("option",{value:"gemini-2.5-flash-lite"},"gemini-2.5-flash-lite (10 RPM free)"),v.default.createElement("option",{value:"gemini-2.5-flash"},"gemini-2.5-flash (5 RPM free)"),v.default.createElement("option",{value:"gemini-3-flash"},"gemini-3-flash (5 RPM free)"))),v.default.createElement("div",{className:"toggle-group",style:{marginTop:"8px"}},v.default.createElement(zr,{label:"Billing Enabled",tooltip:"Enable if you have billing set up on Google Cloud. Skips rate limiting (1000+ RPM available).",checked:i.CLAUDE_MEM_GEMINI_BILLING_ENABLED==="true",onChange:h=>S("CLAUDE_MEM_GEMINI_BILLING_ENABLED",h?"true":"false")}))),v.default.createElement(mt,{label:"Worker Port",tooltip:"Port for the background worker service"},v.default.createElement("input",{type:"number",min:"1024",max:"65535",value:i.CLAUDE_MEM_WORKER_PORT||"37777",onChange:h=>S("CLAUDE_MEM_WORKER_PORT",h.target.value)})),v.default.createElement("div",{className:"toggle-group",style:{marginTop:"12px"}},v.default.createElement(zr,{id:"show-last-summary",label:"Include last summary",description:"Add previous session's summary to context",checked:i.CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY==="true",onChange:()=>L("CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY")}),v.default.createElement(zr,{id:"show-last-message",label:"Include last message",description:"Add previous session's final message",checked:i.CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE==="true",onChange:()=>L("CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE")})))))))}var Oe=V(R(),1);var $e={OBSERVATIONS:"/api/observations",SUMMARIES:"/api/summaries",PROMPTS:"/api/prompts",SETTINGS:"/api/settings",STATS:"/api/stats",PROCESSING_STATUS:"/api/processing-status",STREAM:"/stream"};var ml={SSE_RECONNECT_DELAY_MS:3e3,STATS_REFRESH_INTERVAL_MS:1e4,SAVE_STATUS_DISPLAY_DURATION_MS:3e3};function Td(){let[e,t]=(0,Oe.useState)([]),[r,n]=(0,Oe.useState)([]),[o,l]=(0,Oe.useState)([]),[i,u]=(0,Oe.useState)([]),[s,a]=(0,Oe.useState)(!1),[p,m]=(0,Oe.useState)(!1),[g,w]=(0,Oe.useState)(0),_=(0,Oe.useRef)(null),S=(0,Oe.useRef)();return(0,Oe.useEffect)(()=>{let L=()=>{_.current&&_.current.close();let d=new EventSource($e.STREAM);_.current=d,d.onopen=()=>{console.log("[SSE] Connected"),a(!0),S.current&&clearTimeout(S.current)},d.onerror=c=>{console.error("[SSE] Connection error:",c),a(!1),d.close(),S.current=setTimeout(()=>{S.current=void 0,console.log("[SSE] Attempting to reconnect..."),L()},ml.SSE_RECONNECT_DELAY_MS)},d.onmessage=c=>{try{let f=JSON.parse(c.data);switch(f.type){case"initial_load":console.log("[SSE] Initial load:",{projects:f.projects?.length||0}),u(f.projects||[]);break;case"new_observation":f.observation&&(console.log("[SSE] New observation:",f.observation.id),t(y=>[f.observation,...y]));break;case"new_summary":if(f.summary){let y=f.summary;console.log("[SSE] New summary:",y.id),n(T=>[y,...T])}break;case"new_prompt":if(f.prompt){let y=f.prompt;console.log("[SSE] New prompt:",y.id),l(T=>[y,...T])}break;case"processing_status":typeof f.isProcessing=="boolean"&&(console.log("[SSE] Processing status:",f.isProcessing,"Queue depth:",f.queueDepth),m(f.isProcessing),w(f.queueDepth||0));break}}catch(f){console.error("[SSE] Failed to parse message:",f)}}};return L(),()=>{_.current&&_.current.close(),S.current&&clearTimeout(S.current)}},[]),{observations:e,summaries:r,prompts:o,projects:i,isProcessing:p,queueDepth:g,isConnected:s}}var jr=V(R(),1);var Y={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_PROVIDER:"claude",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_BILLING_ENABLED:"false",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:"bugfix,feature,refactor,discovery,decision,change",CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:"how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off",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"};function Cd(){let[e,t]=(0,jr.useState)(Y),[r,n]=(0,jr.useState)(!1),[o,l]=(0,jr.useState)("");return(0,jr.useEffect)(()=>{fetch($e.SETTINGS).then(u=>u.json()).then(u=>{t({CLAUDE_MEM_MODEL:u.CLAUDE_MEM_MODEL||Y.CLAUDE_MEM_MODEL,CLAUDE_MEM_CONTEXT_OBSERVATIONS:u.CLAUDE_MEM_CONTEXT_OBSERVATIONS||Y.CLAUDE_MEM_CONTEXT_OBSERVATIONS,CLAUDE_MEM_WORKER_PORT:u.CLAUDE_MEM_WORKER_PORT||Y.CLAUDE_MEM_WORKER_PORT,CLAUDE_MEM_WORKER_HOST:u.CLAUDE_MEM_WORKER_HOST||Y.CLAUDE_MEM_WORKER_HOST,CLAUDE_MEM_PROVIDER:u.CLAUDE_MEM_PROVIDER||Y.CLAUDE_MEM_PROVIDER,CLAUDE_MEM_GEMINI_API_KEY:u.CLAUDE_MEM_GEMINI_API_KEY||Y.CLAUDE_MEM_GEMINI_API_KEY,CLAUDE_MEM_GEMINI_MODEL:u.CLAUDE_MEM_GEMINI_MODEL||Y.CLAUDE_MEM_GEMINI_MODEL,CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:u.CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS||Y.CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS,CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:u.CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS||Y.CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS,CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:u.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT||Y.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT,CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:u.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT||Y.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT,CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:u.CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES||Y.CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:u.CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS||Y.CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS,CLAUDE_MEM_CONTEXT_FULL_COUNT:u.CLAUDE_MEM_CONTEXT_FULL_COUNT||Y.CLAUDE_MEM_CONTEXT_FULL_COUNT,CLAUDE_MEM_CONTEXT_FULL_FIELD:u.CLAUDE_MEM_CONTEXT_FULL_FIELD||Y.CLAUDE_MEM_CONTEXT_FULL_FIELD,CLAUDE_MEM_CONTEXT_SESSION_COUNT:u.CLAUDE_MEM_CONTEXT_SESSION_COUNT||Y.CLAUDE_MEM_CONTEXT_SESSION_COUNT,CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:u.CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY||Y.CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY,CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:u.CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE||Y.CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE})}).catch(u=>{console.error("Failed to load settings:",u)})},[]),{settings:e,saveSettings:async u=>{n(!0),l("Saving...");try{let a=await(await fetch($e.SETTINGS,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)})).json();a.success?(t(u),l("\u2713 Saved"),setTimeout(()=>l(""),ml.SAVE_STATUS_DISPLAY_DURATION_MS)):l(`\u2717 Error: ${a.error}`)}catch(s){l(`\u2717 Error: ${s instanceof Error?s.message:"Unknown error"}`)}finally{n(!1)}},isSaving:r,saveStatus:o}}var Hr=V(R(),1);function kd(){let[e,t]=(0,Hr.useState)({}),r=(0,Hr.useCallback)(async()=>{try{let o=await(await fetch($e.STATS)).json();t(o)}catch(n){console.error("Failed to load stats:",n)}},[]);return(0,Hr.useEffect)(()=>{r()},[r]),{stats:e,refreshStats:r}}var Rt=V(R(),1);function Bu(e,t,r){let[n,o]=(0,Rt.useState)({isLoading:!1,hasMore:!0}),l=(0,Rt.useRef)(0),i=(0,Rt.useRef)(r),u=(0,Rt.useRef)(n),s=(0,Rt.useCallback)(async()=>{let a=i.current!==r;if(a){l.current=0,i.current=r;let p={isLoading:!1,hasMore:!0};o(p),u.current=p}if(!a&&(u.current.isLoading||!u.current.hasMore))return[];o(p=>({...p,isLoading:!0}));try{let p=new URLSearchParams({offset:l.current.toString(),limit:Un.PAGINATION_PAGE_SIZE.toString()});r&&p.append("project",r);let m=await fetch(`${e}?${p}`);if(!m.ok)throw new Error(`Failed to load ${t}: ${m.statusText}`);let g=await m.json();return o(w=>({...w,isLoading:!1,hasMore:g.hasMore})),l.current+=Un.PAGINATION_PAGE_SIZE,g.items}catch(p){return console.error(`Failed to load ${t}:`,p),o(m=>({...m,isLoading:!1})),[]}},[r,e,t]);return{...n,loadMore:s}}function Nd(e){let t=Bu($e.OBSERVATIONS,"observations",e),r=Bu($e.SUMMARIES,"summaries",e),n=Bu($e.PROMPTS,"prompts",e);return{observations:t,summaries:r,prompts:n}}var qr=V(R(),1),Md="claude-mem-theme";function qg(){return typeof window>"u"||window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function xd(){try{let e=localStorage.getItem(Md);if(e==="system"||e==="light"||e==="dark")return e}catch(e){console.warn("Failed to read theme preference from localStorage:",e)}return"system"}function Ld(e){return e==="system"?qg():e}function Od(){let[e,t]=(0,qr.useState)(xd),[r,n]=(0,qr.useState)(()=>Ld(xd()));return(0,qr.useEffect)(()=>{let l=Ld(e);n(l),document.documentElement.setAttribute("data-theme",l)},[e]),(0,qr.useEffect)(()=>{if(e!=="system")return;let l=window.matchMedia("(prefers-color-scheme: dark)"),i=u=>{let s=u.matches?"dark":"light";n(s),document.documentElement.setAttribute("data-theme",s)};return l.addEventListener("change",i),()=>l.removeEventListener("change",i)},[e]),{preference:e,resolvedTheme:r,setThemePreference:l=>{try{localStorage.setItem(Md,l),t(l)}catch(i){console.warn("Failed to save theme preference to localStorage:",i),t(l)}}}}function gl(e,t){let r=new Set;return[...e,...t].filter(n=>r.has(n.id)?!1:(r.add(n.id),!0))}function Ad(){let[e,t]=(0,K.useState)(""),[r,n]=(0,K.useState)(!1),[o,l]=(0,K.useState)([]),[i,u]=(0,K.useState)([]),[s,a]=(0,K.useState)([]),{observations:p,summaries:m,prompts:g,projects:w,isProcessing:_,queueDepth:S,isConnected:L}=Td(),{settings:d,saveSettings:c,isSaving:f,saveStatus:y}=Cd(),{stats:T,refreshStats:h}=kd(),{preference:C,resolvedTheme:N,setThemePreference:U}=Od(),x=Nd(e),Ae=(0,K.useMemo)(()=>e?o:gl(p,o),[p,o,e]),vl=(0,K.useMemo)(()=>e?i:gl(m,i),[m,i,e]),Id=(0,K.useMemo)(()=>e?s:gl(g,s),[g,s,e]),Gu=(0,K.useCallback)(()=>{n(lr=>!lr)},[]),Xu=(0,K.useCallback)(async()=>{try{let[lr,bu,$u]=await Promise.all([x.observations.loadMore(),x.summaries.loadMore(),x.prompts.loadMore()]);lr.length>0&&l(Vr=>[...Vr,...lr]),bu.length>0&&u(Vr=>[...Vr,...bu]),$u.length>0&&a(Vr=>[...Vr,...$u])}catch(lr){console.error("Failed to load more data:",lr)}},[e,x.observations,x.summaries,x.prompts]);return(0,K.useEffect)(()=>{l([]),u([]),a([]),Xu()},[e]),K.default.createElement(K.default.Fragment,null,K.default.createElement(Ff,{isConnected:L,projects:w,currentFilter:e,onFilterChange:t,isProcessing:_,queueDepth:S,themePreference:C,onThemeChange:U,onContextPreviewToggle:Gu}),K.default.createElement(Rf,{observations:Ae,summaries:vl,prompts:Id,onLoadMore:Xu,isLoading:x.observations.isLoading||x.summaries.isLoading||x.prompts.isLoading,hasMore:x.observations.hasMore||x.summaries.hasMore||x.prompts.hasMore}),K.default.createElement(_d,{isOpen:r,onClose:Gu,settings:d,onSave:c,isSaving:f,saveStatus:y}))}var gt=V(R(),1),hl=class extends gt.Component{constructor(t){super(t),this.state={hasError:!1,error:null,errorInfo:null}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,r){console.error("[ErrorBoundary] Caught error:",t,r),this.setState({error:t,errorInfo:r})}render(){return this.state.hasError?gt.default.createElement("div",{style:{padding:"20px",color:"#ff6b6b",backgroundColor:"#1a1a1a",minHeight:"100vh"}},gt.default.createElement("h1",{style:{fontSize:"24px",marginBottom:"10px"}},"Something went wrong"),gt.default.createElement("p",{style:{marginBottom:"10px",color:"#8b949e"}},"The application encountered an error. Please refresh the page to try again."),this.state.error&>.default.createElement("details",{style:{marginTop:"20px",color:"#8b949e"}},gt.default.createElement("summary",{style:{cursor:"pointer",marginBottom:"10px"}},"Error details"),gt.default.createElement("pre",{style:{backgroundColor:"#0d1117",padding:"10px",borderRadius:"6px",overflow:"auto"}},this.state.error.toString(),this.state.errorInfo&&` +In order to be iterable, non-array objects must have a [Symbol.iterator]() method.`)}var l=!0,i=!1,u;return{s:function(){r=r.call(e)},n:function(){var a=r.next();return l=a.done,a},e:function(a){i=!0,u=a},f:function(){try{!l&&r.return!=null&&r.return()}finally{if(i)throw u}}}}function Ng(e,t){if(e){if(typeof e=="string")return sd(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);if(r==="Object"&&e.constructor&&(r=e.constructor.name),r==="Map"||r==="Set")return Array.from(e);if(r==="Arguments"||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r))return sd(e,t)}}function sd(e,t){(t==null||t>e.length)&&(t=e.length);for(var r=0,n=new Array(t);r0?e*40+55:0,i=t>0?t*40+55:0,u=r>0?r*40+55:0;n[o]=Og([l,i,u])}function md(e){for(var t=e.toString(16);t.length<2;)t="0"+t;return t}function Og(e){var t=[],r=pd(e),n;try{for(r.s();!(n=r.n()).done;){var o=n.value;t.push(md(o))}}catch(l){r.e(l)}finally{r.f()}return"#"+t.join("")}function cd(e,t,r,n){var o;return t==="text"?o=Ig(r,n):t==="display"?o=Dg(e,r,n):t==="xterm256Foreground"?o=fl(e,n.colors[r]):t==="xterm256Background"?o=dl(e,n.colors[r]):t==="rgb"&&(o=Ag(e,r)),o}function Ag(e,t){t=t.substring(2).slice(0,-1);var r=+t.substr(0,2),n=t.substring(5).split(";"),o=n.map(function(l){return("0"+Number(l).toString(16)).substr(-2)}).join("");return cl(e,(r===38?"color:#":"background-color:#")+o)}function Dg(e,t,r){t=parseInt(t,10);var n={"-1":function(){return"
"},0:function(){return e.length&&gd(e)},1:function(){return Vt(e,"b")},3:function(){return Vt(e,"i")},4:function(){return Vt(e,"u")},8:function(){return cl(e,"display:none")},9:function(){return Vt(e,"strike")},22:function(){return cl(e,"font-weight:normal;text-decoration:none;font-style:normal")},23:function(){return dd(e,"i")},24:function(){return dd(e,"u")},39:function(){return fl(e,r.fg)},49:function(){return dl(e,r.bg)},53:function(){return cl(e,"text-decoration:overline")}},o;return n[t]?o=n[t]():4"}).join("")}function al(e,t){for(var r=[],n=e;n<=t;n++)r.push(n);return r}function Pg(e){return function(t){return(e===null||t.category!==e)&&e!=="all"}}function fd(e){e=parseInt(e,10);var t=null;return e===0?t="all":e===1?t="bold":2")}function cl(e,t){return Vt(e,"span",t)}function fl(e,t){return Vt(e,"span","color:"+t)}function dl(e,t){return Vt(e,"span","background-color:"+t)}function dd(e,t){var r;if(e.slice(-1)[0]===t&&(r=e.pop()),r)return""}function Ug(e,t,r){var n=!1,o=3;function l(){return""}function i(T,h){return r("xterm256Foreground",h),""}function u(T,h){return r("xterm256Background",h),""}function s(T){return t.newline?r("display",-1):r("text",T),""}function a(T,h){n=!0,h.trim().length===0&&(h="0"),h=h.trimRight(";").split(";");var C=pd(h),N;try{for(C.s();!(N=C.n()).done;){var U=N.value;r("display",U)}}catch(x){C.e(x)}finally{C.f()}return""}function p(T){return r("text",T),""}function m(T){return r("rgb",T),""}var g=[{pattern:/^\x08+/,sub:l},{pattern:/^\x1b\[[012]?K/,sub:l},{pattern:/^\x1b\[\(B/,sub:l},{pattern:/^\x1b\[[34]8;2;\d+;\d+;\d+m/,sub:m},{pattern:/^\x1b\[38;5;(\d+)m/,sub:i},{pattern:/^\x1b\[48;5;(\d+)m/,sub:u},{pattern:/^\n/,sub:s},{pattern:/^\r+\n/,sub:s},{pattern:/^\r/,sub:s},{pattern:/^\x1b\[((?:\d{1,3};?)+|)m/,sub:a},{pattern:/^\x1b\[\d?J/,sub:l},{pattern:/^\x1b\[\d{0,3};\d{0,3}f/,sub:l},{pattern:/^\x1b\[?[\d;]{0,3}/,sub:l},{pattern:/^(([^\x1b\x08\r\n])+)/,sub:p}];function w(T,h){h>o&&n||(n=!1,e=e.replace(T.pattern,T.sub))}var _=[],S=e,L=S.length;e:for(;L>0;){for(var d=0,c=0,f=g.length;c{let l=["system","light","dark"],u=(l.indexOf(e)+1)%l.length;t(l[u])},n=()=>{switch(e){case"light":return ne.default.createElement("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},ne.default.createElement("circle",{cx:"12",cy:"12",r:"5"}),ne.default.createElement("line",{x1:"12",y1:"1",x2:"12",y2:"3"}),ne.default.createElement("line",{x1:"12",y1:"21",x2:"12",y2:"23"}),ne.default.createElement("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"}),ne.default.createElement("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"}),ne.default.createElement("line",{x1:"1",y1:"12",x2:"3",y2:"12"}),ne.default.createElement("line",{x1:"21",y1:"12",x2:"23",y2:"12"}),ne.default.createElement("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"}),ne.default.createElement("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"}));case"dark":return ne.default.createElement("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},ne.default.createElement("path",{d:"M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"}));case"system":default:return ne.default.createElement("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},ne.default.createElement("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"}),ne.default.createElement("line",{x1:"8",y1:"21",x2:"16",y2:"21"}),ne.default.createElement("line",{x1:"12",y1:"17",x2:"12",y2:"21"}))}},o=()=>{switch(e){case"light":return"Theme: Light (click for Dark)";case"dark":return"Theme: Dark (click for System)";case"system":default:return"Theme: System (click for Light)"}};return ne.default.createElement("button",{className:"theme-toggle-btn",onClick:r,title:o(),"aria-label":o()},n())}var tt=V(R(),1);var zt=V(R(),1);function Df(e,t){let[r,n]=(0,zt.useState)(null),[o,l]=(0,zt.useState)(!0),[i,u]=(0,zt.useState)(null),s=(0,zt.useCallback)(async()=>{try{l(!0),u(null);let a=await fetch(`https://api.github.com/repos/${e}/${t}`);if(!a.ok)throw new Error(`GitHub API error: ${a.status}`);let p=await a.json();n(p.stargazers_count)}catch(a){console.error("Failed to fetch GitHub stars:",a),u(a instanceof Error?a:new Error("Unknown error"))}finally{l(!1)}},[e,t]);return(0,zt.useEffect)(()=>{s()},[s]),{stars:r,isLoading:o,error:i}}function Pf(e){return e<1e3?e.toString():e<1e6?`${(e/1e3).toFixed(1)}k`:`${(e/1e6).toFixed(1)}M`}function If({username:e,repo:t,className:r=""}){let{stars:n,isLoading:o,error:l}=Df(e,t),i=`https://github.com/${e}/${t}`;return l?tt.default.createElement("a",{href:i,target:"_blank",rel:"noopener noreferrer",title:"GitHub",className:"icon-link"},tt.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor"},tt.default.createElement("path",{d:"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"}))):tt.default.createElement("a",{href:i,target:"_blank",rel:"noopener noreferrer",className:`github-stars-btn ${r}`,title:`Star us on GitHub${n!==null?` (${n.toLocaleString()} stars)`:""}`},tt.default.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor",style:{marginRight:"6px"}},tt.default.createElement("path",{d:"M12 0c-6.626 0-12 5.373-12 12 0 5.302 3.438 9.8 8.207 11.387.599.111.793-.261.793-.577v-2.234c-3.338.726-4.033-1.416-4.033-1.416-.546-1.387-1.333-1.756-1.333-1.756-1.089-.745.083-.729.083-.729 1.205.084 1.839 1.237 1.839 1.237 1.07 1.834 2.807 1.304 3.492.997.107-.775.418-1.305.762-1.604-2.665-.305-5.467-1.334-5.467-5.931 0-1.311.469-2.381 1.236-3.221-.124-.303-.535-1.524.117-3.176 0 0 1.008-.322 3.301 1.23.957-.266 1.983-.399 3.003-.404 1.02.005 2.047.138 3.006.404 2.291-1.552 3.297-1.23 3.297-1.23.653 1.653.242 2.874.118 3.176.77.84 1.235 1.911 1.235 3.221 0 4.609-2.807 5.624-5.479 5.921.43.372.823 1.102.823 2.222v3.293c0 .319.192.694.801.576 4.765-1.589 8.199-6.086 8.199-11.386 0-6.627-5.373-12-12-12z"})),tt.default.createElement("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"currentColor",style:{marginRight:"4px"}},tt.default.createElement("path",{d:"M12 .587l3.668 7.431 8.2 1.192-5.934 5.787 1.4 8.166L12 18.896l-7.334 3.867 1.4-8.166-5.934-5.787 8.2-1.192z"})),tt.default.createElement("span",{className:o?"stars-loading":"stars-count"},o?"...":n!==null?Pf(n):"\u2014"))}var jt=V(R(),1);function Uf(e){let t=(0,jt.useRef)(null),r=(0,jt.useRef)(null),n=(0,jt.useRef)(null),o=(0,jt.useRef)(0),l=(0,jt.useRef)(null);(0,jt.useEffect)(()=>{if(r.current||(r.current=document.createElement("canvas"),r.current.width=32,r.current.height=32),n.current||(n.current=new Image,n.current.src="claude-mem-logomark.webp"),!l.current){let m=document.querySelector('link[rel="icon"]');m&&(l.current=m.href)}let i=r.current,u=i.getContext("2d"),s=n.current;if(!u)return;let a=m=>{let g=document.querySelector('link[rel="icon"]');g||(g=document.createElement("link"),g.rel="icon",document.head.appendChild(g)),g.href=m},p=()=>{if(!s.complete){t.current=requestAnimationFrame(p);return}o.current+=2*Math.PI/90,u.clearRect(0,0,32,32),u.save(),u.translate(16,16),u.rotate(o.current),u.drawImage(s,-16,-16,32,32),u.restore(),a(i.toDataURL("image/png")),t.current=requestAnimationFrame(p)};return e?(o.current=0,p()):(t.current&&(cancelAnimationFrame(t.current),t.current=null),l.current&&a(l.current)),()=>{t.current&&(cancelAnimationFrame(t.current),t.current=null)}},[e])}function Ff({isConnected:e,projects:t,currentFilter:r,onFilterChange:n,isProcessing:o,queueDepth:l,themePreference:i,onThemeChange:u,onContextPreviewToggle:s}){return Uf(o),I.default.createElement("div",{className:"header"},I.default.createElement("h1",null,I.default.createElement("div",{style:{position:"relative",display:"inline-block"}},I.default.createElement("img",{src:"claude-mem-logomark.webp",alt:"",className:`logomark ${o?"spinning":""}`}),l>0&&I.default.createElement("div",{className:"queue-bubble"},l)),I.default.createElement("span",{className:"logo-text"},"claude-mem")),I.default.createElement("div",{className:"status"},I.default.createElement("a",{href:"https://docs.claude-mem.ai",target:"_blank",rel:"noopener noreferrer",className:"icon-link",title:"Documentation"},I.default.createElement("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},I.default.createElement("path",{d:"M4 19.5A2.5 2.5 0 0 1 6.5 17H20"}),I.default.createElement("path",{d:"M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"}))),I.default.createElement("a",{href:"https://x.com/Claude_Memory",target:"_blank",rel:"noopener noreferrer",className:"icon-link",title:"Follow us on X"},I.default.createElement("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"currentColor"},I.default.createElement("path",{d:"M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"}))),I.default.createElement("a",{href:"https://discord.gg/J4wttp9vDu",target:"_blank",rel:"noopener noreferrer",className:"icon-link",title:"Join our Discord community"},I.default.createElement("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"currentColor"},I.default.createElement("path",{d:"M20.317 4.37a19.791 19.791 0 0 0-4.885-1.515a.074.074 0 0 0-.079.037c-.21.375-.444.864-.608 1.25a18.27 18.27 0 0 0-5.487 0a12.64 12.64 0 0 0-.617-1.25a.077.077 0 0 0-.079-.037A19.736 19.736 0 0 0 3.677 4.37a.07.07 0 0 0-.032.027C.533 9.046-.32 13.58.099 18.057a.082.082 0 0 0 .031.057a19.9 19.9 0 0 0 5.993 3.03a.078.078 0 0 0 .084-.028a14.09 14.09 0 0 0 1.226-1.994a.076.076 0 0 0-.041-.106a13.107 13.107 0 0 1-1.872-.892a.077.077 0 0 1-.008-.128a10.2 10.2 0 0 0 .372-.292a.074.074 0 0 1 .077-.01c3.928 1.793 8.18 1.793 12.062 0a.074.074 0 0 1 .078.01c.12.098.246.198.373.292a.077.077 0 0 1-.006.127a12.299 12.299 0 0 1-1.873.892a.077.077 0 0 0-.041.107c.36.698.772 1.362 1.225 1.993a.076.076 0 0 0 .084.028a19.839 19.839 0 0 0 6.002-3.03a.077.077 0 0 0 .032-.054c.5-5.177-.838-9.674-3.549-13.66a.061.061 0 0 0-.031-.03zM8.02 15.33c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.956-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.956 2.418-2.157 2.418zm7.975 0c-1.183 0-2.157-1.085-2.157-2.419c0-1.333.955-2.419 2.157-2.419c1.21 0 2.176 1.096 2.157 2.42c0 1.333-.946 2.418-2.157 2.418z"}))),I.default.createElement(If,{username:"thedotmack",repo:"claude-mem"}),I.default.createElement("select",{value:r,onChange:a=>n(a.target.value)},I.default.createElement("option",{value:""},"All Projects"),t.map(a=>I.default.createElement("option",{key:a,value:a},a))),I.default.createElement(Af,{preference:i,onThemeChange:u}),I.default.createElement("button",{className:"settings-btn",onClick:s,title:"Settings"},I.default.createElement("svg",{className:"settings-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},I.default.createElement("path",{d:"M12.22 2h-.44a2 2 0 0 0-2 2v.18a2 2 0 0 1-1 1.73l-.43.25a2 2 0 0 1-2 0l-.15-.08a2 2 0 0 0-2.73.73l-.22.38a2 2 0 0 0 .73 2.73l.15.1a2 2 0 0 1 1 1.72v.51a2 2 0 0 1-1 1.74l-.15.09a2 2 0 0 0-.73 2.73l.22.38a2 2 0 0 0 2.73.73l.15-.08a2 2 0 0 1 2 0l.43.25a2 2 0 0 1 1 1.73V20a2 2 0 0 0 2 2h.44a2 2 0 0 0 2-2v-.18a2 2 0 0 1 1-1.73l.43-.25a2 2 0 0 1 2 0l.15.08a2 2 0 0 0 2.73-.73l.22-.39a2 2 0 0 0-.73-2.73l-.15-.08a2 2 0 0 1-1-1.74v-.5a2 2 0 0 1 1-1.74l.15-.09a2 2 0 0 0 .73-2.73l-.22-.38a2 2 0 0 0-2.73-.73l-.15.08a2 2 0 0 1-2 0l-.43-.25a2 2 0 0 1-1-1.73V4a2 2 0 0 0-2-2z"}),I.default.createElement("circle",{cx:"12",cy:"12",r:"3"})))))}var $=V(R(),1);var A=V(R(),1);function Fr(e){return new Date(e).toLocaleString()}function zf(e){let t=["/Scripts/","/src/","/plugin/","/docs/"];for(let o of t){let l=e.indexOf(o);if(l!==-1)return e.substring(l+1)}let r=e.indexOf("claude-mem/");if(r!==-1)return e.substring(r+11);let n=e.split("/");return n.length>3?n.slice(-3).join("/"):e}function jf({observation:e}){let[t,r]=(0,A.useState)(!1),[n,o]=(0,A.useState)(!1),l=Fr(e.created_at_epoch),i=e.facts?JSON.parse(e.facts):[],u=e.concepts?JSON.parse(e.concepts):[],s=e.files_read?JSON.parse(e.files_read).map(zf):[],a=e.files_modified?JSON.parse(e.files_modified).map(zf):[],p=i.length>0||u.length>0||s.length>0||a.length>0;return A.default.createElement("div",{className:"card"},A.default.createElement("div",{className:"card-header"},A.default.createElement("div",{className:"card-header-left"},A.default.createElement("span",{className:`card-type type-${e.type}`},e.type),A.default.createElement("span",{className:"card-project"},e.project)),A.default.createElement("div",{className:"view-mode-toggles"},p&&A.default.createElement("button",{className:`view-mode-toggle ${t?"active":""}`,onClick:()=>{r(!t),t||o(!1)}},A.default.createElement("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},A.default.createElement("polyline",{points:"9 11 12 14 22 4"}),A.default.createElement("path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"})),A.default.createElement("span",null,"facts")),e.narrative&&A.default.createElement("button",{className:`view-mode-toggle ${n?"active":""}`,onClick:()=>{o(!n),n||r(!1)}},A.default.createElement("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},A.default.createElement("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),A.default.createElement("polyline",{points:"14 2 14 8 20 8"}),A.default.createElement("line",{x1:"16",y1:"13",x2:"8",y2:"13"}),A.default.createElement("line",{x1:"16",y1:"17",x2:"8",y2:"17"})),A.default.createElement("span",null,"narrative")))),A.default.createElement("div",{className:"card-title"},e.title||"Untitled"),A.default.createElement("div",{className:"view-mode-content"},!t&&!n&&e.subtitle&&A.default.createElement("div",{className:"card-subtitle"},e.subtitle),t&&i.length>0&&A.default.createElement("ul",{className:"facts-list"},i.map((m,g)=>A.default.createElement("li",{key:g},m))),n&&e.narrative&&A.default.createElement("div",{className:"narrative"},e.narrative)),A.default.createElement("div",{className:"card-meta"},A.default.createElement("span",{className:"meta-date"},"#",e.id," \u2022 ",l),t&&(u.length>0||s.length>0||a.length>0)&&A.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px",alignItems:"center"}},u.map((m,g)=>A.default.createElement("span",{key:g,style:{padding:"2px 8px",background:"var(--color-type-badge-bg)",color:"var(--color-type-badge-text)",borderRadius:"3px",fontWeight:"500",fontSize:"10px"}},m)),s.length>0&&A.default.createElement("span",{className:"meta-files"},A.default.createElement("span",{className:"file-label"},"read:")," ",s.join(", ")),a.length>0&&A.default.createElement("span",{className:"meta-files"},A.default.createElement("span",{className:"file-label"},"modified:")," ",a.join(", ")))))}var ue=V(R(),1);function Hf({summary:e}){let t=Fr(e.created_at_epoch),r=[{key:"investigated",label:"Investigated",content:e.investigated,icon:"/icon-thick-investigated.svg"},{key:"learned",label:"Learned",content:e.learned,icon:"/icon-thick-learned.svg"},{key:"completed",label:"Completed",content:e.completed,icon:"/icon-thick-completed.svg"},{key:"next_steps",label:"Next Steps",content:e.next_steps,icon:"/icon-thick-next-steps.svg"}].filter(n=>n.content);return ue.default.createElement("article",{className:"card summary-card"},ue.default.createElement("header",{className:"summary-card-header"},ue.default.createElement("div",{className:"summary-badge-row"},ue.default.createElement("span",{className:"card-type summary-badge"},"Session Summary"),ue.default.createElement("span",{className:"summary-project-badge"},e.project)),e.request&&ue.default.createElement("h2",{className:"summary-title"},e.request)),ue.default.createElement("div",{className:"summary-sections"},r.map((n,o)=>ue.default.createElement("section",{key:n.key,className:"summary-section",style:{animationDelay:`${o*50}ms`}},ue.default.createElement("div",{className:"summary-section-header"},ue.default.createElement("img",{src:n.icon,alt:n.label,className:`summary-section-icon summary-section-icon--${n.key}`}),ue.default.createElement("h3",{className:"summary-section-label"},n.label)),ue.default.createElement("div",{className:"summary-section-content"},n.content)))),ue.default.createElement("footer",{className:"summary-card-footer"},ue.default.createElement("span",{className:"summary-meta-id"},"Session #",e.id),ue.default.createElement("span",{className:"summary-meta-divider"},"\u2022"),ue.default.createElement("time",{className:"summary-meta-date",dateTime:new Date(e.created_at_epoch).toISOString()},t)))}var pt=V(R(),1);function qf({prompt:e}){let t=Fr(e.created_at_epoch);return pt.default.createElement("div",{className:"card prompt-card"},pt.default.createElement("div",{className:"card-header"},pt.default.createElement("div",{className:"card-header-left"},pt.default.createElement("span",{className:"card-type"},"Prompt"),pt.default.createElement("span",{className:"card-project"},e.project))),pt.default.createElement("div",{className:"card-content"},e.prompt_text),pt.default.createElement("div",{className:"card-meta"},pt.default.createElement("span",{className:"meta-date"},"#",e.id," \u2022 ",t)))}var Ht=V(R(),1);function Vf({targetRef:e}){let[t,r]=(0,Ht.useState)(!1);(0,Ht.useEffect)(()=>{let o=()=>{let i=e.current;i&&r(i.scrollTop>300)},l=e.current;if(l)return l.addEventListener("scroll",o),()=>l.removeEventListener("scroll",o)},[]);let n=()=>{let o=e.current;o&&o.scrollTo({top:0,behavior:"smooth"})};return t?Ht.default.createElement("button",{onClick:n,className:"scroll-to-top","aria-label":"Scroll to top"},Ht.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},Ht.default.createElement("polyline",{points:"18 15 12 9 6 15"}))):null}var Un={PAGINATION_PAGE_SIZE:50,LOAD_MORE_THRESHOLD:.1};function Rf({observations:e,summaries:t,prompts:r,onLoadMore:n,isLoading:o,hasMore:l}){let i=(0,$.useRef)(null),u=(0,$.useRef)(null),s=(0,$.useRef)(n);(0,$.useEffect)(()=>{s.current=n},[n]),(0,$.useEffect)(()=>{let p=i.current;if(!p)return;let m=new IntersectionObserver(g=>{g[0].isIntersecting&&l&&!o&&s.current?.()},{threshold:Un.LOAD_MORE_THRESHOLD});return m.observe(p),()=>{p&&m.unobserve(p),m.disconnect()}},[l,o]);let a=(0,$.useMemo)(()=>[...e.map(m=>({...m,itemType:"observation"})),...t.map(m=>({...m,itemType:"summary"})),...r.map(m=>({...m,itemType:"prompt"}))].sort((m,g)=>g.created_at_epoch-m.created_at_epoch),[e,t,r]);return $.default.createElement("div",{className:"feed",ref:u},$.default.createElement(Vf,{targetRef:u}),$.default.createElement("div",{className:"feed-content"},a.map(p=>{let m=`${p.itemType}-${p.id}`;return p.itemType==="observation"?$.default.createElement(jf,{key:m,observation:p}):p.itemType==="summary"?$.default.createElement(Hf,{key:m,summary:p}):$.default.createElement(qf,{key:m,prompt:p})}),a.length===0&&!o&&$.default.createElement("div",{style:{textAlign:"center",padding:"40px",color:"#8b949e"}},"No items to display"),o&&$.default.createElement("div",{style:{textAlign:"center",padding:"20px",color:"#8b949e"}},$.default.createElement("div",{className:"spinner",style:{display:"inline-block",marginRight:"10px"}}),"Loading more..."),l&&!o&&a.length>0&&$.default.createElement("div",{ref:i,style:{height:"20px",margin:"10px 0"}}),!l&&a.length>0&&$.default.createElement("div",{style:{textAlign:"center",padding:"20px",color:"#8b949e",fontSize:"14px"}},"No more items to load")))}var v=V(R(),1);var ee=V(R(),1),yd=V(vd(),1),jg=new yd.default({fg:"#dcd6cc",bg:"#252320",newline:!1,escapeXML:!0,stream:!1});function Ed({content:e,isLoading:t=!1,className:r=""}){let n=(0,ee.useRef)(null),o=(0,ee.useRef)(0),[l,i]=(0,ee.useState)(!0),u=(0,ee.useMemo)(()=>(n.current&&(o.current=n.current.scrollTop),e?jg.toHtml(e):""),[e]);return(0,ee.useLayoutEffect)(()=>{n.current&&o.current>0&&(n.current.scrollTop=o.current)},[u]),ee.default.createElement("div",{className:r,style:{backgroundColor:"var(--color-bg-card)",border:"1px solid var(--color-border-primary)",borderRadius:"8px",overflow:"hidden",height:"100%",display:"flex",flexDirection:"column",boxShadow:"0 10px 40px rgba(0, 0, 0, 0.4), 0 4px 12px rgba(0, 0, 0, 0.3)"}},ee.default.createElement("div",{style:{padding:"12px",borderBottom:"1px solid var(--color-border-primary)",display:"flex",gap:"6px",alignItems:"center",backgroundColor:"var(--color-bg-header)"}},ee.default.createElement("div",{style:{width:"12px",height:"12px",borderRadius:"50%",backgroundColor:"#ff5f57"}}),ee.default.createElement("div",{style:{width:"12px",height:"12px",borderRadius:"50%",backgroundColor:"#ffbd2e"}}),ee.default.createElement("div",{style:{width:"12px",height:"12px",borderRadius:"50%",backgroundColor:"#28c840"}}),ee.default.createElement("button",{onClick:()=>i(!l),style:{marginLeft:"auto",padding:"4px 8px",fontSize:"11px",fontWeight:500,color:l?"var(--color-text-secondary)":"var(--color-accent-primary)",backgroundColor:"transparent",border:"1px solid",borderColor:l?"var(--color-border-primary)":"var(--color-accent-primary)",borderRadius:"4px",cursor:"pointer",transition:"all 0.2s",whiteSpace:"nowrap"},onMouseEnter:a=>{a.currentTarget.style.borderColor="var(--color-accent-primary)",a.currentTarget.style.color="var(--color-accent-primary)"},onMouseLeave:a=>{a.currentTarget.style.borderColor=l?"var(--color-border-primary)":"var(--color-accent-primary)",a.currentTarget.style.color=l?"var(--color-text-secondary)":"var(--color-accent-primary)"},title:l?"Disable word wrap (scroll horizontally)":"Enable word wrap"},l?"\u2922 Wrap":"\u21C4 Scroll")),t?ee.default.createElement("div",{style:{padding:"16px",fontFamily:"var(--font-terminal)",fontSize:"12px",color:"var(--color-text-secondary)"}},"Loading preview..."):ee.default.createElement("div",{style:{position:"relative",flex:1,overflow:"hidden"}},ee.default.createElement("pre",{ref:n,style:{padding:"16px",margin:0,fontFamily:"var(--font-terminal)",fontSize:"12px",lineHeight:"1.6",overflow:"auto",color:"var(--color-text-primary)",backgroundColor:"var(--color-bg-card)",whiteSpace:l?"pre-wrap":"pre",wordBreak:l?"break-word":"normal",position:"absolute",inset:0},dangerouslySetInnerHTML:{__html:u}})))}var be=V(R(),1);function Sd(e){let[t,r]=(0,be.useState)(""),[n,o]=(0,be.useState)(!1),[l,i]=(0,be.useState)(null),[u,s]=(0,be.useState)([]),[a,p]=(0,be.useState)(null);(0,be.useEffect)(()=>{async function g(){try{let _=await(await fetch("/api/projects")).json();_.projects&&_.projects.length>0&&(s(_.projects),p(_.projects[0]))}catch(w){console.error("Failed to fetch projects:",w)}}g()},[]);let m=(0,be.useCallback)(async()=>{if(!a){r("No project selected");return}o(!0),i(null);try{let g=new URLSearchParams({project:a}),w=await fetch(`/api/context/preview?${g}`),_=await w.text();w.ok?r(_):i("Failed to load preview")}catch(g){i(g.message)}finally{o(!1)}},[a]);return(0,be.useEffect)(()=>{let g=setTimeout(()=>{m()},300);return()=>clearTimeout(g)},[e,m]),{preview:t,isLoading:n,error:l,refresh:m,projects:u,selectedProject:a,setSelectedProject:p}}function Hg(e,t){let r;return((...n)=>{clearTimeout(r),r=setTimeout(()=>e(...n),t)})}function pl({title:e,description:t,children:r,defaultOpen:n=!0}){let[o,l]=(0,v.useState)(n);return v.default.createElement("div",{className:`settings-section-collapsible ${o?"open":""}`},v.default.createElement("button",{className:"section-header-btn",onClick:()=>l(!o),type:"button"},v.default.createElement("div",{className:"section-header-content"},v.default.createElement("span",{className:"section-title"},e),t&&v.default.createElement("span",{className:"section-description"},t)),v.default.createElement("svg",{className:`chevron-icon ${o?"rotated":""}`,width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},v.default.createElement("polyline",{points:"6 9 12 15 18 9"}))),o&&v.default.createElement("div",{className:"section-content"},r))}function wd({label:e,options:t,selectedValues:r,onToggle:n,onSelectAll:o,onSelectNone:l}){let i=t.every(s=>r.includes(s)),u=t.every(s=>!r.includes(s));return v.default.createElement("div",{className:"chip-group"},v.default.createElement("div",{className:"chip-group-header"},v.default.createElement("span",{className:"chip-group-label"},e),v.default.createElement("div",{className:"chip-group-actions"},v.default.createElement("button",{type:"button",className:`chip-action ${i?"active":""}`,onClick:o},"All"),v.default.createElement("button",{type:"button",className:`chip-action ${u?"active":""}`,onClick:l},"None"))),v.default.createElement("div",{className:"chips-container"},t.map(s=>v.default.createElement("button",{key:s,type:"button",className:`chip ${r.includes(s)?"selected":""}`,onClick:()=>n(s)},s))))}function mt({label:e,tooltip:t,children:r}){return v.default.createElement("div",{className:"form-field"},v.default.createElement("label",{className:"form-field-label"},e,t&&v.default.createElement("span",{className:"tooltip-trigger",title:t},v.default.createElement("svg",{width:"14",height:"14",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},v.default.createElement("circle",{cx:"12",cy:"12",r:"10"}),v.default.createElement("path",{d:"M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3"}),v.default.createElement("line",{x1:"12",y1:"17",x2:"12.01",y2:"17"})))),r)}function zr({id:e,label:t,description:r,checked:n,onChange:o,disabled:l}){return v.default.createElement("div",{className:"toggle-row"},v.default.createElement("div",{className:"toggle-info"},v.default.createElement("label",{htmlFor:e,className:"toggle-label"},t),r&&v.default.createElement("span",{className:"toggle-description"},r)),v.default.createElement("button",{type:"button",id:e,role:"switch","aria-checked":n,className:`toggle-switch ${n?"on":""} ${l?"disabled":""}`,onClick:()=>!l&&o(!n),disabled:l},v.default.createElement("span",{className:"toggle-knob"})))}function _d({isOpen:e,onClose:t,settings:r,onSave:n,isSaving:o,saveStatus:l}){let[i,u]=(0,v.useState)(r),s=(0,v.useCallback)(Hg(h=>{n(h)},300),[n]);(0,v.useEffect)(()=>{u(r)},[r]);let{preview:a,isLoading:p,error:m,projects:g,selectedProject:w,setSelectedProject:_}=Sd(i),S=(0,v.useCallback)((h,C)=>{let N={...i,[h]:C};u(N),s(N)},[i,s]),L=(0,v.useCallback)(h=>{let N=i[h]==="true"?"false":"true";S(h,N)},[i,S]),d=(0,v.useCallback)((h,C)=>{let N=i[h]||"",U=N?N.split(","):[],x=U.includes(C)?U.filter(Ae=>Ae!==C):[...U,C];S(h,x.join(","))},[i,S]),c=(0,v.useCallback)(h=>{let C=i[h]||"";return C?C.split(","):[]},[i]),f=(0,v.useCallback)((h,C)=>{S(h,C.join(","))},[S]);if((0,v.useEffect)(()=>{let h=C=>{C.key==="Escape"&&t()};if(e)return window.addEventListener("keydown",h),()=>window.removeEventListener("keydown",h)},[e,t]),!e)return null;let y=["bugfix","feature","refactor","discovery","decision","change"],T=["how-it-works","why-it-exists","what-changed","problem-solution","gotcha","pattern","trade-off"];return v.default.createElement("div",{className:"modal-backdrop",onClick:t},v.default.createElement("div",{className:"context-settings-modal",onClick:h=>h.stopPropagation()},v.default.createElement("div",{className:"modal-header"},v.default.createElement("h2",null,"Settings"),v.default.createElement("div",{className:"header-controls"},v.default.createElement("label",{className:"preview-selector"},"Preview for:",v.default.createElement("select",{value:w||"",onChange:h=>_(h.target.value)},g.map(h=>v.default.createElement("option",{key:h,value:h},h)))),v.default.createElement("button",{onClick:t,className:"modal-close-btn",title:"Close (Esc)"},v.default.createElement("svg",{width:"18",height:"18",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2"},v.default.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),v.default.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))))),v.default.createElement("div",{className:"modal-body"},v.default.createElement("div",{className:"preview-column"},v.default.createElement("div",{className:"preview-content"},m?v.default.createElement("div",{style:{color:"#ff6b6b"}},"Error loading preview: ",m):v.default.createElement(Ed,{content:a,isLoading:p}))),v.default.createElement("div",{className:"settings-column"},v.default.createElement(pl,{title:"Loading",description:"How many observations to inject"},v.default.createElement(mt,{label:"Observations",tooltip:"Number of recent observations to include in context (1-200)"},v.default.createElement("input",{type:"number",min:"1",max:"200",value:i.CLAUDE_MEM_CONTEXT_OBSERVATIONS||"50",onChange:h=>S("CLAUDE_MEM_CONTEXT_OBSERVATIONS",h.target.value)})),v.default.createElement(mt,{label:"Sessions",tooltip:"Number of recent sessions to pull observations from (1-50)"},v.default.createElement("input",{type:"number",min:"1",max:"50",value:i.CLAUDE_MEM_CONTEXT_SESSION_COUNT||"10",onChange:h=>S("CLAUDE_MEM_CONTEXT_SESSION_COUNT",h.target.value)}))),v.default.createElement(pl,{title:"Filters",description:"Which observation types to include"},v.default.createElement(wd,{label:"Type",options:y,selectedValues:c("CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES"),onToggle:h=>d("CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES",h),onSelectAll:()=>f("CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES",y),onSelectNone:()=>f("CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES",[])}),v.default.createElement(wd,{label:"Concept",options:T,selectedValues:c("CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS"),onToggle:h=>d("CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS",h),onSelectAll:()=>f("CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS",T),onSelectNone:()=>f("CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS",[])})),v.default.createElement(pl,{title:"Display",description:"What to show in context tables"},v.default.createElement("div",{className:"display-subsection"},v.default.createElement("span",{className:"subsection-label"},"Full Observations"),v.default.createElement(mt,{label:"Count",tooltip:"How many observations show expanded details (0-20)"},v.default.createElement("input",{type:"number",min:"0",max:"20",value:i.CLAUDE_MEM_CONTEXT_FULL_COUNT||"5",onChange:h=>S("CLAUDE_MEM_CONTEXT_FULL_COUNT",h.target.value)})),v.default.createElement(mt,{label:"Field",tooltip:"Which field to expand for full observations"},v.default.createElement("select",{value:i.CLAUDE_MEM_CONTEXT_FULL_FIELD||"narrative",onChange:h=>S("CLAUDE_MEM_CONTEXT_FULL_FIELD",h.target.value)},v.default.createElement("option",{value:"narrative"},"Narrative"),v.default.createElement("option",{value:"facts"},"Facts")))),v.default.createElement("div",{className:"display-subsection"},v.default.createElement("span",{className:"subsection-label"},"Token Economics"),v.default.createElement("div",{className:"toggle-group"},v.default.createElement(zr,{id:"show-read-tokens",label:"Read cost",description:"Tokens to read this observation",checked:i.CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS==="true",onChange:()=>L("CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS")}),v.default.createElement(zr,{id:"show-work-tokens",label:"Work investment",description:"Tokens spent creating this observation",checked:i.CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS==="true",onChange:()=>L("CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS")}),v.default.createElement(zr,{id:"show-savings-amount",label:"Savings",description:"Total tokens saved by reusing context",checked:i.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT==="true",onChange:()=>L("CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT")})))),v.default.createElement(pl,{title:"Advanced",description:"AI provider and model selection",defaultOpen:!1},v.default.createElement(mt,{label:"AI Provider",tooltip:"Choose between Claude (via Agent SDK) or Gemini (via REST API)"},v.default.createElement("select",{value:i.CLAUDE_MEM_PROVIDER||"claude",onChange:h=>S("CLAUDE_MEM_PROVIDER",h.target.value)},v.default.createElement("option",{value:"claude"},"Claude (uses your Claude account)"),v.default.createElement("option",{value:"gemini"},"Gemini (uses API key)"))),i.CLAUDE_MEM_PROVIDER==="claude"?v.default.createElement(mt,{label:"Claude Model",tooltip:"Claude model used for generating observations"},v.default.createElement("select",{value:i.CLAUDE_MEM_MODEL||"haiku",onChange:h=>S("CLAUDE_MEM_MODEL",h.target.value)},v.default.createElement("option",{value:"haiku"},"haiku (fastest)"),v.default.createElement("option",{value:"sonnet"},"sonnet (balanced)"),v.default.createElement("option",{value:"opus"},"opus (highest quality)"))):v.default.createElement(v.default.Fragment,null,v.default.createElement(mt,{label:"Gemini API Key",tooltip:"Your Google AI Studio API key (or set GEMINI_API_KEY env var)"},v.default.createElement("input",{type:"password",value:i.CLAUDE_MEM_GEMINI_API_KEY||"",onChange:h=>S("CLAUDE_MEM_GEMINI_API_KEY",h.target.value),placeholder:"Enter Gemini API key..."})),v.default.createElement(mt,{label:"Gemini Model",tooltip:"Gemini model used for generating observations"},v.default.createElement("select",{value:i.CLAUDE_MEM_GEMINI_MODEL||"gemini-2.5-flash-lite",onChange:h=>S("CLAUDE_MEM_GEMINI_MODEL",h.target.value)},v.default.createElement("option",{value:"gemini-2.5-flash-lite"},"gemini-2.5-flash-lite (10 RPM free)"),v.default.createElement("option",{value:"gemini-2.5-flash"},"gemini-2.5-flash (5 RPM free)"),v.default.createElement("option",{value:"gemini-3-flash"},"gemini-3-flash (5 RPM free)"))),v.default.createElement("div",{className:"toggle-group",style:{marginTop:"8px"}},v.default.createElement(zr,{id:"gemini-billing-enabled",label:"Billing Enabled",description:"Enable if you have billing set up on Google Cloud. Skips rate limiting (1000+ RPM available).",checked:i.CLAUDE_MEM_GEMINI_BILLING_ENABLED==="true",onChange:h=>S("CLAUDE_MEM_GEMINI_BILLING_ENABLED",h?"true":"false")}))),v.default.createElement(mt,{label:"Worker Port",tooltip:"Port for the background worker service"},v.default.createElement("input",{type:"number",min:"1024",max:"65535",value:i.CLAUDE_MEM_WORKER_PORT||"37777",onChange:h=>S("CLAUDE_MEM_WORKER_PORT",h.target.value)})),v.default.createElement("div",{className:"toggle-group",style:{marginTop:"12px"}},v.default.createElement(zr,{id:"show-last-summary",label:"Include last summary",description:"Add previous session's summary to context",checked:i.CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY==="true",onChange:()=>L("CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY")}),v.default.createElement(zr,{id:"show-last-message",label:"Include last message",description:"Add previous session's final message",checked:i.CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE==="true",onChange:()=>L("CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE")})))))))}var Oe=V(R(),1);var $e={OBSERVATIONS:"/api/observations",SUMMARIES:"/api/summaries",PROMPTS:"/api/prompts",SETTINGS:"/api/settings",STATS:"/api/stats",PROCESSING_STATUS:"/api/processing-status",STREAM:"/stream"};var ml={SSE_RECONNECT_DELAY_MS:3e3,STATS_REFRESH_INTERVAL_MS:1e4,SAVE_STATUS_DISPLAY_DURATION_MS:3e3};function Td(){let[e,t]=(0,Oe.useState)([]),[r,n]=(0,Oe.useState)([]),[o,l]=(0,Oe.useState)([]),[i,u]=(0,Oe.useState)([]),[s,a]=(0,Oe.useState)(!1),[p,m]=(0,Oe.useState)(!1),[g,w]=(0,Oe.useState)(0),_=(0,Oe.useRef)(null),S=(0,Oe.useRef)();return(0,Oe.useEffect)(()=>{let L=()=>{_.current&&_.current.close();let d=new EventSource($e.STREAM);_.current=d,d.onopen=()=>{console.log("[SSE] Connected"),a(!0),S.current&&clearTimeout(S.current)},d.onerror=c=>{console.error("[SSE] Connection error:",c),a(!1),d.close(),S.current=setTimeout(()=>{S.current=void 0,console.log("[SSE] Attempting to reconnect..."),L()},ml.SSE_RECONNECT_DELAY_MS)},d.onmessage=c=>{try{let f=JSON.parse(c.data);switch(f.type){case"initial_load":console.log("[SSE] Initial load:",{projects:f.projects?.length||0}),u(f.projects||[]);break;case"new_observation":f.observation&&(console.log("[SSE] New observation:",f.observation.id),t(y=>[f.observation,...y]));break;case"new_summary":if(f.summary){let y=f.summary;console.log("[SSE] New summary:",y.id),n(T=>[y,...T])}break;case"new_prompt":if(f.prompt){let y=f.prompt;console.log("[SSE] New prompt:",y.id),l(T=>[y,...T])}break;case"processing_status":typeof f.isProcessing=="boolean"&&(console.log("[SSE] Processing status:",f.isProcessing,"Queue depth:",f.queueDepth),m(f.isProcessing),w(f.queueDepth||0));break}}catch(f){console.error("[SSE] Failed to parse message:",f)}}};return L(),()=>{_.current&&_.current.close(),S.current&&clearTimeout(S.current)}},[]),{observations:e,summaries:r,prompts:o,projects:i,isProcessing:p,queueDepth:g,isConnected:s}}var jr=V(R(),1);var Y={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_PROVIDER:"claude",CLAUDE_MEM_GEMINI_API_KEY:"",CLAUDE_MEM_GEMINI_MODEL:"gemini-2.5-flash-lite",CLAUDE_MEM_GEMINI_BILLING_ENABLED:"false",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:"bugfix,feature,refactor,discovery,decision,change",CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:"how-it-works,why-it-exists,what-changed,problem-solution,gotcha,pattern,trade-off",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"};function Cd(){let[e,t]=(0,jr.useState)(Y),[r,n]=(0,jr.useState)(!1),[o,l]=(0,jr.useState)("");return(0,jr.useEffect)(()=>{fetch($e.SETTINGS).then(u=>u.json()).then(u=>{t({CLAUDE_MEM_MODEL:u.CLAUDE_MEM_MODEL||Y.CLAUDE_MEM_MODEL,CLAUDE_MEM_CONTEXT_OBSERVATIONS:u.CLAUDE_MEM_CONTEXT_OBSERVATIONS||Y.CLAUDE_MEM_CONTEXT_OBSERVATIONS,CLAUDE_MEM_WORKER_PORT:u.CLAUDE_MEM_WORKER_PORT||Y.CLAUDE_MEM_WORKER_PORT,CLAUDE_MEM_WORKER_HOST:u.CLAUDE_MEM_WORKER_HOST||Y.CLAUDE_MEM_WORKER_HOST,CLAUDE_MEM_PROVIDER:u.CLAUDE_MEM_PROVIDER||Y.CLAUDE_MEM_PROVIDER,CLAUDE_MEM_GEMINI_API_KEY:u.CLAUDE_MEM_GEMINI_API_KEY||Y.CLAUDE_MEM_GEMINI_API_KEY,CLAUDE_MEM_GEMINI_MODEL:u.CLAUDE_MEM_GEMINI_MODEL||Y.CLAUDE_MEM_GEMINI_MODEL,CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS:u.CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS||Y.CLAUDE_MEM_CONTEXT_SHOW_READ_TOKENS,CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS:u.CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS||Y.CLAUDE_MEM_CONTEXT_SHOW_WORK_TOKENS,CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT:u.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT||Y.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_AMOUNT,CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT:u.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT||Y.CLAUDE_MEM_CONTEXT_SHOW_SAVINGS_PERCENT,CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES:u.CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES||Y.CLAUDE_MEM_CONTEXT_OBSERVATION_TYPES,CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS:u.CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS||Y.CLAUDE_MEM_CONTEXT_OBSERVATION_CONCEPTS,CLAUDE_MEM_CONTEXT_FULL_COUNT:u.CLAUDE_MEM_CONTEXT_FULL_COUNT||Y.CLAUDE_MEM_CONTEXT_FULL_COUNT,CLAUDE_MEM_CONTEXT_FULL_FIELD:u.CLAUDE_MEM_CONTEXT_FULL_FIELD||Y.CLAUDE_MEM_CONTEXT_FULL_FIELD,CLAUDE_MEM_CONTEXT_SESSION_COUNT:u.CLAUDE_MEM_CONTEXT_SESSION_COUNT||Y.CLAUDE_MEM_CONTEXT_SESSION_COUNT,CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY:u.CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY||Y.CLAUDE_MEM_CONTEXT_SHOW_LAST_SUMMARY,CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE:u.CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE||Y.CLAUDE_MEM_CONTEXT_SHOW_LAST_MESSAGE})}).catch(u=>{console.error("Failed to load settings:",u)})},[]),{settings:e,saveSettings:async u=>{n(!0),l("Saving...");try{let a=await(await fetch($e.SETTINGS,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)})).json();a.success?(t(u),l("\u2713 Saved"),setTimeout(()=>l(""),ml.SAVE_STATUS_DISPLAY_DURATION_MS)):l(`\u2717 Error: ${a.error}`)}catch(s){l(`\u2717 Error: ${s instanceof Error?s.message:"Unknown error"}`)}finally{n(!1)}},isSaving:r,saveStatus:o}}var Hr=V(R(),1);function kd(){let[e,t]=(0,Hr.useState)({}),r=(0,Hr.useCallback)(async()=>{try{let o=await(await fetch($e.STATS)).json();t(o)}catch(n){console.error("Failed to load stats:",n)}},[]);return(0,Hr.useEffect)(()=>{r()},[r]),{stats:e,refreshStats:r}}var Rt=V(R(),1);function Bu(e,t,r){let[n,o]=(0,Rt.useState)({isLoading:!1,hasMore:!0}),l=(0,Rt.useRef)(0),i=(0,Rt.useRef)(r),u=(0,Rt.useRef)(n),s=(0,Rt.useCallback)(async()=>{let a=i.current!==r;if(a){l.current=0,i.current=r;let p={isLoading:!1,hasMore:!0};o(p),u.current=p}if(!a&&(u.current.isLoading||!u.current.hasMore))return[];o(p=>({...p,isLoading:!0}));try{let p=new URLSearchParams({offset:l.current.toString(),limit:Un.PAGINATION_PAGE_SIZE.toString()});r&&p.append("project",r);let m=await fetch(`${e}?${p}`);if(!m.ok)throw new Error(`Failed to load ${t}: ${m.statusText}`);let g=await m.json();return o(w=>({...w,isLoading:!1,hasMore:g.hasMore})),l.current+=Un.PAGINATION_PAGE_SIZE,g.items}catch(p){return console.error(`Failed to load ${t}:`,p),o(m=>({...m,isLoading:!1})),[]}},[r,e,t]);return{...n,loadMore:s}}function Nd(e){let t=Bu($e.OBSERVATIONS,"observations",e),r=Bu($e.SUMMARIES,"summaries",e),n=Bu($e.PROMPTS,"prompts",e);return{observations:t,summaries:r,prompts:n}}var qr=V(R(),1),Md="claude-mem-theme";function qg(){return typeof window>"u"||window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function xd(){try{let e=localStorage.getItem(Md);if(e==="system"||e==="light"||e==="dark")return e}catch(e){console.warn("Failed to read theme preference from localStorage:",e)}return"system"}function Ld(e){return e==="system"?qg():e}function Od(){let[e,t]=(0,qr.useState)(xd),[r,n]=(0,qr.useState)(()=>Ld(xd()));return(0,qr.useEffect)(()=>{let l=Ld(e);n(l),document.documentElement.setAttribute("data-theme",l)},[e]),(0,qr.useEffect)(()=>{if(e!=="system")return;let l=window.matchMedia("(prefers-color-scheme: dark)"),i=u=>{let s=u.matches?"dark":"light";n(s),document.documentElement.setAttribute("data-theme",s)};return l.addEventListener("change",i),()=>l.removeEventListener("change",i)},[e]),{preference:e,resolvedTheme:r,setThemePreference:l=>{try{localStorage.setItem(Md,l),t(l)}catch(i){console.warn("Failed to save theme preference to localStorage:",i),t(l)}}}}function gl(e,t){let r=new Set;return[...e,...t].filter(n=>r.has(n.id)?!1:(r.add(n.id),!0))}function Ad(){let[e,t]=(0,K.useState)(""),[r,n]=(0,K.useState)(!1),[o,l]=(0,K.useState)([]),[i,u]=(0,K.useState)([]),[s,a]=(0,K.useState)([]),{observations:p,summaries:m,prompts:g,projects:w,isProcessing:_,queueDepth:S,isConnected:L}=Td(),{settings:d,saveSettings:c,isSaving:f,saveStatus:y}=Cd(),{stats:T,refreshStats:h}=kd(),{preference:C,resolvedTheme:N,setThemePreference:U}=Od(),x=Nd(e),Ae=(0,K.useMemo)(()=>e?o:gl(p,o),[p,o,e]),vl=(0,K.useMemo)(()=>e?i:gl(m,i),[m,i,e]),Id=(0,K.useMemo)(()=>e?s:gl(g,s),[g,s,e]),Gu=(0,K.useCallback)(()=>{n(lr=>!lr)},[]),Xu=(0,K.useCallback)(async()=>{try{let[lr,bu,$u]=await Promise.all([x.observations.loadMore(),x.summaries.loadMore(),x.prompts.loadMore()]);lr.length>0&&l(Vr=>[...Vr,...lr]),bu.length>0&&u(Vr=>[...Vr,...bu]),$u.length>0&&a(Vr=>[...Vr,...$u])}catch(lr){console.error("Failed to load more data:",lr)}},[e,x.observations,x.summaries,x.prompts]);return(0,K.useEffect)(()=>{l([]),u([]),a([]),Xu()},[e]),K.default.createElement(K.default.Fragment,null,K.default.createElement(Ff,{isConnected:L,projects:w,currentFilter:e,onFilterChange:t,isProcessing:_,queueDepth:S,themePreference:C,onThemeChange:U,onContextPreviewToggle:Gu}),K.default.createElement(Rf,{observations:Ae,summaries:vl,prompts:Id,onLoadMore:Xu,isLoading:x.observations.isLoading||x.summaries.isLoading||x.prompts.isLoading,hasMore:x.observations.hasMore||x.summaries.hasMore||x.prompts.hasMore}),K.default.createElement(_d,{isOpen:r,onClose:Gu,settings:d,onSave:c,isSaving:f,saveStatus:y}))}var gt=V(R(),1),hl=class extends gt.Component{constructor(t){super(t),this.state={hasError:!1,error:null,errorInfo:null}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,r){console.error("[ErrorBoundary] Caught error:",t,r),this.setState({error:t,errorInfo:r})}render(){return this.state.hasError?gt.default.createElement("div",{style:{padding:"20px",color:"#ff6b6b",backgroundColor:"#1a1a1a",minHeight:"100vh"}},gt.default.createElement("h1",{style:{fontSize:"24px",marginBottom:"10px"}},"Something went wrong"),gt.default.createElement("p",{style:{marginBottom:"10px",color:"#8b949e"}},"The application encountered an error. Please refresh the page to try again."),this.state.error&>.default.createElement("details",{style:{marginTop:"20px",color:"#8b949e"}},gt.default.createElement("summary",{style:{cursor:"pointer",marginBottom:"10px"}},"Error details"),gt.default.createElement("pre",{style:{backgroundColor:"#0d1117",padding:"10px",borderRadius:"6px",overflow:"auto"}},this.state.error.toString(),this.state.errorInfo&&` `+this.state.errorInfo.componentStack))):this.props.children}};var Pd=document.getElementById("root");if(!Pd)throw new Error("Root element not found");var Vg=(0,Dd.createRoot)(Pd);Vg.render(Wu.default.createElement(hl,null,Wu.default.createElement(Ad,null)));})(); /*! Bundled license information: