mindpm 1.2.0 → 1.2.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.
package/dist/index.js
CHANGED
|
@@ -705,302 +705,6 @@ function registerNoteTools(server2) {
|
|
|
705
705
|
|
|
706
706
|
// src/tools/sessions.ts
|
|
707
707
|
import { z as z5 } from "zod/v4";
|
|
708
|
-
function getActivitySince(db2, projectId, cutoffTime) {
|
|
709
|
-
return db2.prepare(`
|
|
710
|
-
SELECT 'task_created' as type, id, title, created_at as timestamp
|
|
711
|
-
FROM tasks
|
|
712
|
-
WHERE project_id = ? AND created_at > ?
|
|
713
|
-
UNION ALL
|
|
714
|
-
SELECT 'task_updated' as type, id, title, updated_at as timestamp
|
|
715
|
-
FROM tasks
|
|
716
|
-
WHERE project_id = ? AND updated_at > ? AND updated_at != created_at
|
|
717
|
-
UNION ALL
|
|
718
|
-
SELECT 'decision' as type, id, title, created_at as timestamp
|
|
719
|
-
FROM decisions
|
|
720
|
-
WHERE project_id = ? AND created_at > ?
|
|
721
|
-
UNION ALL
|
|
722
|
-
SELECT 'note' as type, id, substr(content, 1, 80) as title, created_at as timestamp
|
|
723
|
-
FROM notes
|
|
724
|
-
WHERE project_id = ? AND created_at > ?
|
|
725
|
-
ORDER BY timestamp DESC
|
|
726
|
-
`).all(
|
|
727
|
-
projectId,
|
|
728
|
-
cutoffTime,
|
|
729
|
-
projectId,
|
|
730
|
-
cutoffTime,
|
|
731
|
-
projectId,
|
|
732
|
-
cutoffTime,
|
|
733
|
-
projectId,
|
|
734
|
-
cutoffTime
|
|
735
|
-
);
|
|
736
|
-
}
|
|
737
|
-
function registerSessionTools(server2) {
|
|
738
|
-
server2.registerTool(
|
|
739
|
-
"start_session",
|
|
740
|
-
{
|
|
741
|
-
title: "Start Session",
|
|
742
|
-
description: "Begin a work session for a project. Returns the full project overview including last session's next_steps, active tasks, blockers, and recent decisions. Call this at the start of every conversation.",
|
|
743
|
-
inputSchema: {
|
|
744
|
-
project: z5.string().optional().describe("Project name or ID")
|
|
745
|
-
}
|
|
746
|
-
},
|
|
747
|
-
async ({ project }) => {
|
|
748
|
-
const resolved = resolveProjectOrDefault(project);
|
|
749
|
-
if (!resolved) {
|
|
750
|
-
return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found. Create a project first." }], isError: true };
|
|
751
|
-
}
|
|
752
|
-
const db2 = getDb();
|
|
753
|
-
const projectRow = db2.prepare("SELECT * FROM projects WHERE id = ?").get(resolved.id);
|
|
754
|
-
let lastSession = db2.prepare("SELECT * FROM sessions WHERE project_id = ? ORDER BY created_at DESC LIMIT 1").get(resolved.id);
|
|
755
|
-
const cutoffTime = lastSession?.created_at ?? "1970-01-01";
|
|
756
|
-
const recentActivity = getActivitySince(db2, resolved.id, cutoffTime);
|
|
757
|
-
if (recentActivity.length > 0) {
|
|
758
|
-
const taskIds = [...new Set(
|
|
759
|
-
recentActivity.filter((a) => a.type === "task_created" || a.type === "task_updated").map((a) => a.id)
|
|
760
|
-
)];
|
|
761
|
-
const decisionIds = [...new Set(
|
|
762
|
-
recentActivity.filter((a) => a.type === "decision").map((a) => a.id)
|
|
763
|
-
)];
|
|
764
|
-
const syntheticId = generateId();
|
|
765
|
-
db2.prepare(
|
|
766
|
-
`INSERT INTO sessions (id, project_id, summary, tasks_worked_on, decisions_made) VALUES (?, ?, ?, ?, ?)`
|
|
767
|
-
).run(
|
|
768
|
-
syntheticId,
|
|
769
|
-
resolved.id,
|
|
770
|
-
`Auto-generated: ${recentActivity.length} activities since last session`,
|
|
771
|
-
taskIds.length > 0 ? JSON.stringify(taskIds) : null,
|
|
772
|
-
decisionIds.length > 0 ? JSON.stringify(decisionIds) : null
|
|
773
|
-
);
|
|
774
|
-
lastSession = db2.prepare("SELECT * FROM sessions WHERE project_id = ? ORDER BY created_at DESC LIMIT 1").get(resolved.id);
|
|
775
|
-
}
|
|
776
|
-
const activeTasks = db2.prepare(
|
|
777
|
-
`SELECT id, title, status, priority, tags FROM tasks
|
|
778
|
-
WHERE project_id = ? AND status NOT IN ('done', 'cancelled')
|
|
779
|
-
ORDER BY CASE priority WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 WHEN 'low' THEN 3 END`
|
|
780
|
-
).all(resolved.id);
|
|
781
|
-
const blockedTasks = db2.prepare("SELECT id, title, blocked_by FROM tasks WHERE project_id = ? AND status = 'blocked'").all(resolved.id);
|
|
782
|
-
const recentDecisions = db2.prepare("SELECT id, title, decision, created_at FROM decisions WHERE project_id = ? ORDER BY created_at DESC LIMIT 5").all(resolved.id);
|
|
783
|
-
const taskCounts = db2.prepare("SELECT status, COUNT(*) as count FROM tasks WHERE project_id = ? GROUP BY status").all(resolved.id);
|
|
784
|
-
const contextItems = db2.prepare("SELECT key, value, category FROM context WHERE project_id = ? ORDER BY category, key").all(resolved.id);
|
|
785
|
-
db2.prepare("UPDATE projects SET status = status WHERE id = ?").run(resolved.id);
|
|
786
|
-
const result = {
|
|
787
|
-
project: projectRow,
|
|
788
|
-
last_session: lastSession ? {
|
|
789
|
-
summary: lastSession.summary,
|
|
790
|
-
next_steps: lastSession.next_steps,
|
|
791
|
-
when: lastSession.created_at
|
|
792
|
-
} : null,
|
|
793
|
-
recent_activity: recentActivity.slice(0, 20),
|
|
794
|
-
task_summary: taskCounts,
|
|
795
|
-
active_tasks: activeTasks,
|
|
796
|
-
blocked_tasks: blockedTasks,
|
|
797
|
-
recent_decisions: recentDecisions,
|
|
798
|
-
context: contextItems
|
|
799
|
-
};
|
|
800
|
-
return {
|
|
801
|
-
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
802
|
-
};
|
|
803
|
-
}
|
|
804
|
-
);
|
|
805
|
-
server2.registerTool(
|
|
806
|
-
"end_session",
|
|
807
|
-
{
|
|
808
|
-
title: "End Session",
|
|
809
|
-
description: "End a work session with a summary of what was accomplished and what to do next. Call this when the user is done working.",
|
|
810
|
-
inputSchema: {
|
|
811
|
-
project: z5.string().optional().describe("Project name or ID"),
|
|
812
|
-
summary: z5.string().describe("Summary of what was accomplished this session"),
|
|
813
|
-
tasks_worked_on: z5.array(z5.string()).optional().describe("Task IDs that were worked on"),
|
|
814
|
-
decisions_made: z5.array(z5.string()).optional().describe("Decision IDs that were made"),
|
|
815
|
-
next_steps: z5.string().optional().describe("What to do next time")
|
|
816
|
-
}
|
|
817
|
-
},
|
|
818
|
-
async ({ project, summary, tasks_worked_on, decisions_made, next_steps }) => {
|
|
819
|
-
const resolved = resolveProjectOrDefault(project);
|
|
820
|
-
if (!resolved) {
|
|
821
|
-
return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found." }], isError: true };
|
|
822
|
-
}
|
|
823
|
-
const db2 = getDb();
|
|
824
|
-
const id = generateId();
|
|
825
|
-
db2.prepare(
|
|
826
|
-
`INSERT INTO sessions (id, project_id, summary, tasks_worked_on, decisions_made, next_steps) VALUES (?, ?, ?, ?, ?, ?)`
|
|
827
|
-
).run(
|
|
828
|
-
id,
|
|
829
|
-
resolved.id,
|
|
830
|
-
summary,
|
|
831
|
-
tasks_worked_on ? JSON.stringify(tasks_worked_on) : null,
|
|
832
|
-
decisions_made ? JSON.stringify(decisions_made) : null,
|
|
833
|
-
next_steps ?? null
|
|
834
|
-
);
|
|
835
|
-
return {
|
|
836
|
-
content: [{
|
|
837
|
-
type: "text",
|
|
838
|
-
text: JSON.stringify({ session_id: id, message: `Session ended for ${resolved.name}. Summary saved.` })
|
|
839
|
-
}]
|
|
840
|
-
};
|
|
841
|
-
}
|
|
842
|
-
);
|
|
843
|
-
}
|
|
844
|
-
|
|
845
|
-
// src/tools/queries.ts
|
|
846
|
-
import { z as z6 } from "zod/v4";
|
|
847
|
-
function registerQueryTools(server2) {
|
|
848
|
-
server2.registerTool(
|
|
849
|
-
"query",
|
|
850
|
-
{
|
|
851
|
-
title: "Query Database",
|
|
852
|
-
description: "Execute a read-only SQL query against the database. Only SELECT statements are allowed. Use this for custom queries not covered by other tools.",
|
|
853
|
-
inputSchema: {
|
|
854
|
-
sql: z6.string().describe("SQL SELECT query to execute")
|
|
855
|
-
}
|
|
856
|
-
},
|
|
857
|
-
async ({ sql }) => {
|
|
858
|
-
const trimmed = sql.trim();
|
|
859
|
-
if (!trimmed.toUpperCase().startsWith("SELECT")) {
|
|
860
|
-
return { content: [{ type: "text", text: "Only SELECT queries are allowed." }], isError: true };
|
|
861
|
-
}
|
|
862
|
-
const db2 = getDb();
|
|
863
|
-
try {
|
|
864
|
-
const stmt = db2.prepare(trimmed);
|
|
865
|
-
if (!stmt.reader) {
|
|
866
|
-
return { content: [{ type: "text", text: "Only read-only queries are allowed." }], isError: true };
|
|
867
|
-
}
|
|
868
|
-
const rows = stmt.all();
|
|
869
|
-
return {
|
|
870
|
-
content: [{ type: "text", text: JSON.stringify({ rows, count: rows.length }, null, 2) }]
|
|
871
|
-
};
|
|
872
|
-
} catch (e) {
|
|
873
|
-
return { content: [{ type: "text", text: `Query error: ${e.message}` }], isError: true };
|
|
874
|
-
}
|
|
875
|
-
}
|
|
876
|
-
);
|
|
877
|
-
server2.registerTool(
|
|
878
|
-
"get_project_summary",
|
|
879
|
-
{
|
|
880
|
-
title: "Get Project Summary",
|
|
881
|
-
description: "High-level summary of a project: total tasks by status, recent activity, open blockers, and upcoming priorities.",
|
|
882
|
-
inputSchema: {
|
|
883
|
-
project: z6.string().optional().describe("Project name or ID")
|
|
884
|
-
}
|
|
885
|
-
},
|
|
886
|
-
async ({ project }) => {
|
|
887
|
-
const resolved = resolveProjectOrDefault(project);
|
|
888
|
-
if (!resolved) {
|
|
889
|
-
return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found." }], isError: true };
|
|
890
|
-
}
|
|
891
|
-
const db2 = getDb();
|
|
892
|
-
const tasksByStatus = db2.prepare("SELECT status, COUNT(*) as count FROM tasks WHERE project_id = ? GROUP BY status").all(resolved.id);
|
|
893
|
-
const blockers = db2.prepare("SELECT id, title, blocked_by FROM tasks WHERE project_id = ? AND status = 'blocked'").all(resolved.id);
|
|
894
|
-
const upcomingPriorities = db2.prepare(
|
|
895
|
-
`SELECT id, title, priority, status FROM tasks
|
|
896
|
-
WHERE project_id = ? AND status IN ('todo', 'in_progress')
|
|
897
|
-
ORDER BY CASE priority WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 WHEN 'low' THEN 3 END
|
|
898
|
-
LIMIT 10`
|
|
899
|
-
).all(resolved.id);
|
|
900
|
-
const recentActivity = db2.prepare(
|
|
901
|
-
`SELECT 'task' as type, title, updated_at FROM tasks WHERE project_id = ? AND updated_at > datetime('now', '-7 days')
|
|
902
|
-
UNION ALL
|
|
903
|
-
SELECT 'decision' as type, title, created_at as updated_at FROM decisions WHERE project_id = ? AND created_at > datetime('now', '-7 days')
|
|
904
|
-
UNION ALL
|
|
905
|
-
SELECT 'note' as type, substr(content, 1, 50) as title, created_at as updated_at FROM notes WHERE project_id = ? AND created_at > datetime('now', '-7 days')
|
|
906
|
-
ORDER BY updated_at DESC
|
|
907
|
-
LIMIT 20`
|
|
908
|
-
).all(resolved.id, resolved.id, resolved.id);
|
|
909
|
-
const totalNotes = db2.prepare("SELECT COUNT(*) as count FROM notes WHERE project_id = ?").get(resolved.id);
|
|
910
|
-
const totalDecisions = db2.prepare("SELECT COUNT(*) as count FROM decisions WHERE project_id = ?").get(resolved.id);
|
|
911
|
-
const totalSessions = db2.prepare("SELECT COUNT(*) as count FROM sessions WHERE project_id = ?").get(resolved.id);
|
|
912
|
-
return {
|
|
913
|
-
content: [{
|
|
914
|
-
type: "text",
|
|
915
|
-
text: JSON.stringify(
|
|
916
|
-
{
|
|
917
|
-
project: resolved.name,
|
|
918
|
-
tasks_by_status: tasksByStatus,
|
|
919
|
-
blockers,
|
|
920
|
-
upcoming_priorities: upcomingPriorities,
|
|
921
|
-
recent_activity: recentActivity,
|
|
922
|
-
totals: { notes: totalNotes.count, decisions: totalDecisions.count, sessions: totalSessions.count }
|
|
923
|
-
},
|
|
924
|
-
null,
|
|
925
|
-
2
|
|
926
|
-
)
|
|
927
|
-
}]
|
|
928
|
-
};
|
|
929
|
-
}
|
|
930
|
-
);
|
|
931
|
-
server2.registerTool(
|
|
932
|
-
"get_blockers",
|
|
933
|
-
{
|
|
934
|
-
title: "Get Blockers",
|
|
935
|
-
description: "List all blocked tasks with what's blocking them.",
|
|
936
|
-
inputSchema: {
|
|
937
|
-
project: z6.string().optional().describe("Project name or ID")
|
|
938
|
-
}
|
|
939
|
-
},
|
|
940
|
-
async ({ project }) => {
|
|
941
|
-
const resolved = resolveProjectOrDefault(project);
|
|
942
|
-
if (!resolved) {
|
|
943
|
-
return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found." }], isError: true };
|
|
944
|
-
}
|
|
945
|
-
const db2 = getDb();
|
|
946
|
-
const blockers = db2.prepare("SELECT * FROM tasks WHERE project_id = ? AND status = 'blocked'").all(resolved.id);
|
|
947
|
-
const enriched = blockers.map((task) => {
|
|
948
|
-
let blockingTasks = [];
|
|
949
|
-
if (task.blocked_by) {
|
|
950
|
-
try {
|
|
951
|
-
const ids = JSON.parse(task.blocked_by);
|
|
952
|
-
blockingTasks = ids.map((id) => {
|
|
953
|
-
const blocking = db2.prepare("SELECT id, title, status FROM tasks WHERE id = ?").get(id);
|
|
954
|
-
return blocking ?? { id, title: "Unknown task", status: "unknown" };
|
|
955
|
-
});
|
|
956
|
-
} catch {
|
|
957
|
-
}
|
|
958
|
-
}
|
|
959
|
-
return { ...task, blocking_tasks: blockingTasks };
|
|
960
|
-
});
|
|
961
|
-
return {
|
|
962
|
-
content: [{ type: "text", text: JSON.stringify({ project: resolved.name, blockers: enriched }, null, 2) }]
|
|
963
|
-
};
|
|
964
|
-
}
|
|
965
|
-
);
|
|
966
|
-
server2.registerTool(
|
|
967
|
-
"search",
|
|
968
|
-
{
|
|
969
|
-
title: "Search Everything",
|
|
970
|
-
description: "Full-text search across tasks, notes, and decisions for a project.",
|
|
971
|
-
inputSchema: {
|
|
972
|
-
project: z6.string().optional().describe("Project name or ID"),
|
|
973
|
-
query: z6.string().describe("Search query")
|
|
974
|
-
}
|
|
975
|
-
},
|
|
976
|
-
async ({ project, query }) => {
|
|
977
|
-
const resolved = resolveProjectOrDefault(project);
|
|
978
|
-
if (!resolved) {
|
|
979
|
-
return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found." }], isError: true };
|
|
980
|
-
}
|
|
981
|
-
const db2 = getDb();
|
|
982
|
-
const pattern = `%${query}%`;
|
|
983
|
-
const tasks = db2.prepare("SELECT id, title, description, status, priority, 'task' as type FROM tasks WHERE project_id = ? AND (title LIKE ? OR description LIKE ?)").all(resolved.id, pattern, pattern);
|
|
984
|
-
const notes = db2.prepare("SELECT id, content, category, 'note' as type FROM notes WHERE project_id = ? AND content LIKE ?").all(resolved.id, pattern);
|
|
985
|
-
const decisions = db2.prepare("SELECT id, title, decision, reasoning, 'decision' as type FROM decisions WHERE project_id = ? AND (title LIKE ? OR decision LIKE ? OR reasoning LIKE ?)").all(resolved.id, pattern, pattern, pattern);
|
|
986
|
-
return {
|
|
987
|
-
content: [{
|
|
988
|
-
type: "text",
|
|
989
|
-
text: JSON.stringify(
|
|
990
|
-
{
|
|
991
|
-
project: resolved.name,
|
|
992
|
-
query,
|
|
993
|
-
results: { tasks, notes, decisions },
|
|
994
|
-
total: tasks.length + notes.length + decisions.length
|
|
995
|
-
},
|
|
996
|
-
null,
|
|
997
|
-
2
|
|
998
|
-
)
|
|
999
|
-
}]
|
|
1000
|
-
};
|
|
1001
|
-
}
|
|
1002
|
-
);
|
|
1003
|
-
}
|
|
1004
708
|
|
|
1005
709
|
// src/server/http.ts
|
|
1006
710
|
import { createServer } from "http";
|
|
@@ -1008,6 +712,7 @@ import { readFile } from "fs/promises";
|
|
|
1008
712
|
import { join, extname } from "path";
|
|
1009
713
|
import { fileURLToPath } from "url";
|
|
1010
714
|
import { dirname as dirname2 } from "path";
|
|
715
|
+
import { spawn } from "child_process";
|
|
1011
716
|
|
|
1012
717
|
// src/server/routes.ts
|
|
1013
718
|
var listProjects = async (_req, res) => {
|
|
@@ -1201,129 +906,445 @@ async function handleApiRequest(req, res) {
|
|
|
1201
906
|
await route.handler(req, res, params);
|
|
1202
907
|
return;
|
|
1203
908
|
}
|
|
1204
|
-
}
|
|
1205
|
-
sendJson(res, 404, { error: "Not found" });
|
|
909
|
+
}
|
|
910
|
+
sendJson(res, 404, { error: "Not found" });
|
|
911
|
+
}
|
|
912
|
+
|
|
913
|
+
// src/server/http.ts
|
|
914
|
+
function openBrowser(url) {
|
|
915
|
+
const platform = process.platform;
|
|
916
|
+
const cmd = platform === "win32" ? "cmd" : platform === "darwin" ? "open" : "xdg-open";
|
|
917
|
+
const args = platform === "win32" ? ["/c", "start", "", url] : [url];
|
|
918
|
+
spawn(cmd, args, { detached: true, stdio: "ignore" }).unref();
|
|
919
|
+
}
|
|
920
|
+
var __filename = fileURLToPath(import.meta.url);
|
|
921
|
+
var __dirname = dirname2(__filename);
|
|
922
|
+
function resolveStaticDir() {
|
|
923
|
+
const scriptDir = dirname2(process.argv[1] || __filename);
|
|
924
|
+
return join(scriptDir, "ui");
|
|
925
|
+
}
|
|
926
|
+
var MIME_TYPES = {
|
|
927
|
+
".html": "text/html; charset=utf-8",
|
|
928
|
+
".js": "application/javascript; charset=utf-8",
|
|
929
|
+
".css": "text/css; charset=utf-8",
|
|
930
|
+
".json": "application/json; charset=utf-8",
|
|
931
|
+
".svg": "image/svg+xml",
|
|
932
|
+
".png": "image/png",
|
|
933
|
+
".jpg": "image/jpeg",
|
|
934
|
+
".ico": "image/x-icon",
|
|
935
|
+
".woff": "font/woff",
|
|
936
|
+
".woff2": "font/woff2",
|
|
937
|
+
".ttf": "font/ttf"
|
|
938
|
+
};
|
|
939
|
+
function parseBody(req) {
|
|
940
|
+
return new Promise((resolve2, reject) => {
|
|
941
|
+
const chunks = [];
|
|
942
|
+
req.on("data", (chunk) => chunks.push(chunk));
|
|
943
|
+
req.on("end", () => {
|
|
944
|
+
if (chunks.length === 0) {
|
|
945
|
+
resolve2({});
|
|
946
|
+
return;
|
|
947
|
+
}
|
|
948
|
+
try {
|
|
949
|
+
resolve2(JSON.parse(Buffer.concat(chunks).toString()));
|
|
950
|
+
} catch {
|
|
951
|
+
resolve2({});
|
|
952
|
+
}
|
|
953
|
+
});
|
|
954
|
+
req.on("error", reject);
|
|
955
|
+
});
|
|
956
|
+
}
|
|
957
|
+
function matchRoute(pattern, pathname) {
|
|
958
|
+
const patternParts = pattern.split("/").filter(Boolean);
|
|
959
|
+
const pathParts = pathname.split("/").filter(Boolean);
|
|
960
|
+
if (patternParts.length !== pathParts.length) return null;
|
|
961
|
+
const params = {};
|
|
962
|
+
for (let i = 0; i < patternParts.length; i++) {
|
|
963
|
+
if (patternParts[i].startsWith(":")) {
|
|
964
|
+
params[patternParts[i].slice(1)] = decodeURIComponent(pathParts[i]);
|
|
965
|
+
} else if (patternParts[i] !== pathParts[i]) {
|
|
966
|
+
return null;
|
|
967
|
+
}
|
|
968
|
+
}
|
|
969
|
+
return params;
|
|
970
|
+
}
|
|
971
|
+
function sendJson(res, status, data) {
|
|
972
|
+
res.writeHead(status, { "Content-Type": "application/json; charset=utf-8" });
|
|
973
|
+
res.end(JSON.stringify(data));
|
|
974
|
+
}
|
|
975
|
+
async function serveStatic(req, res) {
|
|
976
|
+
const staticDir = resolveStaticDir();
|
|
977
|
+
const url = new URL(req.url || "/", "http://localhost");
|
|
978
|
+
let filePath = join(staticDir, url.pathname === "/" ? "index.html" : url.pathname);
|
|
979
|
+
try {
|
|
980
|
+
const content = await readFile(filePath);
|
|
981
|
+
const ext = extname(filePath);
|
|
982
|
+
const contentType = MIME_TYPES[ext] || "application/octet-stream";
|
|
983
|
+
res.writeHead(200, { "Content-Type": contentType });
|
|
984
|
+
res.end(content);
|
|
985
|
+
} catch {
|
|
986
|
+
try {
|
|
987
|
+
const indexPath = join(staticDir, "index.html");
|
|
988
|
+
const content = await readFile(indexPath);
|
|
989
|
+
res.writeHead(200, { "Content-Type": "text/html; charset=utf-8" });
|
|
990
|
+
res.end(content);
|
|
991
|
+
} catch {
|
|
992
|
+
res.writeHead(503, { "Content-Type": "text/html; charset=utf-8" });
|
|
993
|
+
res.end(
|
|
994
|
+
"<html><body><h1>mindpm UI not built</h1><p>Run <code>npm run build:ui</code> to build the Kanban UI.</p></body></html>"
|
|
995
|
+
);
|
|
996
|
+
}
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
var _httpPort = null;
|
|
1000
|
+
function getHttpPort() {
|
|
1001
|
+
return _httpPort;
|
|
1002
|
+
}
|
|
1003
|
+
function startHttpServer(port) {
|
|
1004
|
+
_httpPort = port;
|
|
1005
|
+
const server2 = createServer(async (req, res) => {
|
|
1006
|
+
try {
|
|
1007
|
+
if (req.url?.startsWith("/api/")) {
|
|
1008
|
+
await handleApiRequest(req, res);
|
|
1009
|
+
} else {
|
|
1010
|
+
await serveStatic(req, res);
|
|
1011
|
+
}
|
|
1012
|
+
} catch (err) {
|
|
1013
|
+
process.stderr.write(`[mindpm] HTTP error: ${err}
|
|
1014
|
+
`);
|
|
1015
|
+
if (!res.headersSent) {
|
|
1016
|
+
sendJson(res, 500, { error: "Internal server error" });
|
|
1017
|
+
}
|
|
1018
|
+
}
|
|
1019
|
+
});
|
|
1020
|
+
server2.on("error", (err) => {
|
|
1021
|
+
_httpPort = null;
|
|
1022
|
+
if (err.code === "EADDRINUSE") {
|
|
1023
|
+
process.stderr.write(
|
|
1024
|
+
`[mindpm] Warning: Port ${port} is in use. Kanban UI not available. MCP server continues.
|
|
1025
|
+
`
|
|
1026
|
+
);
|
|
1027
|
+
} else {
|
|
1028
|
+
process.stderr.write(`[mindpm] HTTP server error: ${err.message}
|
|
1029
|
+
`);
|
|
1030
|
+
}
|
|
1031
|
+
});
|
|
1032
|
+
server2.listen(port, () => {
|
|
1033
|
+
const url = `http://localhost:${port}`;
|
|
1034
|
+
process.stderr.write(`[mindpm] Kanban UI available at ${url}
|
|
1035
|
+
`);
|
|
1036
|
+
if (process.env.MINDPM_OPEN_BROWSER === "1") {
|
|
1037
|
+
openBrowser(url);
|
|
1038
|
+
}
|
|
1039
|
+
});
|
|
1040
|
+
return server2;
|
|
1041
|
+
}
|
|
1042
|
+
|
|
1043
|
+
// src/tools/sessions.ts
|
|
1044
|
+
function getActivitySince(db2, projectId, cutoffTime) {
|
|
1045
|
+
return db2.prepare(`
|
|
1046
|
+
SELECT 'task_created' as type, id, title, created_at as timestamp
|
|
1047
|
+
FROM tasks
|
|
1048
|
+
WHERE project_id = ? AND created_at > ?
|
|
1049
|
+
UNION ALL
|
|
1050
|
+
SELECT 'task_updated' as type, id, title, updated_at as timestamp
|
|
1051
|
+
FROM tasks
|
|
1052
|
+
WHERE project_id = ? AND updated_at > ? AND updated_at != created_at
|
|
1053
|
+
UNION ALL
|
|
1054
|
+
SELECT 'decision' as type, id, title, created_at as timestamp
|
|
1055
|
+
FROM decisions
|
|
1056
|
+
WHERE project_id = ? AND created_at > ?
|
|
1057
|
+
UNION ALL
|
|
1058
|
+
SELECT 'note' as type, id, substr(content, 1, 80) as title, created_at as timestamp
|
|
1059
|
+
FROM notes
|
|
1060
|
+
WHERE project_id = ? AND created_at > ?
|
|
1061
|
+
ORDER BY timestamp DESC
|
|
1062
|
+
`).all(
|
|
1063
|
+
projectId,
|
|
1064
|
+
cutoffTime,
|
|
1065
|
+
projectId,
|
|
1066
|
+
cutoffTime,
|
|
1067
|
+
projectId,
|
|
1068
|
+
cutoffTime,
|
|
1069
|
+
projectId,
|
|
1070
|
+
cutoffTime
|
|
1071
|
+
);
|
|
1072
|
+
}
|
|
1073
|
+
function registerSessionTools(server2) {
|
|
1074
|
+
server2.registerTool(
|
|
1075
|
+
"start_session",
|
|
1076
|
+
{
|
|
1077
|
+
title: "Start Session",
|
|
1078
|
+
description: "Begin a work session for a project. Returns the full project overview including last session's next_steps, active tasks, blockers, and recent decisions. Call this at the start of every conversation. IMPORTANT: Always show the kanban_url to the user as a clickable link so they can open the Kanban board.",
|
|
1079
|
+
inputSchema: {
|
|
1080
|
+
project: z5.string().optional().describe("Project name or ID")
|
|
1081
|
+
}
|
|
1082
|
+
},
|
|
1083
|
+
async ({ project }) => {
|
|
1084
|
+
const resolved = resolveProjectOrDefault(project);
|
|
1085
|
+
if (!resolved) {
|
|
1086
|
+
return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found. Create a project first." }], isError: true };
|
|
1087
|
+
}
|
|
1088
|
+
const db2 = getDb();
|
|
1089
|
+
const projectRow = db2.prepare("SELECT * FROM projects WHERE id = ?").get(resolved.id);
|
|
1090
|
+
let lastSession = db2.prepare("SELECT * FROM sessions WHERE project_id = ? ORDER BY created_at DESC LIMIT 1").get(resolved.id);
|
|
1091
|
+
const cutoffTime = lastSession?.created_at ?? "1970-01-01";
|
|
1092
|
+
const recentActivity = getActivitySince(db2, resolved.id, cutoffTime);
|
|
1093
|
+
if (recentActivity.length > 0) {
|
|
1094
|
+
const taskIds = [...new Set(
|
|
1095
|
+
recentActivity.filter((a) => a.type === "task_created" || a.type === "task_updated").map((a) => a.id)
|
|
1096
|
+
)];
|
|
1097
|
+
const decisionIds = [...new Set(
|
|
1098
|
+
recentActivity.filter((a) => a.type === "decision").map((a) => a.id)
|
|
1099
|
+
)];
|
|
1100
|
+
const syntheticId = generateId();
|
|
1101
|
+
db2.prepare(
|
|
1102
|
+
`INSERT INTO sessions (id, project_id, summary, tasks_worked_on, decisions_made) VALUES (?, ?, ?, ?, ?)`
|
|
1103
|
+
).run(
|
|
1104
|
+
syntheticId,
|
|
1105
|
+
resolved.id,
|
|
1106
|
+
`Auto-generated: ${recentActivity.length} activities since last session`,
|
|
1107
|
+
taskIds.length > 0 ? JSON.stringify(taskIds) : null,
|
|
1108
|
+
decisionIds.length > 0 ? JSON.stringify(decisionIds) : null
|
|
1109
|
+
);
|
|
1110
|
+
lastSession = db2.prepare("SELECT * FROM sessions WHERE project_id = ? ORDER BY created_at DESC LIMIT 1").get(resolved.id);
|
|
1111
|
+
}
|
|
1112
|
+
const activeTasks = db2.prepare(
|
|
1113
|
+
`SELECT id, title, status, priority, tags FROM tasks
|
|
1114
|
+
WHERE project_id = ? AND status NOT IN ('done', 'cancelled')
|
|
1115
|
+
ORDER BY CASE priority WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 WHEN 'low' THEN 3 END`
|
|
1116
|
+
).all(resolved.id);
|
|
1117
|
+
const blockedTasks = db2.prepare("SELECT id, title, blocked_by FROM tasks WHERE project_id = ? AND status = 'blocked'").all(resolved.id);
|
|
1118
|
+
const recentDecisions = db2.prepare("SELECT id, title, decision, created_at FROM decisions WHERE project_id = ? ORDER BY created_at DESC LIMIT 5").all(resolved.id);
|
|
1119
|
+
const taskCounts = db2.prepare("SELECT status, COUNT(*) as count FROM tasks WHERE project_id = ? GROUP BY status").all(resolved.id);
|
|
1120
|
+
const contextItems = db2.prepare("SELECT key, value, category FROM context WHERE project_id = ? ORDER BY category, key").all(resolved.id);
|
|
1121
|
+
db2.prepare("UPDATE projects SET status = status WHERE id = ?").run(resolved.id);
|
|
1122
|
+
const port = getHttpPort();
|
|
1123
|
+
const result = {
|
|
1124
|
+
kanban_url: port ? `http://localhost:${port}?project=${resolved.id}` : null,
|
|
1125
|
+
project: projectRow,
|
|
1126
|
+
last_session: lastSession ? {
|
|
1127
|
+
summary: lastSession.summary,
|
|
1128
|
+
next_steps: lastSession.next_steps,
|
|
1129
|
+
when: lastSession.created_at
|
|
1130
|
+
} : null,
|
|
1131
|
+
recent_activity: recentActivity.slice(0, 20),
|
|
1132
|
+
task_summary: taskCounts,
|
|
1133
|
+
active_tasks: activeTasks,
|
|
1134
|
+
blocked_tasks: blockedTasks,
|
|
1135
|
+
recent_decisions: recentDecisions,
|
|
1136
|
+
context: contextItems
|
|
1137
|
+
};
|
|
1138
|
+
return {
|
|
1139
|
+
content: [{ type: "text", text: JSON.stringify(result, null, 2) }]
|
|
1140
|
+
};
|
|
1141
|
+
}
|
|
1142
|
+
);
|
|
1143
|
+
server2.registerTool(
|
|
1144
|
+
"end_session",
|
|
1145
|
+
{
|
|
1146
|
+
title: "End Session",
|
|
1147
|
+
description: "End a work session with a summary of what was accomplished and what to do next. Call this when the user is done working.",
|
|
1148
|
+
inputSchema: {
|
|
1149
|
+
project: z5.string().optional().describe("Project name or ID"),
|
|
1150
|
+
summary: z5.string().describe("Summary of what was accomplished this session"),
|
|
1151
|
+
tasks_worked_on: z5.array(z5.string()).optional().describe("Task IDs that were worked on"),
|
|
1152
|
+
decisions_made: z5.array(z5.string()).optional().describe("Decision IDs that were made"),
|
|
1153
|
+
next_steps: z5.string().optional().describe("What to do next time")
|
|
1154
|
+
}
|
|
1155
|
+
},
|
|
1156
|
+
async ({ project, summary, tasks_worked_on, decisions_made, next_steps }) => {
|
|
1157
|
+
const resolved = resolveProjectOrDefault(project);
|
|
1158
|
+
if (!resolved) {
|
|
1159
|
+
return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found." }], isError: true };
|
|
1160
|
+
}
|
|
1161
|
+
const db2 = getDb();
|
|
1162
|
+
const id = generateId();
|
|
1163
|
+
db2.prepare(
|
|
1164
|
+
`INSERT INTO sessions (id, project_id, summary, tasks_worked_on, decisions_made, next_steps) VALUES (?, ?, ?, ?, ?, ?)`
|
|
1165
|
+
).run(
|
|
1166
|
+
id,
|
|
1167
|
+
resolved.id,
|
|
1168
|
+
summary,
|
|
1169
|
+
tasks_worked_on ? JSON.stringify(tasks_worked_on) : null,
|
|
1170
|
+
decisions_made ? JSON.stringify(decisions_made) : null,
|
|
1171
|
+
next_steps ?? null
|
|
1172
|
+
);
|
|
1173
|
+
return {
|
|
1174
|
+
content: [{
|
|
1175
|
+
type: "text",
|
|
1176
|
+
text: JSON.stringify({ session_id: id, message: `Session ended for ${resolved.name}. Summary saved.` })
|
|
1177
|
+
}]
|
|
1178
|
+
};
|
|
1179
|
+
}
|
|
1180
|
+
);
|
|
1206
1181
|
}
|
|
1207
1182
|
|
|
1208
|
-
// src/
|
|
1209
|
-
|
|
1210
|
-
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
1216
|
-
|
|
1217
|
-
|
|
1218
|
-
|
|
1219
|
-
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1223
|
-
|
|
1224
|
-
".woff": "font/woff",
|
|
1225
|
-
".woff2": "font/woff2",
|
|
1226
|
-
".ttf": "font/ttf"
|
|
1227
|
-
};
|
|
1228
|
-
function parseBody(req) {
|
|
1229
|
-
return new Promise((resolve2, reject) => {
|
|
1230
|
-
const chunks = [];
|
|
1231
|
-
req.on("data", (chunk) => chunks.push(chunk));
|
|
1232
|
-
req.on("end", () => {
|
|
1233
|
-
if (chunks.length === 0) {
|
|
1234
|
-
resolve2({});
|
|
1235
|
-
return;
|
|
1183
|
+
// src/tools/queries.ts
|
|
1184
|
+
import { z as z6 } from "zod/v4";
|
|
1185
|
+
function registerQueryTools(server2) {
|
|
1186
|
+
server2.registerTool(
|
|
1187
|
+
"query",
|
|
1188
|
+
{
|
|
1189
|
+
title: "Query Database",
|
|
1190
|
+
description: "Execute a read-only SQL query against the database. Only SELECT statements are allowed. Use this for custom queries not covered by other tools.",
|
|
1191
|
+
inputSchema: {
|
|
1192
|
+
sql: z6.string().describe("SQL SELECT query to execute")
|
|
1193
|
+
}
|
|
1194
|
+
},
|
|
1195
|
+
async ({ sql }) => {
|
|
1196
|
+
const trimmed = sql.trim();
|
|
1197
|
+
if (!trimmed.toUpperCase().startsWith("SELECT")) {
|
|
1198
|
+
return { content: [{ type: "text", text: "Only SELECT queries are allowed." }], isError: true };
|
|
1236
1199
|
}
|
|
1200
|
+
const db2 = getDb();
|
|
1237
1201
|
try {
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1202
|
+
const stmt = db2.prepare(trimmed);
|
|
1203
|
+
if (!stmt.reader) {
|
|
1204
|
+
return { content: [{ type: "text", text: "Only read-only queries are allowed." }], isError: true };
|
|
1205
|
+
}
|
|
1206
|
+
const rows = stmt.all();
|
|
1207
|
+
return {
|
|
1208
|
+
content: [{ type: "text", text: JSON.stringify({ rows, count: rows.length }, null, 2) }]
|
|
1209
|
+
};
|
|
1210
|
+
} catch (e) {
|
|
1211
|
+
return { content: [{ type: "text", text: `Query error: ${e.message}` }], isError: true };
|
|
1241
1212
|
}
|
|
1242
|
-
});
|
|
1243
|
-
req.on("error", reject);
|
|
1244
|
-
});
|
|
1245
|
-
}
|
|
1246
|
-
function matchRoute(pattern, pathname) {
|
|
1247
|
-
const patternParts = pattern.split("/").filter(Boolean);
|
|
1248
|
-
const pathParts = pathname.split("/").filter(Boolean);
|
|
1249
|
-
if (patternParts.length !== pathParts.length) return null;
|
|
1250
|
-
const params = {};
|
|
1251
|
-
for (let i = 0; i < patternParts.length; i++) {
|
|
1252
|
-
if (patternParts[i].startsWith(":")) {
|
|
1253
|
-
params[patternParts[i].slice(1)] = decodeURIComponent(pathParts[i]);
|
|
1254
|
-
} else if (patternParts[i] !== pathParts[i]) {
|
|
1255
|
-
return null;
|
|
1256
1213
|
}
|
|
1257
|
-
|
|
1258
|
-
|
|
1259
|
-
|
|
1260
|
-
|
|
1261
|
-
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
|
|
1265
|
-
|
|
1266
|
-
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1214
|
+
);
|
|
1215
|
+
server2.registerTool(
|
|
1216
|
+
"get_project_summary",
|
|
1217
|
+
{
|
|
1218
|
+
title: "Get Project Summary",
|
|
1219
|
+
description: "High-level summary of a project: total tasks by status, recent activity, open blockers, and upcoming priorities.",
|
|
1220
|
+
inputSchema: {
|
|
1221
|
+
project: z6.string().optional().describe("Project name or ID")
|
|
1222
|
+
}
|
|
1223
|
+
},
|
|
1224
|
+
async ({ project }) => {
|
|
1225
|
+
const resolved = resolveProjectOrDefault(project);
|
|
1226
|
+
if (!resolved) {
|
|
1227
|
+
return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found." }], isError: true };
|
|
1228
|
+
}
|
|
1229
|
+
const db2 = getDb();
|
|
1230
|
+
const tasksByStatus = db2.prepare("SELECT status, COUNT(*) as count FROM tasks WHERE project_id = ? GROUP BY status").all(resolved.id);
|
|
1231
|
+
const blockers = db2.prepare("SELECT id, title, blocked_by FROM tasks WHERE project_id = ? AND status = 'blocked'").all(resolved.id);
|
|
1232
|
+
const upcomingPriorities = db2.prepare(
|
|
1233
|
+
`SELECT id, title, priority, status FROM tasks
|
|
1234
|
+
WHERE project_id = ? AND status IN ('todo', 'in_progress')
|
|
1235
|
+
ORDER BY CASE priority WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 WHEN 'low' THEN 3 END
|
|
1236
|
+
LIMIT 10`
|
|
1237
|
+
).all(resolved.id);
|
|
1238
|
+
const recentActivity = db2.prepare(
|
|
1239
|
+
`SELECT 'task' as type, title, updated_at FROM tasks WHERE project_id = ? AND updated_at > datetime('now', '-7 days')
|
|
1240
|
+
UNION ALL
|
|
1241
|
+
SELECT 'decision' as type, title, created_at as updated_at FROM decisions WHERE project_id = ? AND created_at > datetime('now', '-7 days')
|
|
1242
|
+
UNION ALL
|
|
1243
|
+
SELECT 'note' as type, substr(content, 1, 50) as title, created_at as updated_at FROM notes WHERE project_id = ? AND created_at > datetime('now', '-7 days')
|
|
1244
|
+
ORDER BY updated_at DESC
|
|
1245
|
+
LIMIT 20`
|
|
1246
|
+
).all(resolved.id, resolved.id, resolved.id);
|
|
1247
|
+
const totalNotes = db2.prepare("SELECT COUNT(*) as count FROM notes WHERE project_id = ?").get(resolved.id);
|
|
1248
|
+
const totalDecisions = db2.prepare("SELECT COUNT(*) as count FROM decisions WHERE project_id = ?").get(resolved.id);
|
|
1249
|
+
const totalSessions = db2.prepare("SELECT COUNT(*) as count FROM sessions WHERE project_id = ?").get(resolved.id);
|
|
1250
|
+
return {
|
|
1251
|
+
content: [{
|
|
1252
|
+
type: "text",
|
|
1253
|
+
text: JSON.stringify(
|
|
1254
|
+
{
|
|
1255
|
+
project: resolved.name,
|
|
1256
|
+
tasks_by_status: tasksByStatus,
|
|
1257
|
+
blockers,
|
|
1258
|
+
upcoming_priorities: upcomingPriorities,
|
|
1259
|
+
recent_activity: recentActivity,
|
|
1260
|
+
totals: { notes: totalNotes.count, decisions: totalDecisions.count, sessions: totalSessions.count }
|
|
1261
|
+
},
|
|
1262
|
+
null,
|
|
1263
|
+
2
|
|
1264
|
+
)
|
|
1265
|
+
}]
|
|
1266
|
+
};
|
|
1285
1267
|
}
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
await serveStatic(req, res);
|
|
1268
|
+
);
|
|
1269
|
+
server2.registerTool(
|
|
1270
|
+
"get_blockers",
|
|
1271
|
+
{
|
|
1272
|
+
title: "Get Blockers",
|
|
1273
|
+
description: "List all blocked tasks with what's blocking them.",
|
|
1274
|
+
inputSchema: {
|
|
1275
|
+
project: z6.string().optional().describe("Project name or ID")
|
|
1295
1276
|
}
|
|
1296
|
-
}
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
if (!
|
|
1300
|
-
|
|
1277
|
+
},
|
|
1278
|
+
async ({ project }) => {
|
|
1279
|
+
const resolved = resolveProjectOrDefault(project);
|
|
1280
|
+
if (!resolved) {
|
|
1281
|
+
return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found." }], isError: true };
|
|
1301
1282
|
}
|
|
1283
|
+
const db2 = getDb();
|
|
1284
|
+
const blockers = db2.prepare("SELECT * FROM tasks WHERE project_id = ? AND status = 'blocked'").all(resolved.id);
|
|
1285
|
+
const enriched = blockers.map((task) => {
|
|
1286
|
+
let blockingTasks = [];
|
|
1287
|
+
if (task.blocked_by) {
|
|
1288
|
+
try {
|
|
1289
|
+
const ids = JSON.parse(task.blocked_by);
|
|
1290
|
+
blockingTasks = ids.map((id) => {
|
|
1291
|
+
const blocking = db2.prepare("SELECT id, title, status FROM tasks WHERE id = ?").get(id);
|
|
1292
|
+
return blocking ?? { id, title: "Unknown task", status: "unknown" };
|
|
1293
|
+
});
|
|
1294
|
+
} catch {
|
|
1295
|
+
}
|
|
1296
|
+
}
|
|
1297
|
+
return { ...task, blocking_tasks: blockingTasks };
|
|
1298
|
+
});
|
|
1299
|
+
return {
|
|
1300
|
+
content: [{ type: "text", text: JSON.stringify({ project: resolved.name, blockers: enriched }, null, 2) }]
|
|
1301
|
+
};
|
|
1302
1302
|
}
|
|
1303
|
-
|
|
1304
|
-
server2.
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1303
|
+
);
|
|
1304
|
+
server2.registerTool(
|
|
1305
|
+
"search",
|
|
1306
|
+
{
|
|
1307
|
+
title: "Search Everything",
|
|
1308
|
+
description: "Full-text search across tasks, notes, and decisions for a project.",
|
|
1309
|
+
inputSchema: {
|
|
1310
|
+
project: z6.string().optional().describe("Project name or ID"),
|
|
1311
|
+
query: z6.string().describe("Search query")
|
|
1312
|
+
}
|
|
1313
|
+
},
|
|
1314
|
+
async ({ project, query }) => {
|
|
1315
|
+
const resolved = resolveProjectOrDefault(project);
|
|
1316
|
+
if (!resolved) {
|
|
1317
|
+
return { content: [{ type: "text", text: project ? `Project "${project}" not found.` : "No active projects found." }], isError: true };
|
|
1318
|
+
}
|
|
1319
|
+
const db2 = getDb();
|
|
1320
|
+
const pattern = `%${query}%`;
|
|
1321
|
+
const tasks = db2.prepare("SELECT id, title, description, status, priority, 'task' as type FROM tasks WHERE project_id = ? AND (title LIKE ? OR description LIKE ?)").all(resolved.id, pattern, pattern);
|
|
1322
|
+
const notes = db2.prepare("SELECT id, content, category, 'note' as type FROM notes WHERE project_id = ? AND content LIKE ?").all(resolved.id, pattern);
|
|
1323
|
+
const decisions = db2.prepare("SELECT id, title, decision, reasoning, 'decision' as type FROM decisions WHERE project_id = ? AND (title LIKE ? OR decision LIKE ? OR reasoning LIKE ?)").all(resolved.id, pattern, pattern, pattern);
|
|
1324
|
+
return {
|
|
1325
|
+
content: [{
|
|
1326
|
+
type: "text",
|
|
1327
|
+
text: JSON.stringify(
|
|
1328
|
+
{
|
|
1329
|
+
project: resolved.name,
|
|
1330
|
+
query,
|
|
1331
|
+
results: { tasks, notes, decisions },
|
|
1332
|
+
total: tasks.length + notes.length + decisions.length
|
|
1333
|
+
},
|
|
1334
|
+
null,
|
|
1335
|
+
2
|
|
1336
|
+
)
|
|
1337
|
+
}]
|
|
1338
|
+
};
|
|
1313
1339
|
}
|
|
1314
|
-
|
|
1315
|
-
server2.listen(port, () => {
|
|
1316
|
-
process.stderr.write(`[mindpm] Kanban UI available at http://localhost:${port}
|
|
1317
|
-
`);
|
|
1318
|
-
});
|
|
1319
|
-
return server2;
|
|
1340
|
+
);
|
|
1320
1341
|
}
|
|
1321
1342
|
|
|
1322
1343
|
// src/index.ts
|
|
1323
1344
|
var server = new McpServer(
|
|
1324
1345
|
{
|
|
1325
1346
|
name: "mindpm",
|
|
1326
|
-
version: "1.2.
|
|
1347
|
+
version: "1.2.1"
|
|
1327
1348
|
},
|
|
1328
1349
|
{
|
|
1329
1350
|
capabilities: {
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var ii=Object.defineProperty;var $n=e=>{throw TypeError(e)};var si=(e,t,n)=>t in e?ii(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var De=(e,t,n)=>si(e,typeof t!="symbol"?t+"":t,n),gn=(e,t,n)=>t.has(e)||$n("Cannot "+n);var u=(e,t,n)=>(gn(e,t,"read from private field"),n?n.call(e):t.get(e)),D=(e,t,n)=>t.has(e)?$n("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),S=(e,t,n,r)=>(gn(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),H=(e,t,n)=>(gn(e,t,"access private method"),n);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const l of i.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&r(l)}).observe(document,{childList:!0,subtree:!0});function n(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(s){if(s.ep)return;s.ep=!0;const i=n(s);fetch(s.href,i)}})();const bn=!1;var Fn=Array.isArray,li=Array.prototype.indexOf,Tt=Array.prototype.includes,on=Array.from,ai=Object.defineProperty,Rt=Object.getOwnPropertyDescriptor,fi=Object.prototype,oi=Array.prototype,ui=Object.getPrototypeOf,er=Object.isExtensible;const ci=()=>{};function di(e){for(var t=0;t<e.length;t++)e[t]()}function vr(){var e,t,n=new Promise((r,s)=>{e=r,t=s});return{promise:n,resolve:e,reject:t}}const Y=2,Kt=4,un=8,hr=1<<24,Fe=16,xe=32,pt=64,kn=128,he=512,V=1024,W=2048,Se=4096,ae=8192,Ke=16384,dt=32768,St=65536,tr=1<<17,_r=1<<18,Pt=1<<19,vi=1<<20,He=1<<25,vt=65536,En=1<<21,qn=1<<22,Ue=1<<23,Mt=Symbol("$state"),et=new class extends Error{constructor(){super(...arguments);De(this,"name","StaleReactionError");De(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};function hi(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function _i(e,t,n){throw new Error("https://svelte.dev/e/each_key_duplicate")}function pi(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function gi(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function mi(e){throw new Error("https://svelte.dev/e/effect_orphan")}function yi(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function wi(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function bi(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function ki(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Ei(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const Ti=1,Si=2,xi=16,Ci=1,Di=2,K=Symbol(),Ai="http://www.w3.org/1999/xhtml";function Pi(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Oi(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function pr(e){return e===this.v}function Ni(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function gr(e){return!Ni(e,this.v)}let ji=!1,pe=null;function xt(e){pe=e}function Xe(e,t=!1,n){pe={p:pe,i:!1,c:null,e:null,s:e,x:null,l:null}}function Ze(e){var t=pe,n=t.e;if(n!==null){t.e=null;for(var r of n)Fr(r)}return t.i=!0,pe=t.p,{}}function mr(){return!0}let tt=[];function yr(){var e=tt;tt=[],di(e)}function Ye(e){if(tt.length===0&&!It){var t=tt;queueMicrotask(()=>{t===tt&&yr()})}tt.push(e)}function Ri(){for(;tt.length>0;)yr()}function wr(e){var t=j;if(t===null)return C.f|=Ue,e;if((t.f&dt)===0&&(t.f&Kt)===0)throw e;Ve(e,t)}function Ve(e,t){for(;t!==null;){if((t.f&kn)!==0){if((t.f&dt)===0)throw e;try{t.b.error(e);return}catch(n){e=n}}t=t.parent}throw e}const Mi=-7169;function F(e,t){e.f=e.f&Mi|t}function zn(e){(e.f&he)!==0||e.deps===null?F(e,V):F(e,Se)}function br(e){if(e!==null)for(const t of e)(t.f&Y)===0||(t.f&vt)===0||(t.f^=vt,br(t.deps))}function kr(e,t,n){(e.f&W)!==0?t.add(e):(e.f&Se)!==0&&n.add(e),br(e.deps),F(e,V)}const Xt=new Set;let T=null,nn=null,U=null,$=[],cn=null,Tn=!1,It=!1;var gt,mt,st,yt,zt,Bt,lt,Re,wt,fe,Sn,xn,Cn,Er;const Zn=class Zn{constructor(){D(this,fe);De(this,"current",new Map);De(this,"previous",new Map);D(this,gt,new Set);D(this,mt,new Set);D(this,st,0);D(this,yt,0);D(this,zt,null);D(this,Bt,new Set);D(this,lt,new Set);D(this,Re,new Map);De(this,"is_fork",!1);D(this,wt,!1)}skip_effect(t){u(this,Re).has(t)||u(this,Re).set(t,{d:[],m:[]})}unskip_effect(t){var n=u(this,Re).get(t);if(n){u(this,Re).delete(t);for(var r of n.d)F(r,W),be(r);for(r of n.m)F(r,Se),be(r)}}process(t){var s;$=[],this.apply();var n=[],r=[];for(const i of t)H(this,fe,xn).call(this,i,n,r);if(H(this,fe,Sn).call(this)){H(this,fe,Cn).call(this,r),H(this,fe,Cn).call(this,n);for(const[i,l]of u(this,Re))Cr(i,l)}else{for(const i of u(this,gt))i();u(this,gt).clear(),u(this,st)===0&&H(this,fe,Er).call(this),nn=this,T=null,nr(r),nr(n),nn=null,(s=u(this,zt))==null||s.resolve()}U=null}capture(t,n){n!==K&&!this.previous.has(t)&&this.previous.set(t,n),(t.f&Ue)===0&&(this.current.set(t,t.v),U==null||U.set(t,t.v))}activate(){T=this,this.apply()}deactivate(){T===this&&(T=null,U=null)}flush(){if(this.activate(),$.length>0){if(Tr(),T!==null&&T!==this)return}else u(this,st)===0&&this.process([]);this.deactivate()}discard(){for(const t of u(this,mt))t(this);u(this,mt).clear()}increment(t){S(this,st,u(this,st)+1),t&&S(this,yt,u(this,yt)+1)}decrement(t){S(this,st,u(this,st)-1),t&&S(this,yt,u(this,yt)-1),!u(this,wt)&&(S(this,wt,!0),Ye(()=>{S(this,wt,!1),H(this,fe,Sn).call(this)?$.length>0&&this.flush():this.revive()}))}revive(){for(const t of u(this,Bt))u(this,lt).delete(t),F(t,W),be(t);for(const t of u(this,lt))F(t,Se),be(t);this.flush()}oncommit(t){u(this,gt).add(t)}ondiscard(t){u(this,mt).add(t)}settled(){return(u(this,zt)??S(this,zt,vr())).promise}static ensure(){if(T===null){const t=T=new Zn;Xt.add(T),It||Ye(()=>{T===t&&t.flush()})}return T}apply(){}};gt=new WeakMap,mt=new WeakMap,st=new WeakMap,yt=new WeakMap,zt=new WeakMap,Bt=new WeakMap,lt=new WeakMap,Re=new WeakMap,wt=new WeakMap,fe=new WeakSet,Sn=function(){return this.is_fork||u(this,yt)>0},xn=function(t,n,r){t.f^=V;for(var s=t.first;s!==null;){var i=s.f,l=(i&(xe|pt))!==0,a=l&&(i&V)!==0,f=a||(i&ae)!==0||u(this,Re).has(s);if(!f&&s.fn!==null){l?s.f^=V:(i&Kt)!==0?n.push(s):Yt(s)&&((i&Fe)!==0&&u(this,lt).add(s),At(s));var o=s.first;if(o!==null){s=o;continue}}for(;s!==null;){var v=s.next;if(v!==null){s=v;break}s=s.parent}}},Cn=function(t){for(var n=0;n<t.length;n+=1)kr(t[n],u(this,Bt),u(this,lt))},Er=function(){var s;if(Xt.size>1){this.previous.clear();var t=U,n=!0;for(const i of Xt){if(i===this){n=!1;continue}const l=[];for(const[f,o]of this.current){if(i.current.has(f))if(n&&o!==i.current.get(f))i.current.set(f,o);else continue;l.push(f)}if(l.length===0)continue;const a=[...i.current.keys()].filter(f=>!this.current.has(f));if(a.length>0){var r=$;$=[];const f=new Set,o=new Map;for(const v of l)Sr(v,a,f,o);if($.length>0){T=i,i.apply();for(const v of $)H(s=i,fe,xn).call(s,v,[],[]);i.deactivate()}$=r}}T=null,U=t}Xt.delete(this)};let We=Zn;function Ii(e){var t=It;It=!0;try{for(var n;;){if(Ri(),$.length===0&&(T==null||T.flush(),$.length===0))return cn=null,n;Tr()}}finally{It=t}}function Tr(){Tn=!0;var e=null;try{for(var t=0;$.length>0;){var n=We.ensure();if(t++>1e3){var r,s;Li()}n.process($),Je.clear()}}finally{$=[],Tn=!1,cn=null}}function Li(){try{yi()}catch(e){Ve(e,cn)}}let me=null;function nr(e){var t=e.length;if(t!==0){for(var n=0;n<t;){var r=e[n++];if((r.f&(Ke|ae))===0&&Yt(r)&&(me=new Set,At(r),r.deps===null&&r.first===null&&r.nodes===null&&r.teardown===null&&r.ac===null&&Br(r),(me==null?void 0:me.size)>0)){Je.clear();for(const s of me){if((s.f&(Ke|ae))!==0)continue;const i=[s];let l=s.parent;for(;l!==null;)me.has(l)&&(me.delete(l),i.push(l)),l=l.parent;for(let a=i.length-1;a>=0;a--){const f=i[a];(f.f&(Ke|ae))===0&&At(f)}}me.clear()}}me=null}}function Sr(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const s of e.reactions){const i=s.f;(i&Y)!==0?Sr(s,t,n,r):(i&(qn|Fe))!==0&&(i&W)===0&&xr(s,t,r)&&(F(s,W),be(s))}}function xr(e,t,n){const r=n.get(e);if(r!==void 0)return r;if(e.deps!==null)for(const s of e.deps){if(Tt.call(t,s))return!0;if((s.f&Y)!==0&&xr(s,t,n))return n.set(s,!0),!0}return n.set(e,!1),!1}function be(e){var t=cn=e,n=t.b;if(n!=null&&n.is_pending&&(e.f&(Kt|un|hr))!==0&&(e.f&dt)===0){n.defer_effect(e);return}for(;t.parent!==null;){t=t.parent;var r=t.f;if(Tn&&t===j&&(r&Fe)!==0&&(r&_r)===0&&(r&dt)!==0)return;if((r&(pt|xe))!==0){if((r&V)===0)return;t.f^=V}}$.push(t)}function Cr(e,t){if(!((e.f&xe)!==0&&(e.f&V)!==0)){(e.f&W)!==0?t.d.push(e):(e.f&Se)!==0&&t.m.push(e),F(e,V);for(var n=e.first;n!==null;)Cr(n,t),n=n.next}}function Fi(e){let t=0,n=ht(0),r;return()=>{Vn()&&(d(n),qr(()=>(t===0&&(r=Qr(()=>e(()=>Lt(n)))),t+=1,()=>{Ye(()=>{t-=1,t===0&&(r==null||r(),r=void 0,Lt(n))})})))}}var qi=St|Pt;function zi(e,t,n,r){new Bi(e,t,n,r)}var de,Ln,Ae,at,Q,Pe,se,ye,Me,ft,Be,bt,kt,Et,Ie,an,q,Hi,Vi,Ki,Dn,Qt,$t,An;class Bi{constructor(t,n,r,s){D(this,q);De(this,"parent");De(this,"is_pending",!1);De(this,"transform_error");D(this,de);D(this,Ln,null);D(this,Ae);D(this,at);D(this,Q);D(this,Pe,null);D(this,se,null);D(this,ye,null);D(this,Me,null);D(this,ft,0);D(this,Be,0);D(this,bt,!1);D(this,kt,new Set);D(this,Et,new Set);D(this,Ie,null);D(this,an,Fi(()=>(S(this,Ie,ht(u(this,ft))),()=>{S(this,Ie,null)})));var i;S(this,de,t),S(this,Ae,n),S(this,at,l=>{var a=j;a.b=this,a.f|=kn,r(l)}),this.parent=j.b,this.transform_error=s??((i=this.parent)==null?void 0:i.transform_error)??(l=>l),S(this,Q,Yn(()=>{H(this,q,Dn).call(this)},qi))}defer_effect(t){kr(t,u(this,kt),u(this,Et))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!u(this,Ae).pending}update_pending_count(t){H(this,q,An).call(this,t),S(this,ft,u(this,ft)+t),!(!u(this,Ie)||u(this,bt))&&(S(this,bt,!0),Ye(()=>{S(this,bt,!1),u(this,Ie)&&Dt(u(this,Ie),u(this,ft))}))}get_effect_pending(){return u(this,an).call(this),d(u(this,Ie))}error(t){var n=u(this,Ae).onerror;let r=u(this,Ae).failed;if(!n&&!r)throw t;u(this,Pe)&&(te(u(this,Pe)),S(this,Pe,null)),u(this,se)&&(te(u(this,se)),S(this,se,null)),u(this,ye)&&(te(u(this,ye)),S(this,ye,null));var s=!1,i=!1;const l=()=>{if(s){Oi();return}s=!0,i&&Ei(),u(this,ye)!==null&&ut(u(this,ye),()=>{S(this,ye,null)}),H(this,q,$t).call(this,()=>{We.ensure(),H(this,q,Dn).call(this)})},a=f=>{try{i=!0,n==null||n(f,l),i=!1}catch(o){Ve(o,u(this,Q)&&u(this,Q).parent)}r&&S(this,ye,H(this,q,$t).call(this,()=>{We.ensure();try{return ve(()=>{var o=j;o.b=this,o.f|=kn,r(u(this,de),()=>f,()=>l)})}catch(o){return Ve(o,u(this,Q).parent),null}}))};Ye(()=>{var f;try{f=this.transform_error(t)}catch(o){Ve(o,u(this,Q)&&u(this,Q).parent);return}f!==null&&typeof f=="object"&&typeof f.then=="function"?f.then(a,o=>Ve(o,u(this,Q)&&u(this,Q).parent)):a(f)})}}de=new WeakMap,Ln=new WeakMap,Ae=new WeakMap,at=new WeakMap,Q=new WeakMap,Pe=new WeakMap,se=new WeakMap,ye=new WeakMap,Me=new WeakMap,ft=new WeakMap,Be=new WeakMap,bt=new WeakMap,kt=new WeakMap,Et=new WeakMap,Ie=new WeakMap,an=new WeakMap,q=new WeakSet,Hi=function(){try{S(this,Pe,ve(()=>u(this,at).call(this,u(this,de))))}catch(t){this.error(t)}},Vi=function(t){const n=u(this,Ae).failed;n&&S(this,ye,ve(()=>{n(u(this,de),()=>t,()=>()=>{})}))},Ki=function(){const t=u(this,Ae).pending;t&&(this.is_pending=!0,S(this,se,ve(()=>t(u(this,de)))),Ye(()=>{var n=S(this,Me,document.createDocumentFragment()),r=Ge();n.append(r),S(this,Pe,H(this,q,$t).call(this,()=>(We.ensure(),ve(()=>u(this,at).call(this,r))))),u(this,Be)===0&&(u(this,de).before(n),S(this,Me,null),ut(u(this,se),()=>{S(this,se,null)}),H(this,q,Qt).call(this))}))},Dn=function(){try{if(this.is_pending=this.has_pending_snippet(),S(this,Be,0),S(this,ft,0),S(this,Pe,ve(()=>{u(this,at).call(this,u(this,de))})),u(this,Be)>0){var t=S(this,Me,document.createDocumentFragment());Kr(u(this,Pe),t);const n=u(this,Ae).pending;S(this,se,ve(()=>n(u(this,de))))}else H(this,q,Qt).call(this)}catch(n){this.error(n)}},Qt=function(){this.is_pending=!1;for(const t of u(this,kt))F(t,W),be(t);for(const t of u(this,Et))F(t,Se),be(t);u(this,kt).clear(),u(this,Et).clear()},$t=function(t){var n=j,r=C,s=pe;Ne(u(this,Q)),ge(u(this,Q)),xt(u(this,Q).ctx);try{return t()}catch(i){return wr(i),null}finally{Ne(n),ge(r),xt(s)}},An=function(t){var n;if(!this.has_pending_snippet()){this.parent&&H(n=this.parent,q,An).call(n,t);return}S(this,Be,u(this,Be)+t),u(this,Be)===0&&(H(this,q,Qt).call(this),u(this,se)&&ut(u(this,se),()=>{S(this,se,null)}),u(this,Me)&&(u(this,de).before(u(this,Me)),S(this,Me,null)))};function Ui(e,t,n,r){const s=Bn;var i=e.filter(_=>!_.settled);if(n.length===0&&i.length===0){r(t.map(s));return}var l=j,a=Yi(),f=i.length===1?i[0].promise:i.length>1?Promise.all(i.map(_=>_.promise)):null;function o(_){a();try{r(_)}catch(p){(l.f&Ke)===0&&Ve(p,l)}Pn()}if(n.length===0){f.then(()=>o(t.map(s)));return}function v(){a(),Promise.all(n.map(_=>Ji(_))).then(_=>o([...t.map(s),..._])).catch(_=>Ve(_,l))}f?f.then(v):v()}function Yi(){var e=j,t=C,n=pe,r=T;return function(i=!0){Ne(e),ge(t),xt(n),i&&(r==null||r.activate())}}function Pn(e=!0){Ne(null),ge(null),xt(null),e&&(T==null||T.deactivate())}function Wi(){var e=j.b,t=T,n=e.is_rendered();return e.update_pending_count(1),t.increment(n),()=>{e.update_pending_count(-1),t.decrement(n)}}function Bn(e){var t=Y|W,n=C!==null&&(C.f&Y)!==0?C:null;return j!==null&&(j.f|=Pt),{ctx:pe,deps:null,effects:null,equals:pr,f:t,fn:e,reactions:null,rv:0,v:K,wv:0,parent:n??j,ac:null}}function Ji(e,t,n){j===null&&hi();var s=void 0,i=ht(K),l=!C,a=new Map;return us(()=>{var p;var f=vr();s=f.promise;try{Promise.resolve(e()).then(f.resolve,f.reject).finally(Pn)}catch(w){f.reject(w),Pn()}var o=T;if(l){var v=Wi();(p=a.get(o))==null||p.reject(et),a.delete(o),a.set(o,f)}const _=(w,c=void 0)=>{if(o.activate(),c)c!==et&&(i.f|=Ue,Dt(i,c));else{(i.f&Ue)!==0&&(i.f^=Ue),Dt(i,w);for(const[m,h]of a){if(a.delete(m),m===o)break;h.reject(et)}}v&&v()};f.promise.then(_,w=>_(null,w||"unknown"))}),Kn(()=>{for(const f of a.values())f.reject(et)}),new Promise(f=>{function o(v){function _(){v===s?f(i):o(s)}v.then(_,_)}o(s)})}function Ct(e){const t=Bn(e);return Ur(t),t}function Gi(e){const t=Bn(e);return t.equals=gr,t}function Xi(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n<t.length;n+=1)te(t[n])}}function Zi(e){for(var t=e.parent;t!==null;){if((t.f&Y)===0)return(t.f&Ke)===0?t:null;t=t.parent}return null}function Hn(e){var t,n=j;Ne(Zi(e));try{e.f&=~vt,Xi(e),t=Gr(e)}finally{Ne(n)}return t}function Dr(e){var t=Hn(e);if(!e.equals(t)&&(e.wv=Wr(),(!(T!=null&&T.is_fork)||e.deps===null)&&(e.v=t,e.deps===null))){F(e,V);return}_t||(U!==null?(Vn()||T!=null&&T.is_fork)&&U.set(e,t):zn(e))}function Qi(e){var t,n;if(e.effects!==null)for(const r of e.effects)(r.teardown||r.ac)&&((t=r.teardown)==null||t.call(r),(n=r.ac)==null||n.abort(et),r.teardown=ci,r.ac=null,qt(r,0),Wn(r))}function Ar(e){if(e.effects!==null)for(const t of e.effects)t.teardown&&At(t)}let On=new Set;const Je=new Map;let Pr=!1;function ht(e,t){var n={f:0,v:e,reactions:null,equals:pr,rv:0,wv:0};return n}function N(e,t){const n=ht(e);return Ur(n),n}function $i(e,t=!1,n=!0){const r=ht(e);return t||(r.equals=gr),r}function g(e,t,n=!1){C!==null&&(!ke||(C.f&tr)!==0)&&mr()&&(C.f&(Y|Fe|qn|tr))!==0&&(_e===null||!Tt.call(_e,e))&&ki();let r=n?nt(t):t;return Dt(e,r)}function Dt(e,t){if(!e.equals(t)){var n=e.v;_t?Je.set(e,t):Je.set(e,n),e.v=t;var r=We.ensure();if(r.capture(e,n),(e.f&Y)!==0){const s=e;(e.f&W)!==0&&Hn(s),zn(s)}e.wv=Wr(),Or(e,W),j!==null&&(j.f&V)!==0&&(j.f&(xe|pt))===0&&(ce===null?vs([e]):ce.push(e)),!r.is_fork&&On.size>0&&!Pr&&es()}return t}function es(){Pr=!1;for(const e of On)(e.f&V)!==0&&F(e,Se),Yt(e)&&At(e);On.clear()}function Lt(e){g(e,e.v+1)}function Or(e,t){var n=e.reactions;if(n!==null)for(var r=n.length,s=0;s<r;s++){var i=n[s],l=i.f,a=(l&W)===0;if(a&&F(i,t),(l&Y)!==0){var f=i;U==null||U.delete(f),(l&vt)===0&&(l&he&&(i.f|=vt),Or(f,Se))}else a&&((l&Fe)!==0&&me!==null&&me.add(i),be(i))}}function nt(e){if(typeof e!="object"||e===null||Mt in e)return e;const t=ui(e);if(t!==fi&&t!==oi)return e;var n=new Map,r=Fn(e),s=N(0),i=ct,l=a=>{if(ct===i)return a();var f=C,o=ct;ge(null),lr(i);var v=a();return ge(f),lr(o),v};return r&&n.set("length",N(e.length)),new Proxy(e,{defineProperty(a,f,o){(!("value"in o)||o.configurable===!1||o.enumerable===!1||o.writable===!1)&&wi();var v=n.get(f);return v===void 0?l(()=>{var _=N(o.value);return n.set(f,_),_}):g(v,o.value,!0),!0},deleteProperty(a,f){var o=n.get(f);if(o===void 0){if(f in a){const v=l(()=>N(K));n.set(f,v),Lt(s)}}else g(o,K),Lt(s);return!0},get(a,f,o){var w;if(f===Mt)return e;var v=n.get(f),_=f in a;if(v===void 0&&(!_||(w=Rt(a,f))!=null&&w.writable)&&(v=l(()=>{var c=nt(_?a[f]:K),m=N(c);return m}),n.set(f,v)),v!==void 0){var p=d(v);return p===K?void 0:p}return Reflect.get(a,f,o)},getOwnPropertyDescriptor(a,f){var o=Reflect.getOwnPropertyDescriptor(a,f);if(o&&"value"in o){var v=n.get(f);v&&(o.value=d(v))}else if(o===void 0){var _=n.get(f),p=_==null?void 0:_.v;if(_!==void 0&&p!==K)return{enumerable:!0,configurable:!0,value:p,writable:!0}}return o},has(a,f){var p;if(f===Mt)return!0;var o=n.get(f),v=o!==void 0&&o.v!==K||Reflect.has(a,f);if(o!==void 0||j!==null&&(!v||(p=Rt(a,f))!=null&&p.writable)){o===void 0&&(o=l(()=>{var w=v?nt(a[f]):K,c=N(w);return c}),n.set(f,o));var _=d(o);if(_===K)return!1}return v},set(a,f,o,v){var P;var _=n.get(f),p=f in a;if(r&&f==="length")for(var w=o;w<_.v;w+=1){var c=n.get(w+"");c!==void 0?g(c,K):w in a&&(c=l(()=>N(K)),n.set(w+"",c))}if(_===void 0)(!p||(P=Rt(a,f))!=null&&P.writable)&&(_=l(()=>N(void 0)),g(_,nt(o)),n.set(f,_));else{p=_.v!==K;var m=l(()=>nt(o));g(_,m)}var h=Reflect.getOwnPropertyDescriptor(a,f);if(h!=null&&h.set&&h.set.call(v,o),!p){if(r&&typeof f=="string"){var b=n.get("length"),k=Number(f);Number.isInteger(k)&&k>=b.v&&g(b,k+1)}Lt(s)}return!0},ownKeys(a){d(s);var f=Reflect.ownKeys(a).filter(_=>{var p=n.get(_);return p===void 0||p.v!==K});for(var[o,v]of n)v.v!==K&&!(o in a)&&f.push(o);return f},setPrototypeOf(){bi()}})}function rr(e){try{if(e!==null&&typeof e=="object"&&Mt in e)return e[Mt]}catch{}return e}function ts(e,t){return Object.is(rr(e),rr(t))}var rn,Nr,jr,Rr;function ns(){if(rn===void 0){rn=window,Nr=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;jr=Rt(t,"firstChild").get,Rr=Rt(t,"nextSibling").get,er(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),er(n)&&(n.__t=void 0)}}function Ge(e=""){return document.createTextNode(e)}function sn(e){return jr.call(e)}function Ut(e){return Rr.call(e)}function x(e,t){return sn(e)}function ln(e,t=!1){{var n=sn(e);return n instanceof Comment&&n.data===""?Ut(n):n}}function A(e,t=1,n=!1){let r=e;for(;t--;)r=Ut(r);return r}function rs(e){e.textContent=""}function Mr(){return!1}function is(e,t,n){return document.createElementNS(Ai,e,void 0)}function Ir(e,t){{const n=document.body;e.autofocus=!0,Ye(()=>{document.activeElement===n&&e.focus()})}}let ir=!1;function ss(){ir||(ir=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{var t;if(!e.defaultPrevented)for(const n of e.target.elements)(t=n.__on_r)==null||t.call(n)})},{capture:!0}))}function dn(e){var t=C,n=j;ge(null),Ne(null);try{return e()}finally{ge(t),Ne(n)}}function Lr(e,t,n,r=n){e.addEventListener(t,()=>dn(n));const s=e.__on_r;s?e.__on_r=()=>{s(),r(!0)}:e.__on_r=()=>r(!0),ss()}function ls(e){j===null&&(C===null&&mi(),gi()),_t&&pi()}function as(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function qe(e,t,n){var r=j;r!==null&&(r.f&ae)!==0&&(e|=ae);var s={ctx:pe,deps:null,nodes:null,f:e|W|he,first:null,fn:t,last:null,next:null,parent:r,b:r&&r.b,prev:null,teardown:null,wv:0,ac:null};if(n)try{At(s)}catch(a){throw te(s),a}else t!==null&&be(s);var i=s;if(n&&i.deps===null&&i.teardown===null&&i.nodes===null&&i.first===i.last&&(i.f&Pt)===0&&(i=i.first,(e&Fe)!==0&&(e&St)!==0&&i!==null&&(i.f|=St)),i!==null&&(i.parent=r,r!==null&&as(i,r),C!==null&&(C.f&Y)!==0&&(e&pt)===0)){var l=C;(l.effects??(l.effects=[])).push(i)}return s}function Vn(){return C!==null&&!ke}function Kn(e){const t=qe(un,null,!1);return F(t,V),t.teardown=e,t}function Un(e){ls();var t=j.f,n=!C&&(t&xe)!==0&&(t&dt)===0;if(n){var r=pe;(r.e??(r.e=[])).push(e)}else return Fr(e)}function Fr(e){return qe(Kt|vi,e,!1)}function fs(e){We.ensure();const t=qe(pt|Pt,e,!0);return(n={})=>new Promise(r=>{n.outro?ut(t,()=>{te(t),r(void 0)}):(te(t),r(void 0))})}function os(e){return qe(Kt,e,!1)}function us(e){return qe(qn|Pt,e,!0)}function qr(e,t=0){return qe(un|t,e,!0)}function Ee(e,t=[],n=[],r=[]){Ui(r,t,n,s=>{qe(un,()=>e(...s.map(d)),!0)})}function Yn(e,t=0){var n=qe(Fe|t,e,!0);return n}function ve(e){return qe(xe|Pt,e,!0)}function zr(e){var t=e.teardown;if(t!==null){const n=_t,r=C;sr(!0),ge(null);try{t.call(null)}finally{sr(n),ge(r)}}}function Wn(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const s=n.ac;s!==null&&dn(()=>{s.abort(et)});var r=n.next;(n.f&pt)!==0?n.parent=null:te(n,t),n=r}}function cs(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&xe)===0&&te(t),t=n}}function te(e,t=!0){var n=!1;(t||(e.f&_r)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(ds(e.nodes.start,e.nodes.end),n=!0),Wn(e,t&&!n),qt(e,0),F(e,Ke);var r=e.nodes&&e.nodes.t;if(r!==null)for(const i of r)i.stop();zr(e);var s=e.parent;s!==null&&s.first!==null&&Br(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=null}function ds(e,t){for(;e!==null;){var n=e===t?null:Ut(e);e.remove(),e=n}}function Br(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function ut(e,t,n=!0){var r=[];Hr(e,r,!0);var s=()=>{n&&te(e),t&&t()},i=r.length;if(i>0){var l=()=>--i||s();for(var a of r)a.out(l)}else s()}function Hr(e,t,n){if((e.f&ae)===0){e.f^=ae;var r=e.nodes&&e.nodes.t;if(r!==null)for(const a of r)(a.is_global||n)&&t.push(a);for(var s=e.first;s!==null;){var i=s.next,l=(s.f&St)!==0||(s.f&xe)!==0&&(e.f&Fe)!==0;Hr(s,t,l?n:!1),s=i}}}function Jn(e){Vr(e,!0)}function Vr(e,t){if((e.f&ae)!==0){e.f^=ae,(e.f&V)===0&&(F(e,W),be(e));for(var n=e.first;n!==null;){var r=n.next,s=(n.f&St)!==0||(n.f&xe)!==0;Vr(n,s?t:!1),n=r}var i=e.nodes&&e.nodes.t;if(i!==null)for(const l of i)(l.is_global||t)&&l.in()}}function Kr(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var s=n===r?null:Ut(n);t.append(n),n=s}}let en=!1,_t=!1;function sr(e){_t=e}let C=null,ke=!1;function ge(e){C=e}let j=null;function Ne(e){j=e}let _e=null;function Ur(e){C!==null&&(_e===null?_e=[e]:_e.push(e))}let ee=null,ie=0,ce=null;function vs(e){ce=e}let Yr=1,rt=0,ct=rt;function lr(e){ct=e}function Wr(){return++Yr}function Yt(e){var t=e.f;if((t&W)!==0)return!0;if(t&Y&&(e.f&=~vt),(t&Se)!==0){for(var n=e.deps,r=n.length,s=0;s<r;s++){var i=n[s];if(Yt(i)&&Dr(i),i.wv>e.wv)return!0}(t&he)!==0&&U===null&&F(e,V)}return!1}function Jr(e,t,n=!0){var r=e.reactions;if(r!==null&&!(_e!==null&&Tt.call(_e,e)))for(var s=0;s<r.length;s++){var i=r[s];(i.f&Y)!==0?Jr(i,t,!1):t===i&&(n?F(i,W):(i.f&V)!==0&&F(i,Se),be(i))}}function Gr(e){var m;var t=ee,n=ie,r=ce,s=C,i=_e,l=pe,a=ke,f=ct,o=e.f;ee=null,ie=0,ce=null,C=(o&(xe|pt))===0?e:null,_e=null,xt(e.ctx),ke=!1,ct=++rt,e.ac!==null&&(dn(()=>{e.ac.abort(et)}),e.ac=null);try{e.f|=En;var v=e.fn,_=v();e.f|=dt;var p=e.deps,w=T==null?void 0:T.is_fork;if(ee!==null){var c;if(w||qt(e,ie),p!==null&&ie>0)for(p.length=ie+ee.length,c=0;c<ee.length;c++)p[ie+c]=ee[c];else e.deps=p=ee;if(Vn()&&(e.f&he)!==0)for(c=ie;c<p.length;c++)((m=p[c]).reactions??(m.reactions=[])).push(e)}else!w&&p!==null&&ie<p.length&&(qt(e,ie),p.length=ie);if(mr()&&ce!==null&&!ke&&p!==null&&(e.f&(Y|Se|W))===0)for(c=0;c<ce.length;c++)Jr(ce[c],e);if(s!==null&&s!==e){if(rt++,s.deps!==null)for(let h=0;h<n;h+=1)s.deps[h].rv=rt;if(t!==null)for(const h of t)h.rv=rt;ce!==null&&(r===null?r=ce:r.push(...ce))}return(e.f&Ue)!==0&&(e.f^=Ue),_}catch(h){return wr(h)}finally{e.f^=En,ee=t,ie=n,ce=r,C=s,_e=i,xt(l),ke=a,ct=f}}function hs(e,t){let n=t.reactions;if(n!==null){var r=li.call(n,e);if(r!==-1){var s=n.length-1;s===0?n=t.reactions=null:(n[r]=n[s],n.pop())}}if(n===null&&(t.f&Y)!==0&&(ee===null||!Tt.call(ee,t))){var i=t;(i.f&he)!==0&&(i.f^=he,i.f&=~vt),zn(i),Qi(i),qt(i,0)}}function qt(e,t){var n=e.deps;if(n!==null)for(var r=t;r<n.length;r++)hs(e,n[r])}function At(e){var t=e.f;if((t&Ke)===0){F(e,V);var n=j,r=en;j=e,en=!0;try{(t&(Fe|hr))!==0?cs(e):Wn(e),zr(e);var s=Gr(e);e.teardown=typeof s=="function"?s:null,e.wv=Yr;var i;bn&&ji&&(e.f&W)!==0&&e.deps}finally{en=r,j=n}}}async function _s(){await Promise.resolve(),Ii()}function d(e){var t=e.f,n=(t&Y)!==0;if(C!==null&&!ke){var r=j!==null&&(j.f&Ke)!==0;if(!r&&(_e===null||!Tt.call(_e,e))){var s=C.deps;if((C.f&En)!==0)e.rv<rt&&(e.rv=rt,ee===null&&s!==null&&s[ie]===e?ie++:ee===null?ee=[e]:ee.push(e));else{(C.deps??(C.deps=[])).push(e);var i=e.reactions;i===null?e.reactions=[C]:Tt.call(i,C)||i.push(C)}}}if(_t&&Je.has(e))return Je.get(e);if(n){var l=e;if(_t){var a=l.v;return((l.f&V)===0&&l.reactions!==null||Zr(l))&&(a=Hn(l)),Je.set(l,a),a}var f=(l.f&he)===0&&!ke&&C!==null&&(en||(C.f&he)!==0),o=(l.f&dt)===0;Yt(l)&&(f&&(l.f|=he),Dr(l)),f&&!o&&(Ar(l),Xr(l))}if(U!=null&&U.has(e))return U.get(e);if((e.f&Ue)!==0)throw e.v;return e.v}function Xr(e){if(e.f|=he,e.deps!==null)for(const t of e.deps)(t.reactions??(t.reactions=[])).push(e),(t.f&Y)!==0&&(t.f&he)===0&&(Ar(t),Xr(t))}function Zr(e){if(e.v===K)return!0;if(e.deps===null)return!1;for(const t of e.deps)if(Je.has(t)||(t.f&Y)!==0&&Zr(t))return!0;return!1}function Qr(e){var t=ke;try{return ke=!0,e()}finally{ke=t}}const ps=["touchstart","touchmove"];function gs(e){return ps.includes(e)}const it=Symbol("events"),$r=new Set,Nn=new Set;function ms(e,t,n,r={}){function s(i){if(r.capture||jn.call(t,i),!i.cancelBubble)return dn(()=>n==null?void 0:n.call(this,i))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?Ye(()=>{t.addEventListener(e,s,r)}):t.addEventListener(e,s,r),s}function Le(e,t,n,r,s){var i={capture:r,passive:s},l=ms(e,t,n,i);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&Kn(()=>{t.removeEventListener(e,l,i)})}function ne(e,t,n){(t[it]??(t[it]={}))[e]=n}function Ot(e){for(var t=0;t<e.length;t++)$r.add(e[t]);for(var n of Nn)n(e)}let ar=null;function jn(e){var h,b;var t=this,n=t.ownerDocument,r=e.type,s=((h=e.composedPath)==null?void 0:h.call(e))||[],i=s[0]||e.target;ar=e;var l=0,a=ar===e&&e[it];if(a){var f=s.indexOf(a);if(f!==-1&&(t===document||t===window)){e[it]=t;return}var o=s.indexOf(t);if(o===-1)return;f<=o&&(l=f)}if(i=s[l]||e.target,i!==t){ai(e,"currentTarget",{configurable:!0,get(){return i||n}});var v=C,_=j;ge(null),Ne(null);try{for(var p,w=[];i!==null;){var c=i.assignedSlot||i.parentNode||i.host||null;try{var m=(b=i[it])==null?void 0:b[r];m!=null&&(!i.disabled||e.target===i)&&m.call(i,e)}catch(k){p?w.push(k):p=k}if(e.cancelBubble||c===t||c===null)break;i=c}if(p){for(let k of w)queueMicrotask(()=>{throw k});throw p}}finally{e[it]=t,delete e.currentTarget,ge(v),Ne(_)}}}var cr;const mn=((cr=globalThis==null?void 0:globalThis.window)==null?void 0:cr.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function ys(e){return(mn==null?void 0:mn.createHTML(e))??e}function ws(e){var t=is("template");return t.innerHTML=ys(e.replaceAll("<!>","<!---->")),t.content}function Rn(e,t){var n=j;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function L(e,t){var n=(t&Ci)!==0,r=(t&Di)!==0,s,i=!e.startsWith("<!>");return()=>{s===void 0&&(s=ws(i?e:"<!>"+e),n||(s=sn(s)));var l=r||Nr?document.importNode(s,!0):s.cloneNode(!0);if(n){var a=sn(l),f=l.lastChild;Rn(a,f)}else Rn(l,l);return l}}function ei(){var e=document.createDocumentFragment(),t=document.createComment(""),n=Ge();return e.append(t,n),Rn(t,n),e}function I(e,t){e!==null&&e.before(t)}function X(e,t){var n=t==null?"":typeof t=="object"?t+"":t;n!==(e.__t??(e.__t=e.nodeValue))&&(e.__t=n,e.nodeValue=n+"")}function bs(e,t){return ks(e,t)}const Zt=new Map;function ks(e,{target:t,anchor:n,props:r={},events:s,context:i,intro:l=!0,transformError:a}){ns();var f=void 0,o=fs(()=>{var v=n??t.appendChild(Ge());zi(v,{pending:()=>{}},w=>{Xe({});var c=pe;i&&(c.c=i),s&&(r.$$events=s),f=e(w,r)||{},Ze()},a);var _=new Set,p=w=>{for(var c=0;c<w.length;c++){var m=w[c];if(!_.has(m)){_.add(m);var h=gs(m);for(const P of[t,document]){var b=Zt.get(P);b===void 0&&(b=new Map,Zt.set(P,b));var k=b.get(m);k===void 0?(P.addEventListener(m,jn,{passive:h}),b.set(m,1)):b.set(m,k+1)}}}};return p(on($r)),Nn.add(p),()=>{var h;for(var w of _)for(const b of[t,document]){var c=Zt.get(b),m=c.get(w);--m==0?(b.removeEventListener(w,jn),c.delete(w),c.size===0&&Zt.delete(b)):c.set(w,m)}Nn.delete(p),v!==n&&((h=v.parentNode)==null||h.removeChild(v))}});return Es.set(f,o),f}let Es=new WeakMap;var we,Oe,le,ot,Ht,Vt,fn;class Ts{constructor(t,n=!0){De(this,"anchor");D(this,we,new Map);D(this,Oe,new Map);D(this,le,new Map);D(this,ot,new Set);D(this,Ht,!0);D(this,Vt,()=>{var t=T;if(u(this,we).has(t)){var n=u(this,we).get(t),r=u(this,Oe).get(n);if(r)Jn(r),u(this,ot).delete(n);else{var s=u(this,le).get(n);s&&(u(this,Oe).set(n,s.effect),u(this,le).delete(n),s.fragment.lastChild.remove(),this.anchor.before(s.fragment),r=s.effect)}for(const[i,l]of u(this,we)){if(u(this,we).delete(i),i===t)break;const a=u(this,le).get(l);a&&(te(a.effect),u(this,le).delete(l))}for(const[i,l]of u(this,Oe)){if(i===n||u(this,ot).has(i))continue;const a=()=>{if(Array.from(u(this,we).values()).includes(i)){var o=document.createDocumentFragment();Kr(l,o),o.append(Ge()),u(this,le).set(i,{effect:l,fragment:o})}else te(l);u(this,ot).delete(i),u(this,Oe).delete(i)};u(this,Ht)||!r?(u(this,ot).add(i),ut(l,a,!1)):a()}}});D(this,fn,t=>{u(this,we).delete(t);const n=Array.from(u(this,we).values());for(const[r,s]of u(this,le))n.includes(r)||(te(s.effect),u(this,le).delete(r))});this.anchor=t,S(this,Ht,n)}ensure(t,n){var r=T,s=Mr();if(n&&!u(this,Oe).has(t)&&!u(this,le).has(t))if(s){var i=document.createDocumentFragment(),l=Ge();i.append(l),u(this,le).set(t,{effect:ve(()=>n(l)),fragment:i})}else u(this,Oe).set(t,ve(()=>n(this.anchor)));if(u(this,we).set(r,t),s){for(const[a,f]of u(this,Oe))a===t?r.unskip_effect(f):r.skip_effect(f);for(const[a,f]of u(this,le))a===t?r.unskip_effect(f.effect):r.skip_effect(f.effect);r.oncommit(u(this,Vt)),r.ondiscard(u(this,fn))}else u(this,Vt).call(this)}}we=new WeakMap,Oe=new WeakMap,le=new WeakMap,ot=new WeakMap,Ht=new WeakMap,Vt=new WeakMap,fn=new WeakMap;function Te(e,t,n=!1){var r=new Ts(e),s=n?St:0;function i(l,a){r.ensure(l,a)}Yn(()=>{var l=!1;t((a,f=0)=>{l=!0,i(f,a)}),l||i(!1,null)},s)}function Gn(e,t){return t}function Ss(e,t,n){for(var r=[],s=t.length,i,l=t.length,a=0;a<s;a++){let _=t[a];ut(_,()=>{if(i){if(i.pending.delete(_),i.done.add(_),i.pending.size===0){var p=e.outrogroups;Mn(on(i.done)),p.delete(i),p.size===0&&(e.outrogroups=null)}}else l-=1},!1)}if(l===0){var f=r.length===0&&n!==null;if(f){var o=n,v=o.parentNode;rs(v),v.append(o),e.items.clear()}Mn(t,!f)}else i={pending:new Set(t),done:new Set},(e.outrogroups??(e.outrogroups=new Set)).add(i)}function Mn(e,t=!0){for(var n=0;n<e.length;n++)te(e[n],t)}var fr;function Wt(e,t,n,r,s,i=null){var l=e,a=new Map;{var f=e;l=f.appendChild(Ge())}var o=null,v=Gi(()=>{var h=n();return Fn(h)?h:h==null?[]:on(h)}),_,p=!0;function w(){m.fallback=o,xs(m,_,l,t,r),o!==null&&(_.length===0?(o.f&He)===0?Jn(o):(o.f^=He,jt(o,null,l)):ut(o,()=>{o=null}))}var c=Yn(()=>{_=d(v);for(var h=_.length,b=new Set,k=T,P=Mr(),E=0;E<h;E+=1){var R=_[E],Z=r(R,E),z=p?null:a.get(Z);z?(z.v&&Dt(z.v,R),z.i&&Dt(z.i,E),P&&k.unskip_effect(z.e)):(z=Cs(a,p?l:fr??(fr=Ge()),R,Z,E,s,t,n),p||(z.e.f|=He),a.set(Z,z)),b.add(Z)}if(h===0&&i&&!o&&(p?o=ve(()=>i(l)):(o=ve(()=>i(fr??(fr=Ge()))),o.f|=He)),h>b.size&&_i(),!p)if(P){for(const[oe,G]of a)b.has(oe)||k.skip_effect(G.e);k.oncommit(w),k.ondiscard(()=>{})}else w();d(v)}),m={effect:c,items:a,outrogroups:null,fallback:o};p=!1}function Nt(e){for(;e!==null&&(e.f&xe)===0;)e=e.next;return e}function xs(e,t,n,r,s){var oe;var i=t.length,l=e.items,a=Nt(e.effect.first),f,o=null,v=[],_=[],p,w,c,m;for(m=0;m<i;m+=1){if(p=t[m],w=s(p,m),c=l.get(w).e,e.outrogroups!==null)for(const G of e.outrogroups)G.pending.delete(c),G.done.delete(c);if((c.f&He)!==0)if(c.f^=He,c===a)jt(c,null,n);else{var h=o?o.next:a;c===e.effect.last&&(e.effect.last=c.prev),c.prev&&(c.prev.next=c.next),c.next&&(c.next.prev=c.prev),ze(e,o,c),ze(e,c,h),jt(c,h,n),o=c,v=[],_=[],a=Nt(o.next);continue}if((c.f&ae)!==0&&Jn(c),c!==a){if(f!==void 0&&f.has(c)){if(v.length<_.length){var b=_[0],k;o=b.prev;var P=v[0],E=v[v.length-1];for(k=0;k<v.length;k+=1)jt(v[k],b,n);for(k=0;k<_.length;k+=1)f.delete(_[k]);ze(e,P.prev,E.next),ze(e,o,P),ze(e,E,b),a=b,o=E,m-=1,v=[],_=[]}else f.delete(c),jt(c,a,n),ze(e,c.prev,c.next),ze(e,c,o===null?e.effect.first:o.next),ze(e,o,c),o=c;continue}for(v=[],_=[];a!==null&&a!==c;)(f??(f=new Set)).add(a),_.push(a),a=Nt(a.next);if(a===null)continue}(c.f&He)===0&&v.push(c),o=c,a=Nt(c.next)}if(e.outrogroups!==null){for(const G of e.outrogroups)G.pending.size===0&&(Mn(on(G.done)),(oe=e.outrogroups)==null||oe.delete(G));e.outrogroups.size===0&&(e.outrogroups=null)}if(a!==null||f!==void 0){var R=[];if(f!==void 0)for(c of f)(c.f&ae)===0&&R.push(c);for(;a!==null;)(a.f&ae)===0&&a!==e.fallback&&R.push(a),a=Nt(a.next);var Z=R.length;if(Z>0){var z=i===0?n:null;Ss(e,R,z)}}}function Cs(e,t,n,r,s,i,l,a){var f=(l&Ti)!==0?(l&xi)===0?$i(n,!1,!1):ht(n):null,o=(l&Si)!==0?ht(s):null;return{v:f,i:o,e:ve(()=>(i(t,f??n,o??s,a),()=>{e.delete(r)}))}}function jt(e,t,n){if(e.nodes)for(var r=e.nodes.start,s=e.nodes.end,i=t&&(t.f&He)===0?t.nodes.start:n;r!==null;){var l=Ut(r);if(i.before(r),r===s)return;r=l}}function ze(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}const or=[...`
|
|
2
|
-
\r\f \v\uFEFF`];function Ds(e,t,n){var r=e==null?"":""+e;if(t&&(r=r?r+" "+t:t),n){for(var s of Object.keys(n))if(n[s])r=r?r+" "+s:s;else if(r.length)for(var i=s.length,l=0;(l=r.indexOf(s,l))>=0;){var a=l+i;(l===0||or.includes(r[l-1]))&&(a===r.length||or.includes(r[a]))?r=(l===0?"":r.substring(0,l))+r.substring(a+1):l=a}}return r===""?null:r}function In(e,t,n,r,s,i){var l=e.__className;if(l!==n||l===void 0){var a=Ds(n,r,i);a==null?e.removeAttribute("class"):e.className=a,e.__className=n}else if(i&&s!==i)for(var f in i){var o=!!i[f];(s==null||o!==!!s[f])&&e.classList.toggle(f,o)}return i}function Xn(e,t,n=!1){if(e.multiple){if(t==null)return;if(!Fn(t))return Pi();for(var r of e.options)r.selected=t.includes(Ft(r));return}for(r of e.options){var s=Ft(r);if(ts(s,t)){r.selected=!0;return}}(!n||t!==void 0)&&(e.selectedIndex=-1)}function ti(e){var t=new MutationObserver(()=>{Xn(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),Kn(()=>{t.disconnect()})}function ur(e,t,n=t){var r=new WeakSet,s=!0;Lr(e,"change",i=>{var l=i?"[selected]":":checked",a;if(e.multiple)a=[].map.call(e.querySelectorAll(l),Ft);else{var f=e.querySelector(l)??e.querySelector("option:not([disabled])");a=f&&Ft(f)}n(a),T!==null&&r.add(T)}),os(()=>{var i=t();if(e===document.activeElement){var l=nn??T;if(r.has(l))return}if(Xn(e,i,s),s&&i===void 0){var a=e.querySelector(":checked");a!==null&&(i=Ft(a),n(i))}e.__value=i,s=!1}),ti(e)}function Ft(e){return"__value"in e?e.__value:e.value}function tn(e,t,n=t){var r=new WeakSet;Lr(e,"input",async s=>{var i=s?e.defaultValue:e.value;if(i=yn(e)?wn(i):i,n(i),T!==null&&r.add(T),await _s(),i!==(i=t())){var l=e.selectionStart,a=e.selectionEnd,f=e.value.length;if(e.value=i??"",a!==null){var o=e.value.length;l===a&&a===f&&o>f?(e.selectionStart=o,e.selectionEnd=o):(e.selectionStart=l,e.selectionEnd=Math.min(a,o))}}}),Qr(t)==null&&e.value&&(n(yn(e)?wn(e.value):e.value),T!==null&&r.add(T)),qr(()=>{var s=t();if(e===document.activeElement){var i=nn??T;if(r.has(i))return}yn(e)&&s===wn(e.value)||e.type==="date"&&!s&&!e.value||s!==e.value&&(e.value=s??"")})}function yn(e){var t=e.type;return t==="number"||t==="range"}function wn(e){return e===""?null:+e}function ni(e,t,n,r){var s=r,i=!0,l=()=>(i&&(i=!1,s=r),s),a;a=e[t],a===void 0&&r!==void 0&&(a=l());var f;return f=()=>{var o=e[t];return o===void 0?l():(i=!0,o)},f}const As="5";var dr;typeof window<"u"&&((dr=window.__svelte??(window.__svelte={})).v??(dr.v=new Set)).add(As);async function Qe(e,t){const n=await fetch(`/api${e}`,{headers:{"Content-Type":"application/json"},...t});if(!n.ok){const r=await n.json().catch(()=>({error:n.statusText}));throw new Error(r.error||"Request failed")}return n.json()}const $e={getProjects:()=>Qe("/projects"),getProject:e=>Qe(`/projects/${e}`),updateProject:(e,t)=>Qe(`/projects/${e}`,{method:"PATCH",body:JSON.stringify(t)}),getTasks:e=>Qe(`/projects/${e}/tasks?include_done=true`),createTask:(e,t)=>Qe(`/projects/${e}/tasks`,{method:"POST",body:JSON.stringify(t)}),updateTask:(e,t)=>Qe(`/tasks/${e}`,{method:"PATCH",body:JSON.stringify(t)}),deleteTask:e=>Qe(`/tasks/${e}`,{method:"DELETE"})};var Ps=L('<option class="svelte-1kanzy0"> </option>'),Os=L('<input class="rename-input svelte-1kanzy0" type="text"/>'),Ns=L('<button class="rename-btn svelte-1kanzy0" title="Rename project">✎</button>'),js=L('<header class="toolbar svelte-1kanzy0"><div class="brand svelte-1kanzy0">mindpm</div> <div class="project-area svelte-1kanzy0"><select class="svelte-1kanzy0"></select> <!></div></header>');function Rs(e,t){Xe(t,!0);let n=N(!1),r=N("");const s=Ct(()=>t.projects.find(c=>c.id===t.selectedId));function i(){d(s)&&(g(r,d(s).name,!0),g(n,!0))}function l(){if(!d(s)||!d(n))return;const c=d(r).trim();c&&c!==d(s).name&&t.onRenamed(d(s).id,c),g(n,!1)}function a(c){c.key==="Enter"&&l(),c.key==="Escape"&&g(n,!1)}var f=js(),o=A(x(f),2),v=x(o);Wt(v,21,()=>t.projects,Gn,(c,m)=>{var h=Ps(),b=x(h),k={};Ee(()=>{X(b,d(m).name),k!==(k=d(m).id)&&(h.value=(h.__value=d(m).id)??"")}),I(c,h)});var _;ti(v);var p=A(v,2);{var w=c=>{var m=ei(),h=ln(m);{var b=P=>{var E=Os();Ir(E),Le("blur",E,l),ne("keydown",E,a),tn(E,()=>d(r),R=>g(r,R)),I(P,E)},k=P=>{var E=Ns();ne("click",E,i),I(P,E)};Te(h,P=>{d(n)?P(b):P(k,!1)})}I(c,m)};Te(p,c=>{d(s)&&c(w)})}Ee(()=>{_!==(_=t.selectedId??"")&&(v.value=(v.__value=t.selectedId??"")??"",Xn(v,t.selectedId??""))}),ne("change",v,c=>t.onSelect(c.target.value)),I(e,f),Ze()}Ot(["change","keydown","click"]);const Ms=[{status:"todo",label:"Todo"},{status:"in_progress",label:"In Progress"},{status:"blocked",label:"Blocked"},{status:"done",label:"Done"},{status:"cancelled",label:"Cancelled"}],Is=["critical","high","medium","low"];var Ls=L('<div class="card-desc svelte-35ep21"> </div>'),Fs=L('<span class="tag svelte-35ep21"> </span>'),qs=L('<div class="card-tags svelte-35ep21"></div>'),zs=L('<div draggable="true" role="button" tabindex="0"><div class="card-header svelte-35ep21"><span> </span> <button class="delete-btn svelte-35ep21" title="Delete task">×</button></div> <div class="card-title svelte-35ep21"> </div> <!> <!></div>');function Bs(e,t){Xe(t,!0);let n=N(!1);function r(E){if(!E)return[];try{return JSON.parse(E)}catch{return[]}}const s=Ct(()=>r(t.task.tags)),i=Ct(()=>`priority-${t.task.priority}`);function l(E){g(n,!0),t.onDragStart(E,t.task)}function a(){g(n,!1)}var f=zs();let o;var v=x(f),_=x(v),p=x(_),w=A(_,2),c=A(v,2),m=x(c),h=A(c,2);{var b=E=>{var R=Ls(),Z=x(R);Ee(()=>X(Z,t.task.description)),I(E,R)};Te(h,E=>{t.task.description&&E(b)})}var k=A(h,2);{var P=E=>{var R=qs();Wt(R,21,()=>d(s),Gn,(Z,z)=>{var oe=Fs(),G=x(oe);Ee(()=>X(G,d(z))),I(Z,oe)}),I(E,R)};Te(k,E=>{d(s).length>0&&E(P)})}Ee(()=>{o=In(f,1,"card svelte-35ep21",null,o,{dragging:d(n)}),In(_,1,`priority-badge ${d(i)??""}`,"svelte-35ep21"),X(p,t.task.priority),X(m,t.task.title)}),Le("dragstart",f,l),Le("dragend",f,a),ne("click",f,()=>t.onEdit(t.task)),ne("keydown",f,E=>{E.key==="Enter"&&t.onEdit(t.task)}),ne("click",w,E=>{E.stopPropagation(),t.onDelete(t.task)}),I(e,f),Ze()}Ot(["click","keydown"]);var Hs=L('<button class="add-btn svelte-zswfgn" title="Add task">+</button>'),Vs=L('<div role="list"><div class="column-header svelte-zswfgn"><h3 class="svelte-zswfgn"> <span class="count svelte-zswfgn"> </span></h3> <!></div> <div class="card-list svelte-zswfgn"></div></div>');function Ks(e,t){Xe(t,!0);let n=N(!1);function r(h){h.preventDefault(),h.dataTransfer&&(h.dataTransfer.dropEffect="move"),g(n,!0)}function s(){g(n,!1)}function i(h){h.preventDefault(),g(n,!1),t.onDrop(t.status)}var l=Vs();let a;var f=x(l),o=x(f),v=x(o),_=A(v),p=x(_),w=A(o,2);{var c=h=>{var b=Hs();ne("click",b,()=>t.onAddTask(t.status)),I(h,b)};Te(w,h=>{t.status==="todo"&&h(c)})}var m=A(f,2);Wt(m,21,()=>t.tasks,h=>h.id,(h,b)=>{Bs(h,{get task(){return d(b)},get onEdit(){return t.onEdit},get onDelete(){return t.onDelete},get onDragStart(){return t.onDragStart}})}),Ee(()=>{a=In(l,1,"column svelte-zswfgn",null,a,{"drag-over":d(n)}),X(v,`${t.label??""} `),X(p,t.tasks.length)}),Le("dragover",l,r),Le("dragleave",l,s),Le("drop",l,i),I(e,l),Ze()}Ot(["click"]);var Us=L("<option> </option>"),Ys=L('<div class="field svelte-1gmf2hi"><label for="status" class="svelte-1gmf2hi">Status</label> <select id="status" class="svelte-1gmf2hi"><option>Todo</option><option>In Progress</option><option>Blocked</option><option>Done</option><option>Cancelled</option></select></div>'),Ws=L('<div class="modal-backdrop svelte-1gmf2hi"><div class="modal svelte-1gmf2hi"><div class="modal-header svelte-1gmf2hi"><h2 class="svelte-1gmf2hi"> </h2> <button class="close-btn svelte-1gmf2hi">×</button></div> <form><div class="field svelte-1gmf2hi"><label for="title" class="svelte-1gmf2hi">Title</label> <input id="title" type="text" placeholder="Task title" required="" class="svelte-1gmf2hi"/></div> <div class="field svelte-1gmf2hi"><label for="description" class="svelte-1gmf2hi">Description</label> <textarea id="description" placeholder="Optional description" rows="3" class="svelte-1gmf2hi"></textarea></div> <div class="row svelte-1gmf2hi"><div class="field svelte-1gmf2hi"><label for="priority" class="svelte-1gmf2hi">Priority</label> <select id="priority" class="svelte-1gmf2hi"></select></div> <!></div> <div class="field svelte-1gmf2hi"><label for="tags" class="svelte-1gmf2hi">Tags <span class="hint svelte-1gmf2hi">(comma-separated)</span></label> <input id="tags" type="text" placeholder="e.g. backend, auth, bug" class="svelte-1gmf2hi"/></div> <div class="actions svelte-1gmf2hi"><button type="button" class="btn-cancel svelte-1gmf2hi">Cancel</button> <button type="submit" class="btn-save svelte-1gmf2hi"> </button></div></form></div></div>');function Js(e,t){Xe(t,!0);let n=ni(t,"defaultStatus",3,"todo"),r=N(""),s=N(""),i=N("medium"),l=N("todo"),a=N("");Un(()=>{var O,B,ue,Ce,je;if(g(r,((O=t.task)==null?void 0:O.title)??"",!0),g(s,((B=t.task)==null?void 0:B.description)??"",!0),g(i,((ue=t.task)==null?void 0:ue.priority)??"medium",!0),g(l,((Ce=t.task)==null?void 0:Ce.status)??n(),!0),(je=t.task)!=null&&je.tags)try{g(a,JSON.parse(t.task.tags).join(", "),!0)}catch{g(a,"")}else g(a,"")});const f=Ct(()=>t.task!==null);function o(O){O.preventDefault();const B=d(r).trim();if(!B)return;const ue=d(a).split(",").map(Ce=>Ce.trim()).filter(Boolean);t.onSave({title:B,description:d(s).trim(),priority:d(i),...d(f)?{status:d(l)}:{},tags:ue})}function v(O){O.target.classList.contains("modal-backdrop")&&t.onClose()}function _(O){O.key==="Escape"&&t.onClose()}var p=Ws();Le("keydown",rn,_);var w=x(p),c=x(w),m=x(c),h=x(m),b=A(m,2),k=A(c,2),P=x(k),E=A(x(P),2);Ir(E);var R=A(P,2),Z=A(x(R),2),z=A(R,2),oe=x(z),G=A(x(oe),2);Wt(G,21,()=>Is,Gn,(O,B)=>{var ue=Us(),Ce=x(ue),je={};Ee(()=>{X(Ce,d(B)),je!==(je=d(B))&&(ue.value=(ue.__value=d(B))??"")}),I(O,ue)});var Jt=A(oe,2);{var vn=O=>{var B=Ys(),ue=A(x(B),2),Ce=x(ue);Ce.value=Ce.__value="todo";var je=A(Ce);je.value=je.__value="in_progress";var _n=A(je);_n.value=_n.__value="blocked";var pn=A(_n);pn.value=pn.__value="done";var Qn=A(pn);Qn.value=Qn.__value="cancelled",ur(ue,()=>d(l),ri=>g(l,ri)),I(O,B)};Te(Jt,O=>{d(f)&&O(vn)})}var Gt=A(z,2),hn=A(x(Gt),2),y=A(Gt,2),M=x(y),re=A(M,2),J=x(re);Ee(()=>{X(h,d(f)?"Edit Task":"New Task"),X(J,d(f)?"Save":"Create")}),ne("click",p,v),ne("click",b,function(...O){var B;(B=t.onClose)==null||B.apply(this,O)}),Le("submit",k,o),tn(E,()=>d(r),O=>g(r,O)),tn(Z,()=>d(s),O=>g(s,O)),ur(G,()=>d(i),O=>g(i,O)),tn(hn,()=>d(a),O=>g(a,O)),ne("click",M,function(...O){var B;(B=t.onClose)==null||B.apply(this,O)}),I(e,p),Ze()}Ot(["click"]);var Gs=L('<div class="modal-backdrop svelte-1efofyg"><div class="dialog svelte-1efofyg"><h3 class="svelte-1efofyg"> </h3> <p class="svelte-1efofyg"> </p> <div class="actions svelte-1efofyg"><button class="btn-cancel svelte-1efofyg">Cancel</button> <button class="btn-confirm svelte-1efofyg"> </button></div></div></div>');function Xs(e,t){Xe(t,!0);let n=ni(t,"confirmLabel",3,"Delete");function r(m){m.target.classList.contains("modal-backdrop")&&t.onCancel()}function s(m){m.key==="Escape"&&t.onCancel()}var i=Gs();Le("keydown",rn,s);var l=x(i),a=x(l),f=x(a),o=A(a,2),v=x(o),_=A(o,2),p=x(_),w=A(p,2),c=x(w);Ee(()=>{X(f,t.title),X(v,t.message),X(c,n())}),ne("click",i,r),ne("click",p,function(...m){var h;(h=t.onCancel)==null||h.apply(this,m)}),ne("click",w,function(...m){var h;(h=t.onConfirm)==null||h.apply(this,m)}),I(e,i),Ze()}Ot(["click"]);var Zs=L('<div class="board-message svelte-x7v2jt">Loading tasks...</div>'),Qs=L('<div class="board-message error svelte-x7v2jt"> <button class="svelte-x7v2jt">Retry</button></div>'),$s=L('<div class="board svelte-x7v2jt"></div>'),el=L('<div class="board-wrapper svelte-x7v2jt"><!></div> <!> <!>',1);function tl(e,t){Xe(t,!0);let n=N(nt([])),r=N(!0),s=N(null),i=N(!1),l=N(null),a=N("todo"),f=N(!1),o=N(null),v=N(null);const _=Ct(()=>Ms.map(y=>({...y,tasks:d(n).filter(M=>M.status===y.status)})));async function p(){g(r,!0),g(s,null);try{g(n,await $e.getTasks(t.project.id),!0)}catch(y){g(s,y.message,!0)}finally{g(r,!1)}}Un(()=>{t.project.id,p()});function w(y,M){g(v,M,!0),y.dataTransfer&&(y.dataTransfer.effectAllowed="move",y.dataTransfer.setData("text/plain",M.id))}async function c(y){if(!d(v)||d(v).status===y){g(v,null);return}const M=d(v),re=M.status;g(v,null);const J=d(n).findIndex(O=>O.id===M.id);J!==-1&&(d(n)[J]={...d(n)[J],status:y});try{await $e.updateTask(M.id,{status:y})}catch(O){J!==-1&&(d(n)[J]={...d(n)[J],status:re}),g(s,O.message,!0)}}function m(y){g(l,null),g(a,y,!0),g(i,!0)}function h(y){g(l,y,!0),g(i,!0)}async function b(y){try{if(d(l)){const M=await $e.updateTask(d(l).id,{title:y.title,description:y.description||null,priority:y.priority,status:y.status,tags:y.tags.length>0?y.tags:null}),re=d(n).findIndex(J=>J.id===d(l).id);re!==-1&&(d(n)[re]=M)}else{const M=await $e.createTask(t.project.id,{title:y.title,description:y.description||void 0,priority:y.priority,tags:y.tags.length>0?y.tags:void 0});g(n,[M,...d(n)],!0)}g(i,!1),g(l,null)}catch(M){g(s,M.message,!0)}}function k(y){g(o,y,!0),g(f,!0)}async function P(){if(d(o))try{await $e.deleteTask(d(o).id),g(n,d(n).filter(y=>y.id!==d(o).id&&y.parent_task_id!==d(o).id),!0),g(f,!1),g(o,null)}catch(y){g(s,y.message,!0)}}var E=el(),R=ln(E),Z=x(R);{var z=y=>{var M=Zs();I(y,M)},oe=y=>{var M=Qs(),re=x(M),J=A(re);Ee(()=>X(re,`${d(s)??""} `)),ne("click",J,()=>{g(s,null),p()}),I(y,M)},G=y=>{var M=$s();Wt(M,21,()=>d(_),re=>re.status,(re,J)=>{Ks(re,{get status(){return d(J).status},get label(){return d(J).label},get tasks(){return d(J).tasks},onEdit:h,onDelete:k,onDragStart:w,onDrop:c,onAddTask:m})}),I(y,M)};Te(Z,y=>{d(r)?y(z):d(s)?y(oe,1):y(G,!1)})}var Jt=A(R,2);{var vn=y=>{Js(y,{get task(){return d(l)},get defaultStatus(){return d(a)},onSave:b,onClose:()=>{g(i,!1),g(l,null)}})};Te(Jt,y=>{d(i)&&y(vn)})}var Gt=A(Jt,2);{var hn=y=>{Xs(y,{title:"Delete Task",get message(){return`Are you sure you want to delete "${d(o).title??""}"? This cannot be undone.`},onConfirm:P,onCancel:()=>{g(f,!1),g(o,null)}})};Te(Gt,y=>{d(f)&&d(o)&&y(hn)})}I(e,E),Ze()}Ot(["click"]);var nl=L('<div class="loading svelte-1n46o8q">Loading projects...</div>'),rl=L('<div class="error svelte-1n46o8q"> </div>'),il=L('<div class="empty svelte-1n46o8q"><h2 class="svelte-1n46o8q">No projects yet</h2> <p class="svelte-1n46o8q">Create a project using mindpm MCP tools to get started.</p></div>'),sl=L("<!> <!>",1);function ll(e,t){Xe(t,!0);let n=N(nt([])),r=N(null),s=N(!0),i=N(null);const l=Ct(()=>d(n).find(h=>h.id===d(r))??null);async function a(){try{g(n,await $e.getProjects(),!0),d(n).length>0&&!d(r)&&g(r,d(n)[0].id,!0)}catch(h){g(i,h.message,!0)}finally{g(s,!1)}}function f(h){g(r,h,!0)}async function o(h,b){try{await $e.updateProject(h,{name:b});const k=d(n).findIndex(P=>P.id===h);k!==-1&&(d(n)[k]={...d(n)[k],name:b})}catch(k){g(i,k.message,!0)}}Un(()=>{a()});var v=ei(),_=ln(v);{var p=h=>{var b=nl();I(h,b)},w=h=>{var b=rl(),k=x(b);Ee(()=>X(k,d(i))),I(h,b)},c=h=>{var b=il();I(h,b)},m=h=>{var b=sl(),k=ln(b);Rs(k,{get projects(){return d(n)},get selectedId(){return d(r)},onSelect:f,onRenamed:o});var P=A(k,2);{var E=R=>{tl(R,{get project(){return d(l)}})};Te(P,R=>{d(l)&&R(E)})}I(h,b)};Te(_,h=>{d(s)?h(p):d(i)?h(w,1):d(n).length===0?h(c,2):h(m,!1)})}I(e,v),Ze()}bs(ll,{target:document.getElementById("app")});
|
|
1
|
+
var ii=Object.defineProperty;var $n=e=>{throw TypeError(e)};var si=(e,t,n)=>t in e?ii(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n;var De=(e,t,n)=>si(e,typeof t!="symbol"?t+"":t,n),gn=(e,t,n)=>t.has(e)||$n("Cannot "+n);var u=(e,t,n)=>(gn(e,t,"read from private field"),n?n.call(e):t.get(e)),D=(e,t,n)=>t.has(e)?$n("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n),S=(e,t,n,r)=>(gn(e,t,"write to private field"),r?r.call(e,n):t.set(e,n),n),H=(e,t,n)=>(gn(e,t,"access private method"),n);(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const s of document.querySelectorAll('link[rel="modulepreload"]'))r(s);new MutationObserver(s=>{for(const i of s)if(i.type==="childList")for(const l of i.addedNodes)l.tagName==="LINK"&&l.rel==="modulepreload"&&r(l)}).observe(document,{childList:!0,subtree:!0});function n(s){const i={};return s.integrity&&(i.integrity=s.integrity),s.referrerPolicy&&(i.referrerPolicy=s.referrerPolicy),s.crossOrigin==="use-credentials"?i.credentials="include":s.crossOrigin==="anonymous"?i.credentials="omit":i.credentials="same-origin",i}function r(s){if(s.ep)return;s.ep=!0;const i=n(s);fetch(s.href,i)}})();const bn=!1;var Fn=Array.isArray,li=Array.prototype.indexOf,Tt=Array.prototype.includes,on=Array.from,ai=Object.defineProperty,Rt=Object.getOwnPropertyDescriptor,fi=Object.prototype,oi=Array.prototype,ui=Object.getPrototypeOf,er=Object.isExtensible;const ci=()=>{};function di(e){for(var t=0;t<e.length;t++)e[t]()}function vr(){var e,t,n=new Promise((r,s)=>{e=r,t=s});return{promise:n,resolve:e,reject:t}}const Y=2,Kt=4,un=8,hr=1<<24,Fe=16,xe=32,pt=64,kn=128,he=512,V=1024,W=2048,Se=4096,ae=8192,Ke=16384,dt=32768,St=65536,tr=1<<17,_r=1<<18,Pt=1<<19,vi=1<<20,He=1<<25,vt=65536,En=1<<21,qn=1<<22,Ue=1<<23,Mt=Symbol("$state"),et=new class extends Error{constructor(){super(...arguments);De(this,"name","StaleReactionError");De(this,"message","The reaction that called `getAbortSignal()` was re-run or destroyed")}};function hi(){throw new Error("https://svelte.dev/e/async_derived_orphan")}function _i(e,t,n){throw new Error("https://svelte.dev/e/each_key_duplicate")}function pi(e){throw new Error("https://svelte.dev/e/effect_in_teardown")}function gi(){throw new Error("https://svelte.dev/e/effect_in_unowned_derived")}function mi(e){throw new Error("https://svelte.dev/e/effect_orphan")}function yi(){throw new Error("https://svelte.dev/e/effect_update_depth_exceeded")}function wi(){throw new Error("https://svelte.dev/e/state_descriptors_fixed")}function bi(){throw new Error("https://svelte.dev/e/state_prototype_fixed")}function ki(){throw new Error("https://svelte.dev/e/state_unsafe_mutation")}function Ei(){throw new Error("https://svelte.dev/e/svelte_boundary_reset_onerror")}const Ti=1,Si=2,xi=16,Ci=1,Di=2,K=Symbol(),Ai="http://www.w3.org/1999/xhtml";function Pi(){console.warn("https://svelte.dev/e/select_multiple_invalid_value")}function Oi(){console.warn("https://svelte.dev/e/svelte_boundary_reset_noop")}function pr(e){return e===this.v}function ji(e,t){return e!=e?t==t:e!==t||e!==null&&typeof e=="object"||typeof e=="function"}function gr(e){return!ji(e,this.v)}let Ni=!1,pe=null;function xt(e){pe=e}function Xe(e,t=!1,n){pe={p:pe,i:!1,c:null,e:null,s:e,x:null,l:null}}function Ze(e){var t=pe,n=t.e;if(n!==null){t.e=null;for(var r of n)Fr(r)}return t.i=!0,pe=t.p,{}}function mr(){return!0}let tt=[];function yr(){var e=tt;tt=[],di(e)}function Ye(e){if(tt.length===0&&!It){var t=tt;queueMicrotask(()=>{t===tt&&yr()})}tt.push(e)}function Ri(){for(;tt.length>0;)yr()}function wr(e){var t=N;if(t===null)return C.f|=Ue,e;if((t.f&dt)===0&&(t.f&Kt)===0)throw e;Ve(e,t)}function Ve(e,t){for(;t!==null;){if((t.f&kn)!==0){if((t.f&dt)===0)throw e;try{t.b.error(e);return}catch(n){e=n}}t=t.parent}throw e}const Mi=-7169;function F(e,t){e.f=e.f&Mi|t}function zn(e){(e.f&he)!==0||e.deps===null?F(e,V):F(e,Se)}function br(e){if(e!==null)for(const t of e)(t.f&Y)===0||(t.f&vt)===0||(t.f^=vt,br(t.deps))}function kr(e,t,n){(e.f&W)!==0?t.add(e):(e.f&Se)!==0&&n.add(e),br(e.deps),F(e,V)}const Xt=new Set;let T=null,nn=null,U=null,$=[],cn=null,Tn=!1,It=!1;var gt,mt,st,yt,zt,Bt,lt,Re,wt,fe,Sn,xn,Cn,Er;const Zn=class Zn{constructor(){D(this,fe);De(this,"current",new Map);De(this,"previous",new Map);D(this,gt,new Set);D(this,mt,new Set);D(this,st,0);D(this,yt,0);D(this,zt,null);D(this,Bt,new Set);D(this,lt,new Set);D(this,Re,new Map);De(this,"is_fork",!1);D(this,wt,!1)}skip_effect(t){u(this,Re).has(t)||u(this,Re).set(t,{d:[],m:[]})}unskip_effect(t){var n=u(this,Re).get(t);if(n){u(this,Re).delete(t);for(var r of n.d)F(r,W),be(r);for(r of n.m)F(r,Se),be(r)}}process(t){var s;$=[],this.apply();var n=[],r=[];for(const i of t)H(this,fe,xn).call(this,i,n,r);if(H(this,fe,Sn).call(this)){H(this,fe,Cn).call(this,r),H(this,fe,Cn).call(this,n);for(const[i,l]of u(this,Re))Cr(i,l)}else{for(const i of u(this,gt))i();u(this,gt).clear(),u(this,st)===0&&H(this,fe,Er).call(this),nn=this,T=null,nr(r),nr(n),nn=null,(s=u(this,zt))==null||s.resolve()}U=null}capture(t,n){n!==K&&!this.previous.has(t)&&this.previous.set(t,n),(t.f&Ue)===0&&(this.current.set(t,t.v),U==null||U.set(t,t.v))}activate(){T=this,this.apply()}deactivate(){T===this&&(T=null,U=null)}flush(){if(this.activate(),$.length>0){if(Tr(),T!==null&&T!==this)return}else u(this,st)===0&&this.process([]);this.deactivate()}discard(){for(const t of u(this,mt))t(this);u(this,mt).clear()}increment(t){S(this,st,u(this,st)+1),t&&S(this,yt,u(this,yt)+1)}decrement(t){S(this,st,u(this,st)-1),t&&S(this,yt,u(this,yt)-1),!u(this,wt)&&(S(this,wt,!0),Ye(()=>{S(this,wt,!1),H(this,fe,Sn).call(this)?$.length>0&&this.flush():this.revive()}))}revive(){for(const t of u(this,Bt))u(this,lt).delete(t),F(t,W),be(t);for(const t of u(this,lt))F(t,Se),be(t);this.flush()}oncommit(t){u(this,gt).add(t)}ondiscard(t){u(this,mt).add(t)}settled(){return(u(this,zt)??S(this,zt,vr())).promise}static ensure(){if(T===null){const t=T=new Zn;Xt.add(T),It||Ye(()=>{T===t&&t.flush()})}return T}apply(){}};gt=new WeakMap,mt=new WeakMap,st=new WeakMap,yt=new WeakMap,zt=new WeakMap,Bt=new WeakMap,lt=new WeakMap,Re=new WeakMap,wt=new WeakMap,fe=new WeakSet,Sn=function(){return this.is_fork||u(this,yt)>0},xn=function(t,n,r){t.f^=V;for(var s=t.first;s!==null;){var i=s.f,l=(i&(xe|pt))!==0,a=l&&(i&V)!==0,f=a||(i&ae)!==0||u(this,Re).has(s);if(!f&&s.fn!==null){l?s.f^=V:(i&Kt)!==0?n.push(s):Yt(s)&&((i&Fe)!==0&&u(this,lt).add(s),At(s));var o=s.first;if(o!==null){s=o;continue}}for(;s!==null;){var h=s.next;if(h!==null){s=h;break}s=s.parent}}},Cn=function(t){for(var n=0;n<t.length;n+=1)kr(t[n],u(this,Bt),u(this,lt))},Er=function(){var s;if(Xt.size>1){this.previous.clear();var t=U,n=!0;for(const i of Xt){if(i===this){n=!1;continue}const l=[];for(const[f,o]of this.current){if(i.current.has(f))if(n&&o!==i.current.get(f))i.current.set(f,o);else continue;l.push(f)}if(l.length===0)continue;const a=[...i.current.keys()].filter(f=>!this.current.has(f));if(a.length>0){var r=$;$=[];const f=new Set,o=new Map;for(const h of l)Sr(h,a,f,o);if($.length>0){T=i,i.apply();for(const h of $)H(s=i,fe,xn).call(s,h,[],[]);i.deactivate()}$=r}}T=null,U=t}Xt.delete(this)};let We=Zn;function Ii(e){var t=It;It=!0;try{for(var n;;){if(Ri(),$.length===0&&(T==null||T.flush(),$.length===0))return cn=null,n;Tr()}}finally{It=t}}function Tr(){Tn=!0;var e=null;try{for(var t=0;$.length>0;){var n=We.ensure();if(t++>1e3){var r,s;Li()}n.process($),Je.clear()}}finally{$=[],Tn=!1,cn=null}}function Li(){try{yi()}catch(e){Ve(e,cn)}}let me=null;function nr(e){var t=e.length;if(t!==0){for(var n=0;n<t;){var r=e[n++];if((r.f&(Ke|ae))===0&&Yt(r)&&(me=new Set,At(r),r.deps===null&&r.first===null&&r.nodes===null&&r.teardown===null&&r.ac===null&&Br(r),(me==null?void 0:me.size)>0)){Je.clear();for(const s of me){if((s.f&(Ke|ae))!==0)continue;const i=[s];let l=s.parent;for(;l!==null;)me.has(l)&&(me.delete(l),i.push(l)),l=l.parent;for(let a=i.length-1;a>=0;a--){const f=i[a];(f.f&(Ke|ae))===0&&At(f)}}me.clear()}}me=null}}function Sr(e,t,n,r){if(!n.has(e)&&(n.add(e),e.reactions!==null))for(const s of e.reactions){const i=s.f;(i&Y)!==0?Sr(s,t,n,r):(i&(qn|Fe))!==0&&(i&W)===0&&xr(s,t,r)&&(F(s,W),be(s))}}function xr(e,t,n){const r=n.get(e);if(r!==void 0)return r;if(e.deps!==null)for(const s of e.deps){if(Tt.call(t,s))return!0;if((s.f&Y)!==0&&xr(s,t,n))return n.set(s,!0),!0}return n.set(e,!1),!1}function be(e){var t=cn=e,n=t.b;if(n!=null&&n.is_pending&&(e.f&(Kt|un|hr))!==0&&(e.f&dt)===0){n.defer_effect(e);return}for(;t.parent!==null;){t=t.parent;var r=t.f;if(Tn&&t===N&&(r&Fe)!==0&&(r&_r)===0&&(r&dt)!==0)return;if((r&(pt|xe))!==0){if((r&V)===0)return;t.f^=V}}$.push(t)}function Cr(e,t){if(!((e.f&xe)!==0&&(e.f&V)!==0)){(e.f&W)!==0?t.d.push(e):(e.f&Se)!==0&&t.m.push(e),F(e,V);for(var n=e.first;n!==null;)Cr(n,t),n=n.next}}function Fi(e){let t=0,n=ht(0),r;return()=>{Vn()&&(d(n),qr(()=>(t===0&&(r=Qr(()=>e(()=>Lt(n)))),t+=1,()=>{Ye(()=>{t-=1,t===0&&(r==null||r(),r=void 0,Lt(n))})})))}}var qi=St|Pt;function zi(e,t,n,r){new Bi(e,t,n,r)}var de,Ln,Ae,at,Q,Pe,se,ye,Me,ft,Be,bt,kt,Et,Ie,an,q,Hi,Vi,Ki,Dn,Qt,$t,An;class Bi{constructor(t,n,r,s){D(this,q);De(this,"parent");De(this,"is_pending",!1);De(this,"transform_error");D(this,de);D(this,Ln,null);D(this,Ae);D(this,at);D(this,Q);D(this,Pe,null);D(this,se,null);D(this,ye,null);D(this,Me,null);D(this,ft,0);D(this,Be,0);D(this,bt,!1);D(this,kt,new Set);D(this,Et,new Set);D(this,Ie,null);D(this,an,Fi(()=>(S(this,Ie,ht(u(this,ft))),()=>{S(this,Ie,null)})));var i;S(this,de,t),S(this,Ae,n),S(this,at,l=>{var a=N;a.b=this,a.f|=kn,r(l)}),this.parent=N.b,this.transform_error=s??((i=this.parent)==null?void 0:i.transform_error)??(l=>l),S(this,Q,Yn(()=>{H(this,q,Dn).call(this)},qi))}defer_effect(t){kr(t,u(this,kt),u(this,Et))}is_rendered(){return!this.is_pending&&(!this.parent||this.parent.is_rendered())}has_pending_snippet(){return!!u(this,Ae).pending}update_pending_count(t){H(this,q,An).call(this,t),S(this,ft,u(this,ft)+t),!(!u(this,Ie)||u(this,bt))&&(S(this,bt,!0),Ye(()=>{S(this,bt,!1),u(this,Ie)&&Dt(u(this,Ie),u(this,ft))}))}get_effect_pending(){return u(this,an).call(this),d(u(this,Ie))}error(t){var n=u(this,Ae).onerror;let r=u(this,Ae).failed;if(!n&&!r)throw t;u(this,Pe)&&(te(u(this,Pe)),S(this,Pe,null)),u(this,se)&&(te(u(this,se)),S(this,se,null)),u(this,ye)&&(te(u(this,ye)),S(this,ye,null));var s=!1,i=!1;const l=()=>{if(s){Oi();return}s=!0,i&&Ei(),u(this,ye)!==null&&ut(u(this,ye),()=>{S(this,ye,null)}),H(this,q,$t).call(this,()=>{We.ensure(),H(this,q,Dn).call(this)})},a=f=>{try{i=!0,n==null||n(f,l),i=!1}catch(o){Ve(o,u(this,Q)&&u(this,Q).parent)}r&&S(this,ye,H(this,q,$t).call(this,()=>{We.ensure();try{return ve(()=>{var o=N;o.b=this,o.f|=kn,r(u(this,de),()=>f,()=>l)})}catch(o){return Ve(o,u(this,Q).parent),null}}))};Ye(()=>{var f;try{f=this.transform_error(t)}catch(o){Ve(o,u(this,Q)&&u(this,Q).parent);return}f!==null&&typeof f=="object"&&typeof f.then=="function"?f.then(a,o=>Ve(o,u(this,Q)&&u(this,Q).parent)):a(f)})}}de=new WeakMap,Ln=new WeakMap,Ae=new WeakMap,at=new WeakMap,Q=new WeakMap,Pe=new WeakMap,se=new WeakMap,ye=new WeakMap,Me=new WeakMap,ft=new WeakMap,Be=new WeakMap,bt=new WeakMap,kt=new WeakMap,Et=new WeakMap,Ie=new WeakMap,an=new WeakMap,q=new WeakSet,Hi=function(){try{S(this,Pe,ve(()=>u(this,at).call(this,u(this,de))))}catch(t){this.error(t)}},Vi=function(t){const n=u(this,Ae).failed;n&&S(this,ye,ve(()=>{n(u(this,de),()=>t,()=>()=>{})}))},Ki=function(){const t=u(this,Ae).pending;t&&(this.is_pending=!0,S(this,se,ve(()=>t(u(this,de)))),Ye(()=>{var n=S(this,Me,document.createDocumentFragment()),r=Ge();n.append(r),S(this,Pe,H(this,q,$t).call(this,()=>(We.ensure(),ve(()=>u(this,at).call(this,r))))),u(this,Be)===0&&(u(this,de).before(n),S(this,Me,null),ut(u(this,se),()=>{S(this,se,null)}),H(this,q,Qt).call(this))}))},Dn=function(){try{if(this.is_pending=this.has_pending_snippet(),S(this,Be,0),S(this,ft,0),S(this,Pe,ve(()=>{u(this,at).call(this,u(this,de))})),u(this,Be)>0){var t=S(this,Me,document.createDocumentFragment());Kr(u(this,Pe),t);const n=u(this,Ae).pending;S(this,se,ve(()=>n(u(this,de))))}else H(this,q,Qt).call(this)}catch(n){this.error(n)}},Qt=function(){this.is_pending=!1;for(const t of u(this,kt))F(t,W),be(t);for(const t of u(this,Et))F(t,Se),be(t);u(this,kt).clear(),u(this,Et).clear()},$t=function(t){var n=N,r=C,s=pe;je(u(this,Q)),ge(u(this,Q)),xt(u(this,Q).ctx);try{return t()}catch(i){return wr(i),null}finally{je(n),ge(r),xt(s)}},An=function(t){var n;if(!this.has_pending_snippet()){this.parent&&H(n=this.parent,q,An).call(n,t);return}S(this,Be,u(this,Be)+t),u(this,Be)===0&&(H(this,q,Qt).call(this),u(this,se)&&ut(u(this,se),()=>{S(this,se,null)}),u(this,Me)&&(u(this,de).before(u(this,Me)),S(this,Me,null)))};function Ui(e,t,n,r){const s=Bn;var i=e.filter(_=>!_.settled);if(n.length===0&&i.length===0){r(t.map(s));return}var l=N,a=Yi(),f=i.length===1?i[0].promise:i.length>1?Promise.all(i.map(_=>_.promise)):null;function o(_){a();try{r(_)}catch(p){(l.f&Ke)===0&&Ve(p,l)}Pn()}if(n.length===0){f.then(()=>o(t.map(s)));return}function h(){a(),Promise.all(n.map(_=>Ji(_))).then(_=>o([...t.map(s),..._])).catch(_=>Ve(_,l))}f?f.then(h):h()}function Yi(){var e=N,t=C,n=pe,r=T;return function(i=!0){je(e),ge(t),xt(n),i&&(r==null||r.activate())}}function Pn(e=!0){je(null),ge(null),xt(null),e&&(T==null||T.deactivate())}function Wi(){var e=N.b,t=T,n=e.is_rendered();return e.update_pending_count(1),t.increment(n),()=>{e.update_pending_count(-1),t.decrement(n)}}function Bn(e){var t=Y|W,n=C!==null&&(C.f&Y)!==0?C:null;return N!==null&&(N.f|=Pt),{ctx:pe,deps:null,effects:null,equals:pr,f:t,fn:e,reactions:null,rv:0,v:K,wv:0,parent:n??N,ac:null}}function Ji(e,t,n){N===null&&hi();var s=void 0,i=ht(K),l=!C,a=new Map;return us(()=>{var p;var f=vr();s=f.promise;try{Promise.resolve(e()).then(f.resolve,f.reject).finally(Pn)}catch(b){f.reject(b),Pn()}var o=T;if(l){var h=Wi();(p=a.get(o))==null||p.reject(et),a.delete(o),a.set(o,f)}const _=(b,c=void 0)=>{if(o.activate(),c)c!==et&&(i.f|=Ue,Dt(i,c));else{(i.f&Ue)!==0&&(i.f^=Ue),Dt(i,b);for(const[m,v]of a){if(a.delete(m),m===o)break;v.reject(et)}}h&&h()};f.promise.then(_,b=>_(null,b||"unknown"))}),Kn(()=>{for(const f of a.values())f.reject(et)}),new Promise(f=>{function o(h){function _(){h===s?f(i):o(s)}h.then(_,_)}o(s)})}function Ct(e){const t=Bn(e);return Ur(t),t}function Gi(e){const t=Bn(e);return t.equals=gr,t}function Xi(e){var t=e.effects;if(t!==null){e.effects=null;for(var n=0;n<t.length;n+=1)te(t[n])}}function Zi(e){for(var t=e.parent;t!==null;){if((t.f&Y)===0)return(t.f&Ke)===0?t:null;t=t.parent}return null}function Hn(e){var t,n=N;je(Zi(e));try{e.f&=~vt,Xi(e),t=Gr(e)}finally{je(n)}return t}function Dr(e){var t=Hn(e);if(!e.equals(t)&&(e.wv=Wr(),(!(T!=null&&T.is_fork)||e.deps===null)&&(e.v=t,e.deps===null))){F(e,V);return}_t||(U!==null?(Vn()||T!=null&&T.is_fork)&&U.set(e,t):zn(e))}function Qi(e){var t,n;if(e.effects!==null)for(const r of e.effects)(r.teardown||r.ac)&&((t=r.teardown)==null||t.call(r),(n=r.ac)==null||n.abort(et),r.teardown=ci,r.ac=null,qt(r,0),Wn(r))}function Ar(e){if(e.effects!==null)for(const t of e.effects)t.teardown&&At(t)}let On=new Set;const Je=new Map;let Pr=!1;function ht(e,t){var n={f:0,v:e,reactions:null,equals:pr,rv:0,wv:0};return n}function j(e,t){const n=ht(e);return Ur(n),n}function $i(e,t=!1,n=!0){const r=ht(e);return t||(r.equals=gr),r}function g(e,t,n=!1){C!==null&&(!ke||(C.f&tr)!==0)&&mr()&&(C.f&(Y|Fe|qn|tr))!==0&&(_e===null||!Tt.call(_e,e))&&ki();let r=n?nt(t):t;return Dt(e,r)}function Dt(e,t){if(!e.equals(t)){var n=e.v;_t?Je.set(e,t):Je.set(e,n),e.v=t;var r=We.ensure();if(r.capture(e,n),(e.f&Y)!==0){const s=e;(e.f&W)!==0&&Hn(s),zn(s)}e.wv=Wr(),Or(e,W),N!==null&&(N.f&V)!==0&&(N.f&(xe|pt))===0&&(ce===null?vs([e]):ce.push(e)),!r.is_fork&&On.size>0&&!Pr&&es()}return t}function es(){Pr=!1;for(const e of On)(e.f&V)!==0&&F(e,Se),Yt(e)&&At(e);On.clear()}function Lt(e){g(e,e.v+1)}function Or(e,t){var n=e.reactions;if(n!==null)for(var r=n.length,s=0;s<r;s++){var i=n[s],l=i.f,a=(l&W)===0;if(a&&F(i,t),(l&Y)!==0){var f=i;U==null||U.delete(f),(l&vt)===0&&(l&he&&(i.f|=vt),Or(f,Se))}else a&&((l&Fe)!==0&&me!==null&&me.add(i),be(i))}}function nt(e){if(typeof e!="object"||e===null||Mt in e)return e;const t=ui(e);if(t!==fi&&t!==oi)return e;var n=new Map,r=Fn(e),s=j(0),i=ct,l=a=>{if(ct===i)return a();var f=C,o=ct;ge(null),lr(i);var h=a();return ge(f),lr(o),h};return r&&n.set("length",j(e.length)),new Proxy(e,{defineProperty(a,f,o){(!("value"in o)||o.configurable===!1||o.enumerable===!1||o.writable===!1)&&wi();var h=n.get(f);return h===void 0?l(()=>{var _=j(o.value);return n.set(f,_),_}):g(h,o.value,!0),!0},deleteProperty(a,f){var o=n.get(f);if(o===void 0){if(f in a){const h=l(()=>j(K));n.set(f,h),Lt(s)}}else g(o,K),Lt(s);return!0},get(a,f,o){var b;if(f===Mt)return e;var h=n.get(f),_=f in a;if(h===void 0&&(!_||(b=Rt(a,f))!=null&&b.writable)&&(h=l(()=>{var c=nt(_?a[f]:K),m=j(c);return m}),n.set(f,h)),h!==void 0){var p=d(h);return p===K?void 0:p}return Reflect.get(a,f,o)},getOwnPropertyDescriptor(a,f){var o=Reflect.getOwnPropertyDescriptor(a,f);if(o&&"value"in o){var h=n.get(f);h&&(o.value=d(h))}else if(o===void 0){var _=n.get(f),p=_==null?void 0:_.v;if(_!==void 0&&p!==K)return{enumerable:!0,configurable:!0,value:p,writable:!0}}return o},has(a,f){var p;if(f===Mt)return!0;var o=n.get(f),h=o!==void 0&&o.v!==K||Reflect.has(a,f);if(o!==void 0||N!==null&&(!h||(p=Rt(a,f))!=null&&p.writable)){o===void 0&&(o=l(()=>{var b=h?nt(a[f]):K,c=j(b);return c}),n.set(f,o));var _=d(o);if(_===K)return!1}return h},set(a,f,o,h){var P;var _=n.get(f),p=f in a;if(r&&f==="length")for(var b=o;b<_.v;b+=1){var c=n.get(b+"");c!==void 0?g(c,K):b in a&&(c=l(()=>j(K)),n.set(b+"",c))}if(_===void 0)(!p||(P=Rt(a,f))!=null&&P.writable)&&(_=l(()=>j(void 0)),g(_,nt(o)),n.set(f,_));else{p=_.v!==K;var m=l(()=>nt(o));g(_,m)}var v=Reflect.getOwnPropertyDescriptor(a,f);if(v!=null&&v.set&&v.set.call(h,o),!p){if(r&&typeof f=="string"){var y=n.get("length"),k=Number(f);Number.isInteger(k)&&k>=y.v&&g(y,k+1)}Lt(s)}return!0},ownKeys(a){d(s);var f=Reflect.ownKeys(a).filter(_=>{var p=n.get(_);return p===void 0||p.v!==K});for(var[o,h]of n)h.v!==K&&!(o in a)&&f.push(o);return f},setPrototypeOf(){bi()}})}function rr(e){try{if(e!==null&&typeof e=="object"&&Mt in e)return e[Mt]}catch{}return e}function ts(e,t){return Object.is(rr(e),rr(t))}var rn,jr,Nr,Rr;function ns(){if(rn===void 0){rn=window,jr=/Firefox/.test(navigator.userAgent);var e=Element.prototype,t=Node.prototype,n=Text.prototype;Nr=Rt(t,"firstChild").get,Rr=Rt(t,"nextSibling").get,er(e)&&(e.__click=void 0,e.__className=void 0,e.__attributes=null,e.__style=void 0,e.__e=void 0),er(n)&&(n.__t=void 0)}}function Ge(e=""){return document.createTextNode(e)}function sn(e){return Nr.call(e)}function Ut(e){return Rr.call(e)}function x(e,t){return sn(e)}function ln(e,t=!1){{var n=sn(e);return n instanceof Comment&&n.data===""?Ut(n):n}}function A(e,t=1,n=!1){let r=e;for(;t--;)r=Ut(r);return r}function rs(e){e.textContent=""}function Mr(){return!1}function is(e,t,n){return document.createElementNS(Ai,e,void 0)}function Ir(e,t){{const n=document.body;e.autofocus=!0,Ye(()=>{document.activeElement===n&&e.focus()})}}let ir=!1;function ss(){ir||(ir=!0,document.addEventListener("reset",e=>{Promise.resolve().then(()=>{var t;if(!e.defaultPrevented)for(const n of e.target.elements)(t=n.__on_r)==null||t.call(n)})},{capture:!0}))}function dn(e){var t=C,n=N;ge(null),je(null);try{return e()}finally{ge(t),je(n)}}function Lr(e,t,n,r=n){e.addEventListener(t,()=>dn(n));const s=e.__on_r;s?e.__on_r=()=>{s(),r(!0)}:e.__on_r=()=>r(!0),ss()}function ls(e){N===null&&(C===null&&mi(),gi()),_t&&pi()}function as(e,t){var n=t.last;n===null?t.last=t.first=e:(n.next=e,e.prev=n,t.last=e)}function qe(e,t,n){var r=N;r!==null&&(r.f&ae)!==0&&(e|=ae);var s={ctx:pe,deps:null,nodes:null,f:e|W|he,first:null,fn:t,last:null,next:null,parent:r,b:r&&r.b,prev:null,teardown:null,wv:0,ac:null};if(n)try{At(s)}catch(a){throw te(s),a}else t!==null&&be(s);var i=s;if(n&&i.deps===null&&i.teardown===null&&i.nodes===null&&i.first===i.last&&(i.f&Pt)===0&&(i=i.first,(e&Fe)!==0&&(e&St)!==0&&i!==null&&(i.f|=St)),i!==null&&(i.parent=r,r!==null&&as(i,r),C!==null&&(C.f&Y)!==0&&(e&pt)===0)){var l=C;(l.effects??(l.effects=[])).push(i)}return s}function Vn(){return C!==null&&!ke}function Kn(e){const t=qe(un,null,!1);return F(t,V),t.teardown=e,t}function Un(e){ls();var t=N.f,n=!C&&(t&xe)!==0&&(t&dt)===0;if(n){var r=pe;(r.e??(r.e=[])).push(e)}else return Fr(e)}function Fr(e){return qe(Kt|vi,e,!1)}function fs(e){We.ensure();const t=qe(pt|Pt,e,!0);return(n={})=>new Promise(r=>{n.outro?ut(t,()=>{te(t),r(void 0)}):(te(t),r(void 0))})}function os(e){return qe(Kt,e,!1)}function us(e){return qe(qn|Pt,e,!0)}function qr(e,t=0){return qe(un|t,e,!0)}function Ee(e,t=[],n=[],r=[]){Ui(r,t,n,s=>{qe(un,()=>e(...s.map(d)),!0)})}function Yn(e,t=0){var n=qe(Fe|t,e,!0);return n}function ve(e){return qe(xe|Pt,e,!0)}function zr(e){var t=e.teardown;if(t!==null){const n=_t,r=C;sr(!0),ge(null);try{t.call(null)}finally{sr(n),ge(r)}}}function Wn(e,t=!1){var n=e.first;for(e.first=e.last=null;n!==null;){const s=n.ac;s!==null&&dn(()=>{s.abort(et)});var r=n.next;(n.f&pt)!==0?n.parent=null:te(n,t),n=r}}function cs(e){for(var t=e.first;t!==null;){var n=t.next;(t.f&xe)===0&&te(t),t=n}}function te(e,t=!0){var n=!1;(t||(e.f&_r)!==0)&&e.nodes!==null&&e.nodes.end!==null&&(ds(e.nodes.start,e.nodes.end),n=!0),Wn(e,t&&!n),qt(e,0),F(e,Ke);var r=e.nodes&&e.nodes.t;if(r!==null)for(const i of r)i.stop();zr(e);var s=e.parent;s!==null&&s.first!==null&&Br(e),e.next=e.prev=e.teardown=e.ctx=e.deps=e.fn=e.nodes=e.ac=null}function ds(e,t){for(;e!==null;){var n=e===t?null:Ut(e);e.remove(),e=n}}function Br(e){var t=e.parent,n=e.prev,r=e.next;n!==null&&(n.next=r),r!==null&&(r.prev=n),t!==null&&(t.first===e&&(t.first=r),t.last===e&&(t.last=n))}function ut(e,t,n=!0){var r=[];Hr(e,r,!0);var s=()=>{n&&te(e),t&&t()},i=r.length;if(i>0){var l=()=>--i||s();for(var a of r)a.out(l)}else s()}function Hr(e,t,n){if((e.f&ae)===0){e.f^=ae;var r=e.nodes&&e.nodes.t;if(r!==null)for(const a of r)(a.is_global||n)&&t.push(a);for(var s=e.first;s!==null;){var i=s.next,l=(s.f&St)!==0||(s.f&xe)!==0&&(e.f&Fe)!==0;Hr(s,t,l?n:!1),s=i}}}function Jn(e){Vr(e,!0)}function Vr(e,t){if((e.f&ae)!==0){e.f^=ae,(e.f&V)===0&&(F(e,W),be(e));for(var n=e.first;n!==null;){var r=n.next,s=(n.f&St)!==0||(n.f&xe)!==0;Vr(n,s?t:!1),n=r}var i=e.nodes&&e.nodes.t;if(i!==null)for(const l of i)(l.is_global||t)&&l.in()}}function Kr(e,t){if(e.nodes)for(var n=e.nodes.start,r=e.nodes.end;n!==null;){var s=n===r?null:Ut(n);t.append(n),n=s}}let en=!1,_t=!1;function sr(e){_t=e}let C=null,ke=!1;function ge(e){C=e}let N=null;function je(e){N=e}let _e=null;function Ur(e){C!==null&&(_e===null?_e=[e]:_e.push(e))}let ee=null,ie=0,ce=null;function vs(e){ce=e}let Yr=1,rt=0,ct=rt;function lr(e){ct=e}function Wr(){return++Yr}function Yt(e){var t=e.f;if((t&W)!==0)return!0;if(t&Y&&(e.f&=~vt),(t&Se)!==0){for(var n=e.deps,r=n.length,s=0;s<r;s++){var i=n[s];if(Yt(i)&&Dr(i),i.wv>e.wv)return!0}(t&he)!==0&&U===null&&F(e,V)}return!1}function Jr(e,t,n=!0){var r=e.reactions;if(r!==null&&!(_e!==null&&Tt.call(_e,e)))for(var s=0;s<r.length;s++){var i=r[s];(i.f&Y)!==0?Jr(i,t,!1):t===i&&(n?F(i,W):(i.f&V)!==0&&F(i,Se),be(i))}}function Gr(e){var m;var t=ee,n=ie,r=ce,s=C,i=_e,l=pe,a=ke,f=ct,o=e.f;ee=null,ie=0,ce=null,C=(o&(xe|pt))===0?e:null,_e=null,xt(e.ctx),ke=!1,ct=++rt,e.ac!==null&&(dn(()=>{e.ac.abort(et)}),e.ac=null);try{e.f|=En;var h=e.fn,_=h();e.f|=dt;var p=e.deps,b=T==null?void 0:T.is_fork;if(ee!==null){var c;if(b||qt(e,ie),p!==null&&ie>0)for(p.length=ie+ee.length,c=0;c<ee.length;c++)p[ie+c]=ee[c];else e.deps=p=ee;if(Vn()&&(e.f&he)!==0)for(c=ie;c<p.length;c++)((m=p[c]).reactions??(m.reactions=[])).push(e)}else!b&&p!==null&&ie<p.length&&(qt(e,ie),p.length=ie);if(mr()&&ce!==null&&!ke&&p!==null&&(e.f&(Y|Se|W))===0)for(c=0;c<ce.length;c++)Jr(ce[c],e);if(s!==null&&s!==e){if(rt++,s.deps!==null)for(let v=0;v<n;v+=1)s.deps[v].rv=rt;if(t!==null)for(const v of t)v.rv=rt;ce!==null&&(r===null?r=ce:r.push(...ce))}return(e.f&Ue)!==0&&(e.f^=Ue),_}catch(v){return wr(v)}finally{e.f^=En,ee=t,ie=n,ce=r,C=s,_e=i,xt(l),ke=a,ct=f}}function hs(e,t){let n=t.reactions;if(n!==null){var r=li.call(n,e);if(r!==-1){var s=n.length-1;s===0?n=t.reactions=null:(n[r]=n[s],n.pop())}}if(n===null&&(t.f&Y)!==0&&(ee===null||!Tt.call(ee,t))){var i=t;(i.f&he)!==0&&(i.f^=he,i.f&=~vt),zn(i),Qi(i),qt(i,0)}}function qt(e,t){var n=e.deps;if(n!==null)for(var r=t;r<n.length;r++)hs(e,n[r])}function At(e){var t=e.f;if((t&Ke)===0){F(e,V);var n=N,r=en;N=e,en=!0;try{(t&(Fe|hr))!==0?cs(e):Wn(e),zr(e);var s=Gr(e);e.teardown=typeof s=="function"?s:null,e.wv=Yr;var i;bn&&Ni&&(e.f&W)!==0&&e.deps}finally{en=r,N=n}}}async function _s(){await Promise.resolve(),Ii()}function d(e){var t=e.f,n=(t&Y)!==0;if(C!==null&&!ke){var r=N!==null&&(N.f&Ke)!==0;if(!r&&(_e===null||!Tt.call(_e,e))){var s=C.deps;if((C.f&En)!==0)e.rv<rt&&(e.rv=rt,ee===null&&s!==null&&s[ie]===e?ie++:ee===null?ee=[e]:ee.push(e));else{(C.deps??(C.deps=[])).push(e);var i=e.reactions;i===null?e.reactions=[C]:Tt.call(i,C)||i.push(C)}}}if(_t&&Je.has(e))return Je.get(e);if(n){var l=e;if(_t){var a=l.v;return((l.f&V)===0&&l.reactions!==null||Zr(l))&&(a=Hn(l)),Je.set(l,a),a}var f=(l.f&he)===0&&!ke&&C!==null&&(en||(C.f&he)!==0),o=(l.f&dt)===0;Yt(l)&&(f&&(l.f|=he),Dr(l)),f&&!o&&(Ar(l),Xr(l))}if(U!=null&&U.has(e))return U.get(e);if((e.f&Ue)!==0)throw e.v;return e.v}function Xr(e){if(e.f|=he,e.deps!==null)for(const t of e.deps)(t.reactions??(t.reactions=[])).push(e),(t.f&Y)!==0&&(t.f&he)===0&&(Ar(t),Xr(t))}function Zr(e){if(e.v===K)return!0;if(e.deps===null)return!1;for(const t of e.deps)if(Je.has(t)||(t.f&Y)!==0&&Zr(t))return!0;return!1}function Qr(e){var t=ke;try{return ke=!0,e()}finally{ke=t}}const ps=["touchstart","touchmove"];function gs(e){return ps.includes(e)}const it=Symbol("events"),$r=new Set,jn=new Set;function ms(e,t,n,r={}){function s(i){if(r.capture||Nn.call(t,i),!i.cancelBubble)return dn(()=>n==null?void 0:n.call(this,i))}return e.startsWith("pointer")||e.startsWith("touch")||e==="wheel"?Ye(()=>{t.addEventListener(e,s,r)}):t.addEventListener(e,s,r),s}function Le(e,t,n,r,s){var i={capture:r,passive:s},l=ms(e,t,n,i);(t===document.body||t===window||t===document||t instanceof HTMLMediaElement)&&Kn(()=>{t.removeEventListener(e,l,i)})}function ne(e,t,n){(t[it]??(t[it]={}))[e]=n}function Ot(e){for(var t=0;t<e.length;t++)$r.add(e[t]);for(var n of jn)n(e)}let ar=null;function Nn(e){var v,y;var t=this,n=t.ownerDocument,r=e.type,s=((v=e.composedPath)==null?void 0:v.call(e))||[],i=s[0]||e.target;ar=e;var l=0,a=ar===e&&e[it];if(a){var f=s.indexOf(a);if(f!==-1&&(t===document||t===window)){e[it]=t;return}var o=s.indexOf(t);if(o===-1)return;f<=o&&(l=f)}if(i=s[l]||e.target,i!==t){ai(e,"currentTarget",{configurable:!0,get(){return i||n}});var h=C,_=N;ge(null),je(null);try{for(var p,b=[];i!==null;){var c=i.assignedSlot||i.parentNode||i.host||null;try{var m=(y=i[it])==null?void 0:y[r];m!=null&&(!i.disabled||e.target===i)&&m.call(i,e)}catch(k){p?b.push(k):p=k}if(e.cancelBubble||c===t||c===null)break;i=c}if(p){for(let k of b)queueMicrotask(()=>{throw k});throw p}}finally{e[it]=t,delete e.currentTarget,ge(h),je(_)}}}var cr;const mn=((cr=globalThis==null?void 0:globalThis.window)==null?void 0:cr.trustedTypes)&&globalThis.window.trustedTypes.createPolicy("svelte-trusted-html",{createHTML:e=>e});function ys(e){return(mn==null?void 0:mn.createHTML(e))??e}function ws(e){var t=is("template");return t.innerHTML=ys(e.replaceAll("<!>","<!---->")),t.content}function Rn(e,t){var n=N;n.nodes===null&&(n.nodes={start:e,end:t,a:null,t:null})}function L(e,t){var n=(t&Ci)!==0,r=(t&Di)!==0,s,i=!e.startsWith("<!>");return()=>{s===void 0&&(s=ws(i?e:"<!>"+e),n||(s=sn(s)));var l=r||jr?document.importNode(s,!0):s.cloneNode(!0);if(n){var a=sn(l),f=l.lastChild;Rn(a,f)}else Rn(l,l);return l}}function ei(){var e=document.createDocumentFragment(),t=document.createComment(""),n=Ge();return e.append(t,n),Rn(t,n),e}function I(e,t){e!==null&&e.before(t)}function X(e,t){var n=t==null?"":typeof t=="object"?t+"":t;n!==(e.__t??(e.__t=e.nodeValue))&&(e.__t=n,e.nodeValue=n+"")}function bs(e,t){return ks(e,t)}const Zt=new Map;function ks(e,{target:t,anchor:n,props:r={},events:s,context:i,intro:l=!0,transformError:a}){ns();var f=void 0,o=fs(()=>{var h=n??t.appendChild(Ge());zi(h,{pending:()=>{}},b=>{Xe({});var c=pe;i&&(c.c=i),s&&(r.$$events=s),f=e(b,r)||{},Ze()},a);var _=new Set,p=b=>{for(var c=0;c<b.length;c++){var m=b[c];if(!_.has(m)){_.add(m);var v=gs(m);for(const P of[t,document]){var y=Zt.get(P);y===void 0&&(y=new Map,Zt.set(P,y));var k=y.get(m);k===void 0?(P.addEventListener(m,Nn,{passive:v}),y.set(m,1)):y.set(m,k+1)}}}};return p(on($r)),jn.add(p),()=>{var v;for(var b of _)for(const y of[t,document]){var c=Zt.get(y),m=c.get(b);--m==0?(y.removeEventListener(b,Nn),c.delete(b),c.size===0&&Zt.delete(y)):c.set(b,m)}jn.delete(p),h!==n&&((v=h.parentNode)==null||v.removeChild(h))}});return Es.set(f,o),f}let Es=new WeakMap;var we,Oe,le,ot,Ht,Vt,fn;class Ts{constructor(t,n=!0){De(this,"anchor");D(this,we,new Map);D(this,Oe,new Map);D(this,le,new Map);D(this,ot,new Set);D(this,Ht,!0);D(this,Vt,()=>{var t=T;if(u(this,we).has(t)){var n=u(this,we).get(t),r=u(this,Oe).get(n);if(r)Jn(r),u(this,ot).delete(n);else{var s=u(this,le).get(n);s&&(u(this,Oe).set(n,s.effect),u(this,le).delete(n),s.fragment.lastChild.remove(),this.anchor.before(s.fragment),r=s.effect)}for(const[i,l]of u(this,we)){if(u(this,we).delete(i),i===t)break;const a=u(this,le).get(l);a&&(te(a.effect),u(this,le).delete(l))}for(const[i,l]of u(this,Oe)){if(i===n||u(this,ot).has(i))continue;const a=()=>{if(Array.from(u(this,we).values()).includes(i)){var o=document.createDocumentFragment();Kr(l,o),o.append(Ge()),u(this,le).set(i,{effect:l,fragment:o})}else te(l);u(this,ot).delete(i),u(this,Oe).delete(i)};u(this,Ht)||!r?(u(this,ot).add(i),ut(l,a,!1)):a()}}});D(this,fn,t=>{u(this,we).delete(t);const n=Array.from(u(this,we).values());for(const[r,s]of u(this,le))n.includes(r)||(te(s.effect),u(this,le).delete(r))});this.anchor=t,S(this,Ht,n)}ensure(t,n){var r=T,s=Mr();if(n&&!u(this,Oe).has(t)&&!u(this,le).has(t))if(s){var i=document.createDocumentFragment(),l=Ge();i.append(l),u(this,le).set(t,{effect:ve(()=>n(l)),fragment:i})}else u(this,Oe).set(t,ve(()=>n(this.anchor)));if(u(this,we).set(r,t),s){for(const[a,f]of u(this,Oe))a===t?r.unskip_effect(f):r.skip_effect(f);for(const[a,f]of u(this,le))a===t?r.unskip_effect(f.effect):r.skip_effect(f.effect);r.oncommit(u(this,Vt)),r.ondiscard(u(this,fn))}else u(this,Vt).call(this)}}we=new WeakMap,Oe=new WeakMap,le=new WeakMap,ot=new WeakMap,Ht=new WeakMap,Vt=new WeakMap,fn=new WeakMap;function Te(e,t,n=!1){var r=new Ts(e),s=n?St:0;function i(l,a){r.ensure(l,a)}Yn(()=>{var l=!1;t((a,f=0)=>{l=!0,i(f,a)}),l||i(!1,null)},s)}function Gn(e,t){return t}function Ss(e,t,n){for(var r=[],s=t.length,i,l=t.length,a=0;a<s;a++){let _=t[a];ut(_,()=>{if(i){if(i.pending.delete(_),i.done.add(_),i.pending.size===0){var p=e.outrogroups;Mn(on(i.done)),p.delete(i),p.size===0&&(e.outrogroups=null)}}else l-=1},!1)}if(l===0){var f=r.length===0&&n!==null;if(f){var o=n,h=o.parentNode;rs(h),h.append(o),e.items.clear()}Mn(t,!f)}else i={pending:new Set(t),done:new Set},(e.outrogroups??(e.outrogroups=new Set)).add(i)}function Mn(e,t=!0){for(var n=0;n<e.length;n++)te(e[n],t)}var fr;function Wt(e,t,n,r,s,i=null){var l=e,a=new Map;{var f=e;l=f.appendChild(Ge())}var o=null,h=Gi(()=>{var v=n();return Fn(v)?v:v==null?[]:on(v)}),_,p=!0;function b(){m.fallback=o,xs(m,_,l,t,r),o!==null&&(_.length===0?(o.f&He)===0?Jn(o):(o.f^=He,Nt(o,null,l)):ut(o,()=>{o=null}))}var c=Yn(()=>{_=d(h);for(var v=_.length,y=new Set,k=T,P=Mr(),E=0;E<v;E+=1){var R=_[E],Z=r(R,E),z=p?null:a.get(Z);z?(z.v&&Dt(z.v,R),z.i&&Dt(z.i,E),P&&k.unskip_effect(z.e)):(z=Cs(a,p?l:fr??(fr=Ge()),R,Z,E,s,t,n),p||(z.e.f|=He),a.set(Z,z)),y.add(Z)}if(v===0&&i&&!o&&(p?o=ve(()=>i(l)):(o=ve(()=>i(fr??(fr=Ge()))),o.f|=He)),v>y.size&&_i(),!p)if(P){for(const[oe,G]of a)y.has(oe)||k.skip_effect(G.e);k.oncommit(b),k.ondiscard(()=>{})}else b();d(h)}),m={effect:c,items:a,outrogroups:null,fallback:o};p=!1}function jt(e){for(;e!==null&&(e.f&xe)===0;)e=e.next;return e}function xs(e,t,n,r,s){var oe;var i=t.length,l=e.items,a=jt(e.effect.first),f,o=null,h=[],_=[],p,b,c,m;for(m=0;m<i;m+=1){if(p=t[m],b=s(p,m),c=l.get(b).e,e.outrogroups!==null)for(const G of e.outrogroups)G.pending.delete(c),G.done.delete(c);if((c.f&He)!==0)if(c.f^=He,c===a)Nt(c,null,n);else{var v=o?o.next:a;c===e.effect.last&&(e.effect.last=c.prev),c.prev&&(c.prev.next=c.next),c.next&&(c.next.prev=c.prev),ze(e,o,c),ze(e,c,v),Nt(c,v,n),o=c,h=[],_=[],a=jt(o.next);continue}if((c.f&ae)!==0&&Jn(c),c!==a){if(f!==void 0&&f.has(c)){if(h.length<_.length){var y=_[0],k;o=y.prev;var P=h[0],E=h[h.length-1];for(k=0;k<h.length;k+=1)Nt(h[k],y,n);for(k=0;k<_.length;k+=1)f.delete(_[k]);ze(e,P.prev,E.next),ze(e,o,P),ze(e,E,y),a=y,o=E,m-=1,h=[],_=[]}else f.delete(c),Nt(c,a,n),ze(e,c.prev,c.next),ze(e,c,o===null?e.effect.first:o.next),ze(e,o,c),o=c;continue}for(h=[],_=[];a!==null&&a!==c;)(f??(f=new Set)).add(a),_.push(a),a=jt(a.next);if(a===null)continue}(c.f&He)===0&&h.push(c),o=c,a=jt(c.next)}if(e.outrogroups!==null){for(const G of e.outrogroups)G.pending.size===0&&(Mn(on(G.done)),(oe=e.outrogroups)==null||oe.delete(G));e.outrogroups.size===0&&(e.outrogroups=null)}if(a!==null||f!==void 0){var R=[];if(f!==void 0)for(c of f)(c.f&ae)===0&&R.push(c);for(;a!==null;)(a.f&ae)===0&&a!==e.fallback&&R.push(a),a=jt(a.next);var Z=R.length;if(Z>0){var z=i===0?n:null;Ss(e,R,z)}}}function Cs(e,t,n,r,s,i,l,a){var f=(l&Ti)!==0?(l&xi)===0?$i(n,!1,!1):ht(n):null,o=(l&Si)!==0?ht(s):null;return{v:f,i:o,e:ve(()=>(i(t,f??n,o??s,a),()=>{e.delete(r)}))}}function Nt(e,t,n){if(e.nodes)for(var r=e.nodes.start,s=e.nodes.end,i=t&&(t.f&He)===0?t.nodes.start:n;r!==null;){var l=Ut(r);if(i.before(r),r===s)return;r=l}}function ze(e,t,n){t===null?e.effect.first=n:t.next=n,n===null?e.effect.last=t:n.prev=t}const or=[...`
|
|
2
|
+
\r\f \v\uFEFF`];function Ds(e,t,n){var r=e==null?"":""+e;if(t&&(r=r?r+" "+t:t),n){for(var s of Object.keys(n))if(n[s])r=r?r+" "+s:s;else if(r.length)for(var i=s.length,l=0;(l=r.indexOf(s,l))>=0;){var a=l+i;(l===0||or.includes(r[l-1]))&&(a===r.length||or.includes(r[a]))?r=(l===0?"":r.substring(0,l))+r.substring(a+1):l=a}}return r===""?null:r}function In(e,t,n,r,s,i){var l=e.__className;if(l!==n||l===void 0){var a=Ds(n,r,i);a==null?e.removeAttribute("class"):e.className=a,e.__className=n}else if(i&&s!==i)for(var f in i){var o=!!i[f];(s==null||o!==!!s[f])&&e.classList.toggle(f,o)}return i}function Xn(e,t,n=!1){if(e.multiple){if(t==null)return;if(!Fn(t))return Pi();for(var r of e.options)r.selected=t.includes(Ft(r));return}for(r of e.options){var s=Ft(r);if(ts(s,t)){r.selected=!0;return}}(!n||t!==void 0)&&(e.selectedIndex=-1)}function ti(e){var t=new MutationObserver(()=>{Xn(e,e.__value)});t.observe(e,{childList:!0,subtree:!0,attributes:!0,attributeFilter:["value"]}),Kn(()=>{t.disconnect()})}function ur(e,t,n=t){var r=new WeakSet,s=!0;Lr(e,"change",i=>{var l=i?"[selected]":":checked",a;if(e.multiple)a=[].map.call(e.querySelectorAll(l),Ft);else{var f=e.querySelector(l)??e.querySelector("option:not([disabled])");a=f&&Ft(f)}n(a),T!==null&&r.add(T)}),os(()=>{var i=t();if(e===document.activeElement){var l=nn??T;if(r.has(l))return}if(Xn(e,i,s),s&&i===void 0){var a=e.querySelector(":checked");a!==null&&(i=Ft(a),n(i))}e.__value=i,s=!1}),ti(e)}function Ft(e){return"__value"in e?e.__value:e.value}function tn(e,t,n=t){var r=new WeakSet;Lr(e,"input",async s=>{var i=s?e.defaultValue:e.value;if(i=yn(e)?wn(i):i,n(i),T!==null&&r.add(T),await _s(),i!==(i=t())){var l=e.selectionStart,a=e.selectionEnd,f=e.value.length;if(e.value=i??"",a!==null){var o=e.value.length;l===a&&a===f&&o>f?(e.selectionStart=o,e.selectionEnd=o):(e.selectionStart=l,e.selectionEnd=Math.min(a,o))}}}),Qr(t)==null&&e.value&&(n(yn(e)?wn(e.value):e.value),T!==null&&r.add(T)),qr(()=>{var s=t();if(e===document.activeElement){var i=nn??T;if(r.has(i))return}yn(e)&&s===wn(e.value)||e.type==="date"&&!s&&!e.value||s!==e.value&&(e.value=s??"")})}function yn(e){var t=e.type;return t==="number"||t==="range"}function wn(e){return e===""?null:+e}function ni(e,t,n,r){var s=r,i=!0,l=()=>(i&&(i=!1,s=r),s),a;a=e[t],a===void 0&&r!==void 0&&(a=l());var f;return f=()=>{var o=e[t];return o===void 0?l():(i=!0,o)},f}const As="5";var dr;typeof window<"u"&&((dr=window.__svelte??(window.__svelte={})).v??(dr.v=new Set)).add(As);async function Qe(e,t){const n=await fetch(`/api${e}`,{headers:{"Content-Type":"application/json"},...t});if(!n.ok){const r=await n.json().catch(()=>({error:n.statusText}));throw new Error(r.error||"Request failed")}return n.json()}const $e={getProjects:()=>Qe("/projects"),getProject:e=>Qe(`/projects/${e}`),updateProject:(e,t)=>Qe(`/projects/${e}`,{method:"PATCH",body:JSON.stringify(t)}),getTasks:e=>Qe(`/projects/${e}/tasks?include_done=true`),createTask:(e,t)=>Qe(`/projects/${e}/tasks`,{method:"POST",body:JSON.stringify(t)}),updateTask:(e,t)=>Qe(`/tasks/${e}`,{method:"PATCH",body:JSON.stringify(t)}),deleteTask:e=>Qe(`/tasks/${e}`,{method:"DELETE"})};var Ps=L('<option class="svelte-1kanzy0"> </option>'),Os=L('<input class="rename-input svelte-1kanzy0" type="text"/>'),js=L('<button class="rename-btn svelte-1kanzy0" title="Rename project">✎</button>'),Ns=L('<header class="toolbar svelte-1kanzy0"><div class="brand svelte-1kanzy0">mindpm</div> <div class="project-area svelte-1kanzy0"><select class="svelte-1kanzy0"></select> <!></div></header>');function Rs(e,t){Xe(t,!0);let n=j(!1),r=j("");const s=Ct(()=>t.projects.find(c=>c.id===t.selectedId));function i(){d(s)&&(g(r,d(s).name,!0),g(n,!0))}function l(){if(!d(s)||!d(n))return;const c=d(r).trim();c&&c!==d(s).name&&t.onRenamed(d(s).id,c),g(n,!1)}function a(c){c.key==="Enter"&&l(),c.key==="Escape"&&g(n,!1)}var f=Ns(),o=A(x(f),2),h=x(o);Wt(h,21,()=>t.projects,Gn,(c,m)=>{var v=Ps(),y=x(v),k={};Ee(()=>{X(y,d(m).name),k!==(k=d(m).id)&&(v.value=(v.__value=d(m).id)??"")}),I(c,v)});var _;ti(h);var p=A(h,2);{var b=c=>{var m=ei(),v=ln(m);{var y=P=>{var E=Os();Ir(E),Le("blur",E,l),ne("keydown",E,a),tn(E,()=>d(r),R=>g(r,R)),I(P,E)},k=P=>{var E=js();ne("click",E,i),I(P,E)};Te(v,P=>{d(n)?P(y):P(k,!1)})}I(c,m)};Te(p,c=>{d(s)&&c(b)})}Ee(()=>{_!==(_=t.selectedId??"")&&(h.value=(h.__value=t.selectedId??"")??"",Xn(h,t.selectedId??""))}),ne("change",h,c=>t.onSelect(c.target.value)),I(e,f),Ze()}Ot(["change","keydown","click"]);const Ms=[{status:"todo",label:"Todo"},{status:"in_progress",label:"In Progress"},{status:"blocked",label:"Blocked"},{status:"done",label:"Done"},{status:"cancelled",label:"Cancelled"}],Is=["critical","high","medium","low"];var Ls=L('<div class="card-desc svelte-35ep21"> </div>'),Fs=L('<span class="tag svelte-35ep21"> </span>'),qs=L('<div class="card-tags svelte-35ep21"></div>'),zs=L('<div draggable="true" role="button" tabindex="0"><div class="card-header svelte-35ep21"><span> </span> <button class="delete-btn svelte-35ep21" title="Delete task">×</button></div> <div class="card-title svelte-35ep21"> </div> <!> <!></div>');function Bs(e,t){Xe(t,!0);let n=j(!1);function r(E){if(!E)return[];try{return JSON.parse(E)}catch{return[]}}const s=Ct(()=>r(t.task.tags)),i=Ct(()=>`priority-${t.task.priority}`);function l(E){g(n,!0),t.onDragStart(E,t.task)}function a(){g(n,!1)}var f=zs();let o;var h=x(f),_=x(h),p=x(_),b=A(_,2),c=A(h,2),m=x(c),v=A(c,2);{var y=E=>{var R=Ls(),Z=x(R);Ee(()=>X(Z,t.task.description)),I(E,R)};Te(v,E=>{t.task.description&&E(y)})}var k=A(v,2);{var P=E=>{var R=qs();Wt(R,21,()=>d(s),Gn,(Z,z)=>{var oe=Fs(),G=x(oe);Ee(()=>X(G,d(z))),I(Z,oe)}),I(E,R)};Te(k,E=>{d(s).length>0&&E(P)})}Ee(()=>{o=In(f,1,"card svelte-35ep21",null,o,{dragging:d(n)}),In(_,1,`priority-badge ${d(i)??""}`,"svelte-35ep21"),X(p,t.task.priority),X(m,t.task.title)}),Le("dragstart",f,l),Le("dragend",f,a),ne("click",f,()=>t.onEdit(t.task)),ne("keydown",f,E=>{E.key==="Enter"&&t.onEdit(t.task)}),ne("click",b,E=>{E.stopPropagation(),t.onDelete(t.task)}),I(e,f),Ze()}Ot(["click","keydown"]);var Hs=L('<button class="add-btn svelte-zswfgn" title="Add task">+</button>'),Vs=L('<div role="list"><div class="column-header svelte-zswfgn"><h3 class="svelte-zswfgn"> <span class="count svelte-zswfgn"> </span></h3> <!></div> <div class="card-list svelte-zswfgn"></div></div>');function Ks(e,t){Xe(t,!0);let n=j(!1);function r(v){v.preventDefault(),v.dataTransfer&&(v.dataTransfer.dropEffect="move"),g(n,!0)}function s(){g(n,!1)}function i(v){v.preventDefault(),g(n,!1),t.onDrop(t.status)}var l=Vs();let a;var f=x(l),o=x(f),h=x(o),_=A(h),p=x(_),b=A(o,2);{var c=v=>{var y=Hs();ne("click",y,()=>t.onAddTask(t.status)),I(v,y)};Te(b,v=>{t.status==="todo"&&v(c)})}var m=A(f,2);Wt(m,21,()=>t.tasks,v=>v.id,(v,y)=>{Bs(v,{get task(){return d(y)},get onEdit(){return t.onEdit},get onDelete(){return t.onDelete},get onDragStart(){return t.onDragStart}})}),Ee(()=>{a=In(l,1,"column svelte-zswfgn",null,a,{"drag-over":d(n)}),X(h,`${t.label??""} `),X(p,t.tasks.length)}),Le("dragover",l,r),Le("dragleave",l,s),Le("drop",l,i),I(e,l),Ze()}Ot(["click"]);var Us=L("<option> </option>"),Ys=L('<div class="field svelte-1gmf2hi"><label for="status" class="svelte-1gmf2hi">Status</label> <select id="status" class="svelte-1gmf2hi"><option>Todo</option><option>In Progress</option><option>Blocked</option><option>Done</option><option>Cancelled</option></select></div>'),Ws=L('<div class="modal-backdrop svelte-1gmf2hi"><div class="modal svelte-1gmf2hi"><div class="modal-header svelte-1gmf2hi"><h2 class="svelte-1gmf2hi"> </h2> <button class="close-btn svelte-1gmf2hi">×</button></div> <form><div class="field svelte-1gmf2hi"><label for="title" class="svelte-1gmf2hi">Title</label> <input id="title" type="text" placeholder="Task title" required="" class="svelte-1gmf2hi"/></div> <div class="field svelte-1gmf2hi"><label for="description" class="svelte-1gmf2hi">Description</label> <textarea id="description" placeholder="Optional description" rows="3" class="svelte-1gmf2hi"></textarea></div> <div class="row svelte-1gmf2hi"><div class="field svelte-1gmf2hi"><label for="priority" class="svelte-1gmf2hi">Priority</label> <select id="priority" class="svelte-1gmf2hi"></select></div> <!></div> <div class="field svelte-1gmf2hi"><label for="tags" class="svelte-1gmf2hi">Tags <span class="hint svelte-1gmf2hi">(comma-separated)</span></label> <input id="tags" type="text" placeholder="e.g. backend, auth, bug" class="svelte-1gmf2hi"/></div> <div class="actions svelte-1gmf2hi"><button type="button" class="btn-cancel svelte-1gmf2hi">Cancel</button> <button type="submit" class="btn-save svelte-1gmf2hi"> </button></div></form></div></div>');function Js(e,t){Xe(t,!0);let n=ni(t,"defaultStatus",3,"todo"),r=j(""),s=j(""),i=j("medium"),l=j("todo"),a=j("");Un(()=>{var O,B,ue,Ce,Ne;if(g(r,((O=t.task)==null?void 0:O.title)??"",!0),g(s,((B=t.task)==null?void 0:B.description)??"",!0),g(i,((ue=t.task)==null?void 0:ue.priority)??"medium",!0),g(l,((Ce=t.task)==null?void 0:Ce.status)??n(),!0),(Ne=t.task)!=null&&Ne.tags)try{g(a,JSON.parse(t.task.tags).join(", "),!0)}catch{g(a,"")}else g(a,"")});const f=Ct(()=>t.task!==null);function o(O){O.preventDefault();const B=d(r).trim();if(!B)return;const ue=d(a).split(",").map(Ce=>Ce.trim()).filter(Boolean);t.onSave({title:B,description:d(s).trim(),priority:d(i),...d(f)?{status:d(l)}:{},tags:ue})}function h(O){O.target.classList.contains("modal-backdrop")&&t.onClose()}function _(O){O.key==="Escape"&&t.onClose()}var p=Ws();Le("keydown",rn,_);var b=x(p),c=x(b),m=x(c),v=x(m),y=A(m,2),k=A(c,2),P=x(k),E=A(x(P),2);Ir(E);var R=A(P,2),Z=A(x(R),2),z=A(R,2),oe=x(z),G=A(x(oe),2);Wt(G,21,()=>Is,Gn,(O,B)=>{var ue=Us(),Ce=x(ue),Ne={};Ee(()=>{X(Ce,d(B)),Ne!==(Ne=d(B))&&(ue.value=(ue.__value=d(B))??"")}),I(O,ue)});var Jt=A(oe,2);{var vn=O=>{var B=Ys(),ue=A(x(B),2),Ce=x(ue);Ce.value=Ce.__value="todo";var Ne=A(Ce);Ne.value=Ne.__value="in_progress";var _n=A(Ne);_n.value=_n.__value="blocked";var pn=A(_n);pn.value=pn.__value="done";var Qn=A(pn);Qn.value=Qn.__value="cancelled",ur(ue,()=>d(l),ri=>g(l,ri)),I(O,B)};Te(Jt,O=>{d(f)&&O(vn)})}var Gt=A(z,2),hn=A(x(Gt),2),w=A(Gt,2),M=x(w),re=A(M,2),J=x(re);Ee(()=>{X(v,d(f)?"Edit Task":"New Task"),X(J,d(f)?"Save":"Create")}),ne("click",p,h),ne("click",y,function(...O){var B;(B=t.onClose)==null||B.apply(this,O)}),Le("submit",k,o),tn(E,()=>d(r),O=>g(r,O)),tn(Z,()=>d(s),O=>g(s,O)),ur(G,()=>d(i),O=>g(i,O)),tn(hn,()=>d(a),O=>g(a,O)),ne("click",M,function(...O){var B;(B=t.onClose)==null||B.apply(this,O)}),I(e,p),Ze()}Ot(["click"]);var Gs=L('<div class="modal-backdrop svelte-1efofyg"><div class="dialog svelte-1efofyg"><h3 class="svelte-1efofyg"> </h3> <p class="svelte-1efofyg"> </p> <div class="actions svelte-1efofyg"><button class="btn-cancel svelte-1efofyg">Cancel</button> <button class="btn-confirm svelte-1efofyg"> </button></div></div></div>');function Xs(e,t){Xe(t,!0);let n=ni(t,"confirmLabel",3,"Delete");function r(m){m.target.classList.contains("modal-backdrop")&&t.onCancel()}function s(m){m.key==="Escape"&&t.onCancel()}var i=Gs();Le("keydown",rn,s);var l=x(i),a=x(l),f=x(a),o=A(a,2),h=x(o),_=A(o,2),p=x(_),b=A(p,2),c=x(b);Ee(()=>{X(f,t.title),X(h,t.message),X(c,n())}),ne("click",i,r),ne("click",p,function(...m){var v;(v=t.onCancel)==null||v.apply(this,m)}),ne("click",b,function(...m){var v;(v=t.onConfirm)==null||v.apply(this,m)}),I(e,i),Ze()}Ot(["click"]);var Zs=L('<div class="board-message svelte-x7v2jt">Loading tasks...</div>'),Qs=L('<div class="board-message error svelte-x7v2jt"> <button class="svelte-x7v2jt">Retry</button></div>'),$s=L('<div class="board svelte-x7v2jt"></div>'),el=L('<div class="board-wrapper svelte-x7v2jt"><!></div> <!> <!>',1);function tl(e,t){Xe(t,!0);let n=j(nt([])),r=j(!0),s=j(null),i=j(!1),l=j(null),a=j("todo"),f=j(!1),o=j(null),h=j(null);const _=Ct(()=>Ms.map(w=>({...w,tasks:d(n).filter(M=>M.status===w.status)})));async function p(){g(r,!0),g(s,null);try{g(n,await $e.getTasks(t.project.id),!0)}catch(w){g(s,w.message,!0)}finally{g(r,!1)}}Un(()=>{t.project.id,p()});function b(w,M){g(h,M,!0),w.dataTransfer&&(w.dataTransfer.effectAllowed="move",w.dataTransfer.setData("text/plain",M.id))}async function c(w){if(!d(h)||d(h).status===w){g(h,null);return}const M=d(h),re=M.status;g(h,null);const J=d(n).findIndex(O=>O.id===M.id);J!==-1&&(d(n)[J]={...d(n)[J],status:w});try{await $e.updateTask(M.id,{status:w})}catch(O){J!==-1&&(d(n)[J]={...d(n)[J],status:re}),g(s,O.message,!0)}}function m(w){g(l,null),g(a,w,!0),g(i,!0)}function v(w){g(l,w,!0),g(i,!0)}async function y(w){try{if(d(l)){const M=await $e.updateTask(d(l).id,{title:w.title,description:w.description||null,priority:w.priority,status:w.status,tags:w.tags.length>0?w.tags:null}),re=d(n).findIndex(J=>J.id===d(l).id);re!==-1&&(d(n)[re]=M)}else{const M=await $e.createTask(t.project.id,{title:w.title,description:w.description||void 0,priority:w.priority,tags:w.tags.length>0?w.tags:void 0});g(n,[M,...d(n)],!0)}g(i,!1),g(l,null)}catch(M){g(s,M.message,!0)}}function k(w){g(o,w,!0),g(f,!0)}async function P(){if(d(o))try{await $e.deleteTask(d(o).id),g(n,d(n).filter(w=>w.id!==d(o).id&&w.parent_task_id!==d(o).id),!0),g(f,!1),g(o,null)}catch(w){g(s,w.message,!0)}}var E=el(),R=ln(E),Z=x(R);{var z=w=>{var M=Zs();I(w,M)},oe=w=>{var M=Qs(),re=x(M),J=A(re);Ee(()=>X(re,`${d(s)??""} `)),ne("click",J,()=>{g(s,null),p()}),I(w,M)},G=w=>{var M=$s();Wt(M,21,()=>d(_),re=>re.status,(re,J)=>{Ks(re,{get status(){return d(J).status},get label(){return d(J).label},get tasks(){return d(J).tasks},onEdit:v,onDelete:k,onDragStart:b,onDrop:c,onAddTask:m})}),I(w,M)};Te(Z,w=>{d(r)?w(z):d(s)?w(oe,1):w(G,!1)})}var Jt=A(R,2);{var vn=w=>{Js(w,{get task(){return d(l)},get defaultStatus(){return d(a)},onSave:y,onClose:()=>{g(i,!1),g(l,null)}})};Te(Jt,w=>{d(i)&&w(vn)})}var Gt=A(Jt,2);{var hn=w=>{Xs(w,{title:"Delete Task",get message(){return`Are you sure you want to delete "${d(o).title??""}"? This cannot be undone.`},onConfirm:P,onCancel:()=>{g(f,!1),g(o,null)}})};Te(Gt,w=>{d(f)&&d(o)&&w(hn)})}I(e,E),Ze()}Ot(["click"]);var nl=L('<div class="loading svelte-1n46o8q">Loading projects...</div>'),rl=L('<div class="error svelte-1n46o8q"> </div>'),il=L('<div class="empty svelte-1n46o8q"><h2 class="svelte-1n46o8q">No projects yet</h2> <p class="svelte-1n46o8q">Create a project using mindpm MCP tools to get started.</p></div>'),sl=L("<!> <!>",1);function ll(e,t){Xe(t,!0);let n=j(nt([])),r=j(null),s=j(!0),i=j(null);const l=Ct(()=>d(n).find(v=>v.id===d(r))??null);async function a(){try{if(g(n,await $e.getProjects(),!0),d(n).length>0&&!d(r)){const v=new URLSearchParams(window.location.search).get("project"),y=v?d(n).find(k=>k.id===v||k.name===v):null;g(r,y?y.id:d(n)[0].id,!0)}}catch(v){g(i,v.message,!0)}finally{g(s,!1)}}function f(v){g(r,v,!0)}async function o(v,y){try{await $e.updateProject(v,{name:y});const k=d(n).findIndex(P=>P.id===v);k!==-1&&(d(n)[k]={...d(n)[k],name:y})}catch(k){g(i,k.message,!0)}}Un(()=>{a()});var h=ei(),_=ln(h);{var p=v=>{var y=nl();I(v,y)},b=v=>{var y=rl(),k=x(y);Ee(()=>X(k,d(i))),I(v,y)},c=v=>{var y=il();I(v,y)},m=v=>{var y=sl(),k=ln(y);Rs(k,{get projects(){return d(n)},get selectedId(){return d(r)},onSelect:f,onRenamed:o});var P=A(k,2);{var E=R=>{tl(R,{get project(){return d(l)}})};Te(P,R=>{d(l)&&R(E)})}I(v,y)};Te(_,v=>{d(s)?v(p):d(i)?v(b,1):d(n).length===0?v(c,2):v(m,!1)})}I(e,h),Ze()}bs(ll,{target:document.getElementById("app")});
|
package/dist/ui/index.html
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
<meta charset="UTF-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
6
|
<title>mindpm - Kanban</title>
|
|
7
|
-
<script type="module" crossorigin src="/assets/index-
|
|
7
|
+
<script type="module" crossorigin src="/assets/index-BOJUueBw.js"></script>
|
|
8
8
|
<link rel="stylesheet" crossorigin href="/assets/index-D3uZo-NO.css">
|
|
9
9
|
</head>
|
|
10
10
|
<body>
|