quadwork 1.6.3 → 1.8.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 (99) hide show
  1. package/README.md +6 -1
  2. package/bin/quadwork.js +42 -59
  3. package/bridges/discord/__pycache__/discord_bridge.cpython-314.pyc +0 -0
  4. package/bridges/discord/discord_bridge.py +63 -18
  5. package/out/404.html +1 -1
  6. package/out/__next.__PAGE__.txt +3 -3
  7. package/out/__next._full.txt +14 -14
  8. package/out/__next._head.txt +4 -4
  9. package/out/__next._index.txt +7 -7
  10. package/out/__next._tree.txt +2 -2
  11. package/out/_next/static/KleEGCyPe1ovSiWKr9GnB/_ssgManifest.js +1 -0
  12. package/out/_next/static/chunks/{0ftcj9qreh~p4.js → 0_y-97xg1l.bn.js} +13 -13
  13. package/out/_next/static/chunks/{0-jj8tpbs48x4.js → 0cploqtj5jy4z.js} +1 -1
  14. package/out/_next/static/chunks/0koy9hplvko3w.css +2 -0
  15. package/out/_next/static/chunks/14zyqqpdz2x7j.js +1 -0
  16. package/out/_next/static/chunks/{0o3_.p5ivp5sp.js → 152f2hu-ivy6f.js} +1 -1
  17. package/out/_next/static/media/favicon.05o2q2p4kvnq_.ico +0 -0
  18. package/out/_not-found/__next._full.txt +13 -13
  19. package/out/_not-found/__next._head.txt +4 -4
  20. package/out/_not-found/__next._index.txt +7 -7
  21. package/out/_not-found/__next._not-found.__PAGE__.txt +2 -2
  22. package/out/_not-found/__next._not-found.txt +3 -3
  23. package/out/_not-found/__next._tree.txt +2 -2
  24. package/out/_not-found.html +1 -1
  25. package/out/_not-found.txt +13 -13
  26. package/out/app-shell/__next._full.txt +13 -13
  27. package/out/app-shell/__next._head.txt +4 -4
  28. package/out/app-shell/__next._index.txt +7 -7
  29. package/out/app-shell/__next._tree.txt +2 -2
  30. package/out/app-shell/__next.app-shell.__PAGE__.txt +2 -2
  31. package/out/app-shell/__next.app-shell.txt +3 -3
  32. package/out/app-shell.html +1 -1
  33. package/out/app-shell.txt +13 -13
  34. package/out/favicon.ico +0 -0
  35. package/out/icon.png +0 -0
  36. package/out/icon.svg +11 -4
  37. package/out/index.html +1 -1
  38. package/out/index.txt +14 -14
  39. package/out/project/_/__next._full.txt +14 -14
  40. package/out/project/_/__next._head.txt +4 -4
  41. package/out/project/_/__next._index.txt +7 -7
  42. package/out/project/_/__next._tree.txt +2 -2
  43. package/out/project/_/__next.project.$d$id.__PAGE__.txt +3 -3
  44. package/out/project/_/__next.project.$d$id.txt +3 -3
  45. package/out/project/_/__next.project.txt +3 -3
  46. package/out/project/_/queue/__next._full.txt +14 -14
  47. package/out/project/_/queue/__next._head.txt +4 -4
  48. package/out/project/_/queue/__next._index.txt +7 -7
  49. package/out/project/_/queue/__next._tree.txt +2 -2
  50. package/out/project/_/queue/__next.project.$d$id.queue.__PAGE__.txt +3 -3
  51. package/out/project/_/queue/__next.project.$d$id.queue.txt +3 -3
  52. package/out/project/_/queue/__next.project.$d$id.txt +3 -3
  53. package/out/project/_/queue/__next.project.txt +3 -3
  54. package/out/project/_/queue.html +1 -1
  55. package/out/project/_/queue.txt +14 -14
  56. package/out/project/_.html +1 -1
  57. package/out/project/_.txt +14 -14
  58. package/out/quadwork-symbol.svg +15 -0
  59. package/out/settings/__next._full.txt +14 -14
  60. package/out/settings/__next._head.txt +4 -4
  61. package/out/settings/__next._index.txt +7 -7
  62. package/out/settings/__next._tree.txt +2 -2
  63. package/out/settings/__next.settings.__PAGE__.txt +3 -3
  64. package/out/settings/__next.settings.txt +3 -3
  65. package/out/settings.html +1 -1
  66. package/out/settings.txt +14 -14
  67. package/out/setup/__next._full.txt +14 -14
  68. package/out/setup/__next._head.txt +4 -4
  69. package/out/setup/__next._index.txt +7 -7
  70. package/out/setup/__next._tree.txt +2 -2
  71. package/out/setup/__next.setup.__PAGE__.txt +3 -3
  72. package/out/setup/__next.setup.txt +3 -3
  73. package/out/setup.html +1 -1
  74. package/out/setup.txt +14 -14
  75. package/package.json +2 -1
  76. package/server/index.js +77 -20
  77. package/server/queue-watcher.js +20 -11
  78. package/server/routes.discordBridge.test.js +5 -5
  79. package/server/routes.js +141 -212
  80. package/server/routes.telegramBridge.test.js +6 -6
  81. package/templates/config.toml +7 -7
  82. package/out/_next/static/ZT6D996Dw9auBgcm_HHTY/_ssgManifest.js +0 -1
  83. package/out/_next/static/chunks/0j-zyy6.adwtl.css +0 -2
  84. package/out/_next/static/chunks/0n7b.b.q4nmo..js +0 -1
  85. package/out/_next/static/chunks/0~xrqi87fqraz.js +0 -1
  86. package/out/_next/static/chunks/12i404gkhv7q..js +0 -4
  87. package/out/_next/static/media/favicon.0qzfoe774zb3r.ico +0 -0
  88. package/out/project/_/memory/__next._full.txt +0 -21
  89. package/out/project/_/memory/__next._head.txt +0 -6
  90. package/out/project/_/memory/__next._index.txt +0 -8
  91. package/out/project/_/memory/__next._tree.txt +0 -3
  92. package/out/project/_/memory/__next.project.$d$id.memory.__PAGE__.txt +0 -6
  93. package/out/project/_/memory/__next.project.$d$id.memory.txt +0 -5
  94. package/out/project/_/memory/__next.project.$d$id.txt +0 -5
  95. package/out/project/_/memory/__next.project.txt +0 -5
  96. package/out/project/_/memory.html +0 -1
  97. package/out/project/_/memory.txt +0 -21
  98. /package/out/_next/static/{ZT6D996Dw9auBgcm_HHTY → KleEGCyPe1ovSiWKr9GnB}/_buildManifest.js +0 -0
  99. /package/out/_next/static/{ZT6D996Dw9auBgcm_HHTY → KleEGCyPe1ovSiWKr9GnB}/_clientMiddlewareManifest.js +0 -0
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  <div align="center">
2
2
 
3
+ <img src="public/icon.png" alt="QuadWork" width="80" />
4
+
3
5
  # QuadWork
4
6
 
5
7
  ### Your AI dev team while you sleep.
@@ -36,7 +38,9 @@ reviews and branch protection, it allows solo founders and engineers to ship
36
38
  code 24/7 through a reliable "Issue → Branch → PR → Merge" loop while
37
39
  maintaining high code quality without manual oversight.
38
40
 
39
- [![QuadWork Demo](https://img.youtube.com/vi/Q0814uXjYoQ/maxresdefault.jpg)](https://www.youtube.com/watch?v=Q0814uXjYoQ)
41
+ <video src="https://github.com/user-attachments/assets/d1f6f3d6-27de-4afb-9b58-9fe1f87cddb8" width="720" controls></video>
42
+
43
+ [▶ View Live Demo on YouTube](https://www.youtube.com/watch?v=Q0814uXjYoQ)
40
44
 
41
45
  ### How QuadWork Orchestrates Your Workflow
42
46
 
@@ -147,6 +151,7 @@ Head: merges, picks the next issue
147
151
  - 📺 **4-quadrant project view** — chat, agent terminals (HEAD / DEV / RE1 / RE2), GitHub board, operator panel
148
152
  - ⏰ **Scheduled Trigger** — recurring "queue check" pulses for autonomous overnight runs
149
153
  - 📲 **Telegram bridge** — mirror the chat to your phone for remote monitoring
154
+ - 💬 **Discord bridge** — forward agent chat to a Discord channel for team visibility
150
155
  - 💾 **Project history export/import** — JSON snapshots of the full chat transcript
151
156
  - 🧯 **Loop Guard control** — raise the hop limit and auto-resume stuck chains without restarting AC
152
157
  - 🔔 **Notification sounds** — Web Audio chime on new agent messages with a background-only mode
package/bin/quadwork.js CHANGED
@@ -26,6 +26,8 @@ const AGENTCHATTR_REPO = "https://github.com/bcurts/agentchattr.git";
26
26
  // a loud warning instead of hard-failing — see installAgentChattr
27
27
  // below.
28
28
  const AGENTCHATTR_PIN = "3e71d4267572579e7ffeb83576645f90932c1849";
29
+ // #444: same pattern for realproject7/agentchattr-telegram.
30
+ const AGENTCHATTR_TELEGRAM_PIN = "4a6b45f1794c612328b9d5ee6d6fcb3f77015abc";
29
31
 
30
32
  // ─── ANSI Helpers ──────────────────────────────────────────────────────────
31
33
 
@@ -1047,7 +1049,14 @@ async function setupAddons(rl, setup, configTomlPath) {
1047
1049
  const cloneSpinner = spinner("Cloning agentchattr-telegram...");
1048
1050
  const cloneResult = run(`git clone https://github.com/realproject7/agentchattr-telegram.git "${telegramDir}" 2>&1`);
1049
1051
  cloneSpinner.stop(cloneResult !== null);
1050
- if (!cloneResult) warn("You can set it up manually later");
1052
+ if (!cloneResult) { warn("You can set it up manually later"); }
1053
+ else {
1054
+ // #444: pin to a known commit, same pattern as AGENTCHATTR_PIN
1055
+ const pinResult = run(`git -C "${telegramDir}" checkout -B pinned ${AGENTCHATTR_TELEGRAM_PIN} 2>&1`, { timeout: 30000 });
1056
+ if (pinResult === null) {
1057
+ try { console.warn(`[quadwork] WARNING: could not check out agentchattr-telegram pin ${AGENTCHATTR_TELEGRAM_PIN} at ${telegramDir}; falling back to default branch.`); } catch {}
1058
+ }
1059
+ }
1051
1060
  } else {
1052
1061
  ok("agentchattr-telegram already present");
1053
1062
  }
@@ -1106,7 +1115,7 @@ bot_token = "env:${envKey}"
1106
1115
  chat_id = "${chatId}"
1107
1116
  agentchattr_url = "${projectChattrUrl}"
1108
1117
  poll_interval = 2
1109
- bridge_sender = "telegram-bridge"
1118
+ bridge_sender = "tg"
1110
1119
  `;
1111
1120
  fs.appendFileSync(configTomlPath, telegramSection);
1112
1121
  ok("Added Telegram config to config.toml (token stored in .env)");
@@ -1121,7 +1130,7 @@ bridge_sender = "telegram-bridge"
1121
1130
  // silently ignored and the bridge falls back to :8300.
1122
1131
  // #404: cursor_file must be per-project so multiple bridges
1123
1132
  // don't clobber each other's position.
1124
- const cursorFile = path.join(CONFIG_DIR, `telegram-bridge-cursor-${setup.projectName}.json`);
1133
+ const cursorFile = path.join(CONFIG_DIR, `tg-bridge-cursor-${setup.projectName}.json`);
1125
1134
  const bridgeTomlContent = `[telegram]\nbot_token = "${botToken}"\nchat_id = "${chatId}"\nagentchattr_url = "${projectChattrUrl}"\ncursor_file = "${cursorFile}"\n`;
1126
1135
  fs.writeFileSync(bridgeToml, bridgeTomlContent, { mode: 0o600 });
1127
1136
  fs.chmodSync(bridgeToml, 0o600);
@@ -1141,7 +1150,7 @@ bridge_sender = "telegram-bridge"
1141
1150
  bridgeProc.unref();
1142
1151
  if (bridgeProc.pid) {
1143
1152
  ok(`Telegram bridge started (PID: ${bridgeProc.pid})`);
1144
- const pidFile = path.join(CONFIG_DIR, "telegram-bridge.pid");
1153
+ const pidFile = path.join(CONFIG_DIR, "tg-bridge.pid");
1145
1154
  fs.writeFileSync(pidFile, String(bridgeProc.pid));
1146
1155
  } else {
1147
1156
  warn("Could not start Telegram bridge — start manually");
@@ -1151,54 +1160,7 @@ bridge_sender = "telegram-bridge"
1151
1160
  }
1152
1161
  }
1153
1162
 
1154
- // Shared Memory
1155
- log("Optional: set up shared memory cards for cross-agent knowledge.");
1156
- const wantMemory = await askYN(rl, "Set up Shared Memory?", false);
1157
- if (wantMemory) {
1158
- const memoryDir = path.join(path.dirname(setup.absDir), "agent-memory");
1159
- if (!fs.existsSync(memoryDir)) {
1160
- const memSpinner = spinner("Cloning agent-memory...");
1161
- const cloneResult = run(`git clone https://github.com/realproject7/agent-memory.git "${memoryDir}" 2>&1`);
1162
- memSpinner.stop(cloneResult !== null);
1163
- if (!cloneResult) warn("You can set it up manually later");
1164
- } else {
1165
- ok("agent-memory already present");
1166
- }
1167
-
1168
- if (fs.existsSync(memoryDir)) {
1169
- // Verify butler scripts exist
1170
- const scriptsDir = path.join(memoryDir, "scripts");
1171
- const requiredScripts = ["butler-scan.sh", "butler-consolidate.sh", "inject.sh"];
1172
- for (const script of requiredScripts) {
1173
- const scriptPath = path.join(scriptsDir, script);
1174
- if (fs.existsSync(scriptPath)) {
1175
- // Ensure executable
1176
- try { fs.chmodSync(scriptPath, 0o755); } catch {}
1177
- } else {
1178
- warn(`Butler script not found: ${scriptPath}`);
1179
- }
1180
- }
1181
- ok("Butler scripts verified");
1182
-
1183
- // Create project short-term memory file if missing
1184
- const shortTermDir = path.join(memoryDir, "central", "short-term");
1185
- const projectMemFile = path.join(shortTermDir, `${setup.projectName}.md`);
1186
- if (!fs.existsSync(projectMemFile)) {
1187
- if (!fs.existsSync(shortTermDir)) fs.mkdirSync(shortTermDir, { recursive: true });
1188
- fs.writeFileSync(projectMemFile, `# ${setup.projectName} — Short-Term Memory\n\n_No entries yet._\n`);
1189
- ok(`Created ${projectMemFile}`);
1190
- }
1191
-
1192
- // Create cards directory if missing
1193
- const cardsDir = path.join(memoryDir, "archive", "v2", "cards");
1194
- if (!fs.existsSync(cardsDir)) {
1195
- fs.mkdirSync(cardsDir, { recursive: true });
1196
- ok("Created cards directory");
1197
- }
1198
- }
1199
-
1200
- setup.memoryDir = memoryDir;
1201
- }
1163
+ // #445: Shared Memory wizard step removed (agent-memory integration deprecated).
1202
1164
 
1203
1165
  return setup;
1204
1166
  }
@@ -1262,12 +1224,6 @@ function writeQuadWorkConfig(setup) {
1262
1224
  };
1263
1225
  }
1264
1226
 
1265
- if (setup.memoryDir) {
1266
- project.memory_cards_dir = path.join(setup.memoryDir, "archive", "v2", "cards");
1267
- project.shared_memory_path = path.join(setup.memoryDir, "central", "short-term", `${setup.projectName}.md`);
1268
- project.butler_scripts_dir = path.join(setup.memoryDir, "scripts");
1269
- }
1270
-
1271
1227
  if (setup.telegram) {
1272
1228
  project.telegram = {
1273
1229
  bot_token: setup.telegram.bot_token,
@@ -1765,7 +1721,7 @@ function cmdStop() {
1765
1721
  console.log("\n QuadWork Stop\n");
1766
1722
 
1767
1723
  let stopped = 0;
1768
- if (stopPid("Telegram bridge", "telegram-bridge.pid")) stopped++;
1724
+ if (stopPid("Telegram bridge", "tg-bridge.pid")) stopped++;
1769
1725
 
1770
1726
  // Stop per-project AgentChattr instances
1771
1727
  const config = readConfig();
@@ -2011,6 +1967,33 @@ function cmdDoctor() {
2011
1967
  } catch (err) {
2012
1968
  console.log(` (could not enumerate projects: ${err.message})`);
2013
1969
  }
1970
+ // #444: agentchattr-telegram pin status
1971
+ console.log("");
1972
+ console.log(`agentchattr-telegram pin: ${AGENTCHATTR_TELEGRAM_PIN}`);
1973
+ const tgBridgeDir = path.join(CONFIG_DIR, "agentchattr-telegram");
1974
+ if (!fs.existsSync(tgBridgeDir)) {
1975
+ console.log(" [skip] agentchattr-telegram: not installed");
1976
+ } else {
1977
+ const tgSha = cloneShaAt(tgBridgeDir);
1978
+ if (!tgSha) {
1979
+ console.log(` [warn] agentchattr-telegram: ${tgBridgeDir} — not a git clone`);
1980
+ } else {
1981
+ const tgBranch = cloneBranchAt(tgBridgeDir);
1982
+ let tgTag;
1983
+ if (tgSha !== AGENTCHATTR_TELEGRAM_PIN) {
1984
+ tgTag = "DIFF";
1985
+ } else if (!tgBranch) {
1986
+ tgTag = "DETACH";
1987
+ } else if (tgBranch !== "pinned") {
1988
+ tgTag = "BR ";
1989
+ } else {
1990
+ tgTag = "OK ";
1991
+ }
1992
+ const tgBranchLabel = tgBranch ? `branch=${tgBranch}` : "branch=(detached)";
1993
+ console.log(` [${tgTag}] ${tgSha} ${tgBranchLabel} (${tgBridgeDir})`);
1994
+ }
1995
+ }
1996
+
2014
1997
  console.log("");
2015
1998
  console.log("Legend: [OK ] on pin + on `pinned` branch; [BR ] on pin but on a non-`pinned` named branch; [DETACH] on pin but in detached HEAD (re-run quadwork start to auto-migrate); [DIFF] off-pin (re-clone manually to re-sync)");
2016
1999
  console.log("");
@@ -35,7 +35,7 @@ except ModuleNotFoundError:
35
35
  import discord
36
36
  import requests
37
37
 
38
- log = logging.getLogger("discord-bridge")
38
+ log = logging.getLogger("dc-bridge")
39
39
 
40
40
  # ---------------------------------------------------------------------------
41
41
  # Config
@@ -46,7 +46,7 @@ DEFAULT_CONFIG = {
46
46
  "channel_id": "",
47
47
  "agentchattr_url": "http://127.0.0.1:8300",
48
48
  "poll_interval": 2,
49
- "bridge_sender": "discord-bridge",
49
+ "bridge_sender": "dc",
50
50
  "cursor_file": "",
51
51
  }
52
52
 
@@ -145,7 +145,7 @@ def save_cursor(path):
145
145
 
146
146
  # Mutable dict so heartbeat thread sees re-registration updates.
147
147
  # bridge_sender is set from cfg during main() so all callers can read it.
148
- ac = {"token": "", "name": "", "bridge_sender": "discord-bridge", "known_names": set()}
148
+ ac = {"token": "", "name": "", "bridge_sender": "dc", "known_names": set()}
149
149
 
150
150
 
151
151
  def ac_register(url, base=None, label="Discord Bridge"):
@@ -222,13 +222,25 @@ async def poll_ac_to_discord(cfg, channel):
222
222
  bridge_sender = cfg["bridge_sender"]
223
223
  interval = cfg["poll_interval"]
224
224
 
225
+ # #458: dedup guard — track recently forwarded message IDs so a
226
+ # stale cursor, drain-loop hiccup, or restart replay can't send
227
+ # the same AC message to Discord twice within a session.
228
+ forwarded_ids: set[int] = set()
229
+ # Cap the set size to avoid unbounded growth in long-running sessions.
230
+ MAX_FORWARDED = 2000
231
+
225
232
  while True:
226
233
  try:
227
234
  # Drain all available messages before sleeping. When AC
228
235
  # returns a full batch (limit messages), immediately
229
236
  # re-fetch with the updated cursor to avoid dropping
230
237
  # overflow under high volume.
231
- while True:
238
+ # #458: cap drain iterations to prevent infinite loop if
239
+ # since_id isn't being honored by AC.
240
+ drain_iterations = 0
241
+ MAX_DRAIN = 20
242
+ while drain_iterations < MAX_DRAIN:
243
+ drain_iterations += 1
232
244
  params = {"limit": 50}
233
245
  if _cursor["last_seen_id"]:
234
246
  params["since_id"] = _cursor["last_seen_id"]
@@ -254,30 +266,57 @@ async def poll_ac_to_discord(cfg, channel):
254
266
  resp.raise_for_status()
255
267
  messages = resp.json()
256
268
 
257
- if not isinstance(messages, list):
269
+ if not isinstance(messages, list) or not messages:
270
+ break
271
+
272
+ # #458: detect stale responses — if every message ID in
273
+ # the batch is <= our cursor, the server isn't honoring
274
+ # since_id. Break to avoid re-forwarding.
275
+ max_batch_id = max(m.get("id", 0) for m in messages)
276
+ if max_batch_id <= _cursor["last_seen_id"]:
277
+ log.warning("AC returned stale batch (max_id=%d <= cursor=%d) — breaking drain", max_batch_id, _cursor["last_seen_id"])
258
278
  break
259
279
 
280
+ # #458: build echo names once per batch (inputs don't
281
+ # change per-message).
282
+ echo_names = ac["known_names"] | {
283
+ bridge_sender,
284
+ "discord-bridge",
285
+ "discord_bridge",
286
+ }
287
+
260
288
  for msg in messages:
261
289
  msg_id = msg.get("id", 0)
262
290
  sender = msg.get("sender", "")
263
291
  text = msg.get("text", "")
264
292
 
265
- # Echo prevention: skip our own messages (any name
266
- # the bridge has ever registered as this session)
267
- if sender in ac["known_names"] or sender == bridge_sender:
293
+ # Helper: advance cursor and persist. Called after
294
+ # a message is fully handled (skipped or forwarded)
295
+ # so a crash can't replay it (#458). NOT called
296
+ # before Discord delivery to avoid silent message
297
+ # loss on transient send failures.
298
+ def commit_cursor():
268
299
  if msg_id > _cursor["last_seen_id"]:
269
300
  _cursor["last_seen_id"] = msg_id
301
+ save_cursor(cfg["cursor_file"])
302
+
303
+ # Echo prevention: skip our own messages
304
+ if sender in echo_names:
305
+ commit_cursor()
270
306
  continue
271
307
 
272
308
  # Skip system auto-recovery messages
273
309
  if sender == "system":
274
- if msg_id > _cursor["last_seen_id"]:
275
- _cursor["last_seen_id"] = msg_id
310
+ commit_cursor()
276
311
  continue
277
312
 
278
313
  if not text:
279
- if msg_id > _cursor["last_seen_id"]:
280
- _cursor["last_seen_id"] = msg_id
314
+ commit_cursor()
315
+ continue
316
+
317
+ # #458: dedup guard — skip already-forwarded messages
318
+ if msg_id in forwarded_ids:
319
+ commit_cursor()
281
320
  continue
282
321
 
283
322
  # Forward to Discord
@@ -287,20 +326,26 @@ async def poll_ac_to_discord(cfg, channel):
287
326
  if len(discord_text) > 2000:
288
327
  discord_text = discord_text[:1997] + "..."
289
328
  await channel.send(discord_text)
329
+ # Only commit cursor + mark forwarded AFTER
330
+ # successful Discord delivery.
331
+ forwarded_ids.add(msg_id)
332
+ commit_cursor()
333
+ # Trim the set if it grows too large
334
+ if len(forwarded_ids) > MAX_FORWARDED:
335
+ sorted_ids = sorted(forwarded_ids)
336
+ forwarded_ids.clear()
337
+ forwarded_ids.update(sorted_ids[len(sorted_ids) // 2:])
290
338
  except Exception as exc:
291
339
  log.error("Failed to send to Discord: %s", exc)
292
340
 
293
- if msg_id > _cursor["last_seen_id"]:
294
- _cursor["last_seen_id"] = msg_id
295
-
296
- # Persist cursor after each page
297
- save_cursor(cfg["cursor_file"])
298
-
299
341
  # If we got a full batch, there may be more — drain immediately
300
342
  if len(messages) >= 50:
301
343
  continue
302
344
  break
303
345
 
346
+ if drain_iterations >= MAX_DRAIN:
347
+ log.warning("Drain loop hit %d iterations — breaking to avoid infinite loop", MAX_DRAIN)
348
+
304
349
  except requests.RequestException as exc:
305
350
  log.warning("AC poll error: %s", exc)
306
351
  except Exception as exc:
package/out/404.html CHANGED
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="en" class="geist_mono_8d43a2aa-module__8Li5zG__variable h-full"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/0j-zyy6.adwtl.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0ze4gu236oq96.js"/><script src="/_next/static/chunks/0.bbxho1vnxin.js" async=""></script><script src="/_next/static/chunks/16g.ca89g7fib.js" async=""></script><script src="/_next/static/chunks/0zfotsowwll1x.js" async=""></script><script src="/_next/static/chunks/0pqt~8bl3ukh4.js" async=""></script><script src="/_next/static/chunks/turbopack-0lcwh84lrj9gi.js" async=""></script><script src="/_next/static/chunks/0o3_.p5ivp5sp.js" async=""></script><script src="/_next/static/chunks/0d3shmwh5_nmn.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>QuadWork</title><meta name="description" content="Unified dashboard for multi-agent coding teams"/><link rel="icon" href="/favicon.ico?favicon.0qzfoe774zb3r.ico" sizes="48x48" type="image/x-icon"/><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body class="h-full flex flex-col"><div hidden=""><!--$--><!--/$--></div><header class="sticky top-0 z-40 flex h-12 items-center justify-between border-b border-white/10 bg-neutral-950/90 px-4 backdrop-blur" aria-hidden="true"></header><div class="flex flex-1 min-h-0"><aside class="w-16 shrink-0 h-full border-r border-border bg-bg-surface flex flex-col items-center py-3"><a class="w-10 h-10 flex items-center justify-center rounded-sm transition-colors text-text-muted hover:text-text hover:bg-[#1a1a1a]" title="Home" href="/"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3 10L10 3l7 7"></path><path d="M5 8.5V16h3.5v-4h3v4H15V8.5"></path></svg></a><div class="w-6 h-px bg-border my-2"></div><div class="flex-1 flex flex-col items-center gap-2 overflow-y-auto min-h-0"><a class="w-10 h-10 flex items-center justify-center rounded-full border border-dashed border-border text-text-muted hover:text-text hover:bg-[#1a1a1a] transition-colors" title="Add project" href="/setup"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"><path d="M8 3v10M3 8h10"></path></svg></a></div><div class="w-6 h-px bg-border my-2"></div><a class="w-10 h-10 flex items-center justify-center rounded-sm transition-colors text-text-muted hover:text-text hover:bg-[#1a1a1a]" title="Settings" href="/settings"><svg width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="9" r="2.5"></circle><path d="M7.5 1.5h3l.4 2.1a5.5 5.5 0 011.3.7l2-.8 1.5 2.6-1.6 1.3a5.5 5.5 0 010 1.5l1.6 1.3-1.5 2.6-2-.8a5.5 5.5 0 01-1.3.7l-.4 2.1h-3l-.4-2.1a5.5 5.5 0 01-1.3-.7l-2 .8-1.5-2.6 1.6-1.3a5.5 5.5 0 010-1.5L2.3 6.1l1.5-2.6 2 .8a5.5 5.5 0 011.3-.7z"></path></svg></a></aside><main class="flex-1 min-w-0 overflow-auto"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--></main></div><script src="/_next/static/chunks/0ze4gu236oq96.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[43688,[\"/_next/static/chunks/0o3_.p5ivp5sp.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n3:I[26704,[\"/_next/static/chunks/0o3_.p5ivp5sp.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n4:I[22140,[\"/_next/static/chunks/0o3_.p5ivp5sp.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n5:I[39756,[\"/_next/static/chunks/0o3_.p5ivp5sp.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n6:I[37457,[\"/_next/static/chunks/0o3_.p5ivp5sp.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n7:I[97367,[\"/_next/static/chunks/0o3_.p5ivp5sp.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"OutletBoundary\"]\n8:\"$Sreact.suspense\"\nb:I[97367,[\"/_next/static/chunks/0o3_.p5ivp5sp.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"ViewportBoundary\"]\nd:I[97367,[\"/_next/static/chunks/0o3_.p5ivp5sp.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"MetadataBoundary\"]\nf:I[68027,[\"/_next/static/chunks/0o3_.p5ivp5sp.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0j-zyy6.adwtl.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0j-zyy6.adwtl.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0o3_.p5ivp5sp.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"geist_mono_8d43a2aa-module__8Li5zG__variable h-full\",\"children\":[\"$\",\"body\",null,{\"className\":\"h-full flex flex-col\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{}],[\"$\",\"div\",null,{\"className\":\"flex flex-1 min-h-0\",\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 min-w-0 overflow-auto\",\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:2:props:children:1:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:2:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:2:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:2:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@9\"}]}]]}],{},null,false,null]},null,false,\"$@a\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Le\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0j-zyy6.adwtl.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"ZT6D996Dw9auBgcm_HHTY\"}\n"])</script><script>self.__next_f.push([1,"10:[]\na:\"$W10\"\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"11:I[27201,[\"/_next/static/chunks/0o3_.p5ivp5sp.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"IconMark\"]\n9:null\ne:[[\"$\",\"title\",\"0\",{\"children\":\"QuadWork\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Unified dashboard for multi-agent coding teams\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.0qzfoe774zb3r.ico\",\"sizes\":\"48x48\",\"type\":\"image/x-icon\"}],[\"$\",\"$L11\",\"3\",{}]]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="en" class="geist_mono_8d43a2aa-module__8Li5zG__variable h-full"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/chunks/0koy9hplvko3w.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/0ze4gu236oq96.js"/><script src="/_next/static/chunks/0.bbxho1vnxin.js" async=""></script><script src="/_next/static/chunks/16g.ca89g7fib.js" async=""></script><script src="/_next/static/chunks/0zfotsowwll1x.js" async=""></script><script src="/_next/static/chunks/0pqt~8bl3ukh4.js" async=""></script><script src="/_next/static/chunks/turbopack-0lcwh84lrj9gi.js" async=""></script><script src="/_next/static/chunks/152f2hu-ivy6f.js" async=""></script><script src="/_next/static/chunks/0d3shmwh5_nmn.js" async=""></script><meta name="robots" content="noindex"/><meta name="next-size-adjust" content=""/><title>404: This page could not be found.</title><title>QuadWork</title><meta name="description" content="Unified dashboard for multi-agent coding teams"/><link rel="icon" href="/favicon.ico?favicon.05o2q2p4kvnq_.ico" sizes="256x256" type="image/x-icon"/><script src="/_next/static/chunks/03~yq9q893hmn.js" noModule=""></script></head><body class="h-full flex flex-col"><div hidden=""><!--$--><!--/$--></div><header class="sticky top-0 z-40 flex h-12 items-center justify-between border-b border-white/10 bg-neutral-950/90 px-4 backdrop-blur" aria-hidden="true"></header><div class="flex flex-1 min-h-0"><aside class="w-16 shrink-0 h-full border-r border-border bg-bg-surface flex flex-col items-center py-3"><a class="w-10 h-10 flex items-center justify-center rounded-sm transition-colors text-text-muted hover:text-text hover:bg-[#1a1a1a]" title="Home" href="/"><svg width="20" height="20" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M3 10L10 3l7 7"></path><path d="M5 8.5V16h3.5v-4h3v4H15V8.5"></path></svg></a><div class="w-6 h-px bg-border my-2"></div><div class="flex-1 flex flex-col items-center gap-2 overflow-y-auto min-h-0"><a class="w-10 h-10 flex items-center justify-center rounded-full border border-dashed border-border text-text-muted hover:text-text hover:bg-[#1a1a1a] transition-colors" title="Add project" href="/setup"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"><path d="M8 3v10M3 8h10"></path></svg></a></div><div class="w-6 h-px bg-border my-2"></div><a class="w-10 h-10 flex items-center justify-center rounded-sm transition-colors text-text-muted hover:text-text hover:bg-[#1a1a1a]" title="Settings" href="/settings"><svg width="18" height="18" viewBox="0 0 18 18" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><circle cx="9" cy="9" r="2.5"></circle><path d="M7.5 1.5h3l.4 2.1a5.5 5.5 0 011.3.7l2-.8 1.5 2.6-1.6 1.3a5.5 5.5 0 010 1.5l1.6 1.3-1.5 2.6-2-.8a5.5 5.5 0 01-1.3.7l-.4 2.1h-3l-.4-2.1a5.5 5.5 0 01-1.3-.7l-2 .8-1.5-2.6 1.6-1.3a5.5 5.5 0 010-1.5L2.3 6.1l1.5-2.6 2 .8a5.5 5.5 0 011.3-.7z"></path></svg></a></aside><main class="flex-1 min-w-0 overflow-auto"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--></main></div><script src="/_next/static/chunks/0ze4gu236oq96.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[43688,[\"/_next/static/chunks/152f2hu-ivy6f.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n3:I[26704,[\"/_next/static/chunks/152f2hu-ivy6f.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n4:I[22140,[\"/_next/static/chunks/152f2hu-ivy6f.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n5:I[39756,[\"/_next/static/chunks/152f2hu-ivy6f.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n6:I[37457,[\"/_next/static/chunks/152f2hu-ivy6f.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n7:I[97367,[\"/_next/static/chunks/152f2hu-ivy6f.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"OutletBoundary\"]\n8:\"$Sreact.suspense\"\nb:I[97367,[\"/_next/static/chunks/152f2hu-ivy6f.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"ViewportBoundary\"]\nd:I[97367,[\"/_next/static/chunks/152f2hu-ivy6f.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"MetadataBoundary\"]\nf:I[68027,[\"/_next/static/chunks/152f2hu-ivy6f.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0koy9hplvko3w.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"_not-found\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0koy9hplvko3w.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/152f2hu-ivy6f.js\",\"async\":true,\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-1\",{\"src\":\"/_next/static/chunks/0d3shmwh5_nmn.js\",\"async\":true,\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"className\":\"geist_mono_8d43a2aa-module__8Li5zG__variable h-full\",\"children\":[\"$\",\"body\",null,{\"className\":\"h-full flex flex-col\",\"children\":[[\"$\",\"$L2\",null,{}],[\"$\",\"$L3\",null,{}],[\"$\",\"div\",null,{\"className\":\"flex flex-1 min-h-0\",\"children\":[[\"$\",\"$L4\",null,{}],[\"$\",\"main\",null,{\"className\":\"flex-1 min-w-0 overflow-auto\",\"children\":[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]]}]]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L5\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L6\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:2:props:children:1:props:children:props:notFound:0:1:props:style\",\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:2:props:children:1:props:children:props:notFound:0:1:props:children:props:children:1:props:style\",\"children\":404}],[\"$\",\"div\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:2:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:style\",\"children\":[\"$\",\"h2\",null,{\"style\":\"$0:f:0:1:0:props:children:1:props:children:props:children:2:props:children:1:props:children:props:notFound:0:1:props:children:props:children:2:props:children:props:style\",\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L7\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@9\"}]}]]}],{},null,false,null]},null,false,\"$@a\"]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[\"$\",\"$Lb\",null,{\"children\":\"$Lc\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Ld\",null,{\"children\":[\"$\",\"$8\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Le\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$f\",[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/chunks/0koy9hplvko3w.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"KleEGCyPe1ovSiWKr9GnB\"}\n"])</script><script>self.__next_f.push([1,"10:[]\na:\"$W10\"\n"])</script><script>self.__next_f.push([1,"c:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"11:I[27201,[\"/_next/static/chunks/152f2hu-ivy6f.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"IconMark\"]\n9:null\ne:[[\"$\",\"title\",\"0\",{\"children\":\"QuadWork\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Unified dashboard for multi-agent coding teams\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico?favicon.05o2q2p4kvnq_.ico\",\"sizes\":\"256x256\",\"type\":\"image/x-icon\"}],[\"$\",\"$L11\",\"3\",{}]]\n"])</script></body></html>
@@ -1,6 +1,6 @@
1
1
  1:"$Sreact.fragment"
2
- 2:I[54338,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0n7b.b.q4nmo..js"],"default"]
3
- 3:I[97367,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"]
2
+ 2:I[54338,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/14zyqqpdz2x7j.js"],"default"]
3
+ 3:I[97367,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"]
4
4
  4:"$Sreact.suspense"
5
- 0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{}],[["$","script","script-0",{"src":"/_next/static/chunks/0n7b.b.q4nmo..js","async":true}]],["$","$L3",null,{"children":["$","$4",null,{"name":"Next.MetadataOutlet","children":"$@5"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"ZT6D996Dw9auBgcm_HHTY"}
5
+ 0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{}],[["$","script","script-0",{"src":"/_next/static/chunks/14zyqqpdz2x7j.js","async":true}]],["$","$L3",null,{"children":["$","$4",null,{"name":"Next.MetadataOutlet","children":"$@5"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"KleEGCyPe1ovSiWKr9GnB"}
6
6
  5:null
@@ -1,19 +1,19 @@
1
1
  1:"$Sreact.fragment"
2
- 2:I[43688,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
3
- 3:I[26704,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
4
- 4:I[22140,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
5
- 5:I[39756,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
6
- 6:I[37457,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
7
- 7:I[54338,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0n7b.b.q4nmo..js"],"default"]
8
- 8:I[97367,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"]
2
+ 2:I[43688,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
3
+ 3:I[26704,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
4
+ 4:I[22140,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
5
+ 5:I[39756,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
6
+ 6:I[37457,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
7
+ 7:I[54338,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/14zyqqpdz2x7j.js"],"default"]
8
+ 8:I[97367,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"OutletBoundary"]
9
9
  9:"$Sreact.suspense"
10
- b:I[97367,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"]
11
- d:I[97367,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"]
12
- f:I[68027,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1]
13
- :HL["/_next/static/chunks/0j-zyy6.adwtl.css","style"]
10
+ b:I[97367,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"]
11
+ d:I[97367,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"]
12
+ f:I[68027,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1]
13
+ :HL["/_next/static/chunks/0koy9hplvko3w.css","style"]
14
14
  :HL["/_next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
15
- 0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0j-zyy6.adwtl.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0o3_.p5ivp5sp.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"geist_mono_8d43a2aa-module__8Li5zG__variable h-full","children":["$","body",null,{"className":"h-full flex flex-col","children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","div",null,{"className":"flex flex-1 min-h-0","children":[["$","$L4",null,{}],["$","main",null,{"className":"flex-1 min-w-0 overflow-auto","children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}]}]]}],{"children":[["$","$1","c",{"children":[["$","$L7",null,{}],[["$","script","script-0",{"src":"/_next/static/chunks/0n7b.b.q4nmo..js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Le"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$f",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0j-zyy6.adwtl.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"ZT6D996Dw9auBgcm_HHTY"}
15
+ 0:{"P":null,"c":["",""],"q":"","i":false,"f":[[["",{"children":["__PAGE__",{}]},"$undefined","$undefined",16],[["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0koy9hplvko3w.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/152f2hu-ivy6f.js","async":true,"nonce":"$undefined"}],["$","script","script-1",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true,"nonce":"$undefined"}]],["$","html",null,{"lang":"en","className":"geist_mono_8d43a2aa-module__8Li5zG__variable h-full","children":["$","body",null,{"className":"h-full flex flex-col","children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","div",null,{"className":"flex flex-1 min-h-0","children":[["$","$L4",null,{}],["$","main",null,{"className":"flex-1 min-w-0 overflow-auto","children":["$","$L5",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L6",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]]}]]}]}]]}],{"children":[["$","$1","c",{"children":[["$","$L7",null,{}],[["$","script","script-0",{"src":"/_next/static/chunks/14zyqqpdz2x7j.js","async":true,"nonce":"$undefined"}]],["$","$L8",null,{"children":["$","$9",null,{"name":"Next.MetadataOutlet","children":"$@a"}]}]]}],{},null,false,null]},null,false,null],["$","$1","h",{"children":[null,["$","$Lb",null,{"children":"$Lc"}],["$","div",null,{"hidden":true,"children":["$","$Ld",null,{"children":["$","$9",null,{"name":"Next.Metadata","children":"$Le"}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],false]],"m":"$undefined","G":["$f",[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0koy9hplvko3w.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"KleEGCyPe1ovSiWKr9GnB"}
16
16
  c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
17
- 10:I[27201,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"]
17
+ 10:I[27201,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"]
18
18
  a:null
19
- e:[["$","title","0",{"children":"QuadWork"}],["$","meta","1",{"name":"description","content":"Unified dashboard for multi-agent coding teams"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0qzfoe774zb3r.ico","sizes":"48x48","type":"image/x-icon"}],["$","$L10","3",{}]]
19
+ e:[["$","title","0",{"children":"QuadWork"}],["$","meta","1",{"name":"description","content":"Unified dashboard for multi-agent coding teams"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.05o2q2p4kvnq_.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L10","3",{}]]
@@ -1,6 +1,6 @@
1
1
  1:"$Sreact.fragment"
2
- 2:I[97367,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"]
3
- 3:I[97367,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"]
2
+ 2:I[97367,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"ViewportBoundary"]
3
+ 3:I[97367,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"]
4
4
  4:"$Sreact.suspense"
5
- 5:I[27201,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"]
6
- 0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"QuadWork"}],["$","meta","1",{"name":"description","content":"Unified dashboard for multi-agent coding teams"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.0qzfoe774zb3r.ico","sizes":"48x48","type":"image/x-icon"}],["$","$L5","3",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"ZT6D996Dw9auBgcm_HHTY"}
5
+ 5:I[27201,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"]
6
+ 0:{"rsc":["$","$1","h",{"children":[null,["$","$L2",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","div",null,{"hidden":true,"children":["$","$L3",null,{"children":["$","$4",null,{"name":"Next.Metadata","children":[["$","title","0",{"children":"QuadWork"}],["$","meta","1",{"name":"description","content":"Unified dashboard for multi-agent coding teams"}],["$","link","2",{"rel":"icon","href":"/favicon.ico?favicon.05o2q2p4kvnq_.ico","sizes":"256x256","type":"image/x-icon"}],["$","$L5","3",{}]]}]}]}],["$","meta",null,{"name":"next-size-adjust","content":""}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"KleEGCyPe1ovSiWKr9GnB"}
@@ -1,8 +1,8 @@
1
1
  1:"$Sreact.fragment"
2
- 2:I[43688,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
3
- 3:I[26704,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
4
- 4:I[22140,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
5
- 5:I[39756,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
6
- 6:I[37457,["/_next/static/chunks/0o3_.p5ivp5sp.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
7
- :HL["/_next/static/chunks/0j-zyy6.adwtl.css","style"]
8
- 0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0j-zyy6.adwtl.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/0o3_.p5ivp5sp.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en","className":"geist_mono_8d43a2aa-module__8Li5zG__variable h-full","children":["$","body",null,{"className":"h-full flex flex-col","children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","div",null,{"className":"flex flex-1 min-h-0","children":[["$","$L4",null,{}],["$","main",null,{"className":"flex-1 min-w-0 overflow-auto","children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]]}]]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"ZT6D996Dw9auBgcm_HHTY"}
2
+ 2:I[43688,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
3
+ 3:I[26704,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
4
+ 4:I[22140,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
5
+ 5:I[39756,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
6
+ 6:I[37457,["/_next/static/chunks/152f2hu-ivy6f.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
7
+ :HL["/_next/static/chunks/0koy9hplvko3w.css","style"]
8
+ 0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0koy9hplvko3w.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/152f2hu-ivy6f.js","async":true}],["$","script","script-1",{"src":"/_next/static/chunks/0d3shmwh5_nmn.js","async":true}]],["$","html",null,{"lang":"en","className":"geist_mono_8d43a2aa-module__8Li5zG__variable h-full","children":["$","body",null,{"className":"h-full flex flex-col","children":[["$","$L2",null,{}],["$","$L3",null,{}],["$","div",null,{"className":"flex flex-1 min-h-0","children":[["$","$L4",null,{}],["$","main",null,{"className":"flex-1 min-w-0 overflow-auto","children":["$","$L5",null,{"parallelRouterKey":"children","template":["$","$L6",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]}]]}]]}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"KleEGCyPe1ovSiWKr9GnB"}
@@ -1,3 +1,3 @@
1
- :HL["/_next/static/chunks/0j-zyy6.adwtl.css","style"]
1
+ :HL["/_next/static/chunks/0koy9hplvko3w.css","style"]
2
2
  :HL["/_next/static/media/797e433ab948586e-s.p.0.q-h669a_dqa.woff2","font",{"crossOrigin":"","type":"font/woff2"}]
3
- 0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"ZT6D996Dw9auBgcm_HHTY"}
3
+ 0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"KleEGCyPe1ovSiWKr9GnB"}
@@ -0,0 +1 @@
1
+ self.__SSG_MANIFEST=new Set(["\u002Fproject\u002F[id]","\u002Fproject\u002F[id]\u002Fqueue"]);self.__SSG_MANIFEST_CB&&self.__SSG_MANIFEST_CB()