plan-assistant 1.3.4 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (102) hide show
  1. package/build/client/_app/immutable/chunks/{BJs6I7qC.js → 10ZXP06Q.js} +1 -1
  2. package/build/client/_app/immutable/chunks/{ChJyFfSj.js → 1eL0zcBS.js} +1 -1
  3. package/build/client/_app/immutable/chunks/74GYr5Jz.js +3 -0
  4. package/build/client/_app/immutable/chunks/{B2fFwvWw.js → B-HTmPy1.js} +1 -1
  5. package/build/client/_app/immutable/chunks/{RIGBV7Ip.js → B2hVYoEJ.js} +1 -1
  6. package/build/client/_app/immutable/chunks/{DVXd8vwC.js → B628eJGB.js} +1 -1
  7. package/build/client/_app/immutable/chunks/{CpucjHJL.js → B80ongyB.js} +1 -1
  8. package/build/client/_app/immutable/chunks/{BXCtgyOT.js → B8FhIQG1.js} +1 -1
  9. package/build/client/_app/immutable/chunks/{DoIz7SoC.js → BCgSWfby.js} +1 -1
  10. package/build/client/_app/immutable/chunks/{B-25Ue8o.js → BFl4ofgi.js} +4 -4
  11. package/build/client/_app/immutable/chunks/{DK1zqZrn.js → BIKGXasq.js} +1 -1
  12. package/build/client/_app/immutable/chunks/{DlbZX2EZ.js → BNv9nR-i.js} +1 -1
  13. package/build/client/_app/immutable/chunks/{CeIvvAVV.js → BOjlNXC_.js} +1 -1
  14. package/build/client/_app/immutable/chunks/{a5eoTq-5.js → BRBMkxQw.js} +1 -1
  15. package/build/client/_app/immutable/chunks/{_2rlQOMN.js → BT3ImTYg.js} +1 -1
  16. package/build/client/_app/immutable/chunks/{BJxAjYQA.js → BUu_XsOv.js} +1 -1
  17. package/build/client/_app/immutable/chunks/{B9WViv7H.js → BVq6bo_n.js} +1 -1
  18. package/build/client/_app/immutable/chunks/{DteI5BLO.js → BZQqs639.js} +1 -1
  19. package/build/client/_app/immutable/chunks/{nFhgrnCT.js → BZTb6H6F.js} +1 -1
  20. package/build/client/_app/immutable/chunks/{Dl-inTne.js → BrjAEg64.js} +1 -1
  21. package/build/client/_app/immutable/chunks/{DSIQf7-a.js → Bt3MWn7w.js} +26 -26
  22. package/build/client/_app/immutable/chunks/{Dnz2r_pS.js → BvzznBFq.js} +1 -1
  23. package/build/client/_app/immutable/chunks/{DshYkidx.js → C4gCk_ik.js} +1 -1
  24. package/build/client/_app/immutable/chunks/{2wZlHG5k.js → C5wtj4WQ.js} +1 -1
  25. package/build/client/_app/immutable/chunks/{Dvli4fnO.js → CEqaJ7Yk.js} +1 -1
  26. package/build/client/_app/immutable/chunks/{3E04qp8C.js → CIGAXayx.js} +1 -1
  27. package/build/client/_app/immutable/chunks/COggdvXA.js +1 -0
  28. package/build/client/_app/immutable/chunks/{C47KpwkC.js → CYQe9sJG.js} +1 -1
  29. package/build/client/_app/immutable/chunks/{BrX0OiHa.js → CYxrEvMN.js} +1 -1
  30. package/build/client/_app/immutable/chunks/{CUqNPCjK.js → CaLUaLKT.js} +1 -1
  31. package/build/client/_app/immutable/chunks/{Cwd5DdSa.js → CdHvJ4_w.js} +1 -1
  32. package/build/client/_app/immutable/chunks/{CJ-lpX9h.js → Ckyou5Od.js} +1 -1
  33. package/build/client/_app/immutable/chunks/{C1YAjCKh.js → CmrXQ7MQ.js} +1 -1
  34. package/build/client/_app/immutable/chunks/{BWYga5zO.js → Cn53TYFN.js} +1 -1
  35. package/build/client/_app/immutable/chunks/{CD_kQCcy.js → CobJHAAW.js} +1 -1
  36. package/build/client/_app/immutable/chunks/{B51GwAfL.js → CpHaxpYy.js} +1 -1
  37. package/build/client/_app/immutable/chunks/{BdoKnygS.js → CuD0M7ml.js} +2 -2
  38. package/build/client/_app/immutable/chunks/{BfABZbDO.js → DGn8gxMH.js} +1 -1
  39. package/build/client/_app/immutable/chunks/{CbTVVa30.js → DJ4TnckQ.js} +1 -1
  40. package/build/client/_app/immutable/chunks/{C_qF9Ll1.js → DL-S4jBj.js} +1 -1
  41. package/build/client/_app/immutable/chunks/{ioQlYLW1.js → DLTGIy2S.js} +1 -1
  42. package/build/client/_app/immutable/chunks/{EodvFm9d.js → DcaEnsuI.js} +1 -1
  43. package/build/client/_app/immutable/chunks/{CH1RPLU9.js → DhPQR3Px.js} +1 -1
  44. package/build/client/_app/immutable/chunks/{gzN3DgKu.js → Dik5m9U4.js} +1 -1
  45. package/build/client/_app/immutable/chunks/{DSQnKfn-.js → Dj-iuGW3.js} +1 -1
  46. package/build/client/_app/immutable/chunks/{DePvhy8M.js → MQLxN4-w.js} +1 -1
  47. package/build/client/_app/immutable/chunks/{SbhBQTvy.js → N5edR_wk.js} +1 -1
  48. package/build/client/_app/immutable/chunks/{k7j8NQjk.js → NMQ8yb5B.js} +1 -1
  49. package/build/client/_app/immutable/chunks/{DJe5QTzh.js → S5LArjpJ.js} +1 -1
  50. package/build/client/_app/immutable/chunks/{CgJVu5ra.js → SsCjYNSL.js} +1 -1
  51. package/build/client/_app/immutable/chunks/UguYSyR_.js +1 -0
  52. package/build/client/_app/immutable/chunks/{CkIr3n4I.js → aOKoOpNt.js} +1 -1
  53. package/build/client/_app/immutable/chunks/{wOfVBGZS.js → dRJp6O4P.js} +1 -1
  54. package/build/client/_app/immutable/chunks/{CJ4vuw4Q.js → nlEqX7_u.js} +1 -1
  55. package/build/client/_app/immutable/chunks/{lFo8pWTB.js → q-tJjDlp.js} +1 -1
  56. package/build/client/_app/immutable/entry/{app.xXlXisbW.js → app.BR7HPYnZ.js} +2 -2
  57. package/build/client/_app/immutable/entry/start.DbhlkFfd.js +1 -0
  58. package/build/client/_app/immutable/nodes/0.BDKx-zUI.js +1 -0
  59. package/build/client/_app/immutable/nodes/{1.CduF9YQo.js → 1.B_9JaBUL.js} +1 -1
  60. package/build/client/_app/immutable/nodes/{2.ZFWOqsMm.js → 2.D_8Y7w6T.js} +1 -1
  61. package/build/client/_app/immutable/nodes/3.sgWOIIcg.js +1 -0
  62. package/build/client/_app/version.json +1 -1
  63. package/build/server/chunks/{0-F8UDIQlw.js → 0-C94QRPbG.js} +2 -2
  64. package/build/server/chunks/{0-F8UDIQlw.js.map → 0-C94QRPbG.js.map} +1 -1
  65. package/build/server/chunks/1-G6vwI4Kc.js +9 -0
  66. package/build/server/chunks/{1-YUd-zKqx.js.map → 1-G6vwI4Kc.js.map} +1 -1
  67. package/build/server/chunks/{2-tND4IT0j.js → 2-Cy9PX2zK.js} +2 -2
  68. package/build/server/chunks/{2-tND4IT0j.js.map → 2-Cy9PX2zK.js.map} +1 -1
  69. package/build/server/chunks/{3-DzwYMPfw.js → 3-CxxgkGJa.js} +3 -3
  70. package/build/server/chunks/{3-DzwYMPfw.js.map → 3-CxxgkGJa.js.map} +1 -1
  71. package/build/server/chunks/{_page.svelte-BXgDoamA.js → _page.svelte-DdQY1QqH.js} +62 -3
  72. package/build/server/chunks/_page.svelte-DdQY1QqH.js.map +1 -0
  73. package/build/server/chunks/_server.ts-CEtvrNT1.js +13 -0
  74. package/build/server/chunks/_server.ts-CEtvrNT1.js.map +1 -0
  75. package/build/server/chunks/{_server.ts-p_sHg72N.js → _server.ts-sRxHDQa9.js} +2 -2
  76. package/build/server/chunks/{_server.ts-p_sHg72N.js.map → _server.ts-sRxHDQa9.js.map} +1 -1
  77. package/build/server/chunks/{hooks.server-CeNxBnIX.js → hooks.server-sBuk2932.js} +12 -2
  78. package/build/server/chunks/hooks.server-sBuk2932.js.map +1 -0
  79. package/build/server/chunks/idle-timer-CouFy_WF.js +49 -0
  80. package/build/server/chunks/idle-timer-CouFy_WF.js.map +1 -0
  81. package/build/server/chunks/{sse-manager-DpUiK2jt.js → sse-manager-C9ZLI_Nx.js} +13 -2
  82. package/build/server/chunks/sse-manager-C9ZLI_Nx.js.map +1 -0
  83. package/build/server/index.js +22 -3
  84. package/build/server/index.js.map +1 -1
  85. package/build/server/manifest.js +13 -6
  86. package/build/server/manifest.js.map +1 -1
  87. package/dist/cli/commands/review.js +34 -233
  88. package/dist/cli/commands/stop.js +64 -0
  89. package/dist/cli/index.js +7 -0
  90. package/dist/cli/server-client.js +209 -0
  91. package/dist/cli/session-reader.js +70 -1
  92. package/package.json +1 -1
  93. package/build/client/_app/immutable/chunks/BHAhR-ZH.js +0 -3
  94. package/build/client/_app/immutable/chunks/BPkIOP5x.js +0 -1
  95. package/build/client/_app/immutable/chunks/QMxLvN9k.js +0 -1
  96. package/build/client/_app/immutable/entry/start.C6hZEWOp.js +0 -1
  97. package/build/client/_app/immutable/nodes/0.BZ6p9IRV.js +0 -1
  98. package/build/client/_app/immutable/nodes/3.CfL49yTp.js +0 -1
  99. package/build/server/chunks/1-YUd-zKqx.js +0 -9
  100. package/build/server/chunks/_page.svelte-BXgDoamA.js.map +0 -1
  101. package/build/server/chunks/hooks.server-CeNxBnIX.js.map +0 -1
  102. package/build/server/chunks/sse-manager-DpUiK2jt.js.map +0 -1
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Server lifecycle management: port finding, health checking,
3
+ * lock files, and process spawning for the Plan Assistant dev server.
4
+ */
5
+ import { readFileSync, writeFileSync, existsSync, mkdirSync, unlinkSync, } from "node:fs";
6
+ import { resolve, dirname, join } from "node:path";
7
+ import { fileURLToPath } from "node:url";
8
+ import { spawn, execSync } from "node:child_process";
9
+ import { createServer } from "node:net";
10
+ export const DEFAULT_BASE_PORT = 5181;
11
+ export const MAX_PORT = 5199;
12
+ export function getPackageDir() {
13
+ const thisFile = fileURLToPath(import.meta.url);
14
+ // dist/cli/server-client.js -> package root
15
+ return resolve(dirname(thisFile), "../..");
16
+ }
17
+ export async function checkHealth(port) {
18
+ try {
19
+ const controller = new AbortController();
20
+ const timeout = setTimeout(() => controller.abort(), 500);
21
+ const res = await fetch(`http://localhost:${port}/api/health`, {
22
+ signal: controller.signal,
23
+ });
24
+ clearTimeout(timeout);
25
+ if (!res.ok)
26
+ return null;
27
+ return (await res.json());
28
+ }
29
+ catch {
30
+ return null;
31
+ }
32
+ }
33
+ function lockFilePath(sessionDir) {
34
+ return join(sessionDir, ".server-lock.json");
35
+ }
36
+ function readLock(sessionDir) {
37
+ const lockPath = lockFilePath(sessionDir);
38
+ if (!existsSync(lockPath))
39
+ return null;
40
+ try {
41
+ return JSON.parse(readFileSync(lockPath, "utf-8"));
42
+ }
43
+ catch {
44
+ return null;
45
+ }
46
+ }
47
+ function writeLock(sessionDir, port, pid) {
48
+ mkdirSync(sessionDir, { recursive: true });
49
+ writeFileSync(lockFilePath(sessionDir), JSON.stringify({ port, pid }));
50
+ }
51
+ function clearLock(sessionDir) {
52
+ try {
53
+ unlinkSync(lockFilePath(sessionDir));
54
+ }
55
+ catch {
56
+ // ignore
57
+ }
58
+ }
59
+ function isPidAlive(pid) {
60
+ try {
61
+ process.kill(pid, 0);
62
+ return true;
63
+ }
64
+ catch {
65
+ return false;
66
+ }
67
+ }
68
+ export async function findExistingServer(sessionDir, basePort) {
69
+ // Check lock file first (fast path, avoids port scan race)
70
+ const lock = readLock(sessionDir);
71
+ if (lock) {
72
+ if (isPidAlive(lock.pid)) {
73
+ const health = await checkHealth(lock.port);
74
+ if (health && health.sessionDir === sessionDir) {
75
+ return lock.port;
76
+ }
77
+ }
78
+ // Stale lock — remove it
79
+ clearLock(sessionDir);
80
+ }
81
+ // Fallback: scan ports (handles lock-less legacy servers)
82
+ for (let port = basePort; port <= MAX_PORT; port++) {
83
+ const health = await checkHealth(port);
84
+ if (health && health.sessionDir === sessionDir) {
85
+ return port;
86
+ }
87
+ }
88
+ return null;
89
+ }
90
+ export function isPortFree(port) {
91
+ return new Promise((resolve) => {
92
+ const server = createServer();
93
+ server.once("error", () => resolve(false));
94
+ server.once("listening", () => {
95
+ server.close(() => resolve(true));
96
+ });
97
+ server.listen(port, "127.0.0.1");
98
+ });
99
+ }
100
+ export async function findFreePort(basePort) {
101
+ for (let port = basePort; port <= MAX_PORT; port++) {
102
+ if (await isPortFree(port))
103
+ return port;
104
+ }
105
+ throw new Error(`No free port found in range ${basePort}-${MAX_PORT}`);
106
+ }
107
+ function startServer(sessionDir, port) {
108
+ const packageDir = getPackageDir();
109
+ const buildEntry = join(packageDir, "build", "index.js");
110
+ if (!existsSync(buildEntry)) {
111
+ console.error(`Error: Server build not found at ${buildEntry}\nRun 'npm run build:server' in the plan-assistant package first.`);
112
+ process.exit(1);
113
+ }
114
+ return new Promise((resolvePromise, reject) => {
115
+ const child = spawn("node", [buildEntry], {
116
+ env: {
117
+ ...process.env,
118
+ SESSION_DIR: sessionDir,
119
+ PORT: String(port),
120
+ },
121
+ stdio: "ignore",
122
+ detached: true,
123
+ });
124
+ child.unref();
125
+ const pid = child.pid;
126
+ let attempts = 0;
127
+ const maxAttempts = 30;
128
+ const interval = setInterval(async () => {
129
+ attempts++;
130
+ try {
131
+ const controller = new AbortController();
132
+ const timeout = setTimeout(() => controller.abort(), 1000);
133
+ const res = await fetch(`http://localhost:${port}/api/health`, {
134
+ signal: controller.signal,
135
+ });
136
+ clearTimeout(timeout);
137
+ if (res.ok) {
138
+ clearInterval(interval);
139
+ resolvePromise(pid);
140
+ }
141
+ }
142
+ catch {
143
+ if (attempts >= maxAttempts) {
144
+ clearInterval(interval);
145
+ reject(new Error("Server failed to start within 15 seconds"));
146
+ }
147
+ }
148
+ }, 500);
149
+ });
150
+ }
151
+ export async function launchServer(sessionDir, port) {
152
+ process.stdout.write(`Starting Plan Assistant server on port ${port}...`);
153
+ try {
154
+ const pid = await startServer(sessionDir, port);
155
+ writeLock(sessionDir, port, pid);
156
+ console.log(" ready.");
157
+ }
158
+ catch (err) {
159
+ console.error(` failed: ${err}`);
160
+ process.exit(1);
161
+ }
162
+ }
163
+ export async function stopServer(sessionDir) {
164
+ // Try lock file first
165
+ const lock = readLock(sessionDir);
166
+ const port = lock?.port;
167
+ if (port) {
168
+ try {
169
+ const controller = new AbortController();
170
+ const timeout = setTimeout(() => controller.abort(), 2000);
171
+ await fetch(`http://localhost:${port}/api/shutdown`, {
172
+ method: "POST",
173
+ signal: controller.signal,
174
+ });
175
+ clearTimeout(timeout);
176
+ clearLock(sessionDir);
177
+ return true;
178
+ }
179
+ catch {
180
+ // HTTP shutdown failed, try SIGTERM
181
+ }
182
+ }
183
+ // Fallback: kill by PID
184
+ if (lock && isPidAlive(lock.pid)) {
185
+ try {
186
+ process.kill(lock.pid, "SIGTERM");
187
+ clearLock(sessionDir);
188
+ return true;
189
+ }
190
+ catch {
191
+ // ignore
192
+ }
193
+ }
194
+ clearLock(sessionDir);
195
+ return false;
196
+ }
197
+ export function openBrowser(url) {
198
+ try {
199
+ const cmd = process.platform === "darwin"
200
+ ? "open"
201
+ : process.platform === "win32"
202
+ ? "start"
203
+ : "xdg-open";
204
+ execSync(`${cmd} "${url}"`, { stdio: "ignore" });
205
+ }
206
+ catch {
207
+ console.log(`Open in browser: ${url}`);
208
+ }
209
+ }
@@ -1,9 +1,12 @@
1
1
  /**
2
- * Pure filesystem functions for reading session data from disk.
2
+ * Session data reading and feedback watching.
3
3
  * CLI-side equivalent of the server's session-manager.
4
4
  */
5
5
  import { readFileSync, existsSync, readdirSync, statSync } from "node:fs";
6
6
  import { join, dirname } from "node:path";
7
+ import { watch } from "chokidar";
8
+ import { outputJson } from "./output.js";
9
+ import { stopServer } from "./server-client.js";
7
10
  export function readMeta(sessionDir) {
8
11
  const path = join(sessionDir, "meta.json");
9
12
  if (!existsSync(path))
@@ -82,3 +85,69 @@ export function findSessionDirs(startDir) {
82
85
  new Date(a.meta.updatedAt).getTime());
83
86
  return entries;
84
87
  }
88
+ // ── Feedback watching ──────────────────────────────────────────────
89
+ const EXIT_APPROVED = 0;
90
+ const EXIT_NEEDS_WORK = 3;
91
+ async function outputFeedbackResult(feedback, sessionId, planTitle, sessionDir) {
92
+ // Stop the server — review cycle is complete
93
+ const parentDir = dirname(sessionDir);
94
+ const stopped = await stopServer(parentDir);
95
+ if (stopped) {
96
+ console.error("Server stopped.");
97
+ }
98
+ const unresolvedComments = feedback.comments.filter((c) => !c.resolved);
99
+ outputJson({
100
+ event: "feedback",
101
+ sessionId,
102
+ planTitle,
103
+ status: feedback.status,
104
+ comments: unresolvedComments,
105
+ commentCount: unresolvedComments.length,
106
+ });
107
+ process.exit(feedback.status === "approved" ? EXIT_APPROVED : EXIT_NEEDS_WORK);
108
+ }
109
+ export async function waitForFeedback(feedbackPath, sessionId, planTitle, mdWatcher, sessionDir) {
110
+ // Check if feedback already submitted
111
+ if (existsSync(feedbackPath)) {
112
+ try {
113
+ const existing = JSON.parse(readFileSync(feedbackPath, "utf-8"));
114
+ if (existing.status === "approved" || existing.status === "needs-work") {
115
+ mdWatcher.close();
116
+ await outputFeedbackResult(existing, sessionId, planTitle, sessionDir);
117
+ return;
118
+ }
119
+ }
120
+ catch {
121
+ /* ignore */
122
+ }
123
+ }
124
+ return new Promise((resolve) => {
125
+ const fbWatcher = watch(feedbackPath, {
126
+ awaitWriteFinish: { stabilityThreshold: 200, pollInterval: 100 },
127
+ });
128
+ const check = async () => {
129
+ try {
130
+ if (!existsSync(feedbackPath))
131
+ return;
132
+ const data = JSON.parse(readFileSync(feedbackPath, "utf-8"));
133
+ if (data.status === "approved" || data.status === "needs-work") {
134
+ fbWatcher.close();
135
+ mdWatcher.close();
136
+ await outputFeedbackResult(data, sessionId, planTitle, sessionDir);
137
+ resolve();
138
+ }
139
+ }
140
+ catch {
141
+ /* ignore parse errors during writes */
142
+ }
143
+ };
144
+ fbWatcher.on("change", check);
145
+ fbWatcher.on("add", check);
146
+ process.on("SIGINT", () => {
147
+ fbWatcher.close();
148
+ mdWatcher.close();
149
+ console.error("\nStopped watching.");
150
+ process.exit(0);
151
+ });
152
+ });
153
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "plan-assistant",
3
- "version": "1.3.4",
3
+ "version": "1.4.0",
4
4
  "description": "Review implementation plans in the browser with live reload",
5
5
  "homepage": "https://github.com/sanderdatema/plan_assistant#readme",
6
6
  "bugs": {
@@ -1,3 +0,0 @@
1
- var Qe=e=>{throw TypeError(e)};var $t=(e,t,n)=>t.has(e)||Qe("Cannot "+n);var S=(e,t,n)=>($t(e,t,"read from private field"),n?n.call(e):t.get(e)),C=(e,t,n)=>t.has(e)?Qe("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,n);import{b8 as Pe,b9 as Dt,d as O,g as x,b as N,aM as _e,ba as Bt}from"./CD_kQCcy.js";import{o as et}from"./BfABZbDO.js";const Y=[];function Me(e,t=Pe){let n=null;const a=new Set;function r(c){if(Dt(e,c)&&(e=c,n)){const s=!Y.length;for(const l of a)l[1](),Y.push(l,e);if(s){for(let l=0;l<Y.length;l+=2)Y[l][0](Y[l+1]);Y.length=0}}}function i(c){r(c(e))}function o(c,s=Pe){const l=[c,s];return a.add(l),a.size===1&&(n=t(r,i)||Pe),c(e),()=>{a.delete(l),a.size===0&&n&&(n(),n=null)}}return{set:r,update:i,subscribe:o}}class Re{constructor(t,n){this.status=t,typeof n=="string"?this.body={message:n}:n?this.body=n:this.body={message:`Error: ${t}`}}toString(){return JSON.stringify(this.body)}}class Ve{constructor(t,n){this.status=t,this.location=n}}class qe extends Error{constructor(t,n,a){super(a),this.status=t,this.text=n}}new URL("sveltekit-internal://");function Ft(e,t){return e==="/"||t==="ignore"?e:t==="never"?e.endsWith("/")?e.slice(0,-1):e:t==="always"&&!e.endsWith("/")?e+"/":e}function Mt(e){return e.split("%25").map(decodeURI).join("%25")}function Vt(e){for(const t in e)e[t]=decodeURIComponent(e[t]);return e}function Ce({href:e}){return e.split("#")[0]}function qt(...e){let t=5381;for(const n of e)if(typeof n=="string"){let a=n.length;for(;a;)t=t*33^n.charCodeAt(--a)}else if(ArrayBuffer.isView(n)){const a=new Uint8Array(n.buffer,n.byteOffset,n.byteLength);let r=a.length;for(;r;)t=t*33^a[--r]}else throw new TypeError("value must be a string or TypedArray");return(t>>>0).toString(36)}new TextEncoder;const Gt=new TextDecoder;function Kt(e){const t=atob(e),n=new Uint8Array(t.length);for(let a=0;a<t.length;a++)n[a]=t.charCodeAt(a);return n}const Yt=window.fetch;window.fetch=(e,t)=>((e instanceof Request?e.method:(t==null?void 0:t.method)||"GET")!=="GET"&&Q.delete(Ge(e)),Yt(e,t));const Q=new Map;function Wt(e,t){const n=Ge(e,t),a=document.querySelector(n);if(a!=null&&a.textContent){a.remove();let{body:r,...i}=JSON.parse(a.textContent);const o=a.getAttribute("data-ttl");return o&&Q.set(n,{body:r,init:i,ttl:1e3*Number(o)}),a.getAttribute("data-b64")!==null&&(r=Kt(r)),Promise.resolve(new Response(r,i))}return window.fetch(e,t)}function zt(e,t,n){if(Q.size>0){const a=Ge(e,n),r=Q.get(a);if(r){if(performance.now()<r.ttl&&["default","force-cache","only-if-cached",void 0].includes(n==null?void 0:n.cache))return new Response(r.body,r.init);Q.delete(a)}}return window.fetch(t,n)}function Ge(e,t){let a=`script[data-sveltekit-fetched][data-url=${JSON.stringify(e instanceof Request?e.url:e)}]`;if(t!=null&&t.headers||t!=null&&t.body){const r=[];t.headers&&r.push([...new Headers(t.headers)].join(",")),t.body&&(typeof t.body=="string"||ArrayBuffer.isView(t.body))&&r.push(t.body),a+=`[data-hash="${qt(...r)}"]`}return a}const Ht=/^(\[)?(\.\.\.)?(\w+)(?:=(\w+))?(\])?$/;function Jt(e){const t=[];return{pattern:e==="/"?/^\/$/:new RegExp(`^${Zt(e).map(a=>{const r=/^\[\.\.\.(\w+)(?:=(\w+))?\]$/.exec(a);if(r)return t.push({name:r[1],matcher:r[2],optional:!1,rest:!0,chained:!0}),"(?:/([^]*))?";const i=/^\[\[(\w+)(?:=(\w+))?\]\]$/.exec(a);if(i)return t.push({name:i[1],matcher:i[2],optional:!0,rest:!1,chained:!0}),"(?:/([^/]+))?";if(!a)return;const o=a.split(/\[(.+?)\](?!\])/);return"/"+o.map((s,l)=>{if(l%2){if(s.startsWith("x+"))return je(String.fromCharCode(parseInt(s.slice(2),16)));if(s.startsWith("u+"))return je(String.fromCharCode(...s.slice(2).split("-").map(p=>parseInt(p,16))));const f=Ht.exec(s),[,h,m,d,u]=f;return t.push({name:d,matcher:u,optional:!!h,rest:!!m,chained:m?l===1&&o[0]==="":!1}),m?"([^]*?)":h?"([^/]*)?":"([^/]+?)"}return je(s)}).join("")}).join("")}/?$`),params:t}}function Xt(e){return e!==""&&!/^\([^)]+\)$/.test(e)}function Zt(e){return e.slice(1).split("/").filter(Xt)}function Qt(e,t,n){const a={},r=e.slice(1),i=r.filter(c=>c!==void 0);let o=0;for(let c=0;c<t.length;c+=1){const s=t[c];let l=r[c-o];if(s.chained&&s.rest&&o&&(l=r.slice(c-o,c+1).filter(f=>f).join("/"),o=0),l===void 0)if(s.rest)l="";else continue;if(!s.matcher||n[s.matcher](l)){a[s.name]=l;const f=t[c+1],h=r[c+1];f&&!f.rest&&f.optional&&h&&s.chained&&(o=0),!f&&!h&&Object.keys(a).length===i.length&&(o=0);continue}if(s.optional&&s.chained){o++;continue}return}if(!o)return a}function je(e){return e.normalize().replace(/[[\]]/g,"\\$&").replace(/%/g,"%25").replace(/\//g,"%2[Ff]").replace(/\?/g,"%3[Ff]").replace(/#/g,"%23").replace(/[.*+?^${}()|\\]/g,"\\$&")}function en({nodes:e,server_loads:t,dictionary:n,matchers:a}){const r=new Set(t);return Object.entries(n).map(([c,[s,l,f]])=>{const{pattern:h,params:m}=Jt(c),d={id:c,exec:u=>{const p=h.exec(u);if(p)return Qt(p,m,a)},errors:[1,...f||[]].map(u=>e[u]),layouts:[0,...l||[]].map(o),leaf:i(s)};return d.errors.length=d.layouts.length=Math.max(d.errors.length,d.layouts.length),d});function i(c){const s=c<0;return s&&(c=~c),[s,e[c]]}function o(c){return c===void 0?c:[r.has(c),e[c]]}}function gt(e,t=JSON.parse){try{return t(sessionStorage[e])}catch{}}function tt(e,t,n=JSON.stringify){const a=n(t);try{sessionStorage[e]=a}catch{}}var ft;const P=((ft=globalThis.__sveltekit_8pjol5)==null?void 0:ft.base)??"";var ut;const tn=((ut=globalThis.__sveltekit_8pjol5)==null?void 0:ut.assets)??P??"",nn="1773437215976",mt="sveltekit:snapshot",_t="sveltekit:scroll",wt="sveltekit:states",rn="sveltekit:pageurl",z="sveltekit:history",ne="sveltekit:navigation",q={tap:1,hover:2,viewport:3,eager:4,off:-1,false:-1},Te=location.origin;function yt(e){if(e instanceof URL)return e;let t=document.baseURI;if(!t){const n=document.getElementsByTagName("base");t=n.length?n[0].href:document.URL}return new URL(e,t)}function K(){return{x:pageXOffset,y:pageYOffset}}function W(e,t){return e.getAttribute(`data-sveltekit-${t}`)}const nt={...q,"":q.hover};function vt(e){let t=e.assignedSlot??e.parentNode;return(t==null?void 0:t.nodeType)===11&&(t=t.host),t}function bt(e,t){for(;e&&e!==t;){if(e.nodeName.toUpperCase()==="A"&&e.hasAttribute("href"))return e;e=vt(e)}}function Ne(e,t,n){let a;try{if(a=new URL(e instanceof SVGAElement?e.href.baseVal:e.href,document.baseURI),n&&a.hash.match(/^#[^/]/)){const c=location.hash.split("#")[1]||"/";a.hash=`#${c}${a.hash}`}}catch{}const r=e instanceof SVGAElement?e.target.baseVal:e.target,i=!a||!!r||Ie(a,t,n)||(e.getAttribute("rel")||"").split(/\s+/).includes("external"),o=(a==null?void 0:a.origin)===Te&&e.hasAttribute("download");return{url:a,external:i,target:r,download:o}}function we(e){let t=null,n=null,a=null,r=null,i=null,o=null,c=e;for(;c&&c!==document.documentElement;)a===null&&(a=W(c,"preload-code")),r===null&&(r=W(c,"preload-data")),t===null&&(t=W(c,"keepfocus")),n===null&&(n=W(c,"noscroll")),i===null&&(i=W(c,"reload")),o===null&&(o=W(c,"replacestate")),c=vt(c);function s(l){switch(l){case"":case"true":return!0;case"off":case"false":return!1;default:return}}return{preload_code:nt[a??"off"],preload_data:nt[r??"off"],keepfocus:s(t),noscroll:s(n),reload:s(i),replace_state:s(o)}}function rt(e){const t=Me(e);let n=!0;function a(){n=!0,t.update(o=>o)}function r(o){n=!1,t.set(o)}function i(o){let c;return t.subscribe(s=>{(c===void 0||n&&s!==c)&&o(c=s)})}return{notify:a,set:r,subscribe:i}}const kt={v:()=>{}};function an(){const{set:e,subscribe:t}=Me(!1);let n;async function a(){clearTimeout(n);try{const r=await fetch(`${tn}/_app/version.json`,{headers:{pragma:"no-cache","cache-control":"no-cache"}});if(!r.ok)return!1;const o=(await r.json()).version!==nn;return o&&(e(!0),kt.v(),clearTimeout(n)),o}catch{return!1}}return{subscribe:t,check:a}}function Ie(e,t,n){return e.origin!==Te||!e.pathname.startsWith(t)?!0:n?e.pathname!==location.pathname:!1}function Wn(e){}function on(e){const t=cn(e),n=new ArrayBuffer(t.length),a=new DataView(n);for(let r=0;r<n.byteLength;r++)a.setUint8(r,t.charCodeAt(r));return n}const sn="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";function cn(e){e.length%4===0&&(e=e.replace(/==?$/,""));let t="",n=0,a=0;for(let r=0;r<e.length;r++)n<<=6,n|=sn.indexOf(e[r]),a+=6,a===24&&(t+=String.fromCharCode((n&16711680)>>16),t+=String.fromCharCode((n&65280)>>8),t+=String.fromCharCode(n&255),n=a=0);return a===12?(n>>=4,t+=String.fromCharCode(n)):a===18&&(n>>=2,t+=String.fromCharCode((n&65280)>>8),t+=String.fromCharCode(n&255)),t}const ln=-1,fn=-2,un=-3,hn=-4,dn=-5,pn=-6,gn=-7;function mn(e,t){if(typeof e=="number")return i(e,!0);if(!Array.isArray(e)||e.length===0)throw new Error("Invalid input");const n=e,a=Array(n.length);let r=null;function i(o,c=!1){if(o===ln)return;if(o===un)return NaN;if(o===hn)return 1/0;if(o===dn)return-1/0;if(o===pn)return-0;if(c||typeof o!="number")throw new Error("Invalid input");if(o in a)return a[o];const s=n[o];if(!s||typeof s!="object")a[o]=s;else if(Array.isArray(s))if(typeof s[0]=="string"){const l=s[0],f=t&&Object.hasOwn(t,l)?t[l]:void 0;if(f){let h=s[1];if(typeof h!="number"&&(h=n.push(s[1])-1),r??(r=new Set),r.has(h))throw new Error("Invalid circular reference");return r.add(h),a[o]=f(i(h)),r.delete(h),a[o]}switch(l){case"Date":a[o]=new Date(s[1]);break;case"Set":const h=new Set;a[o]=h;for(let u=1;u<s.length;u+=1)h.add(i(s[u]));break;case"Map":const m=new Map;a[o]=m;for(let u=1;u<s.length;u+=2)m.set(i(s[u]),i(s[u+1]));break;case"RegExp":a[o]=new RegExp(s[1],s[2]);break;case"Object":a[o]=Object(s[1]);break;case"BigInt":a[o]=BigInt(s[1]);break;case"null":const d=Object.create(null);a[o]=d;for(let u=1;u<s.length;u+=2)d[s[u]]=i(s[u+1]);break;case"Int8Array":case"Uint8Array":case"Uint8ClampedArray":case"Int16Array":case"Uint16Array":case"Int32Array":case"Uint32Array":case"Float32Array":case"Float64Array":case"BigInt64Array":case"BigUint64Array":{if(n[s[1]][0]!=="ArrayBuffer")throw new Error("Invalid data");const u=globalThis[l],p=i(s[1]),w=new u(p);a[o]=s[2]!==void 0?w.subarray(s[2],s[3]):w;break}case"ArrayBuffer":{const u=s[1];if(typeof u!="string")throw new Error("Invalid ArrayBuffer encoding");const p=on(u);a[o]=p;break}case"Temporal.Duration":case"Temporal.Instant":case"Temporal.PlainDate":case"Temporal.PlainTime":case"Temporal.PlainDateTime":case"Temporal.PlainMonthDay":case"Temporal.PlainYearMonth":case"Temporal.ZonedDateTime":{const u=l.slice(9);a[o]=Temporal[u].from(s[1]);break}case"URL":{const u=new URL(s[1]);a[o]=u;break}case"URLSearchParams":{const u=new URLSearchParams(s[1]);a[o]=u;break}default:throw new Error(`Unknown type ${l}`)}}else if(s[0]===gn){const l=s[1],f=new Array(l);a[o]=f;for(let h=2;h<s.length;h+=2){const m=s[h];f[m]=i(s[h+1])}}else{const l=new Array(s.length);a[o]=l;for(let f=0;f<s.length;f+=1){const h=s[f];h!==fn&&(l[f]=i(h))}}else{const l={};a[o]=l;for(const f of Object.keys(s)){if(f==="__proto__")throw new Error("Cannot parse an object with a `__proto__` property");const h=s[f];l[f]=i(h)}}return a[o]}return i(0)}const Et=new Set(["load","prerender","csr","ssr","trailingSlash","config"]);[...Et];const _n=new Set([...Et]);[..._n];function wn(e){return e.filter(t=>t!=null)}const yn="x-sveltekit-invalidated",vn="x-sveltekit-trailing-slash";function ye(e){return e instanceof Re||e instanceof qe?e.status:500}function bn(e){return e instanceof qe?e.text:"Internal Error"}let U,re,Oe;const kn=et.toString().includes("$$")||/function \w+\(\) \{\}/.test(et.toString());var se,ie,ce,le,fe,ue,he,de,ht,pe,dt,ge,pt;kn?(U={data:{},form:null,error:null,params:{},route:{id:null},state:{},status:-1,url:new URL("https://example.com")},re={current:null},Oe={current:!1}):(U=new(ht=class{constructor(){C(this,se,O({}));C(this,ie,O(null));C(this,ce,O(null));C(this,le,O({}));C(this,fe,O({id:null}));C(this,ue,O({}));C(this,he,O(-1));C(this,de,O(new URL("https://example.com")))}get data(){return x(S(this,se))}set data(t){N(S(this,se),t)}get form(){return x(S(this,ie))}set form(t){N(S(this,ie),t)}get error(){return x(S(this,ce))}set error(t){N(S(this,ce),t)}get params(){return x(S(this,le))}set params(t){N(S(this,le),t)}get route(){return x(S(this,fe))}set route(t){N(S(this,fe),t)}get state(){return x(S(this,ue))}set state(t){N(S(this,ue),t)}get status(){return x(S(this,he))}set status(t){N(S(this,he),t)}get url(){return x(S(this,de))}set url(t){N(S(this,de),t)}},se=new WeakMap,ie=new WeakMap,ce=new WeakMap,le=new WeakMap,fe=new WeakMap,ue=new WeakMap,he=new WeakMap,de=new WeakMap,ht),re=new(dt=class{constructor(){C(this,pe,O(null))}get current(){return x(S(this,pe))}set current(t){N(S(this,pe),t)}},pe=new WeakMap,dt),Oe=new(pt=class{constructor(){C(this,ge,O(!1))}get current(){return x(S(this,ge))}set current(t){N(S(this,ge),t)}},ge=new WeakMap,pt),kt.v=()=>Oe.current=!0);function En(e){Object.assign(U,e)}const Sn="/__data.json",An=".html__data.json";function Rn(e){return e.endsWith(".html")?e.replace(/\.html$/,An):e.replace(/\/$/,"")+Sn}const Tn=new Set(["icon","shortcut icon","apple-touch-icon"]),F=gt(_t)??{},ae=gt(mt)??{},B={url:rt({}),page:rt({}),navigating:Me(null),updated:an()};function Ke(e){F[e]=K()}function In(e,t){let n=e+1;for(;F[n];)delete F[n],n+=1;for(n=t+1;ae[n];)delete ae[n],n+=1}function X(e,t=!1){return t?location.replace(e.href):location.href=e.href,new Promise(()=>{})}async function St(){if("serviceWorker"in navigator){const e=await navigator.serviceWorker.getRegistration(P||"/");e&&await e.update()}}function at(){}let Ye,$e,ve,D,De,R;const be=[],ke=[];let A=null;function Be(){var e;(e=A==null?void 0:A.fork)==null||e.then(t=>t==null?void 0:t.discard()),A=null}const me=new Map,At=new Set,Un=new Set,ee=new Set;let y={branch:[],error:null,url:null},We=!1,Ee=!1,ot=!0,oe=!1,Z=!1,Rt=!1,ze=!1,Tt,T,L,G;const te=new Set,st=new Map;async function Xn(e,t,n){var i,o,c,s,l;(i=globalThis.__sveltekit_8pjol5)!=null&&i.data&&globalThis.__sveltekit_8pjol5.data,document.URL!==location.href&&(location.href=location.href),R=e,await((c=(o=e.hooks).init)==null?void 0:c.call(o)),Ye=en(e),D=document.documentElement,De=t,$e=e.nodes[0],ve=e.nodes[1],$e(),ve(),T=(s=history.state)==null?void 0:s[z],L=(l=history.state)==null?void 0:l[ne],T||(T=L=Date.now(),history.replaceState({...history.state,[z]:T,[ne]:L},""));const a=F[T];function r(){a&&(history.scrollRestoration="manual",scrollTo(a.x,a.y))}n?(r(),await Mn(De,n)):(await H({type:"enter",url:yt(R.hash?qn(new URL(location.href)):location.href),replace_state:!0}),r()),Fn()}function Ln(){be.length=0,ze=!1}function It(e){ke.some(t=>t==null?void 0:t.snapshot)&&(ae[e]=ke.map(t=>{var n;return(n=t==null?void 0:t.snapshot)==null?void 0:n.capture()}))}function Ut(e){var t;(t=ae[e])==null||t.forEach((n,a)=>{var r,i;(i=(r=ke[a])==null?void 0:r.snapshot)==null||i.restore(n)})}function it(){Ke(T),tt(_t,F),It(L),tt(mt,ae)}async function Pn(e,t,n,a){let r;t.invalidateAll&&Be(),await H({type:"goto",url:yt(e),keepfocus:t.keepFocus,noscroll:t.noScroll,replace_state:t.replaceState,state:t.state,redirect_count:n,nav_token:a,accept:()=>{t.invalidateAll&&(ze=!0,r=[...st.keys()]),t.invalidate&&t.invalidate.forEach(Bn)}}),t.invalidateAll&&_e().then(_e).then(()=>{st.forEach(({resource:i},o)=>{var c;r!=null&&r.includes(o)&&((c=i.refresh)==null||c.call(i))})})}async function Cn(e){if(e.id!==(A==null?void 0:A.id)){Be();const t={};te.add(t),A={id:e.id,token:t,promise:Pt({...e,preload:t}).then(n=>(te.delete(t),n.type==="loaded"&&n.state.error&&Be(),n)),fork:null}}return A.promise}async function xe(e){var n;const t=(n=await Le(e,!1))==null?void 0:n.route;t&&await Promise.all([...t.layouts,t.leaf].filter(Boolean).map(a=>a[1]()))}async function Lt(e,t,n){var r;y=e.state;const a=document.querySelector("style[data-sveltekit]");if(a&&a.remove(),Object.assign(U,e.props.page),Tt=new R.root({target:t,props:{...e.props,stores:B,components:ke},hydrate:n,sync:!1}),await Promise.resolve(),Ut(L),n){const i={from:null,to:{params:y.params,route:{id:((r=y.route)==null?void 0:r.id)??null},url:new URL(location.href),scroll:F[T]??K()},willUnload:!1,type:"enter",complete:Promise.resolve()};ee.forEach(o=>o(i))}Ee=!0}function Se({url:e,params:t,branch:n,status:a,error:r,route:i,form:o}){let c="never";if(P&&(e.pathname===P||e.pathname===P+"/"))c="always";else for(const d of n)(d==null?void 0:d.slash)!==void 0&&(c=d.slash);e.pathname=Ft(e.pathname,c),e.search=e.search;const s={type:"loaded",state:{url:e,params:t,branch:n,error:r,route:i},props:{constructors:wn(n).map(d=>d.node.component),page:Ze(U)}};o!==void 0&&(s.props.form=o);let l={},f=!U,h=0;for(let d=0;d<Math.max(n.length,y.branch.length);d+=1){const u=n[d],p=y.branch[d];(u==null?void 0:u.data)!==(p==null?void 0:p.data)&&(f=!0),u&&(l={...l,...u.data},f&&(s.props[`data_${h}`]=l),h+=1)}return(!y.url||e.href!==y.url.href||y.error!==r||o!==void 0&&o!==U.form||f)&&(s.props.page={error:r,params:t,route:{id:(i==null?void 0:i.id)??null},state:{},status:a,url:new URL(e),form:o??null,data:f?l:U.data}),s}async function He({loader:e,parent:t,url:n,params:a,route:r,server_data_node:i}){var l,f;let o=null;const c={dependencies:new Set,params:new Set,parent:!1,route:!1,url:!1,search_params:new Set},s=await e();return{node:s,loader:e,server:i,universal:(l=s.universal)!=null&&l.load?{type:"data",data:o,uses:c}:null,data:o??(i==null?void 0:i.data)??null,slash:((f=s.universal)==null?void 0:f.trailingSlash)??(i==null?void 0:i.slash)}}function jn(e,t,n){let a=e instanceof Request?e.url:e;const r=new URL(a,n);r.origin===n.origin&&(a=r.href.slice(n.origin.length));const i=Ee?zt(a,r.href,t):Wt(a,t);return{resolved:r,promise:i}}function ct(e,t,n,a,r,i){if(ze)return!0;if(!r)return!1;if(r.parent&&e||r.route&&t||r.url&&n)return!0;for(const o of r.search_params)if(a.has(o))return!0;for(const o of r.params)if(i[o]!==y.params[o])return!0;for(const o of r.dependencies)if(be.some(c=>c(new URL(o))))return!0;return!1}function Je(e,t){return(e==null?void 0:e.type)==="data"?e:(e==null?void 0:e.type)==="skip"?t??null:null}function On(e,t){if(!e)return new Set(t.searchParams.keys());const n=new Set([...e.searchParams.keys(),...t.searchParams.keys()]);for(const a of n){const r=e.searchParams.getAll(a),i=t.searchParams.getAll(a);r.every(o=>i.includes(o))&&i.every(o=>r.includes(o))&&n.delete(a)}return n}function lt({error:e,url:t,route:n,params:a}){return{type:"loaded",state:{error:e,url:t,route:n,params:a,branch:[]},props:{page:Ze(U),constructors:[]}}}async function Pt({id:e,invalidating:t,url:n,params:a,route:r,preload:i}){if((A==null?void 0:A.id)===e)return te.delete(A.token),A.promise;const{errors:o,layouts:c,leaf:s}=r,l=[...c,s];o.forEach(g=>g==null?void 0:g().catch(()=>{})),l.forEach(g=>g==null?void 0:g[1]().catch(()=>{}));let f=null;const h=y.url?e!==Ae(y.url):!1,m=y.route?r.id!==y.route.id:!1,d=On(y.url,n);let u=!1;{const g=l.map((v,b)=>{var E;const k=y.branch[b],j=!!(v!=null&&v[0])&&((k==null?void 0:k.loader)!==v[1]||ct(u,m,h,d,(E=k.server)==null?void 0:E.uses,a));return j&&(u=!0),j});if(g.some(Boolean)){try{f=await Ot(n,g)}catch(v){const b=await J(v,{url:n,params:a,route:{id:e}});return te.has(i)?lt({error:b,url:n,params:a,route:r}):Ue({status:ye(v),error:b,url:n,route:r})}if(f.type==="redirect")return f}}const p=f==null?void 0:f.nodes;let w=!1;const _=l.map(async(g,v)=>{var E;if(!g)return;const b=y.branch[v],k=p==null?void 0:p[v];if((!k||k.type==="skip")&&g[1]===(b==null?void 0:b.loader)&&!ct(w,m,h,d,(E=b.universal)==null?void 0:E.uses,a))return b;if(w=!0,(k==null?void 0:k.type)==="error")throw k;return He({loader:g[1],url:n,params:a,route:r,parent:async()=>{var $;const M={};for(let V=0;V<v;V+=1)Object.assign(M,($=await _[V])==null?void 0:$.data);return M},server_data_node:Je(k===void 0&&g[0]?{type:"skip"}:k??null,g[0]?b==null?void 0:b.server:void 0)})});for(const g of _)g.catch(()=>{});const I=[];for(let g=0;g<l.length;g+=1)if(l[g])try{I.push(await _[g])}catch(v){if(v instanceof Ve)return{type:"redirect",location:v.location};if(te.has(i))return lt({error:await J(v,{params:a,url:n,route:{id:r.id}}),url:n,params:a,route:r});let b=ye(v),k;if(p!=null&&p.includes(v))b=v.status??b,k=v.error;else if(v instanceof Re)k=v.body;else{if(await B.updated.check())return await St(),await X(n);k=await J(v,{params:a,url:n,route:{id:r.id}})}const j=await xn(g,I,o);return j?Se({url:n,params:a,branch:I.slice(0,j.idx).concat(j.node),status:b,error:k,route:r}):await jt(n,{id:r.id},k,b)}else I.push(void 0);return Se({url:n,params:a,branch:I,status:200,error:null,route:r,form:t?void 0:null})}async function xn(e,t,n){for(;e--;)if(n[e]){let a=e;for(;!t[a];)a-=1;try{return{idx:a+1,node:{node:await n[e](),loader:n[e],data:{},server:null,universal:null}}}catch{continue}}}async function Ue({status:e,error:t,url:n,route:a}){const r={};let i=null;if(R.server_loads[0]===0)try{const c=await Ot(n,[!0]);if(c.type!=="data"||c.nodes[0]&&c.nodes[0].type!=="data")throw 0;i=c.nodes[0]??null}catch{(n.origin!==Te||n.pathname!==location.pathname||We)&&await X(n)}try{const o=await He({loader:$e,url:n,params:r,route:a,parent:()=>Promise.resolve({}),server_data_node:Je(i)}),c={node:await ve(),loader:ve,universal:null,server:null,data:null};return Se({url:n,params:r,branch:[o,c],status:e,error:t,route:null})}catch(o){if(o instanceof Ve)return Pn(new URL(o.location,location.href),{},0);throw o}}async function Nn(e){const t=e.href;if(me.has(t))return me.get(t);let n;try{const a=(async()=>{let r=await R.hooks.reroute({url:new URL(e),fetch:async(i,o)=>jn(i,o,e).promise})??e;if(typeof r=="string"){const i=new URL(e);R.hash?i.hash=r:i.pathname=r,r=i}return r})();me.set(t,a),n=await a}catch{me.delete(t);return}return n}async function Le(e,t){if(e&&!Ie(e,P,R.hash)){const n=await Nn(e);if(!n)return;const a=$n(n);for(const r of Ye){const i=r.exec(a);if(i)return{id:Ae(e),invalidating:t,route:r,params:Vt(i),url:e}}}}function $n(e){return Mt(R.hash?e.hash.replace(/^#/,"").replace(/[?#].+/,""):e.pathname.slice(P.length))||"/"}function Ae(e){return(R.hash?e.hash.replace(/^#/,""):e.pathname)+e.search}function Ct({url:e,type:t,intent:n,delta:a,event:r,scroll:i}){let o=!1;const c=Xe(y,n,e,t,i??null);a!==void 0&&(c.navigation.delta=a),r!==void 0&&(c.navigation.event=r);const s={...c.navigation,cancel:()=>{o=!0,c.reject(new Error("navigation cancelled"))}};return oe||At.forEach(l=>l(s)),o?null:c}async function H({type:e,url:t,popped:n,keepfocus:a,noscroll:r,replace_state:i,state:o={},redirect_count:c=0,nav_token:s={},accept:l=at,block:f=at,event:h}){var j;const m=G;G=s;const d=await Le(t,!1),u=e==="enter"?Xe(y,d,t,e):Ct({url:t,type:e,delta:n==null?void 0:n.delta,intent:d,scroll:n==null?void 0:n.scroll,event:h});if(!u){f(),G===s&&(G=m);return}const p=T,w=L;l(),oe=!0,Ee&&u.navigation.type!=="enter"&&B.navigating.set(re.current=u.navigation);let _=d&&await Pt(d);if(!_){if(Ie(t,P,R.hash))return await X(t,i);_=await jt(t,{id:null},await J(new qe(404,"Not Found",`Not found: ${t.pathname}`),{url:t,params:{},route:{id:null}}),404,i)}if(t=(d==null?void 0:d.url)||t,G!==s)return u.reject(new Error("navigation aborted")),!1;if(_.type==="redirect"){if(c<20){await H({type:e,url:new URL(_.location,t),popped:n,keepfocus:a,noscroll:r,replace_state:i,state:o,redirect_count:c+1,nav_token:s}),u.fulfil(void 0);return}_=await Ue({status:500,error:await J(new Error("Redirect loop"),{url:t,params:{},route:{id:null}}),url:t,route:{id:null}})}else _.props.page.status>=400&&await B.updated.check()&&(await St(),await X(t,i));if(Ln(),Ke(p),It(w),_.props.page.url.pathname!==t.pathname&&(t.pathname=_.props.page.url.pathname),o=n?n.state:o,!n){const E=i?0:1,M={[z]:T+=E,[ne]:L+=E,[wt]:o};(i?history.replaceState:history.pushState).call(history,M,"",t),i||In(T,L)}const I=d&&(A==null?void 0:A.id)===d.id?A.fork:null;A=null,_.props.page.state=o;let g;if(Ee){const E=(await Promise.all(Array.from(Un,$=>$(u.navigation)))).filter($=>typeof $=="function");if(E.length>0){let $=function(){E.forEach(V=>{ee.delete(V)})};E.push($),E.forEach(V=>{ee.add(V)})}y=_.state,_.props.page&&(_.props.page.url=t);const M=I&&await I;M?g=M.commit():(Tt.$set(_.props),En(_.props.page),g=(j=Bt)==null?void 0:j()),Rt=!0}else await Lt(_,De,!1);const{activeElement:v}=document;await g,await _e(),await _e();let b=null;if(ot){const E=n?n.scroll:r?K():null;E?scrollTo(E.x,E.y):(b=t.hash&&document.getElementById(Nt(t)))?b.scrollIntoView():scrollTo(0,0)}const k=document.activeElement!==v&&document.activeElement!==document.body;!a&&!k&&Vn(t,!b),ot=!0,_.props.page&&Object.assign(U,_.props.page),oe=!1,e==="popstate"&&Ut(L),u.fulfil(void 0),u.navigation.to&&(u.navigation.to.scroll=K()),ee.forEach(E=>E(u.navigation)),B.navigating.set(re.current=null)}async function jt(e,t,n,a,r){return e.origin===Te&&e.pathname===location.pathname&&!We?await Ue({status:a,error:n,url:e,route:t}):await X(e,r)}function Dn(){let e,t={element:void 0,href:void 0},n;D.addEventListener("mousemove",c=>{const s=c.target;clearTimeout(e),e=setTimeout(()=>{i(s,q.hover)},20)});function a(c){c.defaultPrevented||i(c.composedPath()[0],q.tap)}D.addEventListener("mousedown",a),D.addEventListener("touchstart",a,{passive:!0});const r=new IntersectionObserver(c=>{for(const s of c)s.isIntersecting&&(xe(new URL(s.target.href)),r.unobserve(s.target))},{threshold:0});async function i(c,s){const l=bt(c,D),f=l===t.element&&(l==null?void 0:l.href)===t.href&&s>=n;if(!l||f)return;const{url:h,external:m,download:d}=Ne(l,P,R.hash);if(m||d)return;const u=we(l),p=h&&Ae(y.url)===Ae(h);if(!(u.reload||p))if(s<=u.preload_data){t={element:l,href:l.href},n=q.tap;const w=await Le(h,!1);if(!w)return;Cn(w)}else s<=u.preload_code&&(t={element:l,href:l.href},n=s,xe(h))}function o(){r.disconnect();for(const c of D.querySelectorAll("a")){const{url:s,external:l,download:f}=Ne(c,P,R.hash);if(l||f)continue;const h=we(c);h.reload||(h.preload_code===q.viewport&&r.observe(c),h.preload_code===q.eager&&xe(s))}}ee.add(o),o()}function J(e,t){if(e instanceof Re)return e.body;const n=ye(e),a=bn(e);return R.hooks.handleError({error:e,event:t,status:n,message:a})??{message:a}}function Bn(e){if(typeof e=="function")be.push(e);else{const{href:t}=new URL(e,location.href);be.push(n=>n.href===t)}}function Fn(){var t;history.scrollRestoration="manual",addEventListener("beforeunload",n=>{let a=!1;if(it(),!oe){const r=Xe(y,void 0,null,"leave"),i={...r.navigation,cancel:()=>{a=!0,r.reject(new Error("navigation cancelled"))}};At.forEach(o=>o(i))}a?(n.preventDefault(),n.returnValue=""):history.scrollRestoration="auto"}),addEventListener("visibilitychange",()=>{document.visibilityState==="hidden"&&it()}),(t=navigator.connection)!=null&&t.saveData||Dn(),D.addEventListener("click",async n=>{if(n.button||n.which!==1||n.metaKey||n.ctrlKey||n.shiftKey||n.altKey||n.defaultPrevented)return;const a=bt(n.composedPath()[0],D);if(!a)return;const{url:r,external:i,target:o,download:c}=Ne(a,P,R.hash);if(!r)return;if(o==="_parent"||o==="_top"){if(window.parent!==window)return}else if(o&&o!=="_self")return;const s=we(a);if(!(a instanceof SVGAElement)&&r.protocol!==location.protocol&&!(r.protocol==="https:"||r.protocol==="http:")||c)return;const[f,h]=(R.hash?r.hash.replace(/^#/,""):r.href).split("#"),m=f===Ce(location);if(i||s.reload&&(!m||!h)){Ct({url:r,type:"link",event:n})?oe=!0:n.preventDefault();return}if(h!==void 0&&m){const[,d]=y.url.href.split("#");if(d===h){if(n.preventDefault(),h===""||h==="top"&&a.ownerDocument.getElementById("top")===null)scrollTo({top:0});else{const u=a.ownerDocument.getElementById(decodeURIComponent(h));u&&(u.scrollIntoView(),u.focus())}return}if(Z=!0,Ke(T),e(r),!s.replace_state)return;Z=!1}n.preventDefault(),await new Promise(d=>{requestAnimationFrame(()=>{setTimeout(d,0)}),setTimeout(d,100)}),await H({type:"link",url:r,keepfocus:s.keepfocus,noscroll:s.noscroll,replace_state:s.replace_state??r.href===location.href,event:n})}),D.addEventListener("submit",n=>{if(n.defaultPrevented)return;const a=HTMLFormElement.prototype.cloneNode.call(n.target),r=n.submitter;if(((r==null?void 0:r.formTarget)||a.target)==="_blank"||((r==null?void 0:r.formMethod)||a.method)!=="get")return;const c=new URL((r==null?void 0:r.hasAttribute("formaction"))&&(r==null?void 0:r.formAction)||a.action);if(Ie(c,P,!1))return;const s=n.target,l=we(s);if(l.reload)return;n.preventDefault(),n.stopPropagation();const f=new FormData(s,r);c.search=new URLSearchParams(f).toString(),H({type:"form",url:c,keepfocus:l.keepfocus,noscroll:l.noscroll,replace_state:l.replace_state??c.href===location.href,event:n})}),addEventListener("popstate",async n=>{var a;if(!Fe){if((a=n.state)!=null&&a[z]){const r=n.state[z];if(G={},r===T)return;const i=F[r],o=n.state[wt]??{},c=new URL(n.state[rn]??location.href),s=n.state[ne],l=y.url?Ce(location)===Ce(y.url):!1;if(s===L&&(Rt||l)){o!==U.state&&(U.state=o),e(c),F[T]=K(),i&&scrollTo(i.x,i.y),T=r;return}const h=r-T;await H({type:"popstate",url:c,popped:{state:o,scroll:i,delta:h},accept:()=>{T=r,L=s},block:()=>{history.go(-h)},nav_token:G,event:n})}else if(!Z){const r=new URL(location.href);e(r),R.hash&&location.reload()}}}),addEventListener("hashchange",()=>{Z&&(Z=!1,history.replaceState({...history.state,[z]:++T,[ne]:L},"",location.href))});for(const n of document.querySelectorAll("link"))Tn.has(n.rel)&&(n.href=n.href);addEventListener("pageshow",n=>{n.persisted&&B.navigating.set(re.current=null)});function e(n){y.url=U.url=n,B.page.set(Ze(U)),B.page.notify()}}async function Mn(e,{status:t=200,error:n,node_ids:a,params:r,route:i,server_route:o,data:c,form:s}){We=!0;const l=new URL(location.href);let f;({params:r={},route:i={id:null}}=await Le(l,!1)||{}),f=Ye.find(({id:d})=>d===i.id);let h,m=!0;try{const d=a.map(async(p,w)=>{const _=c[w];return _!=null&&_.uses&&(_.uses=xt(_.uses)),He({loader:R.nodes[p],url:l,params:r,route:i,parent:async()=>{const I={};for(let g=0;g<w;g+=1)Object.assign(I,(await d[g]).data);return I},server_data_node:Je(_)})}),u=await Promise.all(d);if(f){const p=f.layouts;for(let w=0;w<p.length;w++)p[w]||u.splice(w,0,void 0)}h=Se({url:l,params:r,branch:u,status:t,error:n,form:s,route:f??null})}catch(d){if(d instanceof Ve){await X(new URL(d.location,location.href));return}h=await Ue({status:ye(d),error:await J(d,{url:l,params:r,route:i}),url:l,route:i}),e.textContent="",m=!1}h.props.page&&(h.props.page.state={}),await Lt(h,e,m)}async function Ot(e,t){var i;const n=new URL(e);n.pathname=Rn(e.pathname),e.pathname.endsWith("/")&&n.searchParams.append(vn,"1"),n.searchParams.append(yn,t.map(o=>o?"1":"0").join(""));const a=window.fetch,r=await a(n.href,{});if(!r.ok){let o;throw(i=r.headers.get("content-type"))!=null&&i.includes("application/json")?o=await r.json():r.status===404?o="Not Found":r.status===500&&(o="Internal Error"),new Re(r.status,o)}return new Promise(async o=>{var h;const c=new Map,s=r.body.getReader();function l(m){return mn(m,{...R.decoders,Promise:d=>new Promise((u,p)=>{c.set(d,{fulfil:u,reject:p})})})}let f="";for(;;){const{done:m,value:d}=await s.read();if(m&&!f)break;for(f+=!d&&f?`
2
- `:Gt.decode(d,{stream:!0});;){const u=f.indexOf(`
3
- `);if(u===-1)break;const p=JSON.parse(f.slice(0,u));if(f=f.slice(u+1),p.type==="redirect")return o(p);if(p.type==="data")(h=p.nodes)==null||h.forEach(w=>{(w==null?void 0:w.type)==="data"&&(w.uses=xt(w.uses),w.data=l(w.data))}),o(p);else if(p.type==="chunk"){const{id:w,data:_,error:I}=p,g=c.get(w);c.delete(w),I?g.reject(l(I)):g.fulfil(l(_))}}}})}function xt(e){return{dependencies:new Set((e==null?void 0:e.dependencies)??[]),params:new Set((e==null?void 0:e.params)??[]),parent:!!(e!=null&&e.parent),route:!!(e!=null&&e.route),url:!!(e!=null&&e.url),search_params:new Set((e==null?void 0:e.search_params)??[])}}let Fe=!1;function Vn(e,t=!0){const n=document.querySelector("[autofocus]");if(n)n.focus();else{const a=Nt(e);if(a&&document.getElementById(a)){const{x:i,y:o}=K();setTimeout(()=>{const c=history.state;Fe=!0,location.replace(new URL(`#${a}`,location.href)),history.replaceState(c,"",e),t&&scrollTo(i,o),Fe=!1})}else{const i=document.body,o=i.getAttribute("tabindex");i.tabIndex=-1,i.focus({preventScroll:!0,focusVisible:!1}),o!==null?i.setAttribute("tabindex",o):i.removeAttribute("tabindex")}const r=getSelection();if(r&&r.type!=="None"){const i=[];for(let o=0;o<r.rangeCount;o+=1)i.push(r.getRangeAt(o));setTimeout(()=>{if(r.rangeCount===i.length){for(let o=0;o<r.rangeCount;o+=1){const c=i[o],s=r.getRangeAt(o);if(c.commonAncestorContainer!==s.commonAncestorContainer||c.startContainer!==s.startContainer||c.endContainer!==s.endContainer||c.startOffset!==s.startOffset||c.endOffset!==s.endOffset)return}r.removeAllRanges()}})}}}function Xe(e,t,n,a,r=null){var l,f;let i,o;const c=new Promise((h,m)=>{i=h,o=m});return c.catch(()=>{}),{navigation:{from:{params:e.params,route:{id:((l=e.route)==null?void 0:l.id)??null},url:e.url,scroll:K()},to:n&&{params:(t==null?void 0:t.params)??null,route:{id:((f=t==null?void 0:t.route)==null?void 0:f.id)??null},url:n,scroll:r},willUnload:!t,type:a,complete:c},fulfil:i,reject:o}}function Ze(e){return{data:e.data,error:e.error,form:e.form,params:e.params,route:e.route,state:e.state,status:e.status,url:e.url}}function qn(e){const t=new URL(e);return t.hash=decodeURIComponent(e.hash),t}function Nt(e){let t;if(R.hash){const[,,n]=e.hash.split("#",3);t=n??""}else t=e.hash.slice(1);return decodeURIComponent(t)}export{Xn as a,Wn as l,U as p,B as s};
@@ -1 +0,0 @@
1
- import{ap as o,aq as n}from"./B-25Ue8o.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c};
@@ -1 +0,0 @@
1
- import{b as r}from"./RIGBV7Ip.js";var e=4;function a(o){return r(o,e)}export{a as c};
@@ -1 +0,0 @@
1
- import{l as o,a as r}from"../chunks/BHAhR-ZH.js";export{o as load_css,r as start};
@@ -1 +0,0 @@
1
- import{c as s,a as c}from"../chunks/Dl-inTne.js";import{e as p,E as i,G as m}from"../chunks/CD_kQCcy.js";import{B as f}from"../chunks/2wZlHG5k.js";function l(a,r,...n){var o=new f(a);p(()=>{const e=r()??null;o.ensure(e,e&&(t=>e(t,...n)))},i)}function E(a,r){var n=s(),o=m(n);l(o,()=>r.children),c(a,n)}export{E as component};
@@ -1 +0,0 @@
1
- import{_ as m}from"../chunks/DSIQf7-a.js";export{m as component};
@@ -1,9 +0,0 @@
1
- const index = 1;
2
- let component_cache;
3
- const component = async () => component_cache ??= (await import('./error.svelte-BpKLDhDN.js')).default;
4
- const imports = ["_app/immutable/nodes/1.CduF9YQo.js","_app/immutable/chunks/Dl-inTne.js","_app/immutable/chunks/CD_kQCcy.js","_app/immutable/chunks/wOfVBGZS.js","_app/immutable/chunks/BHAhR-ZH.js","_app/immutable/chunks/BfABZbDO.js"];
5
- const stylesheets = [];
6
- const fonts = [];
7
-
8
- export { component, fonts, imports, index, stylesheets };
9
- //# sourceMappingURL=1-YUd-zKqx.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_page.svelte-BXgDoamA.js","sources":["../../../.svelte-kit/adapter-node/entries/pages/plan/_sessionId_/_page.svelte.js"],"sourcesContent":["import { e as escape_html, a2 as attr_class, a1 as stringify, $ as ensure_array_like, a0 as attr, a3 as clsx, _ as derived, a4 as attr_style } from \"../../../../chunks/index.js\";\nimport \"clsx\";\nimport { a as statusBadgeClass, b as statusLabel, S as STATUS_LABELS } from \"../../../../chunks/status.js\";\nimport { marked } from \"marked\";\nfunction html(value) {\n var html2 = String(value ?? \"\");\n var open = \"<!---->\";\n return open + html2 + \"<!---->\";\n}\nlet instance$1 = null;\nfunction createPlanStore() {\n let currentPlan = null;\n let eventSource = null;\n let reconnectTimer = null;\n return {\n get plan() {\n return currentPlan;\n },\n set(plan) {\n currentPlan = plan;\n },\n connectSSE(sessionId) {\n this.disconnectSSE();\n const connect = () => {\n eventSource = new EventSource(`/api/sse/${sessionId}`);\n eventSource.addEventListener(\"plan-updated\", (event) => {\n try {\n const plan = JSON.parse(event.data);\n currentPlan = plan;\n } catch {\n }\n });\n eventSource.onerror = () => {\n eventSource?.close();\n reconnectTimer = setTimeout(connect, 3e3);\n };\n };\n connect();\n },\n disconnectSSE() {\n if (reconnectTimer) {\n clearTimeout(reconnectTimer);\n reconnectTimer = null;\n }\n if (eventSource) {\n eventSource.close();\n eventSource = null;\n }\n }\n };\n}\nfunction getPlanStore() {\n if (!instance$1) instance$1 = createPlanStore();\n return instance$1;\n}\nfunction genId() {\n return \"fb-\" + Date.now().toString(36) + Math.random().toString(36).slice(2, 6);\n}\nlet instance = null;\nfunction createFeedbackStore() {\n let currentFeedback = null;\n let saveTimer = null;\n let sessionId = \"\";\n async function persistFeedback() {\n if (!currentFeedback || !sessionId) return;\n try {\n await fetch(`/api/sessions/${sessionId}/feedback`, {\n method: \"PUT\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(currentFeedback)\n });\n } catch {\n }\n }\n function debouncedSave() {\n if (saveTimer) clearTimeout(saveTimer);\n saveTimer = setTimeout(persistFeedback, 500);\n }\n return {\n get feedback() {\n return currentFeedback;\n },\n get comments() {\n return currentFeedback?.comments ?? [];\n },\n get phaseStatuses() {\n return currentFeedback?.phaseStatuses ?? {};\n },\n get subItemStatuses() {\n return currentFeedback?.subItemStatuses ?? {};\n },\n get status() {\n return currentFeedback?.status ?? \"reviewing\";\n },\n init(sid, planTitle, planVersion, existing) {\n sessionId = sid;\n if (existing) {\n if (!existing.subItemStatuses) existing.subItemStatuses = {};\n currentFeedback = existing;\n } else {\n currentFeedback = {\n schemaVersion: 1,\n planTitle,\n planVersion,\n sessionId: sid,\n status: \"reviewing\",\n phaseStatuses: {},\n subItemStatuses: {},\n comments: [],\n updatedAt: /* @__PURE__ */ (/* @__PURE__ */ new Date()).toISOString()\n };\n }\n },\n addComment(section, quote, comment, phaseId) {\n if (!currentFeedback) return;\n const newComment = {\n id: genId(),\n section,\n quote,\n comment,\n phaseId,\n resolved: false,\n createdAt: /* @__PURE__ */ (/* @__PURE__ */ new Date()).toISOString()\n };\n currentFeedback.comments = [...currentFeedback.comments, newComment];\n currentFeedback.updatedAt = /* @__PURE__ */ (/* @__PURE__ */ new Date()).toISOString();\n debouncedSave();\n return newComment.id;\n },\n updateComment(id, comment) {\n if (!currentFeedback) return;\n currentFeedback.comments = currentFeedback.comments.map((c) => c.id === id ? { ...c, comment } : c);\n currentFeedback.updatedAt = /* @__PURE__ */ (/* @__PURE__ */ new Date()).toISOString();\n debouncedSave();\n },\n resolveComment(id) {\n if (!currentFeedback) return;\n currentFeedback.comments = currentFeedback.comments.map((c) => c.id === id ? { ...c, resolved: !c.resolved } : c);\n currentFeedback.updatedAt = /* @__PURE__ */ (/* @__PURE__ */ new Date()).toISOString();\n debouncedSave();\n },\n deleteComment(id) {\n if (!currentFeedback) return;\n currentFeedback.comments = currentFeedback.comments.filter((c) => c.id !== id);\n currentFeedback.updatedAt = /* @__PURE__ */ (/* @__PURE__ */ new Date()).toISOString();\n debouncedSave();\n },\n setPhaseStatus(phaseId, status, note) {\n if (!currentFeedback) return;\n currentFeedback.phaseStatuses = {\n ...currentFeedback.phaseStatuses,\n [phaseId]: { phaseId, status, note }\n };\n currentFeedback.updatedAt = /* @__PURE__ */ (/* @__PURE__ */ new Date()).toISOString();\n debouncedSave();\n },\n setSubItemStatus(subItemId, phaseId, status, allSubItemIds) {\n if (!currentFeedback) return;\n currentFeedback.subItemStatuses = {\n ...currentFeedback.subItemStatuses,\n [subItemId]: { subItemId, phaseId, status }\n };\n const statuses = allSubItemIds.map((id) => currentFeedback.subItemStatuses[id]?.status ?? \"pending\");\n const allSame = statuses.every((s) => s === statuses[0]);\n const aggregated = allSame ? statuses[0] : \"pending\";\n currentFeedback.phaseStatuses = {\n ...currentFeedback.phaseStatuses,\n [phaseId]: {\n phaseId,\n status: aggregated,\n note: currentFeedback.phaseStatuses[phaseId]?.note\n }\n };\n currentFeedback.updatedAt = /* @__PURE__ */ (/* @__PURE__ */ new Date()).toISOString();\n debouncedSave();\n },\n async submitFeedback(status) {\n if (!currentFeedback) return;\n currentFeedback.status = status;\n currentFeedback.submittedAt = /* @__PURE__ */ (/* @__PURE__ */ new Date()).toISOString();\n currentFeedback.updatedAt = /* @__PURE__ */ (/* @__PURE__ */ new Date()).toISOString();\n if (saveTimer) clearTimeout(saveTimer);\n await persistFeedback();\n if (status === \"approved\") {\n await fetch(`/api/sessions/${sessionId}/approve`, { method: \"POST\" });\n }\n }\n };\n}\nfunction getFeedbackStore() {\n if (!instance) instance = createFeedbackStore();\n return instance;\n}\nfunction PlanHeader($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { meta, status } = $$props;\n $$renderer2.push(`<header class=\"mb-6\"><div class=\"flex items-start justify-between\"><div><h1 class=\"text-2xl font-bold\">${escape_html(meta.title)}</h1> <p class=\"text-text-dim mt-1 text-sm\">${escape_html(meta.date)} `);\n if (meta.ticketRef) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`· <span class=\"text-accent\">${escape_html(meta.ticketRef)}</span>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--></p></div> <div class=\"flex items-center gap-2\"><span class=\"bg-surface2 rounded-full px-3 py-1 text-xs font-semibold text-text-dim\">v${escape_html(meta.version)}</span> <span${attr_class(`rounded-full px-3 py-1 text-xs font-semibold ${stringify(statusBadgeClass(status))}`)}>${escape_html(status)}</span></div></div> `);\n if (meta.markdownPath) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<p class=\"text-text-dim mt-2 text-xs\">Source: <code class=\"bg-surface2 text-accent rounded px-1 py-0.5 font-mono text-xs\">${escape_html(meta.markdownPath)}</code></p>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--></header>`);\n });\n}\nfunction PhaseTable($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { phases, phaseStatuses } = $$props;\n $$renderer2.push(`<div class=\"overflow-x-auto\"><table class=\"w-full text-sm\"><thead><tr><th class=\"bg-surface2 border-b border-border px-3 py-2 text-left font-semibold\">Phase</th><th class=\"bg-surface2 border-b border-border px-3 py-2 text-left font-semibold\">Focus</th><th class=\"bg-surface2 border-b border-border px-3 py-2 text-left font-semibold w-32\">Status</th></tr></thead><tbody><!--[-->`);\n const each_array = ensure_array_like(phases);\n for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n let phase = each_array[$$index];\n const status = phaseStatuses[phase.id]?.status ?? \"pending\";\n $$renderer2.push(`<tr${attr_class(\"hover:bg-surface transition-colors\", void 0, { \"opacity-50\": status === \"approved\" })}><td class=\"border-b border-border px-3 py-2 font-medium\">Phase ${escape_html(phase.number)}: ${escape_html(phase.name)}</td><td class=\"text-text-dim border-b border-border px-3 py-2\">${escape_html(phase.overview.length > 100 ? phase.overview.slice(0, 100) + \"...\" : phase.overview)}</td><td class=\"border-b border-border px-3 py-2\"><button${attr_class(`inline-block cursor-pointer rounded-full px-2 py-0.5 text-xs font-semibold ${stringify(statusBadgeClass(status))}`)}>${escape_html(statusLabel(status))}</button></td></tr>`);\n }\n $$renderer2.push(`<!--]--></tbody></table></div>`);\n });\n}\nfunction ChangeBlock($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { change, commentLabel } = $$props;\n $$renderer2.push(`<div class=\"mb-3\" data-commentable=\"\" tabindex=\"0\"${attr(\n \"data-comment-label\",\n // Reset any previous highlighting\n commentLabel ?? change.componentName\n )}><h4 class=\"text-text-dim mb-1 text-sm font-medium\">${escape_html(change.componentName)}</h4> <p class=\"mb-1 text-sm\"><strong>File:</strong> <code class=\"bg-surface2 text-accent rounded px-1 py-0.5 font-mono text-xs\">${escape_html(change.filePath)}</code></p> <p class=\"text-text-dim text-sm\">${escape_html(change.description)}</p> `);\n if (change.codeSnippet) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<pre class=\"bg-surface border-border mt-2 overflow-x-auto rounded-md border p-3 text-xs\"><code${attr_class(clsx(change.codeLanguage ? `language-${change.codeLanguage}` : \"\"))}>${escape_html(change.codeSnippet)}</code></pre>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--></div>`);\n });\n}\nfunction MarkdownBlock($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { content, sectionPrefix } = $$props;\n let html$1 = derived(() => marked.parse(content, { gfm: true, breaks: false }));\n $$renderer2.push(`<div class=\"markdown-content text-text-dim text-sm leading-relaxed svelte-19d3ioy\">${html(html$1())}</div>`);\n });\n}\nfunction PhaseStatusControl($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { status, onSetStatus } = $$props;\n const STATE_COLORS = {\n \"pending\": \"bg-accent/15 text-accent border-accent/30\",\n \"approved\": \"bg-green/15 text-green border-green/30\",\n \"needs-work\": \"bg-orange/15 text-orange border-orange/30\"\n };\n const states = Object.keys(STATUS_LABELS).map((value) => ({\n value,\n label: STATUS_LABELS[value],\n color: STATE_COLORS[value]\n }));\n $$renderer2.push(`<div class=\"flex gap-1\" role=\"radiogroup\" aria-label=\"Phase status\"><!--[-->`);\n const each_array = ensure_array_like(states);\n for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n let s = each_array[$$index];\n $$renderer2.push(`<button${attr_class(`cursor-pointer rounded-full border px-2 py-0.5 text-xs font-medium transition-all ${stringify(status === s.value ? s.color : \"border-transparent text-text-dim hover:bg-surface2\")}`)} role=\"radio\"${attr(\"aria-checked\", status === s.value)}>${escape_html(s.label)}</button>`);\n }\n $$renderer2.push(`<!--]--></div>`);\n });\n}\nfunction PhaseCard($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let {\n phase,\n phaseStatus,\n onSetStatus,\n subItemStatuses = {},\n onSetSubItemStatus\n } = $$props;\n let expanded = true;\n let phaseLabel = derived(() => `Phase ${phase.number}`);\n $$renderer2.push(`<section${attr(\"data-section\", `Phase ${stringify(phase.number)}: ${stringify(phase.name)}`)} data-commentable=\"\" tabindex=\"0\"${attr(\"data-comment-label\", `Phase ${stringify(phase.number)}: ${stringify(phase.name)}`)} class=\"mt-6\"><div class=\"flex items-center gap-3\"><button class=\"text-accent flex-1 cursor-pointer border-b border-border pb-2 text-left text-xl font-semibold\"${attr(\"aria-expanded\", expanded)}${attr(\"aria-controls\", `phase-content-${stringify(phase.id)}`)}><span${attr_class(\"mr-2 inline-block transition-transform\", void 0, { \"rotate-90\": expanded })}>▶</span> Phase ${escape_html(phase.number)}: ${escape_html(phase.name)}</button> `);\n PhaseStatusControl($$renderer2, { status: phaseStatus?.status ?? \"pending\", onSetStatus });\n $$renderer2.push(`<!----></div> `);\n {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<div${attr(\"id\", `phase-content-${stringify(phase.id)}`)} class=\"mt-4 space-y-4\">`);\n if (phase.content) {\n $$renderer2.push(\"<!--[-->\");\n MarkdownBlock($$renderer2, {\n content: phase.content,\n sectionPrefix: `${stringify(phaseLabel())} > Content`\n });\n } else if (phase.overview) {\n $$renderer2.push(\"<!--[1-->\");\n MarkdownBlock($$renderer2, {\n content: phase.overview,\n sectionPrefix: `${stringify(phaseLabel())} > Overview`\n });\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> `);\n if (phase.subItems.length > 0) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<div class=\"mt-4 space-y-3\"><!--[-->`);\n const each_array = ensure_array_like(phase.subItems);\n for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n let subItem = each_array[$$index];\n $$renderer2.push(`<div class=\"bg-surface border-border rounded-lg border p-4\" data-commentable=\"\" tabindex=\"0\"${attr(\"data-comment-label\", `${stringify(phaseLabel())} > ${stringify(phase.number)}${stringify(subItem.letter)}. ${stringify(subItem.name)}`)}><div class=\"flex items-center justify-between gap-3\"><h4 class=\"text-sm font-semibold\">${escape_html(phase.number)}${escape_html(subItem.letter)}. ${escape_html(subItem.name)}</h4> `);\n PhaseStatusControl($$renderer2, {\n status: subItemStatuses[subItem.id]?.status ?? \"pending\",\n onSetStatus: (status) => onSetSubItemStatus?.(subItem.id, status)\n });\n $$renderer2.push(`<!----></div> `);\n if (subItem.content) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<div class=\"mt-2\">`);\n MarkdownBlock($$renderer2, {\n content: subItem.content,\n sectionPrefix: `${stringify(phaseLabel())} > ${stringify(subItem.name)}`\n });\n $$renderer2.push(`<!----></div>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--></div>`);\n }\n $$renderer2.push(`<!--]--></div>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> `);\n if (phase.changes.length > 0) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<h3 class=\"mt-4 mb-2 text-base font-semibold\">Changes Required</h3> <!--[-->`);\n const each_array_1 = ensure_array_like(phase.changes);\n for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {\n let change = each_array_1[$$index_1];\n ChangeBlock($$renderer2, {\n change,\n commentLabel: `${stringify(phaseLabel())} > Changes > ${stringify(change.componentName)}`\n });\n }\n $$renderer2.push(`<!--]-->`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> <div class=\"mt-4\"><h3 class=\"mb-2 text-base font-semibold\">Success Criteria</h3> `);\n if (phase.successCriteria.automated.length > 0) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<h4 class=\"text-text-dim mt-3 mb-1 text-sm font-medium\">Automated Verification</h4> <ul class=\"space-y-1.5 pl-1\"><!--[-->`);\n const each_array_2 = ensure_array_like(phase.successCriteria.automated);\n for (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {\n let criterion = each_array_2[$$index_2];\n $$renderer2.push(`<li class=\"text-text-dim flex items-start gap-2 text-sm\" data-commentable=\"\" tabindex=\"0\"${attr(\"data-comment-label\", `${stringify(phaseLabel())} > Automated > ${stringify(criterion.text.slice(0, 40))}`)}><input type=\"checkbox\" class=\"mt-0.5 accent-green\"/> <span>`);\n if (criterion.command) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<code class=\"bg-surface2 rounded px-1 py-0.5 font-mono text-xs\">${escape_html(criterion.command)}</code> —`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> ${escape_html(criterion.text)}</span></li>`);\n }\n $$renderer2.push(`<!--]--></ul>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> `);\n if (phase.successCriteria.manual.length > 0) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<h4 class=\"text-text-dim mt-3 mb-1 text-sm font-medium\">Manual Verification</h4> <ul class=\"space-y-1.5 pl-1\"><!--[-->`);\n const each_array_3 = ensure_array_like(phase.successCriteria.manual);\n for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {\n let criterion = each_array_3[$$index_3];\n $$renderer2.push(`<li class=\"text-text-dim flex items-start gap-2 text-sm\" data-commentable=\"\" tabindex=\"0\"${attr(\"data-comment-label\", `${stringify(phaseLabel())} > Manual > ${stringify(criterion.text.slice(0, 40))}`)}><input type=\"checkbox\" class=\"mt-0.5 accent-green\"/> <span>${escape_html(criterion.text)}</span></li>`);\n }\n $$renderer2.push(`<!--]--></ul>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--></div></div>`);\n }\n $$renderer2.push(`<!--]--> <hr class=\"border-border mt-6\"/></section>`);\n });\n}\nfunction MermaidDiagram($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n $$renderer2.push(`<div class=\"bg-surface border-border overflow-x-auto rounded-lg border p-6\"><div class=\"flex justify-center\">`);\n {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<p class=\"text-text-dim text-sm\">Loading diagram...</p>`);\n }\n $$renderer2.push(`<!--]--></div></div>`);\n });\n}\nfunction ProgressBar($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { phases, phaseStatuses } = $$props;\n let approvedCount = derived(() => phases.filter((p) => phaseStatuses[p.id]?.status === \"approved\").length);\n let progress = derived(() => phases.length > 0 ? approvedCount() / phases.length * 100 : 0);\n $$renderer2.push(`<div class=\"fixed top-0 right-0 left-0 z-50 h-[3px] bg-surface2\"><div class=\"h-full transition-all duration-400 ease-out\"${attr_style(`width: ${stringify(progress())}%; background: linear-gradient(90deg, var(--color-green), #2ea043);`)}></div></div>`);\n });\n}\nfunction VersionSelector($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { versions, currentVersion, onSelectVersion } = $$props;\n if (versions.length > 0) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<div class=\"flex items-center gap-3\"><div class=\"flex items-center gap-2\"><label class=\"text-text-dim text-xs\" for=\"version-select\">Version:</label> `);\n $$renderer2.select(\n {\n id: \"version-select\",\n class: \"bg-surface2 border-border rounded px-2 py-1 text-xs text-text\",\n value: currentVersion,\n onchange: (e) => onSelectVersion(parseInt(e.currentTarget.value, 10))\n },\n ($$renderer3) => {\n $$renderer3.option({ value: currentVersion }, ($$renderer4) => {\n $$renderer4.push(`v${escape_html(currentVersion)} (current)`);\n });\n $$renderer3.push(`<!--[-->`);\n const each_array = ensure_array_like([...versions].reverse());\n for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n let v = each_array[$$index];\n if (v !== currentVersion) {\n $$renderer3.push(\"<!--[-->\");\n $$renderer3.option({ value: v }, ($$renderer4) => {\n $$renderer4.push(`v${escape_html(v)}`);\n });\n } else {\n $$renderer3.push(\"<!--[!-->\");\n }\n $$renderer3.push(`<!--]-->`);\n }\n $$renderer3.push(`<!--]-->`);\n }\n );\n $$renderer2.push(`</div> <button class=\"text-text-dim hover:text-accent rounded px-2 py-1 text-xs transition-colors\">${escape_html(\"Compare versions\")}</button> `);\n {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--></div>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]-->`);\n });\n}\nfunction FeedbackItem($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { comment } = $$props;\n $$renderer2.push(`<article${attr_class(`rounded-lg border p-3 ${stringify(\n // Auto-open edit mode for empty comments (just added)\n comment.resolved ? \"border-slate-700 bg-slate-800/40 opacity-60\" : \"border-slate-600/40 bg-slate-800/90\"\n )}`)}><div class=\"mb-1 text-[0.7rem] text-blue-300\">${escape_html(comment.section)}</div> `);\n if (comment.quote) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<p class=\"mb-2 rounded-md border border-slate-700 bg-[#0f172a] px-2 py-1.5 text-xs italic text-slate-300\">\"${escape_html(comment.quote.length > 120 ? comment.quote.slice(0, 120) + \"...\" : comment.quote)}\"</p>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> `);\n {\n $$renderer2.push(\"<!--[!-->\");\n $$renderer2.push(`<p class=\"text-xs text-slate-300\">${escape_html(comment.comment)}</p> <div class=\"mt-1.5 flex gap-1.5\"><button class=\"rounded-md bg-blue-700 px-2 py-1 text-xs text-white\">Edit</button> <button${attr_class(`rounded-md px-2 py-1 text-xs ${stringify(comment.resolved ? \"bg-green-800 text-green-200\" : \"bg-slate-700 text-slate-300\")}`)}>${escape_html(comment.resolved ? \"Resolved\" : \"Resolve\")}</button> <button class=\"rounded-md bg-red-900 px-2 py-1 text-xs text-red-200\">Delete</button></div>`);\n }\n $$renderer2.push(`<!--]--></article>`);\n });\n}\nfunction FeedbackPanel($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let {\n comments\n } = $$props;\n let unresolvedCount = derived(() => comments.filter((c) => !c.resolved).length);\n $$renderer2.push(`<aside data-feedback-panel=\"\" role=\"complementary\" aria-label=\"Review comments\" class=\"fixed top-2 right-4 z-40 flex w-80 max-h-[calc(100vh-1rem)] flex-col rounded-xl bg-[#0f172a] shadow-xl shadow-black/35\"><header class=\"border-b border-white/10 px-4 py-3\"><h3 class=\"flex items-center gap-2 text-base font-semibold text-slate-200\">Review <span class=\"bg-accent/15 text-accent inline-block rounded-full px-2 py-0.5 text-xs font-semibold\">${escape_html(unresolvedCount())}</span></h3> <p class=\"mt-1 text-xs text-slate-400\">Hover over plan elements to comment. Click Submit when done.</p> <button class=\"mt-2 w-full cursor-pointer rounded-lg bg-blue-600 px-3 py-1.5 text-xs font-medium text-white hover:bg-blue-500\">Add comment</button></header> <div class=\"flex-1 space-y-2 overflow-y-auto p-3\">`);\n if (comments.length === 0) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<div class=\"rounded-lg border border-dashed border-slate-600 p-3 text-sm text-slate-400\">No comments yet. Hover and click on any plan element to add a comment.</div>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n $$renderer2.push(`<!--[-->`);\n const each_array = ensure_array_like(comments);\n for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n let comment = each_array[$$index];\n FeedbackItem($$renderer2, {\n comment\n });\n }\n $$renderer2.push(`<!--]-->`);\n }\n $$renderer2.push(`<!--]--></div></aside>`);\n });\n}\nfunction HoverToolbar($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]-->`);\n });\n}\nfunction ApprovalBar($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { status, commentCount, computedStatus } = $$props;\n $$renderer2.push(`<div role=\"toolbar\" aria-label=\"Review actions\" class=\"fixed right-0 bottom-0 left-0 z-40 border-t border-border bg-surface px-6 py-3\"><div class=\"mx-auto flex max-w-5xl items-center justify-between pr-80\"><div class=\"text-text-dim text-sm\">`);\n if (commentCount > 0) {\n $$renderer2.push(\"<!--[1-->\");\n $$renderer2.push(`<span class=\"text-orange\">${escape_html(commentCount)} unresolved comment${escape_html(commentCount !== 1 ? \"s\" : \"\")}</span> <span class=\"ml-2\">— will submit as <span class=\"font-semibold text-orange\">needs-work</span></span>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n $$renderer2.push(`<span class=\"text-text-dim\">No unresolved comments — will submit as <span class=\"font-semibold text-green\">approved</span></span>`);\n }\n $$renderer2.push(`<!--]--></div> <div class=\"flex gap-3\">`);\n if (status !== \"approved\" && status !== \"needs-work\") {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<button${attr_class(`cursor-pointer rounded-lg px-5 py-2 text-sm font-semibold transition-colors ${stringify(computedStatus === \"approved\" ? \"bg-green text-white hover:brightness-110\" : \"bg-orange/15 text-orange hover:bg-orange/25\")}`)} aria-label=\"Submit feedback\">Submit Feedback</button>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n $$renderer2.push(`<span${attr_class(`rounded-lg px-5 py-2 text-sm font-semibold ${stringify(status === \"approved\" ? \"bg-green/15 text-green\" : \"bg-orange/15 text-orange\")}`)}>${escape_html(status === \"approved\" ? \"Approved ✓\" : \"Changes requested\")}</span>`);\n }\n $$renderer2.push(`<!--]--></div></div></div>`);\n });\n}\nfunction _page($$renderer, $$props) {\n $$renderer.component(($$renderer2) => {\n let { data } = $$props;\n const planStore = getPlanStore();\n const feedbackStore = getFeedbackStore();\n async function handleSelectVersion(version) {\n if (!/* ignore */\n /* ignore */\n // Track the version we initialized feedback for\n // Initialize stores from server data\n // Only restore feedback if it belongs to this plan version; otherwise start fresh\n // Reset feedback when plan version changes via SSE (new version = fresh review)\n plan()) return;\n if (version === plan().meta.version) return;\n try {\n const res = await fetch(`/api/sessions/${data.sessionId}/versions/${version}`);\n if (res.ok) {\n const oldPlan = await res.json();\n planStore.set(oldPlan);\n }\n } catch {\n }\n }\n let plan = derived(() => planStore.plan);\n if (plan()) {\n $$renderer2.push(\"<!--[-->\");\n const unresolvedCount = feedbackStore.comments.filter((c) => !c.resolved).length;\n const computedStatus = unresolvedCount > 0 ? \"needs-work\" : \"approved\";\n ProgressBar($$renderer2, {\n phases: plan().phases,\n phaseStatuses: feedbackStore.phaseStatuses\n });\n $$renderer2.push(`<!----> <div role=\"region\" aria-label=\"Plan content\" class=\"min-h-screen pb-20 pr-[22rem] pl-8 pt-4\">`);\n PlanHeader($$renderer2, { meta: plan().meta, status: feedbackStore.status });\n $$renderer2.push(`<!----> <div class=\"mt-4 mb-2\">`);\n VersionSelector($$renderer2, {\n versions: data.versions,\n currentVersion: plan().meta.version,\n onSelectVersion: handleSelectVersion\n });\n $$renderer2.push(`<!----></div> `);\n {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> <section data-section=\"Overview\" data-commentable=\"\" tabindex=\"0\" data-comment-label=\"Overview\"><h2 class=\"text-accent mt-8 mb-4 border-b border-border pb-2 text-xl font-semibold\">Overview</h2> `);\n MarkdownBlock($$renderer2, { content: plan().overview, sectionPrefix: \"Overview\" });\n $$renderer2.push(`<!----></section> <!--[-->`);\n const each_array = ensure_array_like(plan().diagrams);\n for (let $$index = 0, $$length = each_array.length; $$index < $$length; $$index++) {\n let diagram = each_array[$$index];\n $$renderer2.push(`<section data-section=\"Diagrams\" data-commentable=\"\" tabindex=\"0\"${attr(\"data-comment-label\", `Diagram: ${stringify(diagram.title)}`)}><h3 class=\"mt-6 mb-3 text-lg font-semibold\">${escape_html(diagram.title)}</h3> `);\n MermaidDiagram($$renderer2, { code: diagram.mermaidCode, id: diagram.id });\n $$renderer2.push(`<!----></section>`);\n }\n $$renderer2.push(`<!--]--> `);\n if (plan().currentState) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<section data-section=\"Current State\" data-commentable=\"\" tabindex=\"0\" data-comment-label=\"Current State\"><h2 class=\"text-accent mt-8 mb-4 border-b border-border pb-2 text-xl font-semibold\">Current State</h2> `);\n MarkdownBlock($$renderer2, { content: plan().currentState, sectionPrefix: \"Current State\" });\n $$renderer2.push(`<!----> `);\n if (plan().keyDiscoveries.length > 0) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<h3 class=\"mt-6 mb-3 text-lg font-semibold\">Key Discoveries</h3> <ul class=\"text-text-dim space-y-1.5 pl-5 text-sm\"><!--[-->`);\n const each_array_1 = ensure_array_like(plan().keyDiscoveries);\n for (let $$index_1 = 0, $$length = each_array_1.length; $$index_1 < $$length; $$index_1++) {\n let discovery = each_array_1[$$index_1];\n $$renderer2.push(`<li data-commentable=\"\" tabindex=\"0\"${attr(\"data-comment-label\", `Key Discovery: ${stringify(discovery.text.slice(0, 50))}`)}>${escape_html(discovery.text)} `);\n if (discovery.codeRef) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<code class=\"bg-surface2 text-accent rounded px-1 py-0.5 font-mono text-xs\">${escape_html(discovery.codeRef)}</code>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--></li>`);\n }\n $$renderer2.push(`<!--]--></ul>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--></section>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> `);\n if (plan().scopeExclusions.length > 0) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<section data-section=\"Scope Exclusions\" data-commentable=\"\" tabindex=\"0\" data-comment-label=\"Scope Exclusions\"><h2 class=\"text-accent mt-8 mb-4 border-b border-border pb-2 text-xl font-semibold\">What We're NOT Doing</h2> <div class=\"grid grid-cols-2 gap-3\"><!--[-->`);\n const each_array_2 = ensure_array_like(plan().scopeExclusions);\n for (let $$index_2 = 0, $$length = each_array_2.length; $$index_2 < $$length; $$index_2++) {\n let exclusion = each_array_2[$$index_2];\n $$renderer2.push(`<div class=\"bg-surface border-border rounded-lg border border-l-3 border-l-red p-4\" data-commentable=\"\" tabindex=\"0\"${attr(\"data-comment-label\", `Scope > ${stringify(exclusion.title)}`)}><div class=\"text-red text-xs font-semibold uppercase tracking-wide\">Out of scope</div> <h4 class=\"mt-1 mb-1 text-sm font-semibold\">${escape_html(exclusion.title)}</h4> <p class=\"text-text-dim text-xs\">${escape_html(exclusion.reason)}</p></div>`);\n }\n $$renderer2.push(`<!--]--></div></section>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> `);\n if (plan().implementationApproach) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<section data-section=\"Implementation Approach\" data-commentable=\"\" tabindex=\"0\" data-comment-label=\"Implementation Approach\"><h2 class=\"text-accent mt-8 mb-4 border-b border-border pb-2 text-xl font-semibold\">Implementation Approach</h2> `);\n MarkdownBlock($$renderer2, {\n content: plan().implementationApproach,\n sectionPrefix: \"Implementation Approach\"\n });\n $$renderer2.push(`<!----></section>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> <section data-section=\"Phase Summary\"><h2 class=\"text-accent mt-8 mb-4 border-b border-border pb-2 text-xl font-semibold\">Phase Summary</h2> `);\n PhaseTable($$renderer2, {\n phases: plan().phases,\n phaseStatuses: feedbackStore.phaseStatuses\n });\n $$renderer2.push(`<!----></section> <!--[-->`);\n const each_array_3 = ensure_array_like(plan().phases);\n for (let $$index_3 = 0, $$length = each_array_3.length; $$index_3 < $$length; $$index_3++) {\n let phase = each_array_3[$$index_3];\n PhaseCard($$renderer2, {\n phase,\n phaseStatus: feedbackStore.phaseStatuses[phase.id],\n onSetStatus: (status, note) => feedbackStore.setPhaseStatus(phase.id, status, note),\n subItemStatuses: feedbackStore.subItemStatuses,\n onSetSubItemStatus: (subItemId, status) => feedbackStore.setSubItemStatus(subItemId, phase.id, status, phase.subItems.map((si) => si.id))\n });\n }\n $$renderer2.push(`<!--]--> `);\n if (plan().testingStrategy) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<section data-section=\"Testing Strategy\" data-commentable=\"\" tabindex=\"0\" data-comment-label=\"Testing Strategy\"><h2 class=\"text-accent mt-8 mb-4 border-b border-border pb-2 text-xl font-semibold\">Testing Strategy</h2> `);\n if (plan().testingStrategy.unit.length > 0) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<h3 class=\"mt-4 mb-2 text-base font-semibold\">Unit Tests</h3> <ul class=\"text-text-dim space-y-1 pl-5 text-sm\"><!--[-->`);\n const each_array_4 = ensure_array_like(plan().testingStrategy.unit);\n for (let $$index_4 = 0, $$length = each_array_4.length; $$index_4 < $$length; $$index_4++) {\n let item = each_array_4[$$index_4];\n $$renderer2.push(`<li data-commentable=\"\" tabindex=\"0\"${attr(\"data-comment-label\", `Testing > Unit > ${stringify(item.slice(0, 40))}`)}>${escape_html(item)}</li>`);\n }\n $$renderer2.push(`<!--]--></ul>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> `);\n if (plan().testingStrategy.integration.length > 0) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<h3 class=\"mt-4 mb-2 text-base font-semibold\">Integration Tests</h3> <ul class=\"text-text-dim space-y-1 pl-5 text-sm\"><!--[-->`);\n const each_array_5 = ensure_array_like(plan().testingStrategy.integration);\n for (let $$index_5 = 0, $$length = each_array_5.length; $$index_5 < $$length; $$index_5++) {\n let item = each_array_5[$$index_5];\n $$renderer2.push(`<li data-commentable=\"\" tabindex=\"0\"${attr(\"data-comment-label\", `Testing > Integration > ${stringify(item.slice(0, 40))}`)}>${escape_html(item)}</li>`);\n }\n $$renderer2.push(`<!--]--></ul>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> `);\n if (plan().testingStrategy.manual.length > 0) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<h3 class=\"mt-4 mb-2 text-base font-semibold\">Manual Tests</h3> <ul class=\"text-text-dim space-y-1 pl-5 text-sm\"><!--[-->`);\n const each_array_6 = ensure_array_like(plan().testingStrategy.manual);\n for (let $$index_6 = 0, $$length = each_array_6.length; $$index_6 < $$length; $$index_6++) {\n let item = each_array_6[$$index_6];\n $$renderer2.push(`<li data-commentable=\"\" tabindex=\"0\"${attr(\"data-comment-label\", `Testing > Manual > ${stringify(item.slice(0, 40))}`)}>${escape_html(item)}</li>`);\n }\n $$renderer2.push(`<!--]--></ul>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--></section>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> `);\n if (plan().references.length > 0) {\n $$renderer2.push(\"<!--[-->\");\n $$renderer2.push(`<section data-section=\"References\" data-commentable=\"\" tabindex=\"0\" data-comment-label=\"References\"><h2 class=\"text-accent mt-8 mb-4 border-b border-border pb-2 text-xl font-semibold\">References</h2> <ul class=\"text-text-dim space-y-1 pl-5 text-sm\"><!--[-->`);\n const each_array_7 = ensure_array_like(plan().references);\n for (let $$index_7 = 0, $$length = each_array_7.length; $$index_7 < $$length; $$index_7++) {\n let ref = each_array_7[$$index_7];\n $$renderer2.push(`<li data-commentable=\"\" tabindex=\"0\"${attr(\"data-comment-label\", `Reference: ${stringify(ref.slice(0, 50))}`)}>${escape_html(ref)}</li>`);\n }\n $$renderer2.push(`<!--]--></ul></section>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--></div> `);\n {\n $$renderer2.push(\"<!--[!-->\");\n }\n $$renderer2.push(`<!--]--> `);\n HoverToolbar($$renderer2);\n $$renderer2.push(`<!----> `);\n FeedbackPanel($$renderer2, {\n comments: feedbackStore.comments\n });\n $$renderer2.push(`<!----> `);\n ApprovalBar($$renderer2, {\n status: feedbackStore.status,\n commentCount: unresolvedCount,\n computedStatus\n });\n $$renderer2.push(`<!----> <div class=\"sr-only\" aria-live=\"polite\"></div>`);\n } else {\n $$renderer2.push(\"<!--[!-->\");\n $$renderer2.push(`<div class=\"flex min-h-screen items-center justify-center\"><div class=\"text-center\"><p class=\"text-text-dim mb-2 text-lg\">Waiting for plan data...</p> <p class=\"text-text-dim text-sm\">Claude Code will write <code class=\"bg-surface2 text-accent rounded px-1 py-0.5 font-mono text-xs\">plan.json</code> to this session.</p> <div class=\"text-text-dim mt-4 animate-pulse text-sm\">Listening for updates via SSE</div></div></div>`);\n }\n $$renderer2.push(`<!--]-->`);\n });\n}\nexport {\n _page as default\n};\n"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.server-CeNxBnIX.js","sources":["../../../.svelte-kit/adapter-node/entries/hooks.server.js"],"sourcesContent":["import { watch } from \"chokidar\";\nimport { readFileSync } from \"node:fs\";\nimport { b as broadcast } from \"../chunks/sse-manager.js\";\nimport { g as getBaseDir, h as snapshotVersion } from \"../chunks/session-manager.js\";\nlet watcher = null;\nfunction startWatcher() {\n if (watcher) return;\n watcher = watch(getBaseDir(), {\n ignoreInitial: true,\n depth: 2,\n awaitWriteFinish: {\n stabilityThreshold: 300,\n pollInterval: 100\n }\n });\n function handleFileChange(filePath) {\n if (filePath.endsWith(\"/plan.json\")) {\n const parts = filePath.split(\"/\");\n const planIdx = parts.lastIndexOf(\"plan.json\");\n if (planIdx < 1) return;\n const sessionId = parts[planIdx - 1];\n try {\n const content = readFileSync(filePath, \"utf-8\");\n const plan = JSON.parse(content);\n snapshotVersion(sessionId, plan);\n broadcast(sessionId, \"plan-updated\", plan);\n } catch (err) {\n console.error(\"[file-watcher] Error processing plan change:\", err);\n }\n } else if (filePath.endsWith(\"/meta.json\")) {\n broadcast(\"*\", \"sessions-updated\", {});\n }\n }\n watcher.on(\"change\", handleFileChange);\n watcher.on(\"add\", handleFileChange);\n console.log(\"[file-watcher] Watching\", getBaseDir());\n}\nstartWatcher();\n"],"names":[],"mappings":";;;;;;;AAIA,IAAI,OAAO,GAAG,IAAI;AAClB,SAAS,YAAY,GAAG;AACxB,EAAE,IAAI,OAAO,EAAE;AACf,EAAE,OAAO,GAAG,KAAK,CAAC,UAAU,EAAE,EAAE;AAChC,IAAI,aAAa,EAAE,IAAI;AACvB,IAAI,KAAK,EAAE,CAAC;AACZ,IAAI,gBAAgB,EAAE;AACtB,MAAM,kBAAkB,EAAE,GAAG;AAC7B,MAAM,YAAY,EAAE;AACpB;AACA,GAAG,CAAC;AACJ,EAAE,SAAS,gBAAgB,CAAC,QAAQ,EAAE;AACtC,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AACzC,MAAM,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC;AACvC,MAAM,MAAM,OAAO,GAAG,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC;AACpD,MAAM,IAAI,OAAO,GAAG,CAAC,EAAE;AACvB,MAAM,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC;AAC1C,MAAM,IAAI;AACV,QAAQ,MAAM,OAAO,GAAG,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC;AACvD,QAAQ,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;AACxC,QAAQ,eAAe,CAAC,SAAS,EAAE,IAAI,CAAC;AACxC,QAAQ,SAAS,CAAC,SAAS,EAAE,cAAc,EAAE,IAAI,CAAC;AAClD,MAAM,CAAC,CAAC,OAAO,GAAG,EAAE;AACpB,QAAQ,OAAO,CAAC,KAAK,CAAC,8CAA8C,EAAE,GAAG,CAAC;AAC1E,MAAM;AACN,IAAI,CAAC,MAAM,IAAI,QAAQ,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AAChD,MAAM,SAAS,CAAC,GAAG,EAAE,kBAAkB,EAAE,EAAE,CAAC;AAC5C,IAAI;AACJ,EAAE;AACF,EAAE,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,gBAAgB,CAAC;AACxC,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,gBAAgB,CAAC;AACrC,EAAE,OAAO,CAAC,GAAG,CAAC,yBAAyB,EAAE,UAAU,EAAE,CAAC;AACtD;AACA,YAAY,EAAE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"sse-manager-DpUiK2jt.js","sources":["../../../.svelte-kit/adapter-node/chunks/sse-manager.js"],"sourcesContent":["const clients = /* @__PURE__ */ new Map();\nfunction addClient(sessionId, controller) {\n const client = { controller, sessionId };\n if (!clients.has(sessionId)) {\n clients.set(sessionId, /* @__PURE__ */ new Set());\n }\n clients.get(sessionId).add(client);\n return client;\n}\nfunction removeClient(client) {\n const sessionClients = clients.get(client.sessionId);\n if (sessionClients) {\n sessionClients.delete(client);\n if (sessionClients.size === 0) {\n clients.delete(client.sessionId);\n }\n }\n}\nfunction sendToClients(clientSet, encoded) {\n if (!clientSet) return;\n for (const client of clientSet) {\n try {\n client.controller.enqueue(encoded);\n } catch {\n clientSet.delete(client);\n }\n }\n}\nfunction broadcast(sessionId, event, data) {\n const message = `event: ${event}\ndata: ${JSON.stringify(data)}\n\n`;\n const encoder = new TextEncoder();\n const encoded = encoder.encode(message);\n sendToClients(clients.get(sessionId), encoded);\n if (sessionId !== \"*\") {\n sendToClients(clients.get(\"*\"), encoded);\n }\n}\nexport {\n addClient as a,\n broadcast as b,\n removeClient as r\n};\n"],"names":[],"mappings":"AAAA,MAAM,OAAO,mBAAmB,IAAI,GAAG,EAAE;AACzC,SAAS,SAAS,CAAC,SAAS,EAAE,UAAU,EAAE;AAC1C,EAAE,MAAM,MAAM,GAAG,EAAE,UAAU,EAAE,SAAS,EAAE;AAC1C,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE;AAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,kBAAkB,IAAI,GAAG,EAAE,CAAC;AACrD,EAAE;AACF,EAAE,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;AACpC,EAAE,OAAO,MAAM;AACf;AACA,SAAS,YAAY,CAAC,MAAM,EAAE;AAC9B,EAAE,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC;AACtD,EAAE,IAAI,cAAc,EAAE;AACtB,IAAI,cAAc,CAAC,MAAM,CAAC,MAAM,CAAC;AACjC,IAAI,IAAI,cAAc,CAAC,IAAI,KAAK,CAAC,EAAE;AACnC,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC;AACtC,IAAI;AACJ,EAAE;AACF;AACA,SAAS,aAAa,CAAC,SAAS,EAAE,OAAO,EAAE;AAC3C,EAAE,IAAI,CAAC,SAAS,EAAE;AAClB,EAAE,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE;AAClC,IAAI,IAAI;AACR,MAAM,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC;AACxC,IAAI,CAAC,CAAC,MAAM;AACZ,MAAM,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC;AAC9B,IAAI;AACJ,EAAE;AACF;AACA,SAAS,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE;AAC3C,EAAE,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,KAAK;AACjC,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;;AAE5B,CAAC;AACD,EAAE,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE;AACnC,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC;AACzC,EAAE,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;AAChD,EAAE,IAAI,SAAS,KAAK,GAAG,EAAE;AACzB,IAAI,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC;AAC5C,EAAE;AACF;;;;"}