quadwork 1.10.1 → 1.11.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.
- package/bin/quadwork.js +84 -56
- package/out/404.html +1 -1
- package/out/__next.__PAGE__.txt +1 -1
- package/out/__next._full.txt +1 -1
- package/out/__next._head.txt +1 -1
- package/out/__next._index.txt +1 -1
- package/out/__next._tree.txt +1 -1
- package/out/_next/static/chunks/{16g.ca89g7fib.js → 0n~dq4kpx9xxx.js} +1 -1
- package/out/_next/static/chunks/turbopack-0qm-e3ifrz~2u.js +1 -0
- package/out/_not-found/__next._full.txt +1 -1
- package/out/_not-found/__next._head.txt +1 -1
- package/out/_not-found/__next._index.txt +1 -1
- package/out/_not-found/__next._not-found.__PAGE__.txt +1 -1
- package/out/_not-found/__next._not-found.txt +1 -1
- package/out/_not-found/__next._tree.txt +1 -1
- package/out/_not-found.html +1 -1
- package/out/_not-found.txt +1 -1
- package/out/app-shell/__next._full.txt +1 -1
- package/out/app-shell/__next._head.txt +1 -1
- package/out/app-shell/__next._index.txt +1 -1
- package/out/app-shell/__next._tree.txt +1 -1
- package/out/app-shell/__next.app-shell.__PAGE__.txt +1 -1
- package/out/app-shell/__next.app-shell.txt +1 -1
- package/out/app-shell.html +1 -1
- package/out/app-shell.txt +1 -1
- package/out/index.html +1 -1
- package/out/index.txt +1 -1
- package/out/project/_/__next._full.txt +1 -1
- package/out/project/_/__next._head.txt +1 -1
- package/out/project/_/__next._index.txt +1 -1
- package/out/project/_/__next._tree.txt +1 -1
- package/out/project/_/__next.project.$d$id.__PAGE__.txt +1 -1
- package/out/project/_/__next.project.$d$id.txt +1 -1
- package/out/project/_/__next.project.txt +1 -1
- package/out/project/_/queue/__next._full.txt +1 -1
- package/out/project/_/queue/__next._head.txt +1 -1
- package/out/project/_/queue/__next._index.txt +1 -1
- package/out/project/_/queue/__next._tree.txt +1 -1
- package/out/project/_/queue/__next.project.$d$id.queue.__PAGE__.txt +1 -1
- package/out/project/_/queue/__next.project.$d$id.queue.txt +1 -1
- package/out/project/_/queue/__next.project.$d$id.txt +1 -1
- package/out/project/_/queue/__next.project.txt +1 -1
- package/out/project/_/queue.html +1 -1
- package/out/project/_/queue.txt +1 -1
- package/out/project/_.html +1 -1
- package/out/project/_.txt +1 -1
- package/out/settings/__next._full.txt +1 -1
- package/out/settings/__next._head.txt +1 -1
- package/out/settings/__next._index.txt +1 -1
- package/out/settings/__next._tree.txt +1 -1
- package/out/settings/__next.settings.__PAGE__.txt +1 -1
- package/out/settings/__next.settings.txt +1 -1
- package/out/settings.html +1 -1
- package/out/settings.txt +1 -1
- package/out/setup/__next._full.txt +1 -1
- package/out/setup/__next._head.txt +1 -1
- package/out/setup/__next._index.txt +1 -1
- package/out/setup/__next._tree.txt +1 -1
- package/out/setup/__next.setup.__PAGE__.txt +1 -1
- package/out/setup/__next.setup.txt +1 -1
- package/out/setup.html +1 -1
- package/out/setup.txt +1 -1
- package/package.json +2 -2
- package/server/config.js +29 -5
- package/server/index.js +84 -25
- package/server/install-agentchattr.js +12 -11
- package/server/routes.js +27 -30
- package/out/_next/static/chunks/turbopack-0lcwh84lrj9gi.js +0 -1
- /package/out/_next/static/{MA2-1YByee5M0-bbLgqQD → a1_CwwdhUp5-lHCPnFaTw}/_buildManifest.js +0 -0
- /package/out/_next/static/{MA2-1YByee5M0-bbLgqQD → a1_CwwdhUp5-lHCPnFaTw}/_clientMiddlewareManifest.js +0 -0
- /package/out/_next/static/{MA2-1YByee5M0-bbLgqQD → a1_CwwdhUp5-lHCPnFaTw}/_ssgManifest.js +0 -0
package/bin/quadwork.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
const {
|
|
3
|
+
const { execFileSync, spawn } = require("child_process");
|
|
4
4
|
const fs = require("fs");
|
|
5
5
|
const path = require("path");
|
|
6
6
|
const os = require("os");
|
|
@@ -29,6 +29,13 @@ const AGENTCHATTR_PIN = "3e71d4267572579e7ffeb83576645f90932c1849";
|
|
|
29
29
|
// #444: same pattern for realproject7/agentchattr-telegram.
|
|
30
30
|
const AGENTCHATTR_TELEGRAM_PIN = "4a6b45f1794c612328b9d5ee6d6fcb3f77015abc";
|
|
31
31
|
|
|
32
|
+
// ─── Permission Helpers ────────────────────────────────────────────────────
|
|
33
|
+
|
|
34
|
+
function ensureSecureDir(dir) {
|
|
35
|
+
fs.mkdirSync(dir, { recursive: true, mode: 0o700 });
|
|
36
|
+
try { fs.chmodSync(dir, 0o700); } catch {}
|
|
37
|
+
}
|
|
38
|
+
|
|
32
39
|
// ─── ANSI Helpers ──────────────────────────────────────────────────────────
|
|
33
40
|
|
|
34
41
|
const isTTY = process.stdout.isTTY;
|
|
@@ -67,16 +74,16 @@ function spinner(msg) {
|
|
|
67
74
|
};
|
|
68
75
|
}
|
|
69
76
|
|
|
70
|
-
function run(cmd, opts = {}) {
|
|
77
|
+
function run(cmd, args = [], opts = {}) {
|
|
71
78
|
try {
|
|
72
|
-
return
|
|
79
|
+
return execFileSync(cmd, args, { encoding: "utf-8", stdio: "pipe", ...opts }).trim();
|
|
73
80
|
} catch {
|
|
74
81
|
return null;
|
|
75
82
|
}
|
|
76
83
|
}
|
|
77
84
|
|
|
78
85
|
function which(cmd) {
|
|
79
|
-
return run(
|
|
86
|
+
return run("which", [cmd]) !== null;
|
|
80
87
|
}
|
|
81
88
|
|
|
82
89
|
/**
|
|
@@ -156,7 +163,7 @@ function installAgentChattr(dir) {
|
|
|
156
163
|
// other when two projects (or two web tabs) launch simultaneously. Lock
|
|
157
164
|
// file lives next to the install dir so it's scoped per-target.
|
|
158
165
|
const lockFile = `${dir}.install.lock`;
|
|
159
|
-
try {
|
|
166
|
+
try { ensureSecureDir(path.dirname(lockFile)); }
|
|
160
167
|
catch (e) { return setError(`Cannot create parent of ${dir}: ${e.message}`); }
|
|
161
168
|
|
|
162
169
|
let acquired = false;
|
|
@@ -164,7 +171,7 @@ function installAgentChattr(dir) {
|
|
|
164
171
|
while (!acquired) {
|
|
165
172
|
try {
|
|
166
173
|
// Atomic create: fails if file already exists, no TOCTOU race.
|
|
167
|
-
fs.writeFileSync(lockFile, `${process.pid}:${Date.now()}`, { flag: "wx" });
|
|
174
|
+
fs.writeFileSync(lockFile, `${process.pid}:${Date.now()}`, { mode: 0o600, flag: "wx" });
|
|
168
175
|
acquired = true;
|
|
169
176
|
} catch (e) {
|
|
170
177
|
if (e.code !== "EEXIST") return setError(`Cannot create install lock ${lockFile}: ${e.message}`);
|
|
@@ -201,8 +208,8 @@ function installAgentChattr(dir) {
|
|
|
201
208
|
}
|
|
202
209
|
// Synchronous sleep — installAgentChattr is itself synchronous and
|
|
203
210
|
// is called from the CLI wizard, where blocking is acceptable.
|
|
204
|
-
// Use
|
|
205
|
-
try { require("child_process").
|
|
211
|
+
// Use execFileSync('sleep') instead of a busy-wait so we don't pin a CPU.
|
|
212
|
+
try { require("child_process").execFileSync("sleep", [String(INSTALL_LOCK_POLL_MS / 1000)], { stdio: "pipe" }); }
|
|
206
213
|
catch { /* sleep interrupted; loop will recheck */ }
|
|
207
214
|
}
|
|
208
215
|
}
|
|
@@ -231,7 +238,7 @@ function _installAgentChattrLocked(dir, setError) {
|
|
|
231
238
|
catch (e) { return setError(`Cannot remove empty dir ${dir}: ${e.message}`); }
|
|
232
239
|
} else if (fs.existsSync(path.join(dir, ".git"))) {
|
|
233
240
|
// Only remove if origin remote positively identifies this as agentchattr.
|
|
234
|
-
const remote = run(
|
|
241
|
+
const remote = run("git", ["-C", dir, "remote", "get-url", "origin"]);
|
|
235
242
|
if (remote && remote.includes("agentchattr")) {
|
|
236
243
|
try { fs.rmSync(dir, { recursive: true, force: true }); }
|
|
237
244
|
catch (e) { return setError(`Cannot remove failed clone at ${dir}: ${e.message}`); }
|
|
@@ -243,9 +250,9 @@ function _installAgentChattrLocked(dir, setError) {
|
|
|
243
250
|
}
|
|
244
251
|
}
|
|
245
252
|
// Ensure parent exists before clone (supports arbitrary nested paths).
|
|
246
|
-
try {
|
|
253
|
+
try { ensureSecureDir(path.dirname(dir)); }
|
|
247
254
|
catch (e) { return setError(`Cannot create parent of ${dir}: ${e.message}`); }
|
|
248
|
-
const cloneResult = run(
|
|
255
|
+
const cloneResult = run("git", ["clone", AGENTCHATTR_REPO, dir], { timeout: 60000 });
|
|
249
256
|
if (cloneResult === null) return setError(`git clone of ${AGENTCHATTR_REPO} into ${dir} failed`);
|
|
250
257
|
if (!fs.existsSync(runPy)) return setError(`Clone completed but run.py missing at ${dir}`);
|
|
251
258
|
// #348: pin to the known-good AgentChattr commit shipped with
|
|
@@ -261,7 +268,7 @@ function _installAgentChattrLocked(dir, setError) {
|
|
|
261
268
|
// On failure (commit unreachable / force-pushed away), fall
|
|
262
269
|
// back to the default branch with a loud warning instead of
|
|
263
270
|
// hard-failing the install.
|
|
264
|
-
const pinResult = run(
|
|
271
|
+
const pinResult = run("git", ["-C", dir, "checkout", "-B", "pinned", AGENTCHATTR_PIN], { timeout: 30000 });
|
|
265
272
|
if (pinResult === null) {
|
|
266
273
|
try { console.warn(`[quadwork] WARNING: could not check out AgentChattr pin ${AGENTCHATTR_PIN} at ${dir}; falling back to default branch. The upstream commit may have been force-pushed away — update AGENTCHATTR_PIN in bin/quadwork.js for reproducible installs.`); } catch {}
|
|
267
274
|
}
|
|
@@ -274,10 +281,10 @@ function _installAgentChattrLocked(dir, setError) {
|
|
|
274
281
|
// clone is on a different SHA (drift) or already on a named
|
|
275
282
|
// branch (operator may have set up their own work branch on
|
|
276
283
|
// top); doctor will flag drift cases.
|
|
277
|
-
const headSha = (run(
|
|
278
|
-
const headRef = (run(
|
|
284
|
+
const headSha = (run("git", ["-C", dir, "rev-parse", "HEAD"]) || "").trim();
|
|
285
|
+
const headRef = (run("git", ["-C", dir, "symbolic-ref", "--quiet", "HEAD"]) || "").trim();
|
|
279
286
|
if (headSha === AGENTCHATTR_PIN && !headRef) {
|
|
280
|
-
const migrateResult = run(
|
|
287
|
+
const migrateResult = run("git", ["-C", dir, "checkout", "-B", "pinned", AGENTCHATTR_PIN], { timeout: 30000 });
|
|
281
288
|
if (migrateResult === null) {
|
|
282
289
|
try { console.warn(`[quadwork] WARNING: could not migrate ${dir} from detached HEAD to the 'pinned' branch.`); } catch {}
|
|
283
290
|
}
|
|
@@ -286,7 +293,7 @@ function _installAgentChattrLocked(dir, setError) {
|
|
|
286
293
|
|
|
287
294
|
// 2. Create venv if missing.
|
|
288
295
|
if (!fs.existsSync(venvPython)) {
|
|
289
|
-
const venvResult = run(
|
|
296
|
+
const venvResult = run("python3", ["-m", "venv", path.join(dir, ".venv")], { timeout: 60000 });
|
|
290
297
|
if (venvResult === null) return setError(`python3 -m venv failed at ${dir}/.venv (is python3 installed?)`);
|
|
291
298
|
if (!fs.existsSync(venvPython)) return setError(`venv created but ${venvPython} missing`);
|
|
292
299
|
venvJustCreated = true;
|
|
@@ -297,7 +304,7 @@ function _installAgentChattrLocked(dir, setError) {
|
|
|
297
304
|
if (venvJustCreated) {
|
|
298
305
|
const reqFile = path.join(dir, "requirements.txt");
|
|
299
306
|
if (fs.existsSync(reqFile)) {
|
|
300
|
-
const pipResult = run(
|
|
307
|
+
const pipResult = run(venvPython, ["-m", "pip", "install", "-r", reqFile], { timeout: 120000 });
|
|
301
308
|
if (pipResult === null) return setError(`pip install -r ${reqFile} failed`);
|
|
302
309
|
}
|
|
303
310
|
}
|
|
@@ -410,8 +417,9 @@ function readConfig() {
|
|
|
410
417
|
}
|
|
411
418
|
|
|
412
419
|
function writeConfig(config) {
|
|
413
|
-
if (!fs.existsSync(CONFIG_DIR))
|
|
414
|
-
fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2));
|
|
420
|
+
if (!fs.existsSync(CONFIG_DIR)) ensureSecureDir(CONFIG_DIR);
|
|
421
|
+
fs.writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), { mode: 0o600 });
|
|
422
|
+
try { fs.chmodSync(CONFIG_PATH, 0o600); } catch {}
|
|
415
423
|
}
|
|
416
424
|
|
|
417
425
|
// ─── Prerequisites ──────────────────────────────────────────────────────────
|
|
@@ -432,8 +440,8 @@ function detectPlatform() {
|
|
|
432
440
|
}
|
|
433
441
|
|
|
434
442
|
async function tryInstall(rl, name, description, commands, { platform } = {}) {
|
|
435
|
-
const
|
|
436
|
-
if (!
|
|
443
|
+
const cmdSpec = typeof commands === "function" ? commands(platform) : commands;
|
|
444
|
+
if (!cmdSpec) {
|
|
437
445
|
warn(`${name} cannot be auto-installed on your system.`);
|
|
438
446
|
return false;
|
|
439
447
|
}
|
|
@@ -445,7 +453,8 @@ async function tryInstall(rl, name, description, commands, { platform } = {}) {
|
|
|
445
453
|
return false;
|
|
446
454
|
}
|
|
447
455
|
const sp = spinner(`Installing ${name}...`);
|
|
448
|
-
const
|
|
456
|
+
const [cmd, ...args] = cmdSpec;
|
|
457
|
+
const result = run(cmd, args, { timeout: 120000 });
|
|
449
458
|
if (result !== null) {
|
|
450
459
|
sp.stop(true);
|
|
451
460
|
return true;
|
|
@@ -463,7 +472,7 @@ async function checkPrereqs(rl) {
|
|
|
463
472
|
let hasPython = false;
|
|
464
473
|
|
|
465
474
|
// ── 1. Node.js 20+ (must already exist — user ran npx) ──
|
|
466
|
-
const nodeVer = run("node --version");
|
|
475
|
+
const nodeVer = run("node", ["--version"]);
|
|
467
476
|
if (nodeVer) {
|
|
468
477
|
const major = parseInt(nodeVer.replace("v", "").split(".")[0], 10);
|
|
469
478
|
if (major >= 20) {
|
|
@@ -499,7 +508,7 @@ async function checkPrereqs(rl) {
|
|
|
499
508
|
}
|
|
500
509
|
|
|
501
510
|
// ── 3. Python 3.10+ (manual install — guide only) ──
|
|
502
|
-
const pyVer = run("python3 --version");
|
|
511
|
+
const pyVer = run("python3", ["--version"]);
|
|
503
512
|
if (pyVer) {
|
|
504
513
|
const parts = pyVer.replace("Python ", "").split(".");
|
|
505
514
|
const minor = parseInt(parts[1], 10);
|
|
@@ -577,9 +586,9 @@ async function checkPrereqs(rl) {
|
|
|
577
586
|
console.log("");
|
|
578
587
|
warn("GitHub CLI is required for agents to create branches, PRs, and reviews.");
|
|
579
588
|
const ghCmd = (p) => {
|
|
580
|
-
if (p === "macos") return "brew install gh";
|
|
581
|
-
if (p === "linux-apt") return "sudo apt install gh -y";
|
|
582
|
-
if (p === "linux-dnf") return "sudo dnf install gh -y";
|
|
589
|
+
if (p === "macos") return ["brew", "install", "gh"];
|
|
590
|
+
if (p === "linux-apt") return ["sudo", "apt", "install", "gh", "-y"];
|
|
591
|
+
if (p === "linux-dnf") return ["sudo", "dnf", "install", "gh", "-y"];
|
|
583
592
|
return null;
|
|
584
593
|
};
|
|
585
594
|
const cmd = ghCmd(platform);
|
|
@@ -623,7 +632,11 @@ async function checkPrereqs(rl) {
|
|
|
623
632
|
if (installClaude) {
|
|
624
633
|
log(`Running: ${npmPrefix}npm install -g @anthropic-ai/claude-code`);
|
|
625
634
|
try {
|
|
626
|
-
|
|
635
|
+
if (npmPrefix) {
|
|
636
|
+
execFileSync("sudo", ["npm", "install", "-g", "@anthropic-ai/claude-code"], { stdio: "inherit", timeout: 120000 });
|
|
637
|
+
} else {
|
|
638
|
+
execFileSync("npm", ["install", "-g", "@anthropic-ai/claude-code"], { stdio: "inherit", timeout: 120000 });
|
|
639
|
+
}
|
|
627
640
|
hasClaude = which("claude");
|
|
628
641
|
if (hasClaude) ok("Claude Code installed");
|
|
629
642
|
else warn(`Install seemed to succeed but 'claude' not found on PATH. Try restarting your terminal.`);
|
|
@@ -645,7 +658,11 @@ async function checkPrereqs(rl) {
|
|
|
645
658
|
if (installCodex) {
|
|
646
659
|
log(`Running: ${npmPrefix}npm install -g @openai/codex`);
|
|
647
660
|
try {
|
|
648
|
-
|
|
661
|
+
if (npmPrefix) {
|
|
662
|
+
execFileSync("sudo", ["npm", "install", "-g", "@openai/codex"], { stdio: "inherit", timeout: 120000 });
|
|
663
|
+
} else {
|
|
664
|
+
execFileSync("npm", ["install", "-g", "@openai/codex"], { stdio: "inherit", timeout: 120000 });
|
|
665
|
+
}
|
|
649
666
|
hasCodex = which("codex");
|
|
650
667
|
if (hasCodex) ok("Codex CLI installed");
|
|
651
668
|
else warn(`Install seemed to succeed but 'codex' not found on PATH. Try restarting your terminal.`);
|
|
@@ -668,7 +685,7 @@ async function checkPrereqs(rl) {
|
|
|
668
685
|
console.log("");
|
|
669
686
|
|
|
670
687
|
// GitHub CLI auth
|
|
671
|
-
const ghAuth = run("gh auth status
|
|
688
|
+
const ghAuth = run("gh", ["auth", "status"]);
|
|
672
689
|
if (ghAuth && ghAuth.includes("Logged in")) {
|
|
673
690
|
ok("GitHub CLI — authenticated");
|
|
674
691
|
} else {
|
|
@@ -693,7 +710,7 @@ async function checkPrereqs(rl) {
|
|
|
693
710
|
|
|
694
711
|
// Claude Code auth
|
|
695
712
|
if (hasClaude) {
|
|
696
|
-
const claudeAuth = run("claude auth status
|
|
713
|
+
const claudeAuth = run("claude", ["auth", "status"]) || run("claude", ["--version"]);
|
|
697
714
|
if (claudeAuth && (claudeAuth.includes("authenticated") || claudeAuth.includes("Logged in") || claudeAuth.includes("@"))) {
|
|
698
715
|
ok("Claude Code — authenticated");
|
|
699
716
|
} else {
|
|
@@ -717,7 +734,7 @@ async function checkPrereqs(rl) {
|
|
|
717
734
|
|
|
718
735
|
// Codex CLI auth
|
|
719
736
|
if (hasCodex) {
|
|
720
|
-
const codexAuth = run("codex login status
|
|
737
|
+
const codexAuth = run("codex", ["login", "status"]) || run("codex", ["--version"]);
|
|
721
738
|
if (codexAuth && (codexAuth.includes("authenticated") || codexAuth.includes("Logged in") || codexAuth.includes("@"))) {
|
|
722
739
|
ok("Codex CLI — authenticated");
|
|
723
740
|
} else {
|
|
@@ -759,7 +776,7 @@ async function setupGitHub(rl) {
|
|
|
759
776
|
header("Step 2: GitHub Connection");
|
|
760
777
|
|
|
761
778
|
// Check auth
|
|
762
|
-
const authStatus = run("gh auth status
|
|
779
|
+
const authStatus = run("gh", ["auth", "status"]);
|
|
763
780
|
if (authStatus && authStatus.includes("Logged in")) {
|
|
764
781
|
ok("GitHub authenticated");
|
|
765
782
|
} else {
|
|
@@ -776,7 +793,7 @@ async function setupGitHub(rl) {
|
|
|
776
793
|
|
|
777
794
|
// Verify repo exists
|
|
778
795
|
const sp = spinner(`Verifying ${repo}...`);
|
|
779
|
-
const repoCheck = run(
|
|
796
|
+
const repoCheck = run("gh", ["repo", "view", repo, "--json", "name"]);
|
|
780
797
|
if (repoCheck && repoCheck.includes('"name"')) {
|
|
781
798
|
sp.stop(true);
|
|
782
799
|
} else {
|
|
@@ -873,11 +890,11 @@ async function setupAgents(rl, repo) {
|
|
|
873
890
|
const wtSpinner = spinner("Creating worktrees and seeding files...");
|
|
874
891
|
|
|
875
892
|
// Empty repos have no commits — git worktree add requires at least one.
|
|
876
|
-
const headCheck = run(
|
|
893
|
+
const headCheck = run("git", ["-C", absDir, "rev-parse", "HEAD"]);
|
|
877
894
|
if (!headCheck || headCheck.includes("fatal")) {
|
|
878
|
-
run(
|
|
879
|
-
const defaultBranch = run(
|
|
880
|
-
run(
|
|
895
|
+
run("git", ["-C", absDir, "commit", "--allow-empty", "-m", "Initial commit (created by QuadWork setup)"]);
|
|
896
|
+
const defaultBranch = run("git", ["-C", absDir, "symbolic-ref", "--short", "HEAD"]) || "main";
|
|
897
|
+
run("git", ["-C", absDir, "push", "origin", defaultBranch]);
|
|
881
898
|
}
|
|
882
899
|
|
|
883
900
|
const worktrees = {};
|
|
@@ -886,10 +903,10 @@ async function setupAgents(rl, repo) {
|
|
|
886
903
|
const wtDir = path.join(path.dirname(absDir), `${projectName}-${agent}`);
|
|
887
904
|
if (!fs.existsSync(wtDir)) {
|
|
888
905
|
const branchName = `worktree-${agent}`;
|
|
889
|
-
run(
|
|
890
|
-
const result = run(
|
|
906
|
+
run("git", ["-C", absDir, "branch", branchName, "HEAD"]);
|
|
907
|
+
const result = run("git", ["-C", absDir, "worktree", "add", wtDir, branchName]);
|
|
891
908
|
if (!result) {
|
|
892
|
-
const result2 = run(
|
|
909
|
+
const result2 = run("git", ["-C", absDir, "worktree", "add", "--detach", wtDir, "HEAD"]);
|
|
893
910
|
if (!result2) { wtFailed = agent; break; }
|
|
894
911
|
}
|
|
895
912
|
}
|
|
@@ -962,7 +979,7 @@ function writeAgentChattrConfig(setup, configTomlPath, { skipInstall = false } =
|
|
|
962
979
|
|
|
963
980
|
// Per-project: isolated data dir and port
|
|
964
981
|
const dataDir = path.join(path.dirname(configTomlPath), "data");
|
|
965
|
-
if (!fs.existsSync(dataDir))
|
|
982
|
+
if (!fs.existsSync(dataDir)) ensureSecureDir(dataDir);
|
|
966
983
|
// Read assigned port from config (set by writeQuadWorkConfig)
|
|
967
984
|
const existingConfig = readConfig();
|
|
968
985
|
const existingProject = existingConfig.projects?.find((p) => p.id === setup.projectName);
|
|
@@ -983,7 +1000,7 @@ function writeAgentChattrConfig(setup, configTomlPath, { skipInstall = false } =
|
|
|
983
1000
|
|
|
984
1001
|
// Write config.toml
|
|
985
1002
|
const configDir = path.dirname(configTomlPath);
|
|
986
|
-
if (!fs.existsSync(configDir))
|
|
1003
|
+
if (!fs.existsSync(configDir)) ensureSecureDir(configDir);
|
|
987
1004
|
fs.writeFileSync(configTomlPath, tomlContent);
|
|
988
1005
|
ok(`Wrote ${configTomlPath}`);
|
|
989
1006
|
|
|
@@ -1026,7 +1043,7 @@ function writeAgentChattrConfig(setup, configTomlPath, { skipInstall = false } =
|
|
|
1026
1043
|
acProc.unref();
|
|
1027
1044
|
if (acProc.pid) {
|
|
1028
1045
|
ok(`AgentChattr started (PID: ${acProc.pid})`);
|
|
1029
|
-
if (!fs.existsSync(CONFIG_DIR))
|
|
1046
|
+
if (!fs.existsSync(CONFIG_DIR)) ensureSecureDir(CONFIG_DIR);
|
|
1030
1047
|
const pidFile = path.join(CONFIG_DIR, `agentchattr-${setup.projectName}.pid`);
|
|
1031
1048
|
fs.writeFileSync(pidFile, String(acProc.pid));
|
|
1032
1049
|
} else {
|
|
@@ -1055,7 +1072,7 @@ async function setupAddons(rl, setup, configTomlPath) {
|
|
|
1055
1072
|
const telegramDir = path.join(path.dirname(setup.absDir), "agentchattr-telegram");
|
|
1056
1073
|
if (!fs.existsSync(telegramDir)) {
|
|
1057
1074
|
const cloneSpinner = spinner("Cloning agentchattr-telegram...");
|
|
1058
|
-
const cloneResult = run(
|
|
1075
|
+
const cloneResult = run("git", ["clone", "https://github.com/realproject7/agentchattr-telegram.git", telegramDir]);
|
|
1059
1076
|
cloneSpinner.stop(cloneResult !== null);
|
|
1060
1077
|
if (!cloneResult) { warn("You can set it up manually later"); }
|
|
1061
1078
|
} else {
|
|
@@ -1065,8 +1082,8 @@ async function setupAddons(rl, setup, configTomlPath) {
|
|
|
1065
1082
|
// upgrade (existing clone may be on an older pin with stale
|
|
1066
1083
|
// bridge_sender defaults).
|
|
1067
1084
|
if (fs.existsSync(telegramDir)) {
|
|
1068
|
-
run(
|
|
1069
|
-
const pinResult = run(
|
|
1085
|
+
run("git", ["-C", telegramDir, "fetch", "origin"], { timeout: 30000 });
|
|
1086
|
+
const pinResult = run("git", ["-C", telegramDir, "checkout", "-B", "pinned", AGENTCHATTR_TELEGRAM_PIN], { timeout: 30000 });
|
|
1070
1087
|
if (pinResult === null) {
|
|
1071
1088
|
try { console.warn(`[quadwork] WARNING: could not check out agentchattr-telegram pin ${AGENTCHATTR_TELEGRAM_PIN} at ${telegramDir}; falling back to default branch.`); } catch {}
|
|
1072
1089
|
}
|
|
@@ -1076,7 +1093,7 @@ async function setupAddons(rl, setup, configTomlPath) {
|
|
|
1076
1093
|
const reqFile = path.join(telegramDir, "requirements.txt");
|
|
1077
1094
|
if (fs.existsSync(reqFile)) {
|
|
1078
1095
|
const tgSpinner = spinner("Installing Telegram Bridge dependencies...");
|
|
1079
|
-
const tgResult = run(
|
|
1096
|
+
const tgResult = run("pip", ["install", "-r", reqFile]);
|
|
1080
1097
|
tgSpinner.stop(tgResult !== null);
|
|
1081
1098
|
}
|
|
1082
1099
|
|
|
@@ -1187,7 +1204,7 @@ function writeOvernightQueueFile(projectName, repo) {
|
|
|
1187
1204
|
const queueDir = path.join(CONFIG_DIR, projectName);
|
|
1188
1205
|
const queuePath = path.join(queueDir, "OVERNIGHT-QUEUE.md");
|
|
1189
1206
|
if (fs.existsSync(queuePath)) return false;
|
|
1190
|
-
try {
|
|
1207
|
+
try { ensureSecureDir(queueDir); }
|
|
1191
1208
|
catch (e) { warn(`Could not create ${queueDir}: ${e.message}`); return false; }
|
|
1192
1209
|
const templatePath = path.join(TEMPLATES_DIR, "OVERNIGHT-QUEUE.md");
|
|
1193
1210
|
if (!fs.existsSync(templatePath)) {
|
|
@@ -1369,9 +1386,15 @@ async function cmdInit() {
|
|
|
1369
1386
|
rl.close();
|
|
1370
1387
|
|
|
1371
1388
|
// Schedule browser open after the server has had a moment to bind.
|
|
1372
|
-
const openCmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
|
|
1373
1389
|
setTimeout(() => {
|
|
1374
|
-
try {
|
|
1390
|
+
try {
|
|
1391
|
+
const url = `${dashboardUrl}/setup`;
|
|
1392
|
+
if (process.platform === "win32") {
|
|
1393
|
+
execFileSync("cmd", ["/c", "start", url], { stdio: "ignore" });
|
|
1394
|
+
} else {
|
|
1395
|
+
execFileSync(process.platform === "darwin" ? "open" : "xdg-open", [url], { stdio: "ignore" });
|
|
1396
|
+
}
|
|
1397
|
+
} catch {}
|
|
1375
1398
|
}, 1500);
|
|
1376
1399
|
|
|
1377
1400
|
// Run the server in the foreground. require() starts the express
|
|
@@ -1677,9 +1700,14 @@ function cmdStart() {
|
|
|
1677
1700
|
|
|
1678
1701
|
// Open dashboard in browser after a short delay
|
|
1679
1702
|
const dashboardUrl = `http://127.0.0.1:${port}`;
|
|
1680
|
-
const openCmd = process.platform === "darwin" ? "open" : process.platform === "win32" ? "start" : "xdg-open";
|
|
1681
1703
|
setTimeout(() => {
|
|
1682
|
-
try {
|
|
1704
|
+
try {
|
|
1705
|
+
if (process.platform === "win32") {
|
|
1706
|
+
execFileSync("cmd", ["/c", "start", dashboardUrl], { stdio: "ignore" });
|
|
1707
|
+
} else {
|
|
1708
|
+
execFileSync(process.platform === "darwin" ? "open" : "xdg-open", [dashboardUrl], { stdio: "ignore" });
|
|
1709
|
+
}
|
|
1710
|
+
} catch {}
|
|
1683
1711
|
}, 1500);
|
|
1684
1712
|
|
|
1685
1713
|
// Run server in foreground. Capture exports so the SIGINT handler
|
|
@@ -1749,7 +1777,7 @@ function cmdStop() {
|
|
|
1749
1777
|
const cfg = readConfig();
|
|
1750
1778
|
const qwPort = cfg.port || 8400;
|
|
1751
1779
|
try {
|
|
1752
|
-
const result = run(
|
|
1780
|
+
const result = run("curl", ["-s", "-X", "POST", `http://127.0.0.1:${qwPort}/api/caffeinate/stop`]);
|
|
1753
1781
|
if (result && result.includes('"ok":true')) {
|
|
1754
1782
|
ok("Stopped caffeinate (sleep prevention)");
|
|
1755
1783
|
stopped++;
|
|
@@ -1921,7 +1949,7 @@ function cmdDoctor() {
|
|
|
1921
1949
|
console.log("");
|
|
1922
1950
|
const cloneShaAt = (dir) => {
|
|
1923
1951
|
if (!fs.existsSync(path.join(dir, ".git"))) return null;
|
|
1924
|
-
const sha = run(
|
|
1952
|
+
const sha = run("git", ["-C", dir, "rev-parse", "HEAD"]);
|
|
1925
1953
|
return sha ? sha.trim() : null;
|
|
1926
1954
|
};
|
|
1927
1955
|
// #366: surface whether the clone is on the named `pinned`
|
|
@@ -1929,7 +1957,7 @@ function cmdDoctor() {
|
|
|
1929
1957
|
// Detached-HEAD-but-on-pin gets a soft warning so operators
|
|
1930
1958
|
// know to re-run install (which auto-migrates) or re-clone.
|
|
1931
1959
|
const cloneBranchAt = (dir) => {
|
|
1932
|
-
const ref = run(
|
|
1960
|
+
const ref = run("git", ["-C", dir, "symbolic-ref", "--quiet", "HEAD"]);
|
|
1933
1961
|
if (!ref) return null; // detached
|
|
1934
1962
|
return ref.trim().replace(/^refs\/heads\//, "");
|
|
1935
1963
|
};
|
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/0a4.d381szseh.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/0rxi-m9onh_sa.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="shrink-0 h-full border-r border-border bg-bg-surface flex flex-col py-3 transition-[width] duration-200 ease-in-out overflow-hidden w-16 items-center"><a class="flex items-center gap-2 rounded-sm transition-colors w-10 h-10 justify-center self-center 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="h-px bg-border my-2 w-6 self-center"></div><div class="flex-1 flex flex-col gap-2 overflow-y-auto min-h-0 items-center"><a class="flex items-center gap-2 rounded-full transition-colors w-10 h-10 justify-center border border-dashed border-border text-text-muted hover:text-text hover:bg-[#1a1a1a]" 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="h-px bg-border my-2 w-6 self-center"></div><button class="flex shrink-0 items-center justify-center w-10 h-10 rounded-sm border border-border text-text-muted hover:text-accent hover:border-accent/50 transition-colors self-center" title="Expand sidebar"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M6 3l5 5-5 5"></path></svg></button><div class="h-1"></div><a class="flex items-center gap-2 rounded-sm transition-colors w-10 h-10 justify-center self-center 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,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";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/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n3:I[26704,[\"/_next/static/chunks/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n4:I[22140,[\"/_next/static/chunks/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n5:I[39756,[\"/_next/static/chunks/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n6:I[37457,[\"/_next/static/chunks/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n7:I[97367,[\"/_next/static/chunks/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"OutletBoundary\"]\n8:\"$Sreact.suspense\"\nb:I[97367,[\"/_next/static/chunks/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"ViewportBoundary\"]\nd:I[97367,[\"/_next/static/chunks/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"MetadataBoundary\"]\nf:I[68027,[\"/_next/static/chunks/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0a4.d381szseh.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/0a4.d381szseh.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0rxi-m9onh_sa.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/0a4.d381szseh.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"MA2-1YByee5M0-bbLgqQD\"}\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/0rxi-m9onh_sa.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
|
+
<!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/0a4.d381szseh.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/0n~dq4kpx9xxx.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-0qm-e3ifrz~2u.js" async=""></script><script src="/_next/static/chunks/0rxi-m9onh_sa.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="shrink-0 h-full border-r border-border bg-bg-surface flex flex-col py-3 transition-[width] duration-200 ease-in-out overflow-hidden w-16 items-center"><a class="flex items-center gap-2 rounded-sm transition-colors w-10 h-10 justify-center self-center 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="h-px bg-border my-2 w-6 self-center"></div><div class="flex-1 flex flex-col gap-2 overflow-y-auto min-h-0 items-center"><a class="flex items-center gap-2 rounded-full transition-colors w-10 h-10 justify-center border border-dashed border-border text-text-muted hover:text-text hover:bg-[#1a1a1a]" 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="h-px bg-border my-2 w-6 self-center"></div><button class="flex shrink-0 items-center justify-center w-10 h-10 rounded-sm border border-border text-text-muted hover:text-accent hover:border-accent/50 transition-colors self-center" title="Expand sidebar"><svg width="16" height="16" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"><path d="M6 3l5 5-5 5"></path></svg></button><div class="h-1"></div><a class="flex items-center gap-2 rounded-sm transition-colors w-10 h-10 justify-center self-center 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,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";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/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n3:I[26704,[\"/_next/static/chunks/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n4:I[22140,[\"/_next/static/chunks/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n5:I[39756,[\"/_next/static/chunks/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n6:I[37457,[\"/_next/static/chunks/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\"]\n7:I[97367,[\"/_next/static/chunks/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"OutletBoundary\"]\n8:\"$Sreact.suspense\"\nb:I[97367,[\"/_next/static/chunks/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"ViewportBoundary\"]\nd:I[97367,[\"/_next/static/chunks/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"MetadataBoundary\"]\nf:I[68027,[\"/_next/static/chunks/0rxi-m9onh_sa.js\",\"/_next/static/chunks/0d3shmwh5_nmn.js\"],\"default\",1]\n:HL[\"/_next/static/chunks/0a4.d381szseh.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/0a4.d381szseh.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}],[\"$\",\"script\",\"script-0\",{\"src\":\"/_next/static/chunks/0rxi-m9onh_sa.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/0a4.d381szseh.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"a1_CwwdhUp5-lHCPnFaTw\"}\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/0rxi-m9onh_sa.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>
|
package/out/__next.__PAGE__.txt
CHANGED
|
@@ -2,5 +2,5 @@
|
|
|
2
2
|
2:I[54338,["/_next/static/chunks/0rxi-m9onh_sa.js","/_next/static/chunks/0d3shmwh5_nmn.js","/_next/static/chunks/0aldkx8l9xukk.js"],"default"]
|
|
3
3
|
3:I[97367,["/_next/static/chunks/0rxi-m9onh_sa.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/0aldkx8l9xukk.js","async":true}]],["$","$L3",null,{"children":["$","$4",null,{"name":"Next.MetadataOutlet","children":"$@5"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"
|
|
5
|
+
0:{"rsc":["$","$1","c",{"children":[["$","$L2",null,{}],[["$","script","script-0",{"src":"/_next/static/chunks/0aldkx8l9xukk.js","async":true}]],["$","$L3",null,{"children":["$","$4",null,{"name":"Next.MetadataOutlet","children":"$@5"}]}]]}],"isPartial":false,"staleTime":300,"varyParams":null,"buildId":"a1_CwwdhUp5-lHCPnFaTw"}
|
|
6
6
|
5:null
|
package/out/__next._full.txt
CHANGED
|
@@ -12,7 +12,7 @@ d:I[97367,["/_next/static/chunks/0rxi-m9onh_sa.js","/_next/static/chunks/0d3shmw
|
|
|
12
12
|
f:I[68027,["/_next/static/chunks/0rxi-m9onh_sa.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default",1]
|
|
13
13
|
:HL["/_next/static/chunks/0a4.d381szseh.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/0a4.d381szseh.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0rxi-m9onh_sa.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/0aldkx8l9xukk.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/0a4.d381szseh.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"
|
|
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/0a4.d381szseh.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}],["$","script","script-0",{"src":"/_next/static/chunks/0rxi-m9onh_sa.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/0aldkx8l9xukk.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/0a4.d381szseh.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]]],"S":true,"h":null,"s":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"a1_CwwdhUp5-lHCPnFaTw"}
|
|
16
16
|
c:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
|
|
17
17
|
10:I[27201,["/_next/static/chunks/0rxi-m9onh_sa.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"IconMark"]
|
|
18
18
|
a:null
|
package/out/__next._head.txt
CHANGED
|
@@ -3,4 +3,4 @@
|
|
|
3
3
|
3:I[97367,["/_next/static/chunks/0rxi-m9onh_sa.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"MetadataBoundary"]
|
|
4
4
|
4:"$Sreact.suspense"
|
|
5
5
|
5:I[27201,["/_next/static/chunks/0rxi-m9onh_sa.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":"
|
|
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":"a1_CwwdhUp5-lHCPnFaTw"}
|
package/out/__next._index.txt
CHANGED
|
@@ -5,4 +5,4 @@
|
|
|
5
5
|
5:I[39756,["/_next/static/chunks/0rxi-m9onh_sa.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
|
|
6
6
|
6:I[37457,["/_next/static/chunks/0rxi-m9onh_sa.js","/_next/static/chunks/0d3shmwh5_nmn.js"],"default"]
|
|
7
7
|
:HL["/_next/static/chunks/0a4.d381szseh.css","style"]
|
|
8
|
-
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0a4.d381szseh.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/0rxi-m9onh_sa.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":"
|
|
8
|
+
0:{"rsc":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/chunks/0a4.d381szseh.css","precedence":"next"}],["$","script","script-0",{"src":"/_next/static/chunks/0rxi-m9onh_sa.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":"a1_CwwdhUp5-lHCPnFaTw"}
|
package/out/__next._tree.txt
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
:HL["/_next/static/chunks/0a4.d381szseh.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":"
|
|
3
|
+
0:{"tree":{"name":"","param":null,"prefetchHints":16,"slots":{"children":{"name":"__PAGE__","param":null,"prefetchHints":0,"slots":null}}},"staleTime":300,"buildId":"a1_CwwdhUp5-lHCPnFaTw"}
|