claude-sessions-mcp 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/{chunk-D2SPLCNE.js → chunk-HK6PMHC3.js} +5 -6
  2. package/dist/chunk-HK6PMHC3.js.map +1 -0
  3. package/dist/mcp/index.js +2 -2
  4. package/dist/mcp/index.js.map +1 -1
  5. package/dist/server.js +1 -1
  6. package/dist/web/client/_app/immutable/chunks/DUEukD6E.js +1 -0
  7. package/dist/web/client/_app/immutable/chunks/DUEukD6E.js.br +0 -0
  8. package/dist/web/client/_app/immutable/chunks/DUEukD6E.js.gz +0 -0
  9. package/dist/web/client/_app/immutable/entry/{app.CQAI9q_h.js → app.BnwskVL-.js} +2 -2
  10. package/dist/web/client/_app/immutable/entry/app.BnwskVL-.js.br +0 -0
  11. package/dist/web/client/_app/immutable/entry/app.BnwskVL-.js.gz +0 -0
  12. package/dist/web/client/_app/immutable/entry/start.CQ__ZoJ7.js +1 -0
  13. package/dist/web/client/_app/immutable/entry/start.CQ__ZoJ7.js.br +0 -0
  14. package/dist/web/client/_app/immutable/entry/start.CQ__ZoJ7.js.gz +0 -0
  15. package/dist/web/client/_app/immutable/nodes/{1.DVVhj1K8.js → 1.CoCWmd0q.js} +1 -1
  16. package/dist/web/client/_app/immutable/nodes/1.CoCWmd0q.js.br +0 -0
  17. package/dist/web/client/_app/immutable/nodes/1.CoCWmd0q.js.gz +0 -0
  18. package/dist/web/client/_app/version.json +1 -1
  19. package/dist/web/client/_app/version.json.br +0 -0
  20. package/dist/web/client/_app/version.json.gz +0 -0
  21. package/dist/web/server/chunks/{1-B6558drr.js → 1-BNMjiqhE.js} +2 -2
  22. package/dist/web/server/chunks/{1-B6558drr.js.map → 1-BNMjiqhE.js.map} +1 -1
  23. package/dist/web/server/index.js +1 -1
  24. package/dist/web/server/index.js.map +1 -1
  25. package/dist/web/server/manifest.js +2 -2
  26. package/dist/web/server/manifest.js.map +1 -1
  27. package/package.json +1 -1
  28. package/dist/chunk-D2SPLCNE.js.map +0 -1
  29. package/dist/web/client/_app/immutable/chunks/DUFLAPco.js +0 -1
  30. package/dist/web/client/_app/immutable/chunks/DUFLAPco.js.br +0 -0
  31. package/dist/web/client/_app/immutable/chunks/DUFLAPco.js.gz +0 -0
  32. package/dist/web/client/_app/immutable/entry/app.CQAI9q_h.js.br +0 -0
  33. package/dist/web/client/_app/immutable/entry/app.CQAI9q_h.js.gz +0 -0
  34. package/dist/web/client/_app/immutable/entry/start.lvsJ5TiJ.js +0 -1
  35. package/dist/web/client/_app/immutable/entry/start.lvsJ5TiJ.js.br +0 -2
  36. package/dist/web/client/_app/immutable/entry/start.lvsJ5TiJ.js.gz +0 -0
  37. package/dist/web/client/_app/immutable/nodes/1.DVVhj1K8.js.br +0 -0
  38. package/dist/web/client/_app/immutable/nodes/1.DVVhj1K8.js.gz +0 -0
@@ -3,10 +3,9 @@ import { spawn } from "child_process";
3
3
  import { fileURLToPath } from "url";
4
4
  import path from "path";
5
5
  var __dirname = path.dirname(fileURLToPath(import.meta.url));
6
- var webDir = path.join(__dirname, "..", "web");
7
- async function startWebServer(port = 5050, openBrowser = true) {
8
- const child = spawn("pnpm", ["preview", "--port", String(port)], {
9
- cwd: webDir,
6
+ var webServerPath = path.join(__dirname, "web", "index.js");
7
+ async function startWebServer(port = 3e3, openBrowser = true) {
8
+ const child = spawn("node", [webServerPath], {
10
9
  stdio: ["ignore", "pipe", "pipe"],
11
10
  env: { ...process.env, PORT: String(port) }
12
11
  });
@@ -14,7 +13,7 @@ async function startWebServer(port = 5050, openBrowser = true) {
14
13
  const timeout = setTimeout(() => reject(new Error("Server startup timeout")), 1e4);
15
14
  child.stdout?.on("data", (data) => {
16
15
  const output = data.toString();
17
- if (output.includes("localhost") || output.includes("Local:")) {
16
+ if (output.includes("Listening on") || output.includes("localhost") || output.includes("Local:")) {
18
17
  clearTimeout(timeout);
19
18
  resolve();
20
19
  }
@@ -45,4 +44,4 @@ export {
45
44
  startWebServer,
46
45
  stopWebServer
47
46
  };
48
- //# sourceMappingURL=chunk-D2SPLCNE.js.map
47
+ //# sourceMappingURL=chunk-HK6PMHC3.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/server.ts"],"sourcesContent":["import { spawn, type ChildProcess } from 'node:child_process'\nimport { fileURLToPath } from 'node:url'\nimport path from 'node:path'\n\nconst __dirname = path.dirname(fileURLToPath(import.meta.url))\n// dist/web/index.js is the built SvelteKit server (adapter-node)\nconst webServerPath = path.join(__dirname, 'web', 'index.js')\n\ninterface WebServer {\n process: ChildProcess\n port: number\n}\n\nexport async function startWebServer(\n port: number = 3000,\n openBrowser: boolean = true\n): Promise<WebServer> {\n // Run the built SvelteKit server directly with Node\n const child = spawn('node', [webServerPath], {\n stdio: ['ignore', 'pipe', 'pipe'],\n env: { ...process.env, PORT: String(port) },\n })\n\n // Wait for server to start\n await new Promise<void>((resolve, reject) => {\n const timeout = setTimeout(() => reject(new Error('Server startup timeout')), 10000)\n\n child.stdout?.on('data', (data: Buffer) => {\n const output = data.toString()\n // SvelteKit adapter-node outputs \"Listening on http://0.0.0.0:PORT\"\n if (output.includes('Listening on') || output.includes('localhost') || output.includes('Local:')) {\n clearTimeout(timeout)\n resolve()\n }\n })\n\n child.on('error', (err) => {\n clearTimeout(timeout)\n reject(err)\n })\n\n child.on('exit', (code) => {\n if (code !== 0) {\n clearTimeout(timeout)\n reject(new Error(`Server exited with code ${code}`))\n }\n })\n })\n\n // Open browser if requested\n if (openBrowser) {\n const url = `http://localhost:${port}`\n const openCmd =\n process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open'\n spawn(openCmd, [url], { stdio: 'ignore', detached: true }).unref()\n }\n\n return { process: child, port }\n}\n\nexport async function stopWebServer(server: WebServer): Promise<void> {\n server.process.kill('SIGTERM')\n}\n"],"mappings":";AAAA,SAAS,aAAgC;AACzC,SAAS,qBAAqB;AAC9B,OAAO,UAAU;AAEjB,IAAM,YAAY,KAAK,QAAQ,cAAc,YAAY,GAAG,CAAC;AAE7D,IAAM,gBAAgB,KAAK,KAAK,WAAW,OAAO,UAAU;AAO5D,eAAsB,eACpB,OAAe,KACf,cAAuB,MACH;AAEpB,QAAM,QAAQ,MAAM,QAAQ,CAAC,aAAa,GAAG;AAAA,IAC3C,OAAO,CAAC,UAAU,QAAQ,MAAM;AAAA,IAChC,KAAK,EAAE,GAAG,QAAQ,KAAK,MAAM,OAAO,IAAI,EAAE;AAAA,EAC5C,CAAC;AAGD,QAAM,IAAI,QAAc,CAAC,SAAS,WAAW;AAC3C,UAAM,UAAU,WAAW,MAAM,OAAO,IAAI,MAAM,wBAAwB,CAAC,GAAG,GAAK;AAEnF,UAAM,QAAQ,GAAG,QAAQ,CAAC,SAAiB;AACzC,YAAM,SAAS,KAAK,SAAS;AAE7B,UAAI,OAAO,SAAS,cAAc,KAAK,OAAO,SAAS,WAAW,KAAK,OAAO,SAAS,QAAQ,GAAG;AAChG,qBAAa,OAAO;AACpB,gBAAQ;AAAA,MACV;AAAA,IACF,CAAC;AAED,UAAM,GAAG,SAAS,CAAC,QAAQ;AACzB,mBAAa,OAAO;AACpB,aAAO,GAAG;AAAA,IACZ,CAAC;AAED,UAAM,GAAG,QAAQ,CAAC,SAAS;AACzB,UAAI,SAAS,GAAG;AACd,qBAAa,OAAO;AACpB,eAAO,IAAI,MAAM,2BAA2B,IAAI,EAAE,CAAC;AAAA,MACrD;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AAGD,MAAI,aAAa;AACf,UAAM,MAAM,oBAAoB,IAAI;AACpC,UAAM,UACJ,QAAQ,aAAa,WAAW,SAAS,QAAQ,aAAa,UAAU,UAAU;AACpF,UAAM,SAAS,CAAC,GAAG,GAAG,EAAE,OAAO,UAAU,UAAU,KAAK,CAAC,EAAE,MAAM;AAAA,EACnE;AAEA,SAAO,EAAE,SAAS,OAAO,KAAK;AAChC;AAEA,eAAsB,cAAc,QAAkC;AACpE,SAAO,QAAQ,KAAK,SAAS;AAC/B;","names":[]}
package/dist/mcp/index.js CHANGED
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  startWebServer,
4
4
  stopWebServer
5
- } from "../chunk-D2SPLCNE.js";
5
+ } from "../chunk-HK6PMHC3.js";
6
6
 
7
7
  // src/mcp/index.ts
8
8
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
@@ -279,7 +279,7 @@ server.tool(
279
279
  "start_gui",
280
280
  "Start the web GUI for session management and open it in browser",
281
281
  {
282
- port: z.number().default(5050).describe("Port to run the web server on (default: 5050)"),
282
+ port: z.number().default(3e3).describe("Port to run the web server on (default: 3000)"),
283
283
  open_browser: z.boolean().default(true).describe("Whether to open browser automatically (default: true)")
284
284
  },
285
285
  async ({ port, open_browser }) => {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/mcp/index.ts","../../src/lib/session.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'\nimport { Effect } from 'effect'\nimport { z } from 'zod'\nimport * as session from '../lib/session.js'\nimport { startWebServer, stopWebServer } from '../server.js'\n\nconst server = new McpServer({\n name: 'claude-sessions-mcp',\n version: '0.1.0',\n})\n\n// List all projects\nserver.tool('list_projects', 'List all Claude Code projects with session counts', {}, async () => {\n const result = await Effect.runPromise(session.listProjects)\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n }\n})\n\n// List sessions in a project\nserver.tool(\n 'list_sessions',\n 'List all sessions in a project',\n {\n project_name: z.string().describe(\"Project folder name (e.g., '-Users-young-works-myproject')\"),\n },\n async ({ project_name }) => {\n const result = await Effect.runPromise(session.listSessions(project_name))\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n }\n }\n)\n\n// Rename session\nserver.tool(\n 'rename_session',\n 'Rename a session by adding a title prefix to the first message',\n {\n project_name: z.string().describe('Project folder name'),\n session_id: z.string().describe('Session ID (filename without .jsonl)'),\n new_title: z.string().describe('New title to add as prefix'),\n },\n async ({ project_name, session_id, new_title }) => {\n const result = await Effect.runPromise(\n session.renameSession(project_name, session_id, new_title)\n )\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n }\n }\n)\n\n// Delete session\nserver.tool(\n 'delete_session',\n 'Delete a session (moves to .bak folder for recovery)',\n {\n project_name: z.string().describe('Project folder name'),\n session_id: z.string().describe('Session ID to delete'),\n },\n async ({ project_name, session_id }) => {\n const result = await Effect.runPromise(session.deleteSession(project_name, session_id))\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n }\n }\n)\n\n// Delete message\nserver.tool(\n 'delete_message',\n 'Delete a message from a session and repair the parentUuid chain',\n {\n project_name: z.string().describe('Project folder name'),\n session_id: z.string().describe('Session ID'),\n message_uuid: z.string().describe('UUID of the message to delete'),\n },\n async ({ project_name, session_id, message_uuid }) => {\n const result = await Effect.runPromise(\n session.deleteMessage(project_name, session_id, message_uuid)\n )\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n }\n }\n)\n\n// Preview cleanup\nserver.tool(\n 'preview_cleanup',\n 'Preview sessions that would be cleaned (empty and invalid API key sessions)',\n {\n project_name: z.string().optional().describe('Optional: filter by project name'),\n },\n async ({ project_name }) => {\n const result = await Effect.runPromise(session.previewCleanup(project_name))\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n }\n }\n)\n\n// Clear sessions\nserver.tool(\n 'clear_sessions',\n 'Delete all empty sessions and invalid API key sessions',\n {\n project_name: z.string().optional().describe('Optional: filter by project name'),\n clear_empty: z.boolean().default(true).describe('Clear empty sessions (default: true)'),\n clear_invalid: z\n .boolean()\n .default(true)\n .describe('Clear invalid API key sessions (default: true)'),\n },\n async ({ project_name, clear_empty, clear_invalid }) => {\n const result = await Effect.runPromise(\n session.clearSessions({\n projectName: project_name,\n clearEmpty: clear_empty,\n clearInvalid: clear_invalid,\n })\n )\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n }\n }\n)\n\n// Start GUI\nlet webServerInstance: Awaited<ReturnType<typeof startWebServer>> | null = null\n\nserver.tool(\n 'start_gui',\n 'Start the web GUI for session management and open it in browser',\n {\n port: z.number().default(5050).describe('Port to run the web server on (default: 5050)'),\n open_browser: z\n .boolean()\n .default(true)\n .describe('Whether to open browser automatically (default: true)'),\n },\n async ({ port, open_browser }) => {\n try {\n if (webServerInstance) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n success: true,\n message: 'Web GUI is already running',\n url: `http://localhost:${port}`,\n },\n null,\n 2\n ),\n },\n ],\n }\n }\n\n webServerInstance = await startWebServer(port, open_browser)\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n success: true,\n message: 'Web GUI started successfully',\n url: `http://localhost:${port}`,\n pid: process.pid,\n },\n null,\n 2\n ),\n },\n ],\n }\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n success: false,\n error: String(error),\n },\n null,\n 2\n ),\n },\n ],\n }\n }\n }\n)\n\n// Stop GUI\nserver.tool('stop_gui', 'Stop the web GUI server', {}, async () => {\n if (webServerInstance) {\n await stopWebServer(webServerInstance)\n webServerInstance = null\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({ success: true, message: 'Web GUI stopped successfully' }, null, 2),\n },\n ],\n }\n }\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({ success: true, message: 'Web GUI was not running' }, null, 2),\n },\n ],\n }\n})\n\n// Main entry\nasync function main() {\n const transport = new StdioServerTransport()\n await server.connect(transport)\n}\n\nmain().catch(console.error)\n","import { Effect, pipe, Array as A, Option as O } from 'effect'\nimport * as fs from 'node:fs/promises'\nimport * as path from 'node:path'\nimport * as os from 'node:os'\nimport type { Message, SessionMeta, Project } from './schema.js'\n\n// Get Claude sessions directory\nexport const getSessionsDir = (): string => path.join(os.homedir(), '.claude', 'projects')\n\n// List all project directories\nexport const listProjects = Effect.gen(function* () {\n const sessionsDir = getSessionsDir()\n\n const exists = yield* Effect.tryPromise(() =>\n fs\n .access(sessionsDir)\n .then(() => true)\n .catch(() => false)\n )\n\n if (!exists) {\n return [] as Project[]\n }\n\n const entries = yield* Effect.tryPromise(() => fs.readdir(sessionsDir, { withFileTypes: true }))\n\n const projects = yield* Effect.all(\n entries\n .filter((e) => e.isDirectory())\n .map((entry) =>\n Effect.gen(function* () {\n const projectPath = path.join(sessionsDir, entry.name)\n const files = yield* Effect.tryPromise(() => fs.readdir(projectPath))\n const sessionFiles = files.filter((f) => f.endsWith('.jsonl'))\n\n return {\n name: entry.name,\n path: projectPath,\n sessionCount: sessionFiles.length,\n } satisfies Project\n })\n ),\n { concurrency: 10 }\n )\n\n return projects\n})\n\n// List sessions in a project\nexport const listSessions = (projectName: string) =>\n Effect.gen(function* () {\n const projectPath = path.join(getSessionsDir(), projectName)\n const files = yield* Effect.tryPromise(() => fs.readdir(projectPath))\n const sessionFiles = files.filter((f) => f.endsWith('.jsonl'))\n\n const sessions = yield* Effect.all(\n sessionFiles.map((file) =>\n Effect.gen(function* () {\n const filePath = path.join(projectPath, file)\n const content = yield* Effect.tryPromise(() => fs.readFile(filePath, 'utf-8'))\n const lines = content.trim().split('\\n').filter(Boolean)\n const messages = lines.map((line) => JSON.parse(line) as Message)\n\n const sessionId = file.replace('.jsonl', '')\n const firstMessage = messages[0]\n const lastMessage = messages[messages.length - 1]\n\n // Extract title from first user message\n const title = pipe(\n messages,\n A.findFirst((m) => m.type === 'human'),\n O.map((m) => {\n const msg = m.message as { content?: string } | undefined\n const content = msg?.content ?? ''\n return content.slice(0, 50) + (content.length > 50 ? '...' : '')\n }),\n O.getOrElse(() => 'Untitled')\n )\n\n return {\n id: sessionId,\n projectName,\n title,\n messageCount: messages.length,\n createdAt: firstMessage?.timestamp,\n updatedAt: lastMessage?.timestamp,\n } satisfies SessionMeta\n })\n ),\n { concurrency: 10 }\n )\n\n return sessions\n })\n\n// Read session messages\nexport const readSession = (projectName: string, sessionId: string) =>\n Effect.gen(function* () {\n const filePath = path.join(getSessionsDir(), projectName, `${sessionId}.jsonl`)\n const content = yield* Effect.tryPromise(() => fs.readFile(filePath, 'utf-8'))\n const lines = content.trim().split('\\n').filter(Boolean)\n return lines.map((line) => JSON.parse(line) as Message)\n })\n\n// Delete a session\nexport const deleteSession = (projectName: string, sessionId: string) =>\n Effect.gen(function* () {\n const sessionsDir = getSessionsDir()\n const filePath = path.join(sessionsDir, projectName, `${sessionId}.jsonl`)\n\n // Create backup directory\n const backupDir = path.join(sessionsDir, projectName, '.bak')\n yield* Effect.tryPromise(() => fs.mkdir(backupDir, { recursive: true }))\n\n // Move to backup\n const backupPath = path.join(backupDir, `${sessionId}.jsonl`)\n yield* Effect.tryPromise(() => fs.rename(filePath, backupPath))\n\n return { success: true, backupPath }\n })\n\n// Rename session by adding title prefix\nexport const renameSession = (projectName: string, sessionId: string, newTitle: string) =>\n Effect.gen(function* () {\n const filePath = path.join(getSessionsDir(), projectName, `${sessionId}.jsonl`)\n const content = yield* Effect.tryPromise(() => fs.readFile(filePath, 'utf-8'))\n const lines = content.trim().split('\\n').filter(Boolean)\n\n if (lines.length === 0) {\n return { success: false, error: 'Empty session' }\n }\n\n const messages = lines.map((line) => JSON.parse(line) as Message)\n const firstMsg = messages[0]\n\n // Add title prefix to first message\n if (firstMsg && typeof firstMsg.message === 'object' && firstMsg.message !== null) {\n const msg = firstMsg.message as { content?: string }\n if (msg.content) {\n // Remove existing title prefix if any\n const cleanContent = msg.content.replace(/^\\[.*?\\]\\s*/, '')\n msg.content = `[${newTitle}] ${cleanContent}`\n }\n }\n\n const newContent = messages.map((m) => JSON.stringify(m)).join('\\n') + '\\n'\n yield* Effect.tryPromise(() => fs.writeFile(filePath, newContent, 'utf-8'))\n\n return { success: true }\n })\n\n// Delete a message from session\nexport const deleteMessage = (projectName: string, sessionId: string, messageUuid: string) =>\n Effect.gen(function* () {\n const filePath = path.join(getSessionsDir(), projectName, `${sessionId}.jsonl`)\n const content = yield* Effect.tryPromise(() => fs.readFile(filePath, 'utf-8'))\n const lines = content.trim().split('\\n').filter(Boolean)\n const messages = lines.map((line) => JSON.parse(line) as Message)\n\n const targetIndex = messages.findIndex((m) => m.uuid === messageUuid)\n if (targetIndex === -1) {\n return { success: false, error: 'Message not found' }\n }\n\n // Get the parent UUID of deleted message\n const deletedMsg = messages[targetIndex]\n const parentUuid = deletedMsg?.parentUuid\n\n // Update child message to point to deleted message's parent\n const nextMsg = messages[targetIndex + 1]\n if (nextMsg) {\n nextMsg.parentUuid = parentUuid\n }\n\n // Remove the message\n messages.splice(targetIndex, 1)\n\n const newContent = messages.map((m) => JSON.stringify(m)).join('\\n') + '\\n'\n yield* Effect.tryPromise(() => fs.writeFile(filePath, newContent, 'utf-8'))\n\n return { success: true }\n })\n\n// Preview cleanup - find empty and invalid sessions\nexport const previewCleanup = (projectName?: string) =>\n Effect.gen(function* () {\n const projects = yield* listProjects\n const targetProjects = projectName ? projects.filter((p) => p.name === projectName) : projects\n\n const results = yield* Effect.all(\n targetProjects.map((project) =>\n Effect.gen(function* () {\n const sessions = yield* listSessions(project.name)\n const emptySessions = sessions.filter((s) => s.messageCount === 0)\n const invalidSessions = sessions.filter(\n (s) => s.title?.includes('Invalid API key') || s.title?.includes('API key')\n )\n\n return {\n project: project.name,\n emptySessions,\n invalidSessions,\n }\n })\n ),\n { concurrency: 5 }\n )\n\n return results\n })\n\n// Clear sessions (empty and invalid)\nexport const clearSessions = (options: {\n projectName?: string\n clearEmpty?: boolean\n clearInvalid?: boolean\n}) =>\n Effect.gen(function* () {\n const { projectName, clearEmpty = true, clearInvalid = true } = options\n const cleanupPreview = yield* previewCleanup(projectName)\n\n let deletedCount = 0\n\n for (const result of cleanupPreview) {\n const toDelete = [\n ...(clearEmpty ? result.emptySessions : []),\n ...(clearInvalid ? result.invalidSessions : []),\n ]\n\n for (const session of toDelete) {\n yield* deleteSession(result.project, session.id)\n deletedCount++\n }\n }\n\n return { success: true, deletedCount }\n })\n"],"mappings":"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","names":["Effect","content","Effect"]}
1
+ {"version":3,"sources":["../../src/mcp/index.ts","../../src/lib/session.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'\nimport { Effect } from 'effect'\nimport { z } from 'zod'\nimport * as session from '../lib/session.js'\nimport { startWebServer, stopWebServer } from '../server.js'\n\nconst server = new McpServer({\n name: 'claude-sessions-mcp',\n version: '0.1.0',\n})\n\n// List all projects\nserver.tool('list_projects', 'List all Claude Code projects with session counts', {}, async () => {\n const result = await Effect.runPromise(session.listProjects)\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n }\n})\n\n// List sessions in a project\nserver.tool(\n 'list_sessions',\n 'List all sessions in a project',\n {\n project_name: z.string().describe(\"Project folder name (e.g., '-Users-young-works-myproject')\"),\n },\n async ({ project_name }) => {\n const result = await Effect.runPromise(session.listSessions(project_name))\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n }\n }\n)\n\n// Rename session\nserver.tool(\n 'rename_session',\n 'Rename a session by adding a title prefix to the first message',\n {\n project_name: z.string().describe('Project folder name'),\n session_id: z.string().describe('Session ID (filename without .jsonl)'),\n new_title: z.string().describe('New title to add as prefix'),\n },\n async ({ project_name, session_id, new_title }) => {\n const result = await Effect.runPromise(\n session.renameSession(project_name, session_id, new_title)\n )\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n }\n }\n)\n\n// Delete session\nserver.tool(\n 'delete_session',\n 'Delete a session (moves to .bak folder for recovery)',\n {\n project_name: z.string().describe('Project folder name'),\n session_id: z.string().describe('Session ID to delete'),\n },\n async ({ project_name, session_id }) => {\n const result = await Effect.runPromise(session.deleteSession(project_name, session_id))\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n }\n }\n)\n\n// Delete message\nserver.tool(\n 'delete_message',\n 'Delete a message from a session and repair the parentUuid chain',\n {\n project_name: z.string().describe('Project folder name'),\n session_id: z.string().describe('Session ID'),\n message_uuid: z.string().describe('UUID of the message to delete'),\n },\n async ({ project_name, session_id, message_uuid }) => {\n const result = await Effect.runPromise(\n session.deleteMessage(project_name, session_id, message_uuid)\n )\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n }\n }\n)\n\n// Preview cleanup\nserver.tool(\n 'preview_cleanup',\n 'Preview sessions that would be cleaned (empty and invalid API key sessions)',\n {\n project_name: z.string().optional().describe('Optional: filter by project name'),\n },\n async ({ project_name }) => {\n const result = await Effect.runPromise(session.previewCleanup(project_name))\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n }\n }\n)\n\n// Clear sessions\nserver.tool(\n 'clear_sessions',\n 'Delete all empty sessions and invalid API key sessions',\n {\n project_name: z.string().optional().describe('Optional: filter by project name'),\n clear_empty: z.boolean().default(true).describe('Clear empty sessions (default: true)'),\n clear_invalid: z\n .boolean()\n .default(true)\n .describe('Clear invalid API key sessions (default: true)'),\n },\n async ({ project_name, clear_empty, clear_invalid }) => {\n const result = await Effect.runPromise(\n session.clearSessions({\n projectName: project_name,\n clearEmpty: clear_empty,\n clearInvalid: clear_invalid,\n })\n )\n return {\n content: [{ type: 'text', text: JSON.stringify(result, null, 2) }],\n }\n }\n)\n\n// Start GUI\nlet webServerInstance: Awaited<ReturnType<typeof startWebServer>> | null = null\n\nserver.tool(\n 'start_gui',\n 'Start the web GUI for session management and open it in browser',\n {\n port: z.number().default(3000).describe('Port to run the web server on (default: 3000)'),\n open_browser: z\n .boolean()\n .default(true)\n .describe('Whether to open browser automatically (default: true)'),\n },\n async ({ port, open_browser }) => {\n try {\n if (webServerInstance) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n success: true,\n message: 'Web GUI is already running',\n url: `http://localhost:${port}`,\n },\n null,\n 2\n ),\n },\n ],\n }\n }\n\n webServerInstance = await startWebServer(port, open_browser)\n\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n success: true,\n message: 'Web GUI started successfully',\n url: `http://localhost:${port}`,\n pid: process.pid,\n },\n null,\n 2\n ),\n },\n ],\n }\n } catch (error) {\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify(\n {\n success: false,\n error: String(error),\n },\n null,\n 2\n ),\n },\n ],\n }\n }\n }\n)\n\n// Stop GUI\nserver.tool('stop_gui', 'Stop the web GUI server', {}, async () => {\n if (webServerInstance) {\n await stopWebServer(webServerInstance)\n webServerInstance = null\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({ success: true, message: 'Web GUI stopped successfully' }, null, 2),\n },\n ],\n }\n }\n return {\n content: [\n {\n type: 'text',\n text: JSON.stringify({ success: true, message: 'Web GUI was not running' }, null, 2),\n },\n ],\n }\n})\n\n// Main entry\nasync function main() {\n const transport = new StdioServerTransport()\n await server.connect(transport)\n}\n\nmain().catch(console.error)\n","import { Effect, pipe, Array as A, Option as O } from 'effect'\nimport * as fs from 'node:fs/promises'\nimport * as path from 'node:path'\nimport * as os from 'node:os'\nimport type { Message, SessionMeta, Project } from './schema.js'\n\n// Get Claude sessions directory\nexport const getSessionsDir = (): string => path.join(os.homedir(), '.claude', 'projects')\n\n// List all project directories\nexport const listProjects = Effect.gen(function* () {\n const sessionsDir = getSessionsDir()\n\n const exists = yield* Effect.tryPromise(() =>\n fs\n .access(sessionsDir)\n .then(() => true)\n .catch(() => false)\n )\n\n if (!exists) {\n return [] as Project[]\n }\n\n const entries = yield* Effect.tryPromise(() => fs.readdir(sessionsDir, { withFileTypes: true }))\n\n const projects = yield* Effect.all(\n entries\n .filter((e) => e.isDirectory())\n .map((entry) =>\n Effect.gen(function* () {\n const projectPath = path.join(sessionsDir, entry.name)\n const files = yield* Effect.tryPromise(() => fs.readdir(projectPath))\n const sessionFiles = files.filter((f) => f.endsWith('.jsonl'))\n\n return {\n name: entry.name,\n path: projectPath,\n sessionCount: sessionFiles.length,\n } satisfies Project\n })\n ),\n { concurrency: 10 }\n )\n\n return projects\n})\n\n// List sessions in a project\nexport const listSessions = (projectName: string) =>\n Effect.gen(function* () {\n const projectPath = path.join(getSessionsDir(), projectName)\n const files = yield* Effect.tryPromise(() => fs.readdir(projectPath))\n const sessionFiles = files.filter((f) => f.endsWith('.jsonl'))\n\n const sessions = yield* Effect.all(\n sessionFiles.map((file) =>\n Effect.gen(function* () {\n const filePath = path.join(projectPath, file)\n const content = yield* Effect.tryPromise(() => fs.readFile(filePath, 'utf-8'))\n const lines = content.trim().split('\\n').filter(Boolean)\n const messages = lines.map((line) => JSON.parse(line) as Message)\n\n const sessionId = file.replace('.jsonl', '')\n const firstMessage = messages[0]\n const lastMessage = messages[messages.length - 1]\n\n // Extract title from first user message\n const title = pipe(\n messages,\n A.findFirst((m) => m.type === 'human'),\n O.map((m) => {\n const msg = m.message as { content?: string } | undefined\n const content = msg?.content ?? ''\n return content.slice(0, 50) + (content.length > 50 ? '...' : '')\n }),\n O.getOrElse(() => 'Untitled')\n )\n\n return {\n id: sessionId,\n projectName,\n title,\n messageCount: messages.length,\n createdAt: firstMessage?.timestamp,\n updatedAt: lastMessage?.timestamp,\n } satisfies SessionMeta\n })\n ),\n { concurrency: 10 }\n )\n\n return sessions\n })\n\n// Read session messages\nexport const readSession = (projectName: string, sessionId: string) =>\n Effect.gen(function* () {\n const filePath = path.join(getSessionsDir(), projectName, `${sessionId}.jsonl`)\n const content = yield* Effect.tryPromise(() => fs.readFile(filePath, 'utf-8'))\n const lines = content.trim().split('\\n').filter(Boolean)\n return lines.map((line) => JSON.parse(line) as Message)\n })\n\n// Delete a session\nexport const deleteSession = (projectName: string, sessionId: string) =>\n Effect.gen(function* () {\n const sessionsDir = getSessionsDir()\n const filePath = path.join(sessionsDir, projectName, `${sessionId}.jsonl`)\n\n // Create backup directory\n const backupDir = path.join(sessionsDir, projectName, '.bak')\n yield* Effect.tryPromise(() => fs.mkdir(backupDir, { recursive: true }))\n\n // Move to backup\n const backupPath = path.join(backupDir, `${sessionId}.jsonl`)\n yield* Effect.tryPromise(() => fs.rename(filePath, backupPath))\n\n return { success: true, backupPath }\n })\n\n// Rename session by adding title prefix\nexport const renameSession = (projectName: string, sessionId: string, newTitle: string) =>\n Effect.gen(function* () {\n const filePath = path.join(getSessionsDir(), projectName, `${sessionId}.jsonl`)\n const content = yield* Effect.tryPromise(() => fs.readFile(filePath, 'utf-8'))\n const lines = content.trim().split('\\n').filter(Boolean)\n\n if (lines.length === 0) {\n return { success: false, error: 'Empty session' }\n }\n\n const messages = lines.map((line) => JSON.parse(line) as Message)\n const firstMsg = messages[0]\n\n // Add title prefix to first message\n if (firstMsg && typeof firstMsg.message === 'object' && firstMsg.message !== null) {\n const msg = firstMsg.message as { content?: string }\n if (msg.content) {\n // Remove existing title prefix if any\n const cleanContent = msg.content.replace(/^\\[.*?\\]\\s*/, '')\n msg.content = `[${newTitle}] ${cleanContent}`\n }\n }\n\n const newContent = messages.map((m) => JSON.stringify(m)).join('\\n') + '\\n'\n yield* Effect.tryPromise(() => fs.writeFile(filePath, newContent, 'utf-8'))\n\n return { success: true }\n })\n\n// Delete a message from session\nexport const deleteMessage = (projectName: string, sessionId: string, messageUuid: string) =>\n Effect.gen(function* () {\n const filePath = path.join(getSessionsDir(), projectName, `${sessionId}.jsonl`)\n const content = yield* Effect.tryPromise(() => fs.readFile(filePath, 'utf-8'))\n const lines = content.trim().split('\\n').filter(Boolean)\n const messages = lines.map((line) => JSON.parse(line) as Message)\n\n const targetIndex = messages.findIndex((m) => m.uuid === messageUuid)\n if (targetIndex === -1) {\n return { success: false, error: 'Message not found' }\n }\n\n // Get the parent UUID of deleted message\n const deletedMsg = messages[targetIndex]\n const parentUuid = deletedMsg?.parentUuid\n\n // Update child message to point to deleted message's parent\n const nextMsg = messages[targetIndex + 1]\n if (nextMsg) {\n nextMsg.parentUuid = parentUuid\n }\n\n // Remove the message\n messages.splice(targetIndex, 1)\n\n const newContent = messages.map((m) => JSON.stringify(m)).join('\\n') + '\\n'\n yield* Effect.tryPromise(() => fs.writeFile(filePath, newContent, 'utf-8'))\n\n return { success: true }\n })\n\n// Preview cleanup - find empty and invalid sessions\nexport const previewCleanup = (projectName?: string) =>\n Effect.gen(function* () {\n const projects = yield* listProjects\n const targetProjects = projectName ? projects.filter((p) => p.name === projectName) : projects\n\n const results = yield* Effect.all(\n targetProjects.map((project) =>\n Effect.gen(function* () {\n const sessions = yield* listSessions(project.name)\n const emptySessions = sessions.filter((s) => s.messageCount === 0)\n const invalidSessions = sessions.filter(\n (s) => s.title?.includes('Invalid API key') || s.title?.includes('API key')\n )\n\n return {\n project: project.name,\n emptySessions,\n invalidSessions,\n }\n })\n ),\n { concurrency: 5 }\n )\n\n return results\n })\n\n// Clear sessions (empty and invalid)\nexport const clearSessions = (options: {\n projectName?: string\n clearEmpty?: boolean\n clearInvalid?: boolean\n}) =>\n Effect.gen(function* () {\n const { projectName, clearEmpty = true, clearInvalid = true } = options\n const cleanupPreview = yield* previewCleanup(projectName)\n\n let deletedCount = 0\n\n for (const result of cleanupPreview) {\n const toDelete = [\n ...(clearEmpty ? result.emptySessions : []),\n ...(clearInvalid ? result.invalidSessions : []),\n ]\n\n for (const session of toDelete) {\n yield* deleteSession(result.project, session.id)\n deletedCount++\n }\n }\n\n return { success: true, deletedCount }\n })\n"],"mappings":"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","names":["Effect","content","Effect"]}
package/dist/server.js CHANGED
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  startWebServer,
3
3
  stopWebServer
4
- } from "./chunk-D2SPLCNE.js";
4
+ } from "./chunk-HK6PMHC3.js";
5
5
  export {
6
6
  startWebServer,
7
7
  stopWebServer
@@ -0,0 +1 @@
1
+ var Zt=t=>{throw TypeError(t)};var Ce=(t,e,n)=>e.has(t)||Zt("Cannot "+n);var w=(t,e,n)=>(Ce(t,e,"read from private field"),n?n.call(t):e.get(t)),U=(t,e,n)=>e.has(t)?Zt("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,n);import{aR as At,aS as je,u as te,A as T,F as I,z as O,aQ as pt,aT as ee,aU as Ne}from"./B4TJWzDE.js";const z=[];function Nt(t,e=At){let n=null;const r=new Set;function a(i){if(je(t,i)&&(t=i,n)){const c=!z.length;for(const l of r)l[1](),z.push(l,t);if(c){for(let l=0;l<z.length;l+=2)z[l][0](z[l+1]);z.length=0}}}function s(i){a(i(t))}function o(i,c=At){const l=[i,c];return r.add(l),r.size===1&&(n=e(a,s)||At),i(t),()=>{r.delete(l),r.size===0&&n&&(n(),n=null)}}return{set:a,update:s,subscribe:o}}class qt{constructor(e,n){this.status=e,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${e}`}}toString(){return JSON.stringify(this.body)}}class Dt{constructor(e,n){this.status=e,this.location=n}}class Vt extends Error{constructor(e,n,r){super(r),this.status=e,this.text=n}}new URL("sveltekit-internal://");function qe(t,e){return t==="/"||e==="ignore"?t:e==="never"?t.endsWith("/")?t.slice(0,-1):t:e==="always"&&!t.endsWith("/")?t+"/":t}function De(t){return t.split("%25").map(decodeURI).join("%25")}function Ve(t){for(const e in t)t[e]=decodeURIComponent(t[e]);return t}function Lt({href:t}){return t.split("#")[0]}function Be(...t){let e=5381;for(const n of t)if(typeof n=="string"){let r=n.length;for(;r;)e=e*33^n.charCodeAt(--r)}else if(ArrayBuffer.isView(n)){const r=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let a=r.length;for(;a;)e=e*33^r[--a]}else throw new TypeError("value must be a string or TypedArray");return(e>>>0).toString(36)}new TextEncoder;new TextDecoder;function Ke(t){const e=atob(t),n=new Uint8Array(e.length);for(let r=0;r<e.length;r++)n[r]=e.charCodeAt(r);return n}const ze=window.fetch;window.fetch=(t,e)=>((t instanceof Request?t.method:(e==null?void 0:e.method)||"GET")!=="GET"&&Y.delete(Bt(t)),ze(t,e));const Y=new Map;function Fe(t,e){const n=Bt(t,e),r=document.querySelector(n);if(r!=null&&r.textContent){r.remove();let{body:a,...s}=JSON.parse(r.textContent);const o=r.getAttribute("data-ttl");return o&&Y.set(n,{body:a,init:s,ttl:1e3*Number(o)}),r.getAttribute("data-b64")!==null&&(a=Ke(a)),Promise.resolve(new Response(a,s))}return window.fetch(t,e)}function Me(t,e,n){if(Y.size>0){const r=Bt(t,n),a=Y.get(r);if(a){if(performance.now()<a.ttl&&["default","force-cache","only-if-cached",void 0].includes(n==null?void 0:n.cache))return new Response(a.body,a.init);Y.delete(r)}}return window.fetch(e,n)}function Bt(t,e){let r=`script[data-sveltekit-fetched][data-url=${JSON.stringify(t instanceof Request?t.url:t)}]`;if(e!=null&&e.headers||e!=null&&e.body){const a=[];e.headers&&a.push([...new Headers(e.headers)].join(",")),e.body&&(typeof e.body=="string"||ArrayBuffer.isView(e.body))&&a.push(e.body),r+=`[data-hash="${Be(...a)}"]`}return r}const Ge=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function We(t){const e=[];return{pattern:t==="/"?/^\/$/:new RegExp(`^${He(t).map(r=>{const a=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(r);if(a)return e.push({name:a[1],matcher:a[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const s=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(r);if(s)return e.push({name:s[1],matcher:s[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!r)return;const o=r.split(/\[(.+?)\](?!\])/);return"/"+o.map((c,l)=>{if(l%2){if(c.startsWith("x+"))return Ut(String.fromCharCode(parseInt(c.slice(2),16)));if(c.startsWith("u+"))return Ut(String.fromCharCode(...c.slice(2).split("-").map(_=>parseInt(_,16))));const d=Ge.exec(c),[,u,v,f,h]=d;return e.push({name:f,matcher:h,optional:!!u,rest:!!v,chained:v?l===1&&o[0]==="":!1}),v?"([^]*?)":u?"([^/]*)?":"([^/]+?)"}return Ut(c)}).join("")}).join("")}/?$`),params:e}}function Ye(t){return t!==""&&!/^\([^)]+\)$/.test(t)}function He(t){return t.slice(1).split("/").filter(Ye)}function Je(t,e,n){const r={},a=t.slice(1),s=a.filter(i=>i!==void 0);let o=0;for(let i=0;i<e.length;i+=1){const c=e[i];let l=a[i-o];if(c.chained&&c.rest&&o&&(l=a.slice(i-o,i+1).filter(d=>d).join("/"),o=0),l===void 0){c.rest&&(r[c.name]="");continue}if(!c.matcher||n[c.matcher](l)){r[c.name]=l;const d=e[i+1],u=a[i+1];d&&!d.rest&&d.optional&&u&&c.chained&&(o=0),!d&&!u&&Object.keys(r).length===s.length&&(o=0);continue}if(c.optional&&c.chained){o++;continue}return}if(!o)return r}function Ut(t){return t.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function Xe({nodes:t,server_loads:e,dictionary:n,matchers:r}){const a=new Set(e);return Object.entries(n).map(([i,[c,l,d]])=>{const{pattern:u,params:v}=We(i),f={id:i,exec:h=>{const _=u.exec(h);if(_)return Je(_,v,r)},errors:[1,...d||[]].map(h=>t[h]),layouts:[0,...l||[]].map(o),leaf:s(c)};return f.errors.length=f.layouts.length=Math.max(f.errors.length,f.layouts.length),f});function s(i){const c=i<0;return c&&(i=~i),[c,t[i]]}function o(i){return i===void 0?i:[a.has(i),t[i]]}}function pe(t,e=JSON.parse){try{return e(sessionStorage[t])}catch{}}function ne(t,e,n=JSON.stringify){const r=n(e);try{sessionStorage[t]=r}catch{}}var le;const L=((le=globalThis.__sveltekit_11n5705)==null?void 0:le.base)??"";var fe;const Qe=((fe=globalThis.__sveltekit_11n5705)==null?void 0:fe.assets)??L??"",Ze="1765540397292",ge="sveltekit:snapshot",me="sveltekit:scroll",_e="sveltekit:states",tn="sveltekit:pageurl",M="sveltekit:history",J="sveltekit:navigation",q={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},Kt=location.origin;function we(t){if(t instanceof URL)return t;let e=document.baseURI;if(!e){const n=document.getElementsByTagName("base");e=n.length?n[0].href:document.URL}return new URL(t,e)}function St(){return{x:pageXOffset,y:pageYOffset}}function F(t,e){return t.getAttribute(`data-sveltekit-${e}`)}const ae={...q,"":q.hover};function ye(t){let e=t.assignedSlot??t.parentNode;return(e==null?void 0:e.nodeType)===11&&(e=e.host),e}function ve(t,e){for(;t&&t!==e;){if(t.nodeName.toUpperCase()==="A"&&t.hasAttribute("href"))return t;t=ye(t)}}function Ot(t,e,n){let r;try{if(r=new URL(t instanceof SVGAElement?t.href.baseVal:t.href,document.baseURI),n&&r.hash.match(/^#[^/]/)){const i=location.hash.split("#")[1]||"/";r.hash=`#${i}${r.hash}`}}catch{}const a=t instanceof SVGAElement?t.target.baseVal:t.target,s=!r||!!a||Et(r,e,n)||(t.getAttribute("rel")||"").split(/\s+/).includes("external"),o=(r==null?void 0:r.origin)===Kt&&t.hasAttribute("download");return{url:r,external:s,target:a,download:o}}function gt(t){let e=null,n=null,r=null,a=null,s=null,o=null,i=t;for(;i&&i!==document.documentElement;)r===null&&(r=F(i,"preload-code")),a===null&&(a=F(i,"preload-data")),e===null&&(e=F(i,"keepfocus")),n===null&&(n=F(i,"noscroll")),s===null&&(s=F(i,"reload")),o===null&&(o=F(i,"replacestate")),i=ye(i);function c(l){switch(l){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:ae[r??"off"],preload_data:ae[a??"off"],keepfocus:c(e),noscroll:c(n),reload:c(s),replace_state:c(o)}}function re(t){const e=Nt(t);let n=!0;function r(){n=!0,e.update(o=>o)}function a(o){n=!1,e.set(o)}function s(o){let i;return e.subscribe(c=>{(i===void 0||n&&c!==i)&&o(i=c)})}return{notify:r,set:a,subscribe:s}}const be={v:()=>{}};function en(){const{set:t,subscribe:e}=Nt(!1);let n;async function r(){clearTimeout(n);try{const a=await fetch(`${Qe}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!a.ok)return!1;const o=(await a.json()).version!==Ze;return o&&(t(!0),be.v(),clearTimeout(n)),o}catch{return!1}}return{subscribe:e,check:r}}function Et(t,e,n){return t.origin!==Kt||!t.pathname.startsWith(e)?!0:n?t.pathname!==location.pathname:!1}function Un(t){}const ke=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...ke];const nn=new Set([...ke]);[...nn];function an(t){return t.filter(e=>e!=null)}function zt(t){return t instanceof qt||t instanceof Vt?t.status:500}function rn(t){return t instanceof Vt?t.text:"Internal Error"}let R,X,Tt;const on=te.toString().includes("$$")||/function \w+\(\) \{\}/.test(te.toString());var nt,at,rt,ot,st,it,ct,lt,ue,ft,de,ut,he;on?(R={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL("https://example.com")},X={current:null},Tt={current:!1}):(R=new(ue=class{constructor(){U(this,nt,T({}));U(this,at,T(null));U(this,rt,T(null));U(this,ot,T({}));U(this,st,T({id:null}));U(this,it,T({}));U(this,ct,T(-1));U(this,lt,T(new URL("https://example.com")))}get data(){return I(w(this,nt))}set data(e){O(w(this,nt),e)}get form(){return I(w(this,at))}set form(e){O(w(this,at),e)}get error(){return I(w(this,rt))}set error(e){O(w(this,rt),e)}get params(){return I(w(this,ot))}set params(e){O(w(this,ot),e)}get route(){return I(w(this,st))}set route(e){O(w(this,st),e)}get state(){return I(w(this,it))}set state(e){O(w(this,it),e)}get status(){return I(w(this,ct))}set status(e){O(w(this,ct),e)}get url(){return I(w(this,lt))}set url(e){O(w(this,lt),e)}},nt=new WeakMap,at=new WeakMap,rt=new WeakMap,ot=new WeakMap,st=new WeakMap,it=new WeakMap,ct=new WeakMap,lt=new WeakMap,ue),X=new(de=class{constructor(){U(this,ft,T(null))}get current(){return I(w(this,ft))}set current(e){O(w(this,ft),e)}},ft=new WeakMap,de),Tt=new(he=class{constructor(){U(this,ut,T(!1))}get current(){return I(w(this,ut))}set current(e){O(w(this,ut),e)}},ut=new WeakMap,he),be.v=()=>Tt.current=!0);function Se(t){Object.assign(R,t)}const sn=new Set(["icon","shortcut icon","apple-touch-icon"]),V=pe(me)??{},Q=pe(ge)??{},N={url:re({}),page:re({}),navigating:Nt(null),updated:en()};function Ft(t){V[t]=St()}function cn(t,e){let n=t+1;for(;V[n];)delete V[n],n+=1;for(n=e+1;Q[n];)delete Q[n],n+=1}function Z(t,e=!1){return e?location.replace(t.href):location.href=t.href,new Promise(()=>{})}async function Ee(){if("serviceWorker"in navigator){const t=await navigator.serviceWorker.getRegistration(L||"/");t&&await t.update()}}function oe(){}let Mt,$t,mt,P,Pt,b;const _t=[],wt=[];let y=null;function Ct(){var t;(t=y==null?void 0:y.fork)==null||t.then(e=>e==null?void 0:e.discard()),y=null}const ht=new Map,Re=new Set,ln=new Set,H=new Set;let m={branch:[],error:null,url:null},xe=!1,yt=!1,se=!0,tt=!1,W=!1,Ae=!1,Gt=!1,Wt,S,A,D;const vt=new Set,ie=new Map;async function $n(t,e,n){var s,o,i,c,l;(s=globalThis.__sveltekit_11n5705)!=null&&s.data&&globalThis.__sveltekit_11n5705.data,document.URL!==location.href&&(location.href=location.href),b=t,await((i=(o=t.hooks).init)==null?void 0:i.call(o)),Mt=Xe(t),P=document.documentElement,Pt=e,$t=t.nodes[0],mt=t.nodes[1],$t(),mt(),S=(c=history.state)==null?void 0:c[M],A=(l=history.state)==null?void 0:l[J],S||(S=A=Date.now(),history.replaceState({...history.state,[M]:S,[J]:A},""));const r=V[S];function a(){r&&(history.scrollRestoration="manual",scrollTo(r.x,r.y))}n?(a(),await Sn(Pt,n)):(await G({type:"enter",url:we(b.hash?xn(new URL(location.href)):location.href),replace_state:!0}),a()),kn()}function fn(){_t.length=0,Gt=!1}function Le(t){wt.some(e=>e==null?void 0:e.snapshot)&&(Q[t]=wt.map(e=>{var n;return(n=e==null?void 0:e.snapshot)==null?void 0:n.capture()}))}function Ue(t){var e;(e=Q[t])==null||e.forEach((n,r)=>{var a,s;(s=(a=wt[r])==null?void 0:a.snapshot)==null||s.restore(n)})}function ce(){Ft(S),ne(me,V),Le(A),ne(ge,Q)}async function un(t,e,n,r){let a;e.invalidateAll&&Ct(),await G({type:"goto",url:we(t),keepfocus:e.keepFocus,noscroll:e.noScroll,replace_state:e.replaceState,state:e.state,redirect_count:n,nav_token:r,accept:()=>{e.invalidateAll&&(Gt=!0,a=[...ie.keys()]),e.invalidate&&e.invalidate.forEach(bn)}}),e.invalidateAll&&pt().then(pt).then(()=>{ie.forEach(({resource:s},o)=>{var i;a!=null&&a.includes(o)&&((i=s.refresh)==null||i.call(s))})})}async function dn(t){if(t.id!==(y==null?void 0:y.id)){Ct();const e={};if(vt.add(e),y={id:t.id,token:e,promise:Ie({...t,preload:e}).then(n=>(vt.delete(e),n.type==="loaded"&&n.state.error&&Ct(),n)),fork:null},ee){const n=y;n.fork=n.promise.then(r=>{if(n===y&&r.type==="loaded")try{return ee(()=>{Wt.$set(r.props),Se(r.props.page)})}catch{}return null})}}return y.promise}async function It(t){var n;const e=(n=await Rt(t,!1))==null?void 0:n.route;e&&await Promise.all([...e.layouts,e.leaf].map(r=>r==null?void 0:r[1]()))}async function Te(t,e,n){var a;m=t.state;const r=document.querySelector("style[data-sveltekit]");if(r&&r.remove(),Object.assign(R,t.props.page),Wt=new b.root({target:e,props:{...t.props,stores:N,components:wt},hydrate:n,sync:!1}),await Promise.resolve(),Ue(A),n){const s={from:null,to:{params:m.params,route:{id:((a=m.route)==null?void 0:a.id)??null},url:new URL(location.href)},willUnload:!1,type:"enter",complete:Promise.resolve()};H.forEach(o=>o(s))}yt=!0}function bt({url:t,params:e,branch:n,status:r,error:a,route:s,form:o}){let i="never";if(L&&(t.pathname===L||t.pathname===L+"/"))i="always";else for(const f of n)(f==null?void 0:f.slash)!==void 0&&(i=f.slash);t.pathname=qe(t.pathname,i),t.search=t.search;const c={type:"loaded",state:{url:t,params:e,branch:n,error:a,route:s},props:{constructors:an(n).map(f=>f.node.component),page:Qt(R)}};o!==void 0&&(c.props.form=o);let l={},d=!R,u=0;for(let f=0;f<Math.max(n.length,m.branch.length);f+=1){const h=n[f],_=m.branch[f];(h==null?void 0:h.data)!==(_==null?void 0:_.data)&&(d=!0),h&&(l={...l,...h.data},d&&(c.props[`data_${u}`]=l),u+=1)}return(!m.url||t.href!==m.url.href||m.error!==a||o!==void 0&&o!==R.form||d)&&(c.props.page={error:a,params:e,route:{id:(s==null?void 0:s.id)??null},state:{},status:r,url:new URL(t),form:o??null,data:d?l:R.data}),c}async function Yt({loader:t,parent:e,url:n,params:r,route:a,server_data_node:s}){var l,d;let o=null;const i={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},c=await t();return{node:c,loader:t,server:s,universal:(l=c.universal)!=null&&l.load?{type:"data",data:o,uses:i}:null,data:o??(s==null?void 0:s.data)??null,slash:((d=c.universal)==null?void 0:d.trailingSlash)??(s==null?void 0:s.slash)}}function hn(t,e,n){let r=t instanceof Request?t.url:t;const a=new URL(r,n);a.origin===n.origin&&(r=a.href.slice(n.origin.length));const s=yt?Me(r,a.href,e):Fe(r,e);return{resolved:a,promise:s}}function pn(t,e,n,r,a,s){if(Gt)return!0;if(!a)return!1;if(a.parent&&t||a.route&&e||a.url&&n)return!0;for(const o of a.search_params)if(r.has(o))return!0;for(const o of a.params)if(s[o]!==m.params[o])return!0;for(const o of a.dependencies)if(_t.some(i=>i(new URL(o))))return!0;return!1}function Ht(t,e){return(t==null?void 0:t.type)==="data"?t:(t==null?void 0:t.type)==="skip"?e??null:null}function gn(t,e){if(!t)return new Set(e.searchParams.keys());const n=new Set([...t.searchParams.keys(),...e.searchParams.keys()]);for(const r of n){const a=t.searchParams.getAll(r),s=e.searchParams.getAll(r);a.every(o=>s.includes(o))&&s.every(o=>a.includes(o))&&n.delete(r)}return n}function mn({error:t,url:e,route:n,params:r}){return{type:"loaded",state:{error:t,url:e,route:n,params:r,branch:[]},props:{page:Qt(R),constructors:[]}}}async function Ie({id:t,invalidating:e,url:n,params:r,route:a,preload:s}){if((y==null?void 0:y.id)===t)return vt.delete(y.token),y.promise;const{errors:o,layouts:i,leaf:c}=a,l=[...i,c];o.forEach(g=>g==null?void 0:g().catch(()=>{})),l.forEach(g=>g==null?void 0:g[1]().catch(()=>{}));const d=m.url?t!==kt(m.url):!1,u=m.route?a.id!==m.route.id:!1,v=gn(m.url,n);let f=!1;const h=l.map(async(g,p)=>{var C;if(!g)return;const k=m.branch[p];return g[1]===(k==null?void 0:k.loader)&&!pn(f,u,d,v,(C=k.universal)==null?void 0:C.uses,r)?k:(f=!0,Yt({loader:g[1],url:n,params:r,route:a,parent:async()=>{var dt;const $={};for(let B=0;B<p;B+=1)Object.assign($,(dt=await h[B])==null?void 0:dt.data);return $},server_data_node:Ht(g[0]?{type:"skip"}:null,g[0]?k==null?void 0:k.server:void 0)}))});for(const g of h)g.catch(()=>{});const _=[];for(let g=0;g<l.length;g+=1)if(l[g])try{_.push(await h[g])}catch(p){if(p instanceof Dt)return{type:"redirect",location:p.location};if(vt.has(s))return mn({error:await et(p,{params:r,url:n,route:{id:a.id}}),url:n,params:r,route:a});let k=zt(p),x;if(p instanceof qt)x=p.body;else{if(await N.updated.check())return await Ee(),await Z(n);x=await et(p,{params:r,url:n,route:{id:a.id}})}const C=await _n(g,_,o);return C?bt({url:n,params:r,branch:_.slice(0,C.idx).concat(C.node),status:k,error:x,route:a}):await $e(n,{id:a.id},x,k)}else _.push(void 0);return bt({url:n,params:r,branch:_,status:200,error:null,route:a,form:e?void 0:null})}async function _n(t,e,n){for(;t--;)if(n[t]){let r=t;for(;!e[r];)r-=1;try{return{idx:r+1,node:{node:await n[t](),loader:n[t],data:{},server:null,universal:null}}}catch{continue}}}async function Jt({status:t,error:e,url:n,route:r}){const a={};let s=null;try{const o=await Yt({loader:$t,url:n,params:a,route:r,parent:()=>Promise.resolve({}),server_data_node:Ht(s)}),i={node:await mt(),loader:mt,universal:null,server:null,data:null};return bt({url:n,params:a,branch:[o,i],status:t,error:e,route:null})}catch(o){if(o instanceof Dt)return un(new URL(o.location,location.href),{},0);throw o}}async function wn(t){const e=t.href;if(ht.has(e))return ht.get(e);let n;try{const r=(async()=>{let a=await b.hooks.reroute({url:new URL(t),fetch:async(s,o)=>hn(s,o,t).promise})??t;if(typeof a=="string"){const s=new URL(t);b.hash?s.hash=a:s.pathname=a,a=s}return a})();ht.set(e,r),n=await r}catch{ht.delete(e);return}return n}async function Rt(t,e){if(t&&!Et(t,L,b.hash)){const n=await wn(t);if(!n)return;const r=yn(n);for(const a of Mt){const s=a.exec(r);if(s)return{id:kt(t),invalidating:e,route:a,params:Ve(s),url:t}}}}function yn(t){return De(b.hash?t.hash.replace(/^#/,"").replace(/[?#].+/,""):t.pathname.slice(L.length))||"/"}function kt(t){return(b.hash?t.hash.replace(/^#/,""):t.pathname)+t.search}function Oe({url:t,type:e,intent:n,delta:r,event:a}){let s=!1;const o=Xt(m,n,t,e);r!==void 0&&(o.navigation.delta=r),a!==void 0&&(o.navigation.event=a);const i={...o.navigation,cancel:()=>{s=!0,o.reject(new Error("navigation cancelled"))}};return tt||Re.forEach(c=>c(i)),s?null:o}async function G({type:t,url:e,popped:n,keepfocus:r,noscroll:a,replace_state:s,state:o={},redirect_count:i=0,nav_token:c={},accept:l=oe,block:d=oe,event:u}){var B;const v=D;D=c;const f=await Rt(e,!1),h=t==="enter"?Xt(m,f,e,t):Oe({url:e,type:t,delta:n==null?void 0:n.delta,intent:f,event:u});if(!h){d(),D===c&&(D=v);return}const _=S,g=A;l(),tt=!0,yt&&h.navigation.type!=="enter"&&N.navigating.set(X.current=h.navigation);let p=f&&await Ie(f);if(!p){if(Et(e,L,b.hash))return await Z(e,s);p=await $e(e,{id:null},await et(new Vt(404,"Not Found",`Not found: ${e.pathname}`),{url:e,params:{},route:{id:null}}),404,s)}if(e=(f==null?void 0:f.url)||e,D!==c)return h.reject(new Error("navigation aborted")),!1;if(p.type==="redirect"){if(i<20){await G({type:t,url:new URL(p.location,e),popped:n,keepfocus:r,noscroll:a,replace_state:s,state:o,redirect_count:i+1,nav_token:c}),h.fulfil(void 0);return}p=await Jt({status:500,error:await et(new Error("Redirect loop"),{url:e,params:{},route:{id:null}}),url:e,route:{id:null}})}else p.props.page.status>=400&&await N.updated.check()&&(await Ee(),await Z(e,s));if(fn(),Ft(_),Le(g),p.props.page.url.pathname!==e.pathname&&(e.pathname=p.props.page.url.pathname),o=n?n.state:o,!n){const E=s?0:1,K={[M]:S+=E,[J]:A+=E,[_e]:o};(s?history.replaceState:history.pushState).call(history,K,"",e),s||cn(S,A)}const k=f&&(y==null?void 0:y.id)===f.id?y.fork:null;y=null,p.props.page.state=o;let x;if(yt){const E=(await Promise.all(Array.from(ln,j=>j(h.navigation)))).filter(j=>typeof j=="function");if(E.length>0){let j=function(){E.forEach(xt=>{H.delete(xt)})};E.push(j),E.forEach(xt=>{H.add(xt)})}m=p.state,p.props.page&&(p.props.page.url=e);const K=k&&await k;K?x=K.commit():(Wt.$set(p.props),Se(p.props.page),x=(B=Ne)==null?void 0:B()),Ae=!0}else await Te(p,Pt,!1);const{activeElement:C}=document;await x,await pt(),await pt();let $=n?n.scroll:a?St():null;if(se){const E=e.hash&&document.getElementById(Pe(e));if($)scrollTo($.x,$.y);else if(E){E.scrollIntoView();const{top:K,left:j}=E.getBoundingClientRect();$={x:pageXOffset+j,y:pageYOffset+K}}else scrollTo(0,0)}const dt=document.activeElement!==C&&document.activeElement!==document.body;!r&&!dt&&Rn(e,$),se=!0,p.props.page&&Object.assign(R,p.props.page),tt=!1,t==="popstate"&&Ue(A),h.fulfil(void 0),H.forEach(E=>E(h.navigation)),N.navigating.set(X.current=null)}async function $e(t,e,n,r,a){return t.origin===Kt&&t.pathname===location.pathname&&!xe?await Jt({status:r,error:n,url:t,route:e}):await Z(t,a)}function vn(){let t,e,n;P.addEventListener("mousemove",i=>{const c=i.target;clearTimeout(t),t=setTimeout(()=>{s(c,q.hover)},20)});function r(i){i.defaultPrevented||s(i.composedPath()[0],q.tap)}P.addEventListener("mousedown",r),P.addEventListener("touchstart",r,{passive:!0});const a=new IntersectionObserver(i=>{for(const c of i)c.isIntersecting&&(It(new URL(c.target.href)),a.unobserve(c.target))},{threshold:0});async function s(i,c){const l=ve(i,P),d=l===e&&c>=n;if(!l||d)return;const{url:u,external:v,download:f}=Ot(l,L,b.hash);if(v||f)return;const h=gt(l),_=u&&kt(m.url)===kt(u);if(!(h.reload||_))if(c<=h.preload_data){e=l,n=q.tap;const g=await Rt(u,!1);if(!g)return;dn(g)}else c<=h.preload_code&&(e=l,n=c,It(u))}function o(){a.disconnect();for(const i of P.querySelectorAll("a")){const{url:c,external:l,download:d}=Ot(i,L,b.hash);if(l||d)continue;const u=gt(i);u.reload||(u.preload_code===q.viewport&&a.observe(i),u.preload_code===q.eager&&It(c))}}H.add(o),o()}function et(t,e){if(t instanceof qt)return t.body;const n=zt(t),r=rn(t);return b.hooks.handleError({error:t,event:e,status:n,message:r})??{message:r}}function bn(t){if(typeof t=="function")_t.push(t);else{const{href:e}=new URL(t,location.href);_t.push(n=>n.href===e)}}function kn(){var e;history.scrollRestoration="manual",addEventListener("beforeunload",n=>{let r=!1;if(ce(),!tt){const a=Xt(m,void 0,null,"leave"),s={...a.navigation,cancel:()=>{r=!0,a.reject(new Error("navigation cancelled"))}};Re.forEach(o=>o(s))}r?(n.preventDefault(),n.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&ce()}),(e=navigator.connection)!=null&&e.saveData||vn(),P.addEventListener("click",async n=>{if(n.button||n.which!==1||n.metaKey||n.ctrlKey||n.shiftKey||n.altKey||n.defaultPrevented)return;const r=ve(n.composedPath()[0],P);if(!r)return;const{url:a,external:s,target:o,download:i}=Ot(r,L,b.hash);if(!a)return;if(o==="_parent"||o==="_top"){if(window.parent!==window)return}else if(o&&o!=="_self")return;const c=gt(r);if(!(r instanceof SVGAElement)&&a.protocol!==location.protocol&&!(a.protocol==="https:"||a.protocol==="http:")||i)return;const[d,u]=(b.hash?a.hash.replace(/^#/,""):a.href).split("#"),v=d===Lt(location);if(s||c.reload&&(!v||!u)){Oe({url:a,type:"link",event:n})?tt=!0:n.preventDefault();return}if(u!==void 0&&v){const[,f]=m.url.href.split("#");if(f===u){if(n.preventDefault(),u===""||u==="top"&&r.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const h=r.ownerDocument.getElementById(decodeURIComponent(u));h&&(h.scrollIntoView(),h.focus())}return}if(W=!0,Ft(S),t(a),!c.replace_state)return;W=!1}n.preventDefault(),await new Promise(f=>{requestAnimationFrame(()=>{setTimeout(f,0)}),setTimeout(f,100)}),await G({type:"link",url:a,keepfocus:c.keepfocus,noscroll:c.noscroll,replace_state:c.replace_state??a.href===location.href,event:n})}),P.addEventListener("submit",n=>{if(n.defaultPrevented)return;const r=HTMLFormElement.prototype.cloneNode.call(n.target),a=n.submitter;if(((a==null?void 0:a.formTarget)||r.target)==="_blank"||((a==null?void 0:a.formMethod)||r.method)!=="get")return;const i=new URL((a==null?void 0:a.hasAttribute("formaction"))&&(a==null?void 0:a.formAction)||r.action);if(Et(i,L,!1))return;const c=n.target,l=gt(c);if(l.reload)return;n.preventDefault(),n.stopPropagation();const d=new FormData(c,a);i.search=new URLSearchParams(d).toString(),G({type:"form",url:i,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??i.href===location.href,event:n})}),addEventListener("popstate",async n=>{var r;if(!jt){if((r=n.state)!=null&&r[M]){const a=n.state[M];if(D={},a===S)return;const s=V[a],o=n.state[_e]??{},i=new URL(n.state[tn]??location.href),c=n.state[J],l=m.url?Lt(location)===Lt(m.url):!1;if(c===A&&(Ae||l)){o!==R.state&&(R.state=o),t(i),V[S]=St(),s&&scrollTo(s.x,s.y),S=a;return}const u=a-S;await G({type:"popstate",url:i,popped:{state:o,scroll:s,delta:u},accept:()=>{S=a,A=c},block:()=>{history.go(-u)},nav_token:D,event:n})}else if(!W){const a=new URL(location.href);t(a),b.hash&&location.reload()}}}),addEventListener("hashchange",()=>{W&&(W=!1,history.replaceState({...history.state,[M]:++S,[J]:A},"",location.href))});for(const n of document.querySelectorAll("link"))sn.has(n.rel)&&(n.href=n.href);addEventListener("pageshow",n=>{n.persisted&&N.navigating.set(X.current=null)});function t(n){m.url=R.url=n,N.page.set(Qt(R)),N.page.notify()}}async function Sn(t,{status:e=200,error:n,node_ids:r,params:a,route:s,server_route:o,data:i,form:c}){xe=!0;const l=new URL(location.href);let d;({params:a={},route:s={id:null}}=await Rt(l,!1)||{}),d=Mt.find(({id:f})=>f===s.id);let u,v=!0;try{const f=r.map(async(_,g)=>{const p=i[g];return p!=null&&p.uses&&(p.uses=En(p.uses)),Yt({loader:b.nodes[_],url:l,params:a,route:s,parent:async()=>{const k={};for(let x=0;x<g;x+=1)Object.assign(k,(await f[x]).data);return k},server_data_node:Ht(p)})}),h=await Promise.all(f);if(d){const _=d.layouts;for(let g=0;g<_.length;g++)_[g]||h.splice(g,0,void 0)}u=bt({url:l,params:a,branch:h,status:e,error:n,form:c,route:d??null})}catch(f){if(f instanceof Dt){await Z(new URL(f.location,location.href));return}u=await Jt({status:zt(f),error:await et(f,{url:l,params:a,route:s}),url:l,route:s}),t.textContent="",v=!1}u.props.page&&(u.props.page.state={}),await Te(u,t,v)}function En(t){return{dependencies:new Set((t==null?void 0:t.dependencies)??[]),params:new Set((t==null?void 0:t.params)??[]),parent:!!(t!=null&&t.parent),route:!!(t!=null&&t.route),url:!!(t!=null&&t.url),search_params:new Set((t==null?void 0:t.search_params)??[])}}let jt=!1;function Rn(t,e=null){const n=document.querySelector("[autofocus]");if(n)n.focus();else{const r=Pe(t);if(r&&document.getElementById(r)){const{x:s,y:o}=e??St();setTimeout(()=>{const i=history.state;jt=!0,location.replace(`#${r}`),b.hash&&location.replace(t.hash),history.replaceState(i,"",t.hash),scrollTo(s,o),jt=!1})}else{const s=document.body,o=s.getAttribute("tabindex");s.tabIndex=-1,s.focus({preventScroll:!0,focusVisible:!1}),o!==null?s.setAttribute("tabindex",o):s.removeAttribute("tabindex")}const a=getSelection();if(a&&a.type!=="None"){const s=[];for(let o=0;o<a.rangeCount;o+=1)s.push(a.getRangeAt(o));setTimeout(()=>{if(a.rangeCount===s.length){for(let o=0;o<a.rangeCount;o+=1){const i=s[o],c=a.getRangeAt(o);if(i.commonAncestorContainer!==c.commonAncestorContainer||i.startContainer!==c.startContainer||i.endContainer!==c.endContainer||i.startOffset!==c.startOffset||i.endOffset!==c.endOffset)return}a.removeAllRanges()}})}}}function Xt(t,e,n,r){var c,l;let a,s;const o=new Promise((d,u)=>{a=d,s=u});return o.catch(()=>{}),{navigation:{from:{params:t.params,route:{id:((c=t.route)==null?void 0:c.id)??null},url:t.url},to:n&&{params:(e==null?void 0:e.params)??null,route:{id:((l=e==null?void 0:e.route)==null?void 0:l.id)??null},url:n},willUnload:!e,type:r,complete:o},fulfil:a,reject:s}}function Qt(t){return{data:t.data,error:t.error,form:t.form,params:t.params,route:t.route,state:t.state,status:t.status,url:t.url}}function xn(t){const e=new URL(t);return e.hash=decodeURIComponent(t.hash),e}function Pe(t){let e;if(b.hash){const[,,n]=t.hash.split("#",3);e=n??""}else e=t.hash.slice(1);return decodeURIComponent(e)}export{$n as a,Un as l,R as p,N as s};
@@ -1,2 +1,2 @@
1
- const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.Cd8eOV9t.js","../chunks/ChOgyrGO.js","../chunks/B4TJWzDE.js","../chunks/9luERNGW.js","../chunks/DbCO4Be8.js","../assets/0.BNKw18IQ.css","../nodes/1.DVVhj1K8.js","../chunks/DUFLAPco.js","../nodes/2.DqJoUS41.js"])))=>i.map(i=>d[i]);
2
- var V=t=>{throw TypeError(t)};var z=(t,e,r)=>e.has(t)||V("Cannot "+r);var v=(t,e,r)=>(z(t,e,"read from private field"),r?r.call(t):e.get(t)),D=(t,e,r)=>e.has(t)?V("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),j=(t,e,r,i)=>(z(t,e,"write to private field"),i?i.call(t,r):e.set(t,r),r);import{h as te,g as re,f as ae,E as se,B as ne,ac as ie,L as W,a4 as oe,aD as H,aE as ce,aF as ue,aG as fe,F as E,P as le,R as de,a9 as _e,z as L,aH as he,ae as ve,aI as me,aJ as ge,aK as ye,aL as Ee,aM as Pe,aN as be,aO as Q,aP as Re,ar as Se,W as Oe,t as we,J as Ae,K as Le,u as Ie,A as k,aQ as xe,v as x,D as Te,y as Be,w as De,G as je,aa as C,x as ke}from"../chunks/B4TJWzDE.js";import{h as Ce,m as Ne,u as Ue,f as Z,a as w,c as N,t as qe,s as Fe}from"../chunks/ChOgyrGO.js";import{B as Me,i as U}from"../chunks/9luERNGW.js";function q(t,e,r){te&&re();var i=new Me(t);ae(()=>{var n=e()??null;i.ensure(n,n&&(o=>r(o,n)))},se)}function J(t,e){return t===e||(t==null?void 0:t[H])===e}function F(t={},e,r,i){return ne(()=>{var n,o;return ie(()=>{n=o,o=[],W(()=>{t!==r(...o)&&(e(t,...o),n&&J(r(...n),t)&&e(null,...n))})}),()=>{oe(()=>{o&&J(r(...o),t)&&e(null,...o)})}}),t}let T=!1;function Ye(t){var e=T;try{return T=!1,[t(),T]}finally{T=e}}function M(t,e,r,i){var b;var n=!ye||(r&Ee)!==0,o=(r&ge)!==0,s=(r&be)!==0,a=i,l=!0,S=()=>(l&&(l=!1,a=s?W(i):i),a),u;if(o){var P=H in t||Q in t;u=((b=ce(t,e))==null?void 0:b.set)??(P&&e in t?c=>t[e]=c:void 0)}var m,A=!1;o?[m,A]=Ye(()=>t[e]):m=t[e],m===void 0&&i!==void 0&&(m=S(),u&&(n&&ue(),u(m)));var d;if(n?d=()=>{var c=t[e];return c===void 0?S():(l=!0,c)}:d=()=>{var c=t[e];return c!==void 0&&(a=void 0),c===void 0?a:c},n&&(r&fe)===0)return d;if(u){var f=t.$$legacy;return(function(c,h){return arguments.length>0?((!n||!h||f||A)&&u(h?d():c),c):d()})}var _=!1,g=((r&Pe)!==0?le:de)(()=>(_=!1,d()));o&&E(g);var O=ve;return(function(c,h){if(arguments.length>0){const B=h?E(g):n&&o?_e(c):c;return L(g,B),_=!0,a!==void 0&&(a=B),c}return he&&_||(O.f&me)!==0?g.v:E(g)})}function Ge(t){return class extends Ve{constructor(e){super({component:t,...e})}}}var R,y;class Ve{constructor(e){D(this,R);D(this,y);var o;var r=new Map,i=(s,a)=>{var l=Oe(a,!1,!1);return r.set(s,l),l};const n=new Proxy({...e.props||{},$$events:{}},{get(s,a){return E(r.get(a)??i(a,Reflect.get(s,a)))},has(s,a){return a===Q?!0:(E(r.get(a)??i(a,Reflect.get(s,a))),Reflect.has(s,a))},set(s,a,l){return L(r.get(a)??i(a,l),l),Reflect.set(s,a,l)}});j(this,y,(e.hydrate?Ce:Ne)(e.component,{target:e.target,anchor:e.anchor,props:n,context:e.context,intro:e.intro??!1,recover:e.recover})),(!((o=e==null?void 0:e.props)!=null&&o.$$host)||e.sync===!1)&&Re(),j(this,R,n.$$events);for(const s of Object.keys(v(this,y)))s==="$set"||s==="$destroy"||s==="$on"||Se(this,s,{get(){return v(this,y)[s]},set(a){v(this,y)[s]=a},enumerable:!0});v(this,y).$set=s=>{Object.assign(n,s)},v(this,y).$destroy=()=>{Ue(v(this,y))}}$set(e){v(this,y).$set(e)}$on(e,r){v(this,R)[e]=v(this,R)[e]||[];const i=(...n)=>r.call(this,...n);return v(this,R)[e].push(i),()=>{v(this,R)[e]=v(this,R)[e].filter(n=>n!==i)}}$destroy(){v(this,y).$destroy()}}R=new WeakMap,y=new WeakMap;const ze="modulepreload",Je=function(t,e){return new URL(t,e).href},K={},Y=function(e,r,i){let n=Promise.resolve();if(r&&r.length>0){let s=function(u){return Promise.all(u.map(P=>Promise.resolve(P).then(m=>({status:"fulfilled",value:m}),m=>({status:"rejected",reason:m}))))};const a=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),S=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));n=s(r.map(u=>{if(u=Je(u,i),u in K)return;K[u]=!0;const P=u.endsWith(".css"),m=P?'[rel="stylesheet"]':"";if(!!i)for(let f=a.length-1;f>=0;f--){const _=a[f];if(_.href===u&&(!P||_.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${u}"]${m}`))return;const d=document.createElement("link");if(d.rel=P?"stylesheet":ze,P||(d.as="script"),d.crossOrigin="",d.href=u,S&&d.setAttribute("nonce",S),document.head.appendChild(d),P)return new Promise((f,_)=>{d.addEventListener("load",f),d.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${u}`)))})}))}function o(s){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=s,window.dispatchEvent(a),!a.defaultPrevented)throw s}return n.then(s=>{for(const a of s||[])a.status==="rejected"&&o(a.reason);return e().catch(o)})},et={};var Ke=Z('<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>'),We=Z("<!> <!>",1);function He(t,e){we(e,!0);let r=M(e,"components",23,()=>[]),i=M(e,"data_0",3,null),n=M(e,"data_1",3,null);Ae(()=>e.stores.page.set(e.page)),Le(()=>{e.stores,e.page,e.constructors,r(),e.form,i(),n(),e.stores.page.notify()});let o=k(!1),s=k(!1),a=k(null);Ie(()=>{const f=e.stores.page.subscribe(()=>{E(o)&&(L(s,!0),xe().then(()=>{L(a,document.title||"untitled page",!0)}))});return L(o,!0),f});const l=C(()=>e.constructors[1]);var S=We(),u=x(S);{var P=f=>{const _=C(()=>e.constructors[0]);var g=N(),O=x(g);q(O,()=>E(_),(b,c)=>{F(c(b,{get data(){return i()},get form(){return e.form},get params(){return e.page.params},children:(h,B)=>{var G=N(),p=x(G);q(p,()=>E(l),($,ee)=>{F(ee($,{get data(){return n()},get form(){return e.form},get params(){return e.page.params}}),I=>r()[1]=I,()=>{var I;return(I=r())==null?void 0:I[1]})}),w(h,G)},$$slots:{default:!0}}),h=>r()[0]=h,()=>{var h;return(h=r())==null?void 0:h[0]})}),w(f,g)},m=f=>{const _=C(()=>e.constructors[0]);var g=N(),O=x(g);q(O,()=>E(_),(b,c)=>{F(c(b,{get data(){return i()},get form(){return e.form},get params(){return e.page.params}}),h=>r()[0]=h,()=>{var h;return(h=r())==null?void 0:h[0]})}),w(f,g)};U(u,f=>{e.constructors[1]?f(P):f(m,!1)})}var A=Te(u,2);{var d=f=>{var _=Ke(),g=De(_);{var O=b=>{var c=qe();ke(()=>Fe(c,E(a))),w(b,c)};U(g,b=>{E(s)&&b(O)})}je(_),w(f,_)};U(A,f=>{E(o)&&f(d)})}w(t,S),Be()}const tt=Ge(He),rt=[()=>Y(()=>import("../nodes/0.Cd8eOV9t.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url),()=>Y(()=>import("../nodes/1.DVVhj1K8.js"),__vite__mapDeps([6,1,2,7]),import.meta.url),()=>Y(()=>import("../nodes/2.DqJoUS41.js"),__vite__mapDeps([8,1,2,3,4]),import.meta.url)],at=[],st={"/":[2]},X={handleError:(({error:t})=>{console.error(t)}),reroute:(()=>{}),transport:{}},Qe=Object.fromEntries(Object.entries(X.transport).map(([t,e])=>[t,e.decode])),nt=Object.fromEntries(Object.entries(X.transport).map(([t,e])=>[t,e.encode])),it=!1,ot=(t,e)=>Qe[t](e);export{ot as decode,Qe as decoders,st as dictionary,nt as encoders,it as hash,X as hooks,et as matchers,rt as nodes,tt as root,at as server_loads};
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["../nodes/0.Cd8eOV9t.js","../chunks/ChOgyrGO.js","../chunks/B4TJWzDE.js","../chunks/9luERNGW.js","../chunks/DbCO4Be8.js","../assets/0.BNKw18IQ.css","../nodes/1.CoCWmd0q.js","../chunks/DUEukD6E.js","../nodes/2.DqJoUS41.js"])))=>i.map(i=>d[i]);
2
+ var V=t=>{throw TypeError(t)};var z=(t,e,r)=>e.has(t)||V("Cannot "+r);var v=(t,e,r)=>(z(t,e,"read from private field"),r?r.call(t):e.get(t)),D=(t,e,r)=>e.has(t)?V("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(t):e.set(t,r),j=(t,e,r,i)=>(z(t,e,"write to private field"),i?i.call(t,r):e.set(t,r),r);import{h as te,g as re,f as ae,E as se,B as ne,ac as ie,L as W,a4 as oe,aD as H,aE as ce,aF as ue,aG as fe,F as E,P as le,R as de,a9 as _e,z as L,aH as he,ae as ve,aI as me,aJ as ge,aK as ye,aL as Ee,aM as Pe,aN as be,aO as Q,aP as Re,ar as Se,W as Oe,t as we,J as Ae,K as Le,u as Ie,A as k,aQ as xe,v as x,D as Te,y as Be,w as De,G as je,aa as C,x as ke}from"../chunks/B4TJWzDE.js";import{h as Ce,m as Ne,u as Ue,f as Z,a as w,c as N,t as qe,s as Fe}from"../chunks/ChOgyrGO.js";import{B as Me,i as U}from"../chunks/9luERNGW.js";function q(t,e,r){te&&re();var i=new Me(t);ae(()=>{var n=e()??null;i.ensure(n,n&&(o=>r(o,n)))},se)}function J(t,e){return t===e||(t==null?void 0:t[H])===e}function F(t={},e,r,i){return ne(()=>{var n,o;return ie(()=>{n=o,o=[],W(()=>{t!==r(...o)&&(e(t,...o),n&&J(r(...n),t)&&e(null,...n))})}),()=>{oe(()=>{o&&J(r(...o),t)&&e(null,...o)})}}),t}let T=!1;function Ye(t){var e=T;try{return T=!1,[t(),T]}finally{T=e}}function M(t,e,r,i){var b;var n=!ye||(r&Ee)!==0,o=(r&ge)!==0,s=(r&be)!==0,a=i,l=!0,S=()=>(l&&(l=!1,a=s?W(i):i),a),u;if(o){var P=H in t||Q in t;u=((b=ce(t,e))==null?void 0:b.set)??(P&&e in t?c=>t[e]=c:void 0)}var m,A=!1;o?[m,A]=Ye(()=>t[e]):m=t[e],m===void 0&&i!==void 0&&(m=S(),u&&(n&&ue(),u(m)));var d;if(n?d=()=>{var c=t[e];return c===void 0?S():(l=!0,c)}:d=()=>{var c=t[e];return c!==void 0&&(a=void 0),c===void 0?a:c},n&&(r&fe)===0)return d;if(u){var f=t.$$legacy;return(function(c,h){return arguments.length>0?((!n||!h||f||A)&&u(h?d():c),c):d()})}var _=!1,g=((r&Pe)!==0?le:de)(()=>(_=!1,d()));o&&E(g);var O=ve;return(function(c,h){if(arguments.length>0){const B=h?E(g):n&&o?_e(c):c;return L(g,B),_=!0,a!==void 0&&(a=B),c}return he&&_||(O.f&me)!==0?g.v:E(g)})}function Ge(t){return class extends Ve{constructor(e){super({component:t,...e})}}}var R,y;class Ve{constructor(e){D(this,R);D(this,y);var o;var r=new Map,i=(s,a)=>{var l=Oe(a,!1,!1);return r.set(s,l),l};const n=new Proxy({...e.props||{},$$events:{}},{get(s,a){return E(r.get(a)??i(a,Reflect.get(s,a)))},has(s,a){return a===Q?!0:(E(r.get(a)??i(a,Reflect.get(s,a))),Reflect.has(s,a))},set(s,a,l){return L(r.get(a)??i(a,l),l),Reflect.set(s,a,l)}});j(this,y,(e.hydrate?Ce:Ne)(e.component,{target:e.target,anchor:e.anchor,props:n,context:e.context,intro:e.intro??!1,recover:e.recover})),(!((o=e==null?void 0:e.props)!=null&&o.$$host)||e.sync===!1)&&Re(),j(this,R,n.$$events);for(const s of Object.keys(v(this,y)))s==="$set"||s==="$destroy"||s==="$on"||Se(this,s,{get(){return v(this,y)[s]},set(a){v(this,y)[s]=a},enumerable:!0});v(this,y).$set=s=>{Object.assign(n,s)},v(this,y).$destroy=()=>{Ue(v(this,y))}}$set(e){v(this,y).$set(e)}$on(e,r){v(this,R)[e]=v(this,R)[e]||[];const i=(...n)=>r.call(this,...n);return v(this,R)[e].push(i),()=>{v(this,R)[e]=v(this,R)[e].filter(n=>n!==i)}}$destroy(){v(this,y).$destroy()}}R=new WeakMap,y=new WeakMap;const ze="modulepreload",Je=function(t,e){return new URL(t,e).href},K={},Y=function(e,r,i){let n=Promise.resolve();if(r&&r.length>0){let s=function(u){return Promise.all(u.map(P=>Promise.resolve(P).then(m=>({status:"fulfilled",value:m}),m=>({status:"rejected",reason:m}))))};const a=document.getElementsByTagName("link"),l=document.querySelector("meta[property=csp-nonce]"),S=(l==null?void 0:l.nonce)||(l==null?void 0:l.getAttribute("nonce"));n=s(r.map(u=>{if(u=Je(u,i),u in K)return;K[u]=!0;const P=u.endsWith(".css"),m=P?'[rel="stylesheet"]':"";if(!!i)for(let f=a.length-1;f>=0;f--){const _=a[f];if(_.href===u&&(!P||_.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${u}"]${m}`))return;const d=document.createElement("link");if(d.rel=P?"stylesheet":ze,P||(d.as="script"),d.crossOrigin="",d.href=u,S&&d.setAttribute("nonce",S),document.head.appendChild(d),P)return new Promise((f,_)=>{d.addEventListener("load",f),d.addEventListener("error",()=>_(new Error(`Unable to preload CSS for ${u}`)))})}))}function o(s){const a=new Event("vite:preloadError",{cancelable:!0});if(a.payload=s,window.dispatchEvent(a),!a.defaultPrevented)throw s}return n.then(s=>{for(const a of s||[])a.status==="rejected"&&o(a.reason);return e().catch(o)})},et={};var Ke=Z('<div id="svelte-announcer" aria-live="assertive" aria-atomic="true" style="position: absolute; left: 0; top: 0; clip: rect(0 0 0 0); clip-path: inset(50%); overflow: hidden; white-space: nowrap; width: 1px; height: 1px"><!></div>'),We=Z("<!> <!>",1);function He(t,e){we(e,!0);let r=M(e,"components",23,()=>[]),i=M(e,"data_0",3,null),n=M(e,"data_1",3,null);Ae(()=>e.stores.page.set(e.page)),Le(()=>{e.stores,e.page,e.constructors,r(),e.form,i(),n(),e.stores.page.notify()});let o=k(!1),s=k(!1),a=k(null);Ie(()=>{const f=e.stores.page.subscribe(()=>{E(o)&&(L(s,!0),xe().then(()=>{L(a,document.title||"untitled page",!0)}))});return L(o,!0),f});const l=C(()=>e.constructors[1]);var S=We(),u=x(S);{var P=f=>{const _=C(()=>e.constructors[0]);var g=N(),O=x(g);q(O,()=>E(_),(b,c)=>{F(c(b,{get data(){return i()},get form(){return e.form},get params(){return e.page.params},children:(h,B)=>{var G=N(),p=x(G);q(p,()=>E(l),($,ee)=>{F(ee($,{get data(){return n()},get form(){return e.form},get params(){return e.page.params}}),I=>r()[1]=I,()=>{var I;return(I=r())==null?void 0:I[1]})}),w(h,G)},$$slots:{default:!0}}),h=>r()[0]=h,()=>{var h;return(h=r())==null?void 0:h[0]})}),w(f,g)},m=f=>{const _=C(()=>e.constructors[0]);var g=N(),O=x(g);q(O,()=>E(_),(b,c)=>{F(c(b,{get data(){return i()},get form(){return e.form},get params(){return e.page.params}}),h=>r()[0]=h,()=>{var h;return(h=r())==null?void 0:h[0]})}),w(f,g)};U(u,f=>{e.constructors[1]?f(P):f(m,!1)})}var A=Te(u,2);{var d=f=>{var _=Ke(),g=De(_);{var O=b=>{var c=qe();ke(()=>Fe(c,E(a))),w(b,c)};U(g,b=>{E(s)&&b(O)})}je(_),w(f,_)};U(A,f=>{E(o)&&f(d)})}w(t,S),Be()}const tt=Ge(He),rt=[()=>Y(()=>import("../nodes/0.Cd8eOV9t.js"),__vite__mapDeps([0,1,2,3,4,5]),import.meta.url),()=>Y(()=>import("../nodes/1.CoCWmd0q.js"),__vite__mapDeps([6,1,2,7]),import.meta.url),()=>Y(()=>import("../nodes/2.DqJoUS41.js"),__vite__mapDeps([8,1,2,3,4]),import.meta.url)],at=[],st={"/":[2]},X={handleError:(({error:t})=>{console.error(t)}),reroute:(()=>{}),transport:{}},Qe=Object.fromEntries(Object.entries(X.transport).map(([t,e])=>[t,e.decode])),nt=Object.fromEntries(Object.entries(X.transport).map(([t,e])=>[t,e.encode])),it=!1,ot=(t,e)=>Qe[t](e);export{ot as decode,Qe as decoders,st as dictionary,nt as encoders,it as hash,X as hooks,et as matchers,rt as nodes,tt as root,at as server_loads};
@@ -0,0 +1 @@
1
+ import{l as o,a as r}from"../chunks/DUEukD6E.js";export{o as load_css,r as start};
@@ -1 +1 @@
1
- import{f as b,a as x,s as l}from"../chunks/ChOgyrGO.js";import{I as k,J as y,K as i,L as $,M as u,N as w,F as v,O as D,P as E,Q as F,t as G,v as I,x as J,y as K,w as m,G as _,D as L}from"../chunks/B4TJWzDE.js";import{s as M,p as g}from"../chunks/DUFLAPco.js";function N(a=!1){const t=k,e=t.l.u;if(!e)return;let r=()=>D(t.s);if(a){let o=0,s={};const c=E(()=>{let n=!1;const p=t.s;for(const f in p)p[f]!==s[f]&&(s[f]=p[f],n=!0);return n&&o++,o});r=()=>v(c)}e.b.length&&y(()=>{d(t,r),u(e.b)}),i(()=>{const o=$(()=>e.m.map(w));return()=>{for(const s of o)typeof s=="function"&&s()}}),e.a.length&&i(()=>{d(t,r),u(e.a)})}function d(a,t){if(a.l.s)for(const e of a.l.s)v(e);t()}F();const O={get error(){return g.error},get status(){return g.status}};M.updated.check;const h=O;var P=b("<h1> </h1> <p> </p>",1);function z(a,t){G(t,!1),N();var e=P(),r=I(e),o=m(r,!0);_(r);var s=L(r,2),c=m(s,!0);_(s),J(()=>{var n;l(o,h.status),l(c,(n=h.error)==null?void 0:n.message)}),x(a,e),K()}export{z as component};
1
+ import{f as b,a as x,s as l}from"../chunks/ChOgyrGO.js";import{I as k,J as y,K as i,L as $,M as u,N as w,F as v,O as D,P as E,Q as F,t as G,v as I,x as J,y as K,w as m,G as _,D as L}from"../chunks/B4TJWzDE.js";import{s as M,p as g}from"../chunks/DUEukD6E.js";function N(a=!1){const t=k,e=t.l.u;if(!e)return;let r=()=>D(t.s);if(a){let o=0,s={};const c=E(()=>{let n=!1;const p=t.s;for(const f in p)p[f]!==s[f]&&(s[f]=p[f],n=!0);return n&&o++,o});r=()=>v(c)}e.b.length&&y(()=>{d(t,r),u(e.b)}),i(()=>{const o=$(()=>e.m.map(w));return()=>{for(const s of o)typeof s=="function"&&s()}}),e.a.length&&i(()=>{d(t,r),u(e.a)})}function d(a,t){if(a.l.s)for(const e of a.l.s)v(e);t()}F();const O={get error(){return g.error},get status(){return g.status}};M.updated.check;const h=O;var P=b("<h1> </h1> <p> </p>",1);function z(a,t){G(t,!1),N();var e=P(),r=I(e),o=m(r,!0);_(r);var s=L(r,2),c=m(s,!0);_(s),J(()=>{var n;l(o,h.status),l(c,(n=h.error)==null?void 0:n.message)}),x(a,e),K()}export{z as component};
@@ -1 +1 @@
1
- {"version":"1765527070894"}
1
+ {"version":"1765540397292"}
@@ -1,9 +1,9 @@
1
1
  const index = 1;
2
2
  let component_cache;
3
3
  const component = async () => component_cache ??= (await import('./error.svelte-DazOwnSn.js')).default;
4
- const imports = ["_app/immutable/nodes/1.DVVhj1K8.js","_app/immutable/chunks/ChOgyrGO.js","_app/immutable/chunks/B4TJWzDE.js","_app/immutable/chunks/DUFLAPco.js"];
4
+ const imports = ["_app/immutable/nodes/1.CoCWmd0q.js","_app/immutable/chunks/ChOgyrGO.js","_app/immutable/chunks/B4TJWzDE.js","_app/immutable/chunks/DUEukD6E.js"];
5
5
  const stylesheets = [];
6
6
  const fonts = [];
7
7
 
8
8
  export { component, fonts, imports, index, stylesheets };
9
- //# sourceMappingURL=1-B6558drr.js.map
9
+ //# sourceMappingURL=1-BNMjiqhE.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"1-B6558drr.js","sources":["../../../../web/.svelte-kit/adapter-node/nodes/1.js"],"sourcesContent":["\n\nexport const index = 1;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/fallbacks/error.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/1.DVVhj1K8.js\",\"_app/immutable/chunks/ChOgyrGO.js\",\"_app/immutable/chunks/B4TJWzDE.js\",\"_app/immutable/chunks/DUFLAPco.js\"];\nexport const stylesheets = [];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAAsC,CAAC,EAAE;AACpG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AAC5J,MAAC,WAAW,GAAG;AACf,MAAC,KAAK,GAAG;;;;"}
1
+ {"version":3,"file":"1-BNMjiqhE.js","sources":["../../../../web/.svelte-kit/adapter-node/nodes/1.js"],"sourcesContent":["\n\nexport const index = 1;\nlet component_cache;\nexport const component = async () => component_cache ??= (await import('../entries/fallbacks/error.svelte.js')).default;\nexport const imports = [\"_app/immutable/nodes/1.CoCWmd0q.js\",\"_app/immutable/chunks/ChOgyrGO.js\",\"_app/immutable/chunks/B4TJWzDE.js\",\"_app/immutable/chunks/DUEukD6E.js\"];\nexport const stylesheets = [];\nexport const fonts = [];\n"],"names":[],"mappings":"AAEY,MAAC,KAAK,GAAG;AACrB,IAAI,eAAe;AACP,MAAC,SAAS,GAAG,YAAY,eAAe,KAAK,CAAC,MAAM,OAAO,4BAAsC,CAAC,EAAE;AACpG,MAAC,OAAO,GAAG,CAAC,oCAAoC,CAAC,mCAAmC,CAAC,mCAAmC,CAAC,mCAAmC;AAC5J,MAAC,WAAW,GAAG;AACf,MAAC,KAAK,GAAG;;;;"}
@@ -3450,7 +3450,7 @@ const options = {
3450
3450
  <div class="error">
3451
3451
  <span class="status">` + status + '</span>\n <div class="message">\n <h1>' + message + "</h1>\n </div>\n </div>\n </body>\n</html>\n"
3452
3452
  },
3453
- version_hash: "cw9l4i"
3453
+ version_hash: "11n5705"
3454
3454
  };
3455
3455
  async function get_hooks() {
3456
3456
  let handle;