diff --git a/plugin/scripts/worker-service.cjs b/plugin/scripts/worker-service.cjs index be680115..cbab58e5 100755 --- a/plugin/scripts/worker-service.cjs +++ b/plugin/scripts/worker-service.cjs @@ -615,7 +615,7 @@ ${e.stack}`:e.message;if(Array.isArray(e))return`[${e.length} items]`;let a=Obje WHERE s.project = ? `).get(this.project);H.info("CHROMA_SYNC","Backfilling user prompts",{project:this.project,missing:d.length,existing:e.prompts.size,total:v.count});let g=[];for(let b of d)g.push(this.formatUserPromptDoc(b));for(let b=0;b{H.error("DB","Chroma backfill failed (non-fatal)",{},e)}),H.info("DB","Database initialized")}async close(){if(this.chromaSync)try{await this.chromaSync.close(),this.chromaSync=null}catch(e){H.error("DB","Failed to close ChromaSync",{},e)}this.sessionStore&&(this.sessionStore.close(),this.sessionStore=null),this.sessionSearch&&(this.sessionSearch.close(),this.sessionSearch=null),H.info("DB","Database closed")}getSessionStore(){if(!this.sessionStore)throw new Error("Database not initialized");return this.sessionStore}getSessionSearch(){if(!this.sessionSearch)throw new Error("Database not initialized");return this.sessionSearch}getChromaSync(){if(!this.chromaSync)throw new Error("ChromaSync not initialized");return this.chromaSync}getSessionById(e){let a=this.getSessionStore().getSessionById(e);if(!a)throw new Error(`Session ${e} not found`);return a}markSessionComplete(e){this.getSessionStore().markSessionCompleted(e)}};var I1=require("events");var k1=require("fs"),O1=require("os"),C1=require("path"),xj=(0,C1.join)((0,O1.homedir)(),".claude-mem","silent.log");function Kt(r,e,a=""){let t=new Date().toISOString(),o=((new Error().stack||"").split(` `)[2]||"").match(/at\s+(?:.*\s+)?\(?([^:]+):(\d+):(\d+)\)?/),l=o?`${o[1].split("/").pop()}:${o[2]}`:"unknown",c=`[${t}] [${l}] ${r}`;if(e!==void 0)try{c+=` ${JSON.stringify(e)}`}catch(u){c+=` [stringify error: ${u}]`}c+=` -`;try{(0,k1.appendFileSync)(xj,c)}catch(u){console.error("[silent-debug] Failed to write to log:",u)}return a}var Mc=class{dbManager;sessions=new Map;sessionQueues=new Map;onSessionDeletedCallback;constructor(e){this.dbManager=e}setOnSessionDeleted(e){this.onSessionDeletedCallback=e}initializeSession(e,a,t){let s=this.sessions.get(e);if(s)return a?(Kt("[SessionManager] Updating userPrompt for continuation",{sessionDbId:e,promptNumber:t,oldPrompt:s.userPrompt.substring(0,80),newPrompt:a.substring(0,80)}),s.userPrompt=a,s.lastPromptNumber=t||s.lastPromptNumber):Kt("[SessionManager] No currentUserPrompt provided for existing session",{sessionDbId:e,promptNumber:t,usingCachedPrompt:s.userPrompt.substring(0,80)}),s;let i=this.dbManager.getSessionById(e),n=a||i.user_prompt;a?Kt("[SessionManager] Initializing session with fresh userPrompt",{sessionDbId:e,promptNumber:t,userPrompt:a.substring(0,80)}):Kt("[SessionManager] No currentUserPrompt provided for new session, using database",{sessionDbId:e,promptNumber:t,dbPrompt:i.user_prompt.substring(0,80)}),s={sessionDbId:e,claudeSessionId:i.claude_session_id,sdkSessionId:null,project:i.project,userPrompt:n,pendingMessages:[],abortController:new AbortController,generatorPromise:null,lastPromptNumber:t||this.dbManager.getSessionStore().getPromptCounter(e),startTime:Date.now(),cumulativeInputTokens:0,cumulativeOutputTokens:0},this.sessions.set(e,s);let o=new I1.EventEmitter;return this.sessionQueues.set(e,o),H.info("SESSION","Session initialized",{sessionId:e,project:s.project,claudeSessionId:s.claudeSessionId,queueDepth:0,hasGenerator:!1}),s}getSession(e){return this.sessions.get(e)}queueObservation(e,a){let t=this.sessions.get(e);t||(t=this.initializeSession(e));let s=t.pendingMessages.length;t.pendingMessages.push({type:"observation",tool_name:a.tool_name,tool_input:a.tool_input,tool_response:a.tool_response,prompt_number:a.prompt_number,cwd:a.cwd});let i=t.pendingMessages.length;this.sessionQueues.get(e)?.emit("message");let o=H.formatTool(a.tool_name,a.tool_input);H.info("SESSION",`Observation queued (${s}\u2192${i})`,{sessionId:e,tool:o,hasGenerator:!!t.generatorPromise})}queueSummarize(e,a,t){let s=this.sessions.get(e);s||(s=this.initializeSession(e));let i=s.pendingMessages.length;s.pendingMessages.push({type:"summarize",last_user_message:a,last_assistant_message:t});let n=s.pendingMessages.length;this.sessionQueues.get(e)?.emit("message"),H.info("SESSION",`Summarize queued (${i}\u2192${n})`,{sessionId:e,hasGenerator:!!s.generatorPromise})}async deleteSession(e){let a=this.sessions.get(e);if(!a)return;let t=Date.now()-a.startTime;a.abortController.abort(),a.generatorPromise&&await a.generatorPromise.catch(()=>{}),this.sessions.delete(e),this.sessionQueues.delete(e),H.info("SESSION","Session deleted",{sessionId:e,duration:`${(t/1e3).toFixed(1)}s`,project:a.project}),this.onSessionDeletedCallback&&this.onSessionDeletedCallback()}async shutdownAll(){let e=Array.from(this.sessions.keys());await Promise.all(e.map(a=>this.deleteSession(a)))}hasPendingMessages(){return Array.from(this.sessions.values()).some(e=>e.pendingMessages.length>0)}getActiveSessionCount(){return this.sessions.size}getTotalQueueDepth(){let e=0;for(let a of this.sessions.values())e+=a.pendingMessages.length;return e}isAnySessionProcessing(){for(let e of this.sessions.values())if(e.pendingMessages.length>0||e.generatorPromise!==null)return!0;return!1}async*getMessageIterator(e){let a=this.sessions.get(e);a||(a=this.initializeSession(e));let t=this.sessionQueues.get(e);if(!t)throw new Error(`No emitter for session ${e}`);for(;!a.abortController.signal.aborted;)for(a.pendingMessages.length===0&&await new Promise(s=>{let i=()=>s();t.once("message",i),a.abortController.signal.addEventListener("abort",()=>{t.off("message",i),s()},{once:!0})});a.pendingMessages.length>0;){let s=a.pendingMessages.shift();if(yield s,s.type==="summarize"){H.info("SESSION","Summary yielded - ending generator",{sessionId:e});return}}}};var Fc=class{sseClients=new Set;addClient(e){this.sseClients.add(e),H.debug("WORKER","Client connected",{total:this.sseClients.size}),e.on("close",()=>{this.removeClient(e)}),this.sendToClient(e,{type:"connected",timestamp:Date.now()})}removeClient(e){this.sseClients.delete(e),H.debug("WORKER","Client disconnected",{total:this.sseClients.size})}broadcast(e){if(this.sseClients.size===0){H.debug("WORKER","SSE broadcast skipped (no clients)",{eventType:e.type});return}let a={...e,timestamp:Date.now()},t=`data: ${JSON.stringify(a)} +`;try{(0,k1.appendFileSync)(xj,c)}catch(u){console.error("[silent-debug] Failed to write to log:",u)}return a}var Mc=class{dbManager;sessions=new Map;sessionQueues=new Map;onSessionDeletedCallback;constructor(e){this.dbManager=e}setOnSessionDeleted(e){this.onSessionDeletedCallback=e}initializeSession(e,a,t){let s=this.sessions.get(e);if(s)return a?(Kt("[SessionManager] Updating userPrompt for continuation",{sessionDbId:e,promptNumber:t,oldPrompt:s.userPrompt.substring(0,80),newPrompt:a.substring(0,80)}),s.userPrompt=a,s.lastPromptNumber=t||s.lastPromptNumber):Kt("[SessionManager] No currentUserPrompt provided for existing session",{sessionDbId:e,promptNumber:t,usingCachedPrompt:s.userPrompt.substring(0,80)}),s;let i=this.dbManager.getSessionById(e),n=a||i.user_prompt;a?Kt("[SessionManager] Initializing session with fresh userPrompt",{sessionDbId:e,promptNumber:t,userPrompt:a.substring(0,80)}):Kt("[SessionManager] No currentUserPrompt provided for new session, using database",{sessionDbId:e,promptNumber:t,dbPrompt:i.user_prompt.substring(0,80)}),s={sessionDbId:e,claudeSessionId:i.claude_session_id,sdkSessionId:null,project:i.project,userPrompt:n,pendingMessages:[],abortController:new AbortController,generatorPromise:null,lastPromptNumber:t||this.dbManager.getSessionStore().getPromptCounter(e),startTime:Date.now(),cumulativeInputTokens:0,cumulativeOutputTokens:0},this.sessions.set(e,s);let o=new I1.EventEmitter;return this.sessionQueues.set(e,o),H.info("SESSION","Session initialized",{sessionId:e,project:s.project,claudeSessionId:s.claudeSessionId,queueDepth:0,hasGenerator:!1}),s}getSession(e){return this.sessions.get(e)}queueObservation(e,a){let t=this.sessions.get(e);t||(t=this.initializeSession(e));let s=t.pendingMessages.length;t.pendingMessages.push({type:"observation",tool_name:a.tool_name,tool_input:a.tool_input,tool_response:a.tool_response,prompt_number:a.prompt_number,cwd:a.cwd});let i=t.pendingMessages.length;this.sessionQueues.get(e)?.emit("message");let o=H.formatTool(a.tool_name,a.tool_input);H.info("SESSION",`Observation queued (${s}\u2192${i})`,{sessionId:e,tool:o,hasGenerator:!!t.generatorPromise})}queueSummarize(e,a,t){let s=this.sessions.get(e);s||(s=this.initializeSession(e));let i=s.pendingMessages.length;s.pendingMessages.push({type:"summarize",last_user_message:a,last_assistant_message:t});let n=s.pendingMessages.length;this.sessionQueues.get(e)?.emit("message"),H.info("SESSION",`Summarize queued (${i}\u2192${n})`,{sessionId:e,hasGenerator:!!s.generatorPromise})}async deleteSession(e){let a=this.sessions.get(e);if(!a)return;let t=Date.now()-a.startTime;a.abortController.abort(),a.generatorPromise&&await a.generatorPromise.catch(()=>{}),this.sessions.delete(e),this.sessionQueues.delete(e),H.info("SESSION","Session deleted",{sessionId:e,duration:`${(t/1e3).toFixed(1)}s`,project:a.project}),this.onSessionDeletedCallback&&this.onSessionDeletedCallback()}async shutdownAll(){let e=Array.from(this.sessions.keys());await Promise.all(e.map(a=>this.deleteSession(a)))}hasPendingMessages(){return Array.from(this.sessions.values()).some(e=>e.pendingMessages.length>0)}getActiveSessionCount(){return this.sessions.size}getTotalQueueDepth(){let e=0;for(let a of this.sessions.values())e+=a.pendingMessages.length;return e}getTotalActiveWork(){let e=0;for(let a of this.sessions.values())e+=a.pendingMessages.length,a.generatorPromise!==null&&(e+=1);return e}isAnySessionProcessing(){for(let e of this.sessions.values())if(e.pendingMessages.length>0||e.generatorPromise!==null)return!0;return!1}async*getMessageIterator(e){let a=this.sessions.get(e);a||(a=this.initializeSession(e));let t=this.sessionQueues.get(e);if(!t)throw new Error(`No emitter for session ${e}`);for(;!a.abortController.signal.aborted;)for(a.pendingMessages.length===0&&await new Promise(s=>{let i=()=>s();t.once("message",i),a.abortController.signal.addEventListener("abort",()=>{t.off("message",i),s()},{once:!0})});a.pendingMessages.length>0;){let s=a.pendingMessages.shift();if(yield s,s.type==="summarize"){H.info("SESSION","Summary yielded - ending generator",{sessionId:e});return}}}};var Fc=class{sseClients=new Set;addClient(e){this.sseClients.add(e),H.debug("WORKER","Client connected",{total:this.sseClients.size}),e.on("close",()=>{this.removeClient(e)}),this.sendToClient(e,{type:"connected",timestamp:Date.now()})}removeClient(e){this.sseClients.delete(e),H.debug("WORKER","Client disconnected",{total:this.sseClients.size})}broadcast(e){if(this.sseClients.size===0){H.debug("WORKER","SSE broadcast skipped (no clients)",{eventType:e.type});return}let a={...e,timestamp:Date.now()},t=`data: ${JSON.stringify(a)} `;H.debug("WORKER","SSE broadcast sent",{eventType:e.type,clients:this.sseClients.size});for(let s of this.sseClients)try{s.write(t)}catch{this.sseClients.delete(s),H.debug("WORKER","Client removed due to write error")}}getClientCount(){return this.sseClients.size}sendToClient(e,a){let t=`data: ${JSON.stringify(a)} @@ -872,7 +872,7 @@ MEMORY PROCESSING CONTINUED INSERT OR REPLACE INTO viewer_settings (key, value) VALUES (?, ?) `);for(let[s,i]of Object.entries(e))t.run(s,JSON.stringify(i));return this.getSettings()}};var $i=class{app;server=null;startTime=Date.now();mcpClient;dbManager;sessionManager;sseBroadcaster;sdkAgent;paginationHelper;settingsManager;constructor(){this.app=(0,nl.default)(),this.dbManager=new qc,this.sessionManager=new Mc(this.dbManager),this.sseBroadcaster=new Fc,this.sdkAgent=new tl(this.dbManager,this.sessionManager),this.paginationHelper=new al(this.dbManager),this.settingsManager=new sl(this.dbManager),this.sessionManager.setOnSessionDeleted(()=>{this.broadcastProcessingStatus()}),this.mcpClient=new gn({name:"worker-search-proxy",version:"1.0.0"},{capabilities:{}}),this.setupMiddleware(),this.setupRoutes()}setupMiddleware(){this.app.use(nl.default.json({limit:"50mb"})),this.app.use((0,BE.default)()),this.app.use((t,s,i)=>{if(t.path.startsWith("/health")||t.path==="/"||t.path.includes("."))return i();let n=Date.now(),o=`${t.method}-${Date.now()}`,l=this.summarizeRequestBody(t.method,t.path,t.body);H.info("HTTP",`\u2192 ${t.method} ${t.path}`,{requestId:o},l);let c=s.send.bind(s);s.send=function(u){let p=Date.now()-n;return H.info("HTTP",`\u2190 ${s.statusCode} ${t.path}`,{requestId:o,duration:`${p}ms`}),c(u)},i()});let e=Ka(),a=Rr.default.join(e,"plugin","ui");this.app.use(nl.default.static(a))}summarizeRequestBody(e,a,t){if(!t||Object.keys(t).length===0||a.includes("/init"))return"";if(a.includes("/observations")){let s=t.tool_name||"?",i=t.tool_input;return`tool=${H.formatTool(s,i)}`}return a.includes("/summarize")?"requesting summary":""}setupRoutes(){this.app.get("/health",this.handleHealth.bind(this)),this.app.get("/",this.handleViewerUI.bind(this)),this.app.get("/stream",this.handleSSEStream.bind(this)),this.app.post("/sessions/:sessionDbId/init",this.handleSessionInit.bind(this)),this.app.post("/sessions/:sessionDbId/observations",this.handleObservations.bind(this)),this.app.post("/sessions/:sessionDbId/summarize",this.handleSummarize.bind(this)),this.app.get("/sessions/:sessionDbId/status",this.handleSessionStatus.bind(this)),this.app.delete("/sessions/:sessionDbId",this.handleSessionDelete.bind(this)),this.app.post("/sessions/:sessionDbId/complete",this.handleSessionComplete.bind(this)),this.app.get("/api/observations",this.handleGetObservations.bind(this)),this.app.get("/api/summaries",this.handleGetSummaries.bind(this)),this.app.get("/api/prompts",this.handleGetPrompts.bind(this)),this.app.get("/api/stats",this.handleGetStats.bind(this)),this.app.get("/api/processing-status",this.handleGetProcessingStatus.bind(this)),this.app.post("/api/processing",this.handleSetProcessing.bind(this)),this.app.get("/api/settings",this.handleGetSettings.bind(this)),this.app.post("/api/settings",this.handleUpdateSettings.bind(this)),this.app.get("/api/mcp/status",this.handleGetMcpStatus.bind(this)),this.app.post("/api/mcp/toggle",this.handleToggleMcp.bind(this)),this.app.get("/api/search/observations",this.handleSearchObservations.bind(this)),this.app.get("/api/search/sessions",this.handleSearchSessions.bind(this)),this.app.get("/api/search/prompts",this.handleSearchPrompts.bind(this)),this.app.get("/api/search/by-concept",this.handleSearchByConcept.bind(this)),this.app.get("/api/search/by-file",this.handleSearchByFile.bind(this)),this.app.get("/api/search/by-type",this.handleSearchByType.bind(this)),this.app.get("/api/context/recent",this.handleGetRecentContext.bind(this)),this.app.get("/api/context/timeline",this.handleGetContextTimeline.bind(this)),this.app.get("/api/timeline/by-query",this.handleGetTimelineByQuery.bind(this)),this.app.get("/api/search/help",this.handleSearchHelp.bind(this))}async cleanupOrphanedProcesses(){try{let{execSync:e}=await import("child_process");try{let a=e("pgrep -fl uvx",{encoding:"utf-8",stdio:"pipe"}).trim();if(a){let t=a.split(` -`).length;H.info("WORKER","Cleaning up orphaned MCP processes",{count:t}),e("pkill -f uvx",{stdio:"pipe"}),H.success("WORKER",`Cleaned up ${t} orphaned MCP server processes`)}}catch(a){if(a.status===1)H.debug("WORKER","No orphaned MCP processes to clean up");else throw a}}catch(e){H.warn("WORKER","Failed to cleanup orphaned processes (non-fatal)",{},e)}}async start(){await this.cleanupOrphanedProcesses(),await this.dbManager.initialize();let e=Rr.default.join(__dirname,"..","..","plugin","scripts","search-server.mjs"),a=new xn({command:"node",args:[e],env:process.env});await this.mcpClient.connect(a),H.success("WORKER","Connected to MCP search server");let t=ec();this.server=await new Promise((s,i)=>{let n=this.app.listen(t,()=>s(n));n.on("error",i)}),H.info("SYSTEM","Worker started",{port:t,pid:process.pid})}async shutdown(){if(await this.sessionManager.shutdownAll(),this.mcpClient)try{await this.mcpClient.close(),H.info("SYSTEM","MCP client closed")}catch(e){H.error("SYSTEM","Failed to close MCP client",{},e)}this.server&&await new Promise((e,a)=>{this.server.close(t=>t?a(t):e())}),await this.dbManager.close(),H.info("SYSTEM","Worker shutdown complete")}handleHealth(e,a){a.json({status:"ok",timestamp:Date.now()})}handleViewerUI(e,a){try{let t=Ka(),s=Rr.default.join(t,"plugin","ui","viewer.html"),i=(0,vt.readFileSync)(s,"utf-8");a.setHeader("Content-Type","text/html"),a.send(i)}catch(t){H.failure("WORKER","Viewer UI error",{},t),a.status(500).json({error:"Failed to load viewer UI"})}}handleSSEStream(e,a){a.setHeader("Content-Type","text/event-stream"),a.setHeader("Cache-Control","no-cache"),a.setHeader("Connection","keep-alive"),this.sseBroadcaster.addClient(a);let t=this.dbManager.getSessionStore().getAllProjects();this.sseBroadcaster.broadcast({type:"initial_load",projects:t,timestamp:Date.now()});let s=this.sessionManager.isAnySessionProcessing();this.sseBroadcaster.broadcast({type:"processing_status",isProcessing:s})}handleSessionInit(e,a){try{let t=parseInt(e.params.sessionDbId,10),{userPrompt:s,promptNumber:i}=e.body,n=this.sessionManager.initializeSession(t,s,i),l=this.dbManager.getSessionStore().db.prepare(` +`).length;H.info("WORKER","Cleaning up orphaned MCP processes",{count:t}),e("pkill -f uvx",{stdio:"pipe"}),H.success("WORKER",`Cleaned up ${t} orphaned MCP server processes`)}}catch(a){if(a.status===1)H.debug("WORKER","No orphaned MCP processes to clean up");else throw a}}catch(e){H.warn("WORKER","Failed to cleanup orphaned processes (non-fatal)",{},e)}}async start(){await this.cleanupOrphanedProcesses(),await this.dbManager.initialize();let e=Rr.default.join(__dirname,"..","..","plugin","scripts","search-server.mjs"),a=new xn({command:"node",args:[e],env:process.env});await this.mcpClient.connect(a),H.success("WORKER","Connected to MCP search server");let t=ec();this.server=await new Promise((s,i)=>{let n=this.app.listen(t,()=>s(n));n.on("error",i)}),H.info("SYSTEM","Worker started",{port:t,pid:process.pid})}async shutdown(){if(await this.sessionManager.shutdownAll(),this.mcpClient)try{await this.mcpClient.close(),H.info("SYSTEM","MCP client closed")}catch(e){H.error("SYSTEM","Failed to close MCP client",{},e)}this.server&&await new Promise((e,a)=>{this.server.close(t=>t?a(t):e())}),await this.dbManager.close(),H.info("SYSTEM","Worker shutdown complete")}handleHealth(e,a){a.json({status:"ok",timestamp:Date.now()})}handleViewerUI(e,a){try{let t=Ka(),s=Rr.default.join(t,"plugin","ui","viewer.html"),i=(0,vt.readFileSync)(s,"utf-8");a.setHeader("Content-Type","text/html"),a.send(i)}catch(t){H.failure("WORKER","Viewer UI error",{},t),a.status(500).json({error:"Failed to load viewer UI"})}}handleSSEStream(e,a){a.setHeader("Content-Type","text/event-stream"),a.setHeader("Cache-Control","no-cache"),a.setHeader("Connection","keep-alive"),this.sseBroadcaster.addClient(a);let t=this.dbManager.getSessionStore().getAllProjects();this.sseBroadcaster.broadcast({type:"initial_load",projects:t,timestamp:Date.now()});let s=this.sessionManager.isAnySessionProcessing(),i=this.sessionManager.getTotalActiveWork();this.sseBroadcaster.broadcast({type:"processing_status",isProcessing:s,queueDepth:i})}handleSessionInit(e,a){try{let t=parseInt(e.params.sessionDbId,10),{userPrompt:s,promptNumber:i}=e.body,n=this.sessionManager.initializeSession(t,s,i),l=this.dbManager.getSessionStore().db.prepare(` SELECT up.*, s.sdk_session_id, @@ -882,7 +882,7 @@ MEMORY PROCESSING CONTINUED WHERE up.claude_session_id = ? ORDER BY up.created_at_epoch DESC LIMIT 1 - `).get(n.claudeSessionId);if(l){this.sseBroadcaster.broadcast({type:"new_prompt",prompt:{id:l.id,claude_session_id:l.claude_session_id,project:l.project,prompt_number:l.prompt_number,prompt_text:l.prompt_text,created_at_epoch:l.created_at_epoch}}),this.sseBroadcaster.broadcast({type:"processing_status",isProcessing:!0});let c=Date.now(),u=l.prompt_text;this.dbManager.getChromaSync().syncUserPrompt(l.id,l.sdk_session_id,l.project,u,l.prompt_number,l.created_at_epoch).then(()=>{let p=Date.now()-c,m=u.length>60?u.substring(0,60)+"...":u;H.debug("CHROMA","User prompt synced",{promptId:l.id,duration:`${p}ms`,prompt:m})}).catch(p=>{H.error("CHROMA","Failed to sync user_prompt",{promptId:l.id,sessionId:t},p)})}this.broadcastProcessingStatus(),H.info("SESSION","Generator starting",{sessionId:t,project:n.project,promptNum:n.lastPromptNumber}),n.generatorPromise=this.sdkAgent.startSession(n,this).catch(c=>{H.failure("SDK","SDK agent error",{sessionId:t},c)}).finally(()=>{H.info("SESSION","Generator finished",{sessionId:t}),n.generatorPromise=null,this.broadcastProcessingStatus()}),this.sseBroadcaster.broadcast({type:"session_started",sessionDbId:t,project:n.project}),a.json({status:"initialized",sessionDbId:t,port:ec()})}catch(t){H.failure("WORKER","Session init failed",{},t),a.status(500).json({error:t.message})}}handleObservations(e,a){try{let t=parseInt(e.params.sessionDbId,10),{tool_name:s,tool_input:i,tool_response:n,prompt_number:o,cwd:l}=e.body;this.sessionManager.queueObservation(t,{tool_name:s,tool_input:i,tool_response:n,prompt_number:o,cwd:l});let c=this.sessionManager.getSession(t);c&&!c.generatorPromise&&(H.info("SESSION","Generator auto-starting (observation)",{sessionId:t,queueDepth:c.pendingMessages.length}),c.generatorPromise=this.sdkAgent.startSession(c,this).catch(u=>{H.failure("SDK","SDK agent error",{sessionId:t},u)}).finally(()=>{H.info("SESSION","Generator finished",{sessionId:t}),c.generatorPromise=null,this.broadcastProcessingStatus()})),this.broadcastProcessingStatus(),this.sseBroadcaster.broadcast({type:"observation_queued",sessionDbId:t}),a.json({status:"queued"})}catch(t){H.failure("WORKER","Observation queuing failed",{},t),a.status(500).json({error:t.message})}}handleSummarize(e,a){try{let t=parseInt(e.params.sessionDbId,10),{last_user_message:s,last_assistant_message:i}=e.body;this.sessionManager.queueSummarize(t,s,i);let n=this.sessionManager.getSession(t);n&&!n.generatorPromise&&(H.info("SESSION","Generator auto-starting (summarize)",{sessionId:t,queueDepth:n.pendingMessages.length}),n.generatorPromise=this.sdkAgent.startSession(n,this).catch(o=>{H.failure("SDK","SDK agent error",{sessionId:t},o)}).finally(()=>{H.info("SESSION","Generator finished",{sessionId:t}),n.generatorPromise=null,this.broadcastProcessingStatus()})),this.broadcastProcessingStatus(),a.json({status:"queued"})}catch(t){H.failure("WORKER","Summarize queuing failed",{},t),a.status(500).json({error:t.message})}}handleSessionStatus(e,a){try{let t=parseInt(e.params.sessionDbId,10),s=this.sessionManager.getSession(t);if(!s){a.json({status:"not_found"});return}a.json({status:"active",sessionDbId:t,project:s.project,queueLength:s.pendingMessages.length,uptime:Date.now()-s.startTime})}catch(t){H.failure("WORKER","Session status failed",{},t),a.status(500).json({error:t.message})}}async handleSessionDelete(e,a){try{let t=parseInt(e.params.sessionDbId,10);await this.sessionManager.deleteSession(t),this.dbManager.markSessionComplete(t),this.sseBroadcaster.broadcast({type:"session_completed",sessionDbId:t}),a.json({status:"deleted"})}catch(t){H.failure("WORKER","Session delete failed",{},t),a.status(500).json({error:t.message})}}async handleSessionComplete(e,a){try{let t=parseInt(e.params.sessionDbId,10);if(isNaN(t)){a.status(400).json({success:!1,error:"Invalid session ID"});return}await this.sessionManager.deleteSession(t),this.dbManager.markSessionComplete(t),this.broadcastProcessingStatus(),this.sseBroadcaster.broadcast({type:"session_completed",timestamp:Date.now(),sessionDbId:t}),a.json({success:!0})}catch(t){H.failure("WORKER","Session complete failed",{},t),a.status(500).json({success:!1,error:String(t)})}}handleGetObservations(e,a){try{let{offset:t,limit:s,project:i}=Ld(e),n=this.paginationHelper.getObservations(t,s,i);a.json(n)}catch(t){H.failure("WORKER","Get observations failed",{},t),a.status(500).json({error:t.message})}}handleGetSummaries(e,a){try{let{offset:t,limit:s,project:i}=Ld(e),n=this.paginationHelper.getSummaries(t,s,i);a.json(n)}catch(t){H.failure("WORKER","Get summaries failed",{},t),a.status(500).json({error:t.message})}}handleGetPrompts(e,a){try{let{offset:t,limit:s,project:i}=Ld(e),n=this.paginationHelper.getPrompts(t,s,i);a.json(n)}catch(t){H.failure("WORKER","Get prompts failed",{},t),a.status(500).json({error:t.message})}}handleGetStats(e,a){try{let t=this.dbManager.getSessionStore().db,s=Ka(),i=Rr.default.join(s,"package.json"),o=JSON.parse((0,vt.readFileSync)(i,"utf-8")).version,l=t.prepare("SELECT COUNT(*) as count FROM observations").get(),c=t.prepare("SELECT COUNT(*) as count FROM sdk_sessions").get(),u=t.prepare("SELECT COUNT(*) as count FROM session_summaries").get(),p=Rr.default.join((0,il.homedir)(),".claude-mem","claude-mem.db"),m=0;(0,vt.existsSync)(p)&&(m=(0,vt.statSync)(p).size);let f=Math.floor((Date.now()-this.startTime)/1e3),h=this.sessionManager.getActiveSessionCount(),d=this.sseBroadcaster.getClientCount();a.json({worker:{version:o,uptime:f,activeSessions:h,sseClients:d,port:ec()},database:{path:p,size:m,observations:l.count,sessions:c.count,summaries:u.count}})}catch(t){H.failure("WORKER","Get stats failed",{},t),a.status(500).json({error:t.message})}}handleGetSettings(e,a){try{let t=Rr.default.join((0,il.homedir)(),".claude","settings.json");if(!(0,vt.existsSync)(t)){a.json({CLAUDE_MEM_MODEL:"claude-haiku-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777"});return}let s=(0,vt.readFileSync)(t,"utf-8"),n=JSON.parse(s).env||{};a.json({CLAUDE_MEM_MODEL:n.CLAUDE_MEM_MODEL||"claude-haiku-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:n.CLAUDE_MEM_CONTEXT_OBSERVATIONS||"50",CLAUDE_MEM_WORKER_PORT:n.CLAUDE_MEM_WORKER_PORT||"37777"})}catch(t){H.failure("WORKER","Get settings failed",{},t),a.status(500).json({error:t.message})}}handleUpdateSettings(e,a){try{let{CLAUDE_MEM_MODEL:t,CLAUDE_MEM_CONTEXT_OBSERVATIONS:s,CLAUDE_MEM_WORKER_PORT:i}=e.body;if(s){let l=parseInt(s,10);if(isNaN(l)||l<1||l>200){a.status(400).json({success:!1,error:"CLAUDE_MEM_CONTEXT_OBSERVATIONS must be between 1 and 200"});return}}if(i){let l=parseInt(i,10);if(isNaN(l)||l<1024||l>65535){a.status(400).json({success:!1,error:"CLAUDE_MEM_WORKER_PORT must be between 1024 and 65535"});return}}let n=Rr.default.join((0,il.homedir)(),".claude","settings.json"),o={env:{}};if((0,vt.existsSync)(n)){let l=(0,vt.readFileSync)(n,"utf-8");o=JSON.parse(l),o.env||(o.env={})}t&&(o.env.CLAUDE_MEM_MODEL=t),s&&(o.env.CLAUDE_MEM_CONTEXT_OBSERVATIONS=s),i&&(o.env.CLAUDE_MEM_WORKER_PORT=i),(0,vt.writeFileSync)(n,JSON.stringify(o,null,2),"utf-8"),H.info("WORKER","Settings updated"),a.json({success:!0,message:"Settings updated successfully"})}catch(t){H.failure("WORKER","Update settings failed",{},t),a.status(500).json({success:!1,error:String(t)})}}handleGetProcessingStatus(e,a){let t=this.sessionManager.isAnySessionProcessing();a.json({isProcessing:t})}broadcastProcessingStatus(){let e=this.sessionManager.isAnySessionProcessing(),a=this.sessionManager.getTotalQueueDepth(),t=this.sessionManager.getActiveSessionCount();H.info("WORKER","Broadcasting processing status",{isProcessing:e,queueDepth:a,activeSessions:t}),this.sseBroadcaster.broadcast({type:"processing_status",isProcessing:e})}handleSetProcessing(e,a){try{this.broadcastProcessingStatus();let t=this.sessionManager.isAnySessionProcessing(),s=this.sessionManager.getTotalQueueDepth(),i=this.sessionManager.getActiveSessionCount();H.debug("WORKER","Processing status broadcast",{isProcessing:t,queueDepth:s,activeSessions:i}),a.json({status:"ok",isProcessing:t})}catch(t){H.failure("WORKER","Failed to broadcast processing status",{},t),a.status(500).json({error:t.message})}}handleGetMcpStatus(e,a){try{let t=this.isMcpEnabled();a.json({enabled:t})}catch(t){H.failure("WORKER","Get MCP status failed",{},t),a.status(500).json({error:t.message})}}handleToggleMcp(e,a){try{let{enabled:t}=e.body;if(typeof t!="boolean"){a.status(400).json({error:"enabled must be a boolean"});return}this.toggleMcp(t),a.json({success:!0,enabled:this.isMcpEnabled()})}catch(t){H.failure("WORKER","Toggle MCP failed",{},t),a.status(500).json({success:!1,error:t.message})}}isMcpEnabled(){let e=Ka(),a=Rr.default.join(e,"plugin",".mcp.json");return(0,vt.existsSync)(a)}toggleMcp(e){try{let a=Ka(),t=Rr.default.join(a,"plugin",".mcp.json"),s=Rr.default.join(a,"plugin",".mcp.json.disabled");e&&(0,vt.existsSync)(s)?((0,vt.renameSync)(s,t),H.info("WORKER","MCP search server enabled")):!e&&(0,vt.existsSync)(t)?((0,vt.renameSync)(t,s),H.info("WORKER","MCP search server disabled")):H.debug("WORKER","MCP toggle no-op (already in desired state)",{enabled:e})}catch(a){throw H.failure("WORKER","Failed to toggle MCP",{enabled:e},a),a}}async handleSearchObservations(e,a){try{let t=await this.mcpClient.callTool({name:"search_observations",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}async handleSearchSessions(e,a){try{let t=await this.mcpClient.callTool({name:"search_sessions",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}async handleSearchPrompts(e,a){try{let t=await this.mcpClient.callTool({name:"search_user_prompts",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}async handleSearchByConcept(e,a){try{let t=await this.mcpClient.callTool({name:"find_by_concept",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}async handleSearchByFile(e,a){try{let t=await this.mcpClient.callTool({name:"find_by_file",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}async handleSearchByType(e,a){try{let t=await this.mcpClient.callTool({name:"find_by_type",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}async handleGetRecentContext(e,a){try{let t=await this.mcpClient.callTool({name:"get_recent_context",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}async handleGetContextTimeline(e,a){try{let t=await this.mcpClient.callTool({name:"get_context_timeline",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}async handleGetTimelineByQuery(e,a){try{let t=await this.mcpClient.callTool({name:"get_timeline_by_query",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}handleSearchHelp(e,a){a.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)",format:'Response format: "index" or "full" (default: "full")',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)",format:'Response format: "index" or "full" (default: "full")',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)",format:'Response format: "index" or "full" (default: "full")',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",format:'Response format: "index" or "full" (default: "full")',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)",format:'Response format: "index" or "full" (default: "full")',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",format:'Response format: "index" or "full" (default: "full")',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&format=index&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"']})}};function Ld(r){let e=parseInt(r.query.offset,10)||0,a=Math.min(parseInt(r.query.limit,10)||20,100),t=r.query.project;return{offset:e,limit:a,project:t}}if(require.main===module||!module.parent){let r=new $i;process.on("SIGTERM",async()=>{H.info("SYSTEM","Received SIGTERM, shutting down gracefully"),await r.shutdown(),process.exit(0)}),process.on("SIGINT",async()=>{H.info("SYSTEM","Received SIGINT, shutting down gracefully"),await r.shutdown(),process.exit(0)}),r.start().catch(e=>{H.failure("SYSTEM","Worker startup failed",{},e),process.exit(1)})}var R$=$i;0&&(module.exports={WorkerService}); + `).get(n.claudeSessionId);if(l){this.sseBroadcaster.broadcast({type:"new_prompt",prompt:{id:l.id,claude_session_id:l.claude_session_id,project:l.project,prompt_number:l.prompt_number,prompt_text:l.prompt_text,created_at_epoch:l.created_at_epoch}}),this.sseBroadcaster.broadcast({type:"processing_status",isProcessing:!0});let c=Date.now(),u=l.prompt_text;this.dbManager.getChromaSync().syncUserPrompt(l.id,l.sdk_session_id,l.project,u,l.prompt_number,l.created_at_epoch).then(()=>{let p=Date.now()-c,m=u.length>60?u.substring(0,60)+"...":u;H.debug("CHROMA","User prompt synced",{promptId:l.id,duration:`${p}ms`,prompt:m})}).catch(p=>{H.error("CHROMA","Failed to sync user_prompt",{promptId:l.id,sessionId:t},p)})}this.broadcastProcessingStatus(),H.info("SESSION","Generator starting",{sessionId:t,project:n.project,promptNum:n.lastPromptNumber}),n.generatorPromise=this.sdkAgent.startSession(n,this).catch(c=>{H.failure("SDK","SDK agent error",{sessionId:t},c)}).finally(()=>{H.info("SESSION","Generator finished",{sessionId:t}),n.generatorPromise=null,this.broadcastProcessingStatus()}),this.sseBroadcaster.broadcast({type:"session_started",sessionDbId:t,project:n.project}),a.json({status:"initialized",sessionDbId:t,port:ec()})}catch(t){H.failure("WORKER","Session init failed",{},t),a.status(500).json({error:t.message})}}handleObservations(e,a){try{let t=parseInt(e.params.sessionDbId,10),{tool_name:s,tool_input:i,tool_response:n,prompt_number:o,cwd:l}=e.body;this.sessionManager.queueObservation(t,{tool_name:s,tool_input:i,tool_response:n,prompt_number:o,cwd:l});let c=this.sessionManager.getSession(t);c&&!c.generatorPromise&&(H.info("SESSION","Generator auto-starting (observation)",{sessionId:t,queueDepth:c.pendingMessages.length}),c.generatorPromise=this.sdkAgent.startSession(c,this).catch(u=>{H.failure("SDK","SDK agent error",{sessionId:t},u)}).finally(()=>{H.info("SESSION","Generator finished",{sessionId:t}),c.generatorPromise=null,this.broadcastProcessingStatus()})),this.broadcastProcessingStatus(),this.sseBroadcaster.broadcast({type:"observation_queued",sessionDbId:t}),a.json({status:"queued"})}catch(t){H.failure("WORKER","Observation queuing failed",{},t),a.status(500).json({error:t.message})}}handleSummarize(e,a){try{let t=parseInt(e.params.sessionDbId,10),{last_user_message:s,last_assistant_message:i}=e.body;this.sessionManager.queueSummarize(t,s,i);let n=this.sessionManager.getSession(t);n&&!n.generatorPromise&&(H.info("SESSION","Generator auto-starting (summarize)",{sessionId:t,queueDepth:n.pendingMessages.length}),n.generatorPromise=this.sdkAgent.startSession(n,this).catch(o=>{H.failure("SDK","SDK agent error",{sessionId:t},o)}).finally(()=>{H.info("SESSION","Generator finished",{sessionId:t}),n.generatorPromise=null,this.broadcastProcessingStatus()})),this.broadcastProcessingStatus(),a.json({status:"queued"})}catch(t){H.failure("WORKER","Summarize queuing failed",{},t),a.status(500).json({error:t.message})}}handleSessionStatus(e,a){try{let t=parseInt(e.params.sessionDbId,10),s=this.sessionManager.getSession(t);if(!s){a.json({status:"not_found"});return}a.json({status:"active",sessionDbId:t,project:s.project,queueLength:s.pendingMessages.length,uptime:Date.now()-s.startTime})}catch(t){H.failure("WORKER","Session status failed",{},t),a.status(500).json({error:t.message})}}async handleSessionDelete(e,a){try{let t=parseInt(e.params.sessionDbId,10);await this.sessionManager.deleteSession(t),this.dbManager.markSessionComplete(t),this.sseBroadcaster.broadcast({type:"session_completed",sessionDbId:t}),a.json({status:"deleted"})}catch(t){H.failure("WORKER","Session delete failed",{},t),a.status(500).json({error:t.message})}}async handleSessionComplete(e,a){try{let t=parseInt(e.params.sessionDbId,10);if(isNaN(t)){a.status(400).json({success:!1,error:"Invalid session ID"});return}await this.sessionManager.deleteSession(t),this.dbManager.markSessionComplete(t),this.broadcastProcessingStatus(),this.sseBroadcaster.broadcast({type:"session_completed",timestamp:Date.now(),sessionDbId:t}),a.json({success:!0})}catch(t){H.failure("WORKER","Session complete failed",{},t),a.status(500).json({success:!1,error:String(t)})}}handleGetObservations(e,a){try{let{offset:t,limit:s,project:i}=Ld(e),n=this.paginationHelper.getObservations(t,s,i);a.json(n)}catch(t){H.failure("WORKER","Get observations failed",{},t),a.status(500).json({error:t.message})}}handleGetSummaries(e,a){try{let{offset:t,limit:s,project:i}=Ld(e),n=this.paginationHelper.getSummaries(t,s,i);a.json(n)}catch(t){H.failure("WORKER","Get summaries failed",{},t),a.status(500).json({error:t.message})}}handleGetPrompts(e,a){try{let{offset:t,limit:s,project:i}=Ld(e),n=this.paginationHelper.getPrompts(t,s,i);a.json(n)}catch(t){H.failure("WORKER","Get prompts failed",{},t),a.status(500).json({error:t.message})}}handleGetStats(e,a){try{let t=this.dbManager.getSessionStore().db,s=Ka(),i=Rr.default.join(s,"package.json"),o=JSON.parse((0,vt.readFileSync)(i,"utf-8")).version,l=t.prepare("SELECT COUNT(*) as count FROM observations").get(),c=t.prepare("SELECT COUNT(*) as count FROM sdk_sessions").get(),u=t.prepare("SELECT COUNT(*) as count FROM session_summaries").get(),p=Rr.default.join((0,il.homedir)(),".claude-mem","claude-mem.db"),m=0;(0,vt.existsSync)(p)&&(m=(0,vt.statSync)(p).size);let f=Math.floor((Date.now()-this.startTime)/1e3),h=this.sessionManager.getActiveSessionCount(),d=this.sseBroadcaster.getClientCount();a.json({worker:{version:o,uptime:f,activeSessions:h,sseClients:d,port:ec()},database:{path:p,size:m,observations:l.count,sessions:c.count,summaries:u.count}})}catch(t){H.failure("WORKER","Get stats failed",{},t),a.status(500).json({error:t.message})}}handleGetSettings(e,a){try{let t=Rr.default.join((0,il.homedir)(),".claude","settings.json");if(!(0,vt.existsSync)(t)){a.json({CLAUDE_MEM_MODEL:"claude-haiku-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777"});return}let s=(0,vt.readFileSync)(t,"utf-8"),n=JSON.parse(s).env||{};a.json({CLAUDE_MEM_MODEL:n.CLAUDE_MEM_MODEL||"claude-haiku-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:n.CLAUDE_MEM_CONTEXT_OBSERVATIONS||"50",CLAUDE_MEM_WORKER_PORT:n.CLAUDE_MEM_WORKER_PORT||"37777"})}catch(t){H.failure("WORKER","Get settings failed",{},t),a.status(500).json({error:t.message})}}handleUpdateSettings(e,a){try{let{CLAUDE_MEM_MODEL:t,CLAUDE_MEM_CONTEXT_OBSERVATIONS:s,CLAUDE_MEM_WORKER_PORT:i}=e.body;if(s){let l=parseInt(s,10);if(isNaN(l)||l<1||l>200){a.status(400).json({success:!1,error:"CLAUDE_MEM_CONTEXT_OBSERVATIONS must be between 1 and 200"});return}}if(i){let l=parseInt(i,10);if(isNaN(l)||l<1024||l>65535){a.status(400).json({success:!1,error:"CLAUDE_MEM_WORKER_PORT must be between 1024 and 65535"});return}}let n=Rr.default.join((0,il.homedir)(),".claude","settings.json"),o={env:{}};if((0,vt.existsSync)(n)){let l=(0,vt.readFileSync)(n,"utf-8");o=JSON.parse(l),o.env||(o.env={})}t&&(o.env.CLAUDE_MEM_MODEL=t),s&&(o.env.CLAUDE_MEM_CONTEXT_OBSERVATIONS=s),i&&(o.env.CLAUDE_MEM_WORKER_PORT=i),(0,vt.writeFileSync)(n,JSON.stringify(o,null,2),"utf-8"),H.info("WORKER","Settings updated"),a.json({success:!0,message:"Settings updated successfully"})}catch(t){H.failure("WORKER","Update settings failed",{},t),a.status(500).json({success:!1,error:String(t)})}}handleGetProcessingStatus(e,a){let t=this.sessionManager.isAnySessionProcessing(),s=this.sessionManager.getTotalActiveWork();a.json({isProcessing:t,queueDepth:s})}broadcastProcessingStatus(){let e=this.sessionManager.isAnySessionProcessing(),a=this.sessionManager.getTotalActiveWork(),t=this.sessionManager.getActiveSessionCount();H.info("WORKER","Broadcasting processing status",{isProcessing:e,queueDepth:a,activeSessions:t}),this.sseBroadcaster.broadcast({type:"processing_status",isProcessing:e,queueDepth:a})}handleSetProcessing(e,a){try{this.broadcastProcessingStatus();let t=this.sessionManager.isAnySessionProcessing(),s=this.sessionManager.getTotalQueueDepth(),i=this.sessionManager.getActiveSessionCount();H.debug("WORKER","Processing status broadcast",{isProcessing:t,queueDepth:s,activeSessions:i}),a.json({status:"ok",isProcessing:t})}catch(t){H.failure("WORKER","Failed to broadcast processing status",{},t),a.status(500).json({error:t.message})}}handleGetMcpStatus(e,a){try{let t=this.isMcpEnabled();a.json({enabled:t})}catch(t){H.failure("WORKER","Get MCP status failed",{},t),a.status(500).json({error:t.message})}}handleToggleMcp(e,a){try{let{enabled:t}=e.body;if(typeof t!="boolean"){a.status(400).json({error:"enabled must be a boolean"});return}this.toggleMcp(t),a.json({success:!0,enabled:this.isMcpEnabled()})}catch(t){H.failure("WORKER","Toggle MCP failed",{},t),a.status(500).json({success:!1,error:t.message})}}isMcpEnabled(){let e=Ka(),a=Rr.default.join(e,"plugin",".mcp.json");return(0,vt.existsSync)(a)}toggleMcp(e){try{let a=Ka(),t=Rr.default.join(a,"plugin",".mcp.json"),s=Rr.default.join(a,"plugin",".mcp.json.disabled");e&&(0,vt.existsSync)(s)?((0,vt.renameSync)(s,t),H.info("WORKER","MCP search server enabled")):!e&&(0,vt.existsSync)(t)?((0,vt.renameSync)(t,s),H.info("WORKER","MCP search server disabled")):H.debug("WORKER","MCP toggle no-op (already in desired state)",{enabled:e})}catch(a){throw H.failure("WORKER","Failed to toggle MCP",{enabled:e},a),a}}async handleSearchObservations(e,a){try{let t=await this.mcpClient.callTool({name:"search_observations",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}async handleSearchSessions(e,a){try{let t=await this.mcpClient.callTool({name:"search_sessions",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}async handleSearchPrompts(e,a){try{let t=await this.mcpClient.callTool({name:"search_user_prompts",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}async handleSearchByConcept(e,a){try{let t=await this.mcpClient.callTool({name:"find_by_concept",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}async handleSearchByFile(e,a){try{let t=await this.mcpClient.callTool({name:"find_by_file",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}async handleSearchByType(e,a){try{let t=await this.mcpClient.callTool({name:"find_by_type",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}async handleGetRecentContext(e,a){try{let t=await this.mcpClient.callTool({name:"get_recent_context",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}async handleGetContextTimeline(e,a){try{let t=await this.mcpClient.callTool({name:"get_context_timeline",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}async handleGetTimelineByQuery(e,a){try{let t=await this.mcpClient.callTool({name:"get_timeline_by_query",arguments:e.query});a.json(t.content)}catch(t){H.failure("WORKER","Search failed",{},t),a.status(500).json({error:t.message})}}handleSearchHelp(e,a){a.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)",format:'Response format: "index" or "full" (default: "full")',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)",format:'Response format: "index" or "full" (default: "full")',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)",format:'Response format: "index" or "full" (default: "full")',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",format:'Response format: "index" or "full" (default: "full")',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)",format:'Response format: "index" or "full" (default: "full")',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",format:'Response format: "index" or "full" (default: "full")',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&format=index&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"']})}};function Ld(r){let e=parseInt(r.query.offset,10)||0,a=Math.min(parseInt(r.query.limit,10)||20,100),t=r.query.project;return{offset:e,limit:a,project:t}}if(require.main===module||!module.parent){let r=new $i;process.on("SIGTERM",async()=>{H.info("SYSTEM","Received SIGTERM, shutting down gracefully"),await r.shutdown(),process.exit(0)}),process.on("SIGINT",async()=>{H.info("SYSTEM","Received SIGINT, shutting down gracefully"),await r.shutdown(),process.exit(0)}),r.start().catch(e=>{H.failure("SYSTEM","Worker startup failed",{},e),process.exit(1)})}var R$=$i;0&&(module.exports={WorkerService}); /*! Bundled license information: depd/index.js: diff --git a/plugin/ui/viewer-bundle.js b/plugin/ui/viewer-bundle.js index b58dca59..52dc7878 100644 --- a/plugin/ui/viewer-bundle.js +++ b/plugin/ui/viewer-bundle.js @@ -1,13 +1,13 @@ -"use strict";(()=>{var Cf=Object.create;var ku=Object.defineProperty;var Nf=Object.getOwnPropertyDescriptor;var Tf=Object.getOwnPropertyNames;var Pf=Object.getPrototypeOf,Lf=Object.prototype.hasOwnProperty;var Ot=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Mf=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let l of Tf(t))!Lf.call(e,l)&&l!==n&&ku(e,l,{get:()=>t[l],enumerable:!(r=Nf(t,l))||r.enumerable});return e};var ee=(e,t,n)=>(n=e!=null?Cf(Pf(e)):{},Mf(t||!e||!e.__esModule?ku(n,"default",{value:e,enumerable:!0}):n,e));var Du=Ot(T=>{"use strict";var Mn=Symbol.for("react.element"),Of=Symbol.for("react.portal"),zf=Symbol.for("react.fragment"),Df=Symbol.for("react.strict_mode"),If=Symbol.for("react.profiler"),Af=Symbol.for("react.provider"),Uf=Symbol.for("react.context"),jf=Symbol.for("react.forward_ref"),Ff=Symbol.for("react.suspense"),Bf=Symbol.for("react.memo"),Vf=Symbol.for("react.lazy"),Eu=Symbol.iterator;function Hf(e){return e===null||typeof e!="object"?null:(e=Eu&&e[Eu]||e["@@iterator"],typeof e=="function"?e:null)}var Cu={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Nu=Object.assign,Tu={};function Xt(e,t,n){this.props=e,this.context=t,this.refs=Tu,this.updater=n||Cu}Xt.prototype.isReactComponent={};Xt.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Xt.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Pu(){}Pu.prototype=Xt.prototype;function Zl(e,t,n){this.props=e,this.context=t,this.refs=Tu,this.updater=n||Cu}var Jl=Zl.prototype=new Pu;Jl.constructor=Zl;Nu(Jl,Xt.prototype);Jl.isPureReactComponent=!0;var _u=Array.isArray,Lu=Object.prototype.hasOwnProperty,ql={current:null},Mu={key:!0,ref:!0,__self:!0,__source:!0};function Ou(e,t,n){var r,l={},o=null,i=null;if(t!=null)for(r in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(o=""+t.key),t)Lu.call(t,r)&&!Mu.hasOwnProperty(r)&&(l[r]=t[r]);var u=arguments.length-2;if(u===1)l.children=n;else if(1{"use strict";Iu.exports=Du()});var Ru=Ot(I=>{"use strict";function ro(e,t){var n=e.length;e.push(t);e:for(;0>>1,l=e[r];if(0>>1;rNr(u,n))sNr(a,u)?(e[r]=a,e[s]=n,r=s):(e[r]=u,e[i]=n,r=i);else if(sNr(a,n))e[r]=a,e[s]=n,r=s;else break e}}return t}function Nr(e,t){var n=e.sortIndex-t.sortIndex;return n!==0?n:e.id-t.id}typeof performance=="object"&&typeof performance.now=="function"?(Au=performance,I.unstable_now=function(){return Au.now()}):(eo=Date,Uu=eo.now(),I.unstable_now=function(){return eo.now()-Uu});var Au,eo,Uu,Re=[],st=[],Kf=1,Ce=null,oe=3,Lr=!1,zt=!1,zn=!1,Bu=typeof setTimeout=="function"?setTimeout:null,Vu=typeof clearTimeout=="function"?clearTimeout:null,ju=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function lo(e){for(var t=Ie(st);t!==null;){if(t.callback===null)Pr(st);else if(t.startTime<=e)Pr(st),t.sortIndex=t.expirationTime,ro(Re,t);else break;t=Ie(st)}}function oo(e){if(zn=!1,lo(e),!zt)if(Ie(Re)!==null)zt=!0,uo(io);else{var t=Ie(st);t!==null&&so(oo,t.startTime-e)}}function io(e,t){zt=!1,zn&&(zn=!1,Vu(Dn),Dn=-1),Lr=!0;var n=oe;try{for(lo(t),Ce=Ie(Re);Ce!==null&&(!(Ce.expirationTime>t)||e&&!$u());){var r=Ce.callback;if(typeof r=="function"){Ce.callback=null,oe=Ce.priorityLevel;var l=r(Ce.expirationTime<=t);t=I.unstable_now(),typeof l=="function"?Ce.callback=l:Ce===Ie(Re)&&Pr(Re),lo(t)}else Pr(Re);Ce=Ie(Re)}if(Ce!==null)var o=!0;else{var i=Ie(st);i!==null&&so(oo,i.startTime-t),o=!1}return o}finally{Ce=null,oe=n,Lr=!1}}var Mr=!1,Tr=null,Dn=-1,Hu=5,Wu=-1;function $u(){return!(I.unstable_now()-Wue||125r?(e.sortIndex=n,ro(st,e),Ie(Re)===null&&e===Ie(st)&&(zn?(Vu(Dn),Dn=-1):zn=!0,so(oo,n-r))):(e.sortIndex=l,ro(Re,e),zt||Lr||(zt=!0,uo(io))),e};I.unstable_shouldYield=$u;I.unstable_wrapCallback=function(e){var t=oe;return function(){var n=oe;oe=t;try{return e.apply(this,arguments)}finally{oe=n}}}});var Ku=Ot((em,Qu)=>{"use strict";Qu.exports=Ru()});var Zc=Ot(xe=>{"use strict";var Gf=Z(),Ee=Ku();function g(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),zo=Object.prototype.hasOwnProperty,Xf=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Gu={},Xu={};function Yf(e){return zo.call(Xu,e)?!0:zo.call(Gu,e)?!1:Xf.test(e)?Xu[e]=!0:(Gu[e]=!0,!1)}function Zf(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function Jf(e,t,n,r){if(t===null||typeof t>"u"||Zf(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function pe(e,t,n,r,l,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var re={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){re[e]=new pe(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];re[t]=new pe(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){re[e]=new pe(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){re[e]=new pe(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){re[e]=new pe(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){re[e]=new pe(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){re[e]=new pe(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){re[e]=new pe(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){re[e]=new pe(e,5,!1,e.toLowerCase(),null,!1,!1)});var xi=/[\-:]([a-z])/g;function Ci(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(xi,Ci);re[t]=new pe(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(xi,Ci);re[t]=new pe(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(xi,Ci);re[t]=new pe(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){re[e]=new pe(e,1,!1,e.toLowerCase(),null,!1,!1)});re.xlinkHref=new pe("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){re[e]=new pe(e,1,!1,e.toLowerCase(),null,!0,!0)});function Ni(e,t,n,r){var l=re.hasOwnProperty(t)?re[t]:null;(l!==null?l.type!==0:r||!(2{var Nf=Object.create;var ku=Object.defineProperty;var Tf=Object.getOwnPropertyDescriptor;var Pf=Object.getOwnPropertyNames;var Lf=Object.getPrototypeOf,Mf=Object.prototype.hasOwnProperty;var Ot=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Of=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let l of Pf(t))!Mf.call(e,l)&&l!==n&&ku(e,l,{get:()=>t[l],enumerable:!(r=Tf(t,l))||r.enumerable});return e};var ee=(e,t,n)=>(n=e!=null?Nf(Lf(e)):{},Of(t||!e||!e.__esModule?ku(n,"default",{value:e,enumerable:!0}):n,e));var Du=Ot(P=>{"use strict";var Mn=Symbol.for("react.element"),zf=Symbol.for("react.portal"),Df=Symbol.for("react.fragment"),If=Symbol.for("react.strict_mode"),Af=Symbol.for("react.profiler"),Uf=Symbol.for("react.provider"),jf=Symbol.for("react.context"),Ff=Symbol.for("react.forward_ref"),Bf=Symbol.for("react.suspense"),Vf=Symbol.for("react.memo"),Hf=Symbol.for("react.lazy"),Eu=Symbol.iterator;function Wf(e){return e===null||typeof e!="object"?null:(e=Eu&&e[Eu]||e["@@iterator"],typeof e=="function"?e:null)}var Cu={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},Nu=Object.assign,Tu={};function Xt(e,t,n){this.props=e,this.context=t,this.refs=Tu,this.updater=n||Cu}Xt.prototype.isReactComponent={};Xt.prototype.setState=function(e,t){if(typeof e!="object"&&typeof e!="function"&&e!=null)throw Error("setState(...): takes an object of state variables to update or a function which returns an object of state variables.");this.updater.enqueueSetState(this,e,t,"setState")};Xt.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,"forceUpdate")};function Pu(){}Pu.prototype=Xt.prototype;function Zl(e,t,n){this.props=e,this.context=t,this.refs=Tu,this.updater=n||Cu}var Jl=Zl.prototype=new Pu;Jl.constructor=Zl;Nu(Jl,Xt.prototype);Jl.isPureReactComponent=!0;var _u=Array.isArray,Lu=Object.prototype.hasOwnProperty,ql={current:null},Mu={key:!0,ref:!0,__self:!0,__source:!0};function Ou(e,t,n){var r,l={},o=null,i=null;if(t!=null)for(r in t.ref!==void 0&&(i=t.ref),t.key!==void 0&&(o=""+t.key),t)Lu.call(t,r)&&!Mu.hasOwnProperty(r)&&(l[r]=t[r]);var u=arguments.length-2;if(u===1)l.children=n;else if(1{"use strict";Iu.exports=Du()});var Ru=Ot(D=>{"use strict";function ro(e,t){var n=e.length;e.push(t);e:for(;0>>1,l=e[r];if(0>>1;rNr(u,n))sNr(c,u)?(e[r]=c,e[s]=n,r=s):(e[r]=u,e[i]=n,r=i);else if(sNr(c,n))e[r]=c,e[s]=n,r=s;else break e}}return t}function Nr(e,t){var n=e.sortIndex-t.sortIndex;return n!==0?n:e.id-t.id}typeof performance=="object"&&typeof performance.now=="function"?(Au=performance,D.unstable_now=function(){return Au.now()}):(eo=Date,Uu=eo.now(),D.unstable_now=function(){return eo.now()-Uu});var Au,eo,Uu,Re=[],st=[],Gf=1,Ne=null,oe=3,Lr=!1,zt=!1,zn=!1,Bu=typeof setTimeout=="function"?setTimeout:null,Vu=typeof clearTimeout=="function"?clearTimeout:null,ju=typeof setImmediate<"u"?setImmediate:null;typeof navigator<"u"&&navigator.scheduling!==void 0&&navigator.scheduling.isInputPending!==void 0&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function lo(e){for(var t=Ie(st);t!==null;){if(t.callback===null)Pr(st);else if(t.startTime<=e)Pr(st),t.sortIndex=t.expirationTime,ro(Re,t);else break;t=Ie(st)}}function oo(e){if(zn=!1,lo(e),!zt)if(Ie(Re)!==null)zt=!0,uo(io);else{var t=Ie(st);t!==null&&so(oo,t.startTime-e)}}function io(e,t){zt=!1,zn&&(zn=!1,Vu(Dn),Dn=-1),Lr=!0;var n=oe;try{for(lo(t),Ne=Ie(Re);Ne!==null&&(!(Ne.expirationTime>t)||e&&!$u());){var r=Ne.callback;if(typeof r=="function"){Ne.callback=null,oe=Ne.priorityLevel;var l=r(Ne.expirationTime<=t);t=D.unstable_now(),typeof l=="function"?Ne.callback=l:Ne===Ie(Re)&&Pr(Re),lo(t)}else Pr(Re);Ne=Ie(Re)}if(Ne!==null)var o=!0;else{var i=Ie(st);i!==null&&so(oo,i.startTime-t),o=!1}return o}finally{Ne=null,oe=n,Lr=!1}}var Mr=!1,Tr=null,Dn=-1,Hu=5,Wu=-1;function $u(){return!(D.unstable_now()-Wue||125r?(e.sortIndex=n,ro(st,e),Ie(Re)===null&&e===Ie(st)&&(zn?(Vu(Dn),Dn=-1):zn=!0,so(oo,n-r))):(e.sortIndex=l,ro(Re,e),zt||Lr||(zt=!0,uo(io))),e};D.unstable_shouldYield=$u;D.unstable_wrapCallback=function(e){var t=oe;return function(){var n=oe;oe=t;try{return e.apply(this,arguments)}finally{oe=n}}}});var Ku=Ot((tm,Qu)=>{"use strict";Qu.exports=Ru()});var Zc=Ot(xe=>{"use strict";var Xf=Z(),Ee=Ku();function g(e){for(var t="https://reactjs.org/docs/error-decoder.html?invariant="+e,n=1;n"u"||typeof window.document>"u"||typeof window.document.createElement>"u"),zo=Object.prototype.hasOwnProperty,Yf=/^[:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD][:A-Z_a-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\-.0-9\u00B7\u0300-\u036F\u203F-\u2040]*$/,Gu={},Xu={};function Zf(e){return zo.call(Xu,e)?!0:zo.call(Gu,e)?!1:Yf.test(e)?Xu[e]=!0:(Gu[e]=!0,!1)}function Jf(e,t,n,r){if(n!==null&&n.type===0)return!1;switch(typeof t){case"function":case"symbol":return!0;case"boolean":return r?!1:n!==null?!n.acceptsBooleans:(e=e.toLowerCase().slice(0,5),e!=="data-"&&e!=="aria-");default:return!1}}function qf(e,t,n,r){if(t===null||typeof t>"u"||Jf(e,t,n,r))return!0;if(r)return!1;if(n!==null)switch(n.type){case 3:return!t;case 4:return t===!1;case 5:return isNaN(t);case 6:return isNaN(t)||1>t}return!1}function pe(e,t,n,r,l,o,i){this.acceptsBooleans=t===2||t===3||t===4,this.attributeName=r,this.attributeNamespace=l,this.mustUseProperty=n,this.propertyName=e,this.type=t,this.sanitizeURL=o,this.removeEmptyString=i}var re={};"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style".split(" ").forEach(function(e){re[e]=new pe(e,0,!1,e,null,!1,!1)});[["acceptCharset","accept-charset"],["className","class"],["htmlFor","for"],["httpEquiv","http-equiv"]].forEach(function(e){var t=e[0];re[t]=new pe(t,1,!1,e[1],null,!1,!1)});["contentEditable","draggable","spellCheck","value"].forEach(function(e){re[e]=new pe(e,2,!1,e.toLowerCase(),null,!1,!1)});["autoReverse","externalResourcesRequired","focusable","preserveAlpha"].forEach(function(e){re[e]=new pe(e,2,!1,e,null,!1,!1)});"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope".split(" ").forEach(function(e){re[e]=new pe(e,3,!1,e.toLowerCase(),null,!1,!1)});["checked","multiple","muted","selected"].forEach(function(e){re[e]=new pe(e,3,!0,e,null,!1,!1)});["capture","download"].forEach(function(e){re[e]=new pe(e,4,!1,e,null,!1,!1)});["cols","rows","size","span"].forEach(function(e){re[e]=new pe(e,6,!1,e,null,!1,!1)});["rowSpan","start"].forEach(function(e){re[e]=new pe(e,5,!1,e.toLowerCase(),null,!1,!1)});var xi=/[\-:]([a-z])/g;function Ci(e){return e[1].toUpperCase()}"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height".split(" ").forEach(function(e){var t=e.replace(xi,Ci);re[t]=new pe(t,1,!1,e,null,!1,!1)});"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type".split(" ").forEach(function(e){var t=e.replace(xi,Ci);re[t]=new pe(t,1,!1,e,"http://www.w3.org/1999/xlink",!1,!1)});["xml:base","xml:lang","xml:space"].forEach(function(e){var t=e.replace(xi,Ci);re[t]=new pe(t,1,!1,e,"http://www.w3.org/XML/1998/namespace",!1,!1)});["tabIndex","crossOrigin"].forEach(function(e){re[e]=new pe(e,1,!1,e.toLowerCase(),null,!1,!1)});re.xlinkHref=new pe("xlinkHref",1,!1,"xlink:href","http://www.w3.org/1999/xlink",!0,!1);["src","href","action","formAction"].forEach(function(e){re[e]=new pe(e,1,!1,e.toLowerCase(),null,!0,!0)});function Ni(e,t,n,r){var l=re.hasOwnProperty(t)?re[t]:null;(l!==null?l.type!==0:r||!(2u||l[i]!==o[u]){var s=` -`+l[i].replace(" at new "," at ");return e.displayName&&s.includes("")&&(s=s.replace("",e.displayName)),s}while(1<=i&&0<=u);break}}}finally{co=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Wn(e):""}function qf(e){switch(e.tag){case 5:return Wn(e.type);case 16:return Wn("Lazy");case 13:return Wn("Suspense");case 19:return Wn("SuspenseList");case 0:case 2:case 15:return e=fo(e.type,!1),e;case 11:return e=fo(e.type.render,!1),e;case 1:return e=fo(e.type,!0),e;default:return""}}function Uo(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case qt:return"Fragment";case Jt:return"Portal";case Do:return"Profiler";case Ti:return"StrictMode";case Io:return"Suspense";case Ao:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case ta:return(e.displayName||"Context")+".Consumer";case ea:return(e._context.displayName||"Context")+".Provider";case Pi:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Li:return t=e.displayName||null,t!==null?t:Uo(e.type)||"Memo";case ct:t=e._payload,e=e._init;try{return Uo(e(t))}catch{}}return null}function bf(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Uo(t);case 8:return t===Ti?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function xt(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function ra(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function ed(e){var t=ra(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function zr(e){e._valueTracker||(e._valueTracker=ed(e))}function la(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=ra(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function il(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function jo(e,t){var n=t.checked;return W({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Zu(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=xt(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function oa(e,t){t=t.checked,t!=null&&Ni(e,"checked",t,!1)}function Fo(e,t){oa(e,t);var n=xt(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Bo(e,t.type,n):t.hasOwnProperty("defaultValue")&&Bo(e,t.type,xt(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Ju(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Bo(e,t,n){(t!=="number"||il(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var $n=Array.isArray;function cn(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=Dr.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function nr(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Kn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},td=["Webkit","ms","Moz","O"];Object.keys(Kn).forEach(function(e){td.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Kn[t]=Kn[e]})});function aa(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Kn.hasOwnProperty(e)&&Kn[e]?(""+t).trim():t+"px"}function ca(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,l=aa(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,l):e[n]=l}}var nd=W({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Wo(e,t){if(t){if(nd[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(g(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(g(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(g(61))}if(t.style!=null&&typeof t.style!="object")throw Error(g(62))}}function $o(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Ro=null;function Mi(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Qo=null,fn=null,dn=null;function es(e){if(e=wr(e)){if(typeof Qo!="function")throw Error(g(280));var t=e.stateNode;t&&(t=Il(t),Qo(e.stateNode,e.type,t))}}function fa(e){fn?dn?dn.push(e):dn=[e]:fn=e}function da(){if(fn){var e=fn,t=dn;if(dn=fn=null,es(e),t)for(e=0;e>>=0,e===0?32:31-(pd(e)/md|0)|0}var Ir=64,Ar=4194304;function Rn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;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:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function cl(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,l=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var u=i&~l;u!==0?r=Rn(u):(o&=i,o!==0&&(r=Rn(o)))}else i=n&~l,i!==0?r=Rn(i):o!==0&&(r=Rn(o));if(r===0)return 0;if(t!==0&&t!==r&&(t&l)===0&&(l=r&-r,o=t&-t,l>=o||l===16&&(o&4194240)!==0))return t;if((r&4)!==0&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function yr(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Be(t),e[t]=n}function yd(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Xn),as=" ",cs=!1;function za(e,t){switch(e){case"keyup":return Kd.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Da(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var bt=!1;function Xd(e,t){switch(e){case"compositionend":return Da(t);case"keypress":return t.which!==32?null:(cs=!0,as);case"textInput":return e=t.data,e===as&&cs?null:e;default:return null}}function Yd(e,t){if(bt)return e==="compositionend"||!Fi&&za(e,t)?(e=Ma(),Jr=Ai=mt=null,bt=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=ps(n)}}function ja(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?ja(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Fa(){for(var e=window,t=il();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=il(e.document)}return t}function Bi(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function lp(e){var t=Fa(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&ja(n.ownerDocument.documentElement,n)){if(r!==null&&Bi(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=n.textContent.length,o=Math.min(r.start,l);r=r.end===void 0?o:Math.min(r.end,l),!e.extend&&o>r&&(l=r,r=o,o=l),l=ms(n,o);var i=ms(n,r);l&&i&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,en=null,Jo=null,Zn=null,qo=!1;function vs(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;qo||en==null||en!==il(r)||(r=en,"selectionStart"in r&&Bi(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Zn&&sr(Zn,r)||(Zn=r,r=pl(Jo,"onSelect"),0rn||(e.current=li[rn],li[rn]=null,rn--)}function A(e,t){rn++,li[rn]=e.current,e.current=t}var Ct={},ae=Tt(Ct),he=Tt(!1),Vt=Ct;function gn(e,t){var n=e.type.contextTypes;if(!n)return Ct;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in n)l[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function ge(e){return e=e.childContextTypes,e!=null}function vl(){j(he),j(ae)}function xs(e,t,n){if(ae.current!==Ct)throw Error(g(168));A(ae,t),A(he,n)}function Ga(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(g(108,bf(e)||"Unknown",l));return W({},n,r)}function hl(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ct,Vt=ae.current,A(ae,e),A(he,he.current),!0}function Cs(e,t,n){var r=e.stateNode;if(!r)throw Error(g(169));n?(e=Ga(e,t,Vt),r.__reactInternalMemoizedMergedChildContext=e,j(he),j(ae),A(ae,e)):j(he),A(he,n)}var Je=null,Al=!1,_o=!1;function Xa(e){Je===null?Je=[e]:Je.push(e)}function mp(e){Al=!0,Xa(e)}function Pt(){if(!_o&&Je!==null){_o=!0;var e=0,t=D;try{var n=Je;for(D=1;e>=i,l-=i,qe=1<<32-Be(t)+l|n<N?(L=E,E=null):L=E.sibling;var M=v(f,E,d[N],h);if(M===null){E===null&&(E=L);break}e&&E&&M.alternate===null&&t(f,E),c=o(M,c,N),C===null?x=M:C.sibling=M,C=M,E=L}if(N===d.length)return n(f,E),F&&Dt(f,N),x;if(E===null){for(;NN?(L=E,E=null):L=E.sibling;var $e=v(f,E,M.value,h);if($e===null){E===null&&(E=L);break}e&&E&&$e.alternate===null&&t(f,E),c=o($e,c,N),C===null?x=$e:C.sibling=$e,C=$e,E=L}if(M.done)return n(f,E),F&&Dt(f,N),x;if(E===null){for(;!M.done;N++,M=d.next())M=m(f,M.value,h),M!==null&&(c=o(M,c,N),C===null?x=M:C.sibling=M,C=M);return F&&Dt(f,N),x}for(E=r(f,E);!M.done;N++,M=d.next())M=y(E,f,N,M.value,h),M!==null&&(e&&M.alternate!==null&&E.delete(M.key===null?N:M.key),c=o(M,c,N),C===null?x=M:C.sibling=M,C=M);return e&&E.forEach(function(Xl){return t(f,Xl)}),F&&Dt(f,N),x}function z(f,c,d,h){if(typeof d=="object"&&d!==null&&d.type===qt&&d.key===null&&(d=d.props.children),typeof d=="object"&&d!==null){switch(d.$$typeof){case Or:e:{for(var x=d.key,C=c;C!==null;){if(C.key===x){if(x=d.type,x===qt){if(C.tag===7){n(f,C.sibling),c=l(C,d.props.children),c.return=f,f=c;break e}}else if(C.elementType===x||typeof x=="object"&&x!==null&&x.$$typeof===ct&&Ps(x)===C.type){n(f,C.sibling),c=l(C,d.props),c.ref=Fn(f,C,d),c.return=f,f=c;break e}n(f,C);break}else t(f,C);C=C.sibling}d.type===qt?(c=Bt(d.props.children,f.mode,h,d.key),c.return=f,f=c):(h=ol(d.type,d.key,d.props,null,f.mode,h),h.ref=Fn(f,c,d),h.return=f,f=h)}return i(f);case Jt:e:{for(C=d.key;c!==null;){if(c.key===C)if(c.tag===4&&c.stateNode.containerInfo===d.containerInfo&&c.stateNode.implementation===d.implementation){n(f,c.sibling),c=l(c,d.children||[]),c.return=f,f=c;break e}else{n(f,c);break}else t(f,c);c=c.sibling}c=Oo(d,f.mode,h),c.return=f,f=c}return i(f);case ct:return C=d._init,z(f,c,C(d._payload),h)}if($n(d))return k(f,c,d,h);if(In(d))return w(f,c,d,h);Kr(f,d)}return typeof d=="string"&&d!==""||typeof d=="number"?(d=""+d,c!==null&&c.tag===6?(n(f,c.sibling),c=l(c,d),c.return=f,f=c):(n(f,c),c=Mo(d,f.mode,h),c.return=f,f=c),i(f)):n(f,c)}return z}var Sn=qa(!0),ba=qa(!1),Sl=Tt(null),wl=null,un=null,$i=null;function Ri(){$i=un=wl=null}function Qi(e){var t=Sl.current;j(Sl),e._currentValue=t}function ui(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function mn(e,t){wl=e,$i=un=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&t)!==0&&(ve=!0),e.firstContext=null)}function Me(e){var t=e._currentValue;if($i!==e)if(e={context:e,memoizedValue:t,next:null},un===null){if(wl===null)throw Error(g(308));un=e,wl.dependencies={lanes:0,firstContext:e}}else un=un.next=e;return t}var Ut=null;function Ki(e){Ut===null?Ut=[e]:Ut.push(e)}function ec(e,t,n,r){var l=t.interleaved;return l===null?(n.next=n,Ki(t)):(n.next=l.next,l.next=n),t.interleaved=n,rt(e,r)}function rt(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var ft=!1;function Gi(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function tc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function et(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function wt(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,(O&2)!==0){var l=r.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),r.pending=t,rt(e,n)}return l=r.interleaved,l===null?(t.next=t,Ki(r)):(t.next=l.next,l.next=t),r.interleaved=t,rt(e,n)}function br(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,zi(e,n)}}function Ls(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var l=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?l=o=i:o=o.next=i,n=n.next}while(n!==null);o===null?l=o=t:o=o.next=t}else l=o=t;n={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function kl(e,t,n,r){var l=e.updateQueue;ft=!1;var o=l.firstBaseUpdate,i=l.lastBaseUpdate,u=l.shared.pending;if(u!==null){l.shared.pending=null;var s=u,a=s.next;s.next=null,i===null?o=a:i.next=a,i=s;var p=e.alternate;p!==null&&(p=p.updateQueue,u=p.lastBaseUpdate,u!==i&&(u===null?p.firstBaseUpdate=a:u.next=a,p.lastBaseUpdate=s))}if(o!==null){var m=l.baseState;i=0,p=a=s=null,u=o;do{var v=u.lane,y=u.eventTime;if((r&v)===v){p!==null&&(p=p.next={eventTime:y,lane:0,tag:u.tag,payload:u.payload,callback:u.callback,next:null});e:{var k=e,w=u;switch(v=t,y=n,w.tag){case 1:if(k=w.payload,typeof k=="function"){m=k.call(y,m,v);break e}m=k;break e;case 3:k.flags=k.flags&-65537|128;case 0:if(k=w.payload,v=typeof k=="function"?k.call(y,m,v):k,v==null)break e;m=W({},m,v);break e;case 2:ft=!0}}u.callback!==null&&u.lane!==0&&(e.flags|=64,v=l.effects,v===null?l.effects=[u]:v.push(u))}else y={eventTime:y,lane:v,tag:u.tag,payload:u.payload,callback:u.callback,next:null},p===null?(a=p=y,s=m):p=p.next=y,i|=v;if(u=u.next,u===null){if(u=l.shared.pending,u===null)break;v=u,u=v.next,v.next=null,l.lastBaseUpdate=v,l.shared.pending=null}}while(!0);if(p===null&&(s=m),l.baseState=s,l.firstBaseUpdate=a,l.lastBaseUpdate=p,t=l.shared.interleaved,t!==null){l=t;do i|=l.lane,l=l.next;while(l!==t)}else o===null&&(l.shared.lanes=0);$t|=i,e.lanes=i,e.memoizedState=m}}function Ms(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=Co.transition;Co.transition={};try{e(!1),t()}finally{D=n,Co.transition=r}}function yc(){return Oe().memoizedState}function yp(e,t,n){var r=Et(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Sc(e))wc(t,n);else if(n=ec(e,t,n,r),n!==null){var l=de();Ve(n,e,r,l),kc(n,t,r)}}function Sp(e,t,n){var r=Et(e),l={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Sc(e))wc(t,l);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,u=o(i,n);if(l.hasEagerState=!0,l.eagerState=u,He(u,i)){var s=t.interleaved;s===null?(l.next=l,Ki(t)):(l.next=s.next,s.next=l),t.interleaved=l;return}}catch{}finally{}n=ec(e,t,l,r),n!==null&&(l=de(),Ve(n,e,r,l),kc(n,t,r))}}function Sc(e){var t=e.alternate;return e===H||t!==null&&t===H}function wc(e,t){Jn=_l=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function kc(e,t,n){if((n&4194240)!==0){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,zi(e,n)}}var xl={readContext:Me,useCallback:ie,useContext:ie,useEffect:ie,useImperativeHandle:ie,useInsertionEffect:ie,useLayoutEffect:ie,useMemo:ie,useReducer:ie,useRef:ie,useState:ie,useDebugValue:ie,useDeferredValue:ie,useTransition:ie,useMutableSource:ie,useSyncExternalStore:ie,useId:ie,unstable_isNewReconciler:!1},wp={readContext:Me,useCallback:function(e,t){return Ke().memoizedState=[e,t===void 0?null:t],e},useContext:Me,useEffect:zs,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,tl(4194308,4,pc.bind(null,t,e),n)},useLayoutEffect:function(e,t){return tl(4194308,4,e,t)},useInsertionEffect:function(e,t){return tl(4,2,e,t)},useMemo:function(e,t){var n=Ke();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Ke();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=yp.bind(null,H,e),[r.memoizedState,e]},useRef:function(e){var t=Ke();return e={current:e},t.memoizedState=e},useState:Os,useDebugValue:tu,useDeferredValue:function(e){return Ke().memoizedState=e},useTransition:function(){var e=Os(!1),t=e[0];return e=gp.bind(null,e[1]),Ke().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=H,l=Ke();if(F){if(n===void 0)throw Error(g(407));n=n()}else{if(n=t(),q===null)throw Error(g(349));(Wt&30)!==0||oc(r,t,n)}l.memoizedState=n;var o={value:n,getSnapshot:t};return l.queue=o,zs(uc.bind(null,r,o,e),[e]),r.flags|=2048,hr(9,ic.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Ke(),t=q.identifierPrefix;if(F){var n=be,r=qe;n=(r&~(1<<32-Be(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=mr++,0")&&(s=s.replace("",e.displayName)),s}while(1<=i&&0<=u);break}}}finally{co=!1,Error.prepareStackTrace=n}return(e=e?e.displayName||e.name:"")?Wn(e):""}function bf(e){switch(e.tag){case 5:return Wn(e.type);case 16:return Wn("Lazy");case 13:return Wn("Suspense");case 19:return Wn("SuspenseList");case 0:case 2:case 15:return e=fo(e.type,!1),e;case 11:return e=fo(e.type.render,!1),e;case 1:return e=fo(e.type,!0),e;default:return""}}function Uo(e){if(e==null)return null;if(typeof e=="function")return e.displayName||e.name||null;if(typeof e=="string")return e;switch(e){case qt:return"Fragment";case Jt:return"Portal";case Do:return"Profiler";case Ti:return"StrictMode";case Io:return"Suspense";case Ao:return"SuspenseList"}if(typeof e=="object")switch(e.$$typeof){case ta:return(e.displayName||"Context")+".Consumer";case ea:return(e._context.displayName||"Context")+".Provider";case Pi:var t=e.render;return e=e.displayName,e||(e=t.displayName||t.name||"",e=e!==""?"ForwardRef("+e+")":"ForwardRef"),e;case Li:return t=e.displayName||null,t!==null?t:Uo(e.type)||"Memo";case ct:t=e._payload,e=e._init;try{return Uo(e(t))}catch{}}return null}function ed(e){var t=e.type;switch(e.tag){case 24:return"Cache";case 9:return(t.displayName||"Context")+".Consumer";case 10:return(t._context.displayName||"Context")+".Provider";case 18:return"DehydratedFragment";case 11:return e=t.render,e=e.displayName||e.name||"",t.displayName||(e!==""?"ForwardRef("+e+")":"ForwardRef");case 7:return"Fragment";case 5:return t;case 4:return"Portal";case 3:return"Root";case 6:return"Text";case 16:return Uo(t);case 8:return t===Ti?"StrictMode":"Mode";case 22:return"Offscreen";case 12:return"Profiler";case 21:return"Scope";case 13:return"Suspense";case 19:return"SuspenseList";case 25:return"TracingMarker";case 1:case 0:case 17:case 2:case 14:case 15:if(typeof t=="function")return t.displayName||t.name||null;if(typeof t=="string")return t}return null}function xt(e){switch(typeof e){case"boolean":case"number":case"string":case"undefined":return e;case"object":return e;default:return""}}function ra(e){var t=e.type;return(e=e.nodeName)&&e.toLowerCase()==="input"&&(t==="checkbox"||t==="radio")}function td(e){var t=ra(e)?"checked":"value",n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t),r=""+e[t];if(!e.hasOwnProperty(t)&&typeof n<"u"&&typeof n.get=="function"&&typeof n.set=="function"){var l=n.get,o=n.set;return Object.defineProperty(e,t,{configurable:!0,get:function(){return l.call(this)},set:function(i){r=""+i,o.call(this,i)}}),Object.defineProperty(e,t,{enumerable:n.enumerable}),{getValue:function(){return r},setValue:function(i){r=""+i},stopTracking:function(){e._valueTracker=null,delete e[t]}}}}function zr(e){e._valueTracker||(e._valueTracker=td(e))}function la(e){if(!e)return!1;var t=e._valueTracker;if(!t)return!0;var n=t.getValue(),r="";return e&&(r=ra(e)?e.checked?"true":"false":e.value),e=r,e!==n?(t.setValue(e),!0):!1}function il(e){if(e=e||(typeof document<"u"?document:void 0),typeof e>"u")return null;try{return e.activeElement||e.body}catch{return e.body}}function jo(e,t){var n=t.checked;return W({},t,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:n??e._wrapperState.initialChecked})}function Zu(e,t){var n=t.defaultValue==null?"":t.defaultValue,r=t.checked!=null?t.checked:t.defaultChecked;n=xt(t.value!=null?t.value:n),e._wrapperState={initialChecked:r,initialValue:n,controlled:t.type==="checkbox"||t.type==="radio"?t.checked!=null:t.value!=null}}function oa(e,t){t=t.checked,t!=null&&Ni(e,"checked",t,!1)}function Fo(e,t){oa(e,t);var n=xt(t.value),r=t.type;if(n!=null)r==="number"?(n===0&&e.value===""||e.value!=n)&&(e.value=""+n):e.value!==""+n&&(e.value=""+n);else if(r==="submit"||r==="reset"){e.removeAttribute("value");return}t.hasOwnProperty("value")?Bo(e,t.type,n):t.hasOwnProperty("defaultValue")&&Bo(e,t.type,xt(t.defaultValue)),t.checked==null&&t.defaultChecked!=null&&(e.defaultChecked=!!t.defaultChecked)}function Ju(e,t,n){if(t.hasOwnProperty("value")||t.hasOwnProperty("defaultValue")){var r=t.type;if(!(r!=="submit"&&r!=="reset"||t.value!==void 0&&t.value!==null))return;t=""+e._wrapperState.initialValue,n||t===e.value||(e.value=t),e.defaultValue=t}n=e.name,n!==""&&(e.name=""),e.defaultChecked=!!e._wrapperState.initialChecked,n!==""&&(e.name=n)}function Bo(e,t,n){(t!=="number"||il(e.ownerDocument)!==e)&&(n==null?e.defaultValue=""+e._wrapperState.initialValue:e.defaultValue!==""+n&&(e.defaultValue=""+n))}var $n=Array.isArray;function cn(e,t,n,r){if(e=e.options,t){t={};for(var l=0;l"+t.valueOf().toString()+"",t=Dr.firstChild;e.firstChild;)e.removeChild(e.firstChild);for(;t.firstChild;)e.appendChild(t.firstChild)}});function nr(e,t){if(t){var n=e.firstChild;if(n&&n===e.lastChild&&n.nodeType===3){n.nodeValue=t;return}}e.textContent=t}var Kn={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,zoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},nd=["Webkit","ms","Moz","O"];Object.keys(Kn).forEach(function(e){nd.forEach(function(t){t=t+e.charAt(0).toUpperCase()+e.substring(1),Kn[t]=Kn[e]})});function aa(e,t,n){return t==null||typeof t=="boolean"||t===""?"":n||typeof t!="number"||t===0||Kn.hasOwnProperty(e)&&Kn[e]?(""+t).trim():t+"px"}function ca(e,t){e=e.style;for(var n in t)if(t.hasOwnProperty(n)){var r=n.indexOf("--")===0,l=aa(n,t[n],r);n==="float"&&(n="cssFloat"),r?e.setProperty(n,l):e[n]=l}}var rd=W({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});function Wo(e,t){if(t){if(rd[e]&&(t.children!=null||t.dangerouslySetInnerHTML!=null))throw Error(g(137,e));if(t.dangerouslySetInnerHTML!=null){if(t.children!=null)throw Error(g(60));if(typeof t.dangerouslySetInnerHTML!="object"||!("__html"in t.dangerouslySetInnerHTML))throw Error(g(61))}if(t.style!=null&&typeof t.style!="object")throw Error(g(62))}}function $o(e,t){if(e.indexOf("-")===-1)return typeof t.is=="string";switch(e){case"annotation-xml":case"color-profile":case"font-face":case"font-face-src":case"font-face-uri":case"font-face-format":case"font-face-name":case"missing-glyph":return!1;default:return!0}}var Ro=null;function Mi(e){return e=e.target||e.srcElement||window,e.correspondingUseElement&&(e=e.correspondingUseElement),e.nodeType===3?e.parentNode:e}var Qo=null,fn=null,dn=null;function es(e){if(e=wr(e)){if(typeof Qo!="function")throw Error(g(280));var t=e.stateNode;t&&(t=Il(t),Qo(e.stateNode,e.type,t))}}function fa(e){fn?dn?dn.push(e):dn=[e]:fn=e}function da(){if(fn){var e=fn,t=dn;if(dn=fn=null,es(e),t)for(e=0;e>>=0,e===0?32:31-(md(e)/vd|0)|0}var Ir=64,Ar=4194304;function Rn(e){switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;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:return e&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return e&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;default:return e}}function cl(e,t){var n=e.pendingLanes;if(n===0)return 0;var r=0,l=e.suspendedLanes,o=e.pingedLanes,i=n&268435455;if(i!==0){var u=i&~l;u!==0?r=Rn(u):(o&=i,o!==0&&(r=Rn(o)))}else i=n&~l,i!==0?r=Rn(i):o!==0&&(r=Rn(o));if(r===0)return 0;if(t!==0&&t!==r&&(t&l)===0&&(l=r&-r,o=t&-t,l>=o||l===16&&(o&4194240)!==0))return t;if((r&4)!==0&&(r|=n&16),t=e.entangledLanes,t!==0)for(e=e.entanglements,t&=r;0n;n++)t.push(e);return t}function yr(e,t,n){e.pendingLanes|=t,t!==536870912&&(e.suspendedLanes=0,e.pingedLanes=0),e=e.eventTimes,t=31-Be(t),e[t]=n}function Sd(e,t){var n=e.pendingLanes&~t;e.pendingLanes=t,e.suspendedLanes=0,e.pingedLanes=0,e.expiredLanes&=t,e.mutableReadLanes&=t,e.entangledLanes&=t,t=e.entanglements;var r=e.eventTimes;for(e=e.expirationTimes;0=Xn),as=" ",cs=!1;function za(e,t){switch(e){case"keyup":return Gd.indexOf(t.keyCode)!==-1;case"keydown":return t.keyCode!==229;case"keypress":case"mousedown":case"focusout":return!0;default:return!1}}function Da(e){return e=e.detail,typeof e=="object"&&"data"in e?e.data:null}var bt=!1;function Yd(e,t){switch(e){case"compositionend":return Da(t);case"keypress":return t.which!==32?null:(cs=!0,as);case"textInput":return e=t.data,e===as&&cs?null:e;default:return null}}function Zd(e,t){if(bt)return e==="compositionend"||!Fi&&za(e,t)?(e=Ma(),Jr=Ai=mt=null,bt=!1,e):null;switch(e){case"paste":return null;case"keypress":if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}e:{for(;n;){if(n.nextSibling){n=n.nextSibling;break e}n=n.parentNode}n=void 0}n=ps(n)}}function ja(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?ja(e,t.parentNode):"contains"in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function Fa(){for(var e=window,t=il();t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href=="string"}catch{n=!1}if(n)e=t.contentWindow;else break;t=il(e.document)}return t}function Bi(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t==="input"&&(e.type==="text"||e.type==="search"||e.type==="tel"||e.type==="url"||e.type==="password")||t==="textarea"||e.contentEditable==="true")}function op(e){var t=Fa(),n=e.focusedElem,r=e.selectionRange;if(t!==n&&n&&n.ownerDocument&&ja(n.ownerDocument.documentElement,n)){if(r!==null&&Bi(n)){if(t=r.start,e=r.end,e===void 0&&(e=t),"selectionStart"in n)n.selectionStart=t,n.selectionEnd=Math.min(e,n.value.length);else if(e=(t=n.ownerDocument||document)&&t.defaultView||window,e.getSelection){e=e.getSelection();var l=n.textContent.length,o=Math.min(r.start,l);r=r.end===void 0?o:Math.min(r.end,l),!e.extend&&o>r&&(l=r,r=o,o=l),l=ms(n,o);var i=ms(n,r);l&&i&&(e.rangeCount!==1||e.anchorNode!==l.node||e.anchorOffset!==l.offset||e.focusNode!==i.node||e.focusOffset!==i.offset)&&(t=t.createRange(),t.setStart(l.node,l.offset),e.removeAllRanges(),o>r?(e.addRange(t),e.extend(i.node,i.offset)):(t.setEnd(i.node,i.offset),e.addRange(t)))}}for(t=[],e=n;e=e.parentNode;)e.nodeType===1&&t.push({element:e,left:e.scrollLeft,top:e.scrollTop});for(typeof n.focus=="function"&&n.focus(),n=0;n=document.documentMode,en=null,Jo=null,Zn=null,qo=!1;function vs(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;qo||en==null||en!==il(r)||(r=en,"selectionStart"in r&&Bi(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Zn&&sr(Zn,r)||(Zn=r,r=pl(Jo,"onSelect"),0rn||(e.current=li[rn],li[rn]=null,rn--)}function I(e,t){rn++,li[rn]=e.current,e.current=t}var Ct={},ae=Tt(Ct),he=Tt(!1),Vt=Ct;function gn(e,t){var n=e.type.contextTypes;if(!n)return Ct;var r=e.stateNode;if(r&&r.__reactInternalMemoizedUnmaskedChildContext===t)return r.__reactInternalMemoizedMaskedChildContext;var l={},o;for(o in n)l[o]=t[o];return r&&(e=e.stateNode,e.__reactInternalMemoizedUnmaskedChildContext=t,e.__reactInternalMemoizedMaskedChildContext=l),l}function ge(e){return e=e.childContextTypes,e!=null}function vl(){j(he),j(ae)}function xs(e,t,n){if(ae.current!==Ct)throw Error(g(168));I(ae,t),I(he,n)}function Ga(e,t,n){var r=e.stateNode;if(t=t.childContextTypes,typeof r.getChildContext!="function")return n;r=r.getChildContext();for(var l in r)if(!(l in t))throw Error(g(108,ed(e)||"Unknown",l));return W({},n,r)}function hl(e){return e=(e=e.stateNode)&&e.__reactInternalMemoizedMergedChildContext||Ct,Vt=ae.current,I(ae,e),I(he,he.current),!0}function Cs(e,t,n){var r=e.stateNode;if(!r)throw Error(g(169));n?(e=Ga(e,t,Vt),r.__reactInternalMemoizedMergedChildContext=e,j(he),j(ae),I(ae,e)):j(he),I(he,n)}var Je=null,Al=!1,_o=!1;function Xa(e){Je===null?Je=[e]:Je.push(e)}function vp(e){Al=!0,Xa(e)}function Pt(){if(!_o&&Je!==null){_o=!0;var e=0,t=z;try{var n=Je;for(z=1;e>=i,l-=i,qe=1<<32-Be(t)+l|n<N?(F=E,E=null):F=E.sibling;var T=v(d,E,f[N],h);if(T===null){E===null&&(E=F);break}e&&E&&T.alternate===null&&t(d,E),a=o(T,a,N),C===null?_=T:C.sibling=T,C=T,E=F}if(N===f.length)return n(d,E),B&&Dt(d,N),_;if(E===null){for(;NN?(F=E,E=null):F=E.sibling;var $e=v(d,E,T.value,h);if($e===null){E===null&&(E=F);break}e&&E&&$e.alternate===null&&t(d,E),a=o($e,a,N),C===null?_=$e:C.sibling=$e,C=$e,E=F}if(T.done)return n(d,E),B&&Dt(d,N),_;if(E===null){for(;!T.done;N++,T=f.next())T=m(d,T.value,h),T!==null&&(a=o(T,a,N),C===null?_=T:C.sibling=T,C=T);return B&&Dt(d,N),_}for(E=r(d,E);!T.done;N++,T=f.next())T=y(E,d,N,T.value,h),T!==null&&(e&&T.alternate!==null&&E.delete(T.key===null?N:T.key),a=o(T,a,N),C===null?_=T:C.sibling=T,C=T);return e&&E.forEach(function(Xl){return t(d,Xl)}),B&&Dt(d,N),_}function O(d,a,f,h){if(typeof f=="object"&&f!==null&&f.type===qt&&f.key===null&&(f=f.props.children),typeof f=="object"&&f!==null){switch(f.$$typeof){case Or:e:{for(var _=f.key,C=a;C!==null;){if(C.key===_){if(_=f.type,_===qt){if(C.tag===7){n(d,C.sibling),a=l(C,f.props.children),a.return=d,d=a;break e}}else if(C.elementType===_||typeof _=="object"&&_!==null&&_.$$typeof===ct&&Ps(_)===C.type){n(d,C.sibling),a=l(C,f.props),a.ref=Fn(d,C,f),a.return=d,d=a;break e}n(d,C);break}else t(d,C);C=C.sibling}f.type===qt?(a=Bt(f.props.children,d.mode,h,f.key),a.return=d,d=a):(h=ol(f.type,f.key,f.props,null,d.mode,h),h.ref=Fn(d,a,f),h.return=d,d=h)}return i(d);case Jt:e:{for(C=f.key;a!==null;){if(a.key===C)if(a.tag===4&&a.stateNode.containerInfo===f.containerInfo&&a.stateNode.implementation===f.implementation){n(d,a.sibling),a=l(a,f.children||[]),a.return=d,d=a;break e}else{n(d,a);break}else t(d,a);a=a.sibling}a=Oo(f,d.mode,h),a.return=d,d=a}return i(d);case ct:return C=f._init,O(d,a,C(f._payload),h)}if($n(f))return w(d,a,f,h);if(In(f))return k(d,a,f,h);Kr(d,f)}return typeof f=="string"&&f!==""||typeof f=="number"?(f=""+f,a!==null&&a.tag===6?(n(d,a.sibling),a=l(a,f),a.return=d,d=a):(n(d,a),a=Mo(f,d.mode,h),a.return=d,d=a),i(d)):n(d,a)}return O}var Sn=qa(!0),ba=qa(!1),Sl=Tt(null),wl=null,un=null,$i=null;function Ri(){$i=un=wl=null}function Qi(e){var t=Sl.current;j(Sl),e._currentValue=t}function ui(e,t,n){for(;e!==null;){var r=e.alternate;if((e.childLanes&t)!==t?(e.childLanes|=t,r!==null&&(r.childLanes|=t)):r!==null&&(r.childLanes&t)!==t&&(r.childLanes|=t),e===n)break;e=e.return}}function mn(e,t){wl=e,$i=un=null,e=e.dependencies,e!==null&&e.firstContext!==null&&((e.lanes&t)!==0&&(ve=!0),e.firstContext=null)}function Oe(e){var t=e._currentValue;if($i!==e)if(e={context:e,memoizedValue:t,next:null},un===null){if(wl===null)throw Error(g(308));un=e,wl.dependencies={lanes:0,firstContext:e}}else un=un.next=e;return t}var Ut=null;function Ki(e){Ut===null?Ut=[e]:Ut.push(e)}function ec(e,t,n,r){var l=t.interleaved;return l===null?(n.next=n,Ki(t)):(n.next=l.next,l.next=n),t.interleaved=n,rt(e,r)}function rt(e,t){e.lanes|=t;var n=e.alternate;for(n!==null&&(n.lanes|=t),n=e,e=e.return;e!==null;)e.childLanes|=t,n=e.alternate,n!==null&&(n.childLanes|=t),n=e,e=e.return;return n.tag===3?n.stateNode:null}var ft=!1;function Gi(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}function tc(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,effects:e.effects})}function et(e,t){return{eventTime:e,lane:t,tag:0,payload:null,callback:null,next:null}}function wt(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,(M&2)!==0){var l=r.pending;return l===null?t.next=t:(t.next=l.next,l.next=t),r.pending=t,rt(e,n)}return l=r.interleaved,l===null?(t.next=t,Ki(r)):(t.next=l.next,l.next=t),r.interleaved=t,rt(e,n)}function br(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,(n&4194240)!==0)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,zi(e,n)}}function Ls(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var l=null,o=null;if(n=n.firstBaseUpdate,n!==null){do{var i={eventTime:n.eventTime,lane:n.lane,tag:n.tag,payload:n.payload,callback:n.callback,next:null};o===null?l=o=i:o=o.next=i,n=n.next}while(n!==null);o===null?l=o=t:o=o.next=t}else l=o=t;n={baseState:r.baseState,firstBaseUpdate:l,lastBaseUpdate:o,shared:r.shared,effects:r.effects},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}function kl(e,t,n,r){var l=e.updateQueue;ft=!1;var o=l.firstBaseUpdate,i=l.lastBaseUpdate,u=l.shared.pending;if(u!==null){l.shared.pending=null;var s=u,c=s.next;s.next=null,i===null?o=c:i.next=c,i=s;var p=e.alternate;p!==null&&(p=p.updateQueue,u=p.lastBaseUpdate,u!==i&&(u===null?p.firstBaseUpdate=c:u.next=c,p.lastBaseUpdate=s))}if(o!==null){var m=l.baseState;i=0,p=c=s=null,u=o;do{var v=u.lane,y=u.eventTime;if((r&v)===v){p!==null&&(p=p.next={eventTime:y,lane:0,tag:u.tag,payload:u.payload,callback:u.callback,next:null});e:{var w=e,k=u;switch(v=t,y=n,k.tag){case 1:if(w=k.payload,typeof w=="function"){m=w.call(y,m,v);break e}m=w;break e;case 3:w.flags=w.flags&-65537|128;case 0:if(w=k.payload,v=typeof w=="function"?w.call(y,m,v):w,v==null)break e;m=W({},m,v);break e;case 2:ft=!0}}u.callback!==null&&u.lane!==0&&(e.flags|=64,v=l.effects,v===null?l.effects=[u]:v.push(u))}else y={eventTime:y,lane:v,tag:u.tag,payload:u.payload,callback:u.callback,next:null},p===null?(c=p=y,s=m):p=p.next=y,i|=v;if(u=u.next,u===null){if(u=l.shared.pending,u===null)break;v=u,u=v.next,v.next=null,l.lastBaseUpdate=v,l.shared.pending=null}}while(!0);if(p===null&&(s=m),l.baseState=s,l.firstBaseUpdate=c,l.lastBaseUpdate=p,t=l.shared.interleaved,t!==null){l=t;do i|=l.lane,l=l.next;while(l!==t)}else o===null&&(l.shared.lanes=0);$t|=i,e.lanes=i,e.memoizedState=m}}function Ms(e,t,n){if(e=t.effects,t.effects=null,e!==null)for(t=0;tn?n:4,e(!0);var r=Co.transition;Co.transition={};try{e(!1),t()}finally{z=n,Co.transition=r}}function yc(){return ze().memoizedState}function Sp(e,t,n){var r=Et(e);if(n={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null},Sc(e))wc(t,n);else if(n=ec(e,t,n,r),n!==null){var l=de();Ve(n,e,r,l),kc(n,t,r)}}function wp(e,t,n){var r=Et(e),l={lane:r,action:n,hasEagerState:!1,eagerState:null,next:null};if(Sc(e))wc(t,l);else{var o=e.alternate;if(e.lanes===0&&(o===null||o.lanes===0)&&(o=t.lastRenderedReducer,o!==null))try{var i=t.lastRenderedState,u=o(i,n);if(l.hasEagerState=!0,l.eagerState=u,He(u,i)){var s=t.interleaved;s===null?(l.next=l,Ki(t)):(l.next=s.next,s.next=l),t.interleaved=l;return}}catch{}finally{}n=ec(e,t,l,r),n!==null&&(l=de(),Ve(n,e,r,l),kc(n,t,r))}}function Sc(e){var t=e.alternate;return e===H||t!==null&&t===H}function wc(e,t){Jn=_l=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function kc(e,t,n){if((n&4194240)!==0){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,zi(e,n)}}var xl={readContext:Oe,useCallback:ie,useContext:ie,useEffect:ie,useImperativeHandle:ie,useInsertionEffect:ie,useLayoutEffect:ie,useMemo:ie,useReducer:ie,useRef:ie,useState:ie,useDebugValue:ie,useDeferredValue:ie,useTransition:ie,useMutableSource:ie,useSyncExternalStore:ie,useId:ie,unstable_isNewReconciler:!1},kp={readContext:Oe,useCallback:function(e,t){return Ke().memoizedState=[e,t===void 0?null:t],e},useContext:Oe,useEffect:zs,useImperativeHandle:function(e,t,n){return n=n!=null?n.concat([e]):null,tl(4194308,4,pc.bind(null,t,e),n)},useLayoutEffect:function(e,t){return tl(4194308,4,e,t)},useInsertionEffect:function(e,t){return tl(4,2,e,t)},useMemo:function(e,t){var n=Ke();return t=t===void 0?null:t,e=e(),n.memoizedState=[e,t],e},useReducer:function(e,t,n){var r=Ke();return t=n!==void 0?n(t):t,r.memoizedState=r.baseState=t,e={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:t},r.queue=e,e=e.dispatch=Sp.bind(null,H,e),[r.memoizedState,e]},useRef:function(e){var t=Ke();return e={current:e},t.memoizedState=e},useState:Os,useDebugValue:tu,useDeferredValue:function(e){return Ke().memoizedState=e},useTransition:function(){var e=Os(!1),t=e[0];return e=yp.bind(null,e[1]),Ke().memoizedState=e,[t,e]},useMutableSource:function(){},useSyncExternalStore:function(e,t,n){var r=H,l=Ke();if(B){if(n===void 0)throw Error(g(407));n=n()}else{if(n=t(),q===null)throw Error(g(349));(Wt&30)!==0||oc(r,t,n)}l.memoizedState=n;var o={value:n,getSnapshot:t};return l.queue=o,zs(uc.bind(null,r,o,e),[e]),r.flags|=2048,hr(9,ic.bind(null,r,o,n,t),void 0,null),n},useId:function(){var e=Ke(),t=q.identifierPrefix;if(B){var n=be,r=qe;n=(r&~(1<<32-Be(r)-1)).toString(32)+n,t=":"+t+"R"+n,n=mr++,0<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[Ge]=t,e[fr]=r,Oc(e,t,!1,!1),t.stateNode=e;e:{switch(i=$o(n,r),n){case"dialog":U("cancel",e),U("close",e),l=r;break;case"iframe":case"object":case"embed":U("load",e),l=r;break;case"video":case"audio":for(l=0;lEn&&(t.flags|=128,r=!0,Bn(o,!1),t.lanes=4194304)}else{if(!r)if(e=El(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Bn(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!F)return ue(t),null}else 2*R()-o.renderingStartTime>En&&n!==1073741824&&(t.flags|=128,r=!0,Bn(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=R(),t.sibling=null,n=V.current,A(V,r?n&1|2:n&1),t):(ue(t),null);case 22:case 23:return uu(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&(t.mode&1)!==0?(Se&1073741824)!==0&&(ue(t),t.subtreeFlags&6&&(t.flags|=8192)):ue(t),null;case 24:return null;case 25:return null}throw Error(g(156,t.tag))}function Pp(e,t){switch(Hi(t),t.tag){case 1:return ge(t.type)&&vl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return wn(),j(he),j(ae),Zi(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return Yi(t),null;case 13:if(j(V),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(g(340));yn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return j(V),null;case 4:return wn(),null;case 10:return Qi(t.type._context),null;case 22:case 23:return uu(),null;case 24:return null;default:return null}}var Xr=!1,se=!1,Lp=typeof WeakSet=="function"?WeakSet:Set,_=null;function sn(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){$(e,t,r)}else n.current=null}function hi(e,t,n){try{n()}catch(r){$(e,t,r)}}var $s=!1;function Mp(e,t){if(bo=fl,e=Fa(),Bi(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,u=-1,s=-1,a=0,p=0,m=e,v=null;t:for(;;){for(var y;m!==n||l!==0&&m.nodeType!==3||(u=i+l),m!==o||r!==0&&m.nodeType!==3||(s=i+r),m.nodeType===3&&(i+=m.nodeValue.length),(y=m.firstChild)!==null;)v=m,m=y;for(;;){if(m===e)break t;if(v===n&&++a===l&&(u=i),v===o&&++p===r&&(s=i),(y=m.nextSibling)!==null)break;m=v,v=m.parentNode}m=y}n=u===-1||s===-1?null:{start:u,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(ei={focusedElem:e,selectionRange:n},fl=!1,_=t;_!==null;)if(t=_,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,_=e;else for(;_!==null;){t=_;try{var k=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(k!==null){var w=k.memoizedProps,z=k.memoizedState,f=t.stateNode,c=f.getSnapshotBeforeUpdate(t.elementType===t.type?w:Ue(t.type,w),z);f.__reactInternalSnapshotBeforeUpdate=c}break;case 3:var d=t.stateNode.containerInfo;d.nodeType===1?d.textContent="":d.nodeType===9&&d.documentElement&&d.removeChild(d.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(g(163))}}catch(h){$(t,t.return,h)}if(e=t.sibling,e!==null){e.return=t.return,_=e;break}_=t.return}return k=$s,$s=!1,k}function qn(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&hi(t,n,o)}l=l.next}while(l!==r)}}function Fl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function gi(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Ic(e){var t=e.alternate;t!==null&&(e.alternate=null,Ic(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Ge],delete t[fr],delete t[ri],delete t[dp],delete t[pp])),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 Ac(e){return e.tag===5||e.tag===3||e.tag===4}function Rs(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Ac(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 yi(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=ml));else if(r!==4&&(e=e.child,e!==null))for(yi(e,t,n),e=e.sibling;e!==null;)yi(e,t,n),e=e.sibling}function Si(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Si(e,t,n),e=e.sibling;e!==null;)Si(e,t,n),e=e.sibling}var te=null,je=!1;function at(e,t,n){for(n=n.child;n!==null;)Uc(e,t,n),n=n.sibling}function Uc(e,t,n){if(Xe&&typeof Xe.onCommitFiberUnmount=="function")try{Xe.onCommitFiberUnmount(Ml,n)}catch{}switch(n.tag){case 5:se||sn(n,t);case 6:var r=te,l=je;te=null,at(e,t,n),te=r,je=l,te!==null&&(je?(e=te,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):te.removeChild(n.stateNode));break;case 18:te!==null&&(je?(e=te,n=n.stateNode,e.nodeType===8?Eo(e.parentNode,n):e.nodeType===1&&Eo(e,n),ir(e)):Eo(te,n.stateNode));break;case 4:r=te,l=je,te=n.stateNode.containerInfo,je=!0,at(e,t,n),te=r,je=l;break;case 0:case 11:case 14:case 15:if(!se&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,i=o.destroy;o=o.tag,i!==void 0&&((o&2)!==0||(o&4)!==0)&&hi(n,t,i),l=l.next}while(l!==r)}at(e,t,n);break;case 1:if(!se&&(sn(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(u){$(n,t,u)}at(e,t,n);break;case 21:at(e,t,n);break;case 22:n.mode&1?(se=(r=se)||n.memoizedState!==null,at(e,t,n),se=r):at(e,t,n);break;default:at(e,t,n)}}function Qs(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new Lp),t.forEach(function(r){var l=Bp.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function Ae(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=i),r&=~o}if(r=l,r=R()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*zp(r/1960))-r,10e?16:e,vt===null)var r=!1;else{if(e=vt,vt=null,Tl=0,(O&6)!==0)throw Error(g(331));var l=O;for(O|=4,_=e.current;_!==null;){var o=_,i=o.child;if((_.flags&16)!==0){var u=o.deletions;if(u!==null){for(var s=0;sR()-ou?Ft(e,0):lu|=n),ye(e,t)}function Rc(e,t){t===0&&((e.mode&1)===0?t=1:(t=Ar,Ar<<=1,(Ar&130023424)===0&&(Ar=4194304)));var n=de();e=rt(e,t),e!==null&&(yr(e,t,n),ye(e,n))}function Fp(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Rc(e,n)}function Bp(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(g(314))}r!==null&&r.delete(t),Rc(e,n)}var Qc;Qc=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||he.current)ve=!0;else{if((e.lanes&n)===0&&(t.flags&128)===0)return ve=!1,Np(e,t,n);ve=(e.flags&131072)!==0}else ve=!1,F&&(t.flags&1048576)!==0&&Ya(t,yl,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;nl(e,t),e=t.pendingProps;var l=gn(t,ae.current);mn(t,n),l=qi(null,t,r,e,l,n);var o=bi();return t.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,ge(r)?(o=!0,hl(t)):o=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,Gi(t),l.updater=jl,t.stateNode=l,l._reactInternals=t,ai(t,r,e,n),t=di(null,t,r,!0,o,n)):(t.tag=0,F&&o&&Vi(t),fe(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(nl(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=Hp(r),e=Ue(r,e),l){case 0:t=fi(null,t,r,e,n);break e;case 1:t=Vs(null,t,r,e,n);break e;case 11:t=Fs(null,t,r,e,n);break e;case 14:t=Bs(null,t,r,Ue(r.type,e),n);break e}throw Error(g(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ue(r,l),fi(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ue(r,l),Vs(e,t,r,l,n);case 3:e:{if(Pc(t),e===null)throw Error(g(387));r=t.pendingProps,o=t.memoizedState,l=o.element,tc(e,t),kl(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){l=kn(Error(g(423)),t),t=Hs(e,t,r,n,l);break e}else if(r!==l){l=kn(Error(g(424)),t),t=Hs(e,t,r,n,l);break e}else for(we=St(t.stateNode.containerInfo.firstChild),ke=t,F=!0,Fe=null,n=ba(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(yn(),r===l){t=lt(e,t,n);break e}fe(e,t,r,n)}t=t.child}return t;case 5:return nc(t),e===null&&ii(t),r=t.type,l=t.pendingProps,o=e!==null?e.memoizedProps:null,i=l.children,ti(r,l)?i=null:o!==null&&ti(r,o)&&(t.flags|=32),Tc(e,t),fe(e,t,i,n),t.child;case 6:return e===null&&ii(t),null;case 13:return Lc(e,t,n);case 4:return Xi(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Sn(t,null,r,n):fe(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ue(r,l),Fs(e,t,r,l,n);case 7:return fe(e,t,t.pendingProps,n),t.child;case 8:return fe(e,t,t.pendingProps.children,n),t.child;case 12:return fe(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,o=t.memoizedProps,i=l.value,A(Sl,r._currentValue),r._currentValue=i,o!==null)if(He(o.value,i)){if(o.children===l.children&&!he.current){t=lt(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var u=o.dependencies;if(u!==null){i=o.child;for(var s=u.firstContext;s!==null;){if(s.context===r){if(o.tag===1){s=et(-1,n&-n),s.tag=2;var a=o.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}}o.lanes|=n,s=o.alternate,s!==null&&(s.lanes|=n),ui(o.return,n,t),u.lanes|=n;break}s=s.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(g(341));i.lanes|=n,u=i.alternate,u!==null&&(u.lanes|=n),ui(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}fe(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,mn(t,n),l=Me(l),r=r(l),t.flags|=1,fe(e,t,r,n),t.child;case 14:return r=t.type,l=Ue(r,t.pendingProps),l=Ue(r.type,l),Bs(e,t,r,l,n);case 15:return Cc(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ue(r,l),nl(e,t),t.tag=1,ge(r)?(e=!0,hl(t)):e=!1,mn(t,n),Ec(t,r,l),ai(t,r,l,n),di(null,t,r,!0,e,n);case 19:return Mc(e,t,n);case 22:return Nc(e,t,n)}throw Error(g(156,t.tag))};function Kc(e,t){return Sa(e,t)}function Vp(e,t,n,r){this.tag=e,this.key=n,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=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Pe(e,t,n,r){return new Vp(e,t,n,r)}function au(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Hp(e){if(typeof e=="function")return au(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Pi)return 11;if(e===Li)return 14}return 2}function _t(e,t){var n=e.alternate;return n===null?(n=Pe(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function ol(e,t,n,r,l,o){var i=2;if(r=e,typeof e=="function")au(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case qt:return Bt(n.children,l,o,t);case Ti:i=8,l|=8;break;case Do:return e=Pe(12,n,t,l|2),e.elementType=Do,e.lanes=o,e;case Io:return e=Pe(13,n,t,l),e.elementType=Io,e.lanes=o,e;case Ao:return e=Pe(19,n,t,l),e.elementType=Ao,e.lanes=o,e;case na:return Vl(n,l,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ea:i=10;break e;case ta:i=9;break e;case Pi:i=11;break e;case Li:i=14;break e;case ct:i=16,r=null;break e}throw Error(g(130,e==null?e:typeof e,""))}return t=Pe(i,n,t,l),t.elementType=e,t.type=r,t.lanes=o,t}function Bt(e,t,n,r){return e=Pe(7,e,r,t),e.lanes=n,e}function Vl(e,t,n,r){return e=Pe(22,e,r,t),e.elementType=na,e.lanes=n,e.stateNode={isHidden:!1},e}function Mo(e,t,n){return e=Pe(6,e,null,t),e.lanes=n,e}function Oo(e,t,n){return t=Pe(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function Wp(e,t,n,r,l){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=mo(0),this.expirationTimes=mo(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=mo(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function cu(e,t,n,r,l,o,i,u,s){return e=new Wp(e,t,n,u,s),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Pe(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Gi(o),e}function $p(e,t,n){var r=3{"use strict";function Jc(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Jc)}catch(e){console.error(e)}}Jc(),qc.exports=Zc()});var tf=Ot(mu=>{"use strict";var ef=bc();mu.createRoot=ef.createRoot,mu.hydrateRoot=ef.hydrateRoot;var rm});var hu=ee(Z(),1),_f=ee(tf(),1);var K=ee(Z(),1);var B=ee(Z(),1);var b=ee(Z(),1);function nf({preference:e,onThemeChange:t}){let n=()=>{let o=["system","light","dark"],u=(o.indexOf(e)+1)%o.length;t(o[u])},r=()=>{switch(e){case"light":return b.default.createElement("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},b.default.createElement("circle",{cx:"12",cy:"12",r:"5"}),b.default.createElement("line",{x1:"12",y1:"1",x2:"12",y2:"3"}),b.default.createElement("line",{x1:"12",y1:"21",x2:"12",y2:"23"}),b.default.createElement("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"}),b.default.createElement("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"}),b.default.createElement("line",{x1:"1",y1:"12",x2:"3",y2:"12"}),b.default.createElement("line",{x1:"21",y1:"12",x2:"23",y2:"12"}),b.default.createElement("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"}),b.default.createElement("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"}));case"dark":return b.default.createElement("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},b.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 b.default.createElement("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},b.default.createElement("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"}),b.default.createElement("line",{x1:"8",y1:"21",x2:"16",y2:"21"}),b.default.createElement("line",{x1:"12",y1:"17",x2:"12",y2:"21"}))}},l=()=>{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 b.default.createElement("button",{className:"theme-toggle-btn",onClick:n,title:l(),"aria-label":l()},r())}function rf({isConnected:e,projects:t,currentFilter:n,onFilterChange:r,onSettingsToggle:l,sidebarOpen:o,isProcessing:i,themePreference:u,onThemeChange:s}){return B.default.createElement("div",{className:"header"},B.default.createElement("h1",null,B.default.createElement("img",{src:"claude-mem-logomark.webp",alt:"",className:`logomark ${i?"spinning":""}`}),B.default.createElement("span",{className:"logo-text"},"claude-mem")),B.default.createElement("div",{className:"status"},B.default.createElement("a",{href:"https://docs.claude-mem.ai",target:"_blank",rel:"noopener noreferrer",title:"Documentation",style:{display:"block",padding:"8px 4px 8px 8px",color:"#a0a0a0",transition:"color 0.2s",lineHeight:0},onMouseEnter:a=>a.currentTarget.style.color="#606060",onMouseLeave:a=>a.currentTarget.style.color="#a0a0a0"},B.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},B.default.createElement("path",{d:"M4 19.5A2.5 2.5 0 0 1 6.5 17H20"}),B.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"}))),B.default.createElement("a",{href:"https://github.com/thedotmack/claude-mem/",target:"_blank",rel:"noopener noreferrer",title:"GitHub",style:{display:"block",padding:"8px 4px",color:"#a0a0a0",transition:"color 0.2s",lineHeight:0},onMouseEnter:a=>a.currentTarget.style.color="#606060",onMouseLeave:a=>a.currentTarget.style.color="#a0a0a0"},B.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor"},B.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"}))),B.default.createElement("a",{href:"https://x.com/Claude_Memory",target:"_blank",rel:"noopener noreferrer",title:"X (Twitter)",style:{display:"block",padding:"8px 8px 8px 4px",color:"#a0a0a0",transition:"color 0.2s",lineHeight:0},onMouseEnter:a=>a.currentTarget.style.color="#606060",onMouseLeave:a=>a.currentTarget.style.color="#a0a0a0"},B.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor"},B.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"}))),B.default.createElement("select",{value:n,onChange:a=>r(a.target.value)},B.default.createElement("option",{value:""},"All Projects"),t.map(a=>B.default.createElement("option",{key:a,value:a},a))),B.default.createElement(nf,{preference:u,onThemeChange:s}),B.default.createElement("button",{className:`settings-btn ${o?"active":""}`,onClick:l,title:"Settings"},B.default.createElement("svg",{className:"settings-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},B.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"}),B.default.createElement("circle",{cx:"12",cy:"12",r:"3"})))))}var Q=ee(Z(),1);var P=ee(Z(),1);function Cn(e){return new Date(e).toLocaleString()}function lf(e){if(!e)return"-";let t=Math.floor(e/3600),n=Math.floor(e%3600/60);return`${t}h ${n}m`}function of(e){return e?e<1024?e+" B":e<1024*1024?(e/1024).toFixed(1)+" KB":(e/(1024*1024)).toFixed(1)+" MB":"-"}function uf(e){let t=["/Scripts/","/src/","/plugin/","/docs/"];for(let l of t){let o=e.indexOf(l);if(o!==-1)return e.substring(o+1)}let n=e.indexOf("claude-mem/");if(n!==-1)return e.substring(n+11);let r=e.split("/");return r.length>3?r.slice(-3).join("/"):e}function sf({observation:e}){let[t,n]=(0,P.useState)(!1),[r,l]=(0,P.useState)(!1),o=Cn(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(uf):[],a=e.files_modified?JSON.parse(e.files_modified).map(uf):[],p=i.length>0||u.length>0||s.length>0||a.length>0;return P.default.createElement("div",{className:"card"},P.default.createElement("div",{className:"card-header"},P.default.createElement("div",{className:"card-header-left"},P.default.createElement("span",{className:`card-type type-${e.type}`},e.type),P.default.createElement("span",{className:"card-project"},e.project)),P.default.createElement("div",{className:"view-mode-toggles"},p&&P.default.createElement("button",{className:`view-mode-toggle ${t?"active":""}`,onClick:()=>{n(!t),t||l(!1)}},P.default.createElement("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},P.default.createElement("polyline",{points:"9 11 12 14 22 4"}),P.default.createElement("path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"})),P.default.createElement("span",null,"facts")),e.narrative&&P.default.createElement("button",{className:`view-mode-toggle ${r?"active":""}`,onClick:()=>{l(!r),r||n(!1)}},P.default.createElement("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},P.default.createElement("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),P.default.createElement("polyline",{points:"14 2 14 8 20 8"}),P.default.createElement("line",{x1:"16",y1:"13",x2:"8",y2:"13"}),P.default.createElement("line",{x1:"16",y1:"17",x2:"8",y2:"17"})),P.default.createElement("span",null,"narrative")))),P.default.createElement("div",{className:"card-title"},e.title||"Untitled"),P.default.createElement("div",{className:"view-mode-content"},!t&&!r&&e.subtitle&&P.default.createElement("div",{className:"card-subtitle"},e.subtitle),t&&i.length>0&&P.default.createElement("ul",{className:"facts-list"},i.map((m,v)=>P.default.createElement("li",{key:v},m))),r&&e.narrative&&P.default.createElement("div",{className:"narrative"},e.narrative)),P.default.createElement("div",{className:"card-meta"},P.default.createElement("span",{className:"meta-date"},"#",e.id," \u2022 ",o),t&&(u.length>0||s.length>0||a.length>0)&&P.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px",alignItems:"center"}},u.map((m,v)=>P.default.createElement("span",{key:v,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&&P.default.createElement("span",{className:"meta-files"},P.default.createElement("span",{className:"file-label"},"read:")," ",s.join(", ")),a.length>0&&P.default.createElement("span",{className:"meta-files"},P.default.createElement("span",{className:"file-label"},"modified:")," ",a.join(", ")))))}var le=ee(Z(),1);function af({summary:e}){let t=Cn(e.created_at_epoch),n=[{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(r=>r.content);return le.default.createElement("article",{className:"card summary-card"},le.default.createElement("header",{className:"summary-card-header"},le.default.createElement("div",{className:"summary-badge-row"},le.default.createElement("span",{className:"card-type summary-badge"},"Session Summary"),le.default.createElement("span",{className:"summary-project-badge"},e.project)),e.request&&le.default.createElement("h2",{className:"summary-title"},e.request)),le.default.createElement("div",{className:"summary-sections"},n.map((r,l)=>le.default.createElement("section",{key:r.key,className:"summary-section",style:{animationDelay:`${l*50}ms`}},le.default.createElement("div",{className:"summary-section-header"},le.default.createElement("img",{src:r.icon,alt:r.label,className:`summary-section-icon summary-section-icon--${r.key}`}),le.default.createElement("h3",{className:"summary-section-label"},r.label)),le.default.createElement("div",{className:"summary-section-content"},r.content)))),le.default.createElement("footer",{className:"summary-card-footer"},le.default.createElement("span",{className:"summary-meta-id"},"Session #",e.id),le.default.createElement("span",{className:"summary-meta-divider"},"\u2022"),le.default.createElement("time",{className:"summary-meta-date",dateTime:new Date(e.created_at_epoch).toISOString()},t)))}var it=ee(Z(),1);function cf({prompt:e}){let t=Cn(e.created_at_epoch);return it.default.createElement("div",{className:"card prompt-card"},it.default.createElement("div",{className:"card-header"},it.default.createElement("div",{className:"card-header-left"},it.default.createElement("span",{className:"card-type"},"Prompt"),it.default.createElement("span",{className:"card-project"},e.project))),it.default.createElement("div",{className:"card-content"},e.prompt_text),it.default.createElement("div",{className:"card-meta"},it.default.createElement("span",{className:"meta-date"},"#",e.id," \u2022 ",t)))}var Lt=ee(Z(),1);function ff({targetRef:e}){let[t,n]=(0,Lt.useState)(!1);(0,Lt.useEffect)(()=>{let l=()=>{let i=e.current;i&&n(i.scrollTop>300)},o=e.current;if(o)return o.addEventListener("scroll",l),()=>o.removeEventListener("scroll",l)},[]);let r=()=>{let l=e.current;l&&l.scrollTo({top:0,behavior:"smooth"})};return t?Lt.default.createElement("button",{onClick:r,className:"scroll-to-top","aria-label":"Scroll to top"},Lt.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},Lt.default.createElement("polyline",{points:"18 15 12 9 6 15"}))):null}var Er={PAGINATION_PAGE_SIZE:50,LOAD_MORE_THRESHOLD:.1};function df({observations:e,summaries:t,prompts:n,onLoadMore:r,isLoading:l,hasMore:o}){let i=(0,Q.useRef)(null),u=(0,Q.useRef)(null),s=(0,Q.useRef)(r);(0,Q.useEffect)(()=>{s.current=r},[r]),(0,Q.useEffect)(()=>{let p=i.current;if(!p)return;let m=new IntersectionObserver(v=>{v[0].isIntersecting&&o&&!l&&s.current?.()},{threshold:Er.LOAD_MORE_THRESHOLD});return m.observe(p),()=>{p&&m.unobserve(p),m.disconnect()}},[o,l]);let a=(0,Q.useMemo)(()=>[...e.map(m=>({...m,itemType:"observation"})),...t.map(m=>({...m,itemType:"summary"})),...n.map(m=>({...m,itemType:"prompt"}))].sort((m,v)=>v.created_at_epoch-m.created_at_epoch),[e,t,n]);return Q.default.createElement("div",{className:"feed",ref:u},Q.default.createElement(ff,{targetRef:u}),Q.default.createElement("div",{className:"feed-content"},a.map(p=>{let m=`${p.itemType}-${p.id}`;return p.itemType==="observation"?Q.default.createElement(sf,{key:m,observation:p}):p.itemType==="summary"?Q.default.createElement(af,{key:m,summary:p}):Q.default.createElement(cf,{key:m,prompt:p})}),a.length===0&&!l&&Q.default.createElement("div",{style:{textAlign:"center",padding:"40px",color:"#8b949e"}},"No items to display"),l&&Q.default.createElement("div",{style:{textAlign:"center",padding:"20px",color:"#8b949e"}},Q.default.createElement("div",{className:"spinner",style:{display:"inline-block",marginRight:"10px"}}),"Loading more..."),o&&!l&&a.length>0&&Q.default.createElement("div",{ref:i,style:{height:"20px",margin:"10px 0"}}),!o&&a.length>0&&Q.default.createElement("div",{style:{textAlign:"center",padding:"20px",color:"#8b949e",fontSize:"14px"}},"No more items to load")))}var S=ee(Z(),1);var ze={CLAUDE_MEM_MODEL:"claude-haiku-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777"};function pf({isOpen:e,settings:t,stats:n,isSaving:r,saveStatus:l,isConnected:o,onSave:i,onClose:u,onRefreshStats:s}){let[a,p]=(0,S.useState)(t.CLAUDE_MEM_MODEL||ze.CLAUDE_MEM_MODEL),[m,v]=(0,S.useState)(t.CLAUDE_MEM_CONTEXT_OBSERVATIONS||ze.CLAUDE_MEM_CONTEXT_OBSERVATIONS),[y,k]=(0,S.useState)(t.CLAUDE_MEM_WORKER_PORT||ze.CLAUDE_MEM_WORKER_PORT),[w,z]=(0,S.useState)(!0),[f,c]=(0,S.useState)(!1),[d,h]=(0,S.useState)("");(0,S.useEffect)(()=>{p(t.CLAUDE_MEM_MODEL||ze.CLAUDE_MEM_MODEL),v(t.CLAUDE_MEM_CONTEXT_OBSERVATIONS||ze.CLAUDE_MEM_CONTEXT_OBSERVATIONS),k(t.CLAUDE_MEM_WORKER_PORT||ze.CLAUDE_MEM_WORKER_PORT)},[t]),(0,S.useEffect)(()=>{fetch("/api/mcp/status").then(E=>E.json()).then(E=>z(E.enabled)).catch(E=>console.error("Failed to load MCP status:",E))},[]),(0,S.useEffect)(()=>{e&&s()},[e,s]);let x=()=>{i({CLAUDE_MEM_MODEL:a,CLAUDE_MEM_CONTEXT_OBSERVATIONS:m,CLAUDE_MEM_WORKER_PORT:y})},C=async E=>{c(!0),h("Toggling...");try{let L=await(await fetch("/api/mcp/toggle",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:E})})).json();L.success?(z(L.enabled),h("\u2713 Updated (restart Claude Code to apply)"),setTimeout(()=>h(""),3e3)):(h(`\u2717 Error: ${L.error}`),setTimeout(()=>h(""),3e3))}catch(N){h(`\u2717 Error: ${N instanceof Error?N.message:"Unknown error"}`),setTimeout(()=>h(""),3e3)}finally{c(!1)}};return S.default.createElement("div",{className:`sidebar ${e?"open":""}`},S.default.createElement("div",{className:"sidebar-header"},S.default.createElement("h1",null,"Settings"),S.default.createElement("div",{style:{display:"flex",gap:"8px",alignItems:"center"}},S.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"6px"}},S.default.createElement("span",{className:`status-dot ${o?"connected":""}`}),S.default.createElement("span",{style:{fontSize:"11px",opacity:.5,fontWeight:300}},o?"Connected":"Disconnected")),S.default.createElement("button",{onClick:x,disabled:r},r?"Saving...":"Save"),S.default.createElement("button",{onClick:u,title:"Close settings",style:{background:"transparent",border:"1px solid #404040",padding:"8px",width:"36px",height:"36px",display:"flex",alignItems:"center",justifyContent:"center"}},S.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},S.default.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),S.default.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))))),S.default.createElement("div",{className:"stats-scroll"},S.default.createElement("div",{className:"settings-section"},S.default.createElement("h3",null,"Environment Variables"),S.default.createElement("div",{className:"form-group"},S.default.createElement("label",{htmlFor:"model"},"CLAUDE_MEM_MODEL"),S.default.createElement("div",{className:"setting-description"},"Model used for AI compression of tool observations. Haiku is fast and cheap, Sonnet offers better quality, Opus is most capable but expensive."),S.default.createElement("select",{id:"model",value:a,onChange:E=>p(E.target.value)},S.default.createElement("option",{value:"claude-haiku-4-5"},"claude-haiku-4-5"),S.default.createElement("option",{value:"claude-sonnet-4-5"},"claude-sonnet-4-5"),S.default.createElement("option",{value:"claude-opus-4"},"claude-opus-4"))),S.default.createElement("div",{className:"form-group"},S.default.createElement("label",{htmlFor:"contextObs"},"CLAUDE_MEM_CONTEXT_OBSERVATIONS"),S.default.createElement("div",{className:"setting-description"},"Number of recent observations to inject at session start. Higher values provide more context but increase token usage. Default: 50"),S.default.createElement("input",{type:"number",id:"contextObs",min:"1",max:"200",value:m,onChange:E=>v(E.target.value)})),S.default.createElement("div",{className:"form-group"},S.default.createElement("label",{htmlFor:"workerPort"},"CLAUDE_MEM_WORKER_PORT"),S.default.createElement("div",{className:"setting-description"},"Port number for the background worker service. Change only if port 37777 conflicts with another service."),S.default.createElement("input",{type:"number",id:"workerPort",min:"1024",max:"65535",value:y,onChange:E=>k(E.target.value)})),l&&S.default.createElement("div",{className:"save-status"},l)),S.default.createElement("div",{className:"settings-section"},S.default.createElement("h3",null,"MCP Search Server"),S.default.createElement("div",{className:"form-group"},S.default.createElement("label",{htmlFor:"mcpEnabled",style:{display:"flex",alignItems:"center",gap:"8px",cursor:"pointer"}},S.default.createElement("input",{type:"checkbox",id:"mcpEnabled",checked:w,onChange:E=>C(E.target.checked),disabled:f,style:{cursor:f?"not-allowed":"pointer"}}),"Enable MCP Search Server"),S.default.createElement("div",{className:"setting-description"},"claude-mem suggests using skill-based search (saves ~2,500 tokens at session start), but some users prefer MCP. Disable to only use skill-based search. Requires Claude Code restart to apply changes."),d&&S.default.createElement("div",{className:"save-status"},d))),S.default.createElement("div",{className:"settings-section"},S.default.createElement("h3",null,"Worker Stats"),S.default.createElement("div",{className:"stats-grid"},S.default.createElement("div",{className:"stat"},S.default.createElement("div",{className:"stat-label"},"Version"),S.default.createElement("div",{className:"stat-value"},n.worker?.version||"-")),S.default.createElement("div",{className:"stat"},S.default.createElement("div",{className:"stat-label"},"Uptime"),S.default.createElement("div",{className:"stat-value"},lf(n.worker?.uptime))),S.default.createElement("div",{className:"stat"},S.default.createElement("div",{className:"stat-label"},"Active Sessions"),S.default.createElement("div",{className:"stat-value"},n.worker?.activeSessions||"0")),S.default.createElement("div",{className:"stat"},S.default.createElement("div",{className:"stat-label"},"SSE Clients"),S.default.createElement("div",{className:"stat-value"},n.worker?.sseClients||"0")))),S.default.createElement("div",{className:"settings-section"},S.default.createElement("h3",null,"Database Stats"),S.default.createElement("div",{className:"stats-grid"},S.default.createElement("div",{className:"stat"},S.default.createElement("div",{className:"stat-label"},"DB Size"),S.default.createElement("div",{className:"stat-value"},of(n.database?.size))),S.default.createElement("div",{className:"stat"},S.default.createElement("div",{className:"stat-label"},"Observations"),S.default.createElement("div",{className:"stat-value"},n.database?.observations||"0")),S.default.createElement("div",{className:"stat"},S.default.createElement("div",{className:"stat-label"},"Sessions"),S.default.createElement("div",{className:"stat-value"},n.database?.sessions||"0")),S.default.createElement("div",{className:"stat"},S.default.createElement("div",{className:"stat-label"},"Summaries"),S.default.createElement("div",{className:"stat-value"},n.database?.summaries||"0"))))))}var De=ee(Z(),1);var We={OBSERVATIONS:"/api/observations",SUMMARIES:"/api/summaries",PROMPTS:"/api/prompts",SETTINGS:"/api/settings",STATS:"/api/stats",PROCESSING_STATUS:"/api/processing-status",STREAM:"/stream"};var Ql={SSE_RECONNECT_DELAY_MS:3e3,STATS_REFRESH_INTERVAL_MS:1e4,SAVE_STATUS_DISPLAY_DURATION_MS:3e3};function mf(){let[e,t]=(0,De.useState)([]),[n,r]=(0,De.useState)([]),[l,o]=(0,De.useState)([]),[i,u]=(0,De.useState)([]),[s,a]=(0,De.useState)(!1),[p,m]=(0,De.useState)(!1),v=(0,De.useRef)(null),y=(0,De.useRef)();return(0,De.useEffect)(()=>{let k=()=>{v.current&&v.current.close();let w=new EventSource(We.STREAM);v.current=w,w.onopen=()=>{console.log("[SSE] Connected"),a(!0),y.current&&clearTimeout(y.current)},w.onerror=z=>{console.error("[SSE] Connection error:",z),a(!1),w.close(),y.current=setTimeout(()=>{y.current=void 0,console.log("[SSE] Attempting to reconnect..."),k()},Ql.SSE_RECONNECT_DELAY_MS)},w.onmessage=z=>{try{let f=JSON.parse(z.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(c=>[f.observation,...c]));break;case"new_summary":if(f.summary){let c=f.summary;console.log("[SSE] New summary:",c.id),r(d=>[c,...d])}break;case"new_prompt":if(f.prompt){let c=f.prompt;console.log("[SSE] New prompt:",c.id),o(d=>[c,...d])}break;case"processing_status":typeof f.isProcessing=="boolean"&&(console.log("[SSE] Processing status:",f.isProcessing),m(f.isProcessing));break}}catch(f){console.error("[SSE] Failed to parse message:",f)}}};return k(),()=>{v.current&&v.current.close(),y.current&&clearTimeout(y.current)}},[]),{observations:e,summaries:n,prompts:l,projects:i,isProcessing:p,isConnected:s}}var Nn=ee(Z(),1);function vf(){let[e,t]=(0,Nn.useState)(ze),[n,r]=(0,Nn.useState)(!1),[l,o]=(0,Nn.useState)("");return(0,Nn.useEffect)(()=>{fetch(We.SETTINGS).then(u=>u.json()).then(u=>{t({CLAUDE_MEM_MODEL:u.CLAUDE_MEM_MODEL||ze.CLAUDE_MEM_MODEL,CLAUDE_MEM_CONTEXT_OBSERVATIONS:u.CLAUDE_MEM_CONTEXT_OBSERVATIONS||ze.CLAUDE_MEM_CONTEXT_OBSERVATIONS,CLAUDE_MEM_WORKER_PORT:u.CLAUDE_MEM_WORKER_PORT||ze.CLAUDE_MEM_WORKER_PORT})}).catch(u=>{console.error("Failed to load settings:",u)})},[]),{settings:e,saveSettings:async u=>{r(!0),o("Saving...");try{let a=await(await fetch(We.SETTINGS,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)})).json();a.success?(t(u),o("\u2713 Saved"),setTimeout(()=>o(""),Ql.SAVE_STATUS_DISPLAY_DURATION_MS)):o(`\u2717 Error: ${a.error}`)}catch(s){o(`\u2717 Error: ${s instanceof Error?s.message:"Unknown error"}`)}finally{r(!1)}},isSaving:n,saveStatus:l}}var Tn=ee(Z(),1);function hf(){let[e,t]=(0,Tn.useState)({}),n=(0,Tn.useCallback)(async()=>{try{let l=await(await fetch(We.STATS)).json();t(l)}catch(r){console.error("Failed to load stats:",r)}},[]);return(0,Tn.useEffect)(()=>{n()},[n]),{stats:e,refreshStats:n}}var Mt=ee(Z(),1);function vu(e,t,n){let[r,l]=(0,Mt.useState)({isLoading:!1,hasMore:!0}),o=(0,Mt.useRef)(0),i=(0,Mt.useRef)(n),u=(0,Mt.useRef)(r),s=(0,Mt.useCallback)(async()=>{let a=i.current!==n;if(a){o.current=0,i.current=n;let p={isLoading:!1,hasMore:!0};l(p),u.current=p}if(!a&&(u.current.isLoading||!u.current.hasMore))return[];l(p=>({...p,isLoading:!0}));try{let p=new URLSearchParams({offset:o.current.toString(),limit:Er.PAGINATION_PAGE_SIZE.toString()});n&&p.append("project",n);let m=await fetch(`${e}?${p}`);if(!m.ok)throw new Error(`Failed to load ${t}: ${m.statusText}`);let v=await m.json();return l(y=>({...y,isLoading:!1,hasMore:v.hasMore})),o.current+=Er.PAGINATION_PAGE_SIZE,v.items}catch(p){return console.error(`Failed to load ${t}:`,p),l(m=>({...m,isLoading:!1})),[]}},[n,e,t]);return{...r,loadMore:s}}function gf(e){let t=vu(We.OBSERVATIONS,"observations",e),n=vu(We.SUMMARIES,"summaries",e),r=vu(We.PROMPTS,"prompts",e);return{observations:t,summaries:n,prompts:r}}var Pn=ee(Z(),1),wf="claude-mem-theme";function Xp(){return typeof window>"u"||window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function yf(){try{let e=localStorage.getItem(wf);if(e==="system"||e==="light"||e==="dark")return e}catch(e){console.warn("Failed to read theme preference from localStorage:",e)}return"system"}function Sf(e){return e==="system"?Xp():e}function kf(){let[e,t]=(0,Pn.useState)(yf),[n,r]=(0,Pn.useState)(()=>Sf(yf()));return(0,Pn.useEffect)(()=>{let o=Sf(e);r(o),document.documentElement.setAttribute("data-theme",o)},[e]),(0,Pn.useEffect)(()=>{if(e!=="system")return;let o=window.matchMedia("(prefers-color-scheme: dark)"),i=u=>{let s=u.matches?"dark":"light";r(s),document.documentElement.setAttribute("data-theme",s)};return o.addEventListener("change",i),()=>o.removeEventListener("change",i)},[e]),{preference:e,resolvedTheme:n,setThemePreference:o=>{try{localStorage.setItem(wf,o),t(o)}catch(i){console.warn("Failed to save theme preference to localStorage:",i),t(o)}}}}function Kl(e,t){let n=new Set;return[...e,...t].filter(r=>n.has(r.id)?!1:(n.add(r.id),!0))}function Ef(){let[e,t]=(0,K.useState)(""),[n,r]=(0,K.useState)(!1),[l,o]=(0,K.useState)([]),[i,u]=(0,K.useState)([]),[s,a]=(0,K.useState)([]),{observations:p,summaries:m,prompts:v,projects:y,isProcessing:k,isConnected:w}=mf(),{settings:z,saveSettings:f,isSaving:c,saveStatus:d}=vf(),{stats:h,refreshStats:x}=hf(),{preference:C,resolvedTheme:E,setThemePreference:N}=kf(),L=gf(e),M=(0,K.useMemo)(()=>e?l:Kl(p,l),[p,l,e]),$e=(0,K.useMemo)(()=>e?i:Kl(m,i),[m,i,e]),Xl=(0,K.useMemo)(()=>e?s:Kl(v,s),[v,s,e]),gu=(0,K.useCallback)(()=>{r(Gt=>!Gt)},[]),yu=(0,K.useCallback)(async()=>{try{let[Gt,Su,wu]=await Promise.all([L.observations.loadMore(),L.summaries.loadMore(),L.prompts.loadMore()]);Gt.length>0&&o(Ln=>[...Ln,...Gt]),Su.length>0&&u(Ln=>[...Ln,...Su]),wu.length>0&&a(Ln=>[...Ln,...wu])}catch(Gt){console.error("Failed to load more data:",Gt)}},[e,L.observations,L.summaries,L.prompts]);return(0,K.useEffect)(()=>{o([]),u([]),a([]),yu()},[e]),K.default.createElement("div",{className:"container"},K.default.createElement("div",{className:"main-col"},K.default.createElement(rf,{isConnected:w,projects:y,currentFilter:e,onFilterChange:t,onSettingsToggle:gu,sidebarOpen:n,isProcessing:k,themePreference:C,onThemeChange:N}),K.default.createElement(df,{observations:M,summaries:$e,prompts:Xl,onLoadMore:yu,isLoading:L.observations.isLoading||L.summaries.isLoading||L.prompts.isLoading,hasMore:L.observations.hasMore||L.summaries.hasMore||L.prompts.hasMore})),K.default.createElement(pf,{isOpen:n,settings:z,stats:h,isSaving:c,saveStatus:d,isConnected:w,onSave:f,onClose:gu,onRefreshStats:x}))}var ut=ee(Z(),1),Gl=class extends ut.Component{constructor(t){super(t),this.state={hasError:!1,error:null,errorInfo:null}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,n){console.error("[ErrorBoundary] Caught error:",t,n),this.setState({error:t,errorInfo:n})}render(){return this.state.hasError?ut.default.createElement("div",{style:{padding:"20px",color:"#ff6b6b",backgroundColor:"#1a1a1a",minHeight:"100vh"}},ut.default.createElement("h1",{style:{fontSize:"24px",marginBottom:"10px"}},"Something went wrong"),ut.default.createElement("p",{style:{marginBottom:"10px",color:"#8b949e"}},"The application encountered an error. Please refresh the page to try again."),this.state.error&&ut.default.createElement("details",{style:{marginTop:"20px",color:"#8b949e"}},ut.default.createElement("summary",{style:{cursor:"pointer",marginBottom:"10px"}},"Error details"),ut.default.createElement("pre",{style:{backgroundColor:"#0d1117",padding:"10px",borderRadius:"6px",overflow:"auto"}},this.state.error.toString(),this.state.errorInfo&&` +`+o.stack}return{value:e,source:t,stack:l,digest:null}}function Po(e,t,n){return{value:e,source:null,stack:n??null,digest:t??null}}function ci(e,t){try{console.error(t.value)}catch(n){setTimeout(function(){throw n})}}var xp=typeof WeakMap=="function"?WeakMap:Map;function _c(e,t,n){n=et(-1,n),n.tag=3,n.payload={element:null};var r=t.value;return n.callback=function(){Nl||(Nl=!0,wi=r),ci(e,t)},n}function xc(e,t,n){n=et(-1,n),n.tag=3;var r=e.type.getDerivedStateFromError;if(typeof r=="function"){var l=t.value;n.payload=function(){return r(l)},n.callback=function(){ci(e,t)}}var o=e.stateNode;return o!==null&&typeof o.componentDidCatch=="function"&&(n.callback=function(){ci(e,t),typeof r!="function"&&(kt===null?kt=new Set([this]):kt.add(this));var i=t.stack;this.componentDidCatch(t.value,{componentStack:i!==null?i:""})}),n}function As(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new xp;var l=new Set;r.set(t,l)}else l=r.get(t),l===void 0&&(l=new Set,r.set(t,l));l.has(n)||(l.add(n),e=Fp.bind(null,e,t,n),t.then(e,e))}function Us(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 js(e,t,n,r,l){return(e.mode&1)===0?(e===t?e.flags|=65536:(e.flags|=128,n.flags|=131072,n.flags&=-52805,n.tag===1&&(n.alternate===null?n.tag=17:(t=et(-1,1),t.tag=2,wt(n,t,1))),n.lanes|=1),e):(e.flags|=65536,e.lanes=l,e)}var Cp=ot.ReactCurrentOwner,ve=!1;function fe(e,t,n,r){t.child=e===null?ba(t,null,n,r):Sn(t,e.child,n,r)}function Fs(e,t,n,r,l){n=n.render;var o=t.ref;return mn(t,l),r=qi(e,t,n,r,o,l),n=bi(),e!==null&&!ve?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~l,lt(e,t,l)):(B&&n&&Vi(t),t.flags|=1,fe(e,t,r,l),t.child)}function Bs(e,t,n,r,l){if(e===null){var o=n.type;return typeof o=="function"&&!au(o)&&o.defaultProps===void 0&&n.compare===null&&n.defaultProps===void 0?(t.tag=15,t.type=o,Cc(e,t,o,r,l)):(e=ol(n.type,null,r,t,t.mode,l),e.ref=t.ref,e.return=t,t.child=e)}if(o=e.child,(e.lanes&l)===0){var i=o.memoizedProps;if(n=n.compare,n=n!==null?n:sr,n(i,r)&&e.ref===t.ref)return lt(e,t,l)}return t.flags|=1,e=_t(o,r),e.ref=t.ref,e.return=t,t.child=e}function Cc(e,t,n,r,l){if(e!==null){var o=e.memoizedProps;if(sr(o,r)&&e.ref===t.ref)if(ve=!1,t.pendingProps=r=o,(e.lanes&l)!==0)(e.flags&131072)!==0&&(ve=!0);else return t.lanes=e.lanes,lt(e,t,l)}return fi(e,t,n,r,l)}function Nc(e,t,n){var r=t.pendingProps,l=r.children,o=e!==null?e.memoizedState:null;if(r.mode==="hidden")if((t.mode&1)===0)t.memoizedState={baseLanes:0,cachePool:null,transitions:null},I(an,Se),Se|=n;else{if((n&1073741824)===0)return e=o!==null?o.baseLanes|n:n,t.lanes=t.childLanes=1073741824,t.memoizedState={baseLanes:e,cachePool:null,transitions:null},t.updateQueue=null,I(an,Se),Se|=e,null;t.memoizedState={baseLanes:0,cachePool:null,transitions:null},r=o!==null?o.baseLanes:n,I(an,Se),Se|=r}else o!==null?(r=o.baseLanes|n,t.memoizedState=null):r=n,I(an,Se),Se|=r;return fe(e,t,l,n),t.child}function Tc(e,t){var n=t.ref;(e===null&&n!==null||e!==null&&e.ref!==n)&&(t.flags|=512,t.flags|=2097152)}function fi(e,t,n,r,l){var o=ge(n)?Vt:ae.current;return o=gn(t,o),mn(t,l),n=qi(e,t,n,r,o,l),r=bi(),e!==null&&!ve?(t.updateQueue=e.updateQueue,t.flags&=-2053,e.lanes&=~l,lt(e,t,l)):(B&&r&&Vi(t),t.flags|=1,fe(e,t,n,l),t.child)}function Vs(e,t,n,r,l){if(ge(n)){var o=!0;hl(t)}else o=!1;if(mn(t,l),t.stateNode===null)nl(e,t),Ec(t,n,r),ai(t,n,r,l),r=!0;else if(e===null){var i=t.stateNode,u=t.memoizedProps;i.props=u;var s=i.context,c=n.contextType;typeof c=="object"&&c!==null?c=Oe(c):(c=ge(n)?Vt:ae.current,c=gn(t,c));var p=n.getDerivedStateFromProps,m=typeof p=="function"||typeof i.getSnapshotBeforeUpdate=="function";m||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(u!==r||s!==c)&&Is(t,i,r,c),ft=!1;var v=t.memoizedState;i.state=v,kl(t,r,i,l),s=t.memoizedState,u!==r||v!==s||he.current||ft?(typeof p=="function"&&(si(t,n,p,r),s=t.memoizedState),(u=ft||Ds(t,n,u,r,v,s,c))?(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=r,t.memoizedState=s),i.props=r,i.state=s,i.context=c,r=u):(typeof i.componentDidMount=="function"&&(t.flags|=4194308),r=!1)}else{i=t.stateNode,tc(e,t),u=t.memoizedProps,c=t.type===t.elementType?u:Ue(t.type,u),i.props=c,m=t.pendingProps,v=i.context,s=n.contextType,typeof s=="object"&&s!==null?s=Oe(s):(s=ge(n)?Vt:ae.current,s=gn(t,s));var y=n.getDerivedStateFromProps;(p=typeof y=="function"||typeof i.getSnapshotBeforeUpdate=="function")||typeof i.UNSAFE_componentWillReceiveProps!="function"&&typeof i.componentWillReceiveProps!="function"||(u!==m||v!==s)&&Is(t,i,r,s),ft=!1,v=t.memoizedState,i.state=v,kl(t,r,i,l);var w=t.memoizedState;u!==m||v!==w||he.current||ft?(typeof y=="function"&&(si(t,n,y,r),w=t.memoizedState),(c=ft||Ds(t,n,c,r,v,w,s)||!1)?(p||typeof i.UNSAFE_componentWillUpdate!="function"&&typeof i.componentWillUpdate!="function"||(typeof i.componentWillUpdate=="function"&&i.componentWillUpdate(r,w,s),typeof i.UNSAFE_componentWillUpdate=="function"&&i.UNSAFE_componentWillUpdate(r,w,s)),typeof i.componentDidUpdate=="function"&&(t.flags|=4),typeof i.getSnapshotBeforeUpdate=="function"&&(t.flags|=1024)):(typeof i.componentDidUpdate!="function"||u===e.memoizedProps&&v===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||u===e.memoizedProps&&v===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=w),i.props=r,i.state=w,i.context=s,r=c):(typeof i.componentDidUpdate!="function"||u===e.memoizedProps&&v===e.memoizedState||(t.flags|=4),typeof i.getSnapshotBeforeUpdate!="function"||u===e.memoizedProps&&v===e.memoizedState||(t.flags|=1024),r=!1)}return di(e,t,n,r,o,l)}function di(e,t,n,r,l,o){Tc(e,t);var i=(t.flags&128)!==0;if(!r&&!i)return l&&Cs(t,n,!1),lt(e,t,o);r=t.stateNode,Cp.current=t;var u=i&&typeof n.getDerivedStateFromError!="function"?null:r.render();return t.flags|=1,e!==null&&i?(t.child=Sn(t,e.child,null,o),t.child=Sn(t,null,u,o)):fe(e,t,u,o),t.memoizedState=r.state,l&&Cs(t,n,!0),t.child}function Pc(e){var t=e.stateNode;t.pendingContext?xs(e,t.pendingContext,t.pendingContext!==t.context):t.context&&xs(e,t.context,!1),Xi(e,t.containerInfo)}function Hs(e,t,n,r,l){return yn(),Wi(l),t.flags|=256,fe(e,t,n,r),t.child}var pi={dehydrated:null,treeContext:null,retryLane:0};function mi(e){return{baseLanes:e,cachePool:null,transitions:null}}function Lc(e,t,n){var r=t.pendingProps,l=V.current,o=!1,i=(t.flags&128)!==0,u;if((u=i)||(u=e!==null&&e.memoizedState===null?!1:(l&2)!==0),u?(o=!0,t.flags&=-129):(e===null||e.memoizedState!==null)&&(l|=1),I(V,l&1),e===null)return ii(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=r.children,e=r.fallback,o?(r=t.mode,o=t.child,i={mode:"hidden",children:i},(r&1)===0&&o!==null?(o.childLanes=0,o.pendingProps=i):o=Vl(i,r,0,null),e=Bt(e,r,n,null),o.return=t,e.return=t,o.sibling=e,t.child=o,t.child.memoizedState=mi(n),t.memoizedState=pi,e):nu(t,i));if(l=e.memoizedState,l!==null&&(u=l.dehydrated,u!==null))return Np(e,t,i,r,u,l,n);if(o){o=r.fallback,i=t.mode,l=e.child,u=l.sibling;var s={mode:"hidden",children:r.children};return(i&1)===0&&t.child!==l?(r=t.child,r.childLanes=0,r.pendingProps=s,t.deletions=null):(r=_t(l,s),r.subtreeFlags=l.subtreeFlags&14680064),u!==null?o=_t(u,o):(o=Bt(o,i,n,null),o.flags|=2),o.return=t,r.return=t,r.sibling=o,t.child=r,r=o,o=t.child,i=e.child.memoizedState,i=i===null?mi(n):{baseLanes:i.baseLanes|n,cachePool:null,transitions:i.transitions},o.memoizedState=i,o.childLanes=e.childLanes&~n,t.memoizedState=pi,r}return o=e.child,e=o.sibling,r=_t(o,{mode:"visible",children:r.children}),(t.mode&1)===0&&(r.lanes=n),r.return=t,r.sibling=null,e!==null&&(n=t.deletions,n===null?(t.deletions=[e],t.flags|=16):n.push(e)),t.child=r,t.memoizedState=null,r}function nu(e,t){return t=Vl({mode:"visible",children:t},e.mode,0,null),t.return=e,e.child=t}function Gr(e,t,n,r){return r!==null&&Wi(r),Sn(t,e.child,null,n),e=nu(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function Np(e,t,n,r,l,o,i){if(n)return t.flags&256?(t.flags&=-257,r=Po(Error(g(422))),Gr(e,t,i,r)):t.memoizedState!==null?(t.child=e.child,t.flags|=128,null):(o=r.fallback,l=t.mode,r=Vl({mode:"visible",children:r.children},l,0,null),o=Bt(o,l,i,null),o.flags|=2,r.return=t,o.return=t,r.sibling=o,t.child=r,(t.mode&1)!==0&&Sn(t,e.child,null,i),t.child.memoizedState=mi(i),t.memoizedState=pi,o);if((t.mode&1)===0)return Gr(e,t,i,null);if(l.data==="$!"){if(r=l.nextSibling&&l.nextSibling.dataset,r)var u=r.dgst;return r=u,o=Error(g(419)),r=Po(o,r,void 0),Gr(e,t,i,r)}if(u=(i&e.childLanes)!==0,ve||u){if(r=q,r!==null){switch(i&-i){case 4:l=2;break;case 16:l=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:l=32;break;case 536870912:l=268435456;break;default:l=0}l=(l&(r.suspendedLanes|i))!==0?0:l,l!==0&&l!==o.retryLane&&(o.retryLane=l,rt(e,l),Ve(r,e,l,-1))}return su(),r=Po(Error(g(421))),Gr(e,t,i,r)}return l.data==="$?"?(t.flags|=128,t.child=e.child,t=Bp.bind(null,e),l._reactRetry=t,null):(e=o.treeContext,we=St(l.nextSibling),ke=t,B=!0,Fe=null,e!==null&&(Te[Pe++]=qe,Te[Pe++]=be,Te[Pe++]=Ht,qe=e.id,be=e.overflow,Ht=t),t=nu(t,r.children),t.flags|=4096,t)}function Ws(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),ui(e.return,t,n)}function Lo(e,t,n,r,l){var o=e.memoizedState;o===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:l}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=l)}function Mc(e,t,n){var r=t.pendingProps,l=r.revealOrder,o=r.tail;if(fe(e,t,r.children,n),r=V.current,(r&2)!==0)r=r&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&&Ws(e,n,t);else if(e.tag===19)Ws(e,n,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}r&=1}if(I(V,r),(t.mode&1)===0)t.memoizedState=null;else switch(l){case"forwards":for(n=t.child,l=null;n!==null;)e=n.alternate,e!==null&&El(e)===null&&(l=n),n=n.sibling;n=l,n===null?(l=t.child,t.child=null):(l=n.sibling,n.sibling=null),Lo(t,!1,l,n,o);break;case"backwards":for(n=null,l=t.child,t.child=null;l!==null;){if(e=l.alternate,e!==null&&El(e)===null){t.child=l;break}e=l.sibling,l.sibling=n,n=l,l=e}Lo(t,!0,n,null,o);break;case"together":Lo(t,!1,null,null,void 0);break;default:t.memoizedState=null}return t.child}function nl(e,t){(t.mode&1)===0&&e!==null&&(e.alternate=null,t.alternate=null,t.flags|=2)}function lt(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),$t|=t.lanes,(n&t.childLanes)===0)return null;if(e!==null&&t.child!==e.child)throw Error(g(153));if(t.child!==null){for(e=t.child,n=_t(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=_t(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function Tp(e,t,n){switch(t.tag){case 3:Pc(t),yn();break;case 5:nc(t);break;case 1:ge(t.type)&&hl(t);break;case 4:Xi(t,t.stateNode.containerInfo);break;case 10:var r=t.type._context,l=t.memoizedProps.value;I(Sl,r._currentValue),r._currentValue=l;break;case 13:if(r=t.memoizedState,r!==null)return r.dehydrated!==null?(I(V,V.current&1),t.flags|=128,null):(n&t.child.childLanes)!==0?Lc(e,t,n):(I(V,V.current&1),e=lt(e,t,n),e!==null?e.sibling:null);I(V,V.current&1);break;case 19:if(r=(n&t.childLanes)!==0,(e.flags&128)!==0){if(r)return Mc(e,t,n);t.flags|=128}if(l=t.memoizedState,l!==null&&(l.rendering=null,l.tail=null,l.lastEffect=null),I(V,V.current),r)break;return null;case 22:case 23:return t.lanes=0,Nc(e,t,n)}return lt(e,t,n)}var Oc,vi,zc,Dc;Oc=function(e,t){for(var n=t.child;n!==null;){if(n.tag===5||n.tag===6)e.appendChild(n.stateNode);else if(n.tag!==4&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}};vi=function(){};zc=function(e,t,n,r){var l=e.memoizedProps;if(l!==r){e=t.stateNode,jt(Ye.current);var o=null;switch(n){case"input":l=jo(e,l),r=jo(e,r),o=[];break;case"select":l=W({},l,{value:void 0}),r=W({},r,{value:void 0}),o=[];break;case"textarea":l=Vo(e,l),r=Vo(e,r),o=[];break;default:typeof l.onClick!="function"&&typeof r.onClick=="function"&&(e.onclick=ml)}Wo(n,r);var i;n=null;for(c in l)if(!r.hasOwnProperty(c)&&l.hasOwnProperty(c)&&l[c]!=null)if(c==="style"){var u=l[c];for(i in u)u.hasOwnProperty(i)&&(n||(n={}),n[i]="")}else c!=="dangerouslySetInnerHTML"&&c!=="children"&&c!=="suppressContentEditableWarning"&&c!=="suppressHydrationWarning"&&c!=="autoFocus"&&(tr.hasOwnProperty(c)?o||(o=[]):(o=o||[]).push(c,null));for(c in r){var s=r[c];if(u=l?.[c],r.hasOwnProperty(c)&&s!==u&&(s!=null||u!=null))if(c==="style")if(u){for(i in u)!u.hasOwnProperty(i)||s&&s.hasOwnProperty(i)||(n||(n={}),n[i]="");for(i in s)s.hasOwnProperty(i)&&u[i]!==s[i]&&(n||(n={}),n[i]=s[i])}else n||(o||(o=[]),o.push(c,n)),n=s;else c==="dangerouslySetInnerHTML"?(s=s?s.__html:void 0,u=u?u.__html:void 0,s!=null&&u!==s&&(o=o||[]).push(c,s)):c==="children"?typeof s!="string"&&typeof s!="number"||(o=o||[]).push(c,""+s):c!=="suppressContentEditableWarning"&&c!=="suppressHydrationWarning"&&(tr.hasOwnProperty(c)?(s!=null&&c==="onScroll"&&U("scroll",e),o||u===s||(o=[])):(o=o||[]).push(c,s))}n&&(o=o||[]).push("style",n);var c=o;(t.updateQueue=c)&&(t.flags|=4)}};Dc=function(e,t,n,r){n!==r&&(t.flags|=4)};function Bn(e,t){if(!B)switch(e.tailMode){case"hidden":t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case"collapsed":n=e.tail;for(var r=null;n!==null;)n.alternate!==null&&(r=n),n=n.sibling;r===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:r.sibling=null}}function ue(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var l=e.child;l!==null;)n|=l.lanes|l.childLanes,r|=l.subtreeFlags&14680064,r|=l.flags&14680064,l.return=e,l=l.sibling;else for(l=e.child;l!==null;)n|=l.lanes|l.childLanes,r|=l.subtreeFlags,r|=l.flags,l.return=e,l=l.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function Pp(e,t,n){var r=t.pendingProps;switch(Hi(t),t.tag){case 2:case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return ue(t),null;case 1:return ge(t.type)&&vl(),ue(t),null;case 3:return r=t.stateNode,wn(),j(he),j(ae),Zi(),r.pendingContext&&(r.context=r.pendingContext,r.pendingContext=null),(e===null||e.child===null)&&(Qr(t)?t.flags|=4:e===null||e.memoizedState.isDehydrated&&(t.flags&256)===0||(t.flags|=1024,Fe!==null&&(_i(Fe),Fe=null))),vi(e,t),ue(t),null;case 5:Yi(t);var l=jt(pr.current);if(n=t.type,e!==null&&t.stateNode!=null)zc(e,t,n,r,l),e.ref!==t.ref&&(t.flags|=512,t.flags|=2097152);else{if(!r){if(t.stateNode===null)throw Error(g(166));return ue(t),null}if(e=jt(Ye.current),Qr(t)){r=t.stateNode,n=t.type;var o=t.memoizedProps;switch(r[Ge]=t,r[fr]=o,e=(t.mode&1)!==0,n){case"dialog":U("cancel",r),U("close",r);break;case"iframe":case"object":case"embed":U("load",r);break;case"video":case"audio":for(l=0;l<\/script>",e=e.removeChild(e.firstChild)):typeof r.is=="string"?e=i.createElement(n,{is:r.is}):(e=i.createElement(n),n==="select"&&(i=e,r.multiple?i.multiple=!0:r.size&&(i.size=r.size))):e=i.createElementNS(e,n),e[Ge]=t,e[fr]=r,Oc(e,t,!1,!1),t.stateNode=e;e:{switch(i=$o(n,r),n){case"dialog":U("cancel",e),U("close",e),l=r;break;case"iframe":case"object":case"embed":U("load",e),l=r;break;case"video":case"audio":for(l=0;lEn&&(t.flags|=128,r=!0,Bn(o,!1),t.lanes=4194304)}else{if(!r)if(e=El(i),e!==null){if(t.flags|=128,r=!0,n=e.updateQueue,n!==null&&(t.updateQueue=n,t.flags|=4),Bn(o,!0),o.tail===null&&o.tailMode==="hidden"&&!i.alternate&&!B)return ue(t),null}else 2*R()-o.renderingStartTime>En&&n!==1073741824&&(t.flags|=128,r=!0,Bn(o,!1),t.lanes=4194304);o.isBackwards?(i.sibling=t.child,t.child=i):(n=o.last,n!==null?n.sibling=i:t.child=i,o.last=i)}return o.tail!==null?(t=o.tail,o.rendering=t,o.tail=t.sibling,o.renderingStartTime=R(),t.sibling=null,n=V.current,I(V,r?n&1|2:n&1),t):(ue(t),null);case 22:case 23:return uu(),r=t.memoizedState!==null,e!==null&&e.memoizedState!==null!==r&&(t.flags|=8192),r&&(t.mode&1)!==0?(Se&1073741824)!==0&&(ue(t),t.subtreeFlags&6&&(t.flags|=8192)):ue(t),null;case 24:return null;case 25:return null}throw Error(g(156,t.tag))}function Lp(e,t){switch(Hi(t),t.tag){case 1:return ge(t.type)&&vl(),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return wn(),j(he),j(ae),Zi(),e=t.flags,(e&65536)!==0&&(e&128)===0?(t.flags=e&-65537|128,t):null;case 5:return Yi(t),null;case 13:if(j(V),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(g(340));yn()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return j(V),null;case 4:return wn(),null;case 10:return Qi(t.type._context),null;case 22:case 23:return uu(),null;case 24:return null;default:return null}}var Xr=!1,se=!1,Mp=typeof WeakSet=="function"?WeakSet:Set,x=null;function sn(e,t){var n=e.ref;if(n!==null)if(typeof n=="function")try{n(null)}catch(r){$(e,t,r)}else n.current=null}function hi(e,t,n){try{n()}catch(r){$(e,t,r)}}var $s=!1;function Op(e,t){if(bo=fl,e=Fa(),Bi(e)){if("selectionStart"in e)var n={start:e.selectionStart,end:e.selectionEnd};else e:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var l=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break e}var i=0,u=-1,s=-1,c=0,p=0,m=e,v=null;t:for(;;){for(var y;m!==n||l!==0&&m.nodeType!==3||(u=i+l),m!==o||r!==0&&m.nodeType!==3||(s=i+r),m.nodeType===3&&(i+=m.nodeValue.length),(y=m.firstChild)!==null;)v=m,m=y;for(;;){if(m===e)break t;if(v===n&&++c===l&&(u=i),v===o&&++p===r&&(s=i),(y=m.nextSibling)!==null)break;m=v,v=m.parentNode}m=y}n=u===-1||s===-1?null:{start:u,end:s}}else n=null}n=n||{start:0,end:0}}else n=null;for(ei={focusedElem:e,selectionRange:n},fl=!1,x=t;x!==null;)if(t=x,e=t.child,(t.subtreeFlags&1028)!==0&&e!==null)e.return=t,x=e;else for(;x!==null;){t=x;try{var w=t.alternate;if((t.flags&1024)!==0)switch(t.tag){case 0:case 11:case 15:break;case 1:if(w!==null){var k=w.memoizedProps,O=w.memoizedState,d=t.stateNode,a=d.getSnapshotBeforeUpdate(t.elementType===t.type?k:Ue(t.type,k),O);d.__reactInternalSnapshotBeforeUpdate=a}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(g(163))}}catch(h){$(t,t.return,h)}if(e=t.sibling,e!==null){e.return=t.return,x=e;break}x=t.return}return w=$s,$s=!1,w}function qn(e,t,n){var r=t.updateQueue;if(r=r!==null?r.lastEffect:null,r!==null){var l=r=r.next;do{if((l.tag&e)===e){var o=l.destroy;l.destroy=void 0,o!==void 0&&hi(t,n,o)}l=l.next}while(l!==r)}}function Fl(e,t){if(t=t.updateQueue,t=t!==null?t.lastEffect:null,t!==null){var n=t=t.next;do{if((n.tag&e)===e){var r=n.create;n.destroy=r()}n=n.next}while(n!==t)}}function gi(e){var t=e.ref;if(t!==null){var n=e.stateNode;switch(e.tag){case 5:e=n;break;default:e=n}typeof t=="function"?t(e):t.current=e}}function Ic(e){var t=e.alternate;t!==null&&(e.alternate=null,Ic(t)),e.child=null,e.deletions=null,e.sibling=null,e.tag===5&&(t=e.stateNode,t!==null&&(delete t[Ge],delete t[fr],delete t[ri],delete t[pp],delete t[mp])),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 Ac(e){return e.tag===5||e.tag===3||e.tag===4}function Rs(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Ac(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 yi(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.nodeType===8?n.parentNode.insertBefore(e,t):n.insertBefore(e,t):(n.nodeType===8?(t=n.parentNode,t.insertBefore(e,n)):(t=n,t.appendChild(e)),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=ml));else if(r!==4&&(e=e.child,e!==null))for(yi(e,t,n),e=e.sibling;e!==null;)yi(e,t,n),e=e.sibling}function Si(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(e=e.child,e!==null))for(Si(e,t,n),e=e.sibling;e!==null;)Si(e,t,n),e=e.sibling}var te=null,je=!1;function at(e,t,n){for(n=n.child;n!==null;)Uc(e,t,n),n=n.sibling}function Uc(e,t,n){if(Xe&&typeof Xe.onCommitFiberUnmount=="function")try{Xe.onCommitFiberUnmount(Ml,n)}catch{}switch(n.tag){case 5:se||sn(n,t);case 6:var r=te,l=je;te=null,at(e,t,n),te=r,je=l,te!==null&&(je?(e=te,n=n.stateNode,e.nodeType===8?e.parentNode.removeChild(n):e.removeChild(n)):te.removeChild(n.stateNode));break;case 18:te!==null&&(je?(e=te,n=n.stateNode,e.nodeType===8?Eo(e.parentNode,n):e.nodeType===1&&Eo(e,n),ir(e)):Eo(te,n.stateNode));break;case 4:r=te,l=je,te=n.stateNode.containerInfo,je=!0,at(e,t,n),te=r,je=l;break;case 0:case 11:case 14:case 15:if(!se&&(r=n.updateQueue,r!==null&&(r=r.lastEffect,r!==null))){l=r=r.next;do{var o=l,i=o.destroy;o=o.tag,i!==void 0&&((o&2)!==0||(o&4)!==0)&&hi(n,t,i),l=l.next}while(l!==r)}at(e,t,n);break;case 1:if(!se&&(sn(n,t),r=n.stateNode,typeof r.componentWillUnmount=="function"))try{r.props=n.memoizedProps,r.state=n.memoizedState,r.componentWillUnmount()}catch(u){$(n,t,u)}at(e,t,n);break;case 21:at(e,t,n);break;case 22:n.mode&1?(se=(r=se)||n.memoizedState!==null,at(e,t,n),se=r):at(e,t,n);break;default:at(e,t,n)}}function Qs(e){var t=e.updateQueue;if(t!==null){e.updateQueue=null;var n=e.stateNode;n===null&&(n=e.stateNode=new Mp),t.forEach(function(r){var l=Vp.bind(null,e,r);n.has(r)||(n.add(r),r.then(l,l))})}}function Ae(e,t){var n=t.deletions;if(n!==null)for(var r=0;rl&&(l=i),r&=~o}if(r=l,r=R()-r,r=(120>r?120:480>r?480:1080>r?1080:1920>r?1920:3e3>r?3e3:4320>r?4320:1960*Dp(r/1960))-r,10e?16:e,vt===null)var r=!1;else{if(e=vt,vt=null,Tl=0,(M&6)!==0)throw Error(g(331));var l=M;for(M|=4,x=e.current;x!==null;){var o=x,i=o.child;if((x.flags&16)!==0){var u=o.deletions;if(u!==null){for(var s=0;sR()-ou?Ft(e,0):lu|=n),ye(e,t)}function Rc(e,t){t===0&&((e.mode&1)===0?t=1:(t=Ar,Ar<<=1,(Ar&130023424)===0&&(Ar=4194304)));var n=de();e=rt(e,t),e!==null&&(yr(e,t,n),ye(e,n))}function Bp(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Rc(e,n)}function Vp(e,t){var n=0;switch(e.tag){case 13:var r=e.stateNode,l=e.memoizedState;l!==null&&(n=l.retryLane);break;case 19:r=e.stateNode;break;default:throw Error(g(314))}r!==null&&r.delete(t),Rc(e,n)}var Qc;Qc=function(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps||he.current)ve=!0;else{if((e.lanes&n)===0&&(t.flags&128)===0)return ve=!1,Tp(e,t,n);ve=(e.flags&131072)!==0}else ve=!1,B&&(t.flags&1048576)!==0&&Ya(t,yl,t.index);switch(t.lanes=0,t.tag){case 2:var r=t.type;nl(e,t),e=t.pendingProps;var l=gn(t,ae.current);mn(t,n),l=qi(null,t,r,e,l,n);var o=bi();return t.flags|=1,typeof l=="object"&&l!==null&&typeof l.render=="function"&&l.$$typeof===void 0?(t.tag=1,t.memoizedState=null,t.updateQueue=null,ge(r)?(o=!0,hl(t)):o=!1,t.memoizedState=l.state!==null&&l.state!==void 0?l.state:null,Gi(t),l.updater=jl,t.stateNode=l,l._reactInternals=t,ai(t,r,e,n),t=di(null,t,r,!0,o,n)):(t.tag=0,B&&o&&Vi(t),fe(null,t,l,n),t=t.child),t;case 16:r=t.elementType;e:{switch(nl(e,t),e=t.pendingProps,l=r._init,r=l(r._payload),t.type=r,l=t.tag=Wp(r),e=Ue(r,e),l){case 0:t=fi(null,t,r,e,n);break e;case 1:t=Vs(null,t,r,e,n);break e;case 11:t=Fs(null,t,r,e,n);break e;case 14:t=Bs(null,t,r,Ue(r.type,e),n);break e}throw Error(g(306,r,""))}return t;case 0:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ue(r,l),fi(e,t,r,l,n);case 1:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ue(r,l),Vs(e,t,r,l,n);case 3:e:{if(Pc(t),e===null)throw Error(g(387));r=t.pendingProps,o=t.memoizedState,l=o.element,tc(e,t),kl(t,r,null,n);var i=t.memoizedState;if(r=i.element,o.isDehydrated)if(o={element:r,isDehydrated:!1,cache:i.cache,pendingSuspenseBoundaries:i.pendingSuspenseBoundaries,transitions:i.transitions},t.updateQueue.baseState=o,t.memoizedState=o,t.flags&256){l=kn(Error(g(423)),t),t=Hs(e,t,r,n,l);break e}else if(r!==l){l=kn(Error(g(424)),t),t=Hs(e,t,r,n,l);break e}else for(we=St(t.stateNode.containerInfo.firstChild),ke=t,B=!0,Fe=null,n=ba(t,null,r,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(yn(),r===l){t=lt(e,t,n);break e}fe(e,t,r,n)}t=t.child}return t;case 5:return nc(t),e===null&&ii(t),r=t.type,l=t.pendingProps,o=e!==null?e.memoizedProps:null,i=l.children,ti(r,l)?i=null:o!==null&&ti(r,o)&&(t.flags|=32),Tc(e,t),fe(e,t,i,n),t.child;case 6:return e===null&&ii(t),null;case 13:return Lc(e,t,n);case 4:return Xi(t,t.stateNode.containerInfo),r=t.pendingProps,e===null?t.child=Sn(t,null,r,n):fe(e,t,r,n),t.child;case 11:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ue(r,l),Fs(e,t,r,l,n);case 7:return fe(e,t,t.pendingProps,n),t.child;case 8:return fe(e,t,t.pendingProps.children,n),t.child;case 12:return fe(e,t,t.pendingProps.children,n),t.child;case 10:e:{if(r=t.type._context,l=t.pendingProps,o=t.memoizedProps,i=l.value,I(Sl,r._currentValue),r._currentValue=i,o!==null)if(He(o.value,i)){if(o.children===l.children&&!he.current){t=lt(e,t,n);break e}}else for(o=t.child,o!==null&&(o.return=t);o!==null;){var u=o.dependencies;if(u!==null){i=o.child;for(var s=u.firstContext;s!==null;){if(s.context===r){if(o.tag===1){s=et(-1,n&-n),s.tag=2;var c=o.updateQueue;if(c!==null){c=c.shared;var p=c.pending;p===null?s.next=s:(s.next=p.next,p.next=s),c.pending=s}}o.lanes|=n,s=o.alternate,s!==null&&(s.lanes|=n),ui(o.return,n,t),u.lanes|=n;break}s=s.next}}else if(o.tag===10)i=o.type===t.type?null:o.child;else if(o.tag===18){if(i=o.return,i===null)throw Error(g(341));i.lanes|=n,u=i.alternate,u!==null&&(u.lanes|=n),ui(i,n,t),i=o.sibling}else i=o.child;if(i!==null)i.return=o;else for(i=o;i!==null;){if(i===t){i=null;break}if(o=i.sibling,o!==null){o.return=i.return,i=o;break}i=i.return}o=i}fe(e,t,l.children,n),t=t.child}return t;case 9:return l=t.type,r=t.pendingProps.children,mn(t,n),l=Oe(l),r=r(l),t.flags|=1,fe(e,t,r,n),t.child;case 14:return r=t.type,l=Ue(r,t.pendingProps),l=Ue(r.type,l),Bs(e,t,r,l,n);case 15:return Cc(e,t,t.type,t.pendingProps,n);case 17:return r=t.type,l=t.pendingProps,l=t.elementType===r?l:Ue(r,l),nl(e,t),t.tag=1,ge(r)?(e=!0,hl(t)):e=!1,mn(t,n),Ec(t,r,l),ai(t,r,l,n),di(null,t,r,!0,e,n);case 19:return Mc(e,t,n);case 22:return Nc(e,t,n)}throw Error(g(156,t.tag))};function Kc(e,t){return Sa(e,t)}function Hp(e,t,n,r){this.tag=e,this.key=n,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=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function Le(e,t,n,r){return new Hp(e,t,n,r)}function au(e){return e=e.prototype,!(!e||!e.isReactComponent)}function Wp(e){if(typeof e=="function")return au(e)?1:0;if(e!=null){if(e=e.$$typeof,e===Pi)return 11;if(e===Li)return 14}return 2}function _t(e,t){var n=e.alternate;return n===null?(n=Le(e.tag,t,e.key,e.mode),n.elementType=e.elementType,n.type=e.type,n.stateNode=e.stateNode,n.alternate=e,e.alternate=n):(n.pendingProps=t,n.type=e.type,n.flags=0,n.subtreeFlags=0,n.deletions=null),n.flags=e.flags&14680064,n.childLanes=e.childLanes,n.lanes=e.lanes,n.child=e.child,n.memoizedProps=e.memoizedProps,n.memoizedState=e.memoizedState,n.updateQueue=e.updateQueue,t=e.dependencies,n.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext},n.sibling=e.sibling,n.index=e.index,n.ref=e.ref,n}function ol(e,t,n,r,l,o){var i=2;if(r=e,typeof e=="function")au(e)&&(i=1);else if(typeof e=="string")i=5;else e:switch(e){case qt:return Bt(n.children,l,o,t);case Ti:i=8,l|=8;break;case Do:return e=Le(12,n,t,l|2),e.elementType=Do,e.lanes=o,e;case Io:return e=Le(13,n,t,l),e.elementType=Io,e.lanes=o,e;case Ao:return e=Le(19,n,t,l),e.elementType=Ao,e.lanes=o,e;case na:return Vl(n,l,o,t);default:if(typeof e=="object"&&e!==null)switch(e.$$typeof){case ea:i=10;break e;case ta:i=9;break e;case Pi:i=11;break e;case Li:i=14;break e;case ct:i=16,r=null;break e}throw Error(g(130,e==null?e:typeof e,""))}return t=Le(i,n,t,l),t.elementType=e,t.type=r,t.lanes=o,t}function Bt(e,t,n,r){return e=Le(7,e,r,t),e.lanes=n,e}function Vl(e,t,n,r){return e=Le(22,e,r,t),e.elementType=na,e.lanes=n,e.stateNode={isHidden:!1},e}function Mo(e,t,n){return e=Le(6,e,null,t),e.lanes=n,e}function Oo(e,t,n){return t=Le(4,e.children!==null?e.children:[],e.key,t),t.lanes=n,t.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},t}function $p(e,t,n,r,l){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=mo(0),this.expirationTimes=mo(-1),this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=mo(0),this.identifierPrefix=r,this.onRecoverableError=l,this.mutableSourceEagerHydrationData=null}function cu(e,t,n,r,l,o,i,u,s){return e=new $p(e,t,n,u,s),t===1?(t=1,o===!0&&(t|=8)):t=0,o=Le(3,null,null,t),e.current=o,o.stateNode=e,o.memoizedState={element:r,isDehydrated:n,cache:null,transitions:null,pendingSuspenseBoundaries:null},Gi(o),e}function Rp(e,t,n){var r=3{"use strict";function Jc(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>"u"||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!="function"))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(Jc)}catch(e){console.error(e)}}Jc(),qc.exports=Zc()});var tf=Ot(mu=>{"use strict";var ef=bc();mu.createRoot=ef.createRoot,mu.hydrateRoot=ef.hydrateRoot;var lm});var hu=ee(Z(),1),_f=ee(tf(),1);var K=ee(Z(),1);var A=ee(Z(),1);var b=ee(Z(),1);function nf({preference:e,onThemeChange:t}){let n=()=>{let o=["system","light","dark"],u=(o.indexOf(e)+1)%o.length;t(o[u])},r=()=>{switch(e){case"light":return b.default.createElement("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},b.default.createElement("circle",{cx:"12",cy:"12",r:"5"}),b.default.createElement("line",{x1:"12",y1:"1",x2:"12",y2:"3"}),b.default.createElement("line",{x1:"12",y1:"21",x2:"12",y2:"23"}),b.default.createElement("line",{x1:"4.22",y1:"4.22",x2:"5.64",y2:"5.64"}),b.default.createElement("line",{x1:"18.36",y1:"18.36",x2:"19.78",y2:"19.78"}),b.default.createElement("line",{x1:"1",y1:"12",x2:"3",y2:"12"}),b.default.createElement("line",{x1:"21",y1:"12",x2:"23",y2:"12"}),b.default.createElement("line",{x1:"4.22",y1:"19.78",x2:"5.64",y2:"18.36"}),b.default.createElement("line",{x1:"18.36",y1:"5.64",x2:"19.78",y2:"4.22"}));case"dark":return b.default.createElement("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},b.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 b.default.createElement("svg",{viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},b.default.createElement("rect",{x:"2",y:"3",width:"20",height:"14",rx:"2",ry:"2"}),b.default.createElement("line",{x1:"8",y1:"21",x2:"16",y2:"21"}),b.default.createElement("line",{x1:"12",y1:"17",x2:"12",y2:"21"}))}},l=()=>{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 b.default.createElement("button",{className:"theme-toggle-btn",onClick:n,title:l(),"aria-label":l()},r())}function rf({isConnected:e,projects:t,currentFilter:n,onFilterChange:r,onSettingsToggle:l,sidebarOpen:o,isProcessing:i,queueDepth:u,themePreference:s,onThemeChange:c}){return A.default.createElement("div",{className:"header"},A.default.createElement("h1",null,A.default.createElement("div",{style:{position:"relative",display:"inline-block"}},A.default.createElement("img",{src:"claude-mem-logomark.webp",alt:"",className:`logomark ${i?"spinning":""}`}),u>0&&A.default.createElement("div",{className:"queue-bubble"},u)),A.default.createElement("span",{className:"logo-text"},"claude-mem")),A.default.createElement("div",{className:"status"},A.default.createElement("a",{href:"https://docs.claude-mem.ai",target:"_blank",rel:"noopener noreferrer",title:"Documentation",style:{display:"block",padding:"8px 4px 8px 8px",color:"#a0a0a0",transition:"color 0.2s",lineHeight:0},onMouseEnter:p=>p.currentTarget.style.color="#606060",onMouseLeave:p=>p.currentTarget.style.color="#a0a0a0"},A.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},A.default.createElement("path",{d:"M4 19.5A2.5 2.5 0 0 1 6.5 17H20"}),A.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"}))),A.default.createElement("a",{href:"https://github.com/thedotmack/claude-mem/",target:"_blank",rel:"noopener noreferrer",title:"GitHub",style:{display:"block",padding:"8px 4px",color:"#a0a0a0",transition:"color 0.2s",lineHeight:0},onMouseEnter:p=>p.currentTarget.style.color="#606060",onMouseLeave:p=>p.currentTarget.style.color="#a0a0a0"},A.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor"},A.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"}))),A.default.createElement("a",{href:"https://x.com/Claude_Memory",target:"_blank",rel:"noopener noreferrer",title:"X (Twitter)",style:{display:"block",padding:"8px 8px 8px 4px",color:"#a0a0a0",transition:"color 0.2s",lineHeight:0},onMouseEnter:p=>p.currentTarget.style.color="#606060",onMouseLeave:p=>p.currentTarget.style.color="#a0a0a0"},A.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"currentColor"},A.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"}))),A.default.createElement("select",{value:n,onChange:p=>r(p.target.value)},A.default.createElement("option",{value:""},"All Projects"),t.map(p=>A.default.createElement("option",{key:p,value:p},p))),A.default.createElement(nf,{preference:s,onThemeChange:c}),A.default.createElement("button",{className:`settings-btn ${o?"active":""}`,onClick:l,title:"Settings"},A.default.createElement("svg",{className:"settings-icon",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},A.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"}),A.default.createElement("circle",{cx:"12",cy:"12",r:"3"})))))}var Q=ee(Z(),1);var L=ee(Z(),1);function Cn(e){return new Date(e).toLocaleString()}function lf(e){if(!e)return"-";let t=Math.floor(e/3600),n=Math.floor(e%3600/60);return`${t}h ${n}m`}function of(e){return e?e<1024?e+" B":e<1024*1024?(e/1024).toFixed(1)+" KB":(e/(1024*1024)).toFixed(1)+" MB":"-"}function uf(e){let t=["/Scripts/","/src/","/plugin/","/docs/"];for(let l of t){let o=e.indexOf(l);if(o!==-1)return e.substring(o+1)}let n=e.indexOf("claude-mem/");if(n!==-1)return e.substring(n+11);let r=e.split("/");return r.length>3?r.slice(-3).join("/"):e}function sf({observation:e}){let[t,n]=(0,L.useState)(!1),[r,l]=(0,L.useState)(!1),o=Cn(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(uf):[],c=e.files_modified?JSON.parse(e.files_modified).map(uf):[],p=i.length>0||u.length>0||s.length>0||c.length>0;return L.default.createElement("div",{className:"card"},L.default.createElement("div",{className:"card-header"},L.default.createElement("div",{className:"card-header-left"},L.default.createElement("span",{className:`card-type type-${e.type}`},e.type),L.default.createElement("span",{className:"card-project"},e.project)),L.default.createElement("div",{className:"view-mode-toggles"},p&&L.default.createElement("button",{className:`view-mode-toggle ${t?"active":""}`,onClick:()=>{n(!t),t||l(!1)}},L.default.createElement("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},L.default.createElement("polyline",{points:"9 11 12 14 22 4"}),L.default.createElement("path",{d:"M21 12v7a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h11"})),L.default.createElement("span",null,"facts")),e.narrative&&L.default.createElement("button",{className:`view-mode-toggle ${r?"active":""}`,onClick:()=>{l(!r),r||n(!1)}},L.default.createElement("svg",{width:"12",height:"12",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},L.default.createElement("path",{d:"M14 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V8z"}),L.default.createElement("polyline",{points:"14 2 14 8 20 8"}),L.default.createElement("line",{x1:"16",y1:"13",x2:"8",y2:"13"}),L.default.createElement("line",{x1:"16",y1:"17",x2:"8",y2:"17"})),L.default.createElement("span",null,"narrative")))),L.default.createElement("div",{className:"card-title"},e.title||"Untitled"),L.default.createElement("div",{className:"view-mode-content"},!t&&!r&&e.subtitle&&L.default.createElement("div",{className:"card-subtitle"},e.subtitle),t&&i.length>0&&L.default.createElement("ul",{className:"facts-list"},i.map((m,v)=>L.default.createElement("li",{key:v},m))),r&&e.narrative&&L.default.createElement("div",{className:"narrative"},e.narrative)),L.default.createElement("div",{className:"card-meta"},L.default.createElement("span",{className:"meta-date"},"#",e.id," \u2022 ",o),t&&(u.length>0||s.length>0||c.length>0)&&L.default.createElement("div",{style:{display:"flex",flexWrap:"wrap",gap:"8px",alignItems:"center"}},u.map((m,v)=>L.default.createElement("span",{key:v,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&&L.default.createElement("span",{className:"meta-files"},L.default.createElement("span",{className:"file-label"},"read:")," ",s.join(", ")),c.length>0&&L.default.createElement("span",{className:"meta-files"},L.default.createElement("span",{className:"file-label"},"modified:")," ",c.join(", ")))))}var le=ee(Z(),1);function af({summary:e}){let t=Cn(e.created_at_epoch),n=[{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(r=>r.content);return le.default.createElement("article",{className:"card summary-card"},le.default.createElement("header",{className:"summary-card-header"},le.default.createElement("div",{className:"summary-badge-row"},le.default.createElement("span",{className:"card-type summary-badge"},"Session Summary"),le.default.createElement("span",{className:"summary-project-badge"},e.project)),e.request&&le.default.createElement("h2",{className:"summary-title"},e.request)),le.default.createElement("div",{className:"summary-sections"},n.map((r,l)=>le.default.createElement("section",{key:r.key,className:"summary-section",style:{animationDelay:`${l*50}ms`}},le.default.createElement("div",{className:"summary-section-header"},le.default.createElement("img",{src:r.icon,alt:r.label,className:`summary-section-icon summary-section-icon--${r.key}`}),le.default.createElement("h3",{className:"summary-section-label"},r.label)),le.default.createElement("div",{className:"summary-section-content"},r.content)))),le.default.createElement("footer",{className:"summary-card-footer"},le.default.createElement("span",{className:"summary-meta-id"},"Session #",e.id),le.default.createElement("span",{className:"summary-meta-divider"},"\u2022"),le.default.createElement("time",{className:"summary-meta-date",dateTime:new Date(e.created_at_epoch).toISOString()},t)))}var it=ee(Z(),1);function cf({prompt:e}){let t=Cn(e.created_at_epoch);return it.default.createElement("div",{className:"card prompt-card"},it.default.createElement("div",{className:"card-header"},it.default.createElement("div",{className:"card-header-left"},it.default.createElement("span",{className:"card-type"},"Prompt"),it.default.createElement("span",{className:"card-project"},e.project))),it.default.createElement("div",{className:"card-content"},e.prompt_text),it.default.createElement("div",{className:"card-meta"},it.default.createElement("span",{className:"meta-date"},"#",e.id," \u2022 ",t)))}var Lt=ee(Z(),1);function ff({targetRef:e}){let[t,n]=(0,Lt.useState)(!1);(0,Lt.useEffect)(()=>{let l=()=>{let i=e.current;i&&n(i.scrollTop>300)},o=e.current;if(o)return o.addEventListener("scroll",l),()=>o.removeEventListener("scroll",l)},[]);let r=()=>{let l=e.current;l&&l.scrollTo({top:0,behavior:"smooth"})};return t?Lt.default.createElement("button",{onClick:r,className:"scroll-to-top","aria-label":"Scroll to top"},Lt.default.createElement("svg",{width:"20",height:"20",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},Lt.default.createElement("polyline",{points:"18 15 12 9 6 15"}))):null}var Er={PAGINATION_PAGE_SIZE:50,LOAD_MORE_THRESHOLD:.1};function df({observations:e,summaries:t,prompts:n,onLoadMore:r,isLoading:l,hasMore:o}){let i=(0,Q.useRef)(null),u=(0,Q.useRef)(null),s=(0,Q.useRef)(r);(0,Q.useEffect)(()=>{s.current=r},[r]),(0,Q.useEffect)(()=>{let p=i.current;if(!p)return;let m=new IntersectionObserver(v=>{v[0].isIntersecting&&o&&!l&&s.current?.()},{threshold:Er.LOAD_MORE_THRESHOLD});return m.observe(p),()=>{p&&m.unobserve(p),m.disconnect()}},[o,l]);let c=(0,Q.useMemo)(()=>[...e.map(m=>({...m,itemType:"observation"})),...t.map(m=>({...m,itemType:"summary"})),...n.map(m=>({...m,itemType:"prompt"}))].sort((m,v)=>v.created_at_epoch-m.created_at_epoch),[e,t,n]);return Q.default.createElement("div",{className:"feed",ref:u},Q.default.createElement(ff,{targetRef:u}),Q.default.createElement("div",{className:"feed-content"},c.map(p=>{let m=`${p.itemType}-${p.id}`;return p.itemType==="observation"?Q.default.createElement(sf,{key:m,observation:p}):p.itemType==="summary"?Q.default.createElement(af,{key:m,summary:p}):Q.default.createElement(cf,{key:m,prompt:p})}),c.length===0&&!l&&Q.default.createElement("div",{style:{textAlign:"center",padding:"40px",color:"#8b949e"}},"No items to display"),l&&Q.default.createElement("div",{style:{textAlign:"center",padding:"20px",color:"#8b949e"}},Q.default.createElement("div",{className:"spinner",style:{display:"inline-block",marginRight:"10px"}}),"Loading more..."),o&&!l&&c.length>0&&Q.default.createElement("div",{ref:i,style:{height:"20px",margin:"10px 0"}}),!o&&c.length>0&&Q.default.createElement("div",{style:{textAlign:"center",padding:"20px",color:"#8b949e",fontSize:"14px"}},"No more items to load")))}var S=ee(Z(),1);var De={CLAUDE_MEM_MODEL:"claude-haiku-4-5",CLAUDE_MEM_CONTEXT_OBSERVATIONS:"50",CLAUDE_MEM_WORKER_PORT:"37777"};function pf({isOpen:e,settings:t,stats:n,isSaving:r,saveStatus:l,isConnected:o,onSave:i,onClose:u,onRefreshStats:s}){let[c,p]=(0,S.useState)(t.CLAUDE_MEM_MODEL||De.CLAUDE_MEM_MODEL),[m,v]=(0,S.useState)(t.CLAUDE_MEM_CONTEXT_OBSERVATIONS||De.CLAUDE_MEM_CONTEXT_OBSERVATIONS),[y,w]=(0,S.useState)(t.CLAUDE_MEM_WORKER_PORT||De.CLAUDE_MEM_WORKER_PORT),[k,O]=(0,S.useState)(!0),[d,a]=(0,S.useState)(!1),[f,h]=(0,S.useState)("");(0,S.useEffect)(()=>{p(t.CLAUDE_MEM_MODEL||De.CLAUDE_MEM_MODEL),v(t.CLAUDE_MEM_CONTEXT_OBSERVATIONS||De.CLAUDE_MEM_CONTEXT_OBSERVATIONS),w(t.CLAUDE_MEM_WORKER_PORT||De.CLAUDE_MEM_WORKER_PORT)},[t]),(0,S.useEffect)(()=>{fetch("/api/mcp/status").then(E=>E.json()).then(E=>O(E.enabled)).catch(E=>console.error("Failed to load MCP status:",E))},[]),(0,S.useEffect)(()=>{e&&s()},[e,s]);let _=()=>{i({CLAUDE_MEM_MODEL:c,CLAUDE_MEM_CONTEXT_OBSERVATIONS:m,CLAUDE_MEM_WORKER_PORT:y})},C=async E=>{a(!0),h("Toggling...");try{let F=await(await fetch("/api/mcp/toggle",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({enabled:E})})).json();F.success?(O(F.enabled),h("\u2713 Updated (restart Claude Code to apply)"),setTimeout(()=>h(""),3e3)):(h(`\u2717 Error: ${F.error}`),setTimeout(()=>h(""),3e3))}catch(N){h(`\u2717 Error: ${N instanceof Error?N.message:"Unknown error"}`),setTimeout(()=>h(""),3e3)}finally{a(!1)}};return S.default.createElement("div",{className:`sidebar ${e?"open":""}`},S.default.createElement("div",{className:"sidebar-header"},S.default.createElement("h1",null,"Settings"),S.default.createElement("div",{style:{display:"flex",gap:"8px",alignItems:"center"}},S.default.createElement("div",{style:{display:"flex",alignItems:"center",gap:"6px"}},S.default.createElement("span",{className:`status-dot ${o?"connected":""}`}),S.default.createElement("span",{style:{fontSize:"11px",opacity:.5,fontWeight:300}},o?"Connected":"Disconnected")),S.default.createElement("button",{onClick:_,disabled:r},r?"Saving...":"Save"),S.default.createElement("button",{onClick:u,title:"Close settings",style:{background:"transparent",border:"1px solid #404040",padding:"8px",width:"36px",height:"36px",display:"flex",alignItems:"center",justifyContent:"center"}},S.default.createElement("svg",{width:"16",height:"16",viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:"2",strokeLinecap:"round",strokeLinejoin:"round"},S.default.createElement("line",{x1:"18",y1:"6",x2:"6",y2:"18"}),S.default.createElement("line",{x1:"6",y1:"6",x2:"18",y2:"18"}))))),S.default.createElement("div",{className:"stats-scroll"},S.default.createElement("div",{className:"settings-section"},S.default.createElement("h3",null,"Environment Variables"),S.default.createElement("div",{className:"form-group"},S.default.createElement("label",{htmlFor:"model"},"CLAUDE_MEM_MODEL"),S.default.createElement("div",{className:"setting-description"},"Model used for AI compression of tool observations. Haiku is fast and cheap, Sonnet offers better quality, Opus is most capable but expensive."),S.default.createElement("select",{id:"model",value:c,onChange:E=>p(E.target.value)},S.default.createElement("option",{value:"claude-haiku-4-5"},"claude-haiku-4-5"),S.default.createElement("option",{value:"claude-sonnet-4-5"},"claude-sonnet-4-5"),S.default.createElement("option",{value:"claude-opus-4"},"claude-opus-4"))),S.default.createElement("div",{className:"form-group"},S.default.createElement("label",{htmlFor:"contextObs"},"CLAUDE_MEM_CONTEXT_OBSERVATIONS"),S.default.createElement("div",{className:"setting-description"},"Number of recent observations to inject at session start. Higher values provide more context but increase token usage. Default: 50"),S.default.createElement("input",{type:"number",id:"contextObs",min:"1",max:"200",value:m,onChange:E=>v(E.target.value)})),S.default.createElement("div",{className:"form-group"},S.default.createElement("label",{htmlFor:"workerPort"},"CLAUDE_MEM_WORKER_PORT"),S.default.createElement("div",{className:"setting-description"},"Port number for the background worker service. Change only if port 37777 conflicts with another service."),S.default.createElement("input",{type:"number",id:"workerPort",min:"1024",max:"65535",value:y,onChange:E=>w(E.target.value)})),l&&S.default.createElement("div",{className:"save-status"},l)),S.default.createElement("div",{className:"settings-section"},S.default.createElement("h3",null,"MCP Search Server"),S.default.createElement("div",{className:"form-group"},S.default.createElement("label",{htmlFor:"mcpEnabled",style:{display:"flex",alignItems:"center",gap:"8px",cursor:"pointer"}},S.default.createElement("input",{type:"checkbox",id:"mcpEnabled",checked:k,onChange:E=>C(E.target.checked),disabled:d,style:{cursor:d?"not-allowed":"pointer"}}),"Enable MCP Search Server"),S.default.createElement("div",{className:"setting-description"},"claude-mem suggests using skill-based search (saves ~2,500 tokens at session start), but some users prefer MCP. Disable to only use skill-based search. Requires Claude Code restart to apply changes."),f&&S.default.createElement("div",{className:"save-status"},f))),S.default.createElement("div",{className:"settings-section"},S.default.createElement("h3",null,"Worker Stats"),S.default.createElement("div",{className:"stats-grid"},S.default.createElement("div",{className:"stat"},S.default.createElement("div",{className:"stat-label"},"Version"),S.default.createElement("div",{className:"stat-value"},n.worker?.version||"-")),S.default.createElement("div",{className:"stat"},S.default.createElement("div",{className:"stat-label"},"Uptime"),S.default.createElement("div",{className:"stat-value"},lf(n.worker?.uptime))),S.default.createElement("div",{className:"stat"},S.default.createElement("div",{className:"stat-label"},"Active Sessions"),S.default.createElement("div",{className:"stat-value"},n.worker?.activeSessions||"0")),S.default.createElement("div",{className:"stat"},S.default.createElement("div",{className:"stat-label"},"SSE Clients"),S.default.createElement("div",{className:"stat-value"},n.worker?.sseClients||"0")))),S.default.createElement("div",{className:"settings-section"},S.default.createElement("h3",null,"Database Stats"),S.default.createElement("div",{className:"stats-grid"},S.default.createElement("div",{className:"stat"},S.default.createElement("div",{className:"stat-label"},"DB Size"),S.default.createElement("div",{className:"stat-value"},of(n.database?.size))),S.default.createElement("div",{className:"stat"},S.default.createElement("div",{className:"stat-label"},"Observations"),S.default.createElement("div",{className:"stat-value"},n.database?.observations||"0")),S.default.createElement("div",{className:"stat"},S.default.createElement("div",{className:"stat-label"},"Sessions"),S.default.createElement("div",{className:"stat-value"},n.database?.sessions||"0")),S.default.createElement("div",{className:"stat"},S.default.createElement("div",{className:"stat-label"},"Summaries"),S.default.createElement("div",{className:"stat-value"},n.database?.summaries||"0"))))))}var Ce=ee(Z(),1);var We={OBSERVATIONS:"/api/observations",SUMMARIES:"/api/summaries",PROMPTS:"/api/prompts",SETTINGS:"/api/settings",STATS:"/api/stats",PROCESSING_STATUS:"/api/processing-status",STREAM:"/stream"};var Ql={SSE_RECONNECT_DELAY_MS:3e3,STATS_REFRESH_INTERVAL_MS:1e4,SAVE_STATUS_DISPLAY_DURATION_MS:3e3};function mf(){let[e,t]=(0,Ce.useState)([]),[n,r]=(0,Ce.useState)([]),[l,o]=(0,Ce.useState)([]),[i,u]=(0,Ce.useState)([]),[s,c]=(0,Ce.useState)(!1),[p,m]=(0,Ce.useState)(!1),[v,y]=(0,Ce.useState)(0),w=(0,Ce.useRef)(null),k=(0,Ce.useRef)();return(0,Ce.useEffect)(()=>{let O=()=>{w.current&&w.current.close();let d=new EventSource(We.STREAM);w.current=d,d.onopen=()=>{console.log("[SSE] Connected"),c(!0),k.current&&clearTimeout(k.current)},d.onerror=a=>{console.error("[SSE] Connection error:",a),c(!1),d.close(),k.current=setTimeout(()=>{k.current=void 0,console.log("[SSE] Attempting to reconnect..."),O()},Ql.SSE_RECONNECT_DELAY_MS)},d.onmessage=a=>{try{let f=JSON.parse(a.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(h=>[f.observation,...h]));break;case"new_summary":if(f.summary){let h=f.summary;console.log("[SSE] New summary:",h.id),r(_=>[h,..._])}break;case"new_prompt":if(f.prompt){let h=f.prompt;console.log("[SSE] New prompt:",h.id),o(_=>[h,..._])}break;case"processing_status":typeof f.isProcessing=="boolean"&&(console.log("[SSE] Processing status:",f.isProcessing,"Queue depth:",f.queueDepth),m(f.isProcessing),y(f.queueDepth||0));break}}catch(f){console.error("[SSE] Failed to parse message:",f)}}};return O(),()=>{w.current&&w.current.close(),k.current&&clearTimeout(k.current)}},[]),{observations:e,summaries:n,prompts:l,projects:i,isProcessing:p,queueDepth:v,isConnected:s}}var Nn=ee(Z(),1);function vf(){let[e,t]=(0,Nn.useState)(De),[n,r]=(0,Nn.useState)(!1),[l,o]=(0,Nn.useState)("");return(0,Nn.useEffect)(()=>{fetch(We.SETTINGS).then(u=>u.json()).then(u=>{t({CLAUDE_MEM_MODEL:u.CLAUDE_MEM_MODEL||De.CLAUDE_MEM_MODEL,CLAUDE_MEM_CONTEXT_OBSERVATIONS:u.CLAUDE_MEM_CONTEXT_OBSERVATIONS||De.CLAUDE_MEM_CONTEXT_OBSERVATIONS,CLAUDE_MEM_WORKER_PORT:u.CLAUDE_MEM_WORKER_PORT||De.CLAUDE_MEM_WORKER_PORT})}).catch(u=>{console.error("Failed to load settings:",u)})},[]),{settings:e,saveSettings:async u=>{r(!0),o("Saving...");try{let c=await(await fetch(We.SETTINGS,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(u)})).json();c.success?(t(u),o("\u2713 Saved"),setTimeout(()=>o(""),Ql.SAVE_STATUS_DISPLAY_DURATION_MS)):o(`\u2717 Error: ${c.error}`)}catch(s){o(`\u2717 Error: ${s instanceof Error?s.message:"Unknown error"}`)}finally{r(!1)}},isSaving:n,saveStatus:l}}var Tn=ee(Z(),1);function hf(){let[e,t]=(0,Tn.useState)({}),n=(0,Tn.useCallback)(async()=>{try{let l=await(await fetch(We.STATS)).json();t(l)}catch(r){console.error("Failed to load stats:",r)}},[]);return(0,Tn.useEffect)(()=>{n()},[n]),{stats:e,refreshStats:n}}var Mt=ee(Z(),1);function vu(e,t,n){let[r,l]=(0,Mt.useState)({isLoading:!1,hasMore:!0}),o=(0,Mt.useRef)(0),i=(0,Mt.useRef)(n),u=(0,Mt.useRef)(r),s=(0,Mt.useCallback)(async()=>{let c=i.current!==n;if(c){o.current=0,i.current=n;let p={isLoading:!1,hasMore:!0};l(p),u.current=p}if(!c&&(u.current.isLoading||!u.current.hasMore))return[];l(p=>({...p,isLoading:!0}));try{let p=new URLSearchParams({offset:o.current.toString(),limit:Er.PAGINATION_PAGE_SIZE.toString()});n&&p.append("project",n);let m=await fetch(`${e}?${p}`);if(!m.ok)throw new Error(`Failed to load ${t}: ${m.statusText}`);let v=await m.json();return l(y=>({...y,isLoading:!1,hasMore:v.hasMore})),o.current+=Er.PAGINATION_PAGE_SIZE,v.items}catch(p){return console.error(`Failed to load ${t}:`,p),l(m=>({...m,isLoading:!1})),[]}},[n,e,t]);return{...r,loadMore:s}}function gf(e){let t=vu(We.OBSERVATIONS,"observations",e),n=vu(We.SUMMARIES,"summaries",e),r=vu(We.PROMPTS,"prompts",e);return{observations:t,summaries:n,prompts:r}}var Pn=ee(Z(),1),wf="claude-mem-theme";function Yp(){return typeof window>"u"||window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light"}function yf(){try{let e=localStorage.getItem(wf);if(e==="system"||e==="light"||e==="dark")return e}catch(e){console.warn("Failed to read theme preference from localStorage:",e)}return"system"}function Sf(e){return e==="system"?Yp():e}function kf(){let[e,t]=(0,Pn.useState)(yf),[n,r]=(0,Pn.useState)(()=>Sf(yf()));return(0,Pn.useEffect)(()=>{let o=Sf(e);r(o),document.documentElement.setAttribute("data-theme",o)},[e]),(0,Pn.useEffect)(()=>{if(e!=="system")return;let o=window.matchMedia("(prefers-color-scheme: dark)"),i=u=>{let s=u.matches?"dark":"light";r(s),document.documentElement.setAttribute("data-theme",s)};return o.addEventListener("change",i),()=>o.removeEventListener("change",i)},[e]),{preference:e,resolvedTheme:n,setThemePreference:o=>{try{localStorage.setItem(wf,o),t(o)}catch(i){console.warn("Failed to save theme preference to localStorage:",i),t(o)}}}}function Kl(e,t){let n=new Set;return[...e,...t].filter(r=>n.has(r.id)?!1:(n.add(r.id),!0))}function Ef(){let[e,t]=(0,K.useState)(""),[n,r]=(0,K.useState)(!1),[l,o]=(0,K.useState)([]),[i,u]=(0,K.useState)([]),[s,c]=(0,K.useState)([]),{observations:p,summaries:m,prompts:v,projects:y,isProcessing:w,queueDepth:k,isConnected:O}=mf(),{settings:d,saveSettings:a,isSaving:f,saveStatus:h}=vf(),{stats:_,refreshStats:C}=hf(),{preference:E,resolvedTheme:N,setThemePreference:F}=kf(),T=gf(e),$e=(0,K.useMemo)(()=>e?l:Kl(p,l),[p,l,e]),Xl=(0,K.useMemo)(()=>e?i:Kl(m,i),[m,i,e]),Cf=(0,K.useMemo)(()=>e?s:Kl(v,s),[v,s,e]),gu=(0,K.useCallback)(()=>{r(Gt=>!Gt)},[]),yu=(0,K.useCallback)(async()=>{try{let[Gt,Su,wu]=await Promise.all([T.observations.loadMore(),T.summaries.loadMore(),T.prompts.loadMore()]);Gt.length>0&&o(Ln=>[...Ln,...Gt]),Su.length>0&&u(Ln=>[...Ln,...Su]),wu.length>0&&c(Ln=>[...Ln,...wu])}catch(Gt){console.error("Failed to load more data:",Gt)}},[e,T.observations,T.summaries,T.prompts]);return(0,K.useEffect)(()=>{o([]),u([]),c([]),yu()},[e]),K.default.createElement("div",{className:"container"},K.default.createElement("div",{className:"main-col"},K.default.createElement(rf,{isConnected:O,projects:y,currentFilter:e,onFilterChange:t,onSettingsToggle:gu,sidebarOpen:n,isProcessing:w,queueDepth:k,themePreference:E,onThemeChange:F}),K.default.createElement(df,{observations:$e,summaries:Xl,prompts:Cf,onLoadMore:yu,isLoading:T.observations.isLoading||T.summaries.isLoading||T.prompts.isLoading,hasMore:T.observations.hasMore||T.summaries.hasMore||T.prompts.hasMore})),K.default.createElement(pf,{isOpen:n,settings:d,stats:_,isSaving:f,saveStatus:h,isConnected:O,onSave:a,onClose:gu,onRefreshStats:C}))}var ut=ee(Z(),1),Gl=class extends ut.Component{constructor(t){super(t),this.state={hasError:!1,error:null,errorInfo:null}}static getDerivedStateFromError(t){return{hasError:!0,error:t}}componentDidCatch(t,n){console.error("[ErrorBoundary] Caught error:",t,n),this.setState({error:t,errorInfo:n})}render(){return this.state.hasError?ut.default.createElement("div",{style:{padding:"20px",color:"#ff6b6b",backgroundColor:"#1a1a1a",minHeight:"100vh"}},ut.default.createElement("h1",{style:{fontSize:"24px",marginBottom:"10px"}},"Something went wrong"),ut.default.createElement("p",{style:{marginBottom:"10px",color:"#8b949e"}},"The application encountered an error. Please refresh the page to try again."),this.state.error&&ut.default.createElement("details",{style:{marginTop:"20px",color:"#8b949e"}},ut.default.createElement("summary",{style:{cursor:"pointer",marginBottom:"10px"}},"Error details"),ut.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 xf=document.getElementById("root");if(!xf)throw new Error("Root element not found");var Yp=(0,_f.createRoot)(xf);Yp.render(hu.default.createElement(Gl,null,hu.default.createElement(Ef,null)));})(); +`+this.state.errorInfo.componentStack))):this.props.children}};var xf=document.getElementById("root");if(!xf)throw new Error("Root element not found");var Zp=(0,_f.createRoot)(xf);Zp.render(hu.default.createElement(Gl,null,hu.default.createElement(Ef,null)));})(); /*! Bundled license information: react/cjs/react.production.min.js: diff --git a/plugin/ui/viewer.html b/plugin/ui/viewer.html index a17299a1..3028591a 100644 --- a/plugin/ui/viewer.html +++ b/plugin/ui/viewer.html @@ -376,6 +376,36 @@ animation: spin 1.5s linear infinite; } + .queue-bubble { + position: absolute; + top: -8px; + right: -8px; + background: var(--color-accent-primary); + color: var(--color-text-button); + font-size: 10px; + font-weight: 600; + font-family: 'Monaspace Radon', monospace; + min-width: 18px; + height: 18px; + border-radius: 9px; + display: flex; + align-items: center; + justify-content: center; + padding: 0 5px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + animation: pulse 2s ease-in-out infinite; + z-index: 10; + } + + @keyframes pulse { + 0%, 100% { + transform: scale(1); + } + 50% { + transform: scale(1.1); + } + } + .logo-text { font-family: 'Monaspace Radon', monospace; font-weight: 100; diff --git a/src/services/worker-service.ts b/src/services/worker-service.ts index 5cb25505..755a4e37 100644 --- a/src/services/worker-service.ts +++ b/src/services/worker-service.ts @@ -322,9 +322,11 @@ export class WorkerService { // Send initial processing status (based on queue depth + active generators) const isProcessing = this.sessionManager.isAnySessionProcessing(); + const queueDepth = this.sessionManager.getTotalActiveWork(); // Includes queued + actively processing this.sseBroadcaster.broadcast({ type: 'processing_status', - isProcessing + isProcessing, + queueDepth }); } @@ -806,11 +808,12 @@ export class WorkerService { } /** - * Get processing status (for viewer UI spinner) + * Get processing status (for viewer UI spinner and queue indicator) */ private handleGetProcessingStatus(req: Request, res: Response): void { const isProcessing = this.sessionManager.isAnySessionProcessing(); - res.json({ isProcessing }); + const queueDepth = this.sessionManager.getTotalActiveWork(); // Includes queued + actively processing + res.json({ isProcessing, queueDepth }); } // ============================================================================ @@ -823,7 +826,7 @@ export class WorkerService { */ broadcastProcessingStatus(): void { const isProcessing = this.sessionManager.isAnySessionProcessing(); - const queueDepth = this.sessionManager.getTotalQueueDepth(); + const queueDepth = this.sessionManager.getTotalActiveWork(); // Includes queued + actively processing const activeSessions = this.sessionManager.getActiveSessionCount(); logger.info('WORKER', 'Broadcasting processing status', { @@ -834,7 +837,8 @@ export class WorkerService { this.sseBroadcaster.broadcast({ type: 'processing_status', - isProcessing + isProcessing, + queueDepth }); } diff --git a/src/services/worker/SessionManager.ts b/src/services/worker/SessionManager.ts index 6bfe4dff..81e766f8 100644 --- a/src/services/worker/SessionManager.ts +++ b/src/services/worker/SessionManager.ts @@ -256,6 +256,23 @@ export class SessionManager { return total; } + /** + * Get total active work (queued + currently processing) + * Counts both pending messages and items actively being processed by SDK agents + */ + getTotalActiveWork(): number { + let total = 0; + for (const session of this.sessions.values()) { + // Count queued messages + total += session.pendingMessages.length; + // Count currently processing item (1 per active generator) + if (session.generatorPromise !== null) { + total += 1; + } + } + return total; + } + /** * Check if any session is actively processing (has pending messages OR active generator) * Used for activity indicator to prevent spinner from stopping while SDK is processing diff --git a/src/ui/viewer-template.html b/src/ui/viewer-template.html index a17299a1..3028591a 100644 --- a/src/ui/viewer-template.html +++ b/src/ui/viewer-template.html @@ -376,6 +376,36 @@ animation: spin 1.5s linear infinite; } + .queue-bubble { + position: absolute; + top: -8px; + right: -8px; + background: var(--color-accent-primary); + color: var(--color-text-button); + font-size: 10px; + font-weight: 600; + font-family: 'Monaspace Radon', monospace; + min-width: 18px; + height: 18px; + border-radius: 9px; + display: flex; + align-items: center; + justify-content: center; + padding: 0 5px; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); + animation: pulse 2s ease-in-out infinite; + z-index: 10; + } + + @keyframes pulse { + 0%, 100% { + transform: scale(1); + } + 50% { + transform: scale(1.1); + } + } + .logo-text { font-family: 'Monaspace Radon', monospace; font-weight: 100; diff --git a/src/ui/viewer/App.tsx b/src/ui/viewer/App.tsx index 8784c74b..49418efa 100644 --- a/src/ui/viewer/App.tsx +++ b/src/ui/viewer/App.tsx @@ -17,7 +17,7 @@ export function App() { const [paginatedSummaries, setPaginatedSummaries] = useState([]); const [paginatedPrompts, setPaginatedPrompts] = useState([]); - const { observations, summaries, prompts, projects, isProcessing, isConnected } = useSSE(); + const { observations, summaries, prompts, projects, isProcessing, queueDepth, isConnected } = useSSE(); const { settings, saveSettings, isSaving, saveStatus } = useSettings(); const { stats, refreshStats } = useStats(); const { preference, resolvedTheme, setThemePreference } = useTheme(); @@ -96,6 +96,7 @@ export function App() { onSettingsToggle={toggleSidebar} sidebarOpen={sidebarOpen} isProcessing={isProcessing} + queueDepth={queueDepth} themePreference={preference} onThemeChange={setThemePreference} /> diff --git a/src/ui/viewer/components/Header.tsx b/src/ui/viewer/components/Header.tsx index 1202a114..852ab3ad 100644 --- a/src/ui/viewer/components/Header.tsx +++ b/src/ui/viewer/components/Header.tsx @@ -10,6 +10,7 @@ interface HeaderProps { onSettingsToggle: () => void; sidebarOpen: boolean; isProcessing: boolean; + queueDepth: number; themePreference: ThemePreference; onThemeChange: (theme: ThemePreference) => void; } @@ -22,13 +23,21 @@ export function Header({ onSettingsToggle, sidebarOpen, isProcessing, + queueDepth, themePreference, onThemeChange }: HeaderProps) { return (

- +
+ + {queueDepth > 0 && ( +
+ {queueDepth} +
+ )} +
claude-mem

diff --git a/src/ui/viewer/hooks/useSSE.ts b/src/ui/viewer/hooks/useSSE.ts index dee711a7..ae2d7154 100644 --- a/src/ui/viewer/hooks/useSSE.ts +++ b/src/ui/viewer/hooks/useSSE.ts @@ -10,6 +10,7 @@ export function useSSE() { const [projects, setProjects] = useState([]); const [isConnected, setIsConnected] = useState(false); const [isProcessing, setIsProcessing] = useState(false); + const [queueDepth, setQueueDepth] = useState(0); const eventSourceRef = useRef(null); const reconnectTimeoutRef = useRef(); @@ -83,8 +84,9 @@ export function useSSE() { case 'processing_status': if (typeof data.isProcessing === 'boolean') { - console.log('[SSE] Processing status:', data.isProcessing); + console.log('[SSE] Processing status:', data.isProcessing, 'Queue depth:', data.queueDepth); setIsProcessing(data.isProcessing); + setQueueDepth(data.queueDepth || 0); } break; } @@ -107,5 +109,5 @@ export function useSSE() { }; }, []); - return { observations, summaries, prompts, projects, isProcessing, isConnected }; + return { observations, summaries, prompts, projects, isProcessing, queueDepth, isConnected }; }