polymath-society 0.2.8 → 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +398 -214
- package/dist/engine/chat-loops.js +17290 -0
- package/dist/index.js +312 -193
- package/dist/pipeline/coding-day-digest.js +40 -2
- package/dist/pipeline/coding-delegation.js +27 -2
- package/dist/pipeline/coding-grade.js +29 -2
- package/dist/pipeline/coding-walkthrough.js +30 -2
- package/dist/web/app.js +363 -436
- package/dist/web/styles.css +1 -1
- package/package.json +1 -1
package/dist/web/app.js
CHANGED
|
@@ -7279,7 +7279,7 @@ var require_jsx_runtime = __commonJS({
|
|
|
7279
7279
|
});
|
|
7280
7280
|
|
|
7281
7281
|
// web/entry.tsx
|
|
7282
|
-
var
|
|
7282
|
+
var import_react9 = __toESM(require_react(), 1);
|
|
7283
7283
|
var import_client = __toESM(require_client(), 1);
|
|
7284
7284
|
|
|
7285
7285
|
// ../../components/CodeAnalysisView.tsx
|
|
@@ -8167,6 +8167,7 @@ function TypingDots() {
|
|
|
8167
8167
|
|
|
8168
8168
|
// ../../components/ReportChatSidebar.tsx
|
|
8169
8169
|
var import_jsx_runtime4 = __toESM(require_jsx_runtime());
|
|
8170
|
+
var DISMISSED = "polymath:ask-drawer-dismissed";
|
|
8170
8171
|
var STARTERS = [
|
|
8171
8172
|
"Why did I score where I did on taste?",
|
|
8172
8173
|
"What's my strongest signal, and what's the evidence?",
|
|
@@ -8184,11 +8185,26 @@ function ReportChatSidebar({ endpoint = "/api/coding/chat" } = {}) {
|
|
|
8184
8185
|
if (!isLocal) return null;
|
|
8185
8186
|
const [open, setOpen] = (0, import_react3.useState)(() => {
|
|
8186
8187
|
try {
|
|
8188
|
+
if (localStorage.getItem(DISMISSED) === "1") return false;
|
|
8187
8189
|
return window.matchMedia("(min-width: 640px)").matches;
|
|
8188
8190
|
} catch {
|
|
8189
8191
|
return false;
|
|
8190
8192
|
}
|
|
8191
8193
|
});
|
|
8194
|
+
const closeByUser = () => {
|
|
8195
|
+
setOpen(false);
|
|
8196
|
+
try {
|
|
8197
|
+
localStorage.setItem(DISMISSED, "1");
|
|
8198
|
+
} catch {
|
|
8199
|
+
}
|
|
8200
|
+
};
|
|
8201
|
+
const openByUser = () => {
|
|
8202
|
+
setOpen(true);
|
|
8203
|
+
try {
|
|
8204
|
+
localStorage.removeItem(DISMISSED);
|
|
8205
|
+
} catch {
|
|
8206
|
+
}
|
|
8207
|
+
};
|
|
8192
8208
|
const [msgs, setMsgs] = (0, import_react3.useState)([]);
|
|
8193
8209
|
const [input, setInput] = (0, import_react3.useState)("");
|
|
8194
8210
|
const [busy, setBusy] = (0, import_react3.useState)(false);
|
|
@@ -8201,7 +8217,7 @@ function ReportChatSidebar({ endpoint = "/api/coding/chat" } = {}) {
|
|
|
8201
8217
|
}, [open]);
|
|
8202
8218
|
(0, import_react3.useEffect)(() => {
|
|
8203
8219
|
const onKey = (e) => {
|
|
8204
|
-
if (e.key === "Escape")
|
|
8220
|
+
if (e.key === "Escape") closeByUser();
|
|
8205
8221
|
};
|
|
8206
8222
|
window.addEventListener("keydown", onKey);
|
|
8207
8223
|
return () => window.removeEventListener("keydown", onKey);
|
|
@@ -8235,7 +8251,7 @@ function ReportChatSidebar({ endpoint = "/api/coding/chat" } = {}) {
|
|
|
8235
8251
|
!open && /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
8236
8252
|
"button",
|
|
8237
8253
|
{
|
|
8238
|
-
onClick:
|
|
8254
|
+
onClick: openByUser,
|
|
8239
8255
|
className: "fixed bottom-5 right-5 z-40 flex items-center gap-2 rounded-full bg-accent px-4 py-3 text-[13px] font-medium text-white shadow-lg shadow-accent/25 transition-transform hover:scale-[1.03]",
|
|
8240
8256
|
"aria-label": "Ask about your report",
|
|
8241
8257
|
children: [
|
|
@@ -8247,7 +8263,7 @@ function ReportChatSidebar({ endpoint = "/api/coding/chat" } = {}) {
|
|
|
8247
8263
|
]
|
|
8248
8264
|
}
|
|
8249
8265
|
),
|
|
8250
|
-
open && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { onClick:
|
|
8266
|
+
open && /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("div", { onClick: closeByUser, className: "fixed inset-0 z-40 bg-black/20 sm:hidden", "aria-hidden": true }),
|
|
8251
8267
|
/* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
8252
8268
|
"aside",
|
|
8253
8269
|
{
|
|
@@ -8262,7 +8278,7 @@ function ReportChatSidebar({ endpoint = "/api/coding/chat" } = {}) {
|
|
|
8262
8278
|
/* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
8263
8279
|
"button",
|
|
8264
8280
|
{
|
|
8265
|
-
onClick:
|
|
8281
|
+
onClick: closeByUser,
|
|
8266
8282
|
className: "-mr-1 shrink-0 rounded-lg p-1.5 text-faint transition-colors hover:bg-canvas hover:text-ink",
|
|
8267
8283
|
"aria-label": "Close",
|
|
8268
8284
|
children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("svg", { width: "18", height: "18", viewBox: "0 0 24 24", fill: "none", "aria-hidden": true, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsx)("path", { d: "M18 6 6 18M6 6l12 12", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" }) })
|
|
@@ -11255,6 +11271,85 @@ function OceanSection({ entries, demos, facetLines, slipLines, fb, onOpen }) {
|
|
|
11255
11271
|
entries.map((e) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(CollapsibleFacet, { entry: e, demos, facetLines, slipLines, fb, onOpen }, e.key))
|
|
11256
11272
|
] });
|
|
11257
11273
|
}
|
|
11274
|
+
function OpenShareButton() {
|
|
11275
|
+
const openShare = () => {
|
|
11276
|
+
const claimed = !window.dispatchEvent(new CustomEvent("polymath:open-share", { cancelable: true }));
|
|
11277
|
+
if (!claimed) window.location.href = "/report";
|
|
11278
|
+
};
|
|
11279
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("button", { onClick: openShare, className: "inline-flex items-center gap-1.5 rounded-xl bg-ink px-4 py-2 text-[13px] font-medium text-paper hover:opacity-90", children: "Edit your public report \u2192" });
|
|
11280
|
+
}
|
|
11281
|
+
function RemainingExports() {
|
|
11282
|
+
const [missing, setMissing] = (0, import_react6.useState)([]);
|
|
11283
|
+
const [connected, setConnected] = (0, import_react6.useState)([]);
|
|
11284
|
+
(0, import_react6.useEffect)(() => {
|
|
11285
|
+
fetch("/api/exports-manifest").then((r) => r.ok ? r.json() : null).then((j) => {
|
|
11286
|
+
if (!j?.links) return;
|
|
11287
|
+
const have = new Set(j.connectedKinds ?? []);
|
|
11288
|
+
setMissing(j.links.filter((l) => l.requestUrl && !have.has(l.kind)));
|
|
11289
|
+
setConnected(j.links.filter((l) => l.requestUrl && have.has(l.kind)));
|
|
11290
|
+
}).catch(() => {
|
|
11291
|
+
});
|
|
11292
|
+
}, []);
|
|
11293
|
+
if (!missing.length && !connected.length) return null;
|
|
11294
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "mb-9 rounded-2xl border border-line bg-paper p-5", children: [
|
|
11295
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "font-serif text-[17px] text-ink", children: "Add what's missing" }),
|
|
11296
|
+
missing.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("p", { className: "mt-1 max-w-[68ch] text-[13px] leading-relaxed text-muted", children: [
|
|
11297
|
+
"This read is built from what you've connected so far. Each export below adds history it hasn't seen yet. Request one, then run ",
|
|
11298
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("code", { className: "rounded bg-canvas px-1.5 py-0.5 text-[12px]", children: "polymath-society" }),
|
|
11299
|
+
" again \u2014 it finds the downloaded zip on its own."
|
|
11300
|
+
] }),
|
|
11301
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "mt-3 space-y-2", children: missing.map((l) => /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
11302
|
+
"a",
|
|
11303
|
+
{
|
|
11304
|
+
href: l.requestUrl,
|
|
11305
|
+
target: "_blank",
|
|
11306
|
+
rel: "noreferrer",
|
|
11307
|
+
className: "flex items-center justify-between gap-3 rounded-xl border border-line bg-canvas px-4 py-3 transition-colors hover:border-accent",
|
|
11308
|
+
children: [
|
|
11309
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "min-w-0", children: [
|
|
11310
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "text-[13px] font-semibold text-ink", children: [
|
|
11311
|
+
"Request my ",
|
|
11312
|
+
l.label,
|
|
11313
|
+
" export"
|
|
11314
|
+
] }),
|
|
11315
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "mt-0.5 text-[11.5px] text-faint", children: [
|
|
11316
|
+
l.buttonPath,
|
|
11317
|
+
" \xB7 ready in ",
|
|
11318
|
+
l.eta
|
|
11319
|
+
] })
|
|
11320
|
+
] }),
|
|
11321
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "shrink-0 text-[12px] font-medium text-accent", children: "Open \u2192" })
|
|
11322
|
+
]
|
|
11323
|
+
},
|
|
11324
|
+
l.kind
|
|
11325
|
+
)) }),
|
|
11326
|
+
connected.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: missing.length ? "mt-4 border-t border-line pt-3" : "mt-3", children: [
|
|
11327
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "text-[13px] font-semibold text-ink", children: "Other accounts?" }),
|
|
11328
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("p", { className: "mt-0.5 max-w-[68ch] text-[12.5px] leading-relaxed text-muted", children: [
|
|
11329
|
+
"What you connected covers one account. If you also use ",
|
|
11330
|
+
connected.map((l) => l.label).join(" or "),
|
|
11331
|
+
" under a second account (work, school, an old login), request an export there too and run ",
|
|
11332
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("code", { className: "rounded bg-canvas px-1 py-0.5 text-[11.5px]", children: "polymath-society" }),
|
|
11333
|
+
" again."
|
|
11334
|
+
] }),
|
|
11335
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("div", { className: "mt-2 flex flex-wrap gap-2", children: connected.map((l) => /* @__PURE__ */ (0, import_jsx_runtime7.jsxs)(
|
|
11336
|
+
"a",
|
|
11337
|
+
{
|
|
11338
|
+
href: l.requestUrl,
|
|
11339
|
+
target: "_blank",
|
|
11340
|
+
rel: "noreferrer",
|
|
11341
|
+
className: "inline-flex items-center gap-1.5 rounded-lg border border-line bg-canvas px-3 py-1.5 text-[12px] font-medium text-ink transition-colors hover:border-accent",
|
|
11342
|
+
children: [
|
|
11343
|
+
l.label,
|
|
11344
|
+
" export ",
|
|
11345
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-accent", children: "\u2192" })
|
|
11346
|
+
]
|
|
11347
|
+
},
|
|
11348
|
+
l.kind
|
|
11349
|
+
)) })
|
|
11350
|
+
] })
|
|
11351
|
+
] });
|
|
11352
|
+
}
|
|
11258
11353
|
function DetailedDataView() {
|
|
11259
11354
|
const [dims, setDims] = (0, import_react6.useState)(null);
|
|
11260
11355
|
const [headline, setHeadline] = (0, import_react6.useState)(null);
|
|
@@ -11364,10 +11459,11 @@ function DetailedDataView() {
|
|
|
11364
11459
|
close.trajectory && /* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "mt-3 text-[15.5px] leading-relaxed text-ink", children: close.trajectory }),
|
|
11365
11460
|
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("p", { className: "mt-3 text-[15.5px] leading-relaxed text-ink", children: "We would love to help you show this to the rest of the world. If you edit and approve a public report, we can start showing it to people to get you opportunities and intros you may like." })
|
|
11366
11461
|
] }),
|
|
11367
|
-
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "mb-
|
|
11368
|
-
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
11462
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsxs)("div", { className: "mb-4 flex flex-wrap items-center gap-x-3 gap-y-1", children: [
|
|
11463
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(OpenShareButton, {}),
|
|
11369
11464
|
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)("span", { className: "text-[12px] text-faint", children: "Optional. You choose what to share." })
|
|
11370
|
-
] })
|
|
11465
|
+
] }),
|
|
11466
|
+
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(RemainingExports, {})
|
|
11371
11467
|
] }) : shown.map((dim) => /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(DimensionCard, { dim, onOpen: openGrade, fb, demos, facetLines, slipLines, summary: dimSummary[dim.key] }, dim.key)),
|
|
11372
11468
|
/* @__PURE__ */ (0, import_jsx_runtime7.jsx)(Drawer, { state: drawer, onClose: () => setDrawer({ kind: "closed" }), onTranscript: openTranscript })
|
|
11373
11469
|
] }),
|
|
@@ -11636,232 +11732,8 @@ function PublicReportView({ r, footprint, dims }) {
|
|
|
11636
11732
|
] });
|
|
11637
11733
|
}
|
|
11638
11734
|
|
|
11639
|
-
// ../../components/
|
|
11640
|
-
var import_react8 = __toESM(require_react());
|
|
11735
|
+
// ../../components/CodingPageView.tsx
|
|
11641
11736
|
var import_jsx_runtime9 = __toESM(require_jsx_runtime());
|
|
11642
|
-
var STARTERS2 = [
|
|
11643
|
-
"Show more on my contrarian takes",
|
|
11644
|
-
"Hide the failure modes",
|
|
11645
|
-
"Make the headline punchier",
|
|
11646
|
-
"Cut anything that names a private person"
|
|
11647
|
-
];
|
|
11648
|
-
function PublicReportEditor({ onUpdate }) {
|
|
11649
|
-
const [msgs, setMsgs] = (0, import_react8.useState)([]);
|
|
11650
|
-
const [input, setInput] = (0, import_react8.useState)("");
|
|
11651
|
-
const [busy, setBusy] = (0, import_react8.useState)(false);
|
|
11652
|
-
const scrollRef = (0, import_react8.useRef)(null);
|
|
11653
|
-
const send = async (text) => {
|
|
11654
|
-
const t = text.trim();
|
|
11655
|
-
if (!t || busy) return;
|
|
11656
|
-
const base = [...msgs, { role: "user", content: t }];
|
|
11657
|
-
setMsgs([...base, { role: "assistant", content: "" }]);
|
|
11658
|
-
setInput("");
|
|
11659
|
-
setBusy(true);
|
|
11660
|
-
const setLast = (content) => setMsgs((m) => {
|
|
11661
|
-
const c = [...m];
|
|
11662
|
-
c[c.length - 1] = { role: "assistant", content };
|
|
11663
|
-
return c;
|
|
11664
|
-
});
|
|
11665
|
-
try {
|
|
11666
|
-
const r = await fetch("/api/public-report", {
|
|
11667
|
-
method: "POST",
|
|
11668
|
-
headers: { "Content-Type": "application/json" },
|
|
11669
|
-
body: JSON.stringify({ messages: base })
|
|
11670
|
-
});
|
|
11671
|
-
const data = await r.json().catch(() => ({}));
|
|
11672
|
-
if (!r.ok) {
|
|
11673
|
-
setLast(r.status === 401 ? "Please sign in to edit your report." : data.error || "Couldn't apply that \u2014 try again.");
|
|
11674
|
-
} else {
|
|
11675
|
-
if (data.report) onUpdate(data.report);
|
|
11676
|
-
setLast(data.reply || "Done.");
|
|
11677
|
-
}
|
|
11678
|
-
requestAnimationFrame(() => scrollRef.current?.scrollTo({ top: scrollRef.current.scrollHeight }));
|
|
11679
|
-
} catch {
|
|
11680
|
-
setLast("Something went wrong \u2014 try again.");
|
|
11681
|
-
} finally {
|
|
11682
|
-
setBusy(false);
|
|
11683
|
-
}
|
|
11684
|
-
};
|
|
11685
|
-
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex h-full flex-col rounded-2xl border border-line bg-paper p-4 shadow-[0_1px_2px_rgba(0,0,0,0.02)]", children: [
|
|
11686
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "mb-2", children: [
|
|
11687
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("h3", { className: "font-serif text-[16px] text-ink", children: "Edit your public report" }),
|
|
11688
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("p", { className: "mt-0.5 text-[12.5px] leading-relaxed text-muted", children: "Tell it what to show or hide \u2014 it pulls from your full analysis and updates the report live." })
|
|
11689
|
-
] }),
|
|
11690
|
-
msgs.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "flex flex-wrap gap-1.5 py-1", children: STARTERS2.map((s) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
11691
|
-
"button",
|
|
11692
|
-
{
|
|
11693
|
-
onClick: () => send(s),
|
|
11694
|
-
disabled: busy,
|
|
11695
|
-
className: "rounded-full border border-line bg-canvas px-3 py-1 text-[12px] text-muted transition-colors hover:border-accent hover:text-accent disabled:opacity-40",
|
|
11696
|
-
children: s
|
|
11697
|
-
},
|
|
11698
|
-
s
|
|
11699
|
-
)) }) : /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { ref: scrollRef, className: "min-h-0 flex-1 space-y-2 overflow-y-auto py-1", children: msgs.map((m, i) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: m.role === "user" ? "flex justify-end" : "flex justify-start", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
11700
|
-
"div",
|
|
11701
|
-
{
|
|
11702
|
-
className: `max-w-[88%] rounded-2xl px-3 py-1.5 text-[13px] leading-relaxed ${m.role === "user" ? "bg-accent text-white" : "bg-canvas text-ink"}`,
|
|
11703
|
-
children: m.content || (busy ? "\u2026" : "")
|
|
11704
|
-
}
|
|
11705
|
-
) }, i)) }),
|
|
11706
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "mt-2 flex items-end gap-2", children: [
|
|
11707
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
11708
|
-
"textarea",
|
|
11709
|
-
{
|
|
11710
|
-
value: input,
|
|
11711
|
-
onChange: (e) => setInput(e.target.value),
|
|
11712
|
-
onKeyDown: (e) => {
|
|
11713
|
-
if (e.key === "Enter" && !e.shiftKey) {
|
|
11714
|
-
e.preventDefault();
|
|
11715
|
-
send(input);
|
|
11716
|
-
}
|
|
11717
|
-
},
|
|
11718
|
-
rows: 2,
|
|
11719
|
-
placeholder: "e.g. don't show the failure modes",
|
|
11720
|
-
className: "min-h-[40px] flex-1 resize-none rounded-xl border border-line bg-canvas px-3 py-2 text-[13px] text-ink outline-none focus:border-accent focus:ring-1 focus:ring-accent"
|
|
11721
|
-
}
|
|
11722
|
-
),
|
|
11723
|
-
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
11724
|
-
"button",
|
|
11725
|
-
{
|
|
11726
|
-
onClick: () => send(input),
|
|
11727
|
-
disabled: busy || !input.trim(),
|
|
11728
|
-
className: "rounded-xl bg-accent px-4 py-2 text-[13px] font-medium text-white transition-opacity hover:opacity-90 disabled:opacity-40",
|
|
11729
|
-
children: busy ? "\u2026" : "Send"
|
|
11730
|
-
}
|
|
11731
|
-
)
|
|
11732
|
-
] })
|
|
11733
|
-
] });
|
|
11734
|
-
}
|
|
11735
|
-
|
|
11736
|
-
// ../../components/SharePublic.tsx
|
|
11737
|
-
var import_react9 = __toESM(require_react());
|
|
11738
|
-
var import_jsx_runtime10 = __toESM(require_jsx_runtime());
|
|
11739
|
-
function publicBase() {
|
|
11740
|
-
const env = "https://polymathsociety.us";
|
|
11741
|
-
if (env) return env.replace(/\/$/, "");
|
|
11742
|
-
if (typeof window !== "undefined") return window.location.origin;
|
|
11743
|
-
return "https://polymathsociety.us";
|
|
11744
|
-
}
|
|
11745
|
-
function SharePublic({ editing, onToggleEdit } = {}) {
|
|
11746
|
-
const [loading, setLoading] = (0, import_react9.useState)(true);
|
|
11747
|
-
const [busy, setBusy] = (0, import_react9.useState)(false);
|
|
11748
|
-
const [isPublic, setIsPublic] = (0, import_react9.useState)(false);
|
|
11749
|
-
const [slug, setSlug] = (0, import_react9.useState)(null);
|
|
11750
|
-
const [copied, setCopied] = (0, import_react9.useState)(false);
|
|
11751
|
-
(0, import_react9.useEffect)(() => {
|
|
11752
|
-
let alive = true;
|
|
11753
|
-
fetch("/api/profile/visibility").then((r) => r.json()).then((d) => {
|
|
11754
|
-
if (!alive) return;
|
|
11755
|
-
setIsPublic(!!d.isPublic);
|
|
11756
|
-
setSlug(d.slug ?? null);
|
|
11757
|
-
}).catch(() => {
|
|
11758
|
-
}).finally(() => alive && setLoading(false));
|
|
11759
|
-
return () => {
|
|
11760
|
-
alive = false;
|
|
11761
|
-
};
|
|
11762
|
-
}, []);
|
|
11763
|
-
async function toggle(next) {
|
|
11764
|
-
setBusy(true);
|
|
11765
|
-
setCopied(false);
|
|
11766
|
-
try {
|
|
11767
|
-
const r = await fetch("/api/profile/visibility", {
|
|
11768
|
-
method: "POST",
|
|
11769
|
-
headers: { "Content-Type": "application/json" },
|
|
11770
|
-
body: JSON.stringify({ isPublic: next })
|
|
11771
|
-
});
|
|
11772
|
-
const d = await r.json();
|
|
11773
|
-
if (r.ok) {
|
|
11774
|
-
setIsPublic(!!d.isPublic);
|
|
11775
|
-
setSlug(d.slug ?? null);
|
|
11776
|
-
}
|
|
11777
|
-
} finally {
|
|
11778
|
-
setBusy(false);
|
|
11779
|
-
}
|
|
11780
|
-
}
|
|
11781
|
-
const url = slug ? `${publicBase()}/${slug}` : "";
|
|
11782
|
-
async function copy() {
|
|
11783
|
-
if (!url) return;
|
|
11784
|
-
try {
|
|
11785
|
-
await navigator.clipboard.writeText(url);
|
|
11786
|
-
setCopied(true);
|
|
11787
|
-
setTimeout(() => setCopied(false), 1800);
|
|
11788
|
-
} catch {
|
|
11789
|
-
}
|
|
11790
|
-
}
|
|
11791
|
-
if (loading) return null;
|
|
11792
|
-
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "mb-6 rounded-2xl border border-line bg-paper p-4", children: [
|
|
11793
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex items-center justify-between gap-3", children: [
|
|
11794
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { children: [
|
|
11795
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "text-[13px] font-semibold text-ink", children: isPublic ? "Your report is public" : "Share your report" }),
|
|
11796
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("p", { className: "mt-0.5 text-[12px] text-faint", children: isPublic ? "Anyone with the link can view this report under your name." : "Publish a private link to this report. Off by default \u2014 nothing is shared until you flip it on." })
|
|
11797
|
-
] }),
|
|
11798
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex shrink-0 items-center gap-2", children: [
|
|
11799
|
-
onToggleEdit && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
11800
|
-
"button",
|
|
11801
|
-
{
|
|
11802
|
-
onClick: onToggleEdit,
|
|
11803
|
-
"aria-pressed": !!editing,
|
|
11804
|
-
title: editing ? "Close editor" : "Edit your public report",
|
|
11805
|
-
className: `inline-flex items-center gap-1.5 rounded-xl border px-3 py-2 text-[13px] font-medium transition-colors ${editing ? "border-accent bg-accent text-white" : "border-line bg-canvas text-ink hover:border-accent hover:text-accent"}`,
|
|
11806
|
-
children: [
|
|
11807
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round", "aria-hidden": true, children: [
|
|
11808
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M12 20h9" }),
|
|
11809
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("path", { d: "M16.5 3.5a2.121 2.121 0 0 1 3 3L7 19l-4 1 1-4 12.5-12.5z" })
|
|
11810
|
-
] }),
|
|
11811
|
-
editing ? "Editing" : "Edit"
|
|
11812
|
-
]
|
|
11813
|
-
}
|
|
11814
|
-
),
|
|
11815
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(
|
|
11816
|
-
"button",
|
|
11817
|
-
{
|
|
11818
|
-
onClick: () => toggle(!isPublic),
|
|
11819
|
-
disabled: busy,
|
|
11820
|
-
className: `inline-flex items-center gap-2 rounded-xl px-4 py-2 text-[13px] font-medium transition-opacity disabled:opacity-60 ${isPublic ? "border border-line bg-canvas text-ink hover:bg-paper" : "bg-ink text-paper hover:opacity-90"}`,
|
|
11821
|
-
children: [
|
|
11822
|
-
busy && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(Spinner, { className: isPublic ? "" : "text-paper" }),
|
|
11823
|
-
isPublic ? "Make private" : "Make public"
|
|
11824
|
-
]
|
|
11825
|
-
}
|
|
11826
|
-
)
|
|
11827
|
-
] })
|
|
11828
|
-
] }),
|
|
11829
|
-
isPublic && url && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "mt-3 flex items-center gap-2 border-t border-line pt-3", children: [
|
|
11830
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
11831
|
-
"input",
|
|
11832
|
-
{
|
|
11833
|
-
readOnly: true,
|
|
11834
|
-
value: url,
|
|
11835
|
-
onFocus: (e) => e.currentTarget.select(),
|
|
11836
|
-
className: "min-w-0 flex-1 truncate rounded-lg border border-line bg-canvas px-3 py-2 font-mono text-[12.5px] text-muted outline-none"
|
|
11837
|
-
}
|
|
11838
|
-
),
|
|
11839
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
11840
|
-
"button",
|
|
11841
|
-
{
|
|
11842
|
-
onClick: copy,
|
|
11843
|
-
className: "shrink-0 rounded-lg border border-line px-3 py-2 text-[12.5px] font-medium text-ink transition-colors hover:bg-canvas",
|
|
11844
|
-
children: copied ? "Copied" : "Copy"
|
|
11845
|
-
}
|
|
11846
|
-
),
|
|
11847
|
-
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
11848
|
-
"a",
|
|
11849
|
-
{
|
|
11850
|
-
href: url,
|
|
11851
|
-
target: "_blank",
|
|
11852
|
-
rel: "noreferrer",
|
|
11853
|
-
className: "shrink-0 rounded-lg border border-line px-3 py-2 text-[12.5px] font-medium text-ink transition-colors hover:bg-canvas",
|
|
11854
|
-
children: "Open"
|
|
11855
|
-
}
|
|
11856
|
-
)
|
|
11857
|
-
] })
|
|
11858
|
-
] });
|
|
11859
|
-
}
|
|
11860
|
-
|
|
11861
|
-
// ../../components/PublicCodingPageShare.tsx
|
|
11862
|
-
var import_react10 = __toESM(require_react());
|
|
11863
|
-
var import_jsx_runtime11 = __toESM(require_jsx_runtime());
|
|
11864
|
-
var THINKING = "__polymath_public_page_thinking__";
|
|
11865
11737
|
var rarity = (topPct2) => Math.min(11.2, 5 + 2 * Math.log10(50 / Math.max(0.01, topPct2)));
|
|
11866
11738
|
function Radar2({ axes }) {
|
|
11867
11739
|
const withPct = axes.filter((a) => a.topPct != null);
|
|
@@ -11874,24 +11746,24 @@ function Radar2({ axes }) {
|
|
|
11874
11746
|
const n = withPct.length;
|
|
11875
11747
|
const ring = (f) => withPct.map((_, i) => pt(i, R * f, n).join(",")).join(" ");
|
|
11876
11748
|
const poly = withPct.map((a, i) => pt(i, R * 0.96 * rarity(a.topPct) / 11.2, n).join(",")).join(" ");
|
|
11877
|
-
return /* @__PURE__ */ (0,
|
|
11878
|
-
[0.33, 0.66, 1].map((f) => /* @__PURE__ */ (0,
|
|
11749
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("svg", { viewBox: "-75 -14 490 330", width: "100%", style: { maxWidth: 490 }, "aria-label": "ability radar", children: [
|
|
11750
|
+
[0.33, 0.66, 1].map((f) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("polygon", { points: ring(f), fill: "none", stroke: "var(--line, #e7e2d9)" }, f)),
|
|
11879
11751
|
withPct.map((_, i) => {
|
|
11880
11752
|
const [x, y] = pt(i, R, n);
|
|
11881
|
-
return /* @__PURE__ */ (0,
|
|
11753
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("line", { x1: cx, y1: cy, x2: x, y2: y, stroke: "var(--line, #e7e2d9)" }, i);
|
|
11882
11754
|
}),
|
|
11883
|
-
/* @__PURE__ */ (0,
|
|
11755
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("polygon", { points: poly, fill: "rgba(180,95,63,.14)", stroke: "#b45f3f", strokeWidth: 2 }),
|
|
11884
11756
|
withPct.map((a, i) => {
|
|
11885
11757
|
const [x, y] = pt(i, R * 0.96 * rarity(a.topPct) / 11.2, n);
|
|
11886
|
-
return /* @__PURE__ */ (0,
|
|
11758
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("circle", { cx: x, cy: y, r: 3, fill: "#b45f3f" }, i);
|
|
11887
11759
|
}),
|
|
11888
11760
|
withPct.map((a, i) => {
|
|
11889
11761
|
const [x, y] = pt(i, R + 24, n);
|
|
11890
11762
|
const anchor = Math.abs(x - cx) < 10 ? "middle" : x > cx ? "start" : "end";
|
|
11891
11763
|
const above = y < cy;
|
|
11892
|
-
return /* @__PURE__ */ (0,
|
|
11893
|
-
/* @__PURE__ */ (0,
|
|
11894
|
-
/* @__PURE__ */ (0,
|
|
11764
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("text", { x, y: above ? y - 8 : y + 4, textAnchor: anchor, fontSize: 11, fill: "#6b6257", children: [
|
|
11765
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("tspan", { x, children: a.label }),
|
|
11766
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("tspan", { x, dy: 14, fontWeight: 700, fill: "#1a1714", children: [
|
|
11895
11767
|
"Top ",
|
|
11896
11768
|
a.topPct,
|
|
11897
11769
|
"%"
|
|
@@ -11900,70 +11772,104 @@ function Radar2({ axes }) {
|
|
|
11900
11772
|
})
|
|
11901
11773
|
] });
|
|
11902
11774
|
}
|
|
11903
|
-
function buildChips(page) {
|
|
11904
|
-
const specific = [];
|
|
11905
|
-
for (const ax of page.axes) {
|
|
11906
|
-
for (const m of ax.moments) {
|
|
11907
|
-
const snippet = m.what.length > 46 ? `${m.what.slice(0, 46).trim()}\u2026` : m.what;
|
|
11908
|
-
if (m.quote) specific.push(`Remove the "${snippet}" example in ${ax.label} (${m.date})`);
|
|
11909
|
-
else specific.push(`Find different evidence than "${snippet}" for ${ax.label} (${m.date})`);
|
|
11910
|
-
}
|
|
11911
|
-
}
|
|
11912
|
-
const general = [
|
|
11913
|
-
"Hide the swear words in any quote",
|
|
11914
|
-
"Don't show the specific project names",
|
|
11915
|
-
"Get more evidence for the Taste claim"
|
|
11916
|
-
];
|
|
11917
|
-
return [...specific.slice(0, 2), ...general].slice(0, 3);
|
|
11918
|
-
}
|
|
11919
11775
|
function AxisCard({ axis, hidden, onToggle }) {
|
|
11920
|
-
return /* @__PURE__ */ (0,
|
|
11921
|
-
/* @__PURE__ */ (0,
|
|
11922
|
-
/* @__PURE__ */ (0,
|
|
11776
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: `rounded-xl border border-line p-3 transition-opacity ${hidden ? "bg-canvas opacity-45" : "bg-paper"}`, children: [
|
|
11777
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-center justify-between gap-2", children: [
|
|
11778
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { className: "text-[12.5px] font-semibold text-ink", children: [
|
|
11923
11779
|
axis.label,
|
|
11924
11780
|
" ",
|
|
11925
|
-
axis.topPct != null && /* @__PURE__ */ (0,
|
|
11781
|
+
axis.topPct != null && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("span", { className: "text-accent", children: [
|
|
11926
11782
|
"Top ",
|
|
11927
11783
|
axis.topPct,
|
|
11928
11784
|
"%"
|
|
11929
11785
|
] })
|
|
11930
11786
|
] }),
|
|
11931
|
-
/* @__PURE__ */ (0,
|
|
11787
|
+
onToggle && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("button", { onClick: onToggle, className: "rounded-full border border-line px-2.5 py-0.5 text-[10.5px] text-muted transition-colors hover:text-ink", children: hidden ? "Include" : "Hide" })
|
|
11932
11788
|
] }),
|
|
11933
|
-
!hidden && /* @__PURE__ */ (0,
|
|
11934
|
-
/* @__PURE__ */ (0,
|
|
11935
|
-
axis.read && /* @__PURE__ */ (0,
|
|
11936
|
-
axis.numbers.length > 0 && /* @__PURE__ */ (0,
|
|
11937
|
-
/* @__PURE__ */ (0,
|
|
11938
|
-
/* @__PURE__ */ (0,
|
|
11789
|
+
!hidden && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)(import_jsx_runtime9.Fragment, { children: [
|
|
11790
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "mt-1.5 text-[13px] font-semibold text-ink", children: axis.claim }),
|
|
11791
|
+
axis.read && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "mt-1 text-[12px] leading-relaxed text-muted", children: axis.read }),
|
|
11792
|
+
axis.numbers.length > 0 && /* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "mt-2 flex flex-wrap gap-4", children: axis.numbers.map((n, i) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { children: [
|
|
11793
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "font-serif text-[18px] text-ink", children: n.big }),
|
|
11794
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "text-[10.5px] text-muted", children: n.lab })
|
|
11939
11795
|
] }, i)) }),
|
|
11940
|
-
axis.moments.map((m, i) => /* @__PURE__ */ (0,
|
|
11941
|
-
/* @__PURE__ */ (0,
|
|
11796
|
+
axis.moments.map((m, i) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "mt-2 border-t border-dashed border-line pt-2 text-[12px] leading-relaxed", children: [
|
|
11797
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "mr-1.5 text-[10.5px] text-faint", children: m.date }),
|
|
11942
11798
|
m.what,
|
|
11943
|
-
m.quote && /* @__PURE__ */ (0,
|
|
11799
|
+
m.quote && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "mt-0.5 italic text-muted", children: [
|
|
11944
11800
|
"\u201C",
|
|
11945
11801
|
m.quote,
|
|
11946
11802
|
"\u201D"
|
|
11947
11803
|
] })
|
|
11948
11804
|
] }, i)),
|
|
11949
|
-
axis.edge && /* @__PURE__ */ (0,
|
|
11950
|
-
/* @__PURE__ */ (0,
|
|
11805
|
+
axis.edge && /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "mt-2 border-t border-dashed border-line pt-2 text-[11.5px] text-muted", children: [
|
|
11806
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("b", { className: "text-ink", children: "Honest edge: " }),
|
|
11951
11807
|
axis.edge
|
|
11952
11808
|
] })
|
|
11953
11809
|
] })
|
|
11954
11810
|
] });
|
|
11955
11811
|
}
|
|
11812
|
+
function NumbersCard({ sec }) {
|
|
11813
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "rounded-xl border border-line bg-paper p-3", children: [
|
|
11814
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "text-[12.5px] font-semibold text-ink", children: sec.section }),
|
|
11815
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "mt-1.5 grid grid-cols-2 gap-x-4 gap-y-1 text-[12px]", children: sec.stats.map((s, j) => /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "flex items-baseline justify-between gap-2", children: [
|
|
11816
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "text-faint", children: s.lab }),
|
|
11817
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("span", { className: "font-medium text-ink", children: s.big })
|
|
11818
|
+
] }, j)) })
|
|
11819
|
+
] });
|
|
11820
|
+
}
|
|
11821
|
+
function CodingPageView({
|
|
11822
|
+
page,
|
|
11823
|
+
hiddenAxes,
|
|
11824
|
+
onToggleAxis
|
|
11825
|
+
}) {
|
|
11826
|
+
return /* @__PURE__ */ (0, import_jsx_runtime9.jsxs)("div", { className: "space-y-3", children: [
|
|
11827
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "rounded-xl border border-line bg-paper p-3.5 font-serif text-[15px] leading-relaxed text-ink", children: page.verdict }),
|
|
11828
|
+
/* @__PURE__ */ (0, import_jsx_runtime9.jsx)("div", { className: "flex justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(Radar2, { axes: page.axes }) }),
|
|
11829
|
+
page.axes.map((a) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(
|
|
11830
|
+
AxisCard,
|
|
11831
|
+
{
|
|
11832
|
+
axis: a,
|
|
11833
|
+
hidden: hiddenAxes?.has(a.key),
|
|
11834
|
+
onToggle: onToggleAxis ? () => onToggleAxis(a.key) : void 0
|
|
11835
|
+
},
|
|
11836
|
+
a.key
|
|
11837
|
+
)),
|
|
11838
|
+
page.moreNumbers.map((sec, i) => /* @__PURE__ */ (0, import_jsx_runtime9.jsx)(NumbersCard, { sec }, i))
|
|
11839
|
+
] });
|
|
11840
|
+
}
|
|
11841
|
+
|
|
11842
|
+
// ../../components/PublicCodingPageShare.tsx
|
|
11843
|
+
var import_react8 = __toESM(require_react());
|
|
11844
|
+
var import_jsx_runtime10 = __toESM(require_jsx_runtime());
|
|
11845
|
+
var THINKING = "__polymath_public_page_thinking__";
|
|
11846
|
+
function buildChips(page) {
|
|
11847
|
+
const specific = [];
|
|
11848
|
+
for (const ax of page.axes) {
|
|
11849
|
+
for (const m of ax.moments) {
|
|
11850
|
+
const snippet = m.what.length > 46 ? `${m.what.slice(0, 46).trim()}\u2026` : m.what;
|
|
11851
|
+
if (m.quote) specific.push(`Remove the "${snippet}" example in ${ax.label} (${m.date})`);
|
|
11852
|
+
else specific.push(`Find different evidence than "${snippet}" for ${ax.label} (${m.date})`);
|
|
11853
|
+
}
|
|
11854
|
+
}
|
|
11855
|
+
const general = [
|
|
11856
|
+
"Hide the swear words in any quote",
|
|
11857
|
+
"Don't show the specific project names",
|
|
11858
|
+
"Get more evidence for the Taste claim"
|
|
11859
|
+
];
|
|
11860
|
+
return [...specific.slice(0, 2), ...general].slice(0, 3);
|
|
11861
|
+
}
|
|
11956
11862
|
function PublicCodingPageShare({ identity, canAuth }) {
|
|
11957
|
-
const [open, setOpen] = (0,
|
|
11958
|
-
const [page, setPage] = (0,
|
|
11959
|
-
const [loading, setLoading] = (0,
|
|
11960
|
-
const [error, setError] = (0,
|
|
11961
|
-
const [hiddenAxes, setHiddenAxes] = (0,
|
|
11962
|
-
const [msgs, setMsgs] = (0,
|
|
11963
|
-
const [busy, setBusy] = (0,
|
|
11964
|
-
const [sent, setSent] = (0,
|
|
11965
|
-
const [chatReport, setChatReport] = (0,
|
|
11966
|
-
const [includeChat, setIncludeChat] = (0,
|
|
11863
|
+
const [open, setOpen] = (0, import_react8.useState)(false);
|
|
11864
|
+
const [page, setPage] = (0, import_react8.useState)(null);
|
|
11865
|
+
const [loading, setLoading] = (0, import_react8.useState)("idle");
|
|
11866
|
+
const [error, setError] = (0, import_react8.useState)(null);
|
|
11867
|
+
const [hiddenAxes, setHiddenAxes] = (0, import_react8.useState)(/* @__PURE__ */ new Set());
|
|
11868
|
+
const [msgs, setMsgs] = (0, import_react8.useState)([]);
|
|
11869
|
+
const [busy, setBusy] = (0, import_react8.useState)(false);
|
|
11870
|
+
const [sent, setSent] = (0, import_react8.useState)(false);
|
|
11871
|
+
const [chatReport, setChatReport] = (0, import_react8.useState)(null);
|
|
11872
|
+
const [includeChat, setIncludeChat] = (0, import_react8.useState)(true);
|
|
11967
11873
|
const openModal = async () => {
|
|
11968
11874
|
setOpen(true);
|
|
11969
11875
|
setError(null);
|
|
@@ -11982,6 +11888,16 @@ function PublicCodingPageShare({ identity, canAuth }) {
|
|
|
11982
11888
|
}
|
|
11983
11889
|
setLoading("idle");
|
|
11984
11890
|
};
|
|
11891
|
+
const openRef = (0, import_react8.useRef)(openModal);
|
|
11892
|
+
openRef.current = openModal;
|
|
11893
|
+
(0, import_react8.useEffect)(() => {
|
|
11894
|
+
const onAsk = (e) => {
|
|
11895
|
+
e.preventDefault();
|
|
11896
|
+
void openRef.current();
|
|
11897
|
+
};
|
|
11898
|
+
window.addEventListener("polymath:open-share", onAsk);
|
|
11899
|
+
return () => window.removeEventListener("polymath:open-share", onAsk);
|
|
11900
|
+
}, []);
|
|
11985
11901
|
const generate = async () => {
|
|
11986
11902
|
setLoading("generating");
|
|
11987
11903
|
setError(null);
|
|
@@ -12007,6 +11923,7 @@ function PublicCodingPageShare({ identity, canAuth }) {
|
|
|
12007
11923
|
body: JSON.stringify({ page, messages: base })
|
|
12008
11924
|
}).then((r2) => r2.json());
|
|
12009
11925
|
if (r.page) setPage(r.page);
|
|
11926
|
+
if (r.chatReport) setChatReport(r.chatReport);
|
|
12010
11927
|
setMsgs((m) => {
|
|
12011
11928
|
const c = [...m];
|
|
12012
11929
|
c[c.length - 1] = { role: "assistant", content: r.reply || r.error || "Done." };
|
|
@@ -12039,79 +11956,81 @@ function PublicCodingPageShare({ identity, canAuth }) {
|
|
|
12039
11956
|
}
|
|
12040
11957
|
setLoading("idle");
|
|
12041
11958
|
};
|
|
12042
|
-
return /* @__PURE__ */ (0,
|
|
12043
|
-
/* @__PURE__ */ (0,
|
|
12044
|
-
open && /* @__PURE__ */ (0,
|
|
12045
|
-
/* @__PURE__ */ (0,
|
|
12046
|
-
/* @__PURE__ */ (0,
|
|
11959
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
11960
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("button", { onClick: openModal, className: "rounded-full bg-ink px-3.5 py-1.5 text-[12px] font-medium text-paper transition-opacity hover:opacity-85", children: "Share report" }),
|
|
11961
|
+
open && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "fixed inset-0 z-[60] flex items-center justify-center bg-black/30 p-4", onClick: () => setOpen(false), children: /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex max-h-[88vh] w-full max-w-[900px] flex-col rounded-2xl border border-line bg-canvas p-5 shadow-xl", onClick: (e) => e.stopPropagation(), children: [
|
|
11962
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("h2", { className: "font-serif text-[23px] leading-snug text-ink", children: "We'll get you intros and opportunities based on how good you are." }),
|
|
11963
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "mt-1.5 text-[14px] font-semibold text-ink", children: [
|
|
12047
11964
|
"Your ",
|
|
12048
11965
|
chatReport ? "coding + chat profile" : "coding profile",
|
|
12049
11966
|
" \u2014 review before sharing"
|
|
12050
11967
|
] }),
|
|
12051
|
-
/* @__PURE__ */ (0,
|
|
12052
|
-
loading === "checking" && /* @__PURE__ */ (0,
|
|
12053
|
-
error && /* @__PURE__ */ (0,
|
|
12054
|
-
!page && loading !== "checking" && /* @__PURE__ */ (0,
|
|
12055
|
-
/* @__PURE__ */ (0,
|
|
12056
|
-
/* @__PURE__ */ (0,
|
|
11968
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "mt-0.5 mb-3 text-[11.5px] text-faint", children: "Not a public page. Sending it goes privately to Polymath for opportunity-matching \u2014 nothing gets a public link." }),
|
|
11969
|
+
loading === "checking" && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "py-10 text-center text-[13px] text-muted", children: "Loading\u2026" }),
|
|
11970
|
+
error && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "mb-2 rounded-xl bg-amber-50 px-3 py-2 text-[12px] text-amber-800", children: error }),
|
|
11971
|
+
!page && loading !== "checking" && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "rounded-xl border border-dashed border-line p-8 text-center", children: [
|
|
11972
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "text-[13px] text-muted", children: "You haven't generated your coding profile yet." }),
|
|
11973
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("button", { onClick: generate, disabled: loading === "generating", className: "mt-3 rounded-full bg-ink px-4 py-1.5 text-[12px] font-medium text-paper disabled:opacity-50", children: loading === "generating" ? "Generating\u2026 (this reads your sessions, ~1-2 min)" : "Generate my report" })
|
|
12057
11974
|
] }),
|
|
12058
|
-
page && /* @__PURE__ */ (0,
|
|
12059
|
-
/* @__PURE__ */ (0,
|
|
12060
|
-
/* @__PURE__ */ (0,
|
|
12061
|
-
/* @__PURE__ */ (0,
|
|
12062
|
-
|
|
12063
|
-
|
|
12064
|
-
|
|
12065
|
-
|
|
12066
|
-
|
|
12067
|
-
|
|
12068
|
-
|
|
12069
|
-
|
|
12070
|
-
|
|
12071
|
-
|
|
12072
|
-
|
|
12073
|
-
|
|
12074
|
-
|
|
12075
|
-
|
|
12076
|
-
|
|
12077
|
-
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("h3", { className: "font-serif text-[19px] text-ink", children: "Your chat profile" }),
|
|
12078
|
-
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("button", { onClick: () => setIncludeChat((v) => !v), className: "rounded-full border border-line px-2.5 py-0.5 text-[10.5px] text-muted transition-colors hover:text-ink", children: includeChat ? "Exclude from send" : "Include in send" })
|
|
11975
|
+
page && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "grid min-h-0 flex-1 gap-4 md:grid-cols-[1fr_300px]", children: [
|
|
11976
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "min-h-0 space-y-3 overflow-y-auto pr-1", children: [
|
|
11977
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "text-[11px] font-semibold uppercase tracking-[0.1em] text-faint", children: "Coding profile" }),
|
|
11978
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
11979
|
+
CodingPageView,
|
|
11980
|
+
{
|
|
11981
|
+
page,
|
|
11982
|
+
hiddenAxes,
|
|
11983
|
+
onToggleAxis: (key) => setHiddenAxes((s) => {
|
|
11984
|
+
const n = new Set(s);
|
|
11985
|
+
n.has(key) ? n.delete(key) : n.add(key);
|
|
11986
|
+
return n;
|
|
11987
|
+
})
|
|
11988
|
+
}
|
|
11989
|
+
),
|
|
11990
|
+
chatReport && /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
11991
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex items-center justify-between gap-2 pt-2", children: [
|
|
11992
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("h3", { className: "font-serif text-[19px] text-ink", children: "Your chat profile" }),
|
|
11993
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("button", { onClick: () => setIncludeChat((v) => !v), className: "rounded-full border border-line px-2.5 py-0.5 text-[10.5px] text-muted transition-colors hover:text-ink", children: includeChat ? "Exclude from send" : "Include in send" })
|
|
12079
11994
|
] }),
|
|
12080
|
-
/* @__PURE__ */ (0,
|
|
12081
|
-
includeChat ? /* @__PURE__ */ (0,
|
|
11995
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "text-[10.5px] text-faint", children: "Sent with the coding profile. Say \u201Cin the chat report\u2026\u201D to redact anything in it." }),
|
|
11996
|
+
includeChat ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "rounded-xl border border-line bg-paper p-3", children: /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(PublicReportView, { r: chatReport }) }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "rounded-xl border border-dashed border-line bg-canvas p-3 text-[12px] text-muted", children: "Excluded \u2014 only the coding profile will be sent." })
|
|
12082
11997
|
] })
|
|
12083
11998
|
] }),
|
|
12084
|
-
/* @__PURE__ */ (0,
|
|
12085
|
-
/* @__PURE__ */ (0,
|
|
12086
|
-
/* @__PURE__ */ (0,
|
|
12087
|
-
|
|
12088
|
-
|
|
12089
|
-
|
|
11999
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "flex min-h-0 flex-col rounded-xl border border-line bg-paper p-3", children: [
|
|
12000
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "text-[12.5px] font-semibold text-ink", children: "Change it by talking to it" }),
|
|
12001
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "mt-0.5 text-[10.5px] text-faint", children: [
|
|
12002
|
+
"Redact anything, or ask it to find different evidence. ",
|
|
12003
|
+
chatReport ? "Say \u201Cin the coding report\u2026\u201D or \u201Cin the chat report\u2026\u201D to aim it. " : "",
|
|
12004
|
+
"It can't invent achievements or change any number."
|
|
12005
|
+
] }),
|
|
12006
|
+
msgs.length === 0 && /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "mt-2 flex flex-col gap-1.5", children: buildChips(page).map((c, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("button", { onClick: () => send(c), disabled: busy, className: "text-left rounded-lg border border-line bg-canvas px-2.5 py-1.5 text-[10.5px] leading-snug text-muted transition-colors hover:text-ink disabled:opacity-40", children: c }, i)) }),
|
|
12007
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "mt-2 min-h-0 flex-1 space-y-1.5 overflow-y-auto", children: msgs.map((m, i) => /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: m.role === "user" ? "flex justify-end" : "flex justify-start", children: m.content === THINKING ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ThinkingBubble, {}) : /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: `max-w-[90%] rounded-xl px-2.5 py-1 text-[11.5px] leading-relaxed ${m.role === "user" ? "bg-ink text-paper" : "bg-canvas text-ink"}`, children: m.content }) }, i)) }),
|
|
12008
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(ChatInput, { busy, onSend: send })
|
|
12090
12009
|
] })
|
|
12091
12010
|
] }),
|
|
12092
|
-
/* @__PURE__ */ (0,
|
|
12011
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("div", { className: "mt-3 flex items-center justify-end gap-2 border-t border-line pt-3", children: sent ? /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "text-[12.5px] font-medium text-emerald-600", children: [
|
|
12093
12012
|
"\u2713 Sent to Polymath \u2014 ",
|
|
12094
12013
|
sent === "both" ? "coding + chat profile, " : "",
|
|
12095
12014
|
"private, not a public page."
|
|
12096
|
-
] }) : /* @__PURE__ */ (0,
|
|
12097
|
-
/* @__PURE__ */ (0,
|
|
12098
|
-
identity ? /* @__PURE__ */ (0,
|
|
12015
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)(import_jsx_runtime10.Fragment, { children: [
|
|
12016
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("button", { onClick: () => setOpen(false), className: "rounded-full px-3.5 py-1.5 text-[12px] text-muted transition-colors hover:text-ink", children: "Cancel" }),
|
|
12017
|
+
identity ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("button", { onClick: shareWithPolymath, disabled: !page || loading === "sending", className: "rounded-full bg-ink px-4 py-1.5 text-[12px] font-medium text-paper transition-opacity hover:opacity-85 disabled:opacity-50", children: loading === "sending" ? "Sending\u2026" : "Share with Polymath for opportunities" }) : canAuth ? /* @__PURE__ */ (0, import_jsx_runtime10.jsx)("a", { href: "/auth/login", target: "_blank", rel: "noreferrer", className: "rounded-full bg-ink px-4 py-1.5 text-[12px] font-medium text-paper", children: "Sign in with Google to share" }) : null
|
|
12099
12018
|
] }) })
|
|
12100
12019
|
] }) })
|
|
12101
12020
|
] });
|
|
12102
12021
|
}
|
|
12103
12022
|
function ThinkingBubble() {
|
|
12104
|
-
return /* @__PURE__ */ (0,
|
|
12105
|
-
/* @__PURE__ */ (0,
|
|
12106
|
-
/* @__PURE__ */ (0,
|
|
12107
|
-
/* @__PURE__ */ (0,
|
|
12108
|
-
/* @__PURE__ */ (0,
|
|
12109
|
-
/* @__PURE__ */ (0,
|
|
12110
|
-
/* @__PURE__ */ (0,
|
|
12111
|
-
/* @__PURE__ */ (0,
|
|
12023
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "polymath-edit-thinking max-w-[92%] rounded-2xl border border-line bg-canvas px-3 py-2 text-[11px] text-muted shadow-sm", children: [
|
|
12024
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "polymath-edit-thinking__bar", "aria-hidden": "true" }),
|
|
12025
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "relative inline-flex items-center gap-2", children: [
|
|
12026
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", { className: "font-medium text-ink", children: "Checking evidence" }),
|
|
12027
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("span", { className: "inline-flex items-center gap-1", "aria-label": "editing", children: [
|
|
12028
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", {}),
|
|
12029
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", {}),
|
|
12030
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("span", {})
|
|
12112
12031
|
] })
|
|
12113
12032
|
] }),
|
|
12114
|
-
/* @__PURE__ */ (0,
|
|
12033
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("style", { children: `
|
|
12115
12034
|
.polymath-edit-thinking {
|
|
12116
12035
|
position: relative;
|
|
12117
12036
|
overflow: hidden;
|
|
@@ -12151,15 +12070,15 @@ function ThinkingBubble() {
|
|
|
12151
12070
|
] });
|
|
12152
12071
|
}
|
|
12153
12072
|
function ChatInput({ busy, onSend }) {
|
|
12154
|
-
const [text, setText] = (0,
|
|
12073
|
+
const [text, setText] = (0, import_react8.useState)("");
|
|
12155
12074
|
const go = () => {
|
|
12156
12075
|
if (text.trim()) {
|
|
12157
12076
|
onSend(text);
|
|
12158
12077
|
setText("");
|
|
12159
12078
|
}
|
|
12160
12079
|
};
|
|
12161
|
-
return /* @__PURE__ */ (0,
|
|
12162
|
-
/* @__PURE__ */ (0,
|
|
12080
|
+
return /* @__PURE__ */ (0, import_jsx_runtime10.jsxs)("div", { className: "mt-2 flex items-end gap-1.5", children: [
|
|
12081
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)(
|
|
12163
12082
|
"textarea",
|
|
12164
12083
|
{
|
|
12165
12084
|
value: text,
|
|
@@ -12175,40 +12094,48 @@ function ChatInput({ busy, onSend }) {
|
|
|
12175
12094
|
className: "min-h-[36px] flex-1 resize-none rounded-lg border border-line bg-canvas px-2.5 py-1.5 text-[11px] text-ink outline-none focus:border-ink/40"
|
|
12176
12095
|
}
|
|
12177
12096
|
),
|
|
12178
|
-
/* @__PURE__ */ (0,
|
|
12097
|
+
/* @__PURE__ */ (0, import_jsx_runtime10.jsx)("button", { onClick: go, disabled: busy || !text.trim(), className: "rounded-lg bg-ink px-3 py-1.5 text-[11px] font-medium text-paper disabled:opacity-40", children: busy ? "..." : "Send" })
|
|
12179
12098
|
] });
|
|
12180
12099
|
}
|
|
12181
12100
|
|
|
12182
12101
|
// web/entry.tsx
|
|
12183
|
-
var
|
|
12102
|
+
var import_jsx_runtime11 = __toESM(require_jsx_runtime(), 1);
|
|
12184
12103
|
function PublicReportTab() {
|
|
12185
|
-
const [loaded, setLoaded] = (0,
|
|
12186
|
-
const [
|
|
12187
|
-
|
|
12188
|
-
|
|
12189
|
-
(0, import_react11.useEffect)(() => {
|
|
12190
|
-
fetch("/api/public-report").then((r) => r.ok ? r.json() : null).then((d) => {
|
|
12191
|
-
setReport(d?.report ?? null);
|
|
12192
|
-
setFootprint(d?.footprint ?? null);
|
|
12193
|
-
}).catch(() => {
|
|
12104
|
+
const [loaded, setLoaded] = (0, import_react9.useState)(false);
|
|
12105
|
+
const [shared, setShared] = (0, import_react9.useState)(null);
|
|
12106
|
+
(0, import_react9.useEffect)(() => {
|
|
12107
|
+
fetch("/api/shared-report").then((r) => r.ok ? r.json() : null).then((d) => setShared(d?.shared ?? null)).catch(() => {
|
|
12194
12108
|
}).finally(() => setLoaded(true));
|
|
12195
12109
|
}, []);
|
|
12196
|
-
if (!loaded) return /* @__PURE__ */ (0,
|
|
12197
|
-
if (!
|
|
12198
|
-
return /* @__PURE__ */ (0,
|
|
12199
|
-
/* @__PURE__ */ (0,
|
|
12200
|
-
/* @__PURE__ */ (0,
|
|
12201
|
-
"Click ",
|
|
12202
|
-
/* @__PURE__ */ (0,
|
|
12203
|
-
" to
|
|
12110
|
+
if (!loaded) return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "py-16 text-center text-[13px] text-faint", children: "Checking what you've shared\u2026" });
|
|
12111
|
+
if (!shared || !shared.page && !shared.chatReport) {
|
|
12112
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "rounded-xl border border-line bg-paper px-4 py-3", children: [
|
|
12113
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "font-serif text-[17px] text-ink", children: "You haven't shared anything yet" }),
|
|
12114
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("p", { className: "mt-1 max-w-[72ch] text-[13px] leading-relaxed text-muted", children: [
|
|
12115
|
+
"Nothing of yours has been sent to Polymath. Click ",
|
|
12116
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "font-medium text-ink", children: "Share report" }),
|
|
12117
|
+
" in the header to review your profile and choose what to send. Whatever you send shows up here."
|
|
12204
12118
|
] })
|
|
12205
12119
|
] });
|
|
12206
12120
|
}
|
|
12207
|
-
|
|
12208
|
-
|
|
12209
|
-
/* @__PURE__ */ (0,
|
|
12210
|
-
/* @__PURE__ */ (0,
|
|
12211
|
-
|
|
12121
|
+
const when = shared.sharedAt ? new Date(shared.sharedAt).toLocaleDateString(void 0, { month: "long", day: "numeric", year: "numeric" }) : null;
|
|
12122
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
|
|
12123
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "mb-4 rounded-xl border border-line bg-paper px-4 py-3", children: [
|
|
12124
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "font-serif text-[17px] text-ink", children: "What you shared with Polymath" }),
|
|
12125
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("p", { className: "mt-1 max-w-[72ch] text-[13px] leading-relaxed text-muted", children: [
|
|
12126
|
+
when ? `Sent ${when}. ` : "",
|
|
12127
|
+
"This is the exact copy Polymath holds, for opportunity-matching. It is not a public page and has no link. To change it, use ",
|
|
12128
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "font-medium text-ink", children: "Share report" }),
|
|
12129
|
+
" and send again."
|
|
12130
|
+
] })
|
|
12131
|
+
] }),
|
|
12132
|
+
shared.page && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "mb-5", children: [
|
|
12133
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "mb-2 text-[11px] font-semibold uppercase tracking-[0.1em] text-faint", children: "Coding profile" }),
|
|
12134
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(CodingPageView, { page: shared.page })
|
|
12135
|
+
] }),
|
|
12136
|
+
shared.chatReport && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { children: [
|
|
12137
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "mb-2 text-[11px] font-semibold uppercase tracking-[0.1em] text-faint", children: "Chat profile" }),
|
|
12138
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(PublicReportView, { r: shared.chatReport })
|
|
12212
12139
|
] })
|
|
12213
12140
|
] });
|
|
12214
12141
|
}
|
|
@@ -12222,20 +12149,20 @@ function LaneRow({ name, l }) {
|
|
|
12222
12149
|
if (l.skipped) return null;
|
|
12223
12150
|
const pct = Math.round(laneFrac(l) * 100);
|
|
12224
12151
|
const detail = l.done ? l.failed ? `${l.failed} stage${l.failed === 1 ? "" : "s"} failed. A rerun resumes them.` : "done \u2713" : `${l.label}${l.within ? ` \xB7 ${l.within.done}/${l.within.total}` : ""}${l.overnight ? " \xB7 heavy grading runs at 2:00 am tonight" : ""}`;
|
|
12225
|
-
return /* @__PURE__ */ (0,
|
|
12226
|
-
/* @__PURE__ */ (0,
|
|
12227
|
-
/* @__PURE__ */ (0,
|
|
12228
|
-
/* @__PURE__ */ (0,
|
|
12152
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex min-w-0 flex-1 basis-full items-center gap-2 sm:basis-auto", children: [
|
|
12153
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "w-12 shrink-0 text-[11.5px] font-medium text-ink", children: name }),
|
|
12154
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "h-1.5 w-24 shrink-0 overflow-hidden rounded-full bg-canvas", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "h-full rounded-full bg-ink transition-all duration-700", style: { width: `${pct}%` } }) }),
|
|
12155
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("span", { className: "w-9 shrink-0 text-[12px] font-semibold tabular-nums text-ink", children: [
|
|
12229
12156
|
pct,
|
|
12230
12157
|
"%"
|
|
12231
12158
|
] }),
|
|
12232
|
-
/* @__PURE__ */ (0,
|
|
12159
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "min-w-0 text-[11.5px] text-muted", children: detail })
|
|
12233
12160
|
] });
|
|
12234
12161
|
}
|
|
12235
12162
|
function usePipelineProgress() {
|
|
12236
|
-
const [p, setP] = (0,
|
|
12237
|
-
const [landedSinceLoad, setLandedSinceLoad] = (0,
|
|
12238
|
-
(0,
|
|
12163
|
+
const [p, setP] = (0, import_react9.useState)(null);
|
|
12164
|
+
const [landedSinceLoad, setLandedSinceLoad] = (0, import_react9.useState)(false);
|
|
12165
|
+
(0, import_react9.useEffect)(() => {
|
|
12239
12166
|
let alive = true;
|
|
12240
12167
|
let baseRev = null;
|
|
12241
12168
|
const poll = () => fetch("/api/progress").then((r) => r.ok ? r.json() : null).then((j) => {
|
|
@@ -12261,17 +12188,17 @@ function PipelineProgressBanner({ p, landedSinceLoad }) {
|
|
|
12261
12188
|
const anyRunning = visible.some(([, l]) => !l.done);
|
|
12262
12189
|
const anyOvernight = visible.some(([, l]) => !l.done && l.overnight);
|
|
12263
12190
|
if (!visible.length || !anyRunning && !landedSinceLoad) return null;
|
|
12264
|
-
return /* @__PURE__ */ (0,
|
|
12265
|
-
/* @__PURE__ */ (0,
|
|
12266
|
-
anyRunning && /* @__PURE__ */ (0,
|
|
12267
|
-
/* @__PURE__ */ (0,
|
|
12268
|
-
landedSinceLoad && /* @__PURE__ */ (0,
|
|
12191
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "mb-4 rounded-xl border border-line bg-paper px-4 py-3 text-[12.5px] text-muted", children: [
|
|
12192
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "mb-1.5 flex items-center gap-2", children: [
|
|
12193
|
+
anyRunning && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "inline-block h-2 w-2 animate-pulse rounded-full bg-amber-500", "aria-hidden": true }),
|
|
12194
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "font-medium text-ink", children: !anyRunning ? "New results just landed." : anyOvernight ? "Part of your analysis is scheduled for 2:00 am tonight. This page fills in as stages finish." : "Your analysis is still running. This page fills in as stages finish." }),
|
|
12195
|
+
landedSinceLoad && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("button", { onClick: () => window.location.reload(), className: "ml-auto rounded-full bg-ink px-3 py-1 text-[11.5px] font-medium text-paper transition-opacity hover:opacity-85", children: "Load the new results" })
|
|
12269
12196
|
] }),
|
|
12270
|
-
/* @__PURE__ */ (0,
|
|
12271
|
-
anyOvernight && /* @__PURE__ */ (0,
|
|
12272
|
-
/* @__PURE__ */ (0,
|
|
12273
|
-
/* @__PURE__ */ (0,
|
|
12274
|
-
/* @__PURE__ */ (0,
|
|
12197
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "flex flex-wrap items-center gap-x-6 gap-y-1.5", children: visible.map(([name, l]) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(LaneRow, { name, l }, name)) }),
|
|
12198
|
+
anyOvernight && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "mt-2 rounded-lg bg-canvas px-3 py-2 text-[12px] text-ink", children: [
|
|
12199
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "font-medium", children: "For the overnight part to finish:" }),
|
|
12200
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "ml-2", children: "1. Keep the laptop plugged in." }),
|
|
12201
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "ml-3", children: "2. Keep the lid open. A closed lid means sleep, and the run stalls until morning." })
|
|
12275
12202
|
] })
|
|
12276
12203
|
] });
|
|
12277
12204
|
}
|
|
@@ -12279,29 +12206,29 @@ function LaneStatusCard({ name, lane }) {
|
|
|
12279
12206
|
if (!lane || lane.done || lane.skipped) return null;
|
|
12280
12207
|
const pct = Math.round(laneFrac(lane) * 100);
|
|
12281
12208
|
const isOvernight = !!lane.overnight;
|
|
12282
|
-
return /* @__PURE__ */ (0,
|
|
12283
|
-
/* @__PURE__ */ (0,
|
|
12284
|
-
/* @__PURE__ */ (0,
|
|
12285
|
-
/* @__PURE__ */ (0,
|
|
12209
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "mb-5 rounded-2xl border border-line bg-paper p-5", children: [
|
|
12210
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex flex-wrap items-center justify-between gap-3", children: [
|
|
12211
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { children: [
|
|
12212
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "text-[11px] font-semibold uppercase tracking-[0.1em] text-faint", children: [
|
|
12286
12213
|
name,
|
|
12287
12214
|
" analysis"
|
|
12288
12215
|
] }),
|
|
12289
|
-
/* @__PURE__ */ (0,
|
|
12216
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "mt-1 font-serif text-[20px] leading-snug text-ink", children: isOvernight ? "Will run at 2:00 am tonight" : "Analysis is still running" })
|
|
12290
12217
|
] }),
|
|
12291
|
-
/* @__PURE__ */ (0,
|
|
12292
|
-
/* @__PURE__ */ (0,
|
|
12218
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "text-right", children: [
|
|
12219
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "font-serif text-[26px] text-ink", children: [
|
|
12293
12220
|
pct,
|
|
12294
12221
|
"%"
|
|
12295
12222
|
] }),
|
|
12296
|
-
/* @__PURE__ */ (0,
|
|
12223
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "text-[11.5px] text-faint", children: "complete" })
|
|
12297
12224
|
] })
|
|
12298
12225
|
] }),
|
|
12299
|
-
/* @__PURE__ */ (0,
|
|
12300
|
-
/* @__PURE__ */ (0,
|
|
12226
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "mt-4 h-2 overflow-hidden rounded-full bg-canvas", children: /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "h-full rounded-full bg-accent transition-all duration-700", style: { width: `${pct}%` } }) }),
|
|
12227
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("p", { className: "mt-3 text-[13px] leading-relaxed text-muted", children: [
|
|
12301
12228
|
lane.label ? `${lane.label}${lane.within ? `, ${lane.within.done}/${lane.within.total}` : ""}. ` : "",
|
|
12302
12229
|
isOvernight ? "The deterministic prep can run now, but the AI grading and synthesis are waiting for the overnight window." : "This tab will fill in as stages finish."
|
|
12303
12230
|
] }),
|
|
12304
|
-
isOvernight && /* @__PURE__ */ (0,
|
|
12231
|
+
isOvernight && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("p", { className: "mt-2 rounded-lg bg-canvas px-3 py-2 text-[12px] text-ink", children: "Keep the laptop plugged in and the lid open. Closing the lid can put the machine to sleep and stall the run." })
|
|
12305
12232
|
] });
|
|
12306
12233
|
}
|
|
12307
12234
|
var TABS = [
|
|
@@ -12310,25 +12237,25 @@ var TABS = [
|
|
|
12310
12237
|
{ key: "public", label: "Shared report" }
|
|
12311
12238
|
];
|
|
12312
12239
|
function ChatTab({ progress }) {
|
|
12313
|
-
const [state, setState] = (0,
|
|
12314
|
-
const [links, setLinks] = (0,
|
|
12315
|
-
(0,
|
|
12240
|
+
const [state, setState] = (0, import_react9.useState)("loading");
|
|
12241
|
+
const [links, setLinks] = (0, import_react9.useState)([]);
|
|
12242
|
+
(0, import_react9.useEffect)(() => {
|
|
12316
12243
|
fetch("/api/exports-manifest").then((r) => r.ok ? r.json() : null).then((j) => {
|
|
12317
12244
|
setLinks(j?.links ?? []);
|
|
12318
12245
|
setState(j?.connectedKinds?.length ? "connected" : "empty");
|
|
12319
12246
|
}).catch(() => setState("connected"));
|
|
12320
12247
|
}, []);
|
|
12321
12248
|
if (state === "loading") return null;
|
|
12322
|
-
if (state === "connected" && progress && !progress.done && !progress.skipped) return /* @__PURE__ */ (0,
|
|
12323
|
-
if (state === "connected") return /* @__PURE__ */ (0,
|
|
12324
|
-
return /* @__PURE__ */ (0,
|
|
12325
|
-
/* @__PURE__ */ (0,
|
|
12326
|
-
/* @__PURE__ */ (0,
|
|
12249
|
+
if (state === "connected" && progress && !progress.done && !progress.skipped) return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(LaneStatusCard, { name: "chat", lane: progress });
|
|
12250
|
+
if (state === "connected") return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(DetailedDataView, {});
|
|
12251
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "rounded-2xl border border-line bg-paper p-6", children: [
|
|
12252
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "font-serif text-[19px] text-ink", children: "No chat exports connected yet" }),
|
|
12253
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("p", { className: "mt-1.5 max-w-[62ch] text-[13px] leading-relaxed text-muted", children: [
|
|
12327
12254
|
"This tab analyzes your ChatGPT, claude.ai, or Notion history the same way the Code tab analyzes your Claude Code sessions. Request an export below, then run ",
|
|
12328
|
-
/* @__PURE__ */ (0,
|
|
12255
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("code", { className: "rounded bg-canvas px-1.5 py-0.5 text-[12px]", children: "polymath-society" }),
|
|
12329
12256
|
" again in your terminal \u2014 it finds the downloaded zip automatically and adds it to your report."
|
|
12330
12257
|
] }),
|
|
12331
|
-
/* @__PURE__ */ (0,
|
|
12258
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "mt-4 space-y-2.5", children: links.filter((l) => l.requestUrl).map((l) => /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(
|
|
12332
12259
|
"a",
|
|
12333
12260
|
{
|
|
12334
12261
|
href: l.requestUrl,
|
|
@@ -12336,19 +12263,19 @@ function ChatTab({ progress }) {
|
|
|
12336
12263
|
rel: "noreferrer",
|
|
12337
12264
|
className: "flex items-center justify-between gap-3 rounded-xl border border-line bg-canvas px-4 py-3 transition-colors hover:border-accent",
|
|
12338
12265
|
children: [
|
|
12339
|
-
/* @__PURE__ */ (0,
|
|
12340
|
-
/* @__PURE__ */ (0,
|
|
12266
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { children: [
|
|
12267
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "text-[13px] font-semibold text-ink", children: [
|
|
12341
12268
|
"Request my ",
|
|
12342
12269
|
l.label,
|
|
12343
12270
|
" export"
|
|
12344
12271
|
] }),
|
|
12345
|
-
/* @__PURE__ */ (0,
|
|
12272
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "mt-0.5 text-[11.5px] text-faint", children: [
|
|
12346
12273
|
l.buttonPath,
|
|
12347
12274
|
" \xB7 ready in ",
|
|
12348
12275
|
l.eta
|
|
12349
12276
|
] })
|
|
12350
12277
|
] }),
|
|
12351
|
-
/* @__PURE__ */ (0,
|
|
12278
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "shrink-0 text-[12px] font-medium text-accent", children: "Open \u2192" })
|
|
12352
12279
|
]
|
|
12353
12280
|
},
|
|
12354
12281
|
l.kind
|
|
@@ -12356,9 +12283,9 @@ function ChatTab({ progress }) {
|
|
|
12356
12283
|
] });
|
|
12357
12284
|
}
|
|
12358
12285
|
function Shell() {
|
|
12359
|
-
const [meta, setMeta] = (0,
|
|
12286
|
+
const [meta, setMeta] = (0, import_react9.useState)(null);
|
|
12360
12287
|
const { p: progress, landedSinceLoad } = usePipelineProgress();
|
|
12361
|
-
const [tab, setTab] = (0,
|
|
12288
|
+
const [tab, setTab] = (0, import_react9.useState)(() => {
|
|
12362
12289
|
const h = (typeof window !== "undefined" ? window.location.hash : "").replace("#", "");
|
|
12363
12290
|
return h === "chat" || h === "public" ? h : "coding";
|
|
12364
12291
|
});
|
|
@@ -12369,8 +12296,8 @@ function Shell() {
|
|
|
12369
12296
|
} catch {
|
|
12370
12297
|
}
|
|
12371
12298
|
};
|
|
12372
|
-
const [rubricNudge, setRubricNudge] = (0,
|
|
12373
|
-
(0,
|
|
12299
|
+
const [rubricNudge, setRubricNudge] = (0, import_react9.useState)(null);
|
|
12300
|
+
(0, import_react9.useEffect)(() => {
|
|
12374
12301
|
fetch("/api/config/calibration").then((r) => r.ok ? r.json() : null).then((cal) => {
|
|
12375
12302
|
if (cal?.source === "central" && cal.localRubricVersion && cal.doc?.rubricVersion && cal.localRubricVersion !== cal.doc.rubricVersion) {
|
|
12376
12303
|
setRubricNudge(`A newer grading rubric is published (${cal.doc.rubricVersion} \u2014 this install has ${cal.localRubricVersion}). Update polymath-analyzer and re-grade to stay comparable.`);
|
|
@@ -12379,7 +12306,7 @@ function Shell() {
|
|
|
12379
12306
|
});
|
|
12380
12307
|
}, []);
|
|
12381
12308
|
const refreshMeta = () => fetch("/meta.json").then((r) => r.ok ? r.json() : null).then(setMeta).catch(() => setMeta(null));
|
|
12382
|
-
(0,
|
|
12309
|
+
(0, import_react9.useEffect)(() => {
|
|
12383
12310
|
refreshMeta();
|
|
12384
12311
|
const onFocus = () => refreshMeta();
|
|
12385
12312
|
window.addEventListener("focus", onFocus);
|
|
@@ -12392,31 +12319,31 @@ function Shell() {
|
|
|
12392
12319
|
};
|
|
12393
12320
|
const identity = meta?.identity;
|
|
12394
12321
|
const canAuth = meta?.capabilities?.auth !== false;
|
|
12395
|
-
return /* @__PURE__ */ (0,
|
|
12396
|
-
/* @__PURE__ */ (0,
|
|
12397
|
-
/* @__PURE__ */ (0,
|
|
12398
|
-
/* @__PURE__ */ (0,
|
|
12399
|
-
/* @__PURE__ */ (0,
|
|
12322
|
+
return /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
|
|
12323
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "mb-6 flex flex-wrap items-center justify-between gap-3 border-b border-line pb-4", children: [
|
|
12324
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { children: [
|
|
12325
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "text-[15px] font-semibold text-ink", children: "Your coding analysis" }),
|
|
12326
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "text-[11.5px] text-faint", children: "computed on this machine \xB7 nothing leaves it without your say-so" })
|
|
12400
12327
|
] }),
|
|
12401
|
-
/* @__PURE__ */ (0,
|
|
12402
|
-
identity ? /* @__PURE__ */ (0,
|
|
12403
|
-
/* @__PURE__ */ (0,
|
|
12404
|
-
/* @__PURE__ */ (0,
|
|
12405
|
-
] }) : canAuth ? /* @__PURE__ */ (0,
|
|
12406
|
-
/* @__PURE__ */ (0,
|
|
12407
|
-
/* @__PURE__ */ (0,
|
|
12408
|
-
/* @__PURE__ */ (0,
|
|
12409
|
-
/* @__PURE__ */ (0,
|
|
12410
|
-
/* @__PURE__ */ (0,
|
|
12328
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
12329
|
+
identity ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
|
|
12330
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("span", { className: "rounded-full bg-paper px-3 py-1 text-[12px] text-muted", title: identity.email, children: identity.name || identity.email }),
|
|
12331
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("button", { onClick: signOut, className: "rounded-full px-2 py-1 text-[11.5px] text-faint transition-colors hover:text-ink", children: "Sign out" })
|
|
12332
|
+
] }) : canAuth ? /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("a", { href: "/auth/login", target: "_blank", rel: "noreferrer", className: "inline-flex items-center gap-2 rounded-full border border-line bg-paper px-3.5 py-1.5 text-[12px] font-medium text-ink transition-colors hover:bg-canvas", children: [
|
|
12333
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsxs)("svg", { width: "14", height: "14", viewBox: "0 0 48 48", "aria-hidden": "true", children: [
|
|
12334
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("path", { fill: "#EA4335", d: "M24 9.5c3.54 0 6.71 1.22 9.21 3.6l6.85-6.85C35.9 2.38 30.47 0 24 0 14.62 0 6.51 5.38 2.56 13.22l7.98 6.19C12.43 13.72 17.74 9.5 24 9.5z" }),
|
|
12335
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("path", { fill: "#4285F4", d: "M46.98 24.55c0-1.57-.15-3.09-.38-4.55H24v9.02h12.94c-.58 2.96-2.26 5.48-4.78 7.18l7.73 6c4.51-4.18 7.09-10.36 7.09-17.65z" }),
|
|
12336
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("path", { fill: "#FBBC05", d: "M10.53 28.59c-.48-1.45-.76-2.99-.76-4.59s.27-3.14.76-4.59l-7.98-6.19C.92 16.46 0 20.12 0 24c0 3.88.92 7.54 2.56 10.78l7.97-6.19z" }),
|
|
12337
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("path", { fill: "#34A853", d: "M24 48c6.48 0 11.93-2.13 15.89-5.81l-7.73-6c-2.15 1.45-4.92 2.3-8.16 2.3-6.26 0-11.57-4.22-13.47-9.91l-7.98 6.19C6.51 42.62 14.62 48 24 48z" })
|
|
12411
12338
|
] }),
|
|
12412
12339
|
"Sign in with Google"
|
|
12413
12340
|
] }) : null,
|
|
12414
|
-
/* @__PURE__ */ (0,
|
|
12341
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(PublicCodingPageShare, { identity: identity ?? null, canAuth })
|
|
12415
12342
|
] })
|
|
12416
12343
|
] }),
|
|
12417
|
-
rubricNudge && /* @__PURE__ */ (0,
|
|
12418
|
-
/* @__PURE__ */ (0,
|
|
12419
|
-
/* @__PURE__ */ (0,
|
|
12344
|
+
rubricNudge && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "mb-4 rounded-xl bg-amber-50 px-4 py-2.5 text-[12.5px] text-amber-800", children: rubricNudge }),
|
|
12345
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(PipelineProgressBanner, { p: progress, landedSinceLoad }),
|
|
12346
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)("div", { className: "mb-6 flex items-center gap-1 rounded-full border border-line bg-paper p-1", role: "tablist", "aria-label": "Report sections", children: TABS.map((t) => /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
12420
12347
|
"button",
|
|
12421
12348
|
{
|
|
12422
12349
|
role: "tab",
|
|
@@ -12427,16 +12354,16 @@ function Shell() {
|
|
|
12427
12354
|
},
|
|
12428
12355
|
t.key
|
|
12429
12356
|
)) }),
|
|
12430
|
-
tab === "coding" && /* @__PURE__ */ (0,
|
|
12431
|
-
/* @__PURE__ */ (0,
|
|
12432
|
-
/* @__PURE__ */ (0,
|
|
12357
|
+
tab === "coding" && /* @__PURE__ */ (0, import_jsx_runtime11.jsxs)(import_jsx_runtime11.Fragment, { children: [
|
|
12358
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(LaneStatusCard, { name: "coding", lane: progress?.coding }),
|
|
12359
|
+
/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(CodeAnalysisView, {})
|
|
12433
12360
|
] }),
|
|
12434
|
-
tab === "chat" && /* @__PURE__ */ (0,
|
|
12435
|
-
tab === "public" && /* @__PURE__ */ (0,
|
|
12361
|
+
tab === "chat" && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(ChatTab, { progress: progress?.chat }),
|
|
12362
|
+
tab === "public" && /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(PublicReportTab, {})
|
|
12436
12363
|
] });
|
|
12437
12364
|
}
|
|
12438
12365
|
var el = document.getElementById("root");
|
|
12439
|
-
if (el) (0, import_client.createRoot)(el).render(/* @__PURE__ */ (0,
|
|
12366
|
+
if (el) (0, import_client.createRoot)(el).render(/* @__PURE__ */ (0, import_jsx_runtime11.jsx)(Shell, {}));
|
|
12440
12367
|
/*! Bundled license information:
|
|
12441
12368
|
|
|
12442
12369
|
react/cjs/react.production.min.js:
|