From 5046019c2cb95e59d153fa2747fa47f6dd839198 Mon Sep 17 00:00:00 2001 From: Green hats <183933879+Green-hats@users.noreply.github.com> Date: Thu, 10 Sep 2026 11:08:01 +0800 Subject: [PATCH 01/76] fix(workspace): detect the initial UI language from browser preferences Signed-off-by: Green hats <183933879+Green-hats@users.noreply.github.com> --- apps/presentation/dashboard/README.md | 22 +++ apps/presentation/dashboard/package.json | 1 + .../smoke/workspace-locale-browser-smoke.mjs | 101 ++++++++++++++ .../src/features/personal-workspace/i18n.tsx | 13 +- .../personal-workspace/personal-workspace.css | 4 + examples/personal-workspace-browser-smoke.mjs | 22 +-- loopx/web/chat/assets/index-B_qhapAZ.css | 1 + loopx/web/chat/assets/index-BzrSewxR.js | 129 ++++++++++++++++++ loopx/web/chat/index.html | 4 +- 9 files changed, 284 insertions(+), 13 deletions(-) create mode 100644 apps/presentation/dashboard/smoke/workspace-locale-browser-smoke.mjs create mode 100644 loopx/web/chat/assets/index-B_qhapAZ.css create mode 100644 loopx/web/chat/assets/index-BzrSewxR.js diff --git a/apps/presentation/dashboard/README.md b/apps/presentation/dashboard/README.md index 8679884df5..b7fbb9dc63 100644 --- a/apps/presentation/dashboard/README.md +++ b/apps/presentation/dashboard/README.md @@ -9,6 +9,28 @@ Personal Workspace is the operator UI for Goals, Tasks, Chat, and outputs. The CLI and versioned control-plane projections remain the sources of truth; the UI does not create a second state authority. +## Workspace Language / 工作区语言 + +On first use, the workspace follows the browser's ordered language preferences: +English uses English, and Chinese uses the available Simplified Chinese catalog. +If neither language matches or language information is unavailable, it uses +English. This replaces the previous unconditional Chinese default. + +Choose **Settings → Language** to override detection. Explicit choices remain in +the existing `loopx-pw-locale` browser storage entry and survive reloads and +upgrades on the same origin. A different host/port, cleared browser storage, or a +fresh desktop webview starts detection again. When storage is blocked, language +changes last for the current session only. + +首次打开时,工作区按浏览器语言偏好顺序选择英文或简体中文;没有匹配语言或无法 +获取语言信息时使用英文,替代原来固定使用中文的默认行为。 +可在 **设置 → 语言** 手动选择,同一站点来源下的刷新和升级会保留选择。 +更换主机或端口、清除浏览器存储或使用新的桌面 WebView 后会重新检测;浏览器 +禁止存储时,手动选择仅在当前会话有效。 + +Validate this behavior with `npm run smoke:workspace-locale`; the same cases also +run in the full development and packaged personal-workspace browser smokes. + ## Fresh Clone Public Preview No private LoopX state is required for the first dashboard preview. The diff --git a/apps/presentation/dashboard/package.json b/apps/presentation/dashboard/package.json index c254175a3f..1add134bfa 100644 --- a/apps/presentation/dashboard/package.json +++ b/apps/presentation/dashboard/package.json @@ -27,6 +27,7 @@ "smoke:goal-order": "tsc --ignoreConfig --target ES2022 --module ES2022 --moduleResolution Bundler --skipLibCheck --strict --outDir node_modules/.cache/loopx-goal-order src/features/personal-workspace/goal-order.ts && node src/features/personal-workspace/goal-order.test.mjs", "smoke:home-browser": "node ../../../examples/dashboard-home-browser-smoke.mjs", "smoke:home-route": "rm -rf /tmp/loopx-home-route-smoke && tsc --ignoreConfig --target ES2022 --module CommonJS --moduleResolution Node --ignoreDeprecations 6.0 --skipLibCheck --strict --outDir /tmp/loopx-home-route-smoke smoke/home-route-smoke.ts && node /tmp/loopx-home-route-smoke/home-route-smoke.js", + "smoke:workspace-locale": "node ../../../examples/personal-workspace-browser-smoke.mjs --locale-only", "smoke:personal-workspace": "npm run smoke:goal-order && node src/features/personal-workspace/workspace-theme.test.mjs && node ../../../examples/personal-workspace-browser-smoke.mjs", "smoke:personal-workspace-packaged": "npm run smoke:goal-order && node src/features/personal-workspace/workspace-theme.test.mjs && LOOPX_PERSONAL_WORKSPACE_PACKAGED=1 LOOPX_PLAYWRIGHT_PACKAGE=\"$PWD/node_modules/playwright\" node ../../../examples/personal-workspace-browser-smoke.mjs", "smoke:personal-workspace-router": "rm -rf /tmp/loopx-personal-workspace-router-smoke && tsc --ignoreConfig --target ES2022 --module commonjs --moduleResolution node --ignoreDeprecations 6.0 --skipLibCheck --strict --outDir /tmp/loopx-personal-workspace-router-smoke smoke/personal-workspace-router-smoke.ts src/features/personal-workspace/personal-workspace-router.ts && node /tmp/loopx-personal-workspace-router-smoke/smoke/personal-workspace-router-smoke.js", diff --git a/apps/presentation/dashboard/smoke/workspace-locale-browser-smoke.mjs b/apps/presentation/dashboard/smoke/workspace-locale-browser-smoke.mjs new file mode 100644 index 0000000000..4d5064ef18 --- /dev/null +++ b/apps/presentation/dashboard/smoke/workspace-locale-browser-smoke.mjs @@ -0,0 +1,101 @@ +import assert from "node:assert/strict"; +import { resolve } from "node:path"; + +// Exercise the shipped provider and Settings UI against the shared synthetic API. +export async function verifyWorkspaceLocales({ browser, url, installApi, outputDir }) { + const cases = [ + { name: "fresh English", locale: "en-US", expected: "en" }, + { name: "fresh Chinese", locale: "zh-CN", expected: "zh-CN" }, + { name: "Chinese region", locale: "zh-TW", expected: "zh-CN" }, + { name: "unsupported language", locale: "fr-FR", expected: "en" }, + { name: "ordered preferences", languages: ["fr-FR", "en-GB", "zh-CN"], expected: "en" }, + { name: "secondary Chinese", languages: ["fr-FR", "zh-CN", "en"], expected: "zh-CN" }, + { name: "language fallback", languages: [], locale: "zh-CN", expected: "zh-CN" }, + { name: "missing language", languages: [], language: "", expected: "en" }, + { name: "saved English", stored: "en", locale: "zh-CN", expected: "en" }, + { name: "saved Chinese", stored: "zh-CN", locale: "en-US", expected: "zh-CN" }, + { name: "invalid preference", stored: "invalid", locale: "en-US", expected: "en" }, + { name: "locale storage failure English", blocked: true, locale: "en-US", expected: "en" }, + { name: "locale storage failure Chinese", blocked: true, locale: "zh-CN", expected: "zh-CN" }, + ]; + for (const scenario of cases) { + const page = await browser.newPage({ locale: scenario.locale ?? "en-US" }); + try { + await installApi(page); + await page.addInitScript(({ stored, blocked, languages, language }) => { + if (stored !== undefined) localStorage.setItem("loopx-pw-locale", stored); + if (languages !== undefined) Object.defineProperty(navigator, "languages", { value: languages }); + if (language !== undefined) Object.defineProperty(navigator, "language", { value: language }); + if (blocked) { + const getItem = Storage.prototype.getItem; + const setItem = Storage.prototype.setItem; + Storage.prototype.getItem = function (key) { + if (key === "loopx-pw-locale") throw new DOMException("Storage unavailable", "SecurityError"); + return getItem.call(this, key); + }; + Storage.prototype.setItem = function (key, value) { + if (key === "loopx-pw-locale") throw new DOMException("Storage unavailable", "SecurityError"); + return setItem.call(this, key, value); + }; + } + }, scenario); + await page.goto(url, { waitUntil: "networkidle" }); + await page.getByTestId("personal-goal-home").waitFor(); + assert.equal(await page.locator("html").getAttribute("lang"), scenario.expected, scenario.name); + const label = scenario.expected === "en" ? "Settings" : "设置"; + assert.ok(await page.getByRole("button", { name: label, exact: true }).isVisible(), scenario.name); + if (!scenario.blocked) { + assert.equal(await page.evaluate(() => localStorage.getItem("loopx-pw-locale")), scenario.stored ?? null, + `${scenario.name}: detection must not overwrite a saved choice`); + } + if (scenario.blocked) { + await page.getByRole("button", { name: label, exact: true }).click(); + await page.getByRole("button", { name: /Language|语言/ }).click(); + const next = scenario.expected === "en" ? "zh-CN" : "en"; + await page.getByRole("radio", { name: next === "en" ? /English/ : /Simplified Chinese/ }).click(); + assert.equal(await page.locator("html").getAttribute("lang"), next, + "A locale write failure still permits changing the current session"); + } + console.log(`workspace locale: ${scenario.name}: ok`); + } finally { + await page.close(); + } + } + + const page = await browser.newPage({ locale: "en-US", viewport: { width: 1440, height: 960 } }); + try { + await installApi(page); + await page.goto(url, { waitUntil: "networkidle" }); + await page.getByTestId("personal-goal-home").waitFor(); + await page.screenshot({ path: resolve(outputDir, "locale-default-english.png") }); + await page.setViewportSize({ width: 390, height: 844 }); + await page.locator(".personal-channel-scroll").evaluate((element) => { element.scrollTop = 0; }); + const clippedStats = await page.locator(".personal-digest-stats span").evaluateAll((stats) => + stats.filter((stat) => { + const rect = stat.getBoundingClientRect(); + return rect.left < 0 || rect.right > window.innerWidth; + }).length, + ); + assert.equal(clippedStats, 0, "English summary statistics fit the mobile viewport"); + await page.screenshot({ path: resolve(outputDir, "locale-default-english-mobile.png") }); + await page.setViewportSize({ width: 1440, height: 960 }); + await page.getByRole("button", { name: "Settings", exact: true }).click(); + await page.getByRole("button", { name: /Language/ }).click(); + await page.getByRole("radio", { name: /Simplified Chinese/ }).click(); + assert.equal(await page.evaluate(() => localStorage.getItem("loopx-pw-locale")), "zh-CN"); + await page.reload({ waitUntil: "networkidle" }); + await page.getByTestId("personal-goal-home").waitFor(); + assert.equal(await page.locator("html").getAttribute("lang"), "zh-CN"); + await page.screenshot({ path: resolve(outputDir, "locale-saved-chinese.png") }); + await page.getByRole("button", { name: "设置", exact: true }).click(); + await page.getByRole("button", { name: /语言/ }).click(); + await page.getByRole("radio", { name: /English/ }).click(); + await page.reload({ waitUntil: "networkidle" }); + await page.getByTestId("personal-goal-home").waitFor(); + assert.equal(await page.locator("html").getAttribute("lang"), "en"); + assert.equal(await page.evaluate(() => localStorage.getItem("loopx-pw-locale")), "en"); + console.log("workspace locale: Settings choices survive reload in both directions: ok"); + } finally { + await page.close(); + } +} diff --git a/apps/presentation/dashboard/src/features/personal-workspace/i18n.tsx b/apps/presentation/dashboard/src/features/personal-workspace/i18n.tsx index 1945b378a1..4e86200ef0 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/i18n.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/i18n.tsx @@ -1788,10 +1788,19 @@ function formatMessage(template: string, values?: Record) => string; diff --git a/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace.css b/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace.css index 98bab3702b..b80e61e9d4 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace.css +++ b/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace.css @@ -1585,6 +1585,10 @@ .personal-digest-stats { display: flex; gap: 8px; } .personal-digest-stats span { display: inline-flex; align-items: baseline; gap: 6px; padding: 6px 13px; border: 1px solid var(--pw-line-strong); border-radius: 99px; background: #fff; color: var(--pw-muted); font-size: 12px; } .personal-digest-stats b { color: var(--pw-text); font-size: 14px; } +@media (max-width: 720px) { + .personal-digest-card { flex-direction: column; align-items: flex-start; } + .personal-digest-stats { flex-wrap: wrap; } +} .personal-composer-hint { margin: 0 0 8px; color: var(--pw-faint); font-size: 11.5px; } diff --git a/examples/personal-workspace-browser-smoke.mjs b/examples/personal-workspace-browser-smoke.mjs index d136991892..6ffce86442 100644 --- a/examples/personal-workspace-browser-smoke.mjs +++ b/examples/personal-workspace-browser-smoke.mjs @@ -13,6 +13,8 @@ import { waitForHttp, } from "./dashboard-browser-smoke-support.mjs"; +import { verifyWorkspaceLocales } from "../apps/presentation/dashboard/smoke/workspace-locale-browser-smoke.mjs"; + const require = createRequire(import.meta.url); const repoRoot = resolve(dirname(fileURLToPath(import.meta.url)), ".."); const dashboardDir = resolve(repoRoot, "apps/presentation/dashboard"); @@ -1268,7 +1270,9 @@ async function main() { const url = `http://127.0.0.1:${port}/${packaged ? "chat/" : ""}?statusUrl=/status.json`; await waitForHttp(url); browser = await launchBrowser(chromium); - const capabilityOffPage = await browser.newPage({ viewport: { width: 1512, height: 982 } }); + await verifyWorkspaceLocales({ browser, url, installApi, outputDir }); + if (process.argv.includes("--locale-only")) return; + const capabilityOffPage = await browser.newPage({ locale: "zh-CN", viewport: { width: 1512, height: 982 } }); await installApi(capabilityOffPage, { goalSubagentConfigurationEnabled: false }); await capabilityOffPage.goto(url, { waitUntil: "networkidle" }); await capabilityOffPage.getByTestId("personal-goal-home").waitFor({ state: "visible", timeout: 15_000 }); @@ -1280,7 +1284,7 @@ async function main() { throw new Error("Capability-off Dashboard exposed Goal sub-agent controls"); } await capabilityOffPage.close(); - const page = await browser.newPage({ viewport: { width: 1512, height: 982 } }); + const page = await browser.newPage({ locale: "zh-CN", viewport: { width: 1512, height: 982 } }); const pageErrors = []; page.on("pageerror", (error) => pageErrors.push(error.message)); page.on("console", (message) => { @@ -1621,7 +1625,7 @@ async function main() { api.freezeGoalSubagentStatusProjection = false; pass(22, "Per-Goal sub-agent execution supports unrestricted and restricted policies, previews before writing, verifies shared-state readback, leaves no-domain Goals usable, and can be disabled again."); - if (await page.locator("html").getAttribute("lang") !== "zh-CN") throw new Error("Desktop did not start in Simplified Chinese"); + if (await page.locator("html").getAttribute("lang") !== "zh-CN") throw new Error("Chinese browser preference did not select Simplified Chinese"); await page.getByRole("button", { name: "设置", exact: true }).click(); await page.getByRole("region", { name: "设置", exact: true }).waitFor({ state: "visible" }); await page.getByRole("button", { name: /语言/ }).click(); @@ -2717,7 +2721,7 @@ async function main() { observations.push(`Refresh recovery failure: ${error.message}`); } - const remote = await browser.newPage({ viewport: { width: 1512, height: 982 } }); + const remote = await browser.newPage({ locale: "zh-CN", viewport: { width: 1512, height: 982 } }); await installApi(remote); await remote.goto(url, { waitUntil: "networkidle" }); await remote.getByRole("button", { name: "添加 SSH 隧道来源" }).click(); @@ -2768,7 +2772,7 @@ async function main() { } await remote.close(); - const mobile = await browser.newPage({ viewport: { width: 390, height: 844 }, isMobile: true }); + const mobile = await browser.newPage({ locale: "zh-CN", viewport: { width: 390, height: 844 }, isMobile: true }); await installApi(mobile); await mobile.goto(url, { waitUntil: "networkidle" }); await mobile.getByTestId("personal-goal-home").waitFor({ state: "visible" }); @@ -2851,7 +2855,7 @@ async function main() { if (mobileGoalOverflow > 1) throw new Error(`Mobile Goal header has ${mobileGoalOverflow}px horizontal overflow`); await mobile.screenshot({ path: resolve(outputDir, "mobile-goal-settings-menu.png"), fullPage: false, animations: "disabled" }); await mobile.close(); - const progressive = await browser.newPage({ viewport: { width: 1512, height: 982 } }); + const progressive = await browser.newPage({ locale: "zh-CN", viewport: { width: 1512, height: 982 } }); const progressiveApi = await installApi(progressive); progressiveApi.nextFullStatusDelayMs = 1_500; await progressive.goto(url, { waitUntil: "domcontentloaded" }); @@ -2871,7 +2875,7 @@ async function main() { pass(23, "The stopped archive loads after active Goals: active Goals are interactive first, the stopped section shows an accessible loading state, then stopped Goals arrive without replacing the page."); await progressive.close(); - const revisionRace = await browser.newPage({ viewport: { width: 1512, height: 982 } }); + const revisionRace = await browser.newPage({ locale: "zh-CN", viewport: { width: 1512, height: 982 } }); const revisionRaceApi = await installApi(revisionRace); revisionRaceApi.captureNextStatusGeneration = true; revisionRaceApi.activationChangeAfterCapturedActive = { @@ -2891,7 +2895,7 @@ async function main() { } await revisionRace.close(); - const progressiveError = await browser.newPage({ viewport: { width: 1512, height: 982 } }); + const progressiveError = await browser.newPage({ locale: "zh-CN", viewport: { width: 1512, height: 982 } }); const errorApi = await installApi(progressiveError); errorApi.failNextFullStatus = true; await progressiveError.goto(url, { waitUntil: "domcontentloaded" }); @@ -2936,7 +2940,7 @@ async function main() { const failures = [...results.entries()].filter(([, result]) => result.status !== "PASS"); if (failures.length) throw new Error(`Acceptance failures: ${failures.map(([criterion, result]) => `${criterion} ${result.status}: ${result.note}`).join(" | ")}`); } finally { - if ([...results.values()].some((result) => result.status !== "PASS")) { + if (!process.argv.includes("--locale-only") && [...results.values()].some((result) => result.status !== "PASS")) { await writeFile(resolve(outputDir, "acceptance-results.json"), `${JSON.stringify({ criteria: Object.fromEntries(results), observations }, null, 2)}\n`, "utf8"); } await browser?.close(); diff --git a/loopx/web/chat/assets/index-B_qhapAZ.css b/loopx/web/chat/assets/index-B_qhapAZ.css new file mode 100644 index 0000000000..bd1278069e --- /dev/null +++ b/loopx/web/chat/assets/index-B_qhapAZ.css @@ -0,0 +1 @@ +.personal-workspace-shell{--pw-bg:#fbfaf7;--pw-card:#fff;--pw-line:#eceae3;--pw-line-strong:#e0ddd4;--pw-muted:#82889a;--pw-faint:#aab0bf;--pw-text:#23262e;--pw-blue:#2f66e9;--pw-blue-ink:#2456c8;--pw-blue-soft:#ebf1fe;--pw-amber:#a86a12;--pw-amber-bg:#fbf2df;--pw-red:#c2402f;--pw-red-bg:#fcecea;--pw-green:#2e7d5b;--pw-green-bg:#e6f3ec;background:var(--pw-bg);min-height:100vh;color:var(--pw-text);grid-template-columns:272px minmax(520px,1fr);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;display:grid}.personal-workspace-shell.has-drawer{grid-template-columns:256px minmax(500px,1fr) minmax(340px,404px)}.personal-workspace-shell.has-task-inspector{grid-template-columns:minmax(520px,1fr) minmax(520px,50vw)}.personal-workspace-shell.has-task-inspector .personal-workspace-sidebar{display:none}.personal-workspace-shell.has-task-inspector.is-task-inspector-full{grid-template-columns:minmax(600px,1fr)}.personal-workspace-shell.is-task-inspector-full .personal-workspace-main{display:none}.personal-workspace-sidebar{border-right:1px solid var(--pw-line);background:#f5f3ee;min-width:0}.personal-workspace-sidebar-inner{width:100%;height:100%}.personal-sr-only{clip:rect(0, 0, 0, 0)!important;white-space:nowrap!important;border:0!important;width:1px!important;height:1px!important;margin:-1px!important;padding:0!important;position:absolute!important;overflow:hidden!important}.personal-workspace-main{min-width:0}.personal-workspace-drawer{border-left:1px solid var(--pw-line);background:#fff;min-width:0;position:relative;box-shadow:-14px 0 36px #1e1c140d}.personal-workspace-drawer[data-drawer-mode=inspector]{z-index:3;width:auto;position:relative;box-shadow:-8px 0 24px #1e284014}.personal-workspace-drawer[data-drawer-mode=inspector-full]{min-width:0;box-shadow:none;grid-column:1}.personal-sidebar-backdrop{display:none}.personal-workspace-shell :focus-visible:not(textarea):not(input){outline-offset:2px;outline:2px solid #5f87ed}.personal-goal-directory{flex-direction:column;width:100%;height:100vh;display:flex;position:sticky;top:0}.personal-sidebar-brand{border-bottom:1px solid var(--pw-line);align-items:center;gap:11px;height:74px;padding:0 18px;display:flex}.personal-sidebar-brand>span:last-child{gap:1px;display:grid}.personal-sidebar-brand strong{letter-spacing:.01em;font-size:16px}.personal-sidebar-brand small{color:var(--pw-muted);font-size:11px}.personal-brand-mark,.personal-manager-icon{color:#fff;background:linear-gradient(135deg,#2f66e9,#6f9bff);border-radius:10px;place-items:center;display:grid;box-shadow:0 2px 6px #2f66e947}.personal-brand-mark{width:34px;height:34px}.personal-manager-icon{width:30px;height:30px;color:var(--pw-blue-ink);background:var(--pw-blue-soft);box-shadow:none}.personal-status-source{border-bottom:1px solid var(--pw-line);gap:7px;padding:12px 14px;display:grid;position:relative}.personal-status-source>header{color:var(--pw-faint);letter-spacing:.08em;text-transform:uppercase;justify-content:space-between;align-items:center;padding:0 3px;font-size:10px;font-weight:700;display:flex}.personal-status-source>header button,.personal-status-source-meta button,.personal-status-source-form header button{width:25px;height:25px;color:var(--pw-muted);cursor:pointer;background:0 0;border:0;border-radius:7px;place-items:center;padding:0;display:grid}.personal-status-source>header button:hover,.personal-status-source-meta button:hover,.personal-status-source-form header button:hover{color:var(--pw-text);background:#fff;box-shadow:0 1px 3px #1e1c141a}.personal-status-source-select{width:100%}.personal-status-source-meta{min-width:0;color:var(--pw-muted);align-items:center;gap:7px;padding:0 3px;font-size:10.5px;display:flex}.personal-status-source-meta>span{white-space:nowrap;align-items:center;gap:5px;display:inline-flex}.personal-status-source-meta>span i{background:#3fbf82;border-radius:50%;width:6px;height:6px}.personal-status-source-meta>span.is-loading i{background:#e5a33d}.personal-status-source-meta>span.is-error i{background:#dd5b47}.personal-status-source-meta small{white-space:nowrap;text-overflow:ellipsis;min-width:0;overflow:hidden}.personal-status-source-meta button{width:22px;height:22px;color:var(--pw-faint);margin-left:auto}.personal-status-source-error{color:var(--pw-red);overflow-wrap:anywhere;margin:0 3px;font-size:10px;line-height:1.4}.personal-status-source-form{z-index:12;border:1px solid var(--pw-line-strong);background:#fff;border-radius:12px;gap:10px;padding:13px;display:grid;position:absolute;top:calc(100% - 4px);left:12px;right:12px;box-shadow:0 12px 32px #1e1c1424}.personal-status-source-form>header{justify-content:space-between;align-items:center;font-size:12.5px;display:flex}.personal-status-source-form label{color:var(--pw-muted);gap:5px;font-size:10.5px;display:grid}.personal-status-source-form input,.personal-status-source-form select{border:1px solid var(--pw-line-strong);width:100%;min-width:0;height:34px;color:var(--pw-text);background:#fff;border-radius:8px;outline:0;padding:0 9px;font:12px/1.2 inherit}.personal-status-source-form input:focus,.personal-status-source-form select:focus{border-color:#8aa7ed;box-shadow:0 0 0 2px #2f66e91a}.personal-status-source-form input:disabled,.personal-status-source-form select:disabled{color:var(--pw-faint);background:#f6f5f2}.personal-status-source-form p{color:var(--pw-muted);overflow-wrap:anywhere;margin:0;font-size:10px;line-height:1.45}.personal-status-source-form p.is-error{color:var(--pw-red)}.personal-status-source-form code{font:9.5px/1.5 SF Mono,ui-monospace,Menlo,Consolas,monospace}.personal-status-source-add{background:var(--pw-blue);color:#fff;cursor:pointer;border:0;border-radius:8px;min-height:34px;font-size:11.5px;font-weight:650}.personal-status-source-add:hover{background:var(--pw-blue-ink)}.personal-status-source-add:disabled{cursor:not-allowed;opacity:.48}.personal-status-source-modes{background:#f2f1ed;border-radius:9px;grid-template-columns:1fr 1fr;gap:3px;padding:3px;display:grid}.personal-status-source-modes button{min-height:28px;color:var(--pw-muted);cursor:pointer;background:0 0;border:0;border-radius:7px;padding:0 8px;font-size:10.5px;font-weight:650}.personal-status-source-modes button[aria-selected=true]{color:var(--pw-text);background:#fff;box-shadow:0 1px 3px #1e1c141a}.personal-status-source-field-row{grid-template-columns:minmax(0,1fr) 34px;gap:6px;display:grid}.personal-status-source-field-row>button{border:1px solid var(--pw-line-strong);width:34px;height:34px;color:var(--pw-muted);cursor:pointer;background:#fff;border-radius:8px;place-items:center;padding:0;display:grid}.personal-status-source-field-row>button:hover{color:var(--pw-text);background:#f8f7f4}.personal-status-source-field-row>button:disabled{cursor:wait;opacity:.45}.personal-status-source-command{background:#f6f5f2;border-radius:8px;gap:7px;padding:8px 9px;display:grid}.personal-status-source-command code{color:#4e5668;overflow-wrap:anywhere}.personal-status-source-command button{border:1px solid var(--pw-line-strong);min-height:25px;color:var(--pw-blue-ink);cursor:pointer;background:#fff;border-radius:7px;justify-content:center;justify-self:end;align-items:center;gap:5px;padding:0 8px;font-size:10px;font-weight:650;display:inline-flex}.personal-status-source-command button:disabled{color:var(--pw-faint);cursor:not-allowed}.personal-sidebar-nav{flex:1;padding:12px;overflow:auto}.personal-manager-link,.personal-goal-link,.personal-sidebar-utility{width:100%;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0}.personal-manager-link{border-radius:11px;grid-template-columns:30px 1fr auto auto;align-items:center;gap:10px;padding:8px 10px;font-weight:650;display:grid}.personal-manager-link:hover,.personal-goal-link:hover{background:#ffffffa6}.personal-manager-link[aria-current=page],.personal-goal-link[aria-current=page]{background:#fff;box-shadow:0 1px 4px #1e1c141a}.personal-sidebar-count{background:var(--pw-amber-bg);min-width:22px;color:var(--pw-amber);text-align:center;border-radius:99px;padding:2px 7px;font-size:11px;font-weight:650}.personal-sidebar-section-title{color:var(--pw-faint);letter-spacing:.08em;text-transform:uppercase;justify-content:space-between;padding:20px 10px 7px;font-size:11px;font-weight:650;display:flex}.personal-sidebar-title-actions{align-items:center;gap:6px;display:flex}.personal-sidebar-title-actions button{width:28px;height:28px;color:var(--pw-muted);cursor:pointer;background:0 0;border:0;border-radius:7px;place-items:center;padding:0;display:grid}.personal-sidebar-title-actions button:hover{color:var(--pw-text);background:#fff;box-shadow:0 1px 3px #1e1c141f}.personal-goal-list{gap:2px;display:grid}.personal-goal-row{border-radius:11px;grid-template-columns:minmax(0,1fr) 28px 28px;align-items:center;gap:2px;display:grid}.personal-goal-row:has(.personal-goal-move-actions){grid-template-columns:minmax(0,1fr) 52px 28px}.personal-goal-row[data-reorder-goal]>.personal-goal-link{cursor:grab;-webkit-user-select:none;user-select:none}.personal-goal-row[data-reorder-goal]>.personal-goal-link:active{cursor:grabbing}.personal-goal-row.is-drop-before{box-shadow:0 -2px var(--color-link,#0070f3)}.personal-goal-row.is-drop-after{box-shadow:0 2px var(--color-link,#0070f3)}.personal-goal-move-actions{display:flex}.personal-goal-move-actions button{min-width:26px;min-height:44px;color:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;place-items:center;display:grid}.personal-goal-move-actions button:disabled{opacity:.35;cursor:default}.personal-goal-move-actions button:not(:disabled):hover{background:var(--color-surface-soft,#f2f2f2)}.personal-goal-link{border-radius:11px;grid-template-columns:30px minmax(0,1fr) auto;align-items:center;gap:10px;min-height:44px;padding:7px 5px 7px 10px;display:grid}.personal-goal-lifecycle{width:26px;height:26px;color:var(--pw-faint);cursor:pointer;background:0 0;border:0;border-radius:7px;place-items:center;padding:0;display:grid}.personal-goal-lifecycle:hover{color:var(--pw-text);background:#fff;box-shadow:0 1px 3px #1e1c141f}.personal-goal-lifecycle:disabled{opacity:.45;cursor:wait}.personal-goal-lifecycle.is-pending svg{animation:.8s linear infinite personal-goal-lifecycle-spin}@keyframes personal-goal-lifecycle-spin{to{transform:rotate(360deg)}}.personal-goal-delete:hover{color:var(--pw-danger)}.personal-goal-link-copy{gap:2px;min-width:0;display:grid}.personal-goal-link-copy strong,.personal-goal-link-copy small{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.personal-goal-link-copy strong{font-size:13px;font-weight:600}.personal-goal-link-copy small{color:var(--pw-muted);align-items:center;gap:5px;font-size:11px;display:flex}.personal-goal-state-dot{background:#e8ecf1;border-radius:9px;width:30px;height:30px;position:relative}.personal-goal-state-dot:after{content:"";background:#9aa3b2;border-radius:50%;width:7px;height:7px;position:absolute;bottom:3px;right:3px;box-shadow:0 0 0 2px #ffffffd9}.personal-goal-row:nth-child(5n+1) .personal-goal-state-dot{background:#e3ebfd}.personal-goal-row:nth-child(5n+2) .personal-goal-state-dot{background:#eee7fb}.personal-goal-row:nth-child(5n+3) .personal-goal-state-dot{background:#e2f2e4}.personal-goal-row:nth-child(5n+4) .personal-goal-state-dot{background:#fbf0dc}.personal-goal-row:nth-child(5n) .personal-goal-state-dot{background:#e8ecf1}.personal-goal-state-dot.is-danger:after{background:#dd5b47}.personal-goal-state-dot.is-warning:after{background:#e5a33d}.personal-goal-state-dot.is-info:after{background:#54a5e8}.personal-goal-state-dot.is-success:after{background:#3fae7c}.personal-goal-state-dot.is-quiet:after{background:#b6bcc9}.personal-goal-state-dot.is-stopped:after{background:#8f96a4}.personal-stopped-goals{border-top:1px solid var(--pw-line);margin-top:14px;padding-top:8px}.personal-stopped-goals>summary{min-height:34px;color:var(--pw-muted);cursor:pointer;letter-spacing:.04em;border-radius:9px;grid-template-columns:16px minmax(0,1fr) auto;align-items:center;gap:6px;padding:5px 10px;font-size:11px;font-weight:650;list-style:none;display:grid}.personal-stopped-goals>summary::-webkit-details-marker{display:none}.personal-stopped-goals>summary:hover{color:var(--pw-text);background:#ffffff8c}.personal-stopped-goals>summary>svg:first-child{transition:transform .14s}.personal-stopped-goals[open]>summary>svg:first-child{transform:rotate(180deg)}.personal-stopped-goals>summary small{text-align:center;background:#ebe9e3;border-radius:99px;min-width:22px;padding:2px 6px}.personal-goal-list.is-stopped{opacity:.82;margin-top:2px}.personal-stopped-goal-error{background:var(--pw-red-bg);color:var(--pw-red);border:1px solid #edc1ba;border-radius:9px;gap:7px;margin:6px 8px;padding:9px 10px;font-size:11px;line-height:1.45;display:grid}.personal-stopped-goal-error button{min-height:28px;color:inherit;cursor:pointer;font:inherit;background:0 0;border:1px solid;border-radius:7px;justify-self:start;padding:0 9px;font-weight:650}.personal-priority-dot{background:#aab2bf;border-radius:50%;width:7px;height:7px}.personal-priority-dot.is-high{background:#dd5b47}.personal-priority-dot.is-medium{background:#e5a33d}.personal-priority-dot.is-low{background:#3fae7c}.personal-sidebar-footer{border-top:1px solid var(--pw-line);flex-shrink:0;padding:12px}.personal-update-trigger{width:100%;min-height:44px;color:var(--pw-text);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;align-items:center;gap:8px;padding:0 9px;font-size:13px;display:flex}.personal-update-trigger span{text-align:left;flex:1}.personal-update-trigger:hover{background:var(--pw-card)}.personal-update-trigger:focus-visible{outline-offset:2px;outline:2px solid #0070f3}.personal-update-panel{box-sizing:border-box;width:min(320px,100vw - 24px);max-height:calc(100dvh - 104px);color:var(--pw-text);background:var(--pw-card,#fff);font:inherit;border:1px solid var(--pw-line);border-radius:12px;margin:0;padding:16px;font-size:13px;line-height:1.6;position:fixed;inset:auto auto 80px 12px;overflow-y:auto;box-shadow:0 8px 28px #0000001f}.personal-update-panel header{justify-content:space-between;align-items:center;display:flex}.personal-update-panel button{min-height:44px;color:inherit;background:var(--pw-card,#fff);border:1px solid var(--pw-line);cursor:pointer;border-radius:6px;padding:6px 10px}.personal-update-panel header button{border:0;place-items:center;min-width:44px;display:grid}.personal-update-panel summary{cursor:pointer;align-content:center;min-height:44px}.personal-update-panel p{margin:10px 0}.personal-update-panel label,.personal-update-panel small,.personal-update-panel code{display:block}.personal-update-panel select{width:100%;min-height:44px;color:inherit;background:var(--pw-card);border:1px solid var(--pw-line);border-radius:6px;margin-top:6px}.personal-update-actions{flex-wrap:wrap;gap:8px;display:flex}.personal-update-actions button{border:1px solid var(--pw-line);border-radius:6px;min-height:44px;padding:6px 10px}.personal-update-panel a{text-decoration:underline}.personal-update-panel :focus-visible{outline-offset:2px;outline:2px solid #0070f3}.personal-sidebar-utility{border:1px solid var(--pw-line-strong);background:#fff;border-radius:10px;grid-template-columns:32px minmax(0,1fr) auto;align-items:center;gap:10px;min-height:54px;padding:7px 9px;font-size:13px;display:grid;box-shadow:0 1px 4px #1e1c1412}.personal-sidebar-utility:hover{background:#fff;border-color:#d6d2c8;box-shadow:0 2px 7px #1e1c141a}.personal-sidebar-utility-icon{background:var(--pw-blue-soft);width:32px;height:32px;color:var(--pw-blue-ink);border-radius:9px;place-items:center;display:grid}.personal-sidebar-utility-copy{gap:2px;min-width:0;display:grid}.personal-sidebar-utility-copy strong,.personal-sidebar-utility-copy small{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.personal-sidebar-utility-copy strong{font-size:13px;font-weight:700}.personal-sidebar-utility-copy small{color:var(--pw-muted);font-size:10.5px}.personal-sidebar-utility>svg{color:var(--pw-faint)}.personal-owner-row{min-height:40px;color:var(--pw-muted);border-radius:10px;align-items:center;gap:10px;margin-top:2px;padding:8px 10px;font-size:13px;display:flex}.personal-channel{grid-template-rows:auto minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr);min-width:0;height:100vh;display:grid}.personal-channel-header{z-index:8;border-bottom:1px solid var(--pw-line);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#fbfaf7eb;justify-content:space-between;align-items:center;gap:16px;min-height:72px;padding:12px 26px;display:flex;position:relative;overflow:visible}.personal-goal-tabs{background:#f2f1ed;border-radius:10px;align-self:center;align-items:center;gap:2px;margin-left:auto;padding:3px;display:flex}.personal-goal-tabs button{min-height:30px;color:var(--pw-muted);cursor:pointer;background:0 0;border:0;border-radius:8px;padding:0 13px;font-size:12.5px;font-weight:600}.personal-goal-tabs button:hover{color:var(--pw-text)}.personal-goal-tabs button[aria-current=page]{color:var(--pw-text);background:#fff;box-shadow:0 1px 3px #1e1c141a}.personal-channel-title{min-width:0}.personal-channel-title h1{letter-spacing:-.015em;margin:0;font-size:17.5px;font-weight:700;line-height:1.25}.personal-channel-title p{color:var(--pw-muted);white-space:nowrap;text-overflow:ellipsis;margin:3px 0 0;font-size:12px;overflow:hidden}.personal-channel-actions{flex:none;align-items:center;gap:9px;display:flex}.personal-goal-tools{flex:none;position:relative}.personal-goal-tools-trigger{background:var(--pw-blue-soft);min-height:38px;color:var(--pw-blue-ink);cursor:pointer;font:inherit;white-space:nowrap;border:1px solid #b8c9f5;border-radius:10px;justify-content:center;align-items:center;gap:7px;padding:0 11px;font-size:12px;font-weight:720;display:inline-flex}.personal-goal-tools-trigger:hover,.personal-goal-tools-trigger[aria-expanded=true]{color:#1948b5;background:#e5edff;border-color:#7f9fe9}.personal-goal-tools-trigger:focus-visible{outline-offset:2px;outline:3px solid #2f66e947}.personal-goal-tools-trigger>svg:last-child{transition:transform .16s}.personal-goal-tools-trigger[aria-expanded=true]>svg:last-child{transform:rotate(180deg)}.personal-goal-tools-menu{z-index:30;border:1px solid var(--pw-line-strong);background:#fff;border-radius:12px;gap:4px;width:min(300px,100vw - 28px);padding:6px;display:grid;position:absolute;top:calc(100% + 8px);right:0;box-shadow:0 16px 44px #1e284029}.personal-goal-tools-menu>button{width:100%;min-height:52px;color:var(--pw-text);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:9px;grid-template-columns:34px minmax(0,1fr);align-items:center;gap:9px;padding:7px 9px;display:grid}.personal-goal-tools-menu>button:hover,.personal-goal-tools-menu>button:focus-visible{background:var(--pw-blue-soft);outline:none}.personal-goal-tools-menu>button>svg{color:var(--pw-blue);justify-self:center}.personal-goal-tools-menu>button>span{gap:2px;min-width:0;display:grid}.personal-goal-tools-menu strong{font-size:12.5px}.personal-goal-tools-menu small{color:var(--pw-muted);font-size:10.5px;line-height:1.35}.personal-icon-button.personal-mobile-menu{display:none}.personal-select{min-width:0;position:relative}.personal-select-trigger{border:1px solid var(--pw-line-strong);width:100%;min-height:36px;color:var(--pw-text);cursor:pointer;text-align:left;background:#fff;border-radius:10px;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:7px;padding:0 9px;font-size:12px;font-weight:500;line-height:16px;display:grid}.personal-select-trigger:hover,.personal-select-trigger[aria-expanded=true]{border-color:var(--pw-faint)}.personal-select-trigger:focus-visible{border-color:var(--pw-blue);outline-offset:1px;outline:2px solid #0070f329}.personal-select-trigger>svg{color:var(--pw-muted);transition:transform .15s}.personal-select-trigger>svg.is-open{transform:rotate(180deg)}.personal-select-icon{color:var(--pw-muted);place-items:center;display:grid}.personal-select-value{white-space:nowrap;align-items:center;gap:6px;min-width:0;display:flex}.personal-select-value>small{color:var(--pw-faint);flex:none;font-size:10px;font-weight:500}.personal-select-value>span{text-overflow:ellipsis;min-width:0;overflow:hidden}.personal-select-listbox{z-index:50;border:1px solid var(--pw-line);background:#fff;border-radius:12px;min-width:max(100%,204px);max-width:min(300px,80vw);max-height:260px;padding:4px;display:grid;position:absolute;top:calc(100% + 5px);left:0;overflow:auto;box-shadow:0 10px 24px #00000017}.personal-agent-select .personal-select-listbox{min-width:216px;left:auto;right:0}.personal-select-option-wrap{display:grid}.personal-select-group-label{color:var(--pw-faint);letter-spacing:0;text-transform:uppercase;padding:8px 8px 4px;font:500 10px/14px Geist Mono Variable,Geist Mono,monospace}.personal-select-option{width:100%;min-height:32px;color:var(--pw-text);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:8px;grid-template-columns:minmax(0,1fr) 16px;align-items:center;gap:10px;padding:6px 8px;font-size:12px;font-weight:400;line-height:16px;display:grid}.personal-select-option:hover,.personal-select-option:focus-visible{background:#f2f2f2;outline:0}.personal-select-option[aria-selected=true]{font-weight:600}.personal-select-option[disabled]{color:var(--pw-faint);cursor:not-allowed}.personal-select-option>svg{color:var(--pw-text);justify-self:end}.personal-agent-select{width:188px}.personal-read-only-source{border:1px solid var(--pw-line-strong);max-width:190px;height:38px;color:var(--pw-text);white-space:nowrap;background:#fff;border-radius:10px;align-items:center;gap:7px;padding:0 10px;font-size:12.5px;font-weight:600;display:inline-flex;overflow:hidden}.personal-read-only-source>svg{color:var(--pw-muted);flex:none}.personal-read-only-source>small{color:var(--pw-muted);background:#f2f1ed;border-radius:99px;padding:2px 6px;font-size:9.5px;font-weight:650}.personal-live-indicator{color:var(--pw-muted);white-space:nowrap;flex:none;align-items:center;gap:6px;padding:7px 4px;font-size:12px;display:inline-flex}.personal-live-indicator i{background:#3fbf82;border-radius:50%;width:7px;height:7px}.personal-composer-attach{cursor:pointer;border:0;flex:none;place-items:center;display:grid;position:relative;overflow:hidden}.personal-composer-attach:disabled{cursor:not-allowed;opacity:.45}.personal-composer-file-input{opacity:0;pointer-events:none;width:1px;height:1px;position:fixed;overflow:hidden}.personal-action-feedback{border:1px solid var(--pw-line);background:var(--pw-blue-soft);color:var(--pw-blue-ink);border-radius:10px;justify-content:space-between;align-items:center;gap:12px;margin:0 0 8px;padding:9px 12px;font-size:13px;font-weight:650;display:flex}.personal-action-feedback button{color:inherit;cursor:pointer;background:0 0;border:0;place-items:center;display:grid}.personal-refresh-control{flex:none;align-items:center;gap:6px;display:inline-flex}.personal-refresh-control small{color:var(--pw-muted);white-space:nowrap;font-size:11px}.personal-refresh-control.is-error small{color:var(--pw-danger)}.personal-icon-button{border:1px solid var(--pw-line);width:36px;min-width:36px;height:36px;min-height:36px;color:var(--pw-muted);cursor:pointer;background:#fff;border-radius:10px;flex:0 0 36px;place-items:center;padding:0;display:inline-grid}.personal-icon-button:hover{border-color:var(--pw-line-strong);color:var(--pw-text)}.personal-channel-scroll{min-width:0;min-height:0;padding:22px max(26px,50% - 410px);overflow:auto}.personal-channel-scroll:has(.personal-task-kanban){padding-inline:max(26px,50vw - 770px)}.personal-channel-scroll:has(.personal-task-board){overflow:hidden}.personal-manager-greeting{align-items:center;gap:14px;margin-bottom:16px;padding:18px 20px;display:flex}.personal-home-lanes{grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;display:grid}.personal-system-health-banner{color:#991b1b;background:#fef2f2;border:1px solid #fecaca;border-radius:12px;margin-bottom:16px;padding:12px 16px}.personal-system-health-header{align-items:center;gap:8px;font-size:13px;font-weight:600;display:flex}.personal-system-health-header small{color:#b91c1c;font-size:11.5px;font-weight:400}.personal-system-health-issues{color:#b91c1c;margin:6px 0 0 24px;padding:0;font-size:12px;line-height:1.5}.personal-home-lane{border:1px solid var(--pw-line);background:#fff;border-radius:16px;flex-direction:column;min-width:0;min-height:100%;display:flex;box-shadow:0 1px 4px #1e1c140a}.personal-manager-greeting>span{background:var(--pw-blue-soft);width:38px;height:38px;color:var(--pw-blue);border-radius:12px;place-items:center;display:grid}.personal-manager-greeting div{gap:3px;display:grid}.personal-manager-greeting strong{letter-spacing:-.01em}.personal-manager-greeting p{color:var(--pw-muted);margin:0;font-size:13px}.personal-proposal-explainer{background:var(--pw-blue-soft);color:var(--pw-text);border-radius:10px;padding:10px 12px;font-size:12px;line-height:1.55}.personal-home-board{gap:12px;min-width:0;display:grid}.personal-home-lanes{grid-template-columns:repeat(4,minmax(170px,1fr));gap:10px;min-width:0;display:grid}.personal-home-lane{border:1px solid var(--pw-line);background:#ffffff85;border-radius:15px;align-content:start;min-width:0;min-height:260px;padding:12px;display:grid}.personal-home-lane>header{justify-content:space-between;align-items:center;gap:10px;display:flex}.personal-home-lane>header span{align-items:center;gap:7px;font-size:13px;font-weight:700;display:inline-flex}.personal-home-lane>header i,.personal-home-goal-meta i{background:var(--pw-faint);border-radius:50%;width:8px;height:8px}.personal-home-lane>header b{min-width:24px;color:var(--pw-muted);font-variant-numeric:tabular-nums;text-align:right;font-size:12px}.personal-home-lane>p{min-height:34px;color:var(--pw-muted);margin:7px 0 10px;font-size:10.5px;line-height:1.55}.personal-home-lane.is-needs_you>header i,.personal-home-lane.is-needs_you .personal-home-goal-meta i{background:var(--pw-amber)}.personal-home-lane.is-running>header i,.personal-home-lane.is-running .personal-home-goal-meta i{background:var(--pw-green)}.personal-home-lane.is-observing>header i,.personal-home-lane.is-observing .personal-home-goal-meta i{background:var(--pw-blue)}.personal-home-lane.is-scheduled>header i,.personal-home-lane.is-scheduled .personal-home-goal-meta i{background:#8b6bd8}.personal-home-lane-list{align-content:start;gap:9px;display:grid}.personal-home-goal-card{border:1px solid var(--pw-line);width:100%;min-width:0;color:inherit;cursor:pointer;text-align:left;background:#fff;border-radius:12px;gap:7px;padding:12px;transition:border-color .14s,transform .14s,box-shadow .14s;display:grid;box-shadow:0 1px 4px #1e1c140f}.personal-home-goal-card:hover{border-color:var(--pw-line-strong);transform:translateY(-1px);box-shadow:0 4px 12px #1e1c1414}.personal-home-goal-card:focus-visible{outline-offset:2px;outline:2px solid #7da2ff}.personal-home-goal-meta{min-width:0;color:var(--pw-muted);text-overflow:ellipsis;white-space:nowrap;align-items:center;gap:6px;font-size:10.5px;display:flex;overflow:hidden}.personal-home-goal-card>strong{text-overflow:ellipsis;font-size:13px;line-height:1.45;overflow:hidden}.personal-home-goal-card>p{color:var(--pw-muted);-webkit-line-clamp:2;-webkit-box-orient:vertical;margin:0;font-size:11px;line-height:1.55;display:-webkit-box;overflow:hidden}.personal-home-goal-card>footer{justify-content:space-between;align-items:center;gap:8px;padding-top:2px;display:flex}.personal-home-goal-card>footer span{color:var(--pw-muted);background:#f2f1ed;border-radius:99px;flex:none;padding:2px 7px;font-size:9.5px}.personal-home-goal-card>footer small{color:var(--pw-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9.5px;overflow:hidden}.personal-home-empty{border:1px dashed var(--pw-line-strong);min-height:96px;color:var(--pw-faint);border-radius:11px;place-items:center;font-size:11px;display:grid}.personal-home-history{border:1px solid var(--pw-line);background:#fff9;border-radius:13px}.personal-home-history>summary{cursor:pointer;align-items:center;gap:9px;min-height:44px;padding:0 14px;list-style:none;display:flex}.personal-home-history>summary::-webkit-details-marker{display:none}.personal-home-history>summary span{font-size:12.5px;font-weight:700}.personal-home-history>summary b{color:var(--pw-muted);font-size:11px}.personal-home-history>summary small{color:var(--pw-faint);margin-left:auto;font-size:10.5px}.personal-home-history>div{grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:9px;padding:0 12px 12px;display:grid}.personal-session-record{background:var(--pw-blue-soft);border:1px solid #cfdcf9;border-radius:14px;grid-template-columns:minmax(0,1fr) auto;gap:10px 16px;margin-bottom:12px;padding:14px 16px;display:grid}.personal-session-record>header{grid-column:1/-1;justify-content:space-between;align-items:center;gap:12px;display:flex}.personal-session-record>header span{color:var(--pw-blue-ink);align-items:center;gap:7px;font-size:12px;font-weight:700;display:inline-flex}.personal-session-record>header button{width:28px;height:28px;color:var(--pw-muted);cursor:pointer;background:0 0;border:0;border-radius:8px;place-items:center;padding:0;display:grid}.personal-session-record>header button:hover{color:var(--pw-text);background:#ffffffb3}.personal-session-record>div{min-width:0}.personal-session-record>div strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;display:block;overflow:hidden}.personal-session-record>div p{color:var(--pw-muted);margin:4px 0 0;font-size:11px}.personal-session-record dl{grid-column:1/-1;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0;display:grid}.personal-session-record dl div{background:#ffffff9e;border-radius:9px;gap:2px;min-width:0;padding:8px 10px;display:grid}.personal-session-record dt{color:var(--pw-faint);font-size:9.5px}.personal-session-record dd{color:var(--pw-text);text-overflow:ellipsis;white-space:nowrap;margin:0;font:10.5px/1.4 SF Mono,ui-monospace,Menlo,Consolas,monospace;overflow:hidden}.personal-session-record>.personal-secondary-action{grid-area:2/2;align-self:center}.personal-channel-timeline{gap:10px;display:grid}.personal-live-region{clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:fixed;overflow:hidden}.personal-timeline-row{border:1px solid var(--pw-line);background:var(--pw-card);width:100%;min-height:64px;color:inherit;cursor:pointer;text-align:left;border-radius:14px;grid-template-columns:38px minmax(0,1fr) auto auto 16px;align-items:center;gap:12px;padding:11px 15px;transition:border-color .14s,box-shadow .14s;display:grid}.personal-timeline-row:hover{border-color:var(--pw-line-strong);box-shadow:0 2px 8px #1e1c140f}.personal-timeline-row:focus-visible{outline-offset:2px;outline:2px solid #7da2ff}.personal-row-icon{border-radius:11px;place-items:center;width:34px;height:34px;display:grid}.personal-row-icon.is-attention{color:var(--pw-amber);background:var(--pw-amber-bg)}.personal-row-icon.is-run{color:var(--pw-blue-ink);background:var(--pw-blue-soft)}.personal-row-icon.is-output{color:var(--pw-green);background:var(--pw-green-bg)}.personal-row-copy,.personal-run-identity{gap:3px;min-width:0;display:grid}.personal-row-copy strong,.personal-row-copy small,.personal-row-copy span,.personal-run-identity strong,.personal-run-identity small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.personal-row-copy strong{font-size:13.5px;font-weight:600}.personal-row-copy small,.personal-run-identity small,.personal-row-copy span{color:var(--pw-muted);font-size:11px}.personal-row-status{color:var(--pw-muted);white-space:nowrap;background:#f2f1ed;border-radius:99px;align-items:center;gap:5px;padding:2.5px 10px;font-size:11px;font-weight:600;display:inline-flex}.personal-row-status.is-running{background:var(--pw-green-bg);color:var(--pw-green)}.personal-run-row{grid-template-columns:38px minmax(90px,.65fr) minmax(160px,1.4fr) 90px auto auto 16px}.personal-run-open-label{color:var(--pw-blue-ink);white-space:nowrap;font-size:10.5px;font-weight:650}.personal-run-identity strong{font-size:12px}.personal-run-progress{gap:5px;display:grid}.personal-run-progress small{color:var(--pw-muted);font-variant-numeric:tabular-nums;font-size:10px}.personal-run-progress i{background:#f0efeb;border-radius:99px;height:4px;display:block;overflow:hidden}.personal-run-progress b{border-radius:inherit;background:var(--pw-blue);height:100%;display:block}.personal-output-row time{color:var(--pw-muted);font-size:11px}.personal-spin{animation:1.2s linear infinite pw-spin}@keyframes pw-spin{to{transform:rotate(360deg)}}.personal-message{gap:11px;max-width:84%;padding:6px 2px;display:flex}.personal-message.is-user{background:var(--pw-blue-soft);color:var(--pw-text);border:1px solid #dbe7fd;border-radius:16px 16px 4px;justify-self:end;padding:11px 15px}.personal-message-avatar{background:var(--pw-blue-soft);height:34px;color:var(--pw-blue-ink);border-radius:11px;flex:0 0 34px;place-items:center;display:grid}.personal-message header{align-items:baseline;gap:8px;display:flex}.personal-message header strong{font-size:12px}.personal-message time{color:var(--pw-faint);font-size:10px}.personal-message p{white-space:pre-wrap;margin:6px 0 0;font-size:13.5px;line-height:1.7}.personal-message-pending{color:var(--pw-muted);font-size:11px}.personal-message-images{flex-wrap:wrap;gap:7px;margin-top:8px;display:flex}.personal-message-images img{object-fit:cover;border:1px solid var(--pw-line-strong);background:#fff;border-radius:10px;width:min(220px,100%);max-height:180px}.personal-md{overflow-wrap:anywhere;font-size:13.5px;line-height:1.7}.personal-md>*+*{margin-top:8px}.personal-md p{margin:0}.personal-md-heading.is-h1,.personal-md-heading.is-h2{font-size:14.5px}.personal-md-code{color:#4d5361;background:#f0efe9;border-radius:5px;padding:1px 5px;font-family:SF Mono,ui-monospace,Menlo,Consolas,monospace;font-size:.86em}.personal-md-pre{color:#e8ecf3;white-space:pre;background:#23262e;border-radius:10px;margin:0;padding:12px 14px;font:12px/1.65 SF Mono,ui-monospace,Menlo,Consolas,monospace;overflow-x:auto}.personal-md-pre code{font:inherit}.personal-md-link{color:var(--pw-blue-ink);text-underline-offset:2px;word-break:break-all;text-decoration:underline}.personal-agent-avatar{color:#fff;background:linear-gradient(135deg,#2f66e9,#6f9bff);border-radius:13px;flex:none;place-items:center;width:44px;height:44px;font-size:18px;font-weight:700;display:grid;box-shadow:0 2px 6px #2f66e947}.personal-agent-health.is-off{color:var(--pw-muted);background:#f2f1ed}.personal-agent-persona dl{border-top:1px solid var(--pw-line);margin-top:14px;padding-top:13px}.personal-detail-card-title{justify-content:space-between;align-items:center;gap:10px;display:flex}.personal-detail-card-title em{color:var(--pw-muted);background:#f1f1ee;border-radius:99px;padding:2px 8px;font-size:10px;font-style:normal;font-weight:650}.personal-goal-repository h3{align-items:center;gap:8px;display:flex}.personal-goal-notification h3{justify-content:space-between;align-items:center;gap:8px;display:flex}.personal-connection-status{background:var(--pw-green-bg);color:var(--pw-green);border-radius:99px;padding:2px 8px;font-size:10px;font-weight:650}.personal-subagent-heading{justify-content:space-between;align-items:flex-start;gap:14px;display:flex}.personal-subagent-heading h3{align-items:center;gap:7px;margin-bottom:0;display:flex}.personal-subagent-switch{border:1px solid var(--pw-line-strong);min-height:32px;color:var(--pw-muted);cursor:pointer;background:#f2f1ed;border-radius:99px;flex:none;align-items:center;gap:7px;padding:4px 9px 4px 5px;font-size:11px;font-weight:700;display:inline-flex}.personal-subagent-switch>span{background:#c8c8c2;border-radius:99px;width:30px;height:18px;transition:background .18s;position:relative}.personal-subagent-switch>span:after{content:"";background:#fff;border-radius:50%;width:12px;height:12px;transition:transform .18s;position:absolute;top:3px;left:3px}.personal-subagent-switch[aria-checked=true]{background:var(--pw-green-bg);color:var(--pw-green);border-color:#b9dccb}.personal-subagent-switch[aria-checked=true]>span{background:var(--pw-green)}.personal-subagent-switch[aria-checked=true]>span:after{transform:translate(12px)}.personal-subagent-switch[data-pending=true]{color:#8a6b00;opacity:1;background:#fffbed;border-color:#d8c67a}.personal-subagent-switch:disabled{cursor:default;opacity:.55}.personal-subagent-switch[data-pending=true]:disabled{opacity:1}.personal-subagent-fields{border-top:1px solid var(--pw-line);grid-template-columns:minmax(0,1fr) 112px;gap:10px;margin-top:14px;padding-top:13px;display:grid}.personal-subagent-fields label{color:var(--pw-text);align-content:start;gap:6px;font-size:11.5px;font-weight:650;display:grid}.personal-subagent-fields input:not([type=checkbox]),.personal-subagent-fields select{border:1px solid var(--pw-line-strong);min-width:0;min-height:38px;color:var(--pw-text);font:inherit;background:#fff;border-radius:9px;padding:0 10px;font-size:12px}.personal-subagent-fields label small{color:var(--pw-faint);font-size:10.5px;font-weight:450;line-height:1.45}.personal-subagent-domain-picker{border:0;grid-column:1/-1;min-width:0;margin:0;padding:0}.personal-subagent-domain-picker>legend{color:var(--pw-text);margin-bottom:7px;padding:0;font-size:11.5px;font-weight:650}.personal-subagent-domain-picker>small{color:var(--pw-faint);margin-top:7px;font-size:10.5px;line-height:1.45;display:block}.personal-subagent-domain-options{grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;display:grid}.personal-subagent-domain-option{border:1px solid var(--pw-line-strong);cursor:pointer;background:#fff;border-radius:9px;grid-template-columns:auto minmax(0,1fr);min-height:44px;padding:8px 9px;align-items:center!important;display:grid!important}.personal-subagent-domain-option:hover{border-color:#b9c9dc}.personal-subagent-domain-option:has(input:focus-visible){outline:2px solid var(--pw-blue);outline-offset:2px}.personal-subagent-domain-option.is-selected{background:var(--pw-blue-soft);border-color:#9fc4ed}.personal-subagent-domain-option input{width:15px;height:15px;accent-color:var(--pw-blue);margin:0}.personal-subagent-domain-option>span{gap:1px;min-width:0;display:grid}.personal-subagent-domain-option strong{text-overflow:ellipsis;white-space:nowrap;font-size:11.5px;overflow:hidden}.personal-subagent-domain-option small{font-size:9.5px!important;font-weight:450!important}.personal-subagent-domain-empty{border:1px dashed var(--pw-line-strong);background:var(--pw-bg);color:var(--pw-muted);border-radius:9px;grid-column:1/-1;margin:0;padding:10px;font-size:10.5px;line-height:1.5}.personal-subagent-limit-field{grid-column:1/-1;width:112px}.personal-subagent-fields .personal-secondary-action{grid-column:1/-1;margin-top:0}.personal-subagent-preview{background:#fffbed;border:1px solid #d8c67a;border-radius:10px;margin-top:10px;padding:12px}.personal-subagent-preview>strong{font-size:12.5px}.personal-subagent-preview>p{margin:5px 0 0}.personal-subagent-preview>div{grid-template-columns:1fr 1fr;gap:8px;display:grid}.personal-subagent-preview .personal-primary-action,.personal-subagent-preview .personal-secondary-action{min-height:38px;margin-top:10px}.personal-subagent-feedback{align-items:flex-start;gap:7px;display:flex;margin:10px 0 0!important}.personal-subagent-feedback.is-success{color:var(--pw-green)!important}.personal-subagent-feedback.is-warning{color:#8a6b00!important}.personal-subagent-feedback.is-error{color:var(--pw-red)!important}.personal-subagent-read-only{margin-bottom:0}.personal-settings-page{--pw-bg:#fbfaf7;--pw-card:#fff;--pw-line:#eceae3;--pw-line-strong:#e0ddd4;--pw-muted:#82889a;--pw-faint:#aab0bf;--pw-text:#23262e;--pw-blue:#2f66e9;--pw-blue-ink:#2456c8;--pw-blue-soft:#ebf1fe;--pw-red:#c2402f;--pw-red-bg:#fcecea;--pw-green:#2e7d5b;--pw-green-bg:#e6f3ec;background:var(--pw-bg);min-height:100vh;color:var(--pw-text);grid-template-columns:268px minmax(0,1fr);font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;display:grid}.personal-settings-sidebar{scrollbar-gutter:stable;border-right:1px solid var(--pw-line);background:#f5f3ee;flex-direction:column;gap:14px;min-width:0;height:100dvh;padding:18px 14px;display:flex;position:sticky;top:0;overflow-y:auto}.personal-settings-page :focus-visible{outline-offset:2px;outline:2px solid #5f87ed}.personal-settings-back{width:100%;min-height:40px;color:var(--pw-muted);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:10px;align-items:center;gap:8px;padding:0 10px;font-size:13px;font-weight:650;display:inline-flex}.personal-settings-back:hover{color:var(--pw-text);background:#ffffffa6}.personal-settings-title{border-bottom:1px solid var(--pw-line);gap:3px;padding:8px 10px 10px;display:grid}.personal-settings-title small{color:var(--pw-faint);letter-spacing:.08em;text-transform:uppercase;font-size:10px;font-weight:700}.personal-settings-title strong{letter-spacing:-.02em;font-size:18px}.personal-settings-header{justify-content:space-between;align-items:flex-start;gap:24px;margin-bottom:24px;display:flex}.personal-settings-header small{color:var(--pw-blue);letter-spacing:.08em;text-transform:uppercase;font-size:11px;font-weight:700}.personal-settings-header h1{letter-spacing:-.035em;margin:4px 0 2px;font-size:28px}.personal-settings-header p{color:var(--pw-muted);margin:0;font-size:13px}.personal-settings-tabs{gap:3px;display:grid}.personal-settings-tabs button{width:100%;min-height:54px;color:var(--pw-muted);cursor:pointer;text-align:left;background:0 0;border:0;border-radius:11px;grid-template-columns:32px minmax(0,1fr);align-items:center;gap:9px;padding:8px 10px;display:grid}.personal-settings-tabs button:hover{color:var(--pw-text);background:#ffffffa6}.personal-settings-tabs button[aria-current=page]{color:var(--pw-text);background:#fff;box-shadow:0 1px 4px #1e1c141a}.personal-settings-tabs button>span{gap:2px;min-width:0;display:grid}.personal-settings-tabs strong{font-size:13px}.personal-settings-tabs small{color:var(--pw-muted);text-overflow:ellipsis;white-space:nowrap;font-size:10.5px;overflow:hidden}.personal-settings-body{min-width:0;padding:30px clamp(24px,5vw,72px)}.personal-appearance-settings{max-width:680px}.personal-settings-choice-group{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-top:14px;display:grid}.personal-settings-choice-group button{border:1px solid var(--pw-line);min-height:74px;color:inherit;cursor:pointer;text-align:left;background:#fff;border-radius:12px;grid-template-columns:34px minmax(0,1fr);gap:4px 10px;padding:13px;display:grid}.personal-settings-choice-group button:hover{border-color:var(--pw-line-strong);box-shadow:0 2px 8px #1e1c140f}.personal-settings-choice-group button[aria-checked=true]{background:#f7f9ff;border-color:#9fb9f4;box-shadow:0 0 0 3px #2f66e91a}.personal-settings-choice-group strong{align-self:end;font-size:13px}.personal-settings-choice-group small{color:var(--pw-muted);grid-column:2;font-size:11px;line-height:1.45}.personal-settings-theme-swatch{border:1px solid var(--pw-line-strong);border-radius:10px;grid-row:1/span 2;width:34px;height:34px;display:block}.personal-settings-theme-swatch.is-loopx{background:linear-gradient(135deg,#171717 0 44%,#0070f3 44% 54%,#fafafa 54% 76%,#fff 76%);border-radius:6px}.personal-settings-theme-swatch.is-paper{background:linear-gradient(135deg,#fbfaf7 0 48%,#2f66e9 48% 58%,#fff 58%)}.personal-settings-theme-swatch.is-brutal{background:linear-gradient(135deg,#ffd91a 0 45%,#ff8fd0 45% 70%,#8fdcff 70%);border:2px solid #141414;border-radius:5px;box-shadow:2px 2px #141414}.personal-lark-settings{background:var(--pw-bg);min-height:100vh;color:var(--pw-text);padding:30px clamp(24px,5vw,72px);position:relative}.personal-lark-settings.is-embedded{background:0 0;min-height:0;padding:0}.personal-lark-header{justify-content:space-between;align-items:flex-start;gap:24px;max-width:1180px;margin:0 auto;display:flex}.personal-lark-header small{color:var(--pw-blue);letter-spacing:.08em;text-transform:uppercase;font-size:11px;font-weight:700}.personal-lark-header h1{letter-spacing:-.035em;margin:4px 0 2px;font-size:28px}.personal-lark-header p{color:var(--pw-muted);margin:0;font-size:13px}.personal-lark-tabs{border-bottom:1px solid var(--pw-line);gap:24px;max-width:1180px;margin:28px auto 20px;display:flex}.personal-lark-settings.is-embedded .personal-lark-tabs{margin-top:0}.personal-lark-tabs button{min-height:42px;color:var(--pw-muted);cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;align-items:center;gap:8px;padding:0 2px;font-weight:650;display:flex}.personal-lark-tabs button[aria-current=page]{border-color:var(--pw-blue);color:var(--pw-text)}.personal-lark-tabs span{min-width:20px;height:20px;color:var(--pw-muted);background:#efeee9;border-radius:99px;place-items:center;padding:0 5px;font-size:10px;display:inline-grid}.personal-lark-section-heading{max-width:1180px;margin:0 auto 18px}.personal-lark-section-heading small{color:var(--pw-blue);letter-spacing:.07em;text-transform:uppercase;font-size:10px;font-weight:700}.personal-lark-section-heading h2{letter-spacing:-.025em;margin:4px 0;font-size:21px}.personal-lark-section-heading p{color:var(--pw-muted);margin:0;font-size:12px;line-height:1.6}.personal-lark-subtabs{margin-top:0}.personal-settings-content{max-width:1180px;margin:0 auto}.personal-settings-card{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:16px;max-width:720px;overflow:hidden;box-shadow:0 8px 30px #1e1c140a}.personal-settings-card>header{border-bottom:1px solid var(--pw-line);align-items:center;gap:13px;padding:20px;display:flex}.personal-settings-card>header h2{letter-spacing:-.02em;margin:0;font-size:17px}.personal-settings-card>header p{color:var(--pw-muted);margin:4px 0 0;font-size:12px;line-height:1.5}.personal-settings-icon{background:var(--pw-blue-soft);width:40px;height:40px;color:var(--pw-blue);border-radius:12px;flex:none;place-items:center;display:grid}.personal-language-options{gap:10px;padding:18px 20px;display:grid}.personal-language-options>button{border:1px solid var(--pw-line);min-height:66px;color:var(--pw-text);cursor:pointer;text-align:left;background:#fff;border-radius:12px;justify-content:space-between;align-items:center;gap:18px;padding:13px 15px;transition:border-color .15s,background-color .15s,box-shadow .15s;display:flex}.personal-language-options>button:hover{border-color:var(--pw-line-strong);background:#fcfbf8}.personal-language-options>button.is-selected{background:var(--pw-blue-soft);color:var(--pw-blue-ink);border-color:#9bb5f0;box-shadow:0 0 0 1px #2f66e814}.personal-language-options>button>span{gap:4px;display:grid}.personal-language-options strong{font-size:13px}.personal-language-options small{color:var(--pw-muted);font-size:11px;font-weight:400;line-height:1.45}.personal-settings-card>footer{border-top:1px solid var(--pw-line);color:var(--pw-faint);background:#faf9f6;padding:13px 20px;font-size:11px}.personal-machine-loading{min-height:220px;color:var(--pw-muted);place-items:center;font-size:13px;display:grid}.personal-machine-layout{grid-template-columns:210px minmax(0,1fr);gap:22px;max-width:1080px;display:grid}.personal-machine-namespaces{min-width:0}.personal-machine-namespaces>div{gap:3px;margin-bottom:10px;padding:0 4px;display:grid}.personal-machine-namespaces>div small,.personal-machine-editor>header small,.personal-machine-editor-bar small{color:var(--pw-blue);letter-spacing:.07em;text-transform:uppercase;font-size:10px;font-weight:700}.personal-machine-namespaces>div strong{font-size:13px}.personal-machine-namespaces nav{gap:5px;display:grid}.personal-machine-namespaces button{width:100%;min-height:52px;color:var(--pw-muted);cursor:pointer;text-align:left;background:0 0;border:1px solid #0000;border-radius:10px;gap:3px;padding:9px 11px;display:grid}.personal-machine-namespaces button:hover{border-color:var(--pw-line);background:#fff9}.personal-machine-namespaces button[aria-current=page]{border-color:var(--pw-line-strong);color:var(--pw-text);background:#fff;box-shadow:0 2px 8px #1e1c140d}.personal-machine-namespaces button span{overflow-wrap:anywhere;font-size:12px;font-weight:650}.personal-machine-namespaces button small{color:var(--pw-muted);font-size:10px}.personal-machine-content{min-width:0}.personal-machine-summary{border:1px solid var(--pw-line);background:#fff;border-radius:14px;justify-content:space-between;align-items:center;gap:20px;margin-bottom:14px;padding:14px 16px;display:flex}.personal-machine-summary>div{align-items:center;gap:11px;min-width:0;display:flex}.personal-machine-summary>div>span:last-child{gap:3px;display:grid}.personal-machine-summary>div small{color:var(--pw-muted);text-transform:uppercase;font-size:10px;font-weight:650}.personal-machine-summary>div strong{font-size:13px}.personal-machine-summary dl{gap:22px;margin:0;display:flex}.personal-machine-summary dl div{gap:3px;display:grid}.personal-machine-summary dt{color:var(--pw-muted);font-size:10px}.personal-machine-summary dd{margin:0;font-family:SFMono-Regular,Consolas,monospace;font-size:11px;font-weight:650}.personal-machine-editor-bar{justify-content:space-between;align-items:center;gap:14px;margin-bottom:10px;padding:0 2px;display:flex}.personal-machine-editor-mode{border:1px solid var(--pw-line);background:#f5f4f0;border-radius:9px;flex:none;gap:3px;padding:3px;display:flex}.personal-machine-editor-mode button{min-height:44px;color:var(--pw-muted);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:6px;padding:0 12px;font-size:11px;font-weight:650}.personal-machine-editor-mode button[aria-pressed=true]{color:var(--pw-text);background:#fff;box-shadow:0 1px 4px #1e1c1414}.personal-machine-editor{border:1px solid var(--pw-line);background:#fff;border-radius:16px;overflow:hidden;box-shadow:0 8px 30px #1e1c140a}.personal-machine-editor>header{border-bottom:1px solid var(--pw-line);justify-content:space-between;align-items:flex-start;gap:20px;padding:20px;display:flex}.personal-machine-editor>header h2{letter-spacing:-.02em;margin:4px 0 3px;font-size:18px}.personal-machine-editor>header p{max-width:610px;color:var(--pw-muted);margin:0;font-size:12px;line-height:1.55}.personal-machine-switch{min-height:44px;color:var(--pw-muted);cursor:pointer;white-space:nowrap;flex:none;align-items:center;gap:9px;font-size:12px;font-weight:650;display:flex}.personal-machine-switch input{width:42px;height:24px;accent-color:var(--pw-blue);cursor:pointer;margin:0}.personal-machine-scope-note{color:var(--pw-blue-ink);background:#f6f8fd;border:1px solid #cfdaf3;border-radius:12px;align-items:flex-start;gap:10px;margin:18px 20px 0;padding:13px 14px;display:flex}.personal-machine-scope-note svg{flex:none;margin-top:1px}.personal-machine-scope-note strong{font-size:12px}.personal-machine-scope-note p{color:#52627f;margin:3px 0 0;font-size:11px;line-height:1.55}.personal-machine-editor fieldset{border:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin:0;padding:20px;display:grid}.personal-machine-editor fieldset label{align-content:start;gap:6px;min-width:0;display:grid}.personal-machine-editor fieldset label:last-child{grid-column:1/-1}.personal-machine-editor fieldset label>span{font-size:12px;font-weight:650}.personal-machine-editor fieldset label>small{color:var(--pw-muted);font-size:10.5px;line-height:1.45}.personal-machine-editor input[type=text],.personal-machine-editor fieldset input{border:1px solid var(--pw-line-strong);width:100%;min-width:0;min-height:42px;color:var(--pw-text);font:inherit;background:#fff;border-radius:9px;padding:0 11px;font-size:13px}.personal-machine-editor fieldset:disabled{opacity:.58}.personal-machine-editor fieldset:disabled input{cursor:not-allowed}.personal-machine-json-editor>label{gap:7px;padding:20px;display:grid}.personal-machine-json-editor>label>span{font-size:12px;font-weight:650}.personal-machine-json-editor>label>small{color:var(--pw-muted);font-size:10.5px;line-height:1.5}.personal-machine-json-editor textarea{resize:vertical;border:1px solid var(--pw-line-strong);width:100%;min-width:0;color:var(--pw-text);tab-size:2;background:#fafafa;border-radius:9px;padding:12px 13px;font:12px/1.6 SFMono-Regular,Consolas,monospace}.personal-machine-json-editor textarea:focus-visible{outline:2px solid var(--pw-blue);outline-offset:2px}.personal-machine-validation,.personal-machine-error,.personal-machine-notice{border-radius:9px;margin:0 20px 16px;padding:10px 12px;font-size:11px;line-height:1.5}.personal-machine-validation,.personal-machine-error{background:var(--pw-red-bg);color:var(--pw-red);border:1px solid #edc1ba}.personal-machine-notice{background:var(--pw-green-bg);color:var(--pw-green);border:1px solid #bcdacb;align-items:center;gap:8px;display:flex}.personal-machine-preview{background:#f8faff;border:1px solid #aebfec;border-radius:12px;margin:0 20px 18px;padding:14px}.personal-machine-preview header{justify-content:space-between;align-items:center;gap:12px;display:flex}.personal-machine-preview header strong{font-size:12px}.personal-machine-preview header span{background:var(--pw-blue-soft);color:var(--pw-blue-ink);border-radius:99px;padding:3px 8px;font-size:10px;font-weight:650}.personal-machine-preview dl{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:12px 0;display:grid}.personal-machine-preview dl div{background:#fff;border:1px solid #dfe5f3;border-radius:8px;min-width:0;padding:8px}.personal-machine-preview dt{color:var(--pw-muted);font-size:9.5px}.personal-machine-preview dd{overflow-wrap:anywhere;margin:4px 0 0;font-family:SFMono-Regular,Consolas,monospace;font-size:10.5px;font-weight:650}.personal-machine-preview p{color:#52627f;margin:0;font-size:10.5px;line-height:1.5}.personal-machine-rollback{border:1px solid var(--pw-line);background:#faf9f6;border-radius:12px;justify-content:space-between;align-items:center;gap:18px;margin:0 20px 18px;padding:13px 14px;display:flex}.personal-machine-rollback strong{font-size:12px}.personal-machine-rollback p{color:var(--pw-muted);margin:3px 0 0;font-size:10.5px;line-height:1.45}.personal-machine-rollback .personal-secondary-action{flex:none;width:auto;min-height:40px;margin:0;padding:0 13px}.personal-machine-editor>footer{border-top:1px solid var(--pw-line);background:#faf9f6;justify-content:flex-end;gap:10px;padding:15px 20px;display:flex}.personal-machine-editor>footer .personal-primary-action,.personal-machine-editor>footer .personal-secondary-action,.personal-machine-editor>footer .personal-danger-action{width:auto;min-height:42px;margin:0;padding:0 15px}.personal-machine-unavailable{border:1px dashed var(--pw-line-strong);min-height:180px;color:var(--pw-muted);background:#fff;border-radius:14px;justify-items:start;gap:8px;padding:26px;display:grid}.personal-machine-unavailable strong{color:var(--pw-text);font-size:13px}.personal-machine-unavailable p{max-width:540px;margin:0;font-size:11px;line-height:1.6}.personal-lark-loading,.personal-lark-empty{min-height:130px;color:var(--pw-muted);justify-content:center;align-items:center;gap:8px;font-size:13px;display:flex}.personal-lark-apps{max-width:1180px;margin:0 auto}.personal-lark-app-toolbar{color:var(--pw-muted);justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;font-size:11px;display:flex}.personal-lark-app-toolbar .personal-primary-action{width:auto;min-height:40px;margin:0;padding:0 16px}.personal-lark-app-grid{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:14px;display:grid}.personal-lark-app-card{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:15px;grid-template-columns:42px minmax(0,1fr) auto;align-items:center;gap:11px;padding:18px;display:grid}.personal-lark-app-avatar{background:var(--pw-blue-soft);width:42px;height:42px;color:var(--pw-blue);border-radius:12px;place-items:center;display:grid}.personal-lark-app-card div{gap:3px;display:grid}.personal-lark-app-card small,.personal-lark-app-card p{color:var(--pw-muted);font-size:11px}.personal-lark-app-card em{border-radius:99px;padding:3px 9px;font-size:10px;font-style:normal;font-weight:650}.personal-lark-app-card em.is-ready{background:var(--pw-green-bg);color:var(--pw-green)}.personal-lark-app-card em.is-off{color:var(--pw-muted);background:#f1f1ee}.personal-lark-app-card p{grid-column:2/-1;margin:0}.personal-lark-connections{max-width:1180px;margin:0 auto}.personal-lark-toolbar{justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.personal-lark-toolbar>label{border:1px solid var(--pw-line);max-width:680px;height:40px;color:var(--pw-faint);background:#fff;border-radius:10px;flex:1;align-items:center;gap:8px;padding:0 12px;display:flex}.personal-lark-toolbar input{width:100%;font:inherit;background:0 0;border:0;outline:0}.personal-lark-toolbar .personal-primary-action{flex:none;width:auto;min-height:40px;margin-top:0;padding:0 16px}.personal-lark-table{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:14px;overflow:hidden}.personal-lark-table-head,.personal-lark-table-row{grid-template-columns:1.35fr 1.35fr .72fr .72fr 100px;align-items:center;gap:16px;padding:12px 16px;display:grid}.personal-lark-table-head{border-bottom:1px solid var(--pw-line);min-height:42px;color:var(--pw-faint);letter-spacing:.04em;text-transform:uppercase;font-size:10px;font-weight:700}.personal-lark-table-row{border-bottom:1px solid var(--pw-line);min-height:70px;font-size:12px}.personal-lark-table-row:last-of-type{border-bottom:0}.personal-lark-table-row>span{gap:3px;min-width:0;display:grid}.personal-lark-table-row strong,.personal-lark-table-row small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.personal-lark-table-row small{color:var(--pw-muted);font-size:10px}.personal-lark-row-actions{justify-content:flex-end;display:flex!important}.personal-lark-row-actions button,.personal-lark-modal header button{border:1px solid var(--pw-line);min-height:30px;color:var(--pw-muted);cursor:pointer;background:#fff;border-radius:8px;align-items:center;gap:4px;padding:0 8px;font-size:10px;display:inline-flex}.personal-lark-row-actions button.is-confirm{background:var(--pw-red-bg);color:var(--pw-red);border-color:#e6b0aa}.personal-lark-modal-backdrop{z-index:80;-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#1e1f2361;place-items:center;padding:24px;display:grid;position:fixed;inset:0}.personal-lark-modal{border:1px solid var(--pw-line);background:#fff;border-radius:18px;gap:14px;width:min(560px,100%);max-height:calc(100vh - 48px);padding:22px;display:grid;overflow:auto;box-shadow:0 24px 70px #14182340}.personal-lark-modal header{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.personal-lark-modal header small{color:var(--pw-muted);font-size:10px}.personal-lark-modal h2{letter-spacing:-.02em;margin:3px 0 0;font-size:20px}.personal-lark-modal>label{color:var(--pw-muted);gap:7px;font-size:11px;font-weight:650;display:grid}.personal-lark-modal>label>small{color:var(--pw-faint);font-size:10px;font-weight:450;line-height:1.45}.personal-lark-modal input[type=search],.personal-lark-modal input[type=text],.personal-lark-modal input:not([type]),.personal-lark-modal select{border:1px solid var(--pw-line-strong);width:100%;min-height:40px;color:var(--pw-text);font:inherit;background:#fff;border-radius:9px;padding:0 11px}.personal-lark-modal label:has(input[type=search]){grid-template-columns:1fr}.personal-lark-modal label:has(input[type=search]) input{margin-bottom:2px}.personal-lark-group-state{border:1px dashed var(--pw-line-strong);min-height:40px;color:var(--pw-muted);background:#fafaf8;border-radius:9px;align-items:center;gap:7px;padding:9px 11px;font-size:11px;font-weight:500;line-height:1.45;display:flex}.personal-lark-group-state.is-error{background:var(--pw-red-bg);color:var(--pw-red);border-style:solid;border-color:#efc3bd}.personal-lark-check{border:1px solid var(--pw-line);background:#fafaf8;border-radius:10px;align-items:flex-start;padding:12px;gap:10px!important;display:flex!important}.personal-lark-check input{accent-color:var(--pw-blue);margin-top:2px}.personal-lark-check span{gap:2px;display:grid}.personal-lark-check strong{color:var(--pw-text)}.personal-lark-check small{font-weight:400}.personal-lark-agent-apps{color:var(--pw-muted);border:0;gap:7px;margin:0;padding:0;display:grid}.personal-lark-agent-apps legend{margin-bottom:1px;font-size:11px;font-weight:650}.personal-lark-agent-apps>small{color:var(--pw-faint);font-size:10px;line-height:1.45}.personal-lark-agent-apps>div{gap:8px;display:grid}.personal-lark-agent-apps label{border:1px solid var(--pw-line);background:#fafaf8;border-radius:10px;grid-template-columns:minmax(0,1fr) minmax(180px,1fr);align-items:center;gap:12px;padding:10px 11px;display:grid}.personal-lark-agent-apps label>span{gap:2px;min-width:0;display:grid}.personal-lark-agent-apps label strong{color:var(--pw-text);text-overflow:ellipsis;white-space:nowrap;font-size:11px;overflow:hidden}.personal-lark-agent-apps label small{color:var(--pw-faint);text-overflow:ellipsis;white-space:nowrap;font-size:9px;overflow:hidden}.personal-lark-agent-apps select{min-width:0}.personal-lark-ingress{color:var(--pw-muted);border:0;gap:7px;margin:0;padding:0;display:grid}.personal-lark-ingress legend{margin-bottom:1px;font-size:11px;font-weight:650}.personal-lark-ingress>div{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.personal-lark-ingress label{border:1px solid var(--pw-line-strong);cursor:pointer;background:#fff;border-radius:10px;min-height:84px;padding:11px;display:block;position:relative}.personal-lark-ingress label.is-active{border-color:var(--pw-blue);background:#2f69eb0f;box-shadow:0 0 0 1px #2f69eb24}.personal-lark-ingress input{opacity:0;width:1px;height:1px;position:absolute}.personal-lark-ingress span{gap:5px;display:grid}.personal-lark-ingress strong{color:var(--pw-text);font-size:11px}.personal-lark-ingress small{color:var(--pw-faint);font-size:9px;font-weight:450;line-height:1.35}.personal-lark-topic-preview{border:1px solid var(--pw-line);min-height:40px;color:var(--pw-text);background:#f7f7f4;border-radius:9px;align-items:center;gap:8px;padding:0 11px;font-size:12px;font-weight:500;display:flex}.personal-lark-topic-preview.is-locked{color:var(--pw-muted)}.personal-lark-cardinality{background:var(--pw-blue-soft);color:var(--pw-blue-ink);border-radius:9px;align-items:center;gap:8px;margin:0;padding:10px 12px;font-size:11px;display:flex}.personal-lark-modal footer{z-index:2;border-top:1px solid var(--pw-line);background:#fff;justify-content:flex-end;gap:9px;margin:0 -22px -22px;padding:12px 22px 22px;display:flex;position:sticky;bottom:-22px}.personal-lark-modal footer button{width:auto;min-width:96px;margin-top:0;padding:0 16px}@media (width<=640px){.personal-lark-agent-apps label{grid-template-columns:1fr}}.personal-lark-modal-backdrop.is-setup{z-index:90}.personal-lark-setup-modal{width:min(620px,100%)}.personal-lark-setup-copy{color:var(--pw-muted);margin:0;font-size:12px;line-height:1.6}.personal-lark-setup-progress{border:1px solid var(--pw-line);background:#fafaf8;border-radius:13px;grid-template-columns:46px minmax(0,1fr);align-items:center;gap:13px;min-height:132px;padding:18px;display:grid}.personal-lark-setup-progress>div{gap:5px;display:grid}.personal-lark-setup-progress p{color:var(--pw-muted);margin:0;font-size:11px;line-height:1.5}.personal-lark-setup-progress a{width:fit-content;color:var(--pw-blue);grid-column:2;align-items:center;gap:6px;font-size:11px;font-weight:650;text-decoration:none;display:inline-flex}.personal-lark-setup-icon{background:var(--pw-blue-soft);width:46px;height:46px;color:var(--pw-blue);border-radius:13px;place-items:center;display:grid}.personal-lark-setup-icon.is-ready{background:var(--pw-green-bg);color:var(--pw-green)}.personal-lark-setup-icon.is-failed,.personal-row-status.is-blocking{background:var(--pw-red-bg);color:var(--pw-red)}.personal-proposal-row{width:100%;color:inherit;cursor:pointer;text-align:left;background:#f5f8ff;border:1px solid #c3d3f9;border-radius:14px;grid-template-columns:36px minmax(0,1fr) auto;align-items:center;gap:12px;padding:14px;display:grid}.personal-proposal-row:hover{border-color:#8fabe9;box-shadow:0 2px 10px #2f66e814}.personal-proposal-row>span:first-child{color:#315fc8;background:#e4ebff;border-radius:11px;place-items:center;width:36px;height:36px;display:grid}.personal-proposal-row>span:nth-child(2){gap:3px;min-width:0;display:grid}.personal-proposal-row small{color:#5f74ad;font-size:10px}.personal-proposal-row strong{font-size:13px}.personal-proposal-row p{color:#686f7c;margin:0;font-size:11px}.personal-proposal-row>b{color:#315fc8;font-size:11px}.personal-proposal-row.is-applied{background:#f3fbf7;border-color:#b5ddcc}.personal-proposal-row.is-error,.personal-proposal-row.is-stale{background:#fff7f7;border-color:#efc3c3}.personal-proposal-row.is-gated{background:#fffaf0;border-color:#ead39c}.personal-gated-summary{background:#fffaf0;border:1px solid #ead39c;border-radius:14px}.personal-gated-summary>summary{color:#6d5620;cursor:pointer;align-items:center;gap:9px;padding:12px 14px;list-style:none;display:flex}.personal-gated-summary>summary::-webkit-details-marker{display:none}.personal-gated-summary>summary>span{color:#9a741d;background:#fff1c9;border-radius:9px;place-items:center;width:30px;height:30px;display:grid}.personal-gated-summary>summary small{color:#927d4c;margin-left:auto}.personal-gated-summary>div{gap:8px;padding:0 8px 8px;display:grid}.personal-gated-summary .personal-proposal-row{background:#fffdf7}.personal-schedule-row{border:1px solid var(--pw-line);background:var(--pw-card);width:100%;color:inherit;cursor:pointer;text-align:left;border-radius:14px;grid-template-columns:36px minmax(0,1fr) auto 16px;align-items:center;gap:12px;padding:13px 15px;display:grid}.personal-schedule-row:hover{border-color:var(--pw-line-strong);box-shadow:0 2px 8px #1e1c140f}.personal-schedule-icon{width:34px;height:34px;color:var(--pw-muted);background:#f2f1ed;border-radius:11px;place-items:center;display:grid}.personal-schedule-copy{gap:2px;min-width:0;display:grid}.personal-schedule-copy small,.personal-schedule-copy p{color:var(--pw-muted);margin:0;font-size:10px}.personal-schedule-copy strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;font-weight:600;overflow:hidden}.personal-schedule-status{background:var(--pw-green-bg);color:var(--pw-green);border-radius:99px;align-items:center;padding:2.5px 10px;font-size:11px;font-weight:600;display:inline-flex}.personal-schedule-status.is-paused{color:var(--pw-muted);background:#f2f1ed}.personal-timeline-empty{text-align:center;place-items:center;padding:70px 20px;display:grid}.personal-timeline-empty>span{background:var(--pw-blue-soft);width:44px;height:44px;color:var(--pw-blue);border-radius:14px;place-items:center;margin-bottom:14px;display:grid}.personal-timeline-empty p{max-width:420px;color:var(--pw-muted);font-size:13px}.personal-object-list{border:1px solid var(--pw-line);background:#fff;border-radius:14px;overflow:hidden}.personal-object-list>header,.personal-object-list>button{border:0;border-bottom:1px solid var(--pw-line);width:100%;min-height:52px;color:inherit;text-align:left;background:0 0;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:10px;padding:10px 15px;display:grid}.personal-object-list>header{min-height:46px;color:var(--pw-faint);letter-spacing:.06em;grid-template-columns:minmax(0,1fr) auto;font-size:12px;font-weight:650}.personal-object-list>button{cursor:pointer}.personal-object-list>button:hover{background:#faf9f6}.personal-object-list>button:last-child{border-bottom:0}.personal-object-list>button>p{color:var(--pw-muted);text-overflow:ellipsis;white-space:nowrap;grid-column:2/-1;margin:-3px 0 0;font-size:12px;line-height:1.45;overflow:hidden}.personal-object-list>button>em{background:var(--pw-blue-soft);color:var(--pw-blue-ink);border-radius:999px;justify-self:end;padding:2px 7px;font-size:10px;font-style:normal;font-weight:700}.personal-object-list small{color:var(--pw-muted)}.personal-object-list>button>small{white-space:nowrap;align-items:center;gap:8px;display:inline-flex}.personal-object-list-state{border-bottom:1px solid var(--pw-line);color:var(--pw-muted);align-items:center;gap:8px;margin:0;padding:14px 15px;font-size:12px;line-height:1.5;display:flex}.personal-object-list-state.is-error{color:var(--pw-red);background:var(--pw-red-bg)}.personal-object-list .is-done{color:var(--pw-green)}.personal-object-list .is-attention{color:var(--pw-amber);font-weight:700}.personal-task-age{color:var(--pw-faint);font-size:11px}.personal-task-empty{color:var(--pw-muted);margin:0;padding:4px 15px 16px;font-size:12.5px}.personal-task-lane-filter{border:1px solid var(--pw-line);background:#fff;border-radius:10px;justify-content:space-between;align-items:center;gap:16px;min-height:50px;padding:8px 12px;display:flex}.personal-capability-settings{gap:16px;max-width:1050px;display:grid}.personal-capability-scope-note{background:var(--pw-blue-soft);color:var(--pw-blue-ink);border:1px solid #b8c9f5;border-radius:12px;align-items:flex-start;gap:10px;padding:13px 15px;display:flex}.personal-capability-scope-note svg{flex:none;margin-top:2px}.personal-capability-scope-note p{margin:0;font-size:12px;line-height:1.55}.personal-capability-scope-note strong{color:var(--pw-text);display:block}.personal-capability-layout{grid-template-columns:minmax(220px,280px) minmax(0,1fr);gap:16px;display:grid}.personal-capability-list{align-content:start;gap:6px;display:grid}.personal-capability-list button{border:1px solid var(--pw-line);min-height:58px;color:var(--pw-text);cursor:pointer;text-align:left;background:#fff;border-radius:10px;justify-content:space-between;align-items:center;gap:8px;padding:9px 11px;display:flex}.personal-capability-list button:hover{border-color:#b8c9f5}.personal-capability-list button[aria-current=page]{background:#f4f7ff;border-color:#8cacf0;box-shadow:0 0 0 3px #2f66e914}.personal-capability-list button>span{gap:2px;min-width:0;display:grid}.personal-capability-list strong{text-overflow:ellipsis;white-space:nowrap;font-size:12px;overflow:hidden}.personal-capability-list small{color:var(--pw-faint);text-overflow:ellipsis;white-space:nowrap;font-size:10px;overflow:hidden}.personal-capability-list em{background:var(--pw-blue-soft);color:var(--pw-blue-ink);border-radius:999px;flex:none;padding:3px 6px;font-size:9px;font-style:normal;font-weight:750}.personal-capability-detail{border:1px solid var(--pw-line);background:#fff;border-radius:14px;overflow:hidden}.personal-capability-detail>header{border-bottom:1px solid var(--pw-line);align-items:flex-start;gap:12px;padding:18px;display:flex}.personal-capability-detail>header small{color:var(--pw-blue);letter-spacing:.04em;font-size:10px;font-weight:700}.personal-capability-detail h2{margin:2px 0 4px;font-size:17px}.personal-capability-detail p{color:var(--pw-muted);margin:0;font-size:12px;line-height:1.55}.personal-capability-value-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;padding:16px 18px;display:grid}.personal-capability-raw-values{border-top:1px solid var(--pw-line)}.personal-capability-raw-values>summary{cursor:pointer;color:var(--pw-text);padding:16px 18px;font-size:12px}.personal-capability-raw-values>summary:focus-visible{outline:2px solid var(--pw-blue);outline-offset:-2px}.personal-capability-value-grid section{min-width:0}.personal-capability-value-grid strong,.personal-capability-field-summary>strong{font-size:11px}.personal-capability-value-grid pre{border:1px solid var(--pw-line);min-height:72px;max-height:220px;color:var(--pw-text);background:#faf9f6;border-radius:9px;margin:7px 0 0;padding:11px;font-size:10.5px;line-height:1.5;overflow:auto}.personal-capability-editor-status{border-radius:10px;align-items:flex-start;gap:10px;margin:0 18px 16px;padding:12px;display:flex}.personal-capability-effective-source{border:1px solid var(--pw-line);color:var(--pw-green);background:#faf9f6;border-radius:9px;align-items:center;gap:8px;margin:0 18px 16px;padding:9px 11px;display:flex}.personal-capability-effective-source span{color:var(--pw-muted);gap:6px;font-size:11px;display:flex}.personal-capability-effective-source strong{color:var(--pw-text)}.personal-capability-editor-status svg{flex:none;margin-top:1px}.personal-capability-editor-status strong{font-size:12px}.personal-capability-editor-status p{margin-top:3px}.personal-capability-editor-status.is-preview{background:var(--pw-blue-soft);color:var(--pw-blue-ink)}.personal-capability-editor-status.is-read-only{color:#9a5a10;background:#fff5e8}.personal-capability-behavior-note{border:1px solid var(--pw-line-strong);background:var(--pw-amber-bg);color:var(--pw-amber);border-radius:10px;align-items:flex-start;gap:10px;margin:0 18px 16px;padding:12px;display:flex}.personal-capability-behavior-note svg{flex:none;margin-top:1px}.personal-capability-behavior-note strong{font-size:12px}.personal-capability-behavior-note p{color:inherit;margin-top:3px}.personal-capability-editor-mode{color:var(--pw-muted);justify-content:space-between;align-items:center;gap:12px;margin:0 18px 16px;font-size:11px;display:flex}.personal-capability-editor-mode>div{border:1px solid var(--pw-line);background:#f5f4f0;border-radius:9px;gap:3px;padding:3px;display:flex}.personal-capability-editor-mode button{min-height:44px;color:var(--pw-muted);cursor:pointer;font:inherit;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;gap:6px;padding:0 12px;font-size:11px;font-weight:650;display:inline-flex}.personal-capability-editor-mode button[aria-pressed=true]{color:var(--pw-text);background:#fff;box-shadow:0 1px 4px #1e1c1414}.personal-capability-editor-mode button:disabled{cursor:not-allowed;opacity:.45}.personal-capability-field-summary{padding:0 18px 18px}.personal-capability-field-summary .personal-capability-fields{margin-top:8px}.personal-capability-fields{border:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0;padding:0;display:grid}.personal-capability-fields label{align-content:start;gap:6px;min-width:0;display:grid}.personal-capability-fields label>span{font-size:12px;font-weight:650}.personal-capability-fields label>small{color:var(--pw-muted);font-size:10.5px;line-height:1.45}.personal-capability-fields input:not([type=checkbox]),.personal-capability-fields select,.personal-capability-fields textarea{border:1px solid var(--pw-line-strong);width:100%;min-width:0;min-height:42px;color:var(--pw-text);font:inherit;background:#fff;border-radius:9px;padding:8px 11px;font-size:13px}.personal-capability-fields .is-boolean{grid-template-columns:minmax(0,1fr) auto;align-items:center;min-height:44px}.personal-capability-fields .is-boolean input{width:42px;height:24px;accent-color:var(--pw-blue);margin:0}.personal-capability-fields .is-boolean small{grid-column:1/-1}.personal-capability-fields:disabled{opacity:.62}.personal-capability-json-editor{gap:7px;margin:0;padding:0 18px 18px;display:grid}.personal-capability-json-editor>span{font-size:11px;font-weight:650}.personal-capability-json-editor>small{color:var(--pw-muted);font-size:10.5px;line-height:1.5}.personal-capability-json-editor textarea{resize:vertical;border:1px solid var(--pw-line-strong);width:100%;min-width:0;color:var(--pw-text);tab-size:2;background:#fafafa;border-radius:9px;padding:12px 13px;font:12px/1.6 SFMono-Regular,Consolas,monospace}.personal-capability-json-editor textarea:focus-visible{outline:2px solid var(--pw-blue);outline-offset:2px}.personal-capability-preview{background:#f4f7ff;border:1px solid #9fb9f4;border-radius:10px;grid-template-columns:minmax(0,1fr) auto;gap:3px 12px;margin:0 18px 16px;padding:12px;display:grid}.personal-capability-preview strong{font-size:12px}.personal-capability-preview span{color:var(--pw-blue-ink);font-size:11px;font-weight:700}.personal-capability-preview small{color:var(--pw-muted);grid-column:1/-1;font-size:10.5px}.personal-capability-actions{border-top:1px solid var(--pw-line);background:#faf9f6;justify-content:flex-end;gap:9px;padding:14px 18px;display:flex}.personal-capability-actions button{border:1px solid var(--pw-line-strong);min-height:44px;color:var(--pw-text);cursor:pointer;font:inherit;background:#fff;border-radius:9px;padding:0 14px;font-size:12px;font-weight:700}.personal-capability-actions button.is-primary{border-color:var(--pw-blue);background:var(--pw-blue);color:#fff}.personal-capability-actions button.is-danger{color:var(--pw-red);align-items:center;gap:6px;margin-right:auto;display:inline-flex}.personal-capability-actions button:disabled{cursor:not-allowed;opacity:.5}.personal-capability-empty,.personal-capability-error{border:1px solid var(--pw-line);max-width:720px;min-height:56px;color:var(--pw-muted);background:#fff;border-radius:11px;align-items:center;gap:9px;margin:0;padding:14px;font-size:12px;display:flex}.personal-capability-error{color:var(--pw-red);border-color:#efc1ba}.personal-capability-error span{gap:2px;display:grid}.personal-capability-error small{color:var(--pw-muted)}.personal-capability-error button{min-height:44px;color:inherit;cursor:pointer;background:0 0;border:1px solid;border-radius:9px;align-items:center;gap:6px;margin-left:auto;padding:0 12px;display:inline-flex}.personal-capability-recovery{color:#74530d;background:#fffaf0;border:1px solid #dfc98d;border-radius:10px;grid-template-columns:auto minmax(0,1fr) auto;align-items:start;gap:9px;margin:0 20px 16px;padding:12px;font-size:11px;line-height:1.5;display:grid}.personal-capability-recovery div{gap:3px;display:grid}.personal-capability-recovery p{margin:0}.personal-capability-recovery small{color:var(--pw-muted);overflow-wrap:anywhere}.personal-capability-recovery button{min-height:40px;color:inherit;cursor:pointer;background:0 0;border:1px solid;border-radius:8px;align-items:center;gap:6px;padding:0 10px;display:inline-flex}.personal-task-lane-filter>div{min-width:0;color:var(--pw-muted);align-items:center;gap:9px;display:flex}.personal-task-lane-filter>div>span{gap:1px;display:grid}.personal-task-lane-filter strong{color:var(--pw-text);font-size:12px}.personal-task-lane-filter small{color:var(--pw-faint);font-size:10.5px}.personal-task-lane-filter label{border:1px solid var(--pw-line-strong);background:var(--pw-bg);border-radius:8px;align-items:center;gap:6px;min-height:34px;padding:0 9px;display:flex}.personal-task-lane-filter select{max-width:300px;color:var(--pw-text);font:inherit;appearance:none;background:0 0;border:0;outline:0;font-size:11.5px;font-weight:600}.personal-task-board{flex-direction:column;gap:12px;height:100%;min-height:0;display:flex}.personal-channel-scroll:has(.personal-task-board.is-list-view){overflow-y:auto}.personal-task-board.is-list-view{gap:24px;height:auto;min-height:100%}.personal-task-view-toolbar{flex:none;justify-content:space-between;align-items:center;gap:16px;display:flex}.personal-task-view-toolbar>div:first-child{gap:4px;display:grid}.personal-task-view-toolbar strong{font-size:16px;font-weight:600}.personal-task-view-toolbar span{color:var(--pw-muted);font-size:12px}.personal-task-view-switch{border:1px solid var(--pw-line);background:var(--pw-bg);border-radius:8px;flex:none;padding:3px;display:flex}.personal-task-view-switch button{min-height:36px;color:var(--pw-muted);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:5px;padding:0 14px;font-size:13px}.personal-task-view-switch button[aria-pressed=true]{background:var(--pw-text);color:var(--pw-bg)}.personal-task-grouped-list{gap:24px;padding-bottom:24px;display:grid}.personal-completed-list{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:12px}.personal-completed-list>header{min-height:48px;color:var(--pw-text);padding:2px 16px}.personal-completed-list>header>button{color:inherit;font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;min-height:44px;padding:0}.personal-completed-list .personal-task-lane-scroll{height:480px;max-height:60vh;overflow-y:auto}.personal-completed-list .personal-task-lane-scroll[hidden]{display:none}.personal-completed-list .personal-completed-row>button{border:0;border-bottom:1px solid var(--pw-line);text-align:left;background:0 0;grid-template-columns:20px minmax(0,1fr);gap:8px 12px;width:100%;height:100%;padding:16px;display:grid}.personal-completed-list .personal-completed-row>button>strong{-webkit-line-clamp:2}.personal-completed-list .personal-completed-row>button>small{grid-column:2}.personal-task-group{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:12px;min-width:0}.personal-task-group>summary{cursor:pointer;align-items:center;gap:8px;min-height:48px;padding:10px 16px;list-style:none;display:flex}.personal-task-group>summary::-webkit-details-marker{display:none}.personal-task-group>summary strong{font-size:12px;font-weight:600;line-height:18px}.personal-task-group>summary span{background:var(--pw-line);color:var(--pw-muted);border-radius:6px;padding:2px 7px;font-size:12px}.personal-task-group>summary svg{color:var(--pw-muted);transform:rotate(-90deg)}.personal-task-group[open]>summary svg{transform:none}.personal-task-group.tone-attention>summary{color:var(--pw-amber)}.personal-task-list-rows{padding:0 16px 8px}.personal-task-list-rows>button,.personal-task-list-rows>.personal-task-card>button{border:0;border-top:1px solid var(--pw-line);width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border-radius:0;grid-template-columns:20px minmax(0,1fr);gap:8px 12px;padding:16px 4px;display:grid}.personal-task-list-rows>button:hover,.personal-task-list-rows>.personal-task-card>button:hover{background:var(--pw-line)}.personal-task-list-rows>button>strong,.personal-task-list-rows>.personal-task-card>button>strong{-webkit-line-clamp:2;overflow-wrap:anywhere;-webkit-box-orient:vertical;font-size:14px;font-weight:500;line-height:20px;display:-webkit-box;overflow:hidden}.personal-task-list-rows>button>small,.personal-task-list-rows>.personal-task-card>button>small{color:var(--pw-muted);overflow-wrap:anywhere;flex-wrap:wrap;grid-column:2;align-items:center;gap:8px;font-size:12px;line-height:16px;display:flex}.personal-task-list-rows .personal-task-card-actions{background:var(--pw-card);top:auto;bottom:12px}@media (width>=721px){.personal-channel-header:has(~.personal-channel-scroll .is-list-view){flex-wrap:wrap}.personal-channel-header:has(~.personal-channel-scroll .is-list-view) .personal-channel-title{flex-basis:100%}}.personal-task-kanban{flex:1;grid-template-columns:repeat(auto-fit,minmax(172px,1fr));align-items:stretch;gap:12px;min-height:0;display:grid}.personal-task-chat-receipt{background:#f8faff;border:1px solid #d8e2f8;border-radius:10px;grid-template-columns:28px minmax(0,1fr) auto;align-items:center;gap:10px;padding:8px 12px;display:grid;box-shadow:0 1px 3px #2f66e90a}.personal-task-chat-icon{background:var(--pw-blue-soft);width:28px;height:28px;color:var(--pw-blue-ink);border-radius:8px;place-items:center;display:grid}.personal-task-chat-receipt>div{min-width:0}.personal-task-chat-receipt header{align-items:center;gap:8px;display:flex}.personal-task-chat-receipt header strong{font-size:12px;font-weight:650}.personal-task-chat-receipt header small{color:var(--pw-faint);font-size:10px}.personal-task-chat-receipt p{color:var(--pw-text);text-overflow:ellipsis;white-space:nowrap;grid-template-columns:36px minmax(0,1fr);gap:5px;margin:3px 0;font-size:12px;line-height:1.4;display:grid;overflow:hidden}.personal-task-chat-receipt p b{color:var(--pw-faint);font-size:10px;font-weight:650}.personal-task-chat-receipt p.is-assistant{max-height:2.8em;color:var(--pw-muted);white-space:normal}.personal-task-chat-receipt>div>small{color:var(--pw-muted);font-size:10.5px;line-height:1.4}.personal-task-chat-receipt footer{gap:6px;display:flex}.personal-task-chat-receipt footer button{min-height:26px;color:var(--pw-blue-ink);cursor:pointer;white-space:nowrap;background:#fff;border:1px solid #b9c9ee;border-radius:7px;align-items:center;gap:4px;padding:3px 8px;font-size:10.5px;font-weight:650;display:inline-flex}.personal-task-chat-receipt footer button:hover{border-color:var(--pw-blue);background:var(--pw-blue-soft)}.personal-task-kanban .personal-object-list{background:#f6f4ee;flex-direction:column;min-height:0;padding:0;display:flex}.personal-task-kanban .personal-object-list>header{background:#f6f4ee;border-bottom:1px solid #e0ddd4b8;flex:none;align-items:center;gap:8px;min-height:38px;padding:10px 16px 7px;display:flex}.personal-task-kanban .personal-object-list>header>strong{align-items:center;gap:7px;min-width:0;font-size:12px;display:inline-flex}.personal-task-kanban .personal-object-list>header>span{margin-left:auto}.personal-task-lane-scroll{overscroll-behavior-y:contain;scrollbar-color:#bebbb2 transparent;scrollbar-gutter:stable;scrollbar-width:thin;-webkit-overflow-scrolling:touch;flex-direction:column;flex:auto;gap:8px;min-height:0;padding:8px;scroll-padding-block:8px;display:flex;overflow-y:auto}.personal-task-lane-scroll:focus-visible{outline:2px solid var(--pw-blue);outline-offset:-3px}.personal-task-lane-scroll.has-overflow-before{box-shadow:inset 0 12px 10px -13px #34312b94}.personal-task-lane-scroll.has-overflow-after{box-shadow:inset 0 -16px 12px -15px #34312bb3}.personal-task-lane-scroll.has-overflow-before.has-overflow-after{box-shadow:inset 0 12px 10px -13px #34312b94,inset 0 -16px 12px -15px #34312bb3}.personal-task-lane-scroll::-webkit-scrollbar{width:10px}.personal-task-lane-scroll::-webkit-scrollbar-track{background:0 0}.personal-task-lane-scroll::-webkit-scrollbar-thumb{background:#bebbb2 padding-box padding-box;border:3px solid #0000;border-radius:999px;min-height:40px}.personal-task-lane-scroll::-webkit-scrollbar-thumb:hover{background:#97938a padding-box padding-box}.personal-kanban-dot{background:var(--pw-faint);border-radius:50%;width:8px;height:8px}.personal-kanban-dot.tone-attention{background:var(--pw-amber)}.personal-kanban-dot.tone-progress{background:var(--pw-blue)}.personal-kanban-dot.tone-schedule{background:#8a6fd6}.personal-kanban-dot.tone-done{background:var(--pw-green)}.personal-task-kanban .personal-task-lane-scroll>button,.personal-task-kanban .personal-task-card>button{border:1px solid var(--pw-line);width:100%;min-height:0;color:inherit;text-align:left;cursor:pointer;background:#fff;border-radius:10px;grid-template-columns:18px minmax(0,1fr);align-items:center;gap:6px 8px;padding:10px 12px;display:grid;box-shadow:0 1px 3px #1e1c140f}.personal-task-kanban .personal-task-lane-scroll>button:hover,.personal-task-kanban .personal-task-card>button:hover{border-color:var(--pw-line-strong);background:#fff;box-shadow:0 2px 8px #1e1c1417}.personal-task-kanban .personal-task-lane-scroll>button>small,.personal-task-kanban .personal-task-card>button>small{white-space:normal;text-align:left;flex-wrap:wrap;grid-column:1/-1;justify-content:flex-start;align-items:center;gap:8px;display:inline-flex}.personal-task-kanban .personal-task-lane-scroll>button:last-child{border-bottom:1px solid var(--pw-line)}.personal-task-kanban .personal-task-lane-scroll>button:last-child:hover{border-color:var(--pw-line-strong)}.personal-task-lane-scroll>button,.personal-task-card{flex:none;min-width:0}.personal-task-lane-scroll>button>small,.personal-task-card>button>small{font-size:12px;line-height:16px}.personal-task-lane-scroll>button>strong,.personal-task-card>button>strong{-webkit-line-clamp:3;overflow-wrap:anywhere;-webkit-box-orient:vertical;font-size:14px;font-weight:500;line-height:20px;display:-webkit-box;overflow:hidden}.personal-task-card{position:relative}.personal-completed-window{flex-shrink:0;position:relative}.personal-completed-row{padding-bottom:8px;position:absolute;inset-inline:0}.personal-completed-row>button{width:100%;height:100%}.personal-completed-row>button>strong{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.personal-completed-footer{color:var(--pw-muted);text-align:center;flex-shrink:0;padding:12px 4px;font-size:12px}.personal-completed-footer button{border:1px solid var(--pw-line);min-height:32px;color:inherit;cursor:pointer;background:0 0;border-radius:6px}.personal-task-card>button{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;align-items:start;display:grid}.personal-task-card-actions{opacity:0;gap:4px;transition:opacity .12s;display:flex;position:absolute;top:6px;right:6px}.personal-task-card:hover .personal-task-card-actions,.personal-task-card:focus-within .personal-task-card-actions,.personal-task-card.has-session .personal-task-card-actions{opacity:1}.personal-task-card.is-selected>button,.personal-task-kanban .personal-task-lane-scroll>button.is-selected{background:#f5f8ff;border-color:#7c9df1;box-shadow:0 0 0 2px #2f66e91f,0 4px 14px #1e34681a}.personal-task-card.is-selected:before{z-index:2;background:var(--pw-blue);content:"";border-radius:0 3px 3px 0;width:3px;position:absolute;top:8px;bottom:8px;left:0}.personal-task-card-actions button{border:1px solid var(--pw-line-strong);width:28px;height:28px;color:var(--pw-muted);cursor:pointer;background:#fff;border-radius:7px;place-items:center;padding:0;display:grid;box-shadow:0 1px 3px #1e1c141f}.personal-task-card-actions button:hover{color:var(--pw-text);border-color:var(--pw-text)}.personal-task-card-actions button:disabled{cursor:wait;opacity:.72}.personal-task-card-actions .personal-task-session-link{width:auto;color:var(--pw-blue-ink);opacity:1;gap:5px;padding:0 8px;display:flex}.personal-task-session-link span{white-space:nowrap;font-size:10.5px;font-weight:650}.personal-task-session-status{color:var(--pw-blue-ink);font-weight:650}.personal-task-kanban .personal-task-empty{border:1px dashed var(--pw-line-strong);text-align:center;border-radius:10px;margin:2px 0 4px;padding:16px 10px;font-size:12px}.personal-workspace-shell.has-drawer .personal-task-kanban{grid-template-columns:repeat(2,minmax(0,1fr))}.personal-workspace-shell.has-task-inspector .personal-channel-scroll:has(.personal-task-kanban){padding-inline:20px}.personal-workspace-shell.has-task-inspector .personal-task-kanban{grid-template-columns:repeat(4,260px);width:max-content;min-width:100%}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-chat-receipt{background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-chat-icon{color:#141414;background:#ffe23f;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-chat-receipt footer button{color:#141414;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-composer-wrap{background:linear-gradient(transparent, var(--pw-bg) 22%);padding:10px max(26px,50% - 410px) 20px}.personal-read-only-notice{border:1px solid var(--pw-line);min-height:46px;color:var(--pw-muted);background:#f5f4f1;border-radius:12px;justify-content:center;align-items:center;gap:8px;padding:10px 16px;font-size:11.5px;display:flex}.personal-read-only-notice strong{color:var(--pw-text);white-space:nowrap}.personal-manager-conversation-tray{width:100%;max-height:320px;color:inherit;font:inherit;text-align:left;background:#fffffff7;border:1px solid #bfcdf1;border-radius:14px;gap:9px;margin-bottom:10px;padding:12px 14px;animation:.16s cubic-bezier(.16,1,.3,1) pw-tray-in;display:grid;overflow:hidden;box-shadow:0 5px 20px #223e781a}@keyframes pw-tray-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.personal-manager-conversation-tray:hover{border-color:#8fa9ee;box-shadow:0 7px 24px #223e7824}.personal-manager-conversation-tray:focus-within{border-color:var(--pw-blue);box-shadow:0 0 0 3px #2f66e921,0 5px 20px #223e781a}.personal-manager-conversation-tray>header{justify-content:space-between;align-items:center;gap:12px;display:flex}.personal-manager-conversation-tray>header>span{color:var(--pw-blue-ink);align-items:center;gap:7px;display:flex}.personal-manager-conversation-tray>header small{color:var(--pw-faint);font-size:10px;font-weight:500}.personal-manager-conversation-actions{align-items:center;gap:8px;display:flex}.personal-manager-conversation-btn{min-height:26px;color:var(--pw-blue-ink);cursor:pointer;background:#f4f7fe;border:1px solid #b9c9ee;border-radius:8px;align-items:center;gap:5px;padding:3px 9px;font-size:11px;font-weight:650;transition:all .12s;display:inline-flex}.personal-manager-conversation-btn:hover{background:var(--pw-blue-soft);border-color:var(--pw-blue)}.personal-manager-conversation-link{color:var(--pw-blue);cursor:pointer;background:0 0;border:0;border-radius:7px;align-items:center;padding:3px 8px;font-size:11.5px;font-weight:650;transition:background .12s;display:inline-flex}.personal-manager-conversation-link:hover{background:var(--pw-blue-soft)}.personal-manager-conversation-close{width:22px;height:22px;color:var(--pw-faint);cursor:pointer;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:0;transition:all .12s;display:inline-flex}.personal-manager-conversation-close:hover{color:#ef4444;background:#fee2e2}.personal-manager-conversation-messages{gap:7px;max-height:220px;display:grid;overflow-y:auto}.personal-manager-conversation-messages article{background:#f5f7fc;border-radius:10px;grid-template-columns:86px minmax(0,1fr);gap:9px;padding:8px 10px;font-size:12px;line-height:1.55;display:grid}.personal-manager-conversation-messages article.is-user{background:#edf3ff}.personal-manager-conversation-messages article strong{color:var(--pw-muted);font-size:10.5px}.personal-manager-conversation-bubble{min-width:0}.personal-manager-conversation-bubble p{white-space:pre-wrap;overflow-wrap:anywhere;margin:0}.personal-manager-conversation-bubble .personal-md{font-size:12px;line-height:1.55}.personal-manager-conversation-bubble small{color:var(--pw-blue);margin-top:3px;font-size:10.5px;display:inline-block}.personal-quick-prompts{flex-wrap:wrap;gap:8px;margin-bottom:9px;display:flex}.personal-quick-prompts button{border:1px solid var(--pw-line-strong);min-height:32px;color:var(--pw-muted);cursor:pointer;background:#fff;border-radius:99px;align-items:center;gap:6px;padding:5px 12px;font-size:12.5px;transition:all .14s;display:inline-flex}.personal-quick-prompts button:hover{border-color:var(--pw-blue);color:var(--pw-blue-ink)}.personal-quick-prompts button.is-draft{color:var(--pw-body);border-color:#dbe4f8}.personal-quick-prompts button.is-draft:hover{color:var(--pw-blue-ink);background:#fafaf8;border-color:#9cbdf8}.personal-quick-prompts button.is-immediate{background:var(--pw-blue-soft);color:var(--pw-blue-ink);border-color:#9cbdf8;font-weight:600}.personal-quick-prompts button.is-immediate:hover{border-color:var(--pw-blue);background:#dce7fe;box-shadow:0 1px 4px #2f66e92e}.personal-prompt-badge{color:#fff;letter-spacing:.02em;background:#2f66e9;border-radius:99px;padding:1px 6px;font-size:10px;font-style:normal;font-weight:600;line-height:1.3}.personal-prompt-subtle{color:var(--pw-faint);font-size:10.5px;font-weight:400}.personal-goal-draft-status{color:var(--pw-muted);background:#f5f7ff;border:1px solid #cfd9f5;border-radius:10px;align-items:center;gap:8px;margin-bottom:9px;padding:8px 11px;font-size:11px;display:flex}.personal-goal-draft-status strong{color:var(--pw-text)}.personal-channel-composer{border:1px solid var(--pw-line-strong);background:#fff;border-radius:16px;grid-template-columns:auto 36px minmax(0,1fr) 40px;align-items:center;min-height:56px;padding:7px 7px 7px 14px;transition:border-color .15s,box-shadow .15s;display:grid;box-shadow:0 2px 10px #1e1c1412}.personal-channel-composer:focus-within{border-color:var(--pw-blue);box-shadow:0 0 0 3px #2f66e921,0 2px 10px #1e1c1412}.personal-channel-composer>span{color:#535b68;align-items:center;gap:7px;padding-right:12px;font-size:12.5px;font-weight:650;display:flex}.personal-channel-composer textarea{resize:none;border:0;border-left:1px solid var(--pw-line);width:100%;max-height:120px;color:inherit;font:inherit;background:0 0;outline:0;padding:9px 12px;line-height:1.4}.personal-channel-composer>button,.personal-correction-composer button{background:var(--pw-blue);color:#fff;cursor:pointer;border:0;border-radius:12px;place-items:center;width:40px;height:40px;display:grid;box-shadow:0 2px 6px #2f66e952}.personal-channel-composer>button:hover{background:var(--pw-blue-ink)}.personal-channel-composer>button:disabled,.personal-correction-composer button:disabled{opacity:.4;cursor:default;box-shadow:none}.personal-channel-composer>.personal-composer-attach{width:34px;height:34px;color:var(--pw-muted);box-shadow:none;background:0 0;border-radius:9px}.personal-channel-composer>.personal-composer-attach:hover{background:var(--pw-blue-soft);color:var(--pw-blue-ink)}.personal-composer-images{gap:8px;margin:0 0 8px;display:flex;overflow-x:auto}.personal-composer-images figure{flex:0 0 74px;height:58px;margin:0;position:relative}.personal-composer-images img{object-fit:cover;border:1px solid var(--pw-line-strong);background:#fff;border-radius:10px;width:100%;height:100%}.personal-composer-images button{border:1px solid var(--pw-line-strong);width:20px;height:20px;color:var(--pw-text);cursor:pointer;background:#fff;border-radius:50%;place-items:center;padding:0;display:grid;position:absolute;top:-5px;right:-5px;box-shadow:0 1px 4px #1e1c142e}.personal-composer-error{color:var(--pw-red);margin:0 0 7px;font-size:11.5px}.personal-context-drawer{grid-template-rows:auto minmax(0,1fr);height:100vh;display:grid}.personal-drawer-header{border-bottom:1px solid var(--pw-line);justify-content:space-between;align-items:flex-start;min-height:84px;padding:20px 18px 16px;display:flex}.personal-drawer-header h2{letter-spacing:-.01em;margin:0;font-size:15.5px;font-weight:700}.personal-drawer-header p{color:var(--pw-faint);letter-spacing:.07em;text-transform:uppercase;margin:4px 0 0;font-size:11px;font-weight:650}.personal-drawer-close{flex:0 0 44px;width:44px;height:44px;margin-top:2px}.personal-drawer-body{padding:18px;overflow:auto}.personal-context-drawer[data-context-kind=todo]{background:#fbfbfc}.personal-context-drawer[data-context-kind=todo] .personal-drawer-header{background:#fff;min-height:68px;padding:11px 22px}.personal-context-drawer[data-context-kind=todo] .personal-drawer-header h2{font-size:14px}.personal-context-drawer[data-context-kind=todo] .personal-drawer-header p{text-overflow:ellipsis;white-space:nowrap;max-width:330px;overflow:hidden}.personal-drawer-header-actions{align-items:center;gap:6px;display:flex}.personal-drawer-header-actions .personal-icon-button{flex:none}.personal-context-drawer[data-context-kind=todo] .personal-drawer-body{padding:0}.personal-task-inspector-summary{border-bottom:1px solid var(--pw-line);background:#fff;padding:24px 24px 20px}.personal-task-inspector-summary h3{letter-spacing:-.015em;overflow-wrap:anywhere;margin:14px 0 0;font-size:18px;font-weight:680;line-height:1.55}.personal-task-inspector-status{flex-wrap:wrap;align-items:center;gap:7px;display:flex}.personal-task-inspector-status>span{color:#62697a;background:#f1f2f5;border-radius:6px;align-items:center;gap:6px;min-height:24px;padding:2px 8px;font-size:11px;font-weight:650;display:inline-flex}.personal-task-inspector-status>span:first-child{padding-left:7px}.personal-task-inspector-status i{background:var(--pw-blue);border-radius:50%;width:7px;height:7px}.personal-task-inspector-status .is-done{background:var(--pw-green-bg);color:var(--pw-green)}.personal-task-inspector-status .is-done i{background:var(--pw-green)}.personal-task-inspector-status .is-blocked{background:var(--pw-red-bg);color:var(--pw-red)}.personal-task-inspector-status .is-blocked i{background:var(--pw-red)}.personal-task-inspector-fields{background:#fff;padding:20px 24px 22px}.personal-task-inspector-fields h4{color:var(--pw-text);margin:0 0 9px;font-size:12px;font-weight:700}.personal-task-inspector-fields dl{border-top:1px solid var(--pw-line);margin:0}.personal-task-inspector-fields dl div{border-bottom:1px solid var(--pw-line);grid-template-columns:92px minmax(0,1fr);gap:14px;min-height:44px;padding:11px 0;font-size:12px;line-height:1.55;display:grid}.personal-task-inspector-fields dt{color:var(--pw-muted)}.personal-task-inspector-fields dd{color:var(--pw-text);overflow-wrap:anywhere;margin:0}.personal-task-inspector-actions{border-top:1px solid var(--pw-line-strong);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#fffffff5;grid-template-columns:auto minmax(170px,1fr);gap:10px;padding:13px 18px;display:grid;position:sticky;bottom:0;box-shadow:0 -8px 26px #1e284012}.personal-task-inspector-actions>.personal-primary-action{min-height:40px;margin:0}.personal-task-management{position:relative}.personal-task-management>summary{border:1px solid var(--pw-line-strong);min-width:128px;min-height:40px;color:var(--pw-text);cursor:pointer;background:#fff;border-radius:9px;justify-content:center;align-items:center;gap:7px;padding:0 14px;font-size:12px;font-weight:650;list-style:none;display:flex}.personal-task-management>summary::-webkit-details-marker{display:none}.personal-task-management[open]>summary{color:var(--pw-blue-ink);border-color:#9db3e9}.personal-task-management>div{border:1px solid var(--pw-line-strong);background:#fff;border-radius:12px;gap:9px;width:390px;padding:14px;display:grid;position:absolute;bottom:calc(100% + 9px);left:0;box-shadow:0 16px 38px #1e284029}.personal-task-management>div>strong{color:var(--pw-muted);font-size:10.5px;font-weight:650}.personal-task-management-secondary{border-top:1px solid var(--pw-line);grid-template-columns:1fr 1fr;gap:7px;padding-top:4px;display:grid}.personal-task-management-secondary button{border:1px solid var(--pw-line-strong);min-height:34px;color:var(--pw-text);cursor:pointer;background:#fff;border-radius:8px;font-size:11.5px}.personal-task-management-secondary button:hover{background:#f6f7fa}.personal-task-completed-note{background:var(--pw-green-bg);color:var(--pw-green);border:1px solid #cde4d8;border-radius:10px;align-items:center;gap:10px;margin:12px 24px 24px;padding:12px 14px;display:flex}.personal-task-completed-note>span{gap:2px;display:grid}.personal-task-completed-note strong{font-size:12px}.personal-task-completed-note small{color:#5d786c;font-size:10.5px}.personal-detail-card,.personal-correction-panel{border:1px solid var(--pw-line);background:#fff;border-radius:14px;padding:15px}.personal-proposal-card{background:#f5f8ff;border:1px solid #c3d3f9;border-radius:14px;padding:16px}.personal-proposal-card>small{color:#5270bd;letter-spacing:.05em;font-size:11px;font-weight:650}.personal-proposal-card h3{margin:8px 0;font-size:15.5px}.personal-proposal-card p{color:#5f6570;font-size:12px;line-height:1.55}.personal-proposal-card dl{gap:8px;margin:14px 0 0;display:grid}.personal-proposal-card dl div{grid-template-columns:82px minmax(0,1fr);gap:10px;font-size:11.5px;display:grid}.personal-proposal-card dt{color:var(--pw-faint)}.personal-proposal-card dd{overflow-wrap:anywhere;margin:0}.personal-proposal-state{border-radius:9px;align-items:center;gap:7px;margin:10px 0 0;padding:10px 12px;font-size:11px;display:flex}.personal-proposal-state.is-applied{background:var(--pw-green-bg);color:var(--pw-green)}.personal-proposal-state.is-stale,.personal-proposal-state.is-error{background:var(--pw-red-bg);color:var(--pw-red)}.personal-proposal-state.is-gated{color:#825a00;background:#fff6df;gap:6px;display:grid}.personal-proposal-state.is-gated>span{gap:3px;display:grid}.personal-proposal-state.is-gated small{line-height:1.5}.personal-workspace-candidates{gap:8px;margin-top:10px;display:grid}.personal-workspace-candidates button{color:#263e76;cursor:pointer;text-align:left;background:#fff;border:1px solid #c3d3f9;border-radius:10px;gap:3px;min-height:48px;padding:9px 12px;display:grid}.personal-workspace-candidates small{color:var(--pw-muted)}.personal-detail-card.is-attention{background:#fffdf7;border-color:#f1d8ac}.personal-detail-card small{color:var(--pw-muted);font-size:11px}.personal-detail-card h3{margin:7px 0;font-size:14.5px;line-height:1.5}.personal-detail-card p,.personal-correction-panel p{color:var(--pw-muted);font-size:12px;line-height:1.55}.personal-detail-card dl{gap:9px;margin:14px 0 0;display:grid}.personal-detail-card dl div{grid-template-columns:74px minmax(0,1fr);gap:10px;font-size:12px;display:grid}.personal-detail-card dt{color:var(--pw-faint)}.personal-detail-card dd{overflow-wrap:anywhere;margin:0}.personal-run-drawer-tabs{background:#efefec;border-radius:11px;grid-template-columns:1fr 1fr;gap:4px;padding:4px;display:grid}.personal-run-drawer-tabs button{min-height:36px;color:var(--pw-muted);cursor:pointer;background:0 0;border:0;border-radius:8px;padding:0 8px;font-size:12px;font-weight:650}.personal-run-drawer-tabs button[aria-selected=true]{color:var(--pw-text);background:#fff;box-shadow:0 1px 4px #1e1c141f}.personal-session-summary{margin-top:12px}.personal-session-message-record{margin-top:14px}.personal-session-message-record>h3{color:var(--pw-faint);letter-spacing:.06em;text-transform:uppercase;margin:0 0 10px;font-size:11px}.personal-session-message-record ol{gap:0;margin:0;padding:0;list-style:none;display:grid}.personal-session-message-record li{grid-template-columns:13px minmax(0,1fr);gap:9px;padding-bottom:15px;display:grid}.personal-session-message-record li>i,.personal-session-active-step>i{background:var(--pw-green);width:9px;height:9px;box-shadow:0 0 0 3px var(--pw-green-bg);border-radius:50%;margin-top:5px}.personal-session-message-record li.is-user>i{background:var(--pw-blue);box-shadow:0 0 0 3px var(--pw-blue-soft)}.personal-session-message-record li.is-error>i{background:var(--pw-red);box-shadow:0 0 0 3px var(--pw-red-bg)}.personal-session-message-record li>div{border-bottom:1px solid var(--pw-line);gap:5px;min-width:0;padding:0 0 15px;display:grid}.personal-session-message-record li header{justify-content:space-between;align-items:center;gap:8px;display:flex}.personal-session-message-record li strong{font-size:12px}.personal-session-message-record time{color:var(--pw-faint);font-size:10px}.personal-session-message-record li p{max-height:180px;color:var(--pw-muted);white-space:pre-wrap;margin:0;font-size:11.5px;line-height:1.6;overflow:auto}.personal-session-empty{border:1px dashed var(--pw-line-strong);color:var(--pw-muted);text-align:center;border-radius:10px;margin:0;padding:18px 12px;font-size:11.5px}.personal-session-active-step{grid-template-columns:13px minmax(0,1fr);align-items:start;gap:9px;padding-top:4px;display:grid}.personal-session-active-step>i{background:var(--pw-blue);box-shadow:0 0 0 3px var(--pw-blue-soft);animation:1.4s ease-in-out infinite personal-session-pulse}.personal-session-active-step>span{gap:3px;display:grid}.personal-session-active-step strong{font-size:12px}.personal-session-active-step small{color:var(--pw-muted);font-size:10.5px}@keyframes personal-session-pulse{50%{opacity:.35}}.personal-todo-actions{grid-template-columns:1fr 1fr;gap:8px;margin-top:12px;display:grid}.personal-todo-actions>button{margin-top:0}.personal-todo-actions-title{color:var(--pw-faint);letter-spacing:.06em;grid-column:1/-1;font-size:11px;font-weight:650}.personal-todo-actions .personal-primary-action,.personal-todo-actions .personal-compact-menu{grid-column:1/-1;margin-top:0}.personal-inline-agent-select{border:1px solid var(--pw-line);color:var(--pw-muted);border-radius:10px;grid-column:1/-1;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:8px;padding:8px;font-size:11px;display:grid}.personal-inline-agent-select select{border:1px solid var(--pw-line-strong);color:#333;background:#fff;border-radius:8px;min-width:0;min-height:36px;padding:0 8px}.personal-inline-agent-select .personal-secondary-action{width:auto;min-height:36px;margin:0;padding:0 12px}.personal-inline-resume-when input{border:1px solid var(--pw-line-strong);color:#333;background:#fff;border-radius:8px;min-width:0;min-height:36px;padding:0 8px}.personal-inline-resume-when small{color:var(--pw-faint);grid-column:2/-1}.personal-primary-action,.personal-secondary-action,.personal-danger-action{cursor:pointer;border-radius:11px;justify-content:center;align-items:center;gap:8px;width:100%;min-height:42px;margin-top:12px;font-size:13.5px;font-weight:650;display:flex}.personal-primary-action{border:1px solid var(--pw-blue);background:var(--pw-blue);color:#fff;box-shadow:0 2px 6px #2f66e947}.personal-primary-action:hover{background:var(--pw-blue-ink)}.personal-secondary-action{border:1px solid var(--pw-line-strong);color:var(--pw-text);background:#fff}.personal-secondary-action:hover{border-color:var(--pw-faint)}.personal-danger-action{color:var(--pw-red);background:#fff;border:1px solid #efd2cd}.personal-danger-action:hover{background:var(--pw-red-bg)}.personal-primary-action:disabled,.personal-secondary-action:disabled,.personal-danger-action:disabled{opacity:.46;cursor:default;box-shadow:none}.personal-drawer-action-grid{grid-template-columns:1fr 1fr;gap:8px;display:grid}.personal-correction-panel{margin-top:12px}.personal-correction-panel header{justify-content:space-between;align-items:center;display:flex}.personal-correction-panel header span{align-items:center;gap:7px;font-size:12px;font-weight:700;display:flex}.personal-correction-panel header button{color:var(--pw-muted);cursor:pointer;background:0 0;border:0}.personal-correction-composer{border:1px solid var(--pw-line-strong);border-radius:12px;position:relative;overflow:hidden}.personal-correction-composer:focus-within{border-color:var(--pw-blue)}.personal-correction-composer textarea{resize:vertical;width:100%;min-height:84px;font:inherit;border:0;outline:0;padding:10px 56px 10px 12px;font-size:12.5px}.personal-correction-composer button{border-radius:10px;width:34px;height:34px;position:absolute;bottom:6px;right:6px}.personal-recovery-panel{background:#fffaf0;border:1px solid #eccf94;border-radius:12px;margin-top:12px;padding:14px}.personal-recovery-panel>strong{font-size:13px}.personal-recovery-panel>p,.personal-preview-unavailable{color:var(--pw-muted);font-size:12px;line-height:1.5}.personal-compact-menu{margin-top:12px;position:relative}.personal-compact-menu>summary{border:1px solid var(--pw-line-strong);cursor:pointer;background:#fff;border-radius:11px;justify-content:center;align-items:center;gap:8px;min-height:42px;padding:0 12px;font-size:12.5px;font-weight:650;list-style:none;display:flex}.personal-compact-menu>summary::-webkit-details-marker{display:none}.personal-compact-menu[open]>summary{border-color:var(--pw-faint)}.personal-compact-menu>div{border:1px solid var(--pw-line);background:#fff;border-radius:11px;margin-top:6px;padding:6px;display:grid;box-shadow:0 8px 24px #1e1c141a}.personal-compact-menu>div button{min-height:40px;color:inherit;cursor:pointer;text-align:left;background:0 0;border:0;border-radius:8px;align-items:center;gap:8px;padding:0 10px;display:flex}.personal-compact-menu>div button:hover{background:#f5f4f1}.personal-compact-menu>div button:disabled{color:var(--pw-faint);cursor:default;opacity:.55}.personal-safe-preview{border:1px solid var(--pw-line);color:#333943;white-space:pre-wrap;overflow-wrap:anywhere;background:#f7f6f3;border-radius:11px;max-height:280px;margin:12px 0 0;padding:14px;font:12px/1.6 Geist Mono,SFMono-Regular,Consolas,monospace;overflow:auto}.personal-report-detail{border:1px solid var(--pw-line);background:#fff;border-radius:14px;margin-top:12px;padding:14px}.personal-report-detail>header{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;display:grid}.personal-report-detail>header span{background:var(--pw-blue-soft);color:var(--pw-blue-ink);border-radius:10px;flex-direction:column;gap:2px;padding:10px;font-size:10px;font-weight:650;display:flex}.personal-report-detail>header strong{font-size:18px}.personal-report-detail>p{color:var(--pw-muted);margin:10px 0;font-size:11px}.personal-report-detail ol{gap:8px;margin:0;padding:0;list-style:none;display:grid}.personal-report-detail li{border:1px solid var(--pw-line);border-radius:10px;gap:4px;padding:10px;display:grid}.personal-report-detail li[data-change-kind=changed]{background:#fffaf0;border-color:#e8d3a5}.personal-report-detail li small{color:var(--pw-muted);text-transform:uppercase;font-size:10px}.personal-report-detail li strong{font-size:12px;line-height:1.45}.personal-report-detail li p{color:var(--pw-muted);margin:0;font-size:11px;line-height:1.5}.personal-report-detail>footer{color:var(--pw-faint);overflow-wrap:anywhere;gap:4px;margin-top:10px;font:10px/1.5 Geist Mono,SFMono-Regular,Consolas,monospace;display:grid}.personal-execution-history{margin-top:18px}.personal-execution-history h3{letter-spacing:.07em;text-transform:uppercase;color:var(--pw-faint);margin:0 0 10px;font-size:11.5px;font-weight:650}.personal-execution-history>p{color:var(--pw-muted);font-size:12px}.personal-execution-history ol{border-top:1px solid var(--pw-line);margin:0;padding:0;list-style:none}.personal-execution-history li{border-bottom:1px solid var(--pw-line);justify-content:space-between;align-items:center;gap:12px;min-height:50px;display:flex}.personal-execution-history li>span{gap:3px;display:grid}.personal-execution-history li strong{font-size:12px}.personal-execution-history li small{color:var(--pw-muted);font-size:10px}.personal-execution-history li em{color:var(--pw-muted);font-size:10px;font-style:normal}.personal-execution-history li em.is-completed{color:var(--pw-green)}.personal-execution-history li em.is-failed{color:var(--pw-red)}.personal-mobile-back{display:none}.personal-message:not(.is-user)>div{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:4px 16px 16px;flex:1;min-width:0;padding:10px 14px}.personal-md{gap:8px;margin-top:5px;font-size:13.5px;line-height:1.7;display:grid}.personal-md p{white-space:normal;overflow-wrap:anywhere;margin:0}.personal-md-heading{letter-spacing:-.01em;font-weight:700}.personal-md-heading.is-h1{font-size:15.5px}.personal-md-heading.is-h2{font-size:14.5px}.personal-md-heading.is-h3,.personal-md-heading.is-h4{font-size:13.5px}.personal-md-list{gap:4px;margin:0;padding-left:20px;display:grid}.personal-md-list li{overflow-wrap:anywhere;padding-left:2px}.personal-md-list li::marker{color:var(--pw-faint)}.personal-md-code{border:1px solid var(--pw-line);overflow-wrap:anywhere;background:#f5f4f1;border-radius:6px;padding:1px 5px;font:12px/1.5 SF Mono,ui-monospace,Menlo,Consolas,monospace}.personal-md-pre{border:1px solid var(--pw-line);background:#f7f6f3;border-radius:11px;margin:0;padding:12px 14px;overflow-x:auto}.personal-md-pre code{color:#333943;white-space:pre;font:12px/1.65 SF Mono,ui-monospace,Menlo,Consolas,monospace}.personal-md-link{color:var(--pw-blue-ink);border-bottom:1px solid #c3d3f9;text-decoration:none}.personal-md-link:hover{border-bottom-color:var(--pw-blue-ink)}.personal-agent-persona-head{align-items:center;gap:12px;display:flex}.personal-agent-avatar{color:#fff;background:linear-gradient(135deg,#2f66e9,#6f9bff);border-radius:14px;flex:0 0 46px;place-items:center;height:46px;font-size:19px;font-weight:700;display:grid;box-shadow:0 2px 8px #2f66e942}.personal-agent-persona-id{flex:1;min-width:0}.personal-agent-persona-id h3{margin:0}.personal-agent-persona-id p{margin:2px 0 0}.personal-agent-health{border-radius:99px;flex:none;padding:2.5px 10px;font-size:11px;font-weight:650}.personal-agent-health.is-ok{background:var(--pw-green-bg);color:var(--pw-green)}.personal-agent-health.is-off,.personal-row-status.is-blocking{background:var(--pw-red-bg);color:var(--pw-red)}.personal-row-status.is-pending{background:var(--pw-amber-bg);color:var(--pw-amber)}.personal-row-status.is-failed{background:var(--pw-red-bg);color:var(--pw-red)}.personal-row-status.is-completed{background:var(--pw-green-bg);color:var(--pw-green)}.personal-row-status.is-queued,.personal-row-status.is-waiting,.personal-row-status.is-interrupted{color:var(--pw-muted);background:#f2f1ed}.personal-diagnostics-trigger{border:0;border-top:1px solid var(--pw-line);width:100%;color:var(--pw-muted);cursor:pointer;background:0 0;justify-content:space-between;align-items:center;margin-top:18px;padding:12px 0;font-size:12.5px;display:flex}.personal-diagnostics-trigger svg{transition:transform .16s}.personal-diagnostics-trigger svg.is-open{transform:rotate(180deg)}.personal-diagnostics{color:var(--pw-muted);overflow-wrap:anywhere;background:#f5f4f1;border-radius:10px;gap:7px;padding:12px;font-size:10.5px;display:grid}.personal-copy-feedback{color:var(--pw-green);margin:7px 0 0;font-size:11px}.personal-copy-feedback.is-error{color:var(--pw-red)}@media (width<=1300px){.personal-workspace-shell.has-drawer .personal-live-indicator{display:none}.personal-workspace-shell.has-drawer .personal-channel-title p{max-width:260px}.personal-home-lanes{grid-template-columns:repeat(2,minmax(190px,1fr))}}@media (width<=1100px){.personal-machine-layout{grid-template-columns:1fr;gap:14px}.personal-machine-namespaces nav{overscroll-behavior-x:contain;scroll-snap-type:x proximity;display:flex;overflow-x:auto}.personal-machine-namespaces button{scroll-snap-align:start;flex:0 0 180px}.personal-machine-summary{flex-wrap:wrap;align-items:flex-start}.personal-machine-editor-bar{flex-direction:column;align-items:stretch}.personal-machine-editor-mode{width:100%}.personal-machine-editor-mode button{flex:1 1 0}.personal-machine-editor fieldset{grid-template-columns:1fr}.personal-machine-editor fieldset label:last-child{grid-column:auto}.personal-machine-preview dl{grid-template-columns:1fr}}@media (width<=1050px){.personal-workspace-shell,.personal-workspace-shell.has-drawer{grid-template-columns:minmax(0,1fr)}.personal-workspace-sidebar{z-index:40;width:min(310px,86vw);display:none;position:fixed;inset:0 auto 0 0;box-shadow:18px 0 50px #1e1c1429}.personal-workspace-shell.mobile-sidebar-open .personal-workspace-sidebar{display:block}.personal-sidebar-backdrop{z-index:35;cursor:default;background:#14182047;border:0;display:block;position:fixed;inset:0}.personal-icon-button.personal-mobile-menu{flex:0 0 36px;display:inline-grid}.personal-workspace-drawer{z-index:30;width:min(410px,90vw);position:fixed;inset:0 0 0 auto}.personal-workspace-drawer[data-drawer-mode=inspector],.personal-workspace-drawer[data-drawer-mode=inspector-full]{width:min(520px,92vw);position:fixed;inset:0 0 0 auto;box-shadow:-18px 0 44px #1e284024}.personal-run-row{grid-template-columns:36px minmax(0,1fr) auto 16px}.personal-run-identity,.personal-run-progress{display:none}.personal-home-lanes{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=720px){.personal-workspace-shell,.personal-workspace-shell.has-drawer{grid-template-columns:1fr}.personal-workspace-shell,.personal-workspace-main,.personal-channel{width:100%;max-width:100vw;overflow-x:hidden}.personal-workspace-sidebar{z-index:40;width:min(310px,86vw);display:none;position:fixed;inset:0 auto 0 0;box-shadow:18px 0 50px #1e1c1429}.personal-workspace-shell.mobile-sidebar-open .personal-workspace-sidebar{display:block}.personal-icon-button.personal-mobile-menu{flex:0 0 36px;display:inline-grid}.personal-channel-header{grid-template-columns:36px minmax(0,1fr) auto;gap:10px;min-height:60px;padding:10px 14px;display:grid}.personal-channel-title p{display:none}.personal-channel-actions{min-width:0}.personal-agent-select{min-width:0;max-width:132px}.personal-channel-actions>.personal-icon-button{display:none}.personal-goal-tools-trigger{width:40px;height:40px;padding:0}.personal-goal-tools-trigger span,.personal-goal-tools-trigger>svg:last-child{display:none}.personal-goal-tools-menu{position:fixed;top:60px;right:14px}.personal-goal-tabs{order:4;grid-column:1/-1;align-self:auto;margin-left:0;overflow-x:auto}.personal-channel-actions .personal-live-indicator{display:none}.personal-channel-scroll,.personal-composer-wrap{padding-left:14px;padding-right:14px}.personal-channel-scroll:has(.personal-task-board){overflow-y:auto}.personal-task-board{height:auto;min-height:100%}.personal-task-kanban,.personal-workspace-shell.has-drawer .personal-task-kanban,.personal-workspace-shell.has-task-inspector .personal-task-kanban{grid-template-columns:minmax(0,1fr);width:100%;height:auto}.personal-task-kanban .personal-object-list{min-height:auto}.personal-task-lane-scroll,.personal-task-lane-scroll.has-overflow-before,.personal-task-lane-scroll.has-overflow-after{min-height:auto;box-shadow:none;scrollbar-gutter:auto;flex:none;padding-right:8px;overflow:visible}.personal-quick-prompts{overflow-x:auto}.personal-quick-prompts button{flex:none;min-height:36px}.personal-timeline-row,.personal-output-row{grid-template-columns:34px minmax(0,1fr) 14px;gap:9px;padding:10px 12px}.personal-timeline-row>time,.personal-timeline-row>.personal-row-status,.personal-timeline-row .personal-priority-dot{display:none}.personal-channel-composer{grid-template-columns:40px 36px minmax(0,1fr) 40px}.personal-task-chat-receipt{grid-template-columns:32px minmax(0,1fr);padding:11px}.personal-task-lane-filter{flex-direction:column;align-items:stretch;gap:8px}.personal-task-lane-filter label,.personal-task-lane-filter select{width:100%;max-width:none}.personal-capability-layout,.personal-capability-value-grid,.personal-capability-fields{grid-template-columns:1fr}.personal-task-chat-icon{width:32px;height:32px}.personal-task-chat-receipt footer{grid-column:1/-1;justify-content:flex-end}.personal-channel-composer>span{justify-content:center;min-width:0;padding:0;font-size:0}.personal-composer-wrap{max-width:100vw}.personal-workspace-drawer,.personal-workspace-drawer[data-drawer-mode=inspector],.personal-workspace-drawer[data-drawer-mode=inspector-full]{width:100vw}.personal-inspector-size{display:none!important}.personal-context-drawer{height:100dvh}.personal-drawer-body{padding-bottom:max(18px, env(safe-area-inset-bottom))}.personal-composer-wrap{padding-bottom:max(16px, env(safe-area-inset-bottom))}.personal-mobile-back{display:block}.personal-desktop-close{display:none}.personal-goal-tabs button{min-height:34px}.personal-correction-composer{padding-bottom:2px}.personal-correction-composer textarea{min-height:84px;padding-right:56px;padding-bottom:max(14px, env(safe-area-inset-bottom))}.personal-correction-composer button{width:40px;height:40px}.personal-todo-actions{grid-template-columns:1fr}.personal-task-management>div{width:calc(100vw - 28px)}.personal-home-lanes{grid-template-columns:1fr}.personal-home-lane{min-height:0}.personal-session-record,.personal-session-record dl{grid-template-columns:1fr}.personal-session-record>.personal-secondary-action{grid-area:auto/1}.personal-settings-page{grid-template-columns:1fr}.personal-settings-sidebar{border-right:0;border-bottom:1px solid var(--pw-line);gap:10px;height:auto;padding:12px 14px;position:static;overflow:visible}.personal-settings-title{display:none}.personal-settings-tabs{display:flex;overflow-x:auto}.personal-settings-tabs button{flex:0 0 180px}.personal-settings-body{padding:20px 14px}.personal-settings-header{align-items:center;gap:14px}.personal-settings-header h1{font-size:24px}.personal-settings-choice-group{grid-template-columns:1fr}.personal-machine-layout{grid-template-columns:1fr;gap:14px}.personal-machine-namespaces nav{overscroll-behavior-x:contain;scroll-snap-type:x proximity;display:flex;overflow-x:auto}.personal-machine-namespaces button{scroll-snap-align:start;flex:0 0 180px}.personal-machine-summary{align-items:flex-start}.personal-machine-editor-bar{flex-direction:column;align-items:stretch}.personal-machine-editor-mode{width:100%}.personal-machine-editor-mode button{flex:1 1 0}.personal-machine-summary dl{flex-direction:column;gap:8px}.personal-machine-editor fieldset{grid-template-columns:1fr}.personal-machine-editor fieldset label:last-child{grid-column:auto}.personal-machine-preview dl{grid-template-columns:1fr}.personal-machine-rollback{flex-direction:column;align-items:stretch}.personal-machine-rollback .personal-secondary-action{width:100%}.personal-lark-settings.is-embedded .personal-lark-tabs{overflow-x:auto}.personal-lark-settings.is-embedded .personal-lark-tabs button{flex:none}}@media (prefers-reduced-motion:reduce){.personal-timeline-row,.personal-diagnostics-trigger svg,.personal-workspace-sidebar,.personal-stopped-goals>summary>svg:first-child,.personal-subagent-switch>span,.personal-subagent-switch>span:after{transition:none}.personal-goal-lifecycle.is-pending svg,.personal-spin{animation:none}}.personal-workspace-shell[data-pw-theme=loopx],.personal-settings-page[data-pw-theme=loopx]{--pw-bg:#fafafa;--pw-card:#fff;--pw-line:#ebebeb;--pw-line-strong:#dedede;--pw-muted:#6b6b6b;--pw-faint:#8f8f8f;--pw-text:#171717;--pw-blue:#0070f3;--pw-blue-ink:#0060d1;--pw-blue-soft:#edf6ff;--pw-amber:#9a6200;--pw-amber-bg:#fff7df;--pw-red:#d90000;--pw-red-bg:#fff0f0;--pw-green:#197342;--pw-green-bg:#edf9f1;font-family:Geist Variable,Geist,Inter,Helvetica Neue,Arial,PingFang SC,Microsoft YaHei,sans-serif}.personal-workspace-shell[data-pw-theme=loopx] .personal-workspace-sidebar,.personal-settings-page[data-pw-theme=loopx] .personal-settings-sidebar{background:#fff}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-header{box-shadow:none;background:#fafafaf0}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-title h1{letter-spacing:0;font-size:20px;font-weight:600;line-height:28px}.personal-workspace-shell[data-pw-theme=loopx] .personal-sidebar-section-title{letter-spacing:0;font-size:12px;font-weight:500;line-height:16px}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-link-copy strong,.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lane>header span,.personal-workspace-shell[data-pw-theme=loopx] .personal-home-goal-card>strong{font-size:14px;font-weight:600;line-height:20px}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-link-copy small,.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lane>p,.personal-workspace-shell[data-pw-theme=loopx] .personal-home-goal-card>p{font-size:12px;line-height:16px}.personal-workspace-shell[data-pw-theme=loopx] .personal-select-trigger,.personal-workspace-shell[data-pw-theme=loopx] .personal-select-option{border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-workspace-drawer{box-shadow:none}.personal-workspace-shell[data-pw-theme=loopx] .personal-brand-mark{box-shadow:none;background:#171717;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-manager-icon{color:#171717;background:#f2f2f2;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-manager-greeting>span{color:#171717;background:#fff;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-manager-link,.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-link,.personal-workspace-shell[data-pw-theme=loopx] .personal-sidebar-utility,.personal-settings-page[data-pw-theme=loopx] .personal-settings-back,.personal-settings-page[data-pw-theme=loopx] .personal-settings-tabs button{border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-manager-link:hover,.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-link:hover,.personal-workspace-shell[data-pw-theme=loopx] .personal-sidebar-utility:hover,.personal-settings-page[data-pw-theme=loopx] .personal-settings-back:hover,.personal-settings-page[data-pw-theme=loopx] .personal-settings-tabs button:hover{background:#f2f2f2}.personal-workspace-shell[data-pw-theme=loopx] .personal-manager-link[aria-current=page],.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-link[aria-current=page],.personal-settings-page[data-pw-theme=loopx] .personal-settings-tabs button[aria-current=page]{box-shadow:none;background:#f2f2f2}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-tabs,.personal-workspace-shell[data-pw-theme=loopx] .personal-status-source-modes{background:#f2f2f2;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-tabs button,.personal-workspace-shell[data-pw-theme=loopx] .personal-status-source-modes button{border-radius:4px}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-tabs button[aria-current=page],.personal-workspace-shell[data-pw-theme=loopx] .personal-status-source-modes button[aria-selected=true]{box-shadow:0 1px 2px #0000000f}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-tabs{background:0 0;border-radius:0;align-self:stretch;gap:20px;padding:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-tabs button{border-radius:0;min-height:46px;padding:0 1px;font-size:12px;font-weight:500;position:relative}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-tabs button[aria-current=page]{box-shadow:none;color:#171717;background:0 0}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-tabs button[aria-current=page]:after{content:"";background:#171717;height:2px;position:absolute;bottom:-1px;left:0;right:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-sidebar-count{color:#4d4d4d;background:#f2f2f2}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-state-dot,.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-row:nth-child(n) .personal-goal-state-dot{background:#f2f2f2;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-agent-select .personal-select-trigger,.personal-workspace-shell[data-pw-theme=loopx] .personal-read-only-source,.personal-workspace-shell[data-pw-theme=loopx] .personal-icon-button,.personal-workspace-shell[data-pw-theme=loopx] .personal-status-source-select .personal-select-trigger,.personal-settings-page[data-pw-theme=loopx] .personal-primary-action,.personal-settings-page[data-pw-theme=loopx] .personal-secondary-action{border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lane,.personal-workspace-shell[data-pw-theme=loopx] .personal-timeline-row,.personal-workspace-shell[data-pw-theme=loopx] .personal-detail-card,.personal-settings-page[data-pw-theme=loopx] .personal-detail-card,.personal-settings-page[data-pw-theme=loopx] .personal-settings-card,.personal-settings-page[data-pw-theme=loopx] .personal-lark-app-card,.personal-settings-page[data-pw-theme=loopx] .personal-lark-table,.personal-settings-page[data-pw-theme=loopx] .personal-lark-topic-panel{box-shadow:none;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lanes{border-block:1px solid #ebebeb;gap:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lane{border:0;background:0 0;border-left:1px solid #ebebeb;border-radius:0;min-height:260px;padding:16px}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lane:first-child{border-left:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-goal-card{box-shadow:none;border-radius:12px;transform:none}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-goal-card:hover{box-shadow:none;border-color:#a1a1a1;transform:none}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-timeline{gap:8px}.personal-workspace-shell[data-pw-theme=loopx] .personal-timeline-row,.personal-workspace-shell[data-pw-theme=loopx] .personal-schedule-row{box-shadow:none;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-timeline-row:hover,.personal-workspace-shell[data-pw-theme=loopx] .personal-schedule-row:hover{box-shadow:none;border-color:#a1a1a1}.personal-workspace-shell[data-pw-theme=loopx] .personal-row-icon{color:#4d4d4d;background:#f2f2f2;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-run-open-label{color:#4d4d4d}.personal-workspace-shell[data-pw-theme=loopx] .personal-run-progress b{background:#171717}.personal-workspace-shell[data-pw-theme=loopx] .personal-message.is-user{background:#f2f2f2;border-color:#dedede;border-radius:12px 12px 4px;padding:10px 12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-message-avatar{color:#171717;background:#fff;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-message:not(.is-user)>div{box-shadow:none;border-radius:4px 12px 12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-message p,.personal-workspace-shell[data-pw-theme=loopx] .personal-md{font-size:13px;line-height:1.65}.personal-workspace-shell[data-pw-theme=loopx] .personal-timeline-empty>span{color:#171717;background:#fff;border:1px solid #ebebeb;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-proposal-row{box-shadow:none;background:#fff;border-color:#dedede;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-proposal-row:hover{box-shadow:none;border-color:#a1a1a1}.personal-workspace-shell[data-pw-theme=loopx] .personal-proposal-row>span:first-child{color:#171717;background:#f2f2f2;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-proposal-row small,.personal-workspace-shell[data-pw-theme=loopx] .personal-proposal-row>b{color:#4d4d4d}.personal-workspace-shell[data-pw-theme=loopx] .personal-session-record{background:#fff;border-color:#dedede;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-session-record>header span{color:#171717}.personal-workspace-shell[data-pw-theme=loopx] .personal-session-record dl div{background:#fafafa;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-chat-receipt{box-shadow:none;background:#fff;border-color:#dedede;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-chat-icon{color:#171717;background:#f2f2f2;border:1px solid #ebebeb;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-chat-receipt footer button{color:#171717;border-color:#dedede;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-chat-receipt footer button:hover{background:#f2f2f2;border-color:#a1a1a1}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban{border-block:1px solid #ebebeb;gap:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list{border:0;background:0 0;border-left:1px solid #ebebeb;border-radius:0;gap:8px;padding:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list:first-child{border-left:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>header{padding:4px 2px 8px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>header>strong{font-size:12px;font-weight:600}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>button,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-card>button{box-shadow:none;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-lane-scroll>button>strong,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-card>button>strong{overflow-wrap:anywhere;font-size:14px;font-weight:500;line-height:20px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>button>small,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-card>button>small{color:#6b6b6b;font-size:12px;line-height:16px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>button:hover,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-card>button:hover{box-shadow:none;border-color:#a1a1a1}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-card.is-selected>button,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list>button.is-selected{background:#fff;border-color:#171717;box-shadow:0 0 0 1px #171717}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-card.is-selected:before{background:#171717}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-card-actions button{box-shadow:none;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-card-actions .personal-task-session-link,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-session-status{color:#4d4d4d}.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-task-empty{border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list{box-shadow:none;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>header{letter-spacing:0;min-height:44px;padding:8px 14px;font-weight:500}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>button{min-height:58px;padding:10px 14px}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>button:hover{background:#f2f2f2}.personal-workspace-shell[data-pw-theme=loopx] .personal-file-icon{color:#4d4d4d;background:#fafafa;border:1px solid #ebebeb;border-radius:6px;place-items:center;width:28px;height:28px;display:grid}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>button>strong{font-size:13px;font-weight:600}.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>button>p,.personal-workspace-shell[data-pw-theme=loopx] .personal-files-list>button>small{font-size:12px;line-height:16px}.personal-workspace-shell[data-pw-theme=loopx] .personal-primary-action,.personal-settings-page[data-pw-theme=loopx] .personal-primary-action{box-shadow:none;background:#171717;border-color:#171717;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-primary-action:hover,.personal-settings-page[data-pw-theme=loopx] .personal-primary-action:hover{background:#333;border-color:#333}.personal-workspace-shell[data-pw-theme=loopx] .personal-md-code,.personal-workspace-shell[data-pw-theme=loopx] .personal-safe-preview,.personal-workspace-shell[data-pw-theme=loopx] .personal-diagnostics{background:#f2f2f2}.personal-workspace-shell[data-pw-theme=loopx] .personal-md-pre{color:#fafafa;background:#171717;border:1px solid #242424}.personal-workspace-shell[data-pw-theme=loopx] .personal-digest-card{background:#fff;border-radius:12px}.personal-workspace-shell[data-pw-theme=loopx] .personal-action-feedback{color:#171717;background:#f2f2f2}.personal-workspace-shell[data-pw-theme=loopx] .personal-quick-prompts button{color:#4d4d4d;background:#fff;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-quick-prompts button.is-draft,.personal-workspace-shell[data-pw-theme=loopx] .personal-quick-prompts button.is-immediate{color:#171717;box-shadow:none;background:#fff;border-color:#dedede}.personal-workspace-shell[data-pw-theme=loopx] .personal-quick-prompts button:hover,.personal-workspace-shell[data-pw-theme=loopx] .personal-quick-prompts button.is-draft:hover,.personal-workspace-shell[data-pw-theme=loopx] .personal-quick-prompts button.is-immediate:hover{color:#171717;box-shadow:none;background:#f2f2f2;border-color:#a1a1a1}.personal-workspace-shell[data-pw-theme=loopx] .personal-prompt-badge{color:#fff;background:#171717}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-draft-status{color:#6b6b6b;background:#f2f2f2;border-color:#dedede;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-goal-draft-status strong{color:#171717}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-composer{box-shadow:none;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-composer:focus-within{border-color:#0070f3;box-shadow:0 0 0 2px #0070f31f}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-composer>button,.personal-workspace-shell[data-pw-theme=loopx] .personal-correction-composer button{box-shadow:none;background:#171717;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-composer>button:hover,.personal-workspace-shell[data-pw-theme=loopx] .personal-correction-composer button:hover{background:#333}.personal-workspace-shell[data-pw-theme=loopx] .personal-channel-composer>.personal-composer-attach{color:#6b6b6b;background:0 0}.personal-settings-theme-swatch.is-loopx{background:linear-gradient(135deg,#171717 0 48%,#fafafa 48% 78%,#fff 78%)}.personal-settings-page[data-pw-theme=loopx] .personal-settings-header small,.personal-settings-page[data-pw-theme=loopx] .personal-lark-header small,.personal-settings-page[data-pw-theme=loopx] .personal-lark-section-heading small{color:#0070f3;font-family:Geist Mono Variable,Geist Mono,JetBrains Mono,SFMono-Regular,monospace;font-weight:500}.personal-settings-page[data-pw-theme=loopx] .personal-settings-choice-group{grid-template-columns:repeat(3,minmax(0,1fr))}.personal-settings-page[data-pw-theme=loopx] .personal-settings-choice-group button{box-shadow:none;border-radius:12px}.personal-settings-page[data-pw-theme=loopx] .personal-settings-choice-group button:hover{box-shadow:none;border-color:#c8c8c8}.personal-settings-page[data-pw-theme=loopx] .personal-settings-choice-group button[aria-checked=true]{background:#fff;border-color:#171717;box-shadow:0 0 0 1px #171717}@media (width<=860px){.personal-settings-page[data-pw-theme=loopx] .personal-settings-choice-group{grid-template-columns:1fr}}@media (width<=720px){.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lane,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list{border-top:1px solid #ebebeb;border-left:0}.personal-workspace-shell[data-pw-theme=loopx] .personal-home-lane:first-child,.personal-workspace-shell[data-pw-theme=loopx] .personal-task-kanban .personal-object-list:first-child{border-top:0}}.personal-workspace-shell[data-pw-theme=brutal],.personal-settings-page[data-pw-theme=brutal]{--pw-bg:#fdf8e7;--pw-card:#fff;--pw-line:#141414;--pw-line-strong:#141414;--pw-muted:#3f3f3f;--pw-faint:#666;--pw-text:#141414;--pw-blue:#141414;--pw-blue-ink:#141414;--pw-blue-soft:#ffe23f;--pw-amber:#141414;--pw-amber-bg:#ffd23f;--pw-red:#141414;--pw-red-bg:#ff9d8a;--pw-green:#141414;--pw-green-bg:#8fe6a4}.personal-workspace-shell[data-pw-theme=brutal] :focus-visible:not(textarea):not(input),.personal-settings-page[data-pw-theme=brutal] :focus-visible:not(textarea):not(input){outline-color:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-workspace-sidebar{background:#ffd91a;border-right:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-sidebar-brand{border-bottom:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-brand-mark{color:#ffd91a;box-shadow:none;background:#141414;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-icon{color:#141414;background:#fff;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-link:hover,.personal-workspace-shell[data-pw-theme=brutal] .personal-goal-link:hover,.personal-workspace-shell[data-pw-theme=brutal] .personal-sidebar-utility:hover{background:#ffffff8c}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-link[aria-current=page],.personal-workspace-shell[data-pw-theme=brutal] .personal-goal-link[aria-current=page]{background:#ff8fd0;border:2px solid #141414;border-radius:4px;font-weight:700;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-sidebar-count{color:#141414;background:#fff;border:2px solid #141414;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-sidebar-section-title{color:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-sidebar-title-actions button:hover{box-shadow:none;background:#fff;border:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-sidebar-footer{border-top:2px solid #141414}.personal-settings-page[data-pw-theme=brutal] .personal-settings-sidebar{background:#ffd91a;border-right:2px solid #141414}.personal-settings-page[data-pw-theme=brutal] .personal-settings-title{border-bottom:2px solid #141414}.personal-settings-page[data-pw-theme=brutal] .personal-settings-title small,.personal-settings-page[data-pw-theme=brutal] .personal-settings-header small,.personal-settings-page[data-pw-theme=brutal] .personal-settings-back,.personal-settings-page[data-pw-theme=brutal] .personal-settings-tabs button{color:#141414}.personal-settings-page[data-pw-theme=brutal] .personal-settings-back:hover,.personal-settings-page[data-pw-theme=brutal] .personal-settings-tabs button:hover{background:#ffffff8c}.personal-settings-page[data-pw-theme=brutal] .personal-settings-tabs button[aria-current=page]{color:#141414;background:#ff8fd0;border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-settings-page[data-pw-theme=brutal] .personal-detail-card,.personal-settings-page[data-pw-theme=brutal] .personal-machine-editor,.personal-settings-page[data-pw-theme=brutal] .personal-machine-summary,.personal-settings-page[data-pw-theme=brutal] .personal-lark-app-card,.personal-settings-page[data-pw-theme=brutal] .personal-lark-table,.personal-settings-page[data-pw-theme=brutal] .personal-lark-topic-panel{background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-settings-page[data-pw-theme=brutal] .personal-settings-choice-group button{background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-settings-page[data-pw-theme=brutal] .personal-machine-namespaces button[aria-current=page],.personal-settings-page[data-pw-theme=brutal] .personal-machine-preview,.personal-settings-page[data-pw-theme=brutal] .personal-machine-scope-note,.personal-settings-page[data-pw-theme=brutal] .personal-machine-rollback{color:#141414;background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-settings-page[data-pw-theme=brutal] .personal-settings-choice-group button:hover{background:#fff8d6;border-color:#141414;transform:translate(-1px,-1px);box-shadow:4px 4px #141414}.personal-settings-page[data-pw-theme=brutal] .personal-settings-choice-group button[aria-checked=true]{background:#ffe23f;border-color:#141414;box-shadow:3px 3px #141414}.personal-settings-page[data-pw-theme=brutal] .personal-primary-action,.personal-settings-page[data-pw-theme=brutal] .personal-secondary-action,.personal-settings-page[data-pw-theme=brutal] .personal-lark-toolbar label{color:#141414;background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-settings-page[data-pw-theme=brutal] .personal-primary-action{background:#ffe23f}.personal-settings-page[data-pw-theme=brutal] .personal-lark-tabs{border-bottom:2px solid #141414}.personal-settings-page[data-pw-theme=brutal] .personal-lark-tabs button[aria-current=page]{color:#141414;border-color:#141414}.personal-settings-page[data-pw-theme=brutal] .personal-lark-tabs span,.personal-settings-page[data-pw-theme=brutal] .personal-lark-app-card em,.personal-settings-page[data-pw-theme=brutal] .personal-connection-status{color:#141414;background:#ffe23f;border:1.5px solid #141414;border-radius:3px}.personal-workspace-shell[data-pw-theme=brutal] .personal-channel-header{background:#fdf8e7;border-bottom:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-goal-tabs{background:0 0;gap:6px;padding:0}.personal-workspace-shell[data-pw-theme=brutal] .personal-goal-tabs button{color:#141414;background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-goal-tabs button[aria-current=page]{background:#ffe23f;font-weight:700;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-agent-select .personal-select-trigger,.personal-workspace-shell[data-pw-theme=brutal] .personal-icon-button{color:#141414;background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-live-indicator i{border:1.5px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-message.is-user{background:#8fdcff;border:2px solid #141414;border-radius:8px 8px 2px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-message-avatar{color:#141414;background:#ffe23f;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-md-pre{color:#fdf8e7;background:#141414;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-md-code{color:#141414;background:#ffe23f;border:1.5px solid #141414;border-radius:3px}.personal-workspace-shell[data-pw-theme=brutal] .personal-md-link{color:#141414;text-decoration-thickness:2px}.personal-workspace-shell[data-pw-theme=brutal] .personal-object-list{background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-object-list>button:hover{background:#fff8d6}.personal-workspace-shell[data-pw-theme=brutal] .personal-row-status{border:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-object-list{background:#fff}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-object-list>header{background:#fff;border-bottom:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-task-lane-scroll>button,.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-task-card>button{border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-task-lane-scroll>button:hover,.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-task-card:hover>button{background:#fff;border-color:#141414;transform:translate(-1px,-1px);box-shadow:4px 4px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-object-list>header>span{color:#fff;background:#141414;border-radius:3px;padding:1px 7px}.personal-workspace-shell[data-pw-theme=brutal] .personal-kanban-dot{border:2px solid #141414;border-radius:2px;width:10px;height:10px}.personal-workspace-shell[data-pw-theme=brutal] .personal-kanban-dot.tone-attention{background:#ff9d5c}.personal-workspace-shell[data-pw-theme=brutal] .personal-kanban-dot.tone-progress{background:#35c5f0}.personal-workspace-shell[data-pw-theme=brutal] .personal-kanban-dot.tone-schedule{background:#b49bf0}.personal-workspace-shell[data-pw-theme=brutal] .personal-kanban-dot.tone-done{background:#7ddb8a}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-kanban .personal-task-empty{border:2px dashed #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-task-card-actions button{color:#141414;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-composer-wrap{background:linear-gradient(transparent, var(--pw-bg) 22%)}.personal-workspace-shell[data-pw-theme=brutal] .personal-system-health-banner{color:#141414;background:#fee2e2;border:2px solid #141414;border-radius:6px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-system-health-header{color:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-system-health-header small{color:#555}.personal-workspace-shell[data-pw-theme=brutal] .personal-system-health-issues{color:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-tray{background:#fff;border:2px solid #141414;border-radius:6px;box-shadow:4px 4px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-tray:hover,.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-tray:focus-within{border-color:#141414;box-shadow:5px 5px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-btn{color:#141414;background:#ffe23f;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-btn:hover{background:#ffd91a}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-link{color:#141414;text-decoration:underline}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-close{color:#141414;border:1.5px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-messages article{background:#fdf8e7;border:1.5px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-manager-conversation-messages article.is-user{background:#8fdcff}.personal-workspace-shell[data-pw-theme=brutal] .personal-prompt-badge{color:#ffe23f;background:#141414;border:1px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-quick-prompts button{color:#141414;background:#fff;border:2px solid #141414;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-quick-prompts button:hover{color:#141414;background:#ffe23f;border-color:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-channel-composer{border:2px solid #141414;border-radius:6px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-channel-composer:focus-within{border-color:#141414;box-shadow:5px 5px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-channel-composer textarea{border-left:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-channel-composer>button,.personal-workspace-shell[data-pw-theme=brutal] .personal-channel-composer>.personal-composer-attach,.personal-workspace-shell[data-pw-theme=brutal] .personal-correction-composer button{color:#141414;background:#ffe23f;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-channel-composer>button:hover{background:#ffd91a;transform:translate(1px,1px);box-shadow:1px 1px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-correction-composer{border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-correction-composer:focus-within{border-color:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-workspace-drawer{box-shadow:none;border-left:2px solid #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-detail-card,.personal-workspace-shell[data-pw-theme=brutal] .personal-correction-panel{border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-detail-card.is-attention{background:#fff3c9;border-color:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-primary-action{color:#141414;background:#ffe23f;border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-primary-action:hover{background:#ffd91a;transform:translate(1px,1px);box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-secondary-action{color:#141414;background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-secondary-action:hover{border-color:#141414;transform:translate(1px,1px);box-shadow:1px 1px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-danger-action{color:#141414;background:#ff9d8a;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-compact-menu>summary{border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-compact-menu>div{border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-compact-menu>div button:hover{background:#fff8d6}.personal-workspace-shell[data-pw-theme=brutal] .personal-inline-agent-select{border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-inline-agent-select select,.personal-workspace-shell[data-pw-theme=brutal] .personal-inline-resume-when input,.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-switch,.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-fields input:not([type=checkbox]),.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-fields select,.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-domain-option,.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-preview{color:#141414;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-switch{background:#fff;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-switch[aria-checked=true]{background:#baf2c7}.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-switch>span{background:#777}.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-switch[aria-checked=true]>span{background:#141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-subagent-preview{background:#fff3c9;box-shadow:2px 2px #141414}.personal-digest-card{border:1px solid var(--pw-line);background:linear-gradient(135deg,#fff,#fbf7ee);border-radius:14px;justify-content:space-between;align-items:center;gap:14px;margin-bottom:12px;padding:13px 16px;display:flex}.personal-digest-card>strong{letter-spacing:.01em;font-size:13px}.personal-digest-stats{gap:8px;display:flex}.personal-digest-stats span{border:1px solid var(--pw-line-strong);color:var(--pw-muted);background:#fff;border-radius:99px;align-items:baseline;gap:6px;padding:6px 13px;font-size:12px;display:inline-flex}.personal-digest-stats b{color:var(--pw-text);font-size:14px}@media (width<=720px){.personal-digest-card{flex-direction:column;align-items:flex-start}.personal-digest-stats{flex-wrap:wrap}}.personal-composer-hint{color:var(--pw-faint);margin:0 0 8px;font-size:11.5px}.personal-priority-badge{color:var(--pw-muted);background:#f2f1ed;border-radius:6px;padding:1px 7px;font-size:10.5px;font-weight:700}.personal-priority-badge.is-p0{background:var(--pw-red-bg);color:var(--pw-red)}.personal-priority-badge.is-p1{background:var(--pw-amber-bg);color:var(--pw-amber)}.personal-priority-badge.is-blocked{background:var(--pw-red-bg);color:var(--pw-red)}.personal-workspace-shell[data-pw-theme=brutal] .personal-digest-card{background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:3px 3px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-digest-stats span{color:#141414;border:2px solid #141414;border-radius:99px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-priority-badge{border:1.5px solid #141414;border-radius:3px}.personal-goal-notification code{border:1px solid var(--pw-line);background:var(--pw-bg,#f7f6f2);word-break:break-all;border-radius:5px;padding:1px 5px;font-size:11px}.personal-workspace-shell[data-pw-theme=brutal] .personal-goal-notification code{background:#fff;border:1.5px solid #141414;border-radius:3px}.personal-proposal-state.is-error:has(small){align-items:start;gap:4px;display:grid}.personal-proposal-state.is-error small{word-break:break-all;line-height:1.5}.personal-gate-cli-hint{gap:6px;margin-top:10px;display:grid}.personal-gate-cli-hint code{border:1px solid var(--pw-line);background:var(--pw-bg,#f7f6f2);-webkit-user-select:all;user-select:all;word-break:break-all;border-radius:7px;padding:8px 10px;font-size:11.5px;line-height:1.5;display:block}.personal-gate-cli-hint small{color:var(--pw-muted);line-height:1.5}.personal-notification-list{gap:0;margin:12px 0 0;padding:0;list-style:none;display:grid}.personal-notification-row{border-top:1px solid var(--pw-line);gap:8px;padding:12px 0;display:grid}.personal-notification-row:first-child{border-top:0;padding-top:4px}.personal-notification-row-head{justify-content:space-between;align-items:center;gap:10px;display:flex}.personal-notification-row-head strong{font-size:13px}.personal-notification-badge{border-radius:99px;flex:none;padding:2px 8px;font-size:11px;font-weight:650}.personal-notification-badge.is-on{background:var(--pw-green-bg);color:var(--pw-green)}.personal-notification-badge.is-off{background:var(--pw-bg,#f5f4ef);color:var(--pw-muted)}.personal-notification-meta{color:var(--pw-muted);flex-wrap:wrap;gap:4px 12px;font-size:11.5px;display:flex}.personal-notification-toggle{color:var(--pw-text);cursor:pointer;align-items:center;gap:8px;font-size:12.5px;display:flex}.personal-notification-toggle input{accent-color:var(--pw-blue);cursor:pointer;width:15px;height:15px}.personal-notification-bind{gap:8px;display:flex}.personal-notification-bind select{border:1px solid var(--pw-line-strong);min-width:0;height:34px;color:var(--pw-text);background:#fff;border-radius:8px;flex:1;padding:0 10px;font-size:12.5px}.personal-notification-bind .personal-secondary-action{flex:none}.personal-notification-confirm{border:1px solid var(--pw-line);background:var(--pw-bg,#faf9f5);border-radius:9px;gap:8px;padding:10px 12px;display:grid}.personal-notification-confirm p{color:var(--pw-muted);margin:0;font-size:12px;line-height:1.6}.personal-notification-actions{gap:8px;display:flex}.personal-notification-error{color:var(--pw-red);margin:0;font-size:12px;line-height:1.5}.personal-notification-hint{color:var(--pw-muted);margin:0;font-size:12px;line-height:1.6}.personal-notification-hint code{border:1px solid var(--pw-line);background:var(--pw-bg,#f7f6f2);-webkit-user-select:all;user-select:all;border-radius:5px;margin-top:4px;padding:2px 7px;font-size:11px;display:inline-block}.is-spinning{animation:.9s linear infinite personal-notification-spin}@keyframes personal-notification-spin{to{transform:rotate(360deg)}}.personal-workspace-shell[data-pw-theme=brutal] .personal-notification-badge{border:1.5px solid #141414;border-radius:3px}.personal-workspace-shell[data-pw-theme=brutal] .personal-notification-bind select{border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-notification-confirm{background:#fff;border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-settings-card{border:2px solid #141414;border-radius:4px;box-shadow:4px 4px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-settings-icon{color:#141414;background:#ffe23f;border:2px solid #141414;border-radius:4px}.personal-workspace-shell[data-pw-theme=brutal] .personal-language-options>button{border:2px solid #141414;border-radius:4px;box-shadow:2px 2px #141414}.personal-workspace-shell[data-pw-theme=brutal] .personal-language-options>button.is-selected{color:#141414;background:#8fdcff}@media (width<=720px){.personal-lark-settings{padding:20px 16px calc(24px + env(safe-area-inset-bottom))}.personal-lark-header h1{font-size:24px}.personal-lark-tabs{gap:18px;margin-top:20px}.personal-settings-card>header,.personal-language-options{padding-left:15px;padding-right:15px}}.benchmark-page{--benchmark-ink:#171717;--benchmark-body:#4d4d4d;--benchmark-muted:#767676;--benchmark-canvas:#fafafa;--benchmark-surface:#fff;--benchmark-soft:#f2f2f2;--benchmark-border:#e5e5e5;--benchmark-link:#0068d7;width:100%;max-width:100vw;min-height:100vh;color:var(--benchmark-ink);background:var(--benchmark-canvas);font-family:Geist,Inter,Helvetica Neue,Arial,sans-serif;overflow-x:clip}.benchmark-page,.benchmark-page *{box-sizing:border-box}.benchmark-hero{border-bottom:1px solid var(--benchmark-border);background:var(--benchmark-surface);padding:24px max(24px,50vw - 600px)}.benchmark-hero-topline,.benchmark-title-row,.benchmark-card-heading,.benchmark-footer>div{align-items:center;display:flex}.benchmark-hero-topline{justify-content:space-between;margin-bottom:64px}.benchmark-wordmark{color:var(--benchmark-ink);letter-spacing:-.04em;font-weight:650;text-decoration:none}.benchmark-readonly{color:var(--benchmark-muted);align-items:center;gap:8px;font-size:12px;display:inline-flex}.benchmark-hero-grid{grid-template-columns:minmax(0,1.5fr) minmax(260px,.5fr);align-items:end;gap:64px;display:grid}.benchmark-kicker,.benchmark-mono{color:var(--benchmark-muted);letter-spacing:.08em;text-transform:uppercase;margin:0 0 8px;font:500 11px/16px Geist Mono,JetBrains Mono,monospace}.benchmark-title-row{align-items:baseline;gap:16px}.benchmark-title-row h1{letter-spacing:-.05em;max-width:780px;margin:0;font-size:clamp(32px,4.5vw,48px);font-weight:600;line-height:1}.benchmark-lead{max-width:680px;color:var(--benchmark-body);margin:20px 0 0;font-size:16px;line-height:24px}.benchmark-identity,.benchmark-stat-list{margin:0}.benchmark-identity>div{border-top:1px solid var(--benchmark-border);grid-template-columns:80px minmax(0,1fr);gap:16px;padding:10px 0;display:grid}.benchmark-identity dt,.benchmark-stat-list dt{color:var(--benchmark-muted);font-size:12px}.benchmark-identity dd{text-overflow:ellipsis;white-space:nowrap;margin:0;font:500 12px/18px Geist Mono,monospace;overflow:hidden}.benchmark-kpi-grid{border:1px solid var(--benchmark-border);border-radius:12px;grid-template-columns:repeat(4,minmax(0,1fr));margin-top:64px;display:grid;overflow:hidden}.benchmark-kpi-grid article{border-right:1px solid var(--benchmark-border);min-width:0;padding:20px 24px}.benchmark-kpi-grid article:last-child{border-right:0}.benchmark-kpi-grid svg{color:var(--benchmark-muted)}.benchmark-kpi-grid span{color:var(--benchmark-muted);margin-top:16px;font-size:12px;display:block}.benchmark-kpi-grid strong{letter-spacing:-.04em;font-variant-numeric:tabular-nums;margin-top:6px;font-size:30px;font-weight:600;display:block}.benchmark-kpi-grid strong small{color:var(--benchmark-muted);letter-spacing:0;font-size:14px;font-weight:400}.benchmark-kpi-grid p{color:var(--benchmark-body);margin:8px 0 0;font-size:12px}.benchmark-state{border:1px solid var(--benchmark-border);width:fit-content;color:var(--benchmark-body);background:var(--benchmark-soft);text-transform:capitalize;border-radius:999px;align-items:center;padding:3px 8px;font:500 11px/16px Geist Mono,monospace;display:inline-flex}.benchmark-state-success{color:#087a44;background:#ecf9f2;border-color:#b8e7ce}.benchmark-state-warning{color:#8a5100;background:#fff8e8;border-color:#f0d2a3}.benchmark-state-info{color:#0057b8;background:#eef6ff;border-color:#b9d7f5}.benchmark-tabs{z-index:3;border-bottom:1px solid var(--benchmark-border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#fafafaf0;align-items:center;gap:4px;padding:12px max(24px,50vw - 600px);display:flex;position:sticky;top:0}.benchmark-tabs button,.benchmark-loading button{min-height:40px;color:var(--benchmark-body);cursor:pointer;background:0 0;border:0;border-radius:6px;padding:0 14px;font-size:13px;font-weight:500}.benchmark-tabs button[aria-current=page]{color:#fff;background:var(--benchmark-ink)}.benchmark-tabs .benchmark-refresh{border:1px solid var(--benchmark-border);background:var(--benchmark-surface);align-items:center;gap:7px;margin-left:auto;display:inline-flex}.benchmark-tabs button:focus-visible,.benchmark-cell-link:focus-visible,.benchmark-run-link:focus-visible,.benchmark-loading button:focus-visible{outline:2px solid var(--benchmark-link);outline-offset:2px}.benchmark-content{width:min(100vw - 48px,1200px);min-width:0;margin:0 auto;padding:40px 0 64px}.benchmark-view-stack{gap:48px;min-width:0;display:grid}.benchmark-view-stack>section{min-width:0}.benchmark-section-heading{justify-content:space-between;align-items:end;gap:24px;margin-bottom:16px;display:flex}.benchmark-section-heading h2,.benchmark-detail-card h2,.benchmark-run-detail h2{letter-spacing:-.02em;margin:0;font-size:20px;line-height:28px}.benchmark-section-heading>p{max-width:420px;color:var(--benchmark-muted);text-align:right;margin:0;font-size:12px;line-height:18px}.benchmark-arm-grid,.benchmark-detail-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.benchmark-arm-card,.benchmark-detail-card,.benchmark-run-detail{border:1px solid var(--benchmark-border);background:var(--benchmark-surface);border-radius:12px;padding:24px}.benchmark-card-heading{justify-content:space-between;align-items:start;gap:24px}.benchmark-card-heading h3{letter-spacing:-.02em;margin:0;font-size:16px;line-height:24px}.benchmark-stat-list{margin-top:24px}.benchmark-stat-list>div{border-top:1px solid var(--benchmark-border);grid-template-columns:minmax(0,1fr) auto;gap:16px;padding:11px 0;display:grid}.benchmark-stat-list dd{font-variant-numeric:tabular-nums;text-align:right;margin:0;font:500 12px/18px Geist Mono,monospace}.benchmark-factor-row{flex-wrap:wrap;gap:8px;margin-top:20px;display:flex}.benchmark-factor-row span{color:var(--benchmark-muted);background:var(--benchmark-soft);border-radius:6px;padding:5px 8px;font-size:11px}.benchmark-runtime-list{flex-wrap:wrap;gap:8px;display:flex}.benchmark-runtime-list>div{border:1px solid var(--benchmark-border);background:var(--benchmark-surface);border-radius:6px;align-items:center;gap:20px;padding:9px 11px;font:500 11px/16px Geist Mono,monospace;display:inline-flex}.benchmark-runtime-list>div span{color:var(--benchmark-muted)}.benchmark-runtime-list>div strong{font-weight:600}.benchmark-table-shell{border:1px solid var(--benchmark-border);background:var(--benchmark-surface);border-radius:12px;width:100%;max-width:100%;overflow:auto}.benchmark-table-shell table{border-collapse:collapse;width:100%;font-size:12px}.benchmark-table-shell th,.benchmark-table-shell td{border-bottom:1px solid var(--benchmark-border);text-align:left;white-space:nowrap;padding:14px 16px}.benchmark-table-shell tr:last-child td{border-bottom:0}.benchmark-table-shell th{color:var(--benchmark-muted);background:var(--benchmark-soft);letter-spacing:.03em;text-transform:uppercase;font-size:11px;font-weight:500}.benchmark-table-shell td{color:var(--benchmark-body)}.benchmark-positive{color:#087a44!important}.benchmark-negative{color:#b42318!important}.benchmark-muted{color:var(--benchmark-muted)}.benchmark-wide-table{min-height:300px}.benchmark-cell-link,.benchmark-run-link{color:var(--benchmark-ink);font:inherit;text-align:left;cursor:pointer;background:0 0;border:0;padding:0}.benchmark-cell-link span{font-family:Geist Mono,monospace;display:block}.benchmark-cell-link small{color:var(--benchmark-link);align-items:center;gap:4px;margin-top:5px;display:flex}.benchmark-cell-link small+small{color:var(--benchmark-muted)}.benchmark-cell-link .benchmark-cell-metric{color:var(--benchmark-body);font-family:Geist Mono,monospace}.benchmark-run-link{max-width:280px;color:var(--benchmark-link);text-overflow:ellipsis;overflow:hidden}.benchmark-runs-layout{grid-template-columns:minmax(0,1.3fr) minmax(340px,.7fr);align-items:start;gap:16px;display:grid}.benchmark-table-shell tr[aria-selected=true] td{background:#f3f7fb}.benchmark-run-detail{position:sticky;top:82px}.benchmark-run-detail h2{overflow-wrap:anywhere;max-width:340px}.benchmark-run-facts dd{overflow-wrap:anywhere;white-space:normal;max-width:310px}.benchmark-run-metrics{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:20px;display:grid}.benchmark-run-metrics>div{background:var(--benchmark-soft);border-radius:6px;padding:10px}.benchmark-run-metrics span,.benchmark-run-metrics strong{display:block}.benchmark-run-metrics span{color:var(--benchmark-muted);font-size:10px}.benchmark-run-metrics strong{margin-top:5px;font:600 12px/18px Geist Mono,monospace}.benchmark-insight{border-left:2px solid var(--benchmark-link);margin-top:20px;padding:4px 0 4px 14px}.benchmark-insight p{color:var(--benchmark-body);margin:8px 0;font-size:13px;line-height:20px}.benchmark-insight small{color:var(--benchmark-muted);line-height:18px}.benchmark-footer{border-top:1px solid var(--benchmark-border);color:var(--benchmark-muted);background:var(--benchmark-surface);justify-content:space-between;gap:24px;padding:20px max(24px,50vw - 600px);font-size:11px;display:flex}.benchmark-footer>div{flex-wrap:wrap;gap:12px}.benchmark-footer code{text-overflow:ellipsis;white-space:nowrap;max-width:360px;overflow:hidden}.benchmark-loading{text-align:center;place-content:center;min-height:100vh;display:grid}.benchmark-loading svg{color:var(--benchmark-muted);margin:0 auto}.benchmark-loading h1{margin:18px 0 0;font-size:24px}.benchmark-loading p{max-width:520px;color:var(--benchmark-muted);margin:8px auto 0}.benchmark-loading button{border:1px solid var(--benchmark-border);background:var(--benchmark-surface);align-items:center;gap:8px;margin:20px auto 0;display:inline-flex}@media (width<=900px){.benchmark-hero-grid,.benchmark-runs-layout{grid-template-columns:1fr}.benchmark-hero-grid{gap:32px}.benchmark-kpi-grid{grid-template-columns:repeat(2,1fr)}.benchmark-kpi-grid article:nth-child(2){border-right:0}.benchmark-kpi-grid article:nth-child(-n+2){border-bottom:1px solid var(--benchmark-border)}.benchmark-run-detail{position:static}}@media (width<=640px){.benchmark-hero{padding-inline:20px}.benchmark-hero-topline{margin-bottom:40px}.benchmark-title-row,.benchmark-section-heading,.benchmark-footer{flex-direction:column;align-items:flex-start}.benchmark-title-row h1{font-size:34px}.benchmark-kpi-grid,.benchmark-arm-grid,.benchmark-detail-grid{grid-template-columns:1fr}.benchmark-kpi-grid article{border-right:0;border-bottom:1px solid var(--benchmark-border)}.benchmark-kpi-grid article:last-child{border-bottom:0}.benchmark-tabs{padding-inline:20px;overflow-x:auto}.benchmark-tabs .benchmark-refresh{display:none}.benchmark-content{width:calc(100vw - 40px);padding-top:28px}.benchmark-section-heading>p{text-align:left}.benchmark-footer code{max-width:100%}}@media (prefers-reduced-motion:reduce){.benchmark-page *,.benchmark-page :before,.benchmark-page :after{scroll-behavior:auto!important;transition:none!important}}@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-space-y-reverse:0;--tw-divide-y-reverse:0;--tw-border-style:solid;--tw-leading:initial;--tw-font-weight:initial;--tw-tracking:initial;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000}}}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-latin-wght-normal-BgDaEnEv.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-mono-cyrillic-ext-wght-normal-X_5orZeX.woff2)format("woff2-variations");unicode-range:U+460-52F,U+1C80-1C8A,U+20B4,U+2DE0-2DFF,U+A640-A69F,U+FE2E-FE2F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-mono-cyrillic-wght-normal-DiZS0aHC.woff2)format("woff2-variations");unicode-range:U+301,U+400-45F,U+490-491,U+4B0-4B1,U+2116}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2)format("woff2-variations");unicode-range:U+2000-2001,U+2004-2008,U+200A,U+23B8-23BD,U+2500-259F}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2)format("woff2-variations");unicode-range:U+102-103,U+110-111,U+128-129,U+168-169,U+1A0-1A1,U+1AF-1B0,U+300-301,U+303-304,U+308-309,U+323,U+329,U+1EA0-1EF9,U+20AB}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-mono-latin-ext-wght-normal-Bwz-egvJ.woff2)format("woff2-variations");unicode-range:U+100-2BA,U+2BD-2C5,U+2C7-2CC,U+2CE-2D7,U+2DD-2FF,U+304,U+308,U+329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}@font-face{font-family:Geist Mono Variable;font-style:normal;font-display:swap;font-weight:100 900;src:url(/chat/assets/geist-mono-latin-wght-normal-XN7g48iV.woff2)format("woff2-variations");unicode-range:U+??,U+131,U+152-153,U+2BB-2BC,U+2C6,U+2DA,U+2DC,U+304,U+308,U+329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--color-amber-50:oklch(98.7% .022 95.277);--color-amber-100:oklch(96.2% .059 95.617);--color-amber-200:oklch(92.4% .12 95.746);--color-amber-300:oklch(87.9% .169 91.605);--color-amber-700:oklch(55.5% .163 48.998);--color-amber-800:oklch(47.3% .137 46.201);--color-amber-900:oklch(41.4% .112 45.904);--color-amber-950:oklch(27.9% .077 45.635);--color-emerald-50:oklch(97.9% .021 166.113);--color-emerald-200:oklch(90.5% .093 164.15);--color-emerald-300:oklch(84.5% .143 164.978);--color-emerald-600:oklch(59.6% .145 163.225);--color-emerald-700:oklch(50.8% .118 165.612);--color-emerald-800:oklch(43.2% .095 166.913);--color-emerald-900:oklch(37.8% .077 168.94);--color-emerald-950:oklch(26.2% .051 172.552);--color-sky-50:oklch(97.7% .013 236.62);--color-sky-200:oklch(90.1% .058 230.902);--color-sky-800:oklch(44.3% .11 240.79);--color-sky-900:oklch(39.1% .09 240.876);--color-sky-950:oklch(29.3% .066 243.157);--color-rose-50:oklch(96.9% .015 12.422);--color-rose-100:oklch(94.1% .03 12.58);--color-rose-200:oklch(89.2% .058 10.001);--color-rose-300:oklch(81% .117 11.638);--color-rose-600:oklch(58.6% .253 17.585);--color-rose-700:oklch(51.4% .222 16.935);--color-rose-800:oklch(45.5% .188 13.697);--color-rose-900:oklch(41% .159 10.272);--color-rose-950:oklch(27.1% .105 12.094);--color-slate-50:oklch(98.4% .003 247.858);--color-slate-100:oklch(96.8% .007 247.896);--color-slate-200:oklch(92.9% .013 255.508);--color-slate-300:oklch(86.9% .022 252.894);--color-slate-400:oklch(70.4% .04 256.788);--color-slate-500:oklch(55.4% .046 257.417);--color-slate-600:oklch(44.6% .043 257.281);--color-slate-700:oklch(37.2% .044 257.287);--color-slate-800:oklch(27.9% .041 260.031);--color-slate-900:oklch(20.8% .042 265.755);--color-slate-950:oklch(12.9% .042 264.695);--color-zinc-50:oklch(98.5% 0 0);--color-zinc-100:oklch(96.7% .001 286.375);--color-zinc-200:oklch(92% .004 286.32);--color-zinc-300:oklch(87.1% .006 286.286);--color-zinc-400:oklch(70.5% .015 286.067);--color-zinc-500:oklch(55.2% .016 285.938);--color-zinc-700:oklch(37% .013 285.805);--color-zinc-800:oklch(27.4% .006 286.033);--color-zinc-900:oklch(21% .006 285.885);--color-zinc-950:oklch(14.1% .005 285.823);--color-white:#fff;--spacing:.25rem;--container-xl:36rem;--container-3xl:48rem;--text-xs:.75rem;--text-xs--line-height:calc(1 / .75);--text-sm:.875rem;--text-sm--line-height:calc(1.25 / .875);--text-base:1rem;--text-base--line-height:calc(1.5 / 1);--text-lg:1.125rem;--text-lg--line-height:calc(1.75 / 1.125);--text-xl:1.25rem;--text-xl--line-height:calc(1.75 / 1.25);--text-2xl:1.5rem;--text-2xl--line-height:calc(2 / 1.5);--text-3xl:1.875rem;--text-3xl--line-height:calc(2.25 / 1.875);--font-weight-medium:500;--font-weight-semibold:600;--tracking-tight:-.025em;--tracking-normal:0em;--radius-md:.375rem;--radius-lg:.5rem;--animate-spin:spin 1s linear infinite;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.\!visible{visibility:visible!important}.invisible{visibility:hidden}.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.fixed{position:fixed}.relative{position:relative}.static{position:static}.m-0{margin:calc(var(--spacing) * 0)}.mx-auto{margin-inline:auto}.mt-0\.5{margin-top:calc(var(--spacing) * .5)}.mt-1{margin-top:calc(var(--spacing) * 1)}.mt-2{margin-top:calc(var(--spacing) * 2)}.mt-3{margin-top:calc(var(--spacing) * 3)}.mt-4{margin-top:calc(var(--spacing) * 4)}.mt-5{margin-top:calc(var(--spacing) * 5)}.mt-6{margin-top:calc(var(--spacing) * 6)}.mt-8{margin-top:calc(var(--spacing) * 8)}.block{display:block}.contents{display:contents}.flex{display:flex}.grid{display:grid}.hidden{display:none}.inline{display:inline}.inline-flex{display:inline-flex}.table{display:table}.h-4{height:calc(var(--spacing) * 4)}.h-5{height:calc(var(--spacing) * 5)}.h-6{height:calc(var(--spacing) * 6)}.h-8{height:calc(var(--spacing) * 8)}.h-9{height:calc(var(--spacing) * 9)}.h-10{height:calc(var(--spacing) * 10)}.min-h-11{min-height:calc(var(--spacing) * 11)}.min-h-16{min-height:calc(var(--spacing) * 16)}.min-h-64{min-height:calc(var(--spacing) * 64)}.min-h-\[calc\(100vh-80px\)\]{min-height:calc(100vh - 80px)}.min-h-screen{min-height:100vh}.w-4{width:calc(var(--spacing) * 4)}.w-5{width:calc(var(--spacing) * 5)}.w-6{width:calc(var(--spacing) * 6)}.w-9{width:calc(var(--spacing) * 9)}.w-full{width:100%}.max-w-3xl{max-width:var(--container-3xl)}.max-w-\[1500px\]{max-width:1500px}.max-w-xl{max-width:var(--container-xl)}.min-w-\[260px\]{min-width:260px}.min-w-full{min-width:100%}.shrink-0{flex-shrink:0}.caption-bottom{caption-side:bottom}.border-separate{border-collapse:separate}.border-spacing-0{--tw-border-spacing-x:calc(var(--spacing) * 0);--tw-border-spacing-y:calc(var(--spacing) * 0);border-spacing:var(--tw-border-spacing-x) var(--tw-border-spacing-y)}.animate-spin{animation:var(--animate-spin)}.flex-wrap{flex-wrap:wrap}.items-center{align-items:center}.items-start{align-items:flex-start}.justify-between{justify-content:space-between}.justify-center{justify-content:center}.gap-1{gap:calc(var(--spacing) * 1)}.gap-2{gap:calc(var(--spacing) * 2)}.gap-3{gap:calc(var(--spacing) * 3)}.gap-4{gap:calc(var(--spacing) * 4)}.gap-5{gap:calc(var(--spacing) * 5)}:where(.space-y-2>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse)))}:where(.divide-y>:not(:last-child)){--tw-divide-y-reverse:0;border-bottom-style:var(--tw-border-style);border-top-style:var(--tw-border-style);border-top-width:calc(1px * var(--tw-divide-y-reverse));border-bottom-width:calc(1px * calc(1 - var(--tw-divide-y-reverse)))}:where(.divide-slate-100>:not(:last-child)){border-color:var(--color-slate-100)}.overflow-x-auto{overflow-x:auto}.rounded{border-radius:.25rem}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.border{border-style:var(--tw-border-style);border-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-dashed{--tw-border-style:dashed;border-style:dashed}.border-amber-200{border-color:var(--color-amber-200)}.border-emerald-200{border-color:var(--color-emerald-200)}.border-rose-200{border-color:var(--color-rose-200)}.border-sky-200{border-color:var(--color-sky-200)}.border-slate-100{border-color:var(--color-slate-100)}.border-slate-200{border-color:var(--color-slate-200)}.border-slate-200\/80{border-color:#e2e8f0cc}@supports (color:color-mix(in lab, red, red)){.border-slate-200\/80{border-color:color-mix(in oklab, var(--color-slate-200) 80%, transparent)}}.border-slate-300{border-color:var(--color-slate-300)}.border-slate-900{border-color:var(--color-slate-900)}.border-transparent{border-color:#0000}.bg-\[\#f6f7f9\]{background-color:#f6f7f9}.bg-\[\#f7f7f4\]{background-color:#f7f7f4}.bg-amber-50{background-color:var(--color-amber-50)}.bg-emerald-50{background-color:var(--color-emerald-50)}.bg-rose-50{background-color:var(--color-rose-50)}.bg-sky-50{background-color:var(--color-sky-50)}.bg-slate-50{background-color:var(--color-slate-50)}.bg-slate-100{background-color:var(--color-slate-100)}.bg-slate-950{background-color:var(--color-slate-950)}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-white\/70{background-color:#ffffffb3}@supports (color:color-mix(in lab, red, red)){.bg-white\/70{background-color:color-mix(in oklab, var(--color-white) 70%, transparent)}}.bg-white\/95{background-color:#fffffff2}@supports (color:color-mix(in lab, red, red)){.bg-white\/95{background-color:color-mix(in oklab, var(--color-white) 95%, transparent)}}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-0{padding-inline:calc(var(--spacing) * 0)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-5{padding-block:calc(var(--spacing) * 5)}.pt-0{padding-top:calc(var(--spacing) * 0)}.text-center{text-align:center}.text-left{text-align:left}.align-middle{vertical-align:middle}.align-top{vertical-align:top}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[11px\]{font-size:11px}.leading-5{--tw-leading:calc(var(--spacing) * 5);line-height:calc(var(--spacing) * 5)}.leading-6{--tw-leading:calc(var(--spacing) * 6);line-height:calc(var(--spacing) * 6)}.leading-7{--tw-leading:calc(var(--spacing) * 7);line-height:calc(var(--spacing) * 7)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-\[0\.12em\]{--tw-tracking:.12em;letter-spacing:.12em}.tracking-\[0\.14em\]{--tw-tracking:.14em;letter-spacing:.14em}.tracking-normal{--tw-tracking:var(--tracking-normal);letter-spacing:var(--tracking-normal)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.break-words{overflow-wrap:break-word}.break-all{word-break:break-all}.whitespace-nowrap{white-space:nowrap}.text-amber-700{color:var(--color-amber-700)}.text-amber-800{color:var(--color-amber-800)}.text-amber-900{color:var(--color-amber-900)}.text-amber-950{color:var(--color-amber-950)}.text-emerald-600{color:var(--color-emerald-600)}.text-emerald-700{color:var(--color-emerald-700)}.text-emerald-800{color:var(--color-emerald-800)}.text-emerald-950{color:var(--color-emerald-950)}.text-rose-600{color:var(--color-rose-600)}.text-rose-700{color:var(--color-rose-700)}.text-rose-800{color:var(--color-rose-800)}.text-rose-900{color:var(--color-rose-900)}.text-sky-800{color:var(--color-sky-800)}.text-slate-400{color:var(--color-slate-400)}.text-slate-500{color:var(--color-slate-500)}.text-slate-600{color:var(--color-slate-600)}.text-slate-700{color:var(--color-slate-700)}.text-slate-800{color:var(--color-slate-800)}.text-slate-900{color:var(--color-slate-900)}.text-slate-950{color:var(--color-slate-950)}.text-white{color:var(--color-white)}.uppercase{text-transform:uppercase}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_1px_2px_rgba\(15\,23\,42\,0\.04\)\]{--tw-shadow:0 1px 2px var(--tw-shadow-color,#0f172a0a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-sm{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.outline-none{--tw-outline-style:none;outline-style:none}@media (hover:hover){.hover\:bg-slate-50:hover{background-color:var(--color-slate-50)}.hover\:bg-slate-100:hover{background-color:var(--color-slate-100)}.hover\:bg-slate-800:hover{background-color:var(--color-slate-800)}}.focus\:ring-2:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-slate-400:focus{--tw-ring-color:var(--color-slate-400)}.focus-visible\:ring-2:focus-visible{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus-visible\:ring-slate-400:focus-visible{--tw-ring-color:var(--color-slate-400)}.focus-visible\:outline-none:focus-visible{--tw-outline-style:none;outline-style:none}.disabled\:pointer-events-none:disabled{pointer-events:none}.disabled\:opacity-50:disabled{opacity:.5}@media (width>=40rem){.sm\:block{display:block}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}.sm\:grid-cols-\[240px_1fr\]{grid-template-columns:240px 1fr}.sm\:p-8{padding:calc(var(--spacing) * 8)}.sm\:px-5{padding-inline:calc(var(--spacing) * 5)}.sm\:px-6{padding-inline:calc(var(--spacing) * 6)}}@media (width>=48rem){.md\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width>=64rem){.lg\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.lg\:grid-cols-3{grid-template-columns:repeat(3,minmax(0,1fr))}}@media (width>=80rem){.xl\:sticky{position:sticky}.xl\:top-4{top:calc(var(--spacing) * 4)}.xl\:grid-cols-1{grid-template-columns:repeat(1,minmax(0,1fr))}.xl\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.xl\:grid-cols-\[260px_minmax\(0\,1fr\)\]{grid-template-columns:260px minmax(0,1fr)}.xl\:grid-cols-\[minmax\(0\,1\.35fr\)_minmax\(360px\,0\.65fr\)\]{grid-template-columns:minmax(0,1.35fr) minmax(360px,.65fr)}.xl\:grid-cols-\[minmax\(0\,1fr\)_420px\]{grid-template-columns:minmax(0,1fr) 420px}.xl\:self-start{align-self:flex-start}}:where(.dark\:divide-zinc-900:where(.dark,.dark *)>:not(:last-child)){border-color:var(--color-zinc-900)}.dark\:border-amber-900:where(.dark,.dark *){border-color:var(--color-amber-900)}.dark\:border-emerald-900:where(.dark,.dark *){border-color:var(--color-emerald-900)}.dark\:border-rose-900:where(.dark,.dark *){border-color:var(--color-rose-900)}.dark\:border-sky-900:where(.dark,.dark *){border-color:var(--color-sky-900)}.dark\:border-zinc-100:where(.dark,.dark *){border-color:var(--color-zinc-100)}.dark\:border-zinc-700:where(.dark,.dark *){border-color:var(--color-zinc-700)}.dark\:border-zinc-800:where(.dark,.dark *){border-color:var(--color-zinc-800)}.dark\:bg-\[\#09090b\]:where(.dark,.dark *){background-color:#09090b}.dark\:bg-amber-950:where(.dark,.dark *){background-color:var(--color-amber-950)}.dark\:bg-amber-950\/40:where(.dark,.dark *){background-color:#46190166}@supports (color:color-mix(in lab, red, red)){.dark\:bg-amber-950\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-amber-950) 40%, transparent)}}.dark\:bg-emerald-950:where(.dark,.dark *){background-color:var(--color-emerald-950)}.dark\:bg-rose-950:where(.dark,.dark *){background-color:var(--color-rose-950)}.dark\:bg-sky-950:where(.dark,.dark *){background-color:var(--color-sky-950)}.dark\:bg-zinc-50:where(.dark,.dark *){background-color:var(--color-zinc-50)}.dark\:bg-zinc-900:where(.dark,.dark *){background-color:var(--color-zinc-900)}.dark\:bg-zinc-950:where(.dark,.dark *){background-color:var(--color-zinc-950)}.dark\:bg-zinc-950\/40:where(.dark,.dark *){background-color:#09090b66}@supports (color:color-mix(in lab, red, red)){.dark\:bg-zinc-950\/40:where(.dark,.dark *){background-color:color-mix(in oklab, var(--color-zinc-950) 40%, transparent)}}.dark\:text-amber-100:where(.dark,.dark *){color:var(--color-amber-100)}.dark\:text-amber-200:where(.dark,.dark *){color:var(--color-amber-200)}.dark\:text-amber-300:where(.dark,.dark *){color:var(--color-amber-300)}.dark\:text-emerald-200:where(.dark,.dark *){color:var(--color-emerald-200)}.dark\:text-emerald-300:where(.dark,.dark *){color:var(--color-emerald-300)}.dark\:text-rose-100:where(.dark,.dark *){color:var(--color-rose-100)}.dark\:text-rose-200:where(.dark,.dark *){color:var(--color-rose-200)}.dark\:text-rose-300:where(.dark,.dark *){color:var(--color-rose-300)}.dark\:text-sky-200:where(.dark,.dark *){color:var(--color-sky-200)}.dark\:text-zinc-50:where(.dark,.dark *){color:var(--color-zinc-50)}.dark\:text-zinc-100:where(.dark,.dark *){color:var(--color-zinc-100)}.dark\:text-zinc-200:where(.dark,.dark *){color:var(--color-zinc-200)}.dark\:text-zinc-300:where(.dark,.dark *){color:var(--color-zinc-300)}.dark\:text-zinc-400:where(.dark,.dark *){color:var(--color-zinc-400)}.dark\:text-zinc-500:where(.dark,.dark *){color:var(--color-zinc-500)}.dark\:text-zinc-950:where(.dark,.dark *){color:var(--color-zinc-950)}@media (hover:hover){.dark\:hover\:bg-zinc-200:where(.dark,.dark *):hover{background-color:var(--color-zinc-200)}.dark\:hover\:bg-zinc-900:where(.dark,.dark *):hover{background-color:var(--color-zinc-900)}}.dark\:focus\:ring-zinc-500:where(.dark,.dark *):focus,.dark\:focus-visible\:ring-zinc-500:where(.dark,.dark *):focus-visible{--tw-ring-color:var(--color-zinc-500)}}:root{--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light;font-family:Geist Variable,Geist,Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}.dark{--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}body{-webkit-font-smoothing:antialiased;text-rendering:geometricprecision;margin:0}button,input,select{font:inherit}.personal-home{--personal-accent:#2563eb;--personal-border:#e2ded6;color:#23272d;background:#f8f7f3;grid-template-columns:196px minmax(0,1fr);width:100%;min-height:100vh;display:grid;overflow-x:clip}.personal-sidebar{border-right:1px solid var(--personal-border);background:#fcfbf8;flex-direction:column;height:100vh;padding:1.5rem 1rem;display:flex;position:sticky;top:0}.personal-wordmark{color:#181d24;letter-spacing:-.01em;align-items:center;gap:.625rem;padding-inline:.5rem;font-size:.9375rem;font-weight:700;text-decoration:none;display:flex}.personal-wordmark-mark,.personal-manager-icon{color:#fff;background:#1e40af;border-radius:.625rem;flex:none;place-items:center;width:1.875rem;height:1.875rem;display:grid;box-shadow:0 1px 2px #0f172a24}.personal-nav{gap:.25rem;margin-top:2rem;display:grid}.personal-nav-item{color:#646971;text-align:left;background:0 0;border:0;border-radius:.625rem;align-items:center;gap:.625rem;width:100%;padding:.625rem .75rem;font-size:.875rem;font-weight:500;text-decoration:none;display:flex}.personal-nav-item-active{color:#1e40af;background:#e8eefc}.personal-nav-item:disabled{cursor:default;opacity:.72}.personal-health{color:#71717a;align-items:center;gap:.5rem;margin-top:auto;padding:.75rem .5rem 0;font-size:.75rem;display:flex}.personal-health-dot,.personal-state-dot{background:#94a3b8;border-radius:9999px;flex:none;width:.5rem;height:.5rem}.personal-health-dot.is-healthy{background:#22c55e;box-shadow:0 0 0 3px #22c55e1f}.personal-health-dot.is-unhealthy{background:#e11d48;box-shadow:0 0 0 3px #e11d481f}.personal-main{min-width:0;padding-bottom:6rem;position:relative}.personal-header{border-bottom:1px solid var(--personal-border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);background:#fcfbf8eb;justify-content:space-between;align-items:center;gap:1.5rem;min-height:7rem;padding:1.5rem clamp(1.5rem,5vw,4.5rem);display:flex}.personal-header h1{color:#181d24;letter-spacing:-.035em;margin:0;font-size:clamp(1.625rem,2.5vw,2rem);font-weight:650}.personal-header p{color:#71717a;margin:.375rem 0 0;font-size:.875rem}.personal-primary-link,.personal-row-action{color:#fff;background:var(--personal-accent);border-radius:.625rem;flex:none;justify-content:center;align-items:center;gap:.375rem;font-size:.8125rem;font-weight:600;text-decoration:none;display:inline-flex;box-shadow:0 1px 2px #2563eb33}.personal-primary-link{min-height:2.375rem;padding-inline:.875rem}.personal-content{width:min(100%,70rem);margin-inline:auto;padding:2rem clamp(1.5rem,5vw,4.5rem)}.personal-manager-summary{background:#ffffffb8;border:1px solid #dbe0e8;border-radius:.75rem;align-items:center;gap:.875rem;padding:.875rem 1rem;display:flex;box-shadow:0 1px 2px #0f172a09}.personal-manager-summary p{color:#474f5b;margin:0;font-size:.875rem;line-height:1.5}.personal-manager-icon{color:#1e40af;width:1.75rem;height:1.75rem;box-shadow:none;background:#e2e9f9}.personal-section{margin-top:2.25rem}.personal-section-heading{justify-content:space-between;align-items:end;gap:1rem;margin-bottom:.75rem;display:flex}.personal-section-heading h2{color:#23272d;letter-spacing:-.01em;margin:0;font-size:1rem;font-weight:650}.personal-section-heading p{color:#7d7d85;margin:.25rem 0 0;font-size:.75rem}.personal-section-heading>span{color:#7d7d85;font-variant-numeric:tabular-nums;font-size:.75rem}.personal-list{border:1px solid var(--personal-border);background:#ffffffdb;border-radius:.75rem;overflow:hidden;box-shadow:0 2px 8px #1d232b09}.personal-list-row{border-bottom:1px solid #ebe8e2;align-items:center;gap:1rem;min-width:0;padding:1rem;display:grid}.personal-list-row:last-child{border-bottom:0}.personal-needs-row{grid-template-columns:auto minmax(0,1fr) auto auto}.personal-goal-row{color:inherit;grid-template-columns:minmax(0,1fr) auto auto;text-decoration:none;transition:background-color .12s}.personal-goal-row:hover{background:#f8fafc}.personal-goal-meta{align-items:center;gap:.75rem;display:inline-flex}.personal-state-dot.is-blocking{background:#d97706;box-shadow:0 0 0 3px #d977061f}.personal-row-copy{min-width:0}.personal-row-copy strong,.personal-row-copy span{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.personal-row-copy strong{color:#2a2f36;font-size:.875rem;font-weight:580}.personal-row-copy span{color:#7d7d85;margin-top:.3125rem;font-size:.75rem}.personal-row-action{color:#1e40af;min-height:2rem;box-shadow:none;background:#e8eefc;padding-inline:.75rem}.personal-empty{color:#7d7d85;text-align:center;padding:1.5rem 1rem;font-size:.8125rem}.personal-source-tools{color:#94949c;justify-content:flex-end;align-items:center;gap:.25rem;margin-top:1rem;font-size:.6875rem;display:flex}.personal-source-tools button{min-height:1.75rem;color:inherit;background:0 0;border:0;border-radius:.375rem;align-items:center;gap:.25rem;padding-inline:.375rem;display:inline-flex}.personal-source-tools button:not(:disabled):hover{color:#475569;background:#f1efea}.personal-manager-input{color:#7d7d85;text-align:left;cursor:pointer;background:#fffffff0;border:1px solid #d8d6d0;border-radius:9999px;align-items:center;gap:.625rem;min-width:12rem;padding:.75rem 1rem;font-size:.8125rem;transition:border-color .12s,box-shadow .12s,color .12s;display:inline-flex;position:fixed;bottom:1.5rem;right:1.5rem;box-shadow:0 8px 24px #0f172a14}.personal-manager-input:hover{color:#475569;border-color:#bfc9da;box-shadow:0 10px 28px #0f172a1f}.personal-manager-backdrop{z-index:50;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);background:#0f172a33;justify-content:flex-end;display:flex;position:fixed;inset:0}.personal-manager-drawer{color:#23272d;background:#fcfbf8;grid-template-rows:auto auto minmax(0,1fr) auto;width:min(26.25rem,100vw);min-width:0;height:100%;display:grid;box-shadow:-12px 0 36px #0f172a29}.personal-manager-drawer-header{border-bottom:1px solid var(--personal-border);grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:.75rem;padding:1rem;display:grid}.personal-manager-drawer-header h2,.personal-manager-drawer-header p{margin:0}.personal-manager-drawer-header h2{color:#181d24;font-size:.9375rem;font-weight:650}.personal-manager-drawer-header p{color:#7d7d85;margin-top:.125rem;font-size:.6875rem}.personal-manager-source{color:#475569;background:#f1efea;border-radius:9999px;padding:.25rem .5rem;font-size:.6875rem}.personal-manager-drawer-header button,.personal-manager-composer button{color:#646971;cursor:pointer;background:0 0;border:0;border-radius:.5rem;flex:none;place-items:center;width:2rem;height:2rem;display:inline-grid}.personal-manager-drawer-header button:hover{color:#23272d;background:#f1efea}.personal-manager-quick-actions{border-bottom:1px solid #ebe8e2;gap:.5rem;padding:.75rem 1rem;display:flex;overflow-x:auto}.personal-manager-thread{min-width:0;padding:1rem;overflow-y:auto}.personal-message-answer{white-space:pre-wrap;color:#323944;line-height:1.7}.personal-message-pending{color:#64748b}.personal-message-activity{color:#646a74;border-top:1px solid #d6d3cc;margin-top:.625rem;padding-top:.5rem}.personal-message-activity summary{cursor:pointer;width:fit-content;font-size:.6875rem;font-weight:600}.personal-message-activity ol{gap:.25rem;margin:.5rem 0 0;padding-left:1.125rem;font-size:.6875rem;display:grid}.personal-message-reconnect{color:#1e40af;background:#fff;border:1px solid #cbd5e1;border-radius:.5rem;margin-top:.625rem;padding:.35rem .65rem;font-size:.6875rem;font-weight:700}.personal-message-reconnect:hover{background:#eff6ff;border-color:#93c5fd}.personal-manager-composer{border-top:1px solid var(--personal-border);padding:.875rem 1rem max(.875rem, env(safe-area-inset-bottom));background:#fcfbf8;align-items:center;gap:.5rem;display:flex}.personal-manager-composer input{color:#23272d;background:#fff;border:1px solid #d8d6d0;border-radius:.625rem;outline:none;width:100%;min-width:0;height:2.5rem;padding-inline:.75rem}.personal-manager-composer input:focus{border-color:#60a5fa;box-shadow:0 0 0 3px #3b82f61f}.personal-manager-composer button{color:#fff;background:var(--personal-accent)}.personal-manager-composer button:disabled{cursor:default;opacity:.42}@media (width<=760px){.personal-home{display:block}.personal-sidebar{border-right:0;border-bottom:1px solid var(--personal-border);grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:.75rem;height:auto;padding:.75rem 1rem;display:grid;position:static}.personal-nav{justify-content:flex-end;min-width:0;margin-top:0;display:flex}.personal-nav-item{width:auto;padding:.5rem}.personal-nav-item:not(.personal-nav-item-active){font-size:0}.personal-health{margin-top:0;padding:0;font-size:0}.personal-header{min-height:auto;padding:1.25rem 1rem}.personal-content{padding:1.5rem 1rem}.personal-list{box-shadow:none;background:0 0;border:0;overflow:visible}.personal-list-row{border:1px solid var(--personal-border);background:#ffffffe6;border-radius:.75rem;margin-bottom:.625rem}.personal-needs-row{grid-template-columns:auto minmax(0,1fr) auto}.personal-needs-row .personal-row-action{grid-column:2/-1;justify-self:start}.personal-manager-input{bottom:1rem;right:1rem}}@media (width<=640px){.personal-manager-backdrop{align-items:flex-end}.personal-manager-drawer{width:100%;max-width:none;height:100dvh}}@media (width<=420px){.personal-wordmark-mark{display:none}.personal-sidebar{grid-template-columns:auto minmax(0,1fr) auto;padding-inline:.75rem}.personal-nav{gap:0}.personal-nav-item{gap:.25rem;padding-inline:.375rem}.personal-header{align-items:flex-start}.personal-primary-link{padding-inline:.625rem}.personal-primary-link svg{display:none}.personal-needs-row,.personal-goal-row{grid-template-columns:minmax(0,1fr) auto}.personal-needs-row .personal-state-dot{display:none}.personal-manager-input{min-width:0;max-width:calc(100vw - 2rem)}.personal-goal-meta svg{display:none}.personal-manager-drawer-header{grid-template-columns:auto minmax(0,1fr) auto auto}}.personal-workspace{--workspace-accent:#2563eb;--workspace-border:#e5e2dc;--workspace-muted:#70747e;color:#1e2228;background:#faf9f6;grid-template-columns:4.5rem 20rem minmax(0,1fr);height:100vh;min-height:42rem;display:grid;overflow:hidden}.personal-global-rail{border-right:1px solid var(--workspace-border);background:#fcfbf8;flex-direction:column;align-items:center;min-height:0;padding:1.125rem .75rem;display:flex}.personal-rail-logo{color:#fff;background:#1e40af;border-radius:.75rem;place-items:center;width:2.5rem;height:2.5rem;display:grid;box-shadow:0 4px 12px #1e40af2e}.personal-global-rail nav{gap:.5rem;margin-top:2rem;display:grid}.personal-global-rail nav button,.personal-global-rail>button{color:#80848c;cursor:pointer;background:0 0;border:0;border-radius:.625rem;place-items:center;width:2.5rem;height:2.5rem;display:grid}.personal-global-rail nav button.is-active{color:#1e40af;background:#e8eefc}.personal-global-rail nav button:disabled{cursor:default;opacity:.42}.personal-global-rail .personal-health-dot{margin-top:auto}.personal-goal-sidebar{border-right:1px solid var(--workspace-border);background:#fcfbf8;grid-template-rows:auto auto minmax(0,1fr) auto;min-width:0;min-height:0;display:grid}.personal-goal-sidebar>header{justify-content:space-between;align-items:center;height:4.75rem;padding:0 1.25rem;display:flex}.personal-goal-sidebar>header h1{letter-spacing:-.02em;margin:0;font-size:1rem;font-weight:680}.personal-goal-sidebar>header button,.personal-goal-sidebar>footer button{color:#70747e;background:0 0;border:0;border-radius:.5rem;place-items:center;width:2rem;height:2rem;display:grid}.personal-goal-sidebar>header button:disabled{opacity:.4}.personal-manager-row,.personal-goal-list-row{width:calc(100% - 1.5rem);min-width:0;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:.75rem;align-items:center;gap:.75rem;margin:0 .75rem;padding:.75rem;display:grid}.personal-manager-row{grid-template-columns:auto minmax(0,1fr);margin-bottom:.5rem}.personal-manager-row.is-selected,.personal-goal-list-row.is-selected{background:#e9eefa}.personal-goal-icon{color:#2563eb;background:#ffffffe6;border-radius:.625rem;place-items:center;width:2.25rem;height:2.25rem;display:grid;box-shadow:0 1px 2px #0f172a0f}.personal-manager-row strong,.personal-manager-row small,.personal-goal-list-copy strong,.personal-goal-list-copy small{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.personal-manager-row strong,.personal-goal-list-copy strong{font-size:.8125rem;font-weight:620}.personal-manager-row small,.personal-goal-list-copy small{color:var(--workspace-muted);margin-top:.25rem;font-size:.6875rem}.personal-goal-scroll{min-height:0;padding-bottom:1rem;overflow-y:auto}.personal-goal-list-row{grid-template-columns:auto minmax(0,1fr) auto;margin-bottom:.25rem}.personal-goal-list-row:hover{background:#f5f3ef}.personal-goal-list-row.is-selected:hover{background:#e9eefa}.personal-goal-list-row .personal-state-dot{width:.4375rem;height:.4375rem}.personal-state-dot.is-progressing{background:#10b981}.personal-state-dot.is-repair{background:#f43f5e}.personal-goal-list-row .rounded-full{padding-inline:.45rem;font-size:.625rem}.personal-goal-sidebar>footer{border-top:1px solid var(--workspace-border);min-height:3.25rem;color:var(--workspace-muted);justify-content:space-between;align-items:center;padding:0 1.25rem;font-size:.6875rem;display:flex}.personal-chat-pane{background:#faf9f6;grid-template-rows:auto minmax(0,1fr) auto;min-width:0;min-height:0;display:grid}.personal-chat-header{z-index:20;border-bottom:1px solid var(--workspace-border);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);background:#fcfbf8f0;justify-content:space-between;align-items:center;gap:1rem;min-width:0;min-height:4.75rem;padding:.75rem clamp(1rem,2.5vw,2rem);display:flex;position:relative}.personal-chat-title,.personal-chat-actions{align-items:center;gap:.75rem;min-width:0;display:flex}.personal-chat-title{flex:auto;overflow:hidden}.personal-chat-title>div{min-width:0}.personal-chat-actions{flex:none}.personal-chat-title h2,.personal-chat-title p{margin:0}.personal-chat-title h2{color:#181d24;letter-spacing:-.02em;text-overflow:ellipsis;white-space:nowrap;font-size:1rem;font-weight:680;overflow:hidden}.personal-chat-title p{max-width:28rem;color:var(--workspace-muted);text-overflow:ellipsis;white-space:nowrap;margin-top:.15rem;font-size:.6875rem;overflow:hidden}.personal-chat-back,.personal-mobile-goals-button,.personal-chat-actions>button{color:#5b606a;cursor:pointer;background:0 0;border:1px solid #0000;border-radius:.625rem;flex:none;place-items:center;width:2.25rem;height:2.25rem;display:grid}.personal-mobile-goals-button,.personal-agent-menu-backdrop{display:none}.personal-chat-back:hover,.personal-chat-actions>button:hover{border-color:var(--workspace-border);background:#fff}.personal-chat-actions>button.personal-progress-trigger{border-color:var(--workspace-border);color:#3c434e;background:#fffc;gap:.4rem;width:auto;padding-inline:.75rem;font-size:.6875rem;font-weight:620;display:inline-flex}.personal-agent-picker{position:relative}.personal-agent-trigger{color:#292e36;cursor:pointer;background:#fff;border:1px solid #dadadc;border-radius:.625rem;align-items:center;gap:.45rem;min-height:2.25rem;padding:0 .75rem;font-size:.75rem;font-weight:600;display:inline-flex}.personal-agent-menu{z-index:40;border:1px solid var(--workspace-border);background:#fffffffa;border-radius:.875rem;width:min(21rem,100vw - 2rem);padding:.5rem;position:absolute;top:calc(100% + .5rem);right:0;box-shadow:0 18px 48px #0f172a29}.personal-agent-menu-title,.personal-agent-menu-footer{color:var(--workspace-muted);padding:.5rem .625rem;font-size:.6875rem}.personal-agent-menu-title{color:#23272d;font-weight:650}.personal-agent-menu-footer{border-top:1px solid var(--workspace-border);margin-top:.375rem}.personal-agent-menu>button{width:100%;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:.625rem;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:.625rem;padding:.625rem;display:grid}.personal-agent-menu>button:hover,.personal-agent-menu>button.is-selected{background:#eff3fc}.personal-agent-menu>button:disabled{cursor:not-allowed;opacity:.52}.personal-agent-menu strong,.personal-agent-menu small{display:block}.personal-agent-menu strong{font-size:.75rem}.personal-agent-menu small{color:var(--workspace-muted);margin-top:.125rem;font-size:.65rem}.personal-agent-avatar{color:#1e40af;background:#e2e9f9;border-radius:.625rem;flex:none;place-items:center;width:2rem;height:2rem;font-size:.75rem;font-weight:700;display:grid}.personal-agent-online{background:#10b981;border-radius:9999px;width:.4375rem;height:.4375rem}.personal-agent-online.is-offline{background:#94a3b8}.personal-live-badge{color:#33634e;background:#f5fcf8;border:1px solid #d1eddf;border-radius:9999px;align-items:center;gap:.375rem;padding:.35rem .625rem;font-size:.65rem;display:inline-flex}.personal-live-badge>span{background:#10b981;border-radius:9999px;width:.375rem;height:.375rem}.personal-chat-scroll{width:100%;min-height:0;padding:2rem clamp(1rem,5vw,5rem) 1.5rem;overflow-y:auto}.personal-chat-scroll>*{width:min(100%,56rem);margin-inline:auto}.personal-chat-welcome{background:#f1efea;border-radius:1rem;align-items:flex-start;gap:.875rem;margin-top:clamp(4rem,14vh,9rem);padding:1rem 1.125rem;display:flex}.personal-chat-welcome h3,.personal-chat-welcome p{margin:0}.personal-chat-welcome h3{font-size:.875rem;font-weight:650}.personal-chat-welcome p{color:#474f5b;margin-top:.25rem;font-size:.8125rem;line-height:1.55}.personal-manager-quick-actions{border:0;justify-content:center;gap:.625rem;padding:1rem 0;display:flex;overflow-x:auto}.personal-manager-quick-actions button{color:#3c434e;cursor:pointer;background:#ffffffc7;border:1px solid #d7dae1;border-radius:.625rem;flex:none;padding:.625rem .875rem;font-size:.75rem}.personal-manager-quick-actions button:hover{color:#1e40af;border-color:#a3b5dc}.personal-goal-summary{border:1px solid var(--workspace-border);background:#ffffffd1;border-radius:.875rem;overflow:hidden;box-shadow:0 2px 8px #0f172a08}.personal-goal-summary>div{border-bottom:1px solid #ebe8e2;grid-template-columns:7rem minmax(0,1fr);gap:1rem;padding:.8rem 1rem;font-size:.75rem;display:grid}.personal-goal-summary>div:last-child{border-bottom:0}.personal-goal-summary span{color:var(--workspace-muted)}.personal-goal-summary strong{min-width:0;font-weight:560}.personal-goal-summary .is-attention{background:#fffbeb}.personal-goal-summary .is-attention span,.personal-goal-summary .is-attention strong{color:#92400e}.personal-goal-projection{gap:.75rem;display:grid}.personal-projection-author{align-items:center;gap:.75rem;padding:0 .125rem .25rem;display:flex}.personal-projection-author strong,.personal-projection-author small{display:block}.personal-projection-author strong{color:#23272d;font-size:.8125rem;font-weight:660}.personal-projection-author small{color:var(--workspace-muted);margin-top:.15rem;font-size:.65rem}.personal-plan-card{border:1px solid var(--workspace-border);background:#ffffffdb;border-radius:.875rem;overflow:hidden;box-shadow:0 2px 8px #0f172a06}.personal-plan-card>header{border-bottom:1px solid #ebe8e2;justify-content:space-between;align-items:center;gap:1rem;min-height:3.25rem;padding:.75rem 1rem;display:flex}.personal-plan-card>header strong,.personal-plan-card>header small{display:block}.personal-plan-card>header strong{font-size:.75rem;font-weight:660}.personal-plan-card>header small{color:var(--workspace-muted);margin-top:.2rem;font-size:.625rem}.personal-plan-card>header>span{color:#5a5e65;background:#faf9f6;border:1px solid #e0ddd7;border-radius:.5rem;flex:none;padding:.25rem .45rem;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.65rem}.personal-plan-row{color:#343a43;border-bottom:1px solid #f0eee9;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:.75rem;min-height:2.625rem;padding:.625rem 1rem;font-size:.75rem;display:grid}.personal-plan-row svg{color:#2563eb}.personal-plan-row.is-done svg{color:#059669}.personal-plan-row.is-done>span{color:#5c626b}.personal-plan-row small{color:var(--workspace-muted);font-size:.625rem}.personal-plan-card>button{color:#545b66;cursor:pointer;background:0 0;border:0;justify-content:center;align-items:center;gap:.25rem;width:100%;min-height:2.625rem;font-size:.6875rem;display:flex}.personal-plan-card>button:hover{color:#1e40af;background:#f8f9fc}.personal-plan-card.is-empty>header{border-bottom:0}.personal-plan-card.is-empty>p{color:var(--workspace-muted);margin:-.25rem 0 0;padding:0 1rem 1rem;font-size:.75rem;line-height:1.55}.personal-run-evidence-card{border:1px solid var(--workspace-border);width:100%;min-height:3.75rem;color:inherit;text-align:left;cursor:pointer;background:#ffffffd1;border-radius:.875rem;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:.75rem;padding:.75rem 1rem;display:grid}.personal-run-evidence-card:hover{background:#fff;border-color:#c7ccd6}.personal-evidence-icon{color:#059669;background:#ecfdf5;border-radius:.625rem;place-items:center;width:2rem;height:2rem;display:grid}.personal-run-evidence-card strong,.personal-run-evidence-card small{display:block}.personal-run-evidence-card strong{font-size:.75rem;font-weight:650}.personal-run-evidence-card small{max-width:38rem;color:var(--workspace-muted);text-overflow:ellipsis;white-space:nowrap;margin-top:.2rem;font-size:.65rem;overflow:hidden}.personal-run-evidence-card em{color:var(--workspace-muted);white-space:nowrap;font-size:.625rem;font-style:normal}.personal-decision-card{background:#fffaee;border:1px solid #f5c068;border-radius:.875rem;justify-content:space-between;align-items:center;gap:1.5rem;margin-top:1rem;padding:1rem;display:flex}.personal-decision-card span{color:#b45309;text-transform:uppercase;font-size:.6875rem;font-weight:700}.personal-decision-card h3,.personal-decision-card p{margin:0}.personal-decision-card h3{margin-top:.25rem;font-size:.9375rem;font-weight:650}.personal-decision-card p{color:var(--workspace-muted);margin-top:.25rem;font-size:.75rem}.personal-decision-actions{flex:none;gap:.5rem;display:flex}.personal-decision-actions button,.personal-execution-card button,.personal-ops-link{color:#1e40af;cursor:pointer;background:#fff;border:1px solid #bbc9ea;border-radius:.625rem;justify-content:center;align-items:center;min-height:2.25rem;padding:0 .75rem;font-size:.75rem;font-weight:600;text-decoration:none;display:inline-flex}.personal-decision-actions button:last-child{border-color:var(--workspace-accent);color:#fff;background:var(--workspace-accent)}.personal-manager-thread{min-width:0;padding:1.25rem 0 0;overflow:visible}.personal-manager-message{color:#474f5b;background:#f1efea;border-radius:.875rem;width:fit-content;max-width:min(88%,43rem);margin-bottom:1rem;padding:.75rem .875rem;font-size:.8125rem;line-height:1.55}.personal-manager-message.is-user{color:#fff;background:#2563eb;margin-left:auto}.personal-message-author{color:#1e40af;margin-bottom:.25rem;font-size:.6875rem;font-weight:700;display:block}.personal-manager-message p,.personal-manager-message ul{margin:0}.personal-manager-message ul{gap:.375rem;margin-top:.5rem;padding-left:1rem;display:grid}.personal-manager-message small{color:#7d7d85;margin-top:.5rem;font-size:.625rem;display:block}.personal-manager-message.is-user small{color:#dbeafe}.personal-manager-message.is-pending{color:#64748b;background:#f8fafc}.personal-proposal-list{gap:.75rem;width:min(100%,43rem);margin:0 0 1.25rem;display:grid}.personal-proposal-card{background:#f9fbff;border:1px solid #d3dcee;border-radius:.875rem;gap:.625rem;padding:.875rem;display:grid}.personal-proposal-card>header{align-items:center;gap:.5rem;display:flex}.personal-proposal-card>header span{color:#1e40af;background:#dbeafe;border-radius:999px;padding:.125rem .5rem;font-size:.625rem;font-weight:700}.personal-proposal-card>header strong{font-size:.75rem}.personal-proposal-card>header small{color:var(--workspace-muted);margin-left:auto;font-size:.625rem}.personal-proposal-card>p,.personal-proposal-card>small{margin:0}.personal-proposal-card>p{color:#1e293b;font-size:.8125rem;font-weight:600;line-height:1.5}.personal-proposal-card>small,.personal-proposal-status{color:#64748b;font-size:.6875rem;line-height:1.5}.personal-proposal-card>code{color:#475569;background:#f1f5f9;border-radius:.375rem;width:fit-content;padding:.25rem .375rem;font-size:.625rem}.personal-proposal-card.is-approved{background:#f7fefa;border-color:#a7f3d0}.personal-proposal-card.is-stale,.personal-proposal-card.is-error{background:#fffbeb;border-color:#fdba74}.personal-proposal-actions{flex-wrap:wrap;gap:.5rem;display:flex}.personal-proposal-actions button{color:#475569;cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:.625rem;min-height:2.25rem;padding:0 .75rem;font-size:.6875rem;font-weight:650}.personal-proposal-actions button:first-child{border-color:var(--workspace-accent);color:#fff;background:var(--workspace-accent)}.personal-proposal-actions button:disabled{cursor:wait;opacity:.55}.personal-execution-card{border:1px solid var(--workspace-border);background:#fffc;border-radius:.875rem;grid-template-columns:auto minmax(0,1fr) auto auto;align-items:center;gap:.75rem;margin-top:1.25rem;padding:.875rem;display:grid}.personal-execution-card strong,.personal-execution-card p{margin:0}.personal-execution-card strong{font-size:.8125rem}.personal-execution-card p{color:var(--workspace-muted);text-overflow:ellipsis;white-space:nowrap;margin-top:.25rem;font-size:.6875rem;overflow:hidden}.personal-manager-composer{background:#fffffff5;border:1px solid #d5d5d6;border-radius:1rem;grid-template-rows:1fr;grid-template-columns:auto minmax(0,1fr) auto;gap:.5rem;width:min(100% - 2rem,58rem);min-height:4rem;margin:0 auto 1rem;padding:.5rem .625rem;display:grid;position:relative;box-shadow:0 10px 30px #0f172a14}.personal-manager-composer input{color:#23272d;background:0 0;border:0;outline:none;grid-area:1/2;height:2.75rem;padding:0 .25rem}.personal-manager-composer input:focus{box-shadow:none;border:0}.personal-composer-tools{grid-area:1/1;align-self:center;align-items:center;min-width:0;display:flex}.personal-composer-tools button{color:#334155;cursor:pointer;background:#f5f3ef;border:0;border-radius:.75rem;align-items:center;gap:.35rem;width:auto;min-width:0;height:2.5rem;min-height:2.5rem;padding:0 .625rem;font-size:.6875rem;font-weight:620;display:inline-flex}.personal-composer-tools button span{text-overflow:ellipsis;white-space:nowrap;max-width:8rem;display:block;overflow:hidden}.personal-manager-composer .personal-send-button{color:#fff;background:var(--workspace-accent);cursor:pointer;border:0;border-radius:.75rem;grid-area:1/3;align-self:center;place-items:center;width:2.5rem;height:2.5rem;display:grid}.personal-manager-composer .personal-send-button:disabled{cursor:default;opacity:.34}.personal-details-backdrop{z-index:70;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);background:#0f172a2e;justify-content:flex-end;display:flex;position:fixed;inset:0}.personal-running-details{background:#fcfbf8;width:min(28rem,100vw);height:100%;padding:1rem;overflow-y:auto;box-shadow:-12px 0 36px #0f172a29}.personal-running-details>header{justify-content:space-between;align-items:center;gap:1rem;padding-bottom:1rem;display:flex}.personal-running-details h2,.personal-running-details header p{margin:0}.personal-running-details h2{font-size:1rem;font-weight:680}.personal-running-details header p{color:var(--workspace-muted);margin-top:.25rem;font-size:.6875rem}.personal-running-details header button{cursor:pointer;background:#f1efea;border:0;border-radius:.625rem;place-items:center;width:2.25rem;height:2.25rem;display:grid}.personal-diagnosis-card{border:1px solid var(--workspace-border);background:#fff;border-radius:.875rem;padding:1rem}.personal-diagnosis-card>span{color:#059669;font-size:.6875rem;font-weight:700}.personal-diagnosis-card h3{margin:.375rem 0 1rem;font-size:.875rem;line-height:1.5}.personal-diagnosis-card dl,.personal-diagnosis-card dd{margin:0}.personal-diagnosis-card dl{gap:.625rem;display:grid}.personal-diagnosis-card dl>div{grid-template-columns:3.5rem minmax(0,1fr);gap:.75rem;font-size:.75rem;display:grid}.personal-diagnosis-card dt{color:var(--workspace-muted)}.personal-running-details details{border-bottom:1px solid var(--workspace-border);padding:1rem .25rem}.personal-running-details summary{cursor:pointer;font-size:.8125rem;font-weight:620}.personal-running-details details p{color:var(--workspace-muted);margin:.75rem 0 0;font-size:.75rem;line-height:1.55}.personal-details-todo-list{gap:.375rem;margin:.75rem 0 0;padding:0;list-style:none;display:grid}.personal-details-todo-list li{color:#484f59;padding-left:1rem;font-size:.71875rem;line-height:1.45;position:relative}.personal-details-todo-list li:before{content:"";background:#2563eb;border-radius:9999px;width:.375rem;height:.375rem;position:absolute;top:.45em;left:0}.personal-details-todo-list li.is-done{color:#7e838b}.personal-details-todo-list li.is-done:before{background:#059669}.personal-ops-link{gap:.375rem;width:100%;margin-top:1rem}.dark .personal-workspace,.dark .personal-chat-pane{color:#f4f4f5;background:#131417}.dark .personal-global-rail,.dark .personal-goal-sidebar,.dark .personal-chat-header,.dark .personal-running-details{color:#f4f4f5;background:#191a1e}.dark .personal-plan-card,.dark .personal-run-evidence-card,.dark .personal-projection-author strong{color:#f4f4f5;background:#1e1f23}.dark .personal-plan-card>header,.dark .personal-plan-row{border-color:#3f3f46}.dark .personal-plan-row,.dark .personal-plan-row.is-done>span{color:#d4d4d8}.dark .personal-decision-card{background:#45290d;border-color:#92400e}@media (width<=1000px){.personal-workspace{grid-template-columns:3.75rem 16.5rem minmax(0,1fr)}.personal-live-badge{display:none}.personal-chat-scroll{padding-inline:1.25rem}}@media (width<=720px){.personal-workspace{grid-template-rows:minmax(0,1fr);grid-template-columns:1fr;height:100dvh;min-height:100dvh;overflow:hidden}.personal-global-rail{display:none}.personal-goal-sidebar{border-right:0;height:100dvh;display:none}.personal-workspace.mobile-goals-visible .personal-goal-sidebar{display:grid}.personal-workspace.mobile-goals-visible .personal-chat-pane{display:none}.personal-chat-pane{height:100dvh;min-height:0}.personal-chat-header{-webkit-backdrop-filter:none;backdrop-filter:none;gap:.5rem;min-height:4.25rem;padding-inline:.75rem}.personal-mobile-goals-button{display:grid}.personal-goal-sidebar>header button,.personal-goal-sidebar>footer button{width:2.75rem;height:2.75rem}.personal-chat-title p,.personal-chat-title>span,.personal-chat-actions>button:first-of-type,.personal-chat-actions>button.personal-progress-trigger span{display:none}.personal-chat-actions>button.personal-progress-trigger{width:2.75rem;padding:0}.personal-chat-back,.personal-mobile-goals-button,.personal-chat-actions>button{width:2.75rem;height:2.75rem}.personal-agent-trigger{min-height:2.75rem;padding-inline:.5rem}.personal-agent-menu-backdrop{z-index:35;-webkit-backdrop-filter:blur(1px);backdrop-filter:blur(1px);background:#0f172a33;border:0;display:block;position:fixed;inset:0}.personal-agent-menu{z-index:40;border-radius:1rem;width:auto;max-height:calc(100dvh - 1.5rem);position:fixed;inset:auto .75rem .75rem;overflow-y:auto}.personal-agent-menu>button{min-height:3.5rem}.personal-chat-scroll{padding:1rem .75rem}.personal-chat-welcome{margin-top:1rem}.personal-manager-quick-actions{grid-template-columns:repeat(2,minmax(0,1fr));display:grid;overflow:visible}.personal-manager-quick-actions button{white-space:normal;width:100%}.personal-manager-quick-actions button:last-child{grid-column:1/-1}.personal-goal-summary>div{grid-template-columns:5.5rem minmax(0,1fr)}.personal-decision-card{flex-direction:column;align-items:stretch}.personal-run-evidence-card{grid-template-columns:auto minmax(0,1fr) auto}.personal-run-evidence-card em,.personal-plan-row small{display:none}.personal-decision-actions{grid-template-columns:1fr 1fr;display:grid}.personal-decision-actions button,.personal-manager-quick-actions button,.personal-execution-card button,.personal-ops-link,.personal-running-details header button{min-height:2.75rem}.personal-running-details header button{width:2.75rem;height:2.75rem}.personal-execution-card{grid-template-columns:auto minmax(0,1fr) auto}.personal-execution-card .rounded-full{display:none}.personal-execution-card button{grid-column:2/-1;justify-self:start}.personal-manager-composer{margin-bottom:.5rem;position:sticky;bottom:.5rem}.personal-composer-tools button,.personal-send-button{min-width:2.75rem;min-height:2.75rem}}.chat-shell{background:radial-gradient(circle at 48% 0,#ffffffeb,#0000 30rem),#f7f8f6}.chat-goal-map{isolation:isolate;position:relative;overflow:hidden}.chat-goal-map:before{z-index:0;content:"";opacity:.44;background-image:radial-gradient(#94a3b83b .7px,#0000 .7px);background-size:18px 18px;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#0000,#000 18% 84%,#0000);mask-image:linear-gradient(#0000,#000 18% 84%,#0000)}.chat-map-goal:after{content:"";background:#cbd5e1;width:1px;height:3rem;position:absolute;top:100%;left:50%}.chat-map-branches:before{content:"";background:#cbd5e1;height:1px;position:absolute;top:-1.5rem;left:16.666%;right:16.666%}.chat-map-branches>div{position:relative}.chat-map-branches>div:before{content:"";background:#cbd5e1;width:1px;height:1.5rem;position:absolute;bottom:100%;left:50%}.chat-map-branches:after{content:"";background:#cbd5e1;width:1px;height:2.5rem;position:absolute;top:100%;left:50%}@media (width<=767px){.chat-map-goal:after,.chat-map-branches:before,.chat-map-branches:after,.chat-map-branches>div:before{display:none}}@property --tw-border-spacing-x{syntax:"";inherits:false;initial-value:0}@property --tw-border-spacing-y{syntax:"";inherits:false;initial-value:0}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-divide-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@keyframes spin{to{transform:rotate(360deg)}} diff --git a/loopx/web/chat/assets/index-BzrSewxR.js b/loopx/web/chat/assets/index-BzrSewxR.js new file mode 100644 index 0000000000..9452f84bdb --- /dev/null +++ b/loopx/web/chat/assets/index-BzrSewxR.js @@ -0,0 +1,129 @@ +var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,o)=>(o=n==null?{}:e(i(n)),s(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var l=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m){if(n(c)!==null)m=!0,S||(S=!0,O());else{var t=n(l);t!==null&&A(x,t.startTime-e)}}}var S=!1,C=-1,w=5,T=-1;function E(){return g?!0:!(e.unstable_now()-Tt&&E());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&A(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}}}finally{i?O():S=!1}}}var O;if(typeof y==`function`)O=function(){y(D)};else if(typeof MessageChannel<`u`){var k=new MessageChannel,ee=k.port2;k.port1.onmessage=D,O=function(){ee.postMessage(null)}}else O=function(){_(D,0)};function A(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,A(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,O()))),r},e.unstable_shouldYield=E,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),u=o(((e,t)=>{t.exports=l()})),d=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function D(e,t){return E(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var ee=/\/+/g;function A(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function j(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function te(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,te(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+A(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(ee,`$&/`)+`/`),te(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=D(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(ee,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u{t.exports=d()})),p=o((e=>{var t=f();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=p()})),h=o((e=>{var t=u(),n=f(),r=m();function i(e){var t=`https://react.dev/errors/`+e;if(1oe||(e.current=ae[oe],ae[oe]=null,oe--)}function I(e,t){oe++,ae[oe]=e.current,e.current=t}var se=P(null),ce=P(null),le=P(null),ue=P(null);function de(e,t){switch(I(le,t),I(ce,e),I(se,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Wd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Wd(t),e=Gd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}F(se),I(se,e)}function fe(){F(se),F(ce),F(le)}function pe(e){e.memoizedState!==null&&I(ue,e);var t=se.current,n=Gd(t,e.type);t!==n&&(I(ce,e),I(se,n))}function me(e){ce.current===e&&(F(se),F(ce)),ue.current===e&&(F(ue),tp._currentValue=ie)}var he,ge;function _e(e){if(he===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);he=t&&t[1]||``,ge=-1)`:-1i||c[r]!==l[i]){var u=` +`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{ve=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?_e(n):``}function be(e,t){switch(e.tag){case 26:case 27:case 5:return _e(e.type);case 16:return _e(`Lazy`);case 13:return e.child!==t&&t!==null?_e(`Suspense Fallback`):_e(`Suspense`);case 19:return _e(`SuspenseList`);case 0:case 15:return ye(e.type,!1);case 11:return ye(e.type.render,!1);case 1:return ye(e.type,!0);case 31:return _e(`Activity`);default:return``}}function xe(e){try{var t=``,n=null;do t+=be(e,n),n=e,e=e.return;while(e);return t}catch(e){return` +Error generating stack: `+e.message+` +`+e.stack}}var Se=Object.prototype.hasOwnProperty,Ce=t.unstable_scheduleCallback,we=t.unstable_cancelCallback,Te=t.unstable_shouldYield,Ee=t.unstable_requestPaint,De=t.unstable_now,L=t.unstable_getCurrentPriorityLevel,Oe=t.unstable_ImmediatePriority,ke=t.unstable_UserBlockingPriority,Ae=t.unstable_NormalPriority,je=t.unstable_LowPriority,Me=t.unstable_IdlePriority,Ne=t.log,R=t.unstable_setDisableYieldValue,z=null,Pe=null;function Fe(e){if(typeof Ne==`function`&&R(e),Pe&&typeof Pe.setStrictMode==`function`)try{Pe.setStrictMode(z,e)}catch{}}var Ie=Math.clz32?Math.clz32:Re,B=Math.log,Le=Math.LN2;function Re(e){return e>>>=0,e===0?32:31-(B(e)/Le|0)|0}var V=256,ze=262144,Be=4194304;function Ve(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function He(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=Ve(n))):i=Ve(o):i=Ve(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=Ve(n))):i=Ve(o)):i=Ve(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function Ue(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function We(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ge(){var e=Be;return Be<<=1,!(Be&62914560)&&(Be=4194304),e}function Ke(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function qe(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Je(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),sn=!1;if(on)try{var cn={};Object.defineProperty(cn,"passive",{get:function(){sn=!0}}),window.addEventListener(`test`,cn,cn),window.removeEventListener(`test`,cn,cn)}catch{sn=!1}var ln=null,un=null,dn=null;function fn(){if(dn)return dn;var e,t=un,n=t.length,r,i=`value`in ln?ln.value:ln.textContent,a=i.length;for(e=0;e=Wn),qn=` `,Jn=!1;function Yn(e,t){switch(e){case`keyup`:return Hn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function Xn(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var Zn=!1;function Qn(e,t){switch(e){case`compositionend`:return Xn(t);case`keypress`:return t.which===32?(Jn=!0,qn):null;case`textInput`:return e=t.data,e===qn&&Jn?null:e;default:return null}}function $n(e,t){if(Zn)return e===`compositionend`||!Un&&Yn(e,t)?(e=fn(),dn=un=ln=null,Zn=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=xr(n)}}function Cr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Cr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function wr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Nt(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Nt(e.document)}return t}function Tr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Er=on&&`documentMode`in document&&11>=document.documentMode,Dr=null,Or=null,kr=null,Ar=!1;function jr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ar||Dr==null||Dr!==Nt(r)||(r=Dr,`selectionStart`in r&&Tr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),kr&&br(kr,r)||(kr=r,r=Od(Or,`onSelect`),0>=o,i-=o,Ci=1<<32-Ie(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),Mi&&Ti(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),Mi&&Ti(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return Mi&&Ti(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),Mi&&Ti(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===y&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case _:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===y){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===O&&wa(l)===r.type){n(e,r.sibling),c=a(r,o.props),ja(c,o),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}o.type===y?(c=ui(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=li(o.type,o.key,o.props,null,e.mode,c),ja(c,o),c.return=e,e=c)}return s(e);case v:a:{for(l=o.key;r!==null;){if(r.key===l){if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}c=pi(o,e.mode,c),c.return=e,e=c}return s(e);case O:return o=wa(o),b(e,r,o,c)}if(re(o))return h(e,r,o,c);if(j(o)){if(l=j(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,Aa(o),c);if(o.$$typeof===C)return b(e,r,$i(e,o),c);Ma(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=di(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{ka=0;var i=b(e,t,n,r);return Oa=null,i}catch(t){if(t===ya||t===xa)throw t;var a=ai(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var Pa=Na(!0),Fa=Na(!1),Ia=!1;function La(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ra(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function za(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Ba(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,Vl&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=ni(e),ti(e,null,n),t}return Qr(e,r,t,n),ni(e)}function Va(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Xe(e,n)}}function Ha(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var Ua=!1;function Wa(){if(Ua){var e=ua;if(e!==null)throw e}}function Ga(e,t,n,r){Ua=!1;var i=e.updateQueue;Ia=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(Wl&f)===f:(r&f)===f){f!==0&&f===la&&(Ua=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(m=g.payload,typeof m==`function`){d=m.call(_,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=g.payload,f=typeof m==`function`?m.call(_,d,f):m,f==null)break a;d=h({},d,f);break a;case 2:Ia=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),Ql|=o,e.lanes=o,e.memoizedState=d}}function Ka(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function qa(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=M.T,s={};M.T=s,Ps(e,!1,t,n);try{var c=i(),l=M.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Ns(e,t,pa(c,r),bu(e)):Ns(e,t,r,bu(e))}catch(n){Ns(e,t,{then:function(){},status:`rejected`,reason:n},bu())}finally{N.p=a,o!==null&&s.types!==null&&(o.types=s.types),M.T=o}}function Cs(){}function ws(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=Ts(e).queue;Ss(e,a,t,ie,n===null?Cs:function(){return Es(e),n(r)})}function Ts(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ie,baseState:ie,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Fo,lastRenderedState:ie},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Fo,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Es(e){var t=Ts(e);t.next===null&&(t=e.alternate.memoizedState),Ns(e,t.next.queue,{},bu())}function Ds(){return H(tp)}function Os(){return Ao().memoizedState}function ks(){return Ao().memoizedState}function As(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=bu();e=za(n);var r=Ba(t,e,n);r!==null&&(Su(r,t,n),Va(r,t,n)),t={cache:aa()},e.payload=t;return}t=t.return}}function js(e,t,n){var r=bu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Fs(e)?Is(t,n):(n=$r(e,t,n,r),n!==null&&(Su(n,e,r),Ls(n,t,r)))}function Ms(e,t,n){Ns(e,t,n,bu())}function Ns(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Fs(e))Is(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,yr(s,o))return Qr(e,t,i,0),Hl===null&&Zr(),!1}catch{}if(n=$r(e,t,i,r),n!==null)return Su(n,e,r),Ls(n,t,r),!0}return!1}function Ps(e,t,n,r){if(r={lane:2,revertLane:md(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Fs(e)){if(t)throw Error(i(479))}else t=$r(e,n,r,2),t!==null&&Su(t,e,2)}function Fs(e){var t=e.alternate;return e===lo||t!==null&&t===lo}function Is(e,t){mo=po=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Ls(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Xe(e,n)}}var Rs={readContext:H,use:No,useCallback:bo,useContext:bo,useEffect:bo,useImperativeHandle:bo,useLayoutEffect:bo,useInsertionEffect:bo,useMemo:bo,useReducer:bo,useRef:bo,useState:bo,useDebugValue:bo,useDeferredValue:bo,useTransition:bo,useSyncExternalStore:bo,useId:bo,useHostTransitionStatus:bo,useFormState:bo,useActionState:bo,useOptimistic:bo,useMemoCache:bo,useCacheRefresh:bo};Rs.useEffectEvent=bo;var zs={readContext:H,use:No,useCallback:function(e,t){return ko().memoizedState=[e,t===void 0?null:t],e},useContext:H,useEffect:ls,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),ss(4194308,4,hs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ss(4194308,4,e,t)},useInsertionEffect:function(e,t){ss(4,2,e,t)},useMemo:function(e,t){var n=ko();t=t===void 0?null:t;var r=e();if(ho){Fe(!0);try{e()}finally{Fe(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=ko();if(n!==void 0){var i=n(t);if(ho){Fe(!0);try{n(t)}finally{Fe(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=js.bind(null,lo,e),[r.memoizedState,e]},useRef:function(e){var t=ko();return e={current:e},t.memoizedState=e},useState:function(e){e=Go(e);var t=e.queue,n=Ms.bind(null,lo,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:_s,useDeferredValue:function(e,t){return bs(ko(),e,t)},useTransition:function(){var e=Go(!1);return e=Ss.bind(null,lo,e.queue,!0,!1),ko().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=lo,a=ko();if(Mi){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),Hl===null)throw Error(i(349));Wl&127||Bo(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,ls(Ho.bind(null,r,o,e),[e]),r.flags|=2048,as(9,{destroy:void 0},Vo.bind(null,r,o,n,t),null),n},useId:function(){var e=ko(),t=Hl.identifierPrefix;if(Mi){var n=wi,r=Ci;n=(r&~(1<<32-Ie(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=go++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[rt]=t,o[it]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Ld(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Nc(t)}}return Rc(t),Pc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Nc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=le.current,zi(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Ai,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[rt]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Pd(e.nodeValue,n)),e||Ii(t,!0)}else e=Ud(e).createTextNode(r),e[rt]=t,t.stateNode=e}return Rc(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=zi(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[rt]=t}else Bi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Rc(t),e=!1}else n=Vi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(ao(t),t):(ao(t),null);if(t.flags&128)throw Error(i(558))}return Rc(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=zi(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[rt]=t}else Bi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Rc(t),a=!1}else a=Vi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(ao(t),t):(ao(t),null)}return ao(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Ic(t,t.updateQueue),Rc(t),null);case 4:return fe(),e===null&&wd(t.stateNode.containerInfo),Rc(t),null;case 10:return qi(t.type),Rc(t),null;case 19:if(F(oo),r=t.memoizedState,r===null)return Rc(t),null;if(a=!!(t.flags&128),o=r.rendering,o===null){if(a)Lc(r,!1);else{if(Zl!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=so(e),o!==null){for(t.flags|=128,Lc(r,!1),e=o.updateQueue,t.updateQueue=e,Ic(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)ci(n,e),n=n.sibling;return I(oo,oo.current&1|2),Mi&&Ti(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&De()>cu&&(t.flags|=128,a=!0,Lc(r,!1),t.lanes=4194304)}}else{if(!a){if(e=so(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Ic(t,e),Lc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!Mi)return Rc(t),null}else 2*De()-r.renderingStartTime>cu&&n!==536870912&&(t.flags|=128,a=!0,Lc(r,!1),t.lanes=4194304)}r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(Rc(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=De(),e.sibling=null,n=oo.current,I(oo,a?n&1|2:n&1),Mi&&Ti(t,r.treeForkCount),e);case 22:case 23:return ao(t),Qa(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(Rc(t),t.subtreeFlags&6&&(t.flags|=8192)):Rc(t),n=t.updateQueue,n!==null&&Ic(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&F(ha),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),qi(ia),Rc(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Bc(e,t){switch(Oi(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return qi(ia),fe(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return me(t),null;case 31:if(t.memoizedState!==null){if(ao(t),t.alternate===null)throw Error(i(340));Bi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(ao(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Bi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return F(oo),null;case 4:return fe(),null;case 10:return qi(t.type),null;case 22:case 23:return ao(t),Qa(),e!==null&&F(ha),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return qi(ia),null;case 25:return null;default:return null}}function Vc(e,t){switch(Oi(t),t.tag){case 3:qi(ia),fe();break;case 26:case 27:case 5:me(t);break;case 4:fe();break;case 31:t.memoizedState!==null&&ao(t);break;case 13:ao(t);break;case 19:F(oo);break;case 10:qi(t.type);break;case 22:case 23:ao(t),Qa(),e!==null&&F(ha);break;case 24:qi(ia)}}function Hc(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Zu(t,t.return,e)}}function Uc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Zu(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Zu(t,t.return,e)}}function Wc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{qa(t,n)}catch(t){Zu(e,e.return,t)}}}function Gc(e,t,n){n.props=Ks(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Zu(e,t,n)}}function Kc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Zu(e,t,n)}}function qc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null){if(typeof r==`function`)try{r()}catch(n){Zu(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Zu(e,t,n)}else n.current=null}}function Jc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){Zu(e,e.return,t)}}function Yc(e,t,n){try{var r=e.stateNode;Rd(r,e.type,n,t),r[it]=t}catch(t){Zu(e,e.return,t)}}function Xc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&ef(e.type)||e.tag===4}function Zc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Xc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&ef(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Qc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Xt));else if(r!==4&&(r===27&&ef(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Qc(e,t,n),e=e.sibling;e!==null;)Qc(e,t,n),e=e.sibling}function $c(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&ef(e.type)&&(n=e.stateNode),e=e.child,e!==null))for($c(e,t,n),e=e.sibling;e!==null;)$c(e,t,n),e=e.sibling}function el(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Ld(t,r,n),t[rt]=e,t[it]=n}catch(t){Zu(e,e.return,t)}}var tl=!1,nl=!1,rl=!1,il=typeof WeakSet==`function`?WeakSet:Set,al=null;function ol(e,t){if(e=e.containerInfo,Vd=up,e=wr(e),Tr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(Hd={focusedElem:e,selectionRange:n},up=!1,al=t;al!==null;)if(t=al,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,al=e;else for(;al!==null;){switch(t=al,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Ld(o,r,n),o[rt]=e,gt(o),r=o;break a;case`link`:var s=Wf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=Sr(s,h),v=Sr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,M.T=null,n=gu,gu=null;var o=fu,s=mu;if(du=0,pu=fu=null,mu=0,Vl&6)throw Error(i(331));var c=Vl;if(Vl|=4,Il(o.current),Ol(o,o.current,s,n),Vl=c,cd(0,!1),Pe&&typeof Pe.onPostCommitFiberRoot==`function`)try{Pe.onPostCommitFiberRoot(z,o)}catch{}return!0}finally{N.p=a,M.T=r,qu(e,t)}}function Xu(e,t,n){t=hi(n,t),t=Qs(e.stateNode,t,2),e=Ba(e,t,2),e!==null&&(qe(e,2),q(e))}function Zu(e,t,n){if(e.tag===3)Xu(e,e,n);else for(;t!==null;){if(t.tag===3){Xu(t,e,n);break}if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(uu===null||!uu.has(r))){e=hi(n,e),n=$s(2),r=Ba(t,n,2),r!==null&&(ec(n,r,t,e),qe(r,2),q(r));break}}t=t.return}}function G(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Bl;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Yl=!0,i.add(n),e=Qu.bind(null,e,t,n),t.then(e,e))}function Qu(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Hl===e&&(Wl&n)===n&&(Zl===4||Zl===3&&(Wl&62914560)===Wl&&300>De()-ou?!(Vl&2)&&ku(e,0):eu|=n,nu===Wl&&(nu=0)),q(e)}function $u(e,t){t===0&&(t=Ge()),e=ei(e,t),e!==null&&(qe(e,t),q(e))}function ed(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),$u(e,n)}function K(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),$u(e,n)}function td(e,t){return Ce(e,t)}var nd=null,rd=null,id=!1,ad=!1,od=!1,sd=0;function q(e){e!==rd&&e.next===null&&(rd===null?nd=rd=e:rd=rd.next=e),ad=!0,id||(id=!0,pd())}function cd(e,t){if(!od&&ad){od=!0;do for(var n=!1,r=nd;r!==null;){if(!t){if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-Ie(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,fd(r,a))}else a=Wl,a=He(r,r===Hl?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||Ue(r,a)||(n=!0,fd(r,a))}r=r.next}while(n);od=!1}}function J(){ld()}function ld(){ad=id=!1;var e=0;sd!==0&&Jd()&&(e=sd);for(var t=De(),n=null,r=nd;r!==null;){var i=r.next,a=ud(r,t);a===0?(r.next=null,n===null?nd=i:n.next=i,i===null&&(rd=n)):(n=r,(e!==0||a&3)&&(ad=!0)),r=i}du!==0&&du!==5||cd(e,!1),sd!==0&&(sd=0)}function ud(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&zd(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function wf(e,t,n){var r=Cf;if(r&&typeof t==`string`&&t){var i=Ft(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),vf.has(i)||(vf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Ld(t,`link`,e),gt(t),r.head.appendChild(t)))}}function Tf(e){bf.D(e),wf(`dns-prefetch`,e,null)}function Ef(e,t){bf.C(e,t),wf(`preconnect`,e,t)}function Df(e,t,n){bf.L(e,t,n);var r=Cf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Ft(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Ft(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Ft(n.imageSizes)+`"]`)):i+=`[href="`+Ft(e)+`"]`;var a=i;switch(t){case`style`:a=Nf(e);break;case`script`:a=Lf(e)}_f.has(a)||(e=h({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),_f.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Pf(a))||t===`script`&&r.querySelector(Rf(a))||(t=r.createElement(`link`),Ld(t,`link`,e),gt(t),r.head.appendChild(t)))}}function Of(e,t){bf.m(e,t);var n=Cf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Ft(r)+`"][href="`+Ft(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Lf(e)}if(!_f.has(a)&&(e=h({rel:`modulepreload`,href:e},t),_f.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Rf(a)))return}r=n.createElement(`link`),Ld(r,`link`,e),gt(r),n.head.appendChild(r)}}}function kf(e,t,n){bf.S(e,t,n);var r=Cf;if(r&&e){var i=ht(r).hoistableStyles,a=Nf(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Pf(a)))s.loading=5;else{e=h({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=_f.get(a))&&Vf(e,n);var c=o=r.createElement(`link`);gt(c),Ld(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Bf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Af(e,t){bf.X(e,t);var n=Cf;if(n&&e){var r=ht(n).hoistableScripts,i=Lf(e),a=r.get(i);a||(a=n.querySelector(Rf(i)),a||(e=h({src:e,async:!0},t),(t=_f.get(i))&&Hf(e,t),a=n.createElement(`script`),gt(a),Ld(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function jf(e,t){bf.M(e,t);var n=Cf;if(n&&e){var r=ht(n).hoistableScripts,i=Lf(e),a=r.get(i);a||(a=n.querySelector(Rf(i)),a||(e=h({src:e,async:!0,type:`module`},t),(t=_f.get(i))&&Hf(e,t),a=n.createElement(`script`),gt(a),Ld(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Mf(e,t,n,r){var a=(a=le.current)?yf(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Nf(n.href),n=ht(a).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Nf(n.href);var o=ht(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(Pf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),_f.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},_f.set(e,n),o||If(a,e,n,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Lf(n),n=ht(a).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Nf(e){return`href="`+Ft(e)+`"`}function Pf(e){return`link[rel="stylesheet"][`+e+`]`}function Ff(e){return h({},e,{"data-precedence":e.precedence,precedence:null})}function If(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Ld(t,`link`,n),gt(t),e.head.appendChild(t))}function Lf(e){return`[src="`+Ft(e)+`"]`}function Rf(e){return`script[async]`+e}function zf(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Ft(n.href)+`"]`);if(r)return t.instance=r,gt(r),r;var a=h({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),gt(r),Ld(r,`style`,a),Bf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Nf(n.href);var o=e.querySelector(Pf(a));if(o)return t.state.loading|=4,t.instance=o,gt(o),o;r=Ff(n),(a=_f.get(a))&&Vf(r,a),o=(e.ownerDocument||e).createElement(`link`),gt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Ld(o,`link`,r),t.state.loading|=4,Bf(o,n.precedence,e),t.instance=o;case`script`:return o=Lf(n.src),(a=e.querySelector(Rf(o)))?(t.instance=a,gt(a),a):(r=n,(a=_f.get(o))&&(r=h({},n),Hf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),gt(a),Ld(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Bf(r,n.precedence,e));return t.instance}function Bf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function Kf(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function qf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Jf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Nf(r.href),a=t.querySelector(Pf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Zf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,gt(a);return}a=t.ownerDocument||t,r=Ff(r),(i=_f.get(i))&&Vf(r,i),a=a.createElement(`link`),gt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Ld(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=Zf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Yf=0;function Xf(e,t){return e.stylesheets&&e.count===0&&$f(e,e.stylesheets),0Yf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Zf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)$f(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Qf=null;function $f(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Qf=new Map,t.forEach(ep,e),Qf=null,Zf.call(e))}function ep(e,t){if(!(t.state.loading&4)){var n=Qf.get(e);if(n)var r=n.get(null);else{n=new Map,Qf.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=h()})),_=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},v=new class extends _{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},y={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},b=new class{#e=y;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function x(e){setTimeout(e,0)}var S=typeof window>`u`||`Deno`in globalThis;function C(){}function w(e,t){return typeof e==`function`?e(t):e}function T(e){return typeof e==`number`&&e>=0&&e!==1/0}function E(e,t){return Math.max(e+(t||0)-Date.now(),0)}function D(e,t){return typeof e==`function`?e(t):e}function O(e,t){return typeof e==`function`?e(t):e}function k(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==A(o,t.options))return!1}else if(!te(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function ee(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(j(t.options.mutationKey)!==j(a))return!1}else if(!te(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function A(e,t){return(t?.queryKeyHashFn||j)(e)}function j(e){return JSON.stringify(e,(e,t)=>N(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function te(e,t){return e===t?!0:typeof e==typeof t&&e&&t&&typeof e==`object`&&typeof t==`object`?Object.keys(t).every(n=>te(e[n],t[n])):!1}var ne=Object.prototype.hasOwnProperty;function re(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=M(e)&&M(t);if(!r&&!(N(e)&&N(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l{b.setTimeout(t,e)})}function oe(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:re(e,t)}function P(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function F(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var I=Symbol();function se(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===I?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function ce(e,t,n){let r=!1,i;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var le=(()=>{let e=()=>S;return{isServer(){return e()},setIsServer(t){e=t}}})();function ue(){let e,t,n=new Promise((n,r)=>{e=n,t=r});n.status=`pending`,n.catch(()=>{});function r(e){Object.assign(n,e),delete n.resolve,delete n.reject}return n.resolve=t=>{r({status:`fulfilled`,value:t}),e(t)},n.reject=e=>{r({status:`rejected`,reason:e}),t(e)},n}var de=x;function fe(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=de,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var pe=fe(),me=new class extends _{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function he(e){return Math.min(1e3*2**e,3e4)}function ge(e){return(e??`online`)!==`online`||me.isOnline()}var _e=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function ve(e){let t=!1,n=0,r,i=ue(),a=()=>i.status!==`pending`,o=t=>{if(!a()){let n=new _e(t);f(n),e.onCancel?.(n)}},s=()=>{t=!0},c=()=>{t=!1},l=()=>v.isFocused()&&(e.networkMode===`always`||me.isOnline())&&e.canRun(),u=()=>ge(e.networkMode)&&e.canRun(),d=e=>{a()||(r?.(),i.resolve(e))},f=e=>{a()||(r?.(),i.reject(e))},p=()=>new Promise(t=>{r=e=>{(a()||l())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,a()||e.onContinue?.()}),m=()=>{if(a())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(d).catch(r=>{if(a())return;let i=e.retry??(le.isServer()?0:3),o=e.retryDelay??he,s=typeof o==`function`?o(n,r):o,c=i===!0||typeof i==`number`&&nl()?void 0:p()).then(()=>{t?f(r):m()})})};return{promise:i,status:()=>i.status,cancel:o,continue:()=>(r?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?m():p().then(m),i)}}var ye=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),T(this.gcTime)&&(this.#e=b.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(le.isServer()?1/0:3e5))}clearGcTimeout(){this.#e!==void 0&&(b.clearTimeout(this.#e),this.#e=void 0)}};function be(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{ce(e,()=>t.signal,()=>n=!0)},u=se(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject(t.signal.reason);if(r==null&&e.pages.length)return Promise.resolve(e);let a=(()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})(),o=await u(a),{maxPages:s}=t.options,c=i?F:P;return{pages:c(e.pages,o,s),pageParams:c(e.pageParams,r,s)}};if(i&&a.length){let e=i===`backward`,t=e?Se:xe,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:xe(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(ct.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):l}}}function xe(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function Se(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var Ce=class extends ye{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e){super(),this.#s=!1,this.#o=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#i=e.client,this.#r=this.#i.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#t=Ee(this.options),this.state=e.state??this.#t,this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return this.#e}get promise(){return this.#a?.promise}setOptions(e){if(this.options={...this.#o,...e},e?._type&&(this.#e=e._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=Ee(this.options);e.data!==void 0&&(this.setState(Te(e.data,e.dataUpdatedAt)),this.#t=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#r.remove(this)}setData(e,t){let n=oe(this.state.data,e,this.options);return this.#l({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e){this.#l({type:`setState`,state:e})}cancel(e){let t=this.#a?.promise;return this.#a?.cancel(e),t?t.then(C).catch(C):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#t}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>O(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===I||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0&&this.observers.some(e=>D(e.options.staleTime,this)===`static`)}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!E(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#a?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#a?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#r.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#a&&(this.#s||this.#c()?this.#a.cancel({revert:!0}):this.#a.cancelRetry()),this.scheduleGc()),this.#r.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}#c(){return this.state.fetchStatus===`paused`&&this.state.status===`pending`}invalidate(){this.state.isInvalidated||this.#l({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#a?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#a)return this.#a.continueRetry(),this.#a.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(this.#s=!0,n.signal)})},i=()=>{let e=se(this.options,t),n=(()=>{let e={client:this.#i,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#s=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#i,state:this.state,fetchFn:i};return r(e),e})();(this.#e===`infinite`?be(this.options.pages):this.options.behavior)?.onFetch(a,this),this.#n=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#l({type:`fetch`,meta:a.fetchOptions?.meta}),this.#a=ve({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof _e&&e.revert&&this.setState({...this.#n,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#l({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#l({type:`pause`})},onContinue:()=>{this.#l({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await this.#a.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#r.config.onSuccess?.(e,this),this.#r.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof _e){if(e.silent)return this.#a.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#l({type:`error`,error:e}),this.#r.config.onError?.(e,this),this.#r.config.onSettled?.(this.state.data,e,this),e}finally{this.scheduleGc()}}#l(e){let t=t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...we(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...Te(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#n=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}};this.state=t(this.state),pe.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),this.#r.notify({query:this,type:`updated`,action:e})})}};function we(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:ge(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function Te(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function Ee(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var De=class extends ye{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||L(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=ve({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){let t=t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}};this.state=t(this.state),pe.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function L(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var Oe=class extends _{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new De({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=ke(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=ke(e);if(typeof t==`string`){let n=this.#t.get(t);if(n){if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=ke(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}return!0}runNext(e){let t=ke(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){pe.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ee(t,e))}findAll(e={}){return this.getAll().filter(t=>ee(e,t))}notify(e){pe.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return pe.batch(()=>Promise.all(e.map(e=>e.continue().catch(C))))}};function ke(e){return e.options.scope?.id}var Ae=class extends _{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??A(r,t),a=this.get(i);return a||(a=new Ce({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){pe.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>k(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>k(e,t)):t}notify(e){pe.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){pe.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){pe.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},je=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Ae,this.#t=e.mutationCache||new Oe,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=v.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=me.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(D(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=w(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return pe.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;pe.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return pe.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=pe.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(C).catch(C)}invalidateQueries(e,t={}){return pe.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=pe.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(C)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(C)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(D(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(C).catch(C)}fetchInfiniteQuery(e){return e._type=`infinite`,this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(C).catch(C)}ensureInfiniteQueryData(e){return e._type=`infinite`,this.ensureQueryData(e)}resumePausedMutations(){return me.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(j(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{te(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(j(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{te(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=A(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===I&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},Me=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),Ne=o(((e,t)=>{t.exports=Me()})),R=c(f(),1),z=Ne(),Pe=R.createContext(void 0),Fe=({client:e,children:t})=>(R.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,z.jsx)(Pe.Provider,{value:e,children:t})),Ie=typeof window<`u`?R.useLayoutEffect:R.useEffect;function B(e){let t=R.useRef({value:e,prev:null}),n=t.current.value;return e!==n&&(t.current={value:e,prev:n}),t.current.prev}function Le(e,t,n={},r={}){R.useEffect(()=>{if(!e.current||r.disabled||typeof IntersectionObserver!=`function`)return;let i=new IntersectionObserver(([e])=>{t(e)},n);return i.observe(e.current),()=>{i.disconnect()}},[t,n,r.disabled,e])}function Re(e){let t=R.useRef(null);return R.useImperativeHandle(e,()=>t.current,[]),t}function V(e){return e[e.length-1]}function ze(e){return typeof e==`function`}function Be(e,t){return ze(e)?e(t):e}var Ve=Object.prototype.hasOwnProperty,He=Object.prototype.propertyIsEnumerable;function Ue(e){for(let t in e)if(Ve.call(e,t))return!0;return!1}var We=()=>Object.create(null),Ge=(e,t)=>Ke(e,t,We);function Ke(e,t,n=()=>({}),r=0){if(e===t)return e;if(r>500)return t;let i=t,a=Xe(e)&&Xe(i);if(!a&&!(Je(e)&&Je(i)))return i;let o=a?e:qe(e);if(!o)return i;let s=a?i:qe(i);if(!s)return i;let c=o.length,l=s.length,u=a?Array(l):n(),d=0;for(let t=0;ti||!Ze(e[o],t[o],n)))return!1;return i===a}return!1}function Qe(e){let t,n,r=new Promise((e,r)=>{t=e,n=r});return r.status=`pending`,r.resolve=n=>{r.status=`resolved`,r.value=n,t(n),e?.(n)},r.reject=e=>{r.status=`rejected`,n(e)},r}function $e(e){return!!(e&&typeof e==`object`&&typeof e.then==`function`)}function et(e){return e.replace(/[\x00-\x1f\x7f]/g,``)}function tt(e){let t;try{t=decodeURI(e)}catch{t=e.replaceAll(/%[0-9A-F]{2}/gi,e=>{try{return decodeURI(e)}catch{return e}})}return et(t)}var nt=[`http:`,`https:`,`mailto:`,`tel:`];function rt(e,t){if(!e)return!1;try{let n=new URL(e);return!t.has(n.protocol)}catch{return!1}}function it(e){if(!e||!/[%\\\x00-\x1f\x7f]/.test(e)&&!e.startsWith(`//`))return{path:e,handledProtocolRelativeURL:!1};let t=/%25|%5C/gi,n=0,r=``,i;for(;(i=t.exec(e))!==null;)r+=tt(e.slice(n,i.index))+i[0],n=t.lastIndex;r+=tt(n?e.slice(n):e);let a=!1;return r.startsWith(`//`)&&(a=!0,r=`/`+r.replace(/^\/+/,``)),{path:r,handledProtocolRelativeURL:a}}function at(e){return/\s|[^\u0000-\u007F]/.test(e)?e.replace(/\s|[^\u0000-\u007F]/gu,encodeURIComponent):e}function ot(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n{e.next&&(e.prev?(e.prev.next=e.next,e.next.prev=e.prev,e.next=void 0,r&&(r.next=e,e.prev=r)):(e.next.prev=void 0,n=e.next,e.next=void 0,r&&(e.prev=r,r.next=e)),r=e)};return{get(e){let n=t.get(e);if(n)return i(n),n.value},set(a,o){if(t.size>=e&&n){let e=n;t.delete(e.key),e.next&&(n=e.next,e.next.prev=void 0),e===r&&(r=void 0)}let s=t.get(a);if(s)s.value=o,i(s);else{let e={key:a,value:o,prev:r};r&&(r.next=e),r=e,n||=e,t.set(a,e)}},clear(){t.clear(),n=void 0,r=void 0}}}var lt=4,ut=5;function dt(e){let t=e.indexOf(`{`);if(t===-1)return null;let n=e.indexOf(`}`,t);return n===-1||t+1>=e.length?null:[t,n]}function ft(e,t,n=new Uint16Array(6)){let r=e.indexOf(`/`,t),i=r===-1?e.length:r,a=e.substring(t,i);if(!a||!a.includes(`$`))return n[0]=0,n[1]=t,n[2]=t,n[3]=i,n[4]=i,n[5]=i,n;if(a===`$`){let r=e.length;return n[0]=2,n[1]=t,n[2]=t,n[3]=r,n[4]=r,n[5]=r,n}if(a.charCodeAt(0)===36)return n[0]=1,n[1]=t,n[2]=t+1,n[3]=i,n[4]=i,n[5]=i,n;let o=dt(a);if(o){let[r,s]=o,c=a.charCodeAt(r+1);if(c===45){if(r+2!e.parse&&e.caseSensitive===f&&e.prefix===p&&e.suffix===m);if(h)o=h;else{let e=_t(1,n.fullPath??n.from,f,p,m);o=e,e.depth=a,e.parent=i,i.dynamic??=[],i.dynamic.push(e)}break}case 3:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),f=c&&!!(t||s),p=t?f?t:t.toLowerCase():void 0,m=s?f?s:s.toLowerCase():void 0,h=!l&&i.optional?.find(e=>!e.parse&&e.caseSensitive===f&&e.prefix===p&&e.suffix===m);if(h)o=h;else{let e=_t(3,n.fullPath??n.from,f,p,m);o=e,e.parent=i,e.depth=a,i.optional??=[],i.optional.push(e)}break}case 2:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),l=c&&!!(t||s),f=t?l?t:t.toLowerCase():void 0,p=s?l?s:s.toLowerCase():void 0,m=_t(2,n.fullPath??n.from,l,f,p);o=m,m.parent=i,m.depth=a,i.wildcard??=[],i.wildcard.push(m)}}i=o}if(l&&n.children&&!n.isRoot&&n.id&&n.id.charCodeAt(n.id.lastIndexOf(`/`)+1)===95){let e=gt(n.fullPath??n.from);e.kind=ut,e.parent=i,a++,e.depth=a,i.pathless??=[],i.pathless.push(e),i=e}let u=(n.path||!n.children)&&!n.isRoot;if(u&&r.endsWith(`/`)){let e=gt(n.fullPath??n.from);e.kind=lt,e.parent=i,a++,e.depth=a,i.index=e,i=e}i.parse=l??null,i.priority=n.options?.params?.priority??0,u&&!i.route&&(i.route=n,i.fullPath=n.fullPath??n.from)}if(n.children)for(let r of n.children)pt(e,t,r,s,i,a,o)}function mt(e,t){if(e.parse&&!t.parse)return-1;if(!e.parse&&t.parse)return 1;if(e.parse&&t.parse&&(e.priority||t.priority))return t.priority-e.priority;if(e.prefix&&t.prefix&&e.prefix!==t.prefix){if(e.prefix.startsWith(t.prefix))return-1;if(t.prefix.startsWith(e.prefix))return 1}if(e.suffix&&t.suffix&&e.suffix!==t.suffix){if(e.suffix.endsWith(t.suffix))return-1;if(t.suffix.endsWith(e.suffix))return 1}return e.prefix&&!t.prefix?-1:!e.prefix&&t.prefix?1:e.suffix&&!t.suffix?-1:!e.suffix&&t.suffix?1:e.caseSensitive&&!t.caseSensitive?-1:!e.caseSensitive&&t.caseSensitive?1:0}function ht(e){if(e.pathless)for(let t of e.pathless)ht(t);if(e.static)for(let t of e.static.values())ht(t);if(e.staticInsensitive)for(let t of e.staticInsensitive.values())ht(t);if(e.dynamic?.length){e.dynamic.sort(mt);for(let t of e.dynamic)ht(t)}if(e.optional?.length){e.optional.sort(mt);for(let t of e.optional)ht(t)}if(e.wildcard?.length){e.wildcard.sort(mt);for(let t of e.wildcard)ht(t)}}function gt(e){return{kind:0,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:e,parent:null,parse:null,priority:0}}function _t(e,t,n,r,i){return{kind:e,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:t,parent:null,parse:null,priority:0,caseSensitive:n,prefix:r,suffix:i}}function vt(e,t){let n=gt(`/`),r=new Uint16Array(6);for(let t of e)pt(!1,r,t,1,n,0);ht(n),t.masksTree=n,t.flatCache=ct(1e3)}function yt(e,t){e||=`/`;let n=t.flatCache.get(e);if(n)return n;let r=wt(e,t.masksTree);return t.flatCache.set(e,r),r}function bt(e,t,n,r,i){e||=`/`,r||=`/`;let a=t?`case\0${e}`:e,o=i.singleCache.get(a);return o||(o=gt(`/`),pt(t,new Uint16Array(6),{from:e},1,o,0),i.singleCache.set(a,o)),wt(r,o,n)}function xt(e,t,n=!1){let r=n?e:`nofuzz\0${e}`,i=t.matchCache.get(r);if(i!==void 0)return i;e||=`/`;let a;try{a=wt(e,t.segmentTree,n)}catch(e){if(e instanceof URIError)a=null;else throw e}return a&&(a.branch=Et(a.route)),t.matchCache.set(r,a),a}function St(e){return e===`/`?e:e.replace(/\/{1,}$/,``)}function Ct(e,t=!1,n){let r=gt(e.fullPath),i=new Uint16Array(6),a={},o={},s=0;return pt(t,i,e,1,r,0,e=>{if(n?.(e,s),e.id in a&&st(),a[e.id]=e,s!==0&&e.path){let t=St(e.fullPath);(!o[t]||e.fullPath.endsWith(`/`))&&(o[t]=e)}s++}),ht(r),{processedTree:{segmentTree:r,singleCache:ct(1e3),matchCache:ct(1e3),flatCache:null,masksTree:null},routesById:a,routesByPath:o}}function wt(e,t,n=!1){let r=e.split(`/`),i=Ot(e,r,t,n);if(!i)return null;let[a]=Tt(e,r,i);return{route:i.node.route,rawParams:a}}function Tt(e,t,n){let r=Dt(n.node),i=null,a=Object.create(null),o=n.extract?.part??0,s=n.extract?.node??0,c=n.extract?.path??0,l=n.extract?.segment??0;for(;s=0;e--){let n=i.wildcard[e],{prefix:r,suffix:a}=n;if(!(r&&(v||!(n.caseSensitive?y:b??=y.toLowerCase()).startsWith(r)))){if(a){if(v)continue;let e=t.slice(u).join(`/`).slice(-a.length);if((n.caseSensitive?e:e.toLowerCase())!==a)continue}s.push({node:n,index:o,skipped:d,depth:f+1,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}}if(i.optional){let e=d|1<=0;n--){let r=i.optional[n];s.push({node:r,index:u,skipped:e,depth:t,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}if(!v)for(let e=i.optional.length-1;e>=0;e--){let n=i.optional[e],{prefix:r,suffix:a}=n;if(r||a){let e=n.caseSensitive?y:b??=y.toLowerCase();if(r&&!e.startsWith(r)||a&&!e.endsWith(a))continue}s.push({node:n,index:u+1,skipped:d,depth:t,statics:p,dynamics:m,optionals:h+kt(o,u),extract:g,rawParams:_})}}if(!v&&i.dynamic&&y)for(let e=i.dynamic.length-1;e>=0;e--){let t=i.dynamic[e],{prefix:n,suffix:r}=t;if(n||r){let e=t.caseSensitive?y:b??=y.toLowerCase();if(n&&!e.startsWith(n)||r&&!e.endsWith(r))continue}s.push({node:t,index:u+1,skipped:d,depth:f+1,statics:p,dynamics:m+kt(o,u),optionals:h,extract:g,rawParams:_})}if(!v&&i.staticInsensitive){let e=i.staticInsensitive.get(b??=y.toLowerCase());e&&s.push({node:e,index:u+1,skipped:d,depth:f+1,statics:p+kt(o,u),dynamics:m,optionals:h,extract:g,rawParams:_})}if(!v&&i.static){let e=i.static.get(y);e&&s.push({node:e,index:u+1,skipped:d,depth:f+1,statics:p+kt(o,u),dynamics:m,optionals:h,extract:g,rawParams:_})}if(i.pathless){let e=f+1;for(let t=i.pathless.length-1;t>=0;t--){let n=i.pathless[t];s.push({node:n,index:u,skipped:d,depth:e,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}}}if(l)return l;if(r&&c){let n=c.index;for(let e=0;ee.statics||t.statics===e.statics&&(t.dynamics>e.dynamics||t.dynamics===e.dynamics&&(t.optionals>e.optionals||t.optionals===e.optionals&&((t.node.kind===lt)>(e.node.kind===lt)||t.node.kind===lt==(e.node.kind===lt)&&t.depth>e.depth)))}function Nt(e){return Pt(e.filter(e=>e!==void 0).join(`/`))}function Pt(e){return e.replace(/\/{2,}/g,`/`)}function Ft(e){return e===`/`?e:e.replace(/^\/{1,}/,``)}function It(e){let t=e.length;return t>1&&e[t-1]===`/`?e.replace(/\/{1,}$/,``):e}function Lt(e){return It(Ft(e))}function Rt(e,t){return e?.endsWith(`/`)&&e!==`/`&&e!==`${t}/`?e.slice(0,-1):e}function zt(e,t,n){return Rt(e,n)===Rt(t,n)}function Bt({base:e,to:t,trailingSlash:n=`never`,cache:r}){let i=t.startsWith(`/`),a=!i&&t===`.`,o;if(r){o=i?t:a?e:e+`\0`+t;let n=r.get(o);if(n)return n}let s;if(a)s=e.split(`/`);else if(i)s=t.split(`/`);else{for(s=e.split(`/`);s.length>1&&V(s)===``;)s.pop();let n=t.split(`/`);for(let e=0,t=n.length;e1&&(V(s)===``?n===`never`&&s.pop():n===`always`&&s.push(``));let c=Pt(s.join(`/`))||`/`;return o&&r&&r.set(o,c),c}function Vt(e){let t=new Map(e.map(e=>[encodeURIComponent(e),e])),n=Array.from(t.keys()).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)).join(`|`),r=new RegExp(n,`g`);return e=>e.replace(r,e=>t.get(e)??e)}function Ht(e,t,n){let r=t[e];return typeof r==`string`?e===`_splat`?/^[a-zA-Z0-9\-._~!/]*$/.test(r)?r:r.split(`/`).map(e=>Wt(e,n)).join(`/`):Wt(r,n):r}function Ut({path:e,params:t,decoder:n,...r}){let i=!1,a=Object.create(null);if(!e||e===`/`)return{interpolatedPath:`/`,usedParams:a,isMissingParams:i};if(!e.includes(`$`))return{interpolatedPath:e,usedParams:a,isMissingParams:i};let o=e.length,s=0,c,l=``;for(;s{t[0]===`?`&&(t=t.substring(1));let n=Jt(t);for(let t in n){let r=n[t];if(typeof r==`string`)try{n[t]=e(r)}catch{}}return n}}function Qt(e,t){let n=typeof t==`function`;function r(r){if(typeof r==`object`&&r)try{return e(r)}catch{}else if(n&&typeof r==`string`)try{return t(r),e(r)}catch{}return r}return e=>{let t=Kt(e,r);return t?`?${t}`:``}}var $t=`__root__`;function en(e){if(e.statusCode=e.statusCode||e.code||307,!e._builtLocation&&!e.reloadDocument&&typeof e.href==`string`)try{new URL(e.href),e.reloadDocument=!0}catch{}let t=new Headers(e.headers);e.href&&t.get(`Location`)===null&&t.set(`Location`,e.href);let n=new Response(null,{status:e.statusCode,headers:t});if(n.options=e,e.throw)throw n;return n}function tn(e){return e instanceof Response&&!!e.options}var nn=e=>{if(!e.rendered)return e.rendered=!0,e.onReady?.()},rn=e=>e.stores.matchesId.get().some(t=>e.stores.matchStores.get(t)?.get()._forcePending),an=(e,t)=>!!(e.preload&&!e.router.stores.matchStores.has(t)),on=(e,t,n=!0)=>{let r={...e.router.options.context??{}},i=n?t:t-1;for(let t=0;t<=i;t++){let n=e.matches[t];if(!n)continue;let i=e.router.getMatch(n.id);i&&Object.assign(r,i.__routeContext,i.__beforeLoadContext)}return r},sn=(e,t)=>{if(!e.matches.length)return;let n=t.routeId,r=e.matches.findIndex(t=>t.routeId===e.router.routeTree.id),i=r>=0?r:0,a=n?e.matches.findIndex(e=>e.routeId===n):e.firstBadMatchIndex??e.matches.length-1;a<0&&(a=i);for(let t=a;t>=0;t--){let n=e.matches[t];if(e.router.looseRoutesById[n.routeId].options.notFoundComponent)return t}return n?a:i},cn=(e,t,n)=>{if(!(!tn(n)&&!Gt(n)))throw tn(n)&&n.redirectHandled&&!n.options.reloadDocument?n:(t&&(t._nonReactive.beforeLoadPromise?.resolve(),t._nonReactive.loaderPromise?.resolve(),t._nonReactive.beforeLoadPromise=void 0,t._nonReactive.loaderPromise=void 0,t._nonReactive.error=n,e.updateMatch(t.id,r=>({...r,status:tn(n)?`redirected`:Gt(n)?`notFound`:r.status===`pending`?`success`:r.status,context:on(e,t.index),isFetching:!1,error:n})),Gt(n)&&!n.routeId&&(n.routeId=t.routeId),t._nonReactive.loadPromise?.resolve()),tn(n)&&(e.rendered=!0,n.options._fromLocation=e.location,n.redirectHandled=!0,n=e.router.resolveRedirect(n)),n)},ln=(e,t)=>{let n=e.router.getMatch(t);return!!(!n||n._nonReactive.dehydrated)},un=(e,t,n)=>{let r=on(e,n);e.updateMatch(t,e=>({...e,context:r}))},dn=(e,t,n)=>{let{id:r,routeId:i}=e.matches[t],a=e.router.looseRoutesById[i];if(n instanceof Promise)throw n;e.firstBadMatchIndex??=t,cn(e,e.router.getMatch(r),n);try{a.options.onError?.(n)}catch(t){n=t,cn(e,e.router.getMatch(r),n)}e.updateMatch(r,e=>(e._nonReactive.beforeLoadPromise?.resolve(),e._nonReactive.beforeLoadPromise=void 0,e._nonReactive.loadPromise?.resolve(),{...e,error:n,status:`error`,isFetching:!1,updatedAt:Date.now(),abortController:new AbortController})),!e.preload&&!tn(n)&&!Gt(n)&&(e.serialError??=n)},fn=(e,t,n,r)=>{if(r._nonReactive.pendingTimeout!==void 0)return;let i=n.options.pendingMs??e.router.options.defaultPendingMs;if(e.onReady&&!an(e,t)&&(n.options.loader||n.options.beforeLoad||Cn(n))&&typeof i==`number`&&i!==1/0&&(n.options.pendingComponent??e.router.options?.defaultPendingComponent)){let t=setTimeout(()=>{nn(e)},i);r._nonReactive.pendingTimeout=t}},pn=(e,t,n)=>{let r=e.router.getMatch(t);if(!r._nonReactive.beforeLoadPromise&&!r._nonReactive.loaderPromise)return;fn(e,t,n,r);let i=()=>{let n=e.router.getMatch(t);n.preload&&(n.status===`redirected`||n.status===`notFound`)&&cn(e,n,n.error)};return r._nonReactive.beforeLoadPromise?r._nonReactive.beforeLoadPromise.then(i):i()},mn=(e,t,n,r)=>{let i=e.router.getMatch(t),a=i._nonReactive.loadPromise;i._nonReactive.loadPromise=Qe(()=>{a?.resolve(),a=void 0});let{paramsError:o,searchError:s}=i;o&&dn(e,n,o),s&&dn(e,n,s),fn(e,t,r,i);let c=new AbortController,l=!1,u=()=>{l||(l=!0,e.updateMatch(t,e=>({...e,isFetching:`beforeLoad`,fetchCount:e.fetchCount+1,abortController:c})))},d=()=>{i._nonReactive.beforeLoadPromise?.resolve(),i._nonReactive.beforeLoadPromise=void 0,e.updateMatch(t,e=>({...e,isFetching:!1}))};if(!r.options.beforeLoad){e.router.batch(()=>{u(),d()});return}i._nonReactive.beforeLoadPromise=Qe();let f={...on(e,n,!1),...i.__routeContext},{search:p,params:m,cause:h}=i,g=an(e,t),_={search:p,abortController:c,params:m,preload:g,context:f,location:e.location,navigate:t=>e.router.navigate({...t,_fromLocation:e.location}),buildLocation:e.router.buildLocation,cause:g?`preload`:h,matches:e.matches,routeId:r.id,...e.router.options.additionalContext},v=r=>{if(r===void 0){e.router.batch(()=>{u(),d()});return}(tn(r)||Gt(r))&&(u(),dn(e,n,r)),e.router.batch(()=>{u(),e.updateMatch(t,e=>({...e,__beforeLoadContext:r})),d()})},y;try{if(y=r.options.beforeLoad(_),$e(y))return u(),y.catch(t=>{dn(e,n,t)}).then(v)}catch(t){u(),dn(e,n,t)}v(y)},hn=(e,t)=>{let{id:n,routeId:r}=e.matches[t],i=e.router.looseRoutesById[r],a=()=>s(),o=()=>mn(e,n,t,i),s=()=>{if(ln(e,n))return;let t=pn(e,n,i);return $e(t)?t.then(o):o()};return a()},gn=(e,t,n)=>{let r=e.router.getMatch(t);if(!r||!n.options.head&&!n.options.scripts&&!n.options.headers)return;let i={ssr:e.router.options.ssr,matches:e.matches,match:r,params:r.params,loaderData:r.loaderData};return Promise.all([n.options.head?.(i),n.options.scripts?.(i),n.options.headers?.(i)]).then(([e,t,n])=>({meta:e?.meta,links:e?.links,headScripts:e?.scripts,headers:n,scripts:t,styles:e?.styles}))},_n=(e,t,n,r,i)=>{let a=t[r-1],{params:o,loaderDeps:s,abortController:c,cause:l}=e.router.getMatch(n),u=on(e,r),d=an(e,n);return{params:o,deps:s,preload:!!d,parentMatchPromise:a,abortController:c,context:u,location:e.location,navigate:t=>e.router.navigate({...t,_fromLocation:e.location}),cause:d?`preload`:l,route:i,...e.router.options.additionalContext}},vn=async(e,t,n,r,i)=>{try{let a=e.router.getMatch(n);try{Sn(i);let o=i.options.loader,s=typeof o==`function`?o:o?.handler,c=s?.(_n(e,t,n,r,i)),l=!!s&&$e(c);if((l||i._lazyPromise||i._componentsPromise||i.options.head||i.options.scripts||i.options.headers||a._nonReactive.minPendingPromise)&&e.updateMatch(n,e=>({...e,isFetching:`loader`})),s){let t=l?await c:c;cn(e,e.router.getMatch(n),t),t!==void 0&&e.updateMatch(n,e=>({...e,loaderData:t}))}i._lazyPromise&&await i._lazyPromise;let u=a._nonReactive.minPendingPromise;u&&await u,i._componentsPromise&&await i._componentsPromise,e.updateMatch(n,t=>({...t,error:void 0,context:on(e,r),status:`success`,isFetching:!1,updatedAt:Date.now()}))}catch(t){let o=t;if(o?.name===`AbortError`){if(a.abortController.signal.aborted){a._nonReactive.loaderPromise?.resolve(),a._nonReactive.loaderPromise=void 0;return}e.updateMatch(n,t=>({...t,status:t.status===`pending`?`success`:t.status,isFetching:!1,context:on(e,r)}));return}let s=a._nonReactive.minPendingPromise;s&&await s,Gt(t)&&await i.options.notFoundComponent?.preload?.(),cn(e,e.router.getMatch(n),t);try{i.options.onError?.(t)}catch(t){o=t,cn(e,e.router.getMatch(n),t)}!tn(o)&&!Gt(o)&&await Sn(i,[`errorComponent`]),e.updateMatch(n,t=>({...t,error:o,context:on(e,r),status:`error`,isFetching:!1}))}}catch(t){let r=e.router.getMatch(n);r&&(r._nonReactive.loaderPromise=void 0),cn(e,r,t)}},yn=async(e,t,n)=>{async function r(r,a,c,l,d){let f=Date.now()-a.updatedAt,p=r?d.options.preloadStaleTime??e.router.options.defaultPreloadStaleTime??3e4:d.options.staleTime??e.router.options.defaultStaleTime??0,m=d.options.shouldReload,h=typeof m==`function`?m(_n(e,t,i,n,d)):m,{status:g,invalid:_}=l,v=f>=p&&(!!e.forceStaleReload||l.cause===`enter`||c!==void 0&&c!==l.id);o=g===`success`&&(_||(h??v)),r&&d.options.preload===!1||(o&&!e.sync&&u?(s=!0,(async()=>{try{await vn(e,t,i,n,d);let r=e.router.getMatch(i);r._nonReactive.loaderPromise?.resolve(),r._nonReactive.loadPromise?.resolve(),r._nonReactive.loaderPromise=void 0,r._nonReactive.loadPromise=void 0}catch(t){tn(t)&&await e.router.navigate(t.options)}})()):g!==`success`||o?await vn(e,t,i,n,d):un(e,i,n))}let{id:i,routeId:a}=e.matches[n],o=!1,s=!1,c=e.router.looseRoutesById[a],l=c.options.loader,u=((typeof l==`function`?void 0:l?.staleReloadMode)??e.router.options.defaultStaleReloadMode)!==`blocking`;if(ln(e,i)){if(!e.router.getMatch(i))return e.matches[n];un(e,i,n)}else{let t=e.router.getMatch(i),o=e.router.stores.matchesId.get()[n],s=(o&&e.router.stores.matchStores.get(o)||null)?.routeId===a?o:e.router.stores.matches.get().find(e=>e.routeId===a)?.id,l=an(e,i);if(t._nonReactive.loaderPromise){if(t.status===`success`&&!e.sync&&!t.preload&&u)return t;await t._nonReactive.loaderPromise;let n=e.router.getMatch(i),a=n._nonReactive.error||n.error;a&&cn(e,n,a),n.status===`pending`&&await r(l,t,s,n,c)}else{let n=l&&!e.router.stores.matchStores.has(i),a=e.router.getMatch(i);a._nonReactive.loaderPromise=Qe(),n!==a.preload&&e.updateMatch(i,e=>({...e,preload:n})),await r(l,t,s,a,c)}}let d=e.router.getMatch(i);s||(d._nonReactive.loaderPromise?.resolve(),d._nonReactive.loadPromise?.resolve(),d._nonReactive.loadPromise=void 0),clearTimeout(d._nonReactive.pendingTimeout),d._nonReactive.pendingTimeout=void 0,s||(d._nonReactive.loaderPromise=void 0),d._nonReactive.dehydrated=void 0;let f=s?d.isFetching:!1;return f!==d.isFetching||d.invalid!==!1?(e.updateMatch(i,e=>({...e,isFetching:f,invalid:!1})),e.router.getMatch(i)):d};async function bn(e){let t=e,n=[];rn(t.router)&&nn(t);let r;for(let e=0;e({...e,...a?{status:`success`,globalNotFound:!0,error:void 0}:{status:`notFound`,error:l},isFetching:!1})),u=e,await Sn(r,[`notFoundComponent`])}else if(!t.preload){let e=t.matches[0];e.globalNotFound||t.router.getMatch(e.id)?.globalNotFound&&t.updateMatch(e.id,e=>({...e,globalNotFound:!1,error:void 0}))}if(t.serialError&&t.firstBadMatchIndex!==void 0){let e=t.router.looseRoutesById[t.matches[t.firstBadMatchIndex].routeId];await Sn(e,[`errorComponent`])}for(let e=0;e<=u;e++){let{id:n,routeId:r}=t.matches[e],i=t.router.looseRoutesById[r];try{let e=gn(t,n,i);if(e){let r=await e;t.updateMatch(n,e=>({...e,...r}))}}catch(e){console.error(`Error executing head for route ${r}:`,e)}}let d=nn(t);if($e(d)&&await d,l)throw l;if(t.serialError&&!t.preload&&!t.onReady)throw t.serialError;return t.matches}function xn(e,t){let n=t.map(t=>e.options[t]?.preload?.()).filter(Boolean);if(n.length!==0)return Promise.all(n)}function Sn(e,t=wn){!e._lazyLoaded&&e._lazyPromise===void 0&&(e.lazyFn?e._lazyPromise=e.lazyFn().then(t=>{let{id:n,...r}=t.options;Object.assign(e.options,r),e._lazyLoaded=!0,e._lazyPromise=void 0}):e._lazyLoaded=!0);let n=()=>e._componentsLoaded?void 0:t===wn?(()=>{if(e._componentsPromise===void 0){let t=xn(e,wn);t?e._componentsPromise=t.then(()=>{e._componentsLoaded=!0,e._componentsPromise=void 0}):e._componentsLoaded=!0}return e._componentsPromise})():xn(e,t);return e._lazyPromise?e._lazyPromise.then(n):n()}function Cn(e){for(let t of wn)if(e.options[t]?.preload)return!0;return!1}var wn=[`component`,`errorComponent`,`pendingComponent`,`notFoundComponent`];function Tn(e){return{input:({url:t})=>{for(let n of e)t=Dn(n,t);return t},output:({url:t})=>{for(let n=e.length-1;n>=0;n--)t=On(e[n],t);return t}}}function En(e){let t=Lt(e.basepath),n=`/${t}`,r=e.caseSensitive?n:n.toLowerCase(),i=`${r}/`;return{input:({url:t})=>{let a=e.caseSensitive?t.pathname:t.pathname.toLowerCase();return a===r?t.pathname=`/`:a.startsWith(i)&&(t.pathname=t.pathname.slice(n.length)),t},output:({url:e})=>(e.pathname=Nt([`/`,t,e.pathname]),e)}}function Dn(e,t){let n=e?.input?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function On(e,t){let n=e?.output?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function kn(e,t){let{createMutableStore:n,createReadonlyStore:r,batch:i,init:a}=t,o=new Map,s=new Map,c=new Map,l=n(e.status),u=n(e.loadedAt),d=n(e.isLoading),f=n(e.isTransitioning),p=n(e.location),m=n(e.resolvedLocation),h=n(e.statusCode),g=n(e.redirect),_=n([]),v=n([]),y=n([]),b=r(()=>An(o,_.get())),x=r(()=>An(s,v.get())),S=r(()=>An(c,y.get())),C=r(()=>_.get()[0]),w=r(()=>_.get().some(e=>o.get(e)?.get().status===`pending`)),T=r(()=>({locationHref:p.get().href,resolvedLocationHref:m.get()?.href,status:l.get()})),E=r(()=>({status:l.get(),loadedAt:u.get(),isLoading:d.get(),isTransitioning:f.get(),matches:b.get(),location:p.get(),resolvedLocation:m.get(),statusCode:h.get(),redirect:g.get()})),D=ct(64);function O(e){let t=D.get(e);return t||(t=r(()=>{let t=_.get();for(let n of t){let t=o.get(n);if(t&&t.routeId===e)return t.get()}}),D.set(e,t)),t}let k={status:l,loadedAt:u,isLoading:d,isTransitioning:f,location:p,resolvedLocation:m,statusCode:h,redirect:g,matchesId:_,pendingIds:v,cachedIds:y,matches:b,pendingMatches:x,cachedMatches:S,firstId:C,hasPending:w,matchRouteDeps:T,matchStores:o,pendingMatchStores:s,cachedMatchStores:c,__store:E,getRouteMatchStore:O,setMatches:ee,setPending:A,setCached:j};ee(e.matches),a?.(k);function ee(e){jn(e,o,_,n,i)}function A(e){jn(e,s,v,n,i)}function j(e){jn(e,c,y,n,i)}return k}function An(e,t){let n=[];for(let r of t){let t=e.get(r);t&&n.push(t.get())}return n}function jn(e,t,n,r,i){let a=e.map(e=>e.id),o=new Set(a);i(()=>{for(let e of t.keys())o.has(e)||t.delete(e);for(let n of e){let e=t.get(n.id);if(!e){let e=r(n);e.routeId=n.routeId,t.set(n.id,e);continue}e.routeId=n.routeId,e.get()!==n&&e.set(n)}ot(n.get(),a)||n.set(a)})}var Mn=`__TSR_index`,Nn=`popstate`,Pn=`beforeunload`;function Fn(e){let t=e.getLocation(),n=new Set,r=r=>{t=e.getLocation(),n.forEach(e=>e({location:t,action:r}))},i=n=>{e.notifyOnIndexChange??!0?r(n):t=e.getLocation()},a=async({task:n,navigateOpts:r,...i})=>{if(r?.ignoreBlocker??!1){n();return}let a=e.getBlockers?.()??[],o=i.type===`PUSH`||i.type===`REPLACE`;if(typeof document<`u`&&a.length&&o)for(let n of a){let r=zn(i.path,i.state);if(await n.blockerFn({currentLocation:t,nextLocation:r,action:i.type})){e.onBlocked?.();return}}n()};return{get location(){return t},get length(){return e.getLength()},subscribers:n,subscribe:e=>(n.add(e),()=>{n.delete(e)}),push:(n,i,o)=>{let s=t.state[Mn];i=In(s+1,i),a({task:()=>{e.pushState(n,i),r({type:`PUSH`})},navigateOpts:o,type:`PUSH`,path:n,state:i})},replace:(n,i,o)=>{let s=t.state[Mn];i=In(s,i),a({task:()=>{e.replaceState(n,i),r({type:`REPLACE`})},navigateOpts:o,type:`REPLACE`,path:n,state:i})},go:(t,n)=>{a({task:()=>{e.go(t),i({type:`GO`,index:t})},navigateOpts:n,type:`GO`})},back:t=>{a({task:()=>{e.back(t?.ignoreBlocker??!1),i({type:`BACK`})},navigateOpts:t,type:`BACK`})},forward:t=>{a({task:()=>{e.forward(t?.ignoreBlocker??!1),i({type:`FORWARD`})},navigateOpts:t,type:`FORWARD`})},canGoBack:()=>t.state[Mn]!==0,createHref:t=>e.createHref(t),block:t=>{if(!e.setBlockers)return()=>{};let n=e.getBlockers?.()??[];return e.setBlockers([...n,t]),()=>{let n=e.getBlockers?.()??[];e.setBlockers?.(n.filter(e=>e!==t))}},flush:()=>e.flush?.(),destroy:()=>e.destroy?.(),notify:r}}function In(e,t){t||={};let n=Bn();return{...t,key:n,__TSR_key:n,[Mn]:e}}function Ln(e){let t=e?.window??(typeof document<`u`?window:void 0),n=t.history.pushState,r=t.history.replaceState,i=[],a=()=>i,o=e=>i=e,s=e?.createHref??(e=>e),c=e?.parseLocation??(()=>zn(`${t.location.pathname}${t.location.search}${t.location.hash}`,t.history.state));if(!t.history.state?.__TSR_key&&!t.history.state?.key){let e=Bn();t.history.replaceState({[Mn]:0,key:e,__TSR_key:e},``)}let l=c(),u,d=!1,f=!1,p=!1,m=!1,h=()=>l,g,_,v=()=>{g&&(C._ignoreSubscribers=!0,(g.isPush?t.history.pushState:t.history.replaceState)(g.state,``,g.href),C._ignoreSubscribers=!1,g=void 0,_=void 0,u=void 0)},y=(e,t,n)=>{let r=s(t);_||(u=l),l=zn(t,n),g={href:r,state:n,isPush:g?.isPush||e===`push`},_||=Promise.resolve().then(()=>v())},b=e=>{l=c(),C.notify({type:e})},x=async()=>{if(f){f=!1;return}let e=c(),n=e.state[Mn]-l.state[Mn],r=n===1,i=n===-1,o=!r&&!i||d;d=!1;let s=o?`GO`:i?`BACK`:`FORWARD`,u=o?{type:`GO`,index:n}:{type:i?`BACK`:`FORWARD`};if(p)p=!1;else{let n=a();if(typeof document<`u`&&n.length){for(let r of n)if(await r.blockerFn({currentLocation:l,nextLocation:e,action:s})){f=!0,t.history.go(1),C.notify(u);return}}}l=c(),C.notify(u)},S=e=>{if(m){m=!1;return}let t=!1,n=a();if(typeof document<`u`&&n.length)for(let e of n){let n=e.enableBeforeUnload??!0;if(n===!0){t=!0;break}if(typeof n==`function`&&n()===!0){t=!0;break}}if(t)return e.preventDefault(),e.returnValue=``},C=Fn({getLocation:h,getLength:()=>t.history.length,pushState:(e,t)=>y(`push`,e,t),replaceState:(e,t)=>y(`replace`,e,t),back:e=>(e&&(p=!0),m=!0,t.history.back()),forward:e=>{e&&(p=!0),m=!0,t.history.forward()},go:e=>{d=!0,t.history.go(e)},createHref:e=>s(e),flush:v,destroy:()=>{t.history.pushState=n,t.history.replaceState=r,t.removeEventListener(Pn,S,{capture:!0}),t.removeEventListener(Nn,x)},onBlocked:()=>{u&&l!==u&&(l=u)},getBlockers:a,setBlockers:o,notifyOnIndexChange:!1});return t.addEventListener(Pn,S,{capture:!0}),t.addEventListener(Nn,x),t.history.pushState=function(...e){let r=n.apply(t.history,e);return C._ignoreSubscribers||b(`PUSH`),r},t.history.replaceState=function(...e){let n=r.apply(t.history,e);return C._ignoreSubscribers||b(`REPLACE`),n},C}function Rn(e){let t=e.replace(/[\x00-\x1f\x7f]/g,``);return t.startsWith(`//`)&&(t=`/`+t.replace(/^\/+/,``)),t}function zn(e,t){let n=Rn(e),r=n.indexOf(`#`),i=n.indexOf(`?`),a=Bn();return{href:n,pathname:n.substring(0,r>0?i>0?Math.min(r,i):r:i>0?i:n.length),hash:r>-1?n.substring(r):``,search:i>-1?n.slice(i,r===-1?void 0:r):``,state:t||{[Mn]:0,key:a,__TSR_key:a}}}function Bn(){return(Math.random()+1).toString(36).substring(7)}function Vn(e,t){let n=t,r=e;return{fromLocation:n,toLocation:r,pathChanged:n?.pathname!==r.pathname,hrefChanged:n?.href!==r.href,hashChanged:n?.hash!==r.hash}}var Hn=new WeakMap,Un=class{constructor(e,t){this.tempLocationKey=`${Math.round(Math.random()*1e7)}`,this.resetNextScroll=!0,this.shouldViewTransition=void 0,this.isViewTransitionTypesSupported=void 0,this.subscribers=new Set,this.isScrollRestoring=!1,this.isScrollRestorationSetup=!1,this.routeBranchCache=new WeakMap,this.startTransition=e=>e(),this.update=e=>{let t=this.options,n=this.basepath??t?.basepath??`/`,r=this.basepath===void 0,i=t?.rewrite;if(this.options={...t,...e},this.isServer=this.options.isServer??typeof document>`u`,this.protocolAllowlist=new Set(this.options.protocolAllowlist),this.options.pathParamsAllowedCharacters&&(this.pathParamsDecoder=Vt(this.options.pathParamsAllowedCharacters)),(!this.history||this.options.history&&this.options.history!==this.history)&&(this.history=this.options.history?this.options.history:Ln()),this.origin=this.options.origin,this.origin||=window?.origin&&window.origin!==`null`?window.origin:`http://localhost`,this.history&&this.updateLatestLocation(),this.options.routeTree!==this.routeTree){this.routeTree=this.options.routeTree;let e;this.resolvePathCache=ct(1e3),e=this.buildRouteTree(),this.setRoutes(e)}if(!this.stores&&this.latestLocation){let e=this.getStoreConfig(this);this.batch=e.batch,this.stores=kn(Kn(this.latestLocation),e),fr(this)}let a=!1,o=this.options.basepath??`/`,s=this.options.rewrite;if(r||n!==o||i!==s){this.basepath=o;let e=[],t=Lt(o);t&&t!==`/`&&e.push(En({basepath:o})),s&&e.push(s),this.rewrite=e.length===0?void 0:e.length===1?e[0]:Tn(e),this.history&&this.updateLatestLocation(),a=!0}a&&this.stores&&this.stores.location.set(this.latestLocation),typeof window<`u`&&`CSS`in window&&typeof window.CSS?.supports==`function`&&(this.isViewTransitionTypesSupported=window.CSS.supports(`selector(:active-view-transition-type(a))`))},this.updateLatestLocation=()=>{this.latestLocation=this.parseLocation(this.history.location,this.latestLocation)},this.buildRouteTree=()=>{let e=Ct(this.routeTree,this.options.caseSensitive,(e,t)=>{e.init({originalIndex:t})});return this.options.routeMasks&&vt(this.options.routeMasks,e.processedTree),e},this.subscribe=(e,t)=>{let n={eventType:e,fn:t};return this.subscribers.add(n),()=>{this.subscribers.delete(n)}},this.emit=e=>{this.subscribers.forEach(t=>{t.eventType===e.type&&t.fn(e)})},this.parseLocation=(e,t)=>{let n=({pathname:e,search:n,hash:r,href:i,state:a})=>{if(!this.rewrite&&!/[ \x00-\x1f\x7f\u0080-\uffff]/.test(e)){let i=this.options.parseSearch(n),o=this.options.stringifySearch(i);return{href:e+o+r,publicHref:e+o+r,pathname:it(e).path,external:!1,searchStr:o,search:Ge(t?.search,i),hash:it(r.slice(1)).path,state:Ke(t?.state,a)}}let o=new URL(i,this.origin),s=Dn(this.rewrite,o),c=this.options.parseSearch(s.search),l=this.options.stringifySearch(c);return s.search=l,{href:s.href.replace(s.origin,``),publicHref:i,pathname:it(s.pathname).path,external:!!this.rewrite&&s.origin!==this.origin,searchStr:l,search:Ge(t?.search,c),hash:it(s.hash.slice(1)).path,state:Ke(t?.state,a)}},r=n(e),{__tempLocation:i,__tempKey:a}=r.state;if(i&&(!a||a===this.tempLocationKey)){let e=n(i);return e.state.key=r.state.key,e.state.__TSR_key=r.state.__TSR_key,delete e.state.__tempLocation,{...e,maskedLocation:r}}return r},this.resolvePathWithBase=(e,t)=>Bt({base:e,to:t.includes(`//`)?Pt(t):t,trailingSlash:this.options.trailingSlash,cache:this.resolvePathCache}),this.matchRoutes=(e,t,n)=>typeof e==`string`?this.matchRoutesInternal({pathname:e,search:t},n):this.matchRoutesInternal(e,t),this.getMatchedRoutes=e=>Jn({pathname:e,routesById:this.routesById,processedTree:this.processedTree}),this.cancelMatch=e=>{let t=this.getMatch(e);t&&(t.abortController.abort(),clearTimeout(t._nonReactive.pendingTimeout),t._nonReactive.pendingTimeout=void 0)},this.cancelMatches=()=>{this.stores.pendingIds.get().forEach(e=>{this.cancelMatch(e)}),this.stores.matchesId.get().forEach(e=>{if(this.stores.pendingMatchStores.has(e))return;let t=this.stores.matchStores.get(e)?.get();t&&(t.status===`pending`||t.isFetching===`loader`)&&this.cancelMatch(e)})},this.buildLocation=e=>{let t=(t={})=>{let n=t._fromLocation||this.pendingBuiltLocation||this.latestLocation,r=this.matchRoutesLightweight(n);t.from;let i=t.unsafeRelative===`path`?n.pathname:t.from??r.fullPath,a=t.to?`${t.to}`:void 0,o=r.search,s=Object.assign(Object.create(null),r.params),c=a?.charCodeAt(0)===47?`/`:this.resolvePathWithBase(i,`.`),l=a?this.resolvePathWithBase(c,a):c,u=t.params===!1||t.params===null?Object.create(null):(t.params??!0)===!0?s:Object.assign(s,Be(t.params,s)),d=this.routesByPath[It(l)],f;if(d)f=this.getRouteBranch(d);else if(l.includes(`$`))f=[];else{let e=this.getMatchedRoutes(l);f=e.matchedRoutes,this.options.notFoundRoute&&(!e.foundRoute||e.foundRoute.path!==`/`&&e.routeParams[`**`])&&(f=[...f,this.options.notFoundRoute])}if(f.length&&Ue(u))for(let e of f){let t=e.options.params?.stringify??e.options.stringifyParams;if(t)try{Object.assign(u,t(u))}catch{}}let p=e.leaveParams?l:it(Ut({path:l,params:u,decoder:this.pathParamsDecoder,server:this.isServer}).interpolatedPath).path,m=o;if(e._includeValidateSearch&&this.options.search?.strict){let e={};f.forEach(t=>{if(t.options.validateSearch)try{Object.assign(e,qn(t.options.validateSearch,{...e,...m}))}catch{}}),m=e}m=Yn({search:m,dest:t,destRoutes:f,_includeValidateSearch:e._includeValidateSearch}),m=Ge(o,m);let h=this.options.stringifySearch(m),g=t.hash===!0?n.hash:t.hash?Be(t.hash,n.hash):void 0,_=g?`#${g}`:``,v=t.state===!0?n.state:t.state?Be(t.state,n.state):{};v=Ke(n.state,v);let y=`${p}${h}${_}`,b,x,S=!1;if(this.rewrite){let e=new URL(y,this.origin),t=On(this.rewrite,e);b=e.href.replace(e.origin,``),t.origin===this.origin?x=t.pathname+t.search+t.hash:(x=t.href,S=!0)}else b=at(y),x=b;return{publicHref:x,href:b,pathname:p,search:m,searchStr:h,state:v,hash:g??``,external:S,unmaskOnReload:t.unmaskOnReload}},n=(n={},r)=>{let i=t(n),a=r?t(r):void 0;if(!a){let n=Object.create(null);if(this.options.routeMasks){let o=yt(i.pathname,this.processedTree);if(o){Object.assign(n,o.rawParams);let{from:i,params:s,...c}=o.route,l=s===!1||s===null?Object.create(null):(s??!0)===!0?n:Object.assign(n,Be(s,n));r={from:e.from,...c,params:l},a=t(r)}}}return a&&(i.maskedLocation=a),i};return e.mask?n(e,{from:e.from,...e.mask}):n(e)},this.commitLocation=async({viewTransition:e,ignoreBlocker:t,...n})=>{let r,i=()=>{let e=[`key`,`__TSR_key`,`__TSR_index`,`__hashScrollIntoViewOptions`];e.forEach(e=>{n.state[e]=this.latestLocation.state[e]});let t=Ze(n.state,this.latestLocation.state);return e.forEach(e=>{delete n.state[e]}),t},a=It(this.latestLocation.href)===It(n.href),o=this.commitLocationPromise;if(this.commitLocationPromise=Qe(()=>{o?.resolve(),o=void 0}),a&&i())this.load();else{let{maskedLocation:i,hashScrollIntoView:a,...o}=n;i&&(o={...i,state:{...i.state,__tempKey:void 0,__tempLocation:{...o,search:o.searchStr,state:{...o.state,__tempKey:void 0,__tempLocation:void 0,__TSR_key:void 0,key:void 0}}}},(o.unmaskOnReload??this.options.unmaskOnReload??!1)&&(o.state.__tempKey=this.tempLocationKey)),o.state.__hashScrollIntoViewOptions=a??this.options.defaultHashScrollIntoView??!0,this.shouldViewTransition=e,r=n.replace?`REPLACE`:`PUSH`,this.history[r===`REPLACE`?`replace`:`push`](o.publicHref,o.state,{ignoreBlocker:t})}return this.resetNextScroll=n.resetScroll??!0,this.history.subscribers.size||this.load(r?{action:{type:r}}:void 0),this.commitLocationPromise},this.buildAndCommitLocation=({replace:e,resetScroll:t,hashScrollIntoView:n,viewTransition:r,ignoreBlocker:i,href:a,...o}={})=>{if(a){let t=this.history.location.state.__TSR_index,n=zn(a,{__TSR_index:e?t:t+1}),r=new URL(n.pathname,this.origin);o.to=Dn(this.rewrite,r).pathname,o.search=this.options.parseSearch(n.search),o.hash=n.hash.slice(1)}let s=this.buildLocation({...o,_includeValidateSearch:!0});this.pendingBuiltLocation=s;let c=this.commitLocation({...s,viewTransition:r,replace:e,resetScroll:t,hashScrollIntoView:n,ignoreBlocker:i});return Promise.resolve().then(()=>{this.pendingBuiltLocation===s&&(this.pendingBuiltLocation=void 0)}),c},this.navigate=async({to:e,reloadDocument:t,href:n,publicHref:r,...i})=>{let a=!1;if(n)try{new URL(`${n}`),a=!0}catch{}if(a&&!t&&(t=!0),t){if(e!==void 0||!n){let t=this.buildLocation({to:e,...i});n??=t.publicHref,r??=t.publicHref}let t=!a&&r?r:n;if(rt(t,this.protocolAllowlist))return Promise.resolve();if(!i.ignoreBlocker){let e=this.history.getBlockers?.()??[];for(let t of e)if(t?.blockerFn&&await t.blockerFn({currentLocation:this.latestLocation,nextLocation:this.latestLocation,action:`PUSH`}))return Promise.resolve()}return i.replace?window.location.replace(t):window.location.href=t,Promise.resolve()}return this.buildAndCommitLocation({...i,href:n,to:e,_isNavigate:!0})},this.beforeLoad=()=>{this.cancelMatches(),this.updateLatestLocation();let e=this.matchRoutes(this.latestLocation),t=this.stores.cachedMatches.get().filter(t=>!e.some(e=>e.id===t.id));this.batch(()=>{this.stores.status.set(`pending`),this.stores.statusCode.set(200),this.stores.isLoading.set(!0),this.stores.location.set(this.latestLocation),this.stores.setPending(e),this.stores.setCached(t)})},this.load=async e=>{let t=e?.action?.type,n,r,i,a=this.stores.resolvedLocation.get()??this.stores.location.get();for(i=new Promise(o=>{this.startTransition(async()=>{try{this.beforeLoad(),t?Hn.set(this.latestLocation,t):Hn.delete(this.latestLocation);let n=this.latestLocation,r=Vn(n,this.stores.resolvedLocation.get());this.stores.redirect.get()||this.emit({type:`onBeforeNavigate`,...r}),this.emit({type:`onBeforeLoad`,...r}),await bn({router:this,sync:e?.sync,forceStaleReload:a.href===n.href,matches:this.stores.pendingMatches.get(),location:n,updateMatch:this.updateMatch,onReady:async()=>{this.startTransition(()=>{this.startViewTransition(async()=>{let e=null,t=null,n=null,r=null;this.batch(()=>{let i=this.stores.pendingMatches.get(),a=i.length,o=this.stores.matches.get();e=a?o.filter(e=>!this.stores.pendingMatchStores.has(e.id)):null;let s=new Set;for(let e of this.stores.pendingMatchStores.values())e.routeId&&s.add(e.routeId);let c=new Set;for(let e of this.stores.matchStores.values())e.routeId&&c.add(e.routeId);t=a?o.filter(e=>!s.has(e.routeId)):null,n=a?i.filter(e=>!c.has(e.routeId)):null,r=a?i.filter(e=>c.has(e.routeId)):o,this.stores.isLoading.set(!1),this.stores.loadedAt.set(Date.now()),a&&(this.stores.setMatches(i),this.stores.setPending([]),this.stores.setCached([...this.stores.cachedMatches.get(),...e.filter(e=>e.status!==`error`&&e.status!==`notFound`&&e.status!==`redirected`)]),this.clearExpiredCache())});for(let[e,i]of[[t,`onLeave`],[n,`onEnter`],[r,`onStay`]])if(e)for(let t of e)this.looseRoutesById[t.routeId].options[i]?.(t)})})}})}catch(e){tn(e)?(n=e,this.navigate({...n.options,replace:!0,ignoreBlocker:!0})):Gt(e)&&(r=e);let t=n?n.status:r?404:this.stores.matches.get().some(e=>e.status===`error`)?500:200;this.batch(()=>{this.stores.statusCode.set(t),this.stores.redirect.set(n)})}this.latestLoadPromise===i&&(this.commitLocationPromise?.resolve(),this.latestLoadPromise=void 0,this.commitLocationPromise=void 0),o()})}),this.latestLoadPromise=i,await i;this.latestLoadPromise&&i!==this.latestLoadPromise;)await this.latestLoadPromise;let o;this.hasNotFoundMatch()?o=404:this.stores.matches.get().some(e=>e.status===`error`)&&(o=500),o!==void 0&&this.stores.statusCode.set(o)},this.startViewTransition=e=>{let t=this.shouldViewTransition??this.options.defaultViewTransition;if(this.shouldViewTransition=void 0,t&&typeof document<`u`&&`startViewTransition`in document&&typeof document.startViewTransition==`function`){let n;if(typeof t==`object`&&this.isViewTransitionTypesSupported){let r=this.latestLocation,i=this.stores.resolvedLocation.get(),a=typeof t.types==`function`?t.types(Vn(r,i)):t.types;if(a===!1){e();return}n={update:e,types:a}}else n=e;document.startViewTransition(n)}else e()},this.updateMatch=(e,t)=>{this.startTransition(()=>{let n=this.stores.pendingMatchStores.get(e);if(n){n.set(t);return}let r=this.stores.matchStores.get(e);if(r){r.set(t);return}let i=this.stores.cachedMatchStores.get(e);if(i){let n=t(i.get());n.status===`redirected`?this.stores.cachedMatchStores.delete(e)&&this.stores.cachedIds.set(t=>t.filter(t=>t!==e)):i.set(n)}})},this.getMatch=e=>this.stores.cachedMatchStores.get(e)?.get()??this.stores.pendingMatchStores.get(e)?.get()??this.stores.matchStores.get(e)?.get(),this.invalidate=e=>{let t=t=>e?.filter?.(t)??!0?{...t,invalid:!0,...e?.forcePending||t.status===`error`||t.status===`notFound`?{status:`pending`,error:void 0}:void 0}:t;return this.batch(()=>{this.stores.setMatches(this.stores.matches.get().map(t)),this.stores.setCached(this.stores.cachedMatches.get().map(t)),this.stores.setPending(this.stores.pendingMatches.get().map(t))}),this.shouldViewTransition=!1,this.load({sync:e?.sync})},this.getParsedLocationHref=e=>e.publicHref||`/`,this.resolveRedirect=e=>{let t=e.headers.get(`Location`);if(!e.options.href||e.options._builtLocation){let t=e.options._builtLocation??this.buildLocation(e.options),n=this.getParsedLocationHref(t);e.options.href=n,e.headers.set(`Location`,n)}else if(t)try{let n=new URL(t);if(this.origin&&n.origin===this.origin){let t=n.pathname+n.search+n.hash;e.options.href=t,e.headers.set(`Location`,t)}}catch{}if(e.options.href&&!e.options._builtLocation&&rt(e.options.href,this.protocolAllowlist))throw Error(`Redirect blocked: unsafe protocol`);return e.headers.get(`Location`)||e.headers.set(`Location`,e.options.href),e},this.clearCache=e=>{let t=e?.filter;t===void 0?this.stores.setCached([]):this.stores.setCached(this.stores.cachedMatches.get().filter(e=>!t(e)))},this.clearExpiredCache=()=>{let e=Date.now();this.clearCache({filter:t=>{let n=this.looseRoutesById[t.routeId];if(!n.options.loader)return!0;let r=(t.preload?n.options.preloadGcTime??this.options.defaultPreloadGcTime:n.options.gcTime??this.options.defaultGcTime)??3e5;return t.status===`error`||e-t.updatedAt>=r}})},this.loadRouteChunk=Sn,this.preloadRoute=async e=>{let t=e._builtLocation??this.buildLocation(e),n=this.matchRoutes(t,{throwOnError:!0,preload:!0,dest:e}),r=new Set([...this.stores.matchesId.get(),...this.stores.pendingIds.get()]),i=new Set([...r,...this.stores.cachedIds.get()]),a=n.filter(e=>!i.has(e.id));if(a.length){let e=this.stores.cachedMatches.get();this.stores.setCached([...e,...a])}try{return n=await bn({router:this,matches:n,location:t,preload:!0,updateMatch:(e,t)=>{r.has(e)?n=n.map(n=>n.id===e?t(n):n):this.updateMatch(e,t)}}),n}catch(e){if(tn(e))return e.options.reloadDocument?void 0:await this.preloadRoute({...e.options,_fromLocation:t});Gt(e)||console.error(e);return}},this.matchRoute=(e,t)=>{let n={...e,to:e.to?this.resolvePathWithBase(e.from||``,e.to):void 0,params:e.params||{},leaveParams:!0},r=this.buildLocation(n);if(t?.pending&&this.stores.status.get()!==`pending`)return!1;let i=(t?.pending===void 0?!this.stores.isLoading.get():t.pending)?this.latestLocation:this.stores.resolvedLocation.get()||this.stores.location.get(),a=bt(r.pathname,t?.caseSensitive??!1,t?.fuzzy??!1,i.pathname,this.processedTree);return!a||e.params&&!Ze(a.rawParams,e.params,{partial:!0})?!1:t?.includeSearch??!0?Ze(i.search,r.search,{partial:!0})?a.rawParams:!1:a.rawParams},this.hasNotFoundMatch=()=>this.stores.matches.get().some(e=>e.status===`notFound`||e.globalNotFound),this.getStoreConfig=t,this.update({defaultPreloadDelay:50,defaultPendingMs:1e3,defaultPendingMinMs:500,context:void 0,...e,caseSensitive:e.caseSensitive??!1,notFoundMode:e.notFoundMode??`fuzzy`,stringifySearch:e.stringifySearch??Xt,parseSearch:e.parseSearch??Yt,protocolAllowlist:e.protocolAllowlist??nt}),typeof document<`u`&&(self.__TSR_ROUTER__=this)}isShell(){return!!this.options.isShell}isPrerendering(){return!!this.options.isPrerendering}get state(){return this.stores.__store.get()}setRoutes({routesById:e,routesByPath:t,processedTree:n}){this.routesById=e,this.routesByPath=t,this.processedTree=n;let r=this.options.notFoundRoute;r&&(r.init({originalIndex:99999999999}),this.routesById[r.id]=r)}getRouteBranch(e){let t=this.routeBranchCache.get(e);return t||(t=Et(e),this.routeBranchCache.set(e,t)),t}get looseRoutesById(){return this.routesById}getParentContext(e){return e?.id?e.context??this.options.context??void 0:this.options.context??void 0}matchRoutesInternal(e,t){let n=this.getMatchedRoutes(e.pathname),{foundRoute:r,routeParams:i}=n,{matchedRoutes:a}=n,o=!1;(r?r.path!==`/`&&i[`**`]:It(e.pathname))&&(this.options.notFoundRoute?a=[...a,this.options.notFoundRoute]:o=!0);let s=o?Zn(this.options.notFoundMode,a):void 0,c=Array(a.length),l=new Map;for(let e of this.stores.matchStores.values())e.routeId&&l.set(e.routeId,e.get());for(let n=0;nthis.navigate({...t,_fromLocation:e}),buildLocation:this.buildLocation,cause:n.cause,abortController:n.abortController,preload:!!n.preload,matches:c,routeId:r.id};n.__routeContext=r.options.context(t)??void 0}n.context={...a,...n.__routeContext,...n.__beforeLoadContext}}}return c}matchRoutesLightweight(e){let{matchedRoutes:t,routeParams:n}=this.getMatchedRoutes(e.pathname),r=V(t),i={...e.search};for(let e of t)try{Object.assign(i,qn(e.options.validateSearch,i))}catch{}let a=V(this.stores.matchesId.get()),o=a&&this.stores.matchStores.get(a)?.get(),s=o&&o.routeId===r.id&&o.pathname===e.pathname,c;if(s)c=o.params;else{let e=Object.assign(Object.create(null),n);for(let n of t)try{Qn(n,e)}catch{}c=e}return{matchedRoutes:t,fullPath:r.fullPath,search:i,params:c}}},Wn=class extends Error{},Gn=class extends Error{};function Kn(e){return{loadedAt:0,isLoading:!1,isTransitioning:!1,status:`idle`,resolvedLocation:void 0,location:e,matches:[],statusCode:200}}function qn(e,t){if(e==null)return{};if(`~standard`in e){let n=e[`~standard`].validate(t);if(n instanceof Promise)throw new Wn(`Async validation not supported`);if(n.issues)throw new Wn(JSON.stringify(n.issues,void 0,2),{cause:n});return n.value}return`parse`in e?e.parse(t):typeof e==`function`?e(t):{}}function Jn({pathname:e,routesById:t,processedTree:n}){let r=Object.create(null),i=It(e),a,o=xt(i,n,!0);return o&&(a=o.route,Object.assign(r,o.rawParams)),{matchedRoutes:o?.branch||[t.__root__],routeParams:r,foundRoute:a}}function Yn({search:e,dest:t,destRoutes:n,_includeValidateSearch:r}){return Xn(n)(e,t,r??!1)}function Xn(e){let t={dest:null,_includeValidateSearch:!1,middlewares:[]};for(let n of e)`search`in n.options?n.options.search?.middlewares&&t.middlewares.push(...n.options.search.middlewares):(n.options.preSearchFilters||n.options.postSearchFilters)&&t.middlewares.push(({search:e,next:t})=>{let r=e;`preSearchFilters`in n.options&&n.options.preSearchFilters&&(r=n.options.preSearchFilters.reduce((e,t)=>t(e),e));let i=t(r);return`postSearchFilters`in n.options&&n.options.postSearchFilters?n.options.postSearchFilters.reduce((e,t)=>t(e),i):i}),n.options.validateSearch&&t.middlewares.push(({search:e,next:r})=>{let i=r(e);if(!t._includeValidateSearch)return i;try{return{...i,...qn(n.options.validateSearch,i)??void 0}}catch{return i}});t.middlewares.push(({search:e})=>{let n=t.dest;return n.search?n.search===!0?e:Be(n.search,e):{}});let n=(e,t,r)=>{if(e>=r.length)return t;let i=r[e];return i({search:t,next:t=>n(e+1,t,r)})};return function(e,r,i){return t.dest=r,t._includeValidateSearch=i,n(0,e,t.middlewares)}}function Zn(e,t){if(e!==`root`)for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.children)return n.id}return $t}function Qn(e,t){let n=e.options.params?.parse??e.options.parseParams;if(n){let e=n(t);if(e===!1)throw Error(`Route params.parse returned false for a matched route`);Object.assign(t,e)}}function $n(){try{return sessionStorage}catch{return}}var er=`tsr-scroll-restoration-v1_3`,tr=$n();function nr(){try{return JSON.parse(tr?.getItem(`tsr-scroll-restoration-v1_3`)||`{}`)}catch{return{}}}function rr(){try{tr?.setItem(er,JSON.stringify(ir))}catch{}}var ir=nr(),ar=`data-scroll-restoration-id`,or=e=>e.state.__TSR_key||e.href;function sr(e){let t=e.getAttribute(ar);if(t)return`[${ar}="${t}"]`;let n=``,r=e,i;for(;i=r.parentNode;){let e=1,t=r;for(;t=t.previousElementSibling;)e++;let a=`${r.localName}:nth-child(${e})`;n=n?`${a} > ${n}`:a,r=i}return n}var cr=!1,lr=`window`;function ur(e){try{return typeof e==`function`?e():document.querySelector(e)}catch{}}function dr(e){let t=[];for(let n of e){if(n===lr)continue;let e=ur(n);e&&t.push(e)}return t}function fr(e,t){if((t??e.options.scrollRestoration)&&(e.isScrollRestoring=!0),e.isScrollRestorationSetup)return;e.isScrollRestorationSetup=!0,cr=!1;let n=e.options.getScrollRestorationKey||or,r=new Map,i=(e,t,n)=>{let i=r.get(e)||{};i.scrollX=t,i.scrollY=n,r.set(e,i)};history.scrollRestoration=`manual`;let a=t=>{if(!(cr||!e.isScrollRestoring)){if(t.target===document)i(lr,scrollX,scrollY);else{let e=t.target;i(e,e.scrollLeft,e.scrollTop)}}},o=t=>{if(!e.isScrollRestoring)return;let n=ir[t]||={};for(let[e,t]of r)e===lr?n[lr]=t:e.isConnected&&(n[sr(e)]=t)};document.addEventListener(`scroll`,a,!0),e.subscribe(`onBeforeLoad`,e=>{e.fromLocation&&o(n(e.fromLocation)),r.clear()}),addEventListener(`pagehide`,()=>{o(n(e.stores.resolvedLocation.get()??e.stores.location.get())),rr()}),e.subscribe(`onRendered`,t=>{let i=e.options.scrollRestorationBehavior,a=e.options.scrollToTopSelectors,o=e.resetNextScroll,s;if(r.clear(),o||(e.resetNextScroll=!0),typeof e.options.scrollRestoration==`function`&&!e.options.scrollRestoration({location:e.latestLocation}))return;let c=n(t.toLocation),l=t.fromLocation&&n(t.fromLocation);if(e.isScrollRestoring&&l&&l!==c){let e=ir[l];if(e){let t=ir[c];for(let n in e){if(n===lr){if(o)continue}else{let e=ur(n);if(!e||o&&a&&(s??=dr(a),s.includes(e)))continue}t||=ir[c]={},t[n]??=e[n]}}}cr=!0;try{let n=t.toLocation.hash,r=t.toLocation.state.__hashScrollIntoViewOptions??!0,l=!1;if(o){let o=Hn.get(t.toLocation),u=n&&r&&(o===`PUSH`||o===`REPLACE`),d=e.isScrollRestoring?ir[c]:void 0;if(d)for(let e in d){let{scrollX:t,scrollY:n}=d[e];if(e===lr){if(u)continue;scrollTo({top:n,left:t,behavior:i}),l=!0}else{let r=ur(e);r&&(r.scrollLeft=t,r.scrollTop=n)}}if(!l&&!n){let e={top:0,left:0,behavior:i};if(scrollTo(e),a){s??=dr(a);for(let t of s)t.scrollTo(e)}}}!l&&n&&r&&document.getElementById(n)?.scrollIntoView(r)}finally{cr=!1}})}var pr=`Error preloading route! ☝️`,mr=class{get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}constructor(e){if(this.init=e=>{this.originalIndex=e.originalIndex;let t=this.options,n=!t?.path&&!t?.id;this.parentRoute=this.options.getParentRoute?.(),n?this._path=$t:this.parentRoute||st();let r=n?$t:t?.path;r&&r!==`/`&&(r=Ft(r));let i=t?.id||r,a=n?$t:Nt([this.parentRoute.id===`__root__`?``:this.parentRoute.id,i]);r===`__root__`&&(r=`/`),a!==`__root__`&&(a=Nt([`/`,a]));let o=a===`__root__`?`/`:Nt([this.parentRoute.fullPath,r]);this._path=r,this._id=a,this._fullPath=o,this._to=It(o)},this.addChildren=e=>this._addFileChildren(e),this._addFileChildren=e=>(Array.isArray(e)&&(this.children=e),typeof e==`object`&&e&&(this.children=Object.values(e)),this),this._addFileTypes=()=>this,this.updateLoader=e=>(Object.assign(this.options,e),this),this.update=e=>(Object.assign(this.options,e),this),this.lazy=e=>(this.lazyFn=e,this),this.redirect=e=>en({from:this.fullPath,...e}),this.options=e||{},this.isRoot=!e?.getParentRoute,e?.id&&e?.path)throw Error(`Route cannot have both an 'id' and a 'path' option.`)}},hr=class extends mr{constructor(e){super(e)}};function gr(e){let t=e.errorComponent??vr;return(0,z.jsx)(_r,{getResetKey:e.getResetKey,onCatch:e.onCatch,children:({error:n,reset:r})=>n?R.createElement(t,{error:n,reset:r}):e.children})}var _r=class extends R.Component{constructor(...e){super(...e),this.state={error:null}}static getDerivedStateFromProps(e,t){let n=e.getResetKey();return t.error&&t.resetKey!==n?{resetKey:n,error:null}:{resetKey:n}}static getDerivedStateFromError(e){return{error:e}}reset(){this.setState({error:null})}componentDidCatch(e,t){this.props.onCatch&&this.props.onCatch(e,t)}render(){return this.props.children({error:this.state.error,reset:()=>{this.reset()}})}};function vr({error:e}){let[t,n]=R.useState(!1);return(0,z.jsxs)(`div`,{style:{padding:`.5rem`,maxWidth:`100%`},children:[(0,z.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`.5rem`},children:[(0,z.jsx)(`strong`,{style:{fontSize:`1rem`},children:`Something went wrong!`}),(0,z.jsx)(`button`,{style:{appearance:`none`,fontSize:`.6em`,border:`1px solid currentColor`,padding:`.1rem .2rem`,fontWeight:`bold`,borderRadius:`.25rem`},onClick:()=>n(e=>!e),children:t?`Hide Error`:`Show Error`})]}),(0,z.jsx)(`div`,{style:{height:`.25rem`}}),t?(0,z.jsx)(`div`,{children:(0,z.jsx)(`pre`,{style:{fontSize:`.7em`,border:`1px solid red`,borderRadius:`.25rem`,padding:`.3rem`,color:`red`,overflow:`auto`},children:e.message?(0,z.jsx)(`code`,{children:e.message}):null})}):null]})}function yr({children:e,fallback:t=null}){return br()?(0,z.jsx)(R.Fragment,{children:e}):(0,z.jsx)(R.Fragment,{children:t})}function br(){return R.useSyncExternalStore(xr,()=>!0,()=>!1)}function xr(){return()=>{}}var Sr=R.createContext(null);function Cr(e){return R.useContext(Sr)}var wr=R.createContext(void 0),Tr=R.createContext(void 0),Er=(e=>(e[e.None=0]=`None`,e[e.Mutable=1]=`Mutable`,e[e.Watching=2]=`Watching`,e[e.RecursedCheck=4]=`RecursedCheck`,e[e.Recursed=8]=`Recursed`,e[e.Dirty=16]=`Dirty`,e[e.Pending=32]=`Pending`,e))(Er||{});function Dr({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:s};function r(e,t,n){let r=t.depsTail;if(r!==void 0&&r.dep===e)return;let i=r===void 0?t.deps:r.nextDep;if(i!==void 0&&i.dep===e){i.version=n,t.depsTail=i;return}let a=e.subsTail;if(a!==void 0&&a.version===n&&a.sub===t)return;let o=t.depsTail=e.subsTail={version:n,dep:e,sub:t,prevDep:r,nextDep:i,prevSub:a,nextSub:void 0};i!==void 0&&(i.prevDep=o),r===void 0?t.deps=o:r.nextDep=o,a===void 0?e.subs=o:a.nextSub=o}function i(e,t=e.sub){let r=e.dep,i=e.prevDep,a=e.nextDep,o=e.nextSub,s=e.prevSub;return a===void 0?t.depsTail=i:a.prevDep=i,i===void 0?t.deps=a:i.nextDep=a,o===void 0?r.subsTail=s:o.prevSub=s,s===void 0?(r.subs=o)===void 0&&n(r):s.nextSub=o,a}function a(e){let n=e.nextSub,r;top:do{let i=e.sub,a=i.flags;if(a&60?a&12?a&4?!(a&48)&&c(e,i)?(i.flags=a|40,a&=1):a=0:i.flags=a&-9|32:a=0:i.flags=a|32,a&2&&t(i),a&1){let t=i.subs;if(t!==void 0){let i=(e=t).nextSub;i!==void 0&&(r={value:n,prev:r},n=i);continue}}if((e=n)!==void 0){n=e.nextSub;continue}for(;r!==void 0;)if(e=r.value,r=r.prev,e!==void 0){n=e.nextSub;continue top}break}while(!0)}function o(t,n){let r,i=0,a=!1;top:do{let o=t.dep,c=o.flags;if(n.flags&16)a=!0;else if((c&17)==17){if(e(o)){let e=o.subs;e.nextSub!==void 0&&s(e),a=!0}}else if((c&33)==33){(t.nextSub!==void 0||t.prevSub!==void 0)&&(r={value:t,prev:r}),t=o.deps,n=o,++i;continue}if(!a){let e=t.nextDep;if(e!==void 0){t=e;continue}}for(;i--;){let i=n.subs,o=i.nextSub!==void 0;if(o?(t=r.value,r=r.prev):t=i,a){if(e(n)){o&&s(i),n=t.sub;continue}a=!1}else n.flags&=-33;n=t.sub;let c=t.nextDep;if(c!==void 0){t=c;continue top}}return a}while(!0)}function s(e){do{let n=e.sub,r=n.flags;(r&48)==32&&(n.flags=r|16,(r&6)==2&&t(n))}while((e=e.nextSub)!==void 0)}function c(e,t){let n=t.depsTail;for(;n!==void 0;){if(n===e)return!0;n=n.prevDep}return!1}}function Or(e,t,n){let r=typeof e==`object`,i=r?e:void 0;return{next:(r?e.next:e)?.bind(i),error:(r?e.error:t)?.bind(i),complete:(r?e.complete:n)?.bind(i)}}var kr=[],Ar=0,{link:jr,unlink:Mr,propagate:Nr,checkDirty:Pr,shallowPropagate:Fr}=Dr({update(e){return e._update()},notify(e){kr[Lr++]=e,e.flags&=~Er.Watching},unwatched(e){e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=Er.Mutable|Er.Dirty,Vr(e))}}),Ir=0,Lr=0,Rr,zr=0;function Br(e){try{++zr,e()}finally{--zr||Hr()}}function Vr(e){let t=e.depsTail,n=t===void 0?e.deps:t.nextDep;for(;n!==void 0;)n=Mr(n,e)}function Hr(){if(!(zr>0)){for(;Ir{i.get(),n.current?t.next?.(i._snapshot):n.current=!0});return{unsubscribe:()=>{r.stop()}}},_update(e){let a=Rr,o=t?.compare??Object.is;if(n)Rr=i,++Ar,i.depsTail=void 0;else if(e===void 0)return!1;n&&(i.flags=Er.Mutable|Er.RecursedCheck);try{let t=i._snapshot,a=typeof e==`function`?e(t):e===void 0&&n?r(t):e;return t===void 0||!o(t,a)?(i._snapshot=a,!0):!1}finally{Rr=a,n&&(i.flags&=~Er.RecursedCheck),Vr(i)}}};return n?(i.flags=Er.Mutable|Er.Dirty,i.get=function(){let e=i.flags;if(e&Er.Dirty||e&Er.Pending&&Pr(i.deps,i)){if(i._update()){let e=i.subs;e!==void 0&&Fr(e)}}else e&Er.Pending&&(i.flags=e&~Er.Pending);return Rr!==void 0&&jr(i,Rr,Ar),i._snapshot}):i.set=function(e){if(i._update(e)){let e=i.subs;e!==void 0&&(Nr(e),Fr(e),Hr())}},i}function Wr(e){let t=()=>{let t=Rr;Rr=n,++Ar,n.depsTail=void 0,n.flags=Er.Watching|Er.RecursedCheck;try{return e()}finally{Rr=t,n.flags&=~Er.RecursedCheck,Vr(n)}},n={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:Er.Watching|Er.RecursedCheck,notify(){let e=this.flags;e&Er.Dirty||e&Er.Pending&&Pr(this.deps,this)?t():this.flags=Er.Watching},stop(){this.flags=Er.None,this.depsTail=void 0,Vr(this)}};return t(),n}var Gr=o((e=>{var t=f();function n(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var r=typeof Object.is==`function`?Object.is:n,i=t.useState,a=t.useEffect,o=t.useLayoutEffect,s=t.useDebugValue;function c(e,t){var n=t(),r=i({inst:{value:n,getSnapshot:t}}),c=r[0].inst,u=r[1];return o(function(){c.value=n,c.getSnapshot=t,l(c)&&u({inst:c})},[e,n,t]),a(function(){return l(c)&&u({inst:c}),e(function(){l(c)&&u({inst:c})})},[e]),s(n),n}function l(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch{return!0}}function u(e,t){return t()}var d=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?u:c;e.useSyncExternalStore=t.useSyncExternalStore===void 0?d:t.useSyncExternalStore})),Kr=o(((e,t)=>{t.exports=Gr()})),qr=o((e=>{var t=f(),n=Kr();function r(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var i=typeof Object.is==`function`?Object.is:r,a=n.useSyncExternalStore,o=t.useRef,s=t.useEffect,c=t.useMemo,l=t.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,u){var d=o(null);if(d.current===null){var f={hasValue:!1,value:null};d.current=f}else f=d.current;d=c(function(){function e(e){if(!a){if(a=!0,o=e,e=r(e),u!==void 0&&f.hasValue){var t=f.value;if(u(t,e))return s=t}return s=e}if(t=s,i(o,e))return t;var n=r(e);return u!==void 0&&u(t,n)?(o=e,t):(o=e,s=n)}var a=!1,o,s,c=n===void 0?null:n;return[function(){return e(t())},c===null?void 0:function(){return e(c())}]},[t,n,r,u]);var p=a(e,d[0],d[1]);return s(function(){f.hasValue=!0,f.value=p},[p]),l(p),p}})),Jr=o(((e,t)=>{t.exports=qr()}))();function Yr(e,t){return e===t}function Xr(e,t,n=Yr){let r=(0,R.useCallback)(t=>{if(!e)return()=>{};let{unsubscribe:n}=e.subscribe(t);return n},[e]),i=(0,R.useCallback)(()=>e?.get(),[e]);return(0,Jr.useSyncExternalStoreWithSelector)(r,i,i,t,n)}var Zr={get:()=>void 0,subscribe:()=>({unsubscribe:()=>{}})};function Qr(e){let t=Cr(),n=R.useContext(e.from?Tr:wr),r=e.from??n,i=r?e.from?t.stores.getRouteMatchStore(r):t.stores.matchStores.get(r):void 0,a=R.useRef(void 0);return Xr(i??Zr,n=>{if((e.shouldThrow??!0)&&!n&&st(),n===void 0)return;let r=e.select?e.select(n):n;if(e.structuralSharing??t.options.defaultStructuralSharing){let e=Ke(a.current,r);return a.current=e,e}return r})}function $r(e){return Qr({from:e.from,strict:e.strict,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.loaderData):t.loaderData})}function ei(e){let{select:t,...n}=e;return Qr({...n,select:e=>t?t(e.loaderDeps):e.loaderDeps})}function ti(e){return Qr({from:e.from,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,strict:e.strict,select:t=>{let n=e.strict===!1?t.params:t._strictParams;return e.select?e.select(n):n}})}function ni(e){return Qr({from:e.from,strict:e.strict,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.search):t.search})}function ri(e){let t=Cr();return R.useCallback(n=>t.navigate({...n,from:n.from??e?.from}),[e?.from,t])}function ii(e){let t=Cr(),n=ri(),r=R.useRef(null);return Ie(()=>{r.current!==e&&(n(e),r.current=e)},[t,e,n]),null}function ai(e){return Qr({...e,select:t=>e.select?e.select(t.context):t.context})}var oi=m();function si(e,t){let n=Cr(),r=Re(t),{activeProps:i,inactiveProps:a,activeOptions:o,to:s,preload:c,preloadDelay:l,preloadIntentProximity:u,hashScrollIntoView:d,replace:f,startTransition:p,resetScroll:m,viewTransition:h,children:g,target:_,disabled:v,style:y,className:b,onClick:x,onBlur:S,onFocus:C,onMouseEnter:w,onMouseLeave:T,onTouchStart:E,ignoreBlocker:D,params:O,search:k,hash:ee,state:A,mask:j,reloadDocument:te,unsafeRelative:ne,from:re,_fromLocation:M,...N}=e,ie=br(),ae=R.useMemo(()=>e,[n,e.from,e._fromLocation,e.hash,e.to,e.search,e.params,e.state,e.mask,e.unsafeRelative]),oe=Xr(n.stores.location,e=>e,(e,t)=>e.href===t.href),P=R.useMemo(()=>{let e={_fromLocation:oe,...ae};return n.buildLocation(e)},[n,oe,ae]),F=P.maskedLocation?P.maskedLocation.publicHref:P.publicHref,I=P.maskedLocation?P.maskedLocation.external:P.external,se=R.useMemo(()=>gi(F,I,n.history,v),[v,I,F,n.history]),ce=R.useMemo(()=>{if(se?.external)return rt(se.href,n.protocolAllowlist)?void 0:se.href;if(!_i(s)&&typeof s==`string`&&s.indexOf(`:`)!==-1)try{return new URL(s),rt(s,n.protocolAllowlist)?void 0:s}catch{}},[s,se,n.protocolAllowlist]),le=R.useMemo(()=>{if(ce)return!1;if(o?.exact){if(!zt(oe.pathname,P.pathname,n.basepath))return!1}else{let e=Rt(oe.pathname,n.basepath),t=Rt(P.pathname,n.basepath);if(!(e.startsWith(t)&&(e.length===t.length||e[t.length]===`/`)))return!1}return(o?.includeSearch??!0)&&!Ze(oe.search,P.search,{partial:!o?.exact,ignoreUndefined:!o?.explicitUndefined})?!1:!o?.includeHash||ie&&oe.hash===P.hash},[o?.exact,o?.explicitUndefined,o?.includeHash,o?.includeSearch,oe,ce,ie,P.hash,P.pathname,P.search,n.basepath]),ue=le?Be(i,{})??li:ci,de=le?ci:Be(a,{})??ci,fe=[b,ue.className,de.className].filter(Boolean).join(` `),pe=(y||ue.style||de.style)&&{...y,...ue.style,...de.style},[me,he]=R.useState(!1),ge=R.useRef(!1),_e=e.reloadDocument||ce?!1:c??n.options.defaultPreload,ve=l??n.options.defaultPreloadDelay??0,ye=R.useCallback(()=>{n.preloadRoute({...ae,_builtLocation:P}).catch(e=>{console.warn(e),console.warn(pr)})},[n,ae,P]);Le(r,R.useCallback(e=>{e?.isIntersecting&&ye()},[ye]),mi,{disabled:!!v||_e!==`viewport`}),R.useEffect(()=>{ge.current||!v&&_e===`render`&&(ye(),ge.current=!0)},[v,ye,_e]);let be=e=>{let t=e.currentTarget.getAttribute(`target`),r=_===void 0?t:_;if(!v&&!yi(e)&&!e.defaultPrevented&&(!r||r===`_self`)&&e.button===0){e.preventDefault(),(0,oi.flushSync)(()=>{he(!0)});let t=n.subscribe(`onResolved`,()=>{t(),he(!1)});n.navigate({...ae,replace:f,resetScroll:m,hashScrollIntoView:d,startTransition:p,viewTransition:h,ignoreBlocker:D})}};if(ce)return{...N,ref:r,href:ce,...g&&{children:g},..._&&{target:_},...v&&{disabled:v},...y&&{style:y},...b&&{className:b},...x&&{onClick:x},...S&&{onBlur:S},...C&&{onFocus:C},...w&&{onMouseEnter:w},...T&&{onMouseLeave:T},...E&&{onTouchStart:E}};let xe=e=>{if(v||_e!==`intent`)return;if(!ve){ye();return}let t=e.currentTarget;if(pi.has(t))return;let n=setTimeout(()=>{pi.delete(t),ye()},ve);pi.set(t,n)},Se=e=>{v||_e!==`intent`||ye()},Ce=e=>{if(v||!_e||!ve)return;let t=e.currentTarget,n=pi.get(t);n&&(clearTimeout(n),pi.delete(t))};return{...N,...ue,...de,href:se?.href,ref:r,onClick:hi([x,be]),onBlur:hi([S,Ce]),onFocus:hi([C,xe]),onMouseEnter:hi([w,xe]),onMouseLeave:hi([T,Ce]),onTouchStart:hi([E,Se]),disabled:!!v,target:_,...pe&&{style:pe},...fe&&{className:fe},...v&&ui,...le&&di,...ie&&me&&fi}}var ci={},li={className:`active`},ui={role:`link`,"aria-disabled":!0},di={"data-status":`active`,"aria-current":`page`},fi={"data-transitioning":`transitioning`},pi=new WeakMap,mi={rootMargin:`100px`},hi=e=>t=>{for(let n of e)if(n){if(t.defaultPrevented)return;n(t)}};function gi(e,t,n,r){if(!r)return t?{href:e,external:!0}:{href:n.createHref(e)||`/`,external:!1}}function _i(e){if(typeof e!=`string`)return!1;let t=e.charCodeAt(0);return t===47?e.charCodeAt(1)!==47:t===46}var vi=R.forwardRef((e,t)=>{let{_asChild:n,...r}=e,{type:i,...a}=si(r,t),o=typeof r.children==`function`?r.children({isActive:a[`data-status`]===`active`}):r.children;if(!n){let{disabled:e,...t}=a;return R.createElement(`a`,t,o)}return R.createElement(n,a,o)});function yi(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}var bi=class extends mr{constructor(e){super(e),this.useMatch=e=>Qr({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>ai({...e,from:this.id}),this.useSearch=e=>ni({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>ti({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>ei({...e,from:this.id}),this.useLoaderData=e=>$r({...e,from:this.id}),this.useNavigate=()=>ri({from:this.fullPath}),this.Link=R.forwardRef((e,t)=>(0,z.jsx)(vi,{ref:t,from:this.fullPath,...e}))}};function xi(e){return new bi(e)}var Si=class extends hr{constructor(e){super(e),this.useMatch=e=>Qr({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>ai({...e,from:this.id}),this.useSearch=e=>ni({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>ti({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>ei({...e,from:this.id}),this.useLoaderData=e=>$r({...e,from:this.id}),this.useNavigate=()=>ri({from:this.fullPath}),this.Link=R.forwardRef((e,t)=>(0,z.jsx)(vi,{ref:t,from:this.fullPath,...e}))}};function Ci(e){return new Si(e)}function wi(e){let t=Cr(),n=`not-found-${Xr(t.stores.location,e=>e.pathname)}-${Xr(t.stores.status,e=>e)}`;return(0,z.jsx)(gr,{getResetKey:()=>n,onCatch:(t,n)=>{if(Gt(t))e.onCatch?.(t,n);else throw t},errorComponent:({error:t})=>{if(Gt(t))return e.fallback?.(t);throw t},children:e.children})}function Ti(){return(0,z.jsx)(`p`,{children:`Not Found`})}function Ei(e){return(0,z.jsx)(z.Fragment,{children:e.children})}function Di(e,t,n){return t.options.notFoundComponent?(0,z.jsx)(t.options.notFoundComponent,{...n}):e.options.defaultNotFoundComponent?(0,z.jsx)(e.options.defaultNotFoundComponent,{...n}):(0,z.jsx)(Ti,{})}var Oi=R.memo(function({matchId:e}){let t=Cr(),n=t.stores.matchStores.get(e);n||st();let r=Xr(t.stores.loadedAt,e=>e),i=Xr(n,e=>e);return(0,z.jsx)(ki,{router:t,matchId:e,resetKey:r,matchState:R.useMemo(()=>{let e=i.routeId,n=t.routesById[e].parentRoute?.id;return{routeId:e,ssr:i.ssr,_displayPending:i._displayPending,parentRouteId:n}},[i._displayPending,i.routeId,i.ssr,t.routesById])})});function ki({router:e,matchId:t,resetKey:n,matchState:r}){let i=e.routesById[r.routeId],a=i.options.pendingComponent??e.options.defaultPendingComponent,o=a?(0,z.jsx)(a,{}):null,s=i.options.errorComponent??e.options.defaultErrorComponent,c=i.options.onCatch??e.options.defaultOnCatch,l=i.isRoot?i.options.notFoundComponent??e.options.notFoundRoute?.options.component:i.options.notFoundComponent,u=r.ssr===!1||r.ssr===`data-only`,d=(!i.isRoot||i.options.wrapInSuspense||u)&&(i.options.wrapInSuspense??a??(i.options.errorComponent?.preload||u))?R.Suspense:Ei,f=s?gr:Ei,p=l?wi:Ei;return(0,z.jsxs)(i.isRoot?i.options.shellComponent??Ei:Ei,{children:[(0,z.jsx)(wr.Provider,{value:t,children:(0,z.jsx)(d,{fallback:o,children:(0,z.jsx)(f,{getResetKey:()=>n,errorComponent:s||vr,onCatch:(e,t)=>{if(Gt(e))throw e.routeId??=r.routeId,e;c?.(e,t)},children:(0,z.jsx)(p,{fallback:e=>{if(e.routeId??=r.routeId,!l||e.routeId&&e.routeId!==r.routeId||!e.routeId&&!i.isRoot)throw e;return R.createElement(l,e)},children:u||r._displayPending?(0,z.jsx)(yr,{fallback:o,children:(0,z.jsx)(ji,{matchId:t})}):(0,z.jsx)(ji,{matchId:t})})})})}),r.parentRouteId===`__root__`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(Ai,{resetKey:n}),(e.options.scrollRestoration,null)]}):null]})}function Ai({resetKey:e}){let t=Cr(),n=R.useRef(void 0);return Ie(()=>{let e=t.latestLocation.href;(n.current===void 0||n.current!==e)&&(t.emit({type:`onRendered`,...Vn(t.stores.location.get(),t.stores.resolvedLocation.get())}),n.current=e)},[t.latestLocation.state.__TSR_key,e,t]),null}var ji=R.memo(function({matchId:e}){let t=Cr(),n=(e,n)=>t.getMatch(e.id)?._nonReactive[n]??e._nonReactive[n],r=t.stores.matchStores.get(e);r||st();let i=Xr(r,e=>e),a=i.routeId,o=t.routesById[a],s=R.useMemo(()=>{let e=(t.routesById[a].options.remountDeps??t.options.defaultRemountDeps)?.({routeId:a,loaderDeps:i.loaderDeps,params:i._strictParams,search:i._strictSearch});return e?JSON.stringify(e):void 0},[a,i.loaderDeps,i._strictParams,i._strictSearch,t.options.defaultRemountDeps,t.routesById]),c=R.useMemo(()=>{let e=o.options.component??t.options.defaultComponent;return e?(0,z.jsx)(e,{},s):(0,z.jsx)(Mi,{})},[s,o.options.component,t.options.defaultComponent]);if(i._displayPending)throw n(i,`displayPendingPromise`);if(i._forcePending)throw n(i,`minPendingPromise`);if(i.status===`pending`){let e=o.options.pendingMinMs??t.options.defaultPendingMinMs;if(e){let n=t.getMatch(i.id);if(n&&!n._nonReactive.minPendingPromise){let t=Qe();n._nonReactive.minPendingPromise=t,setTimeout(()=>{t.resolve(),n._nonReactive.minPendingPromise=void 0},e)}}throw n(i,`loadPromise`)}if(i.status===`notFound`)return Gt(i.error)||st(),Di(t,o,i.error);if(i.status===`redirected`)throw tn(i.error)||st(),n(i,`loadPromise`);if(i.status===`error`)throw i.error;return c}),Mi=R.memo(function(){let e=Cr(),t=R.useContext(wr),n,r=!1,i;{let a=t?e.stores.matchStores.get(t):void 0;[n,r]=Xr(a,e=>[e?.routeId,e?.globalNotFound??!1]),i=Xr(e.stores.matchesId,e=>e[e.findIndex(e=>e===t)+1])}let a=n?e.routesById[n]:void 0,o=e.options.defaultPendingComponent?(0,z.jsx)(e.options.defaultPendingComponent,{}):null;if(r)return a||st(),Di(e,a,void 0);if(!i)return null;let s=(0,z.jsx)(Oi,{matchId:i});return n===`__root__`?(0,z.jsx)(R.Suspense,{fallback:o,children:s}):s});function Ni(){let e=Cr(),t=R.useRef({router:e,mounted:!1}),[n,r]=R.useState(!1),i=Xr(e.stores.isLoading,e=>e),a=Xr(e.stores.hasPending,e=>e),o=B(i),s=i||n||a,c=B(s),l=i||a,u=B(l);return e.startTransition=e=>{r(!0),R.startTransition(()=>{e(),r(!1)})},R.useEffect(()=>{let t=e.history.subscribe(e.load),n=e.buildLocation({to:e.latestLocation.pathname,search:!0,params:!0,hash:!0,state:!0,_includeValidateSearch:!0});return It(e.latestLocation.publicHref)!==It(n.publicHref)&&e.commitLocation({...n,replace:!0}),()=>{t()}},[e,e.history]),Ie(()=>{typeof window<`u`&&e.ssr||t.current.router===e&&t.current.mounted||(t.current={router:e,mounted:!0},(async()=>{try{await e.load()}catch(e){console.error(e)}})())},[e]),Ie(()=>{o&&!i&&e.emit({type:`onLoad`,...Vn(e.stores.location.get(),e.stores.resolvedLocation.get())})},[o,e,i]),Ie(()=>{u&&!l&&e.emit({type:`onBeforeRouteMount`,...Vn(e.stores.location.get(),e.stores.resolvedLocation.get())})},[l,u,e]),Ie(()=>{if(c&&!s){let t=Vn(e.stores.location.get(),e.stores.resolvedLocation.get());e.emit({type:`onResolved`,...t}),Br(()=>{e.stores.status.set(`idle`),e.stores.resolvedLocation.set(e.stores.location.get())})}},[s,c,e]),null}function Pi(){let e=Cr(),t=e.routesById.__root__.options.pendingComponent??e.options.defaultPendingComponent,n=t?(0,z.jsx)(t,{}):null,r=(0,z.jsxs)(typeof document<`u`&&e.ssr?Ei:R.Suspense,{fallback:n,children:[(0,z.jsx)(Ni,{}),(0,z.jsx)(Fi,{})]});return e.options.InnerWrap?(0,z.jsx)(e.options.InnerWrap,{children:r}):r}function Fi(){let e=Cr(),t=Xr(e.stores.firstId,e=>e),n=Xr(e.stores.loadedAt,e=>e),r=t?(0,z.jsx)(Oi,{matchId:t}):null;return(0,z.jsx)(wr.Provider,{value:t,children:e.options.disableGlobalCatchBoundary?r:(0,z.jsx)(gr,{getResetKey:()=>n,errorComponent:vr,onCatch:void 0,children:r})})}var Ii=e=>({createMutableStore:Ur,createReadonlyStore:Ur,batch:Br}),Li=e=>new Ri(e),Ri=class extends Un{constructor(e){super(e,Ii)}};function zi({router:e,children:t,...n}){Ue(n)&&e.update({...e.options,...n,context:{...e.options.context,...n.context}});let r=(0,z.jsx)(Sr.Provider,{value:e,children:t});return e.options.Wrap?(0,z.jsx)(e.options.Wrap,{children:r}):r}function Bi({router:e,...t}){return(0,z.jsx)(zi,{router:e,...t,children:(0,z.jsx)(Pi,{})})}var Vi=g(),Hi=(0,R.createContext)(null),Ui=`loopx-pw-locale`,Wi={en:{"common.actions":`Actions`,"common.agent":`Agent`,"common.allMessages":`All messages`,"common.cancel":`Cancel`,"common.close":`Close`,"common.closeActionReceipt":`Close action receipt`,"common.confirm":`Confirm`,"common.export":`Export`,"common.failed":`Failed`,"common.goal":`Goal`,"common.loading":`Loading…`,"common.none":`None`,"common.off":`Off`,"common.on":`On`,"common.open":`Open`,"common.owner":`Owner`,"common.readOnly":`Read only`,"common.recently":`Just now`,"common.status":`Status`,"common.task":`Task`,"common.you":`You`,"common.waiting":`Waiting`,"composer.addImage":`Add image`,"composer.agentProgress":`Ask Agent for a progress report`,"composer.agentProgressPrompt":`Give me a progress report for this Goal: completed, running, blocked, and next steps.`,"composer.attachImageHint":`Choose, paste, or drag an image`,"composer.clarifyDefer":`Deferring a Todo requires a deterministic resume condition. Add todo_done:, pr_merged:[owner/repo]#, or capacity_available:.`,"composer.clarifySingleAction":`This message contains multiple operations that may change state. Describe one operation at a time so each confirmation preview can be reviewed separately.`,"composer.createGoal":`Create Goal`,"composer.createGoalDraft":`Goal draft`,"composer.createGoalDraftDescription":`Complete the draft and send it. LoopX will show a confirmation preview first.`,"composer.createGoalDraftLead":`Create a long-term Goal:`,"composer.createGoalTemplate":`Create a long-term Goal: +Objective: +Completion criteria: +Execution boundary (optional): +Related repository (optional): +Notification method (optional):`,"composer.createGoalHint":`Insert a Goal template to review before creation`,"composer.draft":`Draft`,"composer.globalProgress":`Summarize all Goal progress`,"composer.globalProgressPrompt":`Summarize the latest progress and blockers for all active Goals.`,"composer.globalTasks":`Ask about global priorities`,"composer.globalTasksPrompt":`Which Goals need me, and what should I handle first?`,"composer.goalMessageHint":`Your message is delivered to {agent} in this Goal session.`,"composer.goalRunningHint":`{agent} is running {count} tasks · your message enters this session as guidance without interrupting it`,"composer.goalPlaceholder":`Ask or guide {goal}…`,"composer.imageAnalysisPrompt":`Analyze these images in the context of the current Goal and tell me the next step.`,"composer.imageCountError":`You can add up to {count} images.`,"composer.imagePicker":`Image file picker`,"composer.imageReadError":`Could not read image {name}.`,"composer.imageReadGenericError":`Could not read the image.`,"composer.imageSizeError":`Each image must be {size} MB or smaller.`,"composer.imageTypeError":`PNG, JPEG, WebP, and GIF images are supported.`,"composer.imagesPending":`Images to send`,"composer.immediate":`Send now`,"composer.managerMessageHint":`Your message goes to the LoopX Manager across Goals for global questions or Goal creation.`,"composer.managerPlaceholder":`Ask the LoopX Manager, or describe a new Goal…`,"composer.monitor":`Configure scheduled check`,"composer.monitorGoalQuestion":`Which Goal should receive the scheduled check?`,"composer.monitorTemplate":`Add a scheduled check for the current Goal: +Check target: +Frequency (supports 30 minutes / 2 hours / daily): Every 2 hours +Stop condition: Goal completes`,"composer.monitorTemplateWithoutGoal":`Configure a scheduled check: +Goal: +Check target: +Frequency: Every 2 hours +Stop condition: Goal completes`,"composer.monitorHint":`Fill in what to check, frequency, and stop condition before creation`,"composer.heartbeatGoalQuestion":`Which Goal should receive the Heartbeat?`,"composer.heartbeatTemplate":`Set a Heartbeat for the current Goal: +Frequency: Daily +Stop condition: Goal completes +Notification: Only notify me when needed`,"composer.heartbeatTemplateWithoutGoal":`Set up a Heartbeat: +Goal: +Frequency: Daily +Stop condition: Goal completes +Notification: Only notify me when needed`,"composer.nextAction":`Ask what’s next`,"composer.nextActionPrompt":`What should I do next?`,"composer.prepareDraft":`Insert a draft and review before sending`,"composer.send":`Send`,"composer.sendMessage":`Send a message to LoopX`,"composer.sendMessageHint":`Send message`,"composer.sentImageAlt":`Remove image {name}`,"conversation.agentPending":`Working…`,"conversation.close":`Close conversation receipt`,"conversation.convertHint":`Turn the Agent’s latest reply into a Task draft`,"conversation.full":`View full conversation`,"conversation.receipt":`Conversation receipt`,"conversation.replying":`Replying`,"conversation.title":`Manager conversation`,"conversation.toTask":`Convert to Task`,"digest.away":`Runs since your previous visit`,"digest.completed":`new completions`,"digest.failed":`new failed/interrupted runs`,"digest.needsYou":`currently need confirmation`,"feedback.applying":`Running: {title}`,"feedback.cancelFailed":`Cancel failed: {error}`,"feedback.completed":`Completed: {title}`,"feedback.executionFailed":`Execution failed: {error}`,"feedback.gateRequired":`Your confirmation is required: {summary}`,"feedback.notCompleted":`Not completed: {status}`,"feedback.goalRefreshFailed":`The Goal opened, but its latest state could not be refreshed. Use Refresh to try again.`,"feedback.preparingPreview":`Preparing confirmation preview: {title}`,"feedback.previewFailed":`Could not prepare the confirmation preview: {error}`,"feedback.sendFailed":`Send failed: {error}`,"feedback.sendGenericError":`Could not send the message. Try again later.`,"feedback.stale":`State changed, so nothing was applied. Generate a new confirmation preview.`,"feedback.taskDraftCreated":`Created a Task draft from the reply. Edit and send it to review the confirmation preview.`,"goal.defaultTitle":`New personal Goal`,"goal.initialTodo":`Work toward the completion criteria: {criteria}`,"goal.objectiveBoundary":`Execution boundary: {boundary}`,"goal.objectiveCompletion":`Completion criteria: {criteria}`,"drawer.advancedDiagnostics":`Advanced diagnostics`,"drawer.agentWorking":`Agent is continuing; the record updates automatically.`,"drawer.analysis":`Analyzing`,"drawer.apply":`Confirm and apply`,"drawer.applying":`Applying…`,"drawer.attentionBlocking":`Blocking an Agent`,"drawer.attentionWaiting":`Waiting for your decision`,"drawer.autoNotify":`Human-gate auto notifications`,"drawer.branch":`Branch`,"drawer.closeDetail":`Close details and return to {context}`,"drawer.connected":`Connected`,"drawer.correctionDescription":`The message keeps the current Goal, Todo, and Agent Session context.`,"drawer.correctionLabel":`Guide {agent}`,"drawer.correctionPlaceholder":`For example: focus on permission risks first and do not commit yet…`,"drawer.correctionSend":`Send guidance`,"drawer.correctionTextarea":`Enter guidance for Goal {goal}, Agent {agent}, Run {run}`,"drawer.copyRepository":`Copy repository identity`,"drawer.copyRepositoryDone":`Repository identity copied`,"drawer.copyRepositoryError":`Copy failed. Check browser clipboard permission.`,"drawer.copyRepositorySuccess":`Copied. You can paste it into another tool.`,"drawer.cost":`Cost 24h / 7d`,"drawer.costShort":`Cost`,"drawer.durationShort":`Duration`,"drawer.period24h":`24h`,"drawer.period7d":`7d`,"drawer.tokens":`Tokens 24h / 7d`,"drawer.tokensShort":`tokens`,"drawer.usageNotMeasured":`Not measured`,"drawer.currentGoal":`Current Goal`,"drawer.decisionDefaultEvidence":`No additional public-safe evidence is attached. The next step will still show a Preview first.`,"drawer.decisionDefaultReason":`This decision affects the next step of the current Todo.`,"drawer.decisionDefer":`Decide later`,"drawer.decisionMore":`More decisions`,"drawer.decisionReject":`Reject`,"drawer.decisionReview":`Review impact and decide`,"drawer.dependencies":`Dependencies`,"drawer.detailsAndActions":`Details & actions`,"drawer.duration":`Duration 24h / 7d`,"drawer.evidence":`Evidence`,"drawer.executionHistory":`Execution history`,"drawer.executionRecord":`Run record`,"drawer.executionRecordAndResult":`Execution & result`,"drawer.explainDecision":`Explain this decision`,"drawer.gateApproveHint":`Run one command in the terminal to complete approval:`,"drawer.gateRejectHint":`Replace approve with reject at the end to decline. This notice disappears after the command runs.`,"drawer.gateRequiresHost":`Host confirmation required`,"drawer.gateRequiresHostDescription":`This page cannot approve this protected permission change. Nothing was written by your click.`,"drawer.goalAutoRun":`Automatic runs for this Goal`,"drawer.goalChanges":`Pending changes for this Goal`,"drawer.goalDetails":`Goal details`,"drawer.group":`Group`,"drawer.inspectorFull":`Switch to full screen`,"drawer.inspectorFullView":`Full-screen view`,"drawer.inspectorHalf":`Switch to half screen`,"drawer.inspectorHalfView":`Half-screen view`,"drawer.lastNotification":`Latest notification`,"drawer.larkConfigure":`Configure Lark connection`,"drawer.larkConnect":`Connect Lark App`,"drawer.larkConnection":`Lark connection`,"drawer.larkNotConfigured":`Not configured`,"drawer.larkNotConfiguredDescription":`After setup, LoopX sends a Feishu notification when this Goal needs your confirmation.`,"drawer.managerChanges":`Pending Manager changes`,"drawer.moreActions":`More actions`,"drawer.moreRunActions":`More run actions`,"drawer.nextTransition":`Next transition`,"drawer.noExecutionHistory":`No execution history yet.`,"drawer.noRun":`Execution Session has not started`,"drawer.noRunDescription":`Run records will appear here after an Agent starts execution.`,"drawer.notAssigned":`Unassigned`,"drawer.notLinked":`Not linked`,"drawer.notSet":`Not set`,"drawer.outputDetails":`Output details`,"drawer.outputRecorded":`This output is recorded on the current Goal.`,"drawer.outputSafePreview":`Public-safe output preview`,"drawer.outputRun":`Run`,"drawer.outputTodo":`Todo`,"drawer.outputs":`Outputs from this run`,"drawer.previewUnavailable":`No public-safe inline preview is available for this output.`,"drawer.priority":`Priority`,"drawer.progress":`Progress`,"drawer.proposalApplied":`Applied. LoopX state will refresh.`,"drawer.proposalApplyFailed":`Apply failed. No changes were written.`,"drawer.proposalApplyFailedHint":`Refresh the Goal state and regenerate. If it still fails, keep this page open and inspect advanced diagnostics.`,"drawer.proposalClose":`Close`,"drawer.proposalDefer":`Later`,"drawer.proposalDeferred":`Deferred. You can apply it later or regenerate it.`,"drawer.proposalEnterGoal":`Open new Goal`,"drawer.proposalExplainer":`After confirmation, LoopX applies this change and shows the write result. Closing or canceling changes nothing.`,"drawer.proposalRecheck":`Recheck against latest state`,"drawer.proposalRegenerate":`Retry with latest state`,"drawer.proposalRejected":`Rejected. This change will not be written.`,"drawer.proposalStale":`Source state changed. Recheck against the latest state.`,"drawer.proposalViewGoal":`View updated Goal`,"drawer.reassign":`Reassign to`,"drawer.reassignSummary":`Reassign: {task}`,"drawer.reason":`Reason`,"drawer.recoveryDescription":`Local history is preserved. Choose a recovery path.`,"drawer.recoveryFailed":`Upstream Session recovery failed`,"drawer.recoveryNewSession":`Start a new Session with context`,"drawer.recoveryRetry":`Retry recovery`,"drawer.repositoryRole":`Execution workspace`,"drawer.repository":`Repository`,"drawer.replyMode":`Reply mode`,"drawer.subagentApplied":`Applied and verified against the shared Goal state.`,"drawer.subagentAppliedRefreshFailed":`Applied and verified. The status view could not refresh; retry the page refresh later.`,"drawer.subagentApplying":`Applying and verifying shared-state readback…`,"drawer.subagentApplyFailed":`Could not apply the sub-agent setting.`,"drawer.subagentChildLimit":`Current limit`,"drawer.subagentConfirmDisable":`Confirm turning off sub-agent execution`,"drawer.subagentConfirmEnable":`Confirm turning on sub-agent execution`,"drawer.subagentCurrentBoundary":`Current task-domain restriction`,"drawer.subagentDescription":`Allows the runtime to create temporary child agents for independent tasks only after Todo, quota, capability, and write-scope gates pass. It does not force parallel work or grant durable authority.`,"drawer.subagentDisable":`Preview turning off sub-agent execution`,"drawer.subagentDisableSummary":`New child-agent execution will be disabled for this Goal. Existing Todo ownership and execution records stay unchanged.`,"drawer.subagentDomainInvalid":`The selected task-domain restriction is invalid.`,"drawer.subagentDomainTodoCount":`{count} matching open Todos`,"drawer.subagentDomains":`Task-domain restriction (optional)`,"drawer.subagentDomainsEmpty":`No open advancement Todo declares task_domain. Leave this empty to keep child execution unrestricted by task domain.`,"drawer.subagentDomainsHint":`Leave every option clear to apply no task-domain filter. Selecting domains admits only matching typed Todos; all other execution gates still apply.`,"drawer.subagentDomainsUnrestricted":`No task-domain restriction`,"drawer.subagentEnable":`Preview turning on sub-agent execution`,"drawer.subagentLabel":`Per-Goal execution boundary`,"drawer.subagentMaxChildren":`Maximum child agents`,"drawer.subagentNoChange":`The current Goal already matches this setting; nothing was written.`,"drawer.subagentPending":`Pending confirmation`,"drawer.subagentPreviewBoundary":`Preview boundary update`,"drawer.subagentPreviewFailed":`Could not create the sub-agent setting preview.`,"drawer.subagentPreviewing":`Checking the latest Goal state…`,"drawer.subagentPreviewReady":`Preview locked. Confirm to apply this Goal setting.`,"drawer.subagentPreviewSummary":`Allow up to {count} child agents. Task-domain restriction: {domains}.`,"drawer.subagentRemoteReadOnly":`This source is read only. Open the Goal on its host to change the setting.`,"drawer.subagentTitle":`Adaptive sub-agent execution`,"drawer.remoteDetailsDescription":`SSH sources expose public-safe status only and do not read connection settings from the source host.`,"drawer.remoteDetailsUnavailable":`Remote details are not projected`,"drawer.resumeNo":`No`,"drawer.resumeYes":`Yes`,"drawer.runDetails":`Execution Session`,"drawer.runInterrupt":`Interrupt this run`,"drawer.runLatest":`View latest execution`,"drawer.runNewSession":`Start new Session`,"drawer.runCloseSession":`Close Session`,"drawer.runRecordEmpty":`No run record yet. The Agent has not started this execution. Check waiting conditions or resume the Session under Details & actions.`,"drawer.runRecordProjected":`No step-by-step record is available. LoopX read {completed}/{total} projected steps{outputs}; inspect the Session under Details & actions.`,"drawer.runRecordProjectedOutputs":` and {count} outputs`,"drawer.runRoleAssistant":`Completed`,"drawer.runRoleSystem":`Needs review`,"drawer.runRoleUser":`Task received`,"drawer.runView":`Session views`,"drawer.scheduleAdd":`Add scheduled check`,"drawer.scheduleDefaultNotification":`Notify only when you are needed`,"drawer.scheduleDefaultStop":`Goal completes or owner stops it`,"drawer.scheduleDefaultTarget":`Wake according to this Goal’s LoopX schedule.`,"drawer.scheduleEdit":`Change to every 2 hours`,"drawer.scheduleLast":`Last run`,"drawer.scheduleLocalTimezone":`Local timezone`,"drawer.scheduleNext":`Next run`,"drawer.scheduleNeverRun":`Not run yet`,"drawer.scheduleNotification":`Notification`,"drawer.schedulePause":`Pause`,"drawer.schedulePending":`Waiting for schedule`,"drawer.scheduleResume":`Resume`,"drawer.scheduleRunNow":`Run now`,"drawer.scheduleStop":`Stop {kind}`,"drawer.scheduleStopCondition":`Stop condition`,"drawer.scheduleTimezone":`Timezone`,"drawer.sessionRecoverable":`Resumable`,"drawer.sessionStatus":`Session status`,"drawer.setupHeartbeat":`Set up Heartbeat`,"drawer.taskActions":`Pending Todo actions`,"drawer.taskAdvancement":`Advancement task`,"drawer.taskBlock":`Mark blocked`,"drawer.taskComplete":`Mark complete`,"drawer.taskCompletedNote":`This task is retained as a read-only record.`,"drawer.taskCompletedTitle":`Task completed`,"drawer.taskDefer":`Defer`,"drawer.taskDeferCondition":`Todo defer resume condition`,"drawer.taskDeferInvalid":`Unsupported condition format; use one of the three deterministic conditions below.`,"drawer.taskDeferPlaceholder":`For example, pr_merged:owner/repo#123`,"drawer.taskDeferReview":`Review defer`,"drawer.taskDeferSupported":`Supports todo_done, pr_merged, and capacity_available conditions.`,"drawer.taskDeferUntil":`Defer until`,"drawer.taskDetails":`Todo details`,"drawer.taskInfo":`Task information`,"drawer.taskManage":`Manage task`,"drawer.taskNextCompleted":`Create a follow-up task`,"drawer.taskNextOpen":`Advance or update status`,"drawer.taskOrdinary":`Task`,"drawer.taskStatusBlocked":`Blocked`,"drawer.taskStatusDeferred":`Deferred`,"drawer.resumeWhen":`Resume condition`,"drawer.taskNextDeferred":`Wait for the resume condition, then reassess`,"drawer.taskStatusCompleted":`Completed`,"drawer.taskStatusOpen":`Ready`,"drawer.taskSuccessor":`Create follow-up Todo`,"drawer.taskSuccessorNote":`Owner marked this blocked while waiting for more context.`,"drawer.taskSuccessorSummary":`Create follow-up Todo: {task}`,"drawer.taskSuccessorText":`Follow-up work for {task}`,"drawer.taskType":`Task type`,"drawer.topic":`Topic`,"drawer.trigger":`Trigger`,"drawer.titleAttention":`Needs you`,"drawer.titleOutput":`Output details`,"drawer.titleProposalApplied":`Execution result`,"drawer.titleProposalConfirm":`Confirm execution`,"drawer.titleSchedule":`Scheduled check`,"drawer.unconfigured":`Not configured`,"drawer.workspaceCandidates":`Available workspaces`,"files.emptySummary":`Public-safe output`,"files.empty":`No files, outputs, or verified reports yet.`,"files.loadingReports":`Loading verified milestone reports…`,"files.reportDelta":`+{added} added · {changed} changed`,"files.reportAdded":`added`,"files.reportChanged":`changed`,"files.reportGeneration":`Generation`,"files.reportLoadFailed":`Could not load verified reports`,"files.reportPublication":`Publication`,"files.title":`Files & Outputs`,"files.verifiedReport":`Verified milestone report`,"header.agentUnavailable":`Unavailable`,"header.chatRuntime":`Chat`,"header.workAgentCount":`{count} work Agents`,"header.chat":`Chat`,"header.files":`Files`,"header.goalCapabilities":`Capability settings`,"header.goalCapabilitiesDescription":`Manage overrides and inherited machine defaults.`,"header.goalDetails":`Goal details`,"header.goalDetailsDescription":`Review status, usage, repository, notifications, and sessions.`,"header.goalSettings":`Goal settings`,"header.goalSettingsDescription":`Open Goal details or capability settings`,"header.goalNavigation":`Goal navigation`,"header.goalView":`Goal view`,"header.live":`Live`,"header.manager":`LoopX Manager`,"header.managerDescription":`Your personal workspace across Goals`,"header.managerOverview":`Overview`,"header.managerView":`Manager view`,"header.openGoalNavigation":`Open Goal navigation`,"header.readOnlySourceDescription":`{source} is displayed read-only through an SSH tunnel`,"header.refresh":`Refresh status`,"header.refreshDone":`Updated just now`,"header.refreshFailed":`Refresh failed`,"header.refreshing":`Refreshing`,"header.selectAgent":`Select Agent`,"header.selectChatRuntime":`Select chat runtime`,"header.tasks":`Tasks`,"header.themeBrutal":`Switch to brutal theme`,"header.themePaper":`Switch to default theme`,"home.blockingSummary":`{count} are blocking an Agent.`,"home.completedGoals":`Completed Goals`,"home.empty":`Nothing here`,"startup.goalLoading":`Loading status…`,"startup.goalError":`Could not load status`,"startup.progress":`{loaded} of {total} active Goals loaded`,"startup.partial":`Goal states are updating. Counts are incomplete.`,"startup.independent":`Other Goals remain available while this Goal loads.`,"startup.error.timeout":`The request timed out. Retry when the local service is ready.`,"startup.error.network":`The connection was interrupted. Retry to reconnect.`,"startup.error.service":`The local service is temporarily unavailable. Retry to continue.`,"startup.error.revision":`The Goal directory changed during loading. Refresh to synchronize.`,"startup.error.scope":`This Goal is no longer available in the selected source. Refresh the directory.`,"startup.error.invalid":`The status response could not be read. Refresh or check for a LoopX update.`,"startup.retry":`Retry`,"startup.retryFailed":`Retry failed Goals`,"startup.failedCount":`{count} Goals could not be loaded. Ready Goals remain available.`,"home.greeting":`Hi, I’m your LoopX Manager`,"home.history":`History`,"home.lane.needsYou":`Needs you`,"home.lane.needsYouDescription":`Waiting for your decision, authorization, or context`,"home.lane.observing":`Observing`,"home.lane.observingDescription":`Monitoring continuously and notifying you when something changes`,"home.lane.running":`Running`,"home.lane.runningDescription":`Agents are making progress and reporting back`,"home.lane.scheduled":`Scheduled`,"home.lane.scheduledDescription":`Queued until its time or prerequisite arrives`,"home.noActivity":`No activity yet`,"home.noFirstActivity":`Waiting for first activity`,"home.noCompletedGoals":`No completed Goals yet`,"home.preservedState":`State is preserved and can be resumed`,"home.stopped":`Stopped`,"home.systemHealth":`System health: {summary}`,"home.taskCount":`{count} Tasks`,"home.todayAt":`Today {time}`,"home.waitingCount":`You have {count} items to handle.`,"home.workspace":`Goal workspace`,"lark.allMessages":`All messages in this topic`,"lark.allTopicMessages":`All topic messages`,"lark.agentIngress":`Agent ingress`,"lark.agentAppPermissions":`Every selected Agent needs a Lark App that is ready for group mentions and replies.`,"lark.agentApps":`Lark App per Agent`,"lark.agentAppsDescription":`The default App is preselected. Assign a different compatible App when an Agent needs its own bot identity.`,"lark.agentAppSelection":`Lark App for {agent}`,"lark.appCreated":`App created`,"lark.appCreateFailed":`Creation failed`,"lark.appLoading":`Loading available Lark Apps…`,"lark.appPermissions":`This App can send connection messages, but lacks the bot permissions required to receive group mentions or reply automatically. Enable im:message.group_at_msg:readonly, im:message.send_as_bot, and the im.message.receive_v1 event, publish a new version, then refresh.`,"lark.appProfile":`Lark App`,"lark.apps":`Lark Apps`,"lark.autoReplyUnavailable":`Auto reply unavailable`,"lark.autoReplyReady":`Auto reply ready`,"lark.bindGoal":`Bind to Goal`,"lark.cancel":`Cancel`,"lark.cardinality":`One Lark App · many Goals · one isolated route per Agent`,"lark.capture":`Capture`,"lark.captureAddressed":`Only messages that mention or reply to the App`,"lark.captureAll":`All messages in this Goal topic`,"lark.captureScope":`Capture scope`,"lark.captureScopeDescription":`Controls which Topic messages enter LoopX without expanding Agent permissions.`,"lark.closeConnection":`Close connection dialog`,"lark.closeCreate":`Close create dialog`,"lark.closeSettings":`Close Lark settings`,"lark.connect":`Connect`,"lark.connectAllAgents":`Connect every registered Agent`,"lark.connectAllAgentsAction":`Connect {count} Agents`,"lark.connectAllAgentsDescription":`Create {count} isolated Agent Topics in one guided action. Send requests inside the matching Topic; each Agent keeps its own route and inbox.`,"lark.connectApp":`Connect Lark App`,"lark.connection":`Connection`,"lark.connections":`Connections`,"lark.configuration":`Lark configuration`,"lark.continueFeishu":`Continue in Feishu`,"lark.createAutomatically":`Create Goal topic automatically`,"lark.createAutomaticallyDescription":`A dedicated, Agent-labelled Topic will be created for every selected Agent.`,"lark.defaultAgentAppDescription":`Used to find the target group and as the default for every selected Agent. Per-Agent choices below override it.`,"lark.description":`Manage reusable Lark Apps and connect group chats to Goals through dedicated topics.`,"lark.editConnection":`Edit Lark Connection`,"lark.goalConnections":`{count} Goal connections`,"lark.goalTopicConnections":`Lark Goal Topic connections`,"lark.groupChat":`Group chat`,"lark.groupEmpty":`This bot has not joined a group that can be connected. Add it to a Feishu group first, then return to refresh or search.`,"lark.groupLoading":`Reading groups joined by this bot…`,"lark.groupSearch":`Search groups joined by this bot`,"lark.historyPermission":`Group-history permission (separate capability)`,"lark.health.eventProcessed":`{events} events processed, {replies} replies sent.`,"lark.health.eventUnverified":`Event subscription needs verification`,"lark.health.eventUnverifiedDetail":`The provider listener is ready, but no event has arrived. Enable im.message.receive_v1 and group mention permissions, publish a new version, then send a new @ mention inside this Agent Topic. Group-level messages fail closed when multiple Agent routes exist.`,"lark.health.ignoredSelf":`The bot’s own message was ignored to prevent duplicate replies.`,"lark.health.invalidRouting":`Invalid routing configuration`,"lark.health.invalidRoutingDetail":`The connection was safely disabled. Select a processing mode again and save.`,"lark.health.lastStatus":`Latest event status: {status}`,"lark.health.listening":`Listening`,"lark.health.messageContextPermission":`Message permission required`,"lark.health.messageContextPermissionDetail":`A message event arrived, but group context could not be read. Publish and authorize group message read access for this App.`,"lark.health.notAddressed":`Latest message did not directly @ the bot`,"lark.health.notAddressedDetail":`Listening is healthy. This connection only responds to direct @ mentions or replies to the bot.`,"lark.health.notStarted":`Listener not started`,"lark.health.notStartedDetail":`Refresh the connection or restart LoopX, then try again.`,"lark.health.processingFailed":`Message processing failed`,"lark.health.processingFailedDetail":`The message event arrived, but Agent processing failed. Review local diagnostics and retry.`,"lark.health.queued":`Queued in the Agent inbox`,"lark.health.queuedDetail":`The message will be processed asynchronously by {agent} without starting a general Chat Session.`,"lark.health.retrying":`Retrying listener`,"lark.health.retryingDetail":`Event listening was interrupted and LoopX is retrying automatically.`,"lark.health.routeAmbiguous":`Message matches multiple Goals`,"lark.health.routeAmbiguousDetail":`The same bot and group have multiple full-group capture connections. Use a separate bot for each Agent or keep only one full-group connection.`,"lark.health.routeMismatch":`Message did not match this Goal Topic`,"lark.health.routeMismatchDetail":`The event came from another group or Topic. Reconnect this Goal to the correct group, then send a new @ mention.`,"lark.health.routeUnavailable":`Message cannot be routed to the Goal`,"lark.health.routeUnavailableDetail":`Connection data is incomplete. Reconnect this Goal, then send a new @ mention.`,"lark.health.starting":`Starting`,"lark.health.startingDetail":`LoopX is starting message event listening for this App.`,"lark.health.unavailable":`Auto reply unavailable`,"lark.health.waiting":`Waiting`,"lark.incomingMessages":`Incoming messages`,"lark.ingressAsync":`Async inbox`,"lark.ingressAsyncDescription":`Write to the Agent private inbox for a later explicit drain.`,"lark.ingressLegacy":`Legacy direct`,"lark.ingressLegacyDescription":`Compatibility mode for old connections; choose one of the three current ingress modes when saving.`,"lark.ingressQueue":`Queuing`,"lark.ingressQueueDescription":`Enter the same Agent Session's bounded FIFO queue and run after the current Turn.`,"lark.ingressSteering":`Steering`,"lark.ingressSteeringDescription":`Deliver to the active Turn and reject safely when no exact active Turn exists.`,"lark.loading":`Loading Lark configuration…`,"lark.management":`Lark management`,"lark.openEventSettings":`Open Feishu event settings`,"lark.mentions":`Mentions`,"lark.mentionsOnly":`Mentions only`,"lark.needsMessagePermissions":`Needs message permissions`,"lark.needsSetup":`Needs setup`,"lark.newApp":`New Lark App`,"lark.noAgentConfigured":`No Agent configured`,"lark.noConnections":`No matching connections.`,"lark.noProfiles":`No lark-cli App profiles are available yet.`,"lark.profileName":`Profile name`,"lark.profileValidation":`Profile can contain only letters, numbers, periods, underscores, and hyphens.`,"lark.processing":`Processing`,"lark.region":`Region`,"lark.registerAnother":`+ Register another Lark App — Create through Feishu`,"lark.reopenFeishu":`Reopen Feishu`,"lark.settingsConfigure":`Configure {goal}`,"lark.settingsDisconnect":`Disconnect {goal}`,"lark.replyMode":`Reply mode`,"lark.replyModeDescription":`Replies are limited to the source Topic to prevent cross-group or cross-Goal delivery.`,"lark.reusableApps":`{count} reusable Apps`,"lark.reusableWorkspaceApp":`Reusable workspace App`,"lark.saveConnection":`Save connection`,"lark.searchConnections":`Search Lark connections`,"lark.searchPlaceholder":`Search Apps, groups, Goals, or topics`,"lark.setupCopy":`LoopX opens the official Feishu creation page through lark-cli. App credentials stay in the system Keychain; LoopX stores only the profile reference.`,"lark.someoneMentions":`Someone mentions the Agent`,"lark.targetAgent":`Target Agent`,"lark.targetAgentDescription":`Choose a registered Agent in this Goal. This connection delivers to one Agent; it does not broadcast or grant permissions. Steering and Queuing require that Agent's exact active Session.`,"lark.agentUnavailable":`{agent} · no longer available`,"lark.selectRegisteredAgent":`Select an available registered Agent before connecting. The previous Agent will not be replaced automatically.`,"lark.topicPreview":`Topic preview`,"lark.topicReply":`Topic reply`,"lark.trigger":`Trigger`,"lark.waitingFeishu":`Waiting for Feishu`,"lark.waitingFeishuDescription":`Complete Feishu authorization in the new window. This page updates automatically when it is ready.`,"lark.waitingLink":`Generating the official Feishu creation link…`,"lark.error.appCreate":`Lark App creation failed`,"lark.error.appRequired":`Select a Lark App profile.`,"lark.error.bind":`Connection failed`,"lark.error.bindPreview":`Connection preview failed`,"lark.error.configuration":`Could not load Lark configuration`,"lark.error.groupLookup":`Could not read groups joined by this bot. Check the bot status and try again.`,"lark.error.groupLoad":`Could not load group chats`,"lark.error.invalidApp":`The Lark App profile is unavailable or has not completed authorization.`,"lark.error.messagePermissions":`This App lacks the bot permissions required for automatic replies. Enable im:message.group_at_msg:readonly and im:message:send_as_bot, publish a new version, then refresh.`,"lark.error.provider":`The Feishu API call failed without a verified receipt. Try again later.`,"lark.error.setupPoll":`Could not read creation status`,"lark.error.setupStart":`Could not start Lark App creation`,"lark.error.cliExecutable":`The configured lark-cli was found but cannot run. Check the installation or launch arguments.`,"lark.error.cliMissing":`lark-cli was not found. Install lark-cli and restart LoopX.`,"lark.error.cliStart":`lark-cli failed to start. Check the installation and restart LoopX.`,"lark.error.disconnect":`Disconnect failed`,"notifications.autoNotify":`Send automatically when your confirmation is required`,"notifications.bind":`Bind notification group`,"notifications.bindConfirm":`Bind “{goal}” to “{target}”. LoopX will verify that the bot is in the group and send a confirmation message.`,"notifications.bindFailed":`Binding failed`,"notifications.bound":`Bound`,"notifications.confirmBind":`Confirm binding`,"notifications.description":`Send Goal changes that need your confirmation to a Feishu group. Bindings and automatic delivery use the existing channel.`,"notifications.disabled":`Disabled`,"notifications.group":`Notification group: {target}`,"notifications.loadFailed":`Could not load notification groups`,"notifications.noTargets":`No notification groups are available. Group delivery uses a private bot identity; configure one from the terminal first:`,"notifications.notBound":`Not bound`,"notifications.recent":`Latest {time}`,"notifications.sentCount":`{count} sent`,"notifications.settings":`Goal notification bindings`,"notifications.setupFailed":`Could not update settings`,"notifications.title":`Feishu group notifications`,"proposal.field.agentId":`Agent`,"proposal.field.cadence":`Frequency`,"proposal.field.completionCriteria":`Completion criteria`,"proposal.field.executionBoundary":`Execution boundary`,"proposal.field.goalId":`Goal ID`,"proposal.field.heartbeat":`Heartbeat`,"proposal.field.initialTodos":`Initial tasks`,"proposal.field.objective":`Objective`,"proposal.field.operation":`Operation`,"proposal.field.permission":`Permission`,"proposal.field.reason":`Reason`,"proposal.field.stopCondition":`Stop condition`,"proposal.field.target":`Check target`,"proposal.field.timezone":`Timezone`,"proposal.field.title":`Title`,"proposal.field.workspace":`Execution workspace`,"proposal.gate.default":`Host confirmation required`,"proposal.impact.default":`After confirmation, the canonical LoopX service will write the state change.`,"proposal.impact.goalCreate":`After confirmation, LoopX will create the Goal and its initial Todo, then let the selected Agent start the first run.`,"proposal.impact.lifecycleDelete":`After confirmation, this stopped Goal is removed from the source and global registries. Project files, history state, and backups are preserved.`,"proposal.impact.lifecycleResume":`After confirmation, the Goal becomes eligible for automatic scheduling and returns to Active Goals. Actual execution still follows quota, Gate, and Todo constraints.`,"proposal.impact.lifecycleStop":`After confirmation, automatic progress stops and the Goal moves to the collapsed Stopped list. History, Todos, and evidence remain available for resuming.`,"proposal.impact.protected":`This action must be completed through the protected LoopX write service.`,"proposal.primary.apply":`Confirm and apply`,"proposal.primary.goalCreate":`Create Goal and start first run`,"proposal.primary.lifecycleDelete":`Delete Goal`,"proposal.primary.lifecycleResume":`Resume Goal`,"proposal.primary.lifecycleStop":`Stop Goal`,"proposal.primary.todoStart":`Create task and start execution`,"proposal.summary.goalCreate":`Create Goal: {title}`,"proposal.summary.heartbeat":`Set a Heartbeat for the current Goal`,"proposal.summary.lifecycleDelete":`Delete Goal: {title}`,"proposal.summary.lifecycleResume":`Resume Goal: {title}`,"proposal.summary.lifecycleStop":`Stop Goal: {title}`,"proposal.summary.monitor":`Create a scheduled check for the current Goal: {target}`,"proposal.workspace.current":`Current local workspace (no Repository bound)`,"proposal.workspace.named":`{workspace} (execution environment only; does not bind a repository)`,"proposal.workspaceGate.agentImpact":`Bind an Agent identity, then recheck the original action. No Goal has been written.`,"proposal.workspaceGate.agentTitle":`Bind an Agent first`,"proposal.workspaceGate.defaultSummary":`Select the Goal workspace.`,"proposal.workspaceGate.selectionImpact":`After selecting a workspace, LoopX will show the confirmation preview again. The selection itself does not write state.`,"proposal.workspaceGate.selectionTitle":`Select Goal workspace`,"projection.agentAdvancingGoal":`Agent is advancing the current Goal`,"projection.agentIdle":`Nothing needs your attention`,"projection.agentNeedsDecision":`Agent is waiting for your decision`,"projection.agentPreparingNextStep":`Agent is preparing the next step`,"projection.agentStopped":`Stopped by you; history, Todos, and evidence are preserved`,"projection.agentWaitingExternal":`Waiting for an external condition`,"projection.confirmAgentDecision":`Confirm the permission or decision the Agent needs next`,"projection.events24h":`{count} events in the last 24 hours`,"projection.firstReadOnlyAdapterCheck":`Run the first read-only adapter check and save progress`,"projection.goalVerified":`Goal state, Todos, and registration information verified`,"projection.latestRun":`Latest run`,"projection.latestValidation":`Latest validation`,"projection.nextUpdatePending":`Waiting for LoopX to update the next step`,"projection.publicSafeProjection":`Public-safe status projection`,"projection.refreshState":`Refresh LoopX status and confirm the current progress is still valid`,"projection.runEvidenceAvailable":`Run evidence is available`,"projection.runRecorded":`The latest LoopX run is recorded`,"projection.statusRefreshNeeded":`LoopX status needs to be refreshed`,"projection.todoStatusUpdated":`Todo status updated; confirming the next step`,"projection.validationRecorded":`The latest validation is recorded`,"runs.completed":`Completed`,"runs.failed":`Needs review`,"runs.interrupted":`Interrupted`,"runs.queued":`Scheduled`,"runs.ready":`Ready`,"runs.resumeFailed":`Recovery failed`,"runs.running":`Running`,"runs.unknown":`Unknown`,"runs.waiting":`Waiting`,"schedule.active":`Running`,"schedule.heartbeat":`Goal Heartbeat`,"schedule.monitor":`Scheduled & continuous task`,"schedule.paused":`Paused`,"schedule.summary":`Continuously checked under LoopX scheduling constraints`,"schedule.defaultTarget":`Check the current Goal for blockers, progress, and new outputs`,"schedule.unsupportedCalendar":`Scheduled checks do not currently support an exact weekday or time. Use a fixed interval such as “Every 30 minutes,” “Every 2 hours,” or “Daily.” The draft was preserved and no confirmation preview was created.`,"source.add":`Add source`,"source.addConfigured":`Add read-only source`,"source.addMethod":`Source setup method`,"source.addSsh":`Add SSH source`,"source.closeForm":`Close source form`,"source.configured":`Configured SSH`,"source.configuredCount":`Local SSH Hosts · {count}`,"source.configuredGroup":`Configured SSH Hosts · {count} (select to add)`,"source.connected":`Connected`,"source.connecting":`Connecting`,"source.controlPlane":`Control plane source`,"source.copy":`Copy`,"source.copyCommand":`Copy SSH tunnel command`,"source.copyError":`Could not copy the command. Copy it manually below.`,"source.copied":`Copied`,"source.description":`All explicit Hosts are loaded, including Include files. Wildcards are not listed. Run the command first; LoopX never reads SSH keys or configuration details.`,"source.host":`Local SSH Host`,"source.hostEmpty":`No explicit SSH Hosts are available in ~/.ssh/config.`,"source.hostLoadError":`Could not read local SSH Hosts.`,"source.hostPlaceholder":`Enter or search for a Host`,"source.invalid":`The SSH source settings are invalid.`,"source.loadingHosts":`Loading…`,"source.localInteractive":`Local interactive`,"source.localPort":`Local port`,"source.manual":`Manual URL`,"source.manualDescription":`Remote sources always remain read-only projections and never inherit local write permissions.`,"source.name":`Name`,"source.namePlaceholder":`Remote development machine`,"source.notAvailable":`Unavailable`,"source.readOnly":`SSH tunnel · read only`,"source.readOnlyNoticeDescription":`You can view Goals, Tasks, evidence, and run status. Writes, guidance, and Agent sessions remain on the source host.`,"source.readOnlyNoticeTitle":`Remote read-only projection`,"source.readOnlyWriteError":`Remote SSH tunnel sources are read-only projections and cannot perform control-plane writes.`,"source.refreshHosts":`Reload SSH Hosts`,"source.remove":`Remove source {source}`,"source.removeCurrent":`Remove current source`,"source.select":`Select control plane source`,"source.selectHost":`Select a configured SSH Host.`,"source.statusUrl":`Local forwarded URL`,"source.tunnelCommandPending":`Select a Host to generate the tunnel command`,"machine.absent":`Not configured`,"machine.action.create":`Create machine policy`,"machine.action.delete":`Remove machine policy`,"machine.action.unchanged":`No write required`,"machine.action.update":`Update machine policy`,"machine.applied":`Machine policy applied and read back successfully.`,"machine.applyError":`Machine policy could not be applied.`,"machine.applyPreview":`Apply reviewed preview`,"machine.changedNamespaces":`Changed namespaces`,"machine.capabilityCatalog":`Machine capability catalog`,"machine.capabilityEmpty":`No machine-configurable capabilities are registered.`,"machine.configured":`Configured`,"machine.confirmRollback":`Confirm rollback`,"machine.currentRevision":`Current revision`,"machine.currentValue":`Current machine value`,"machine.description":`Browse the same capability catalog as Goal settings. Configure supported machine defaults here; Goal-only capabilities are labeled explicitly.`,"capabilities.rawJson":`Advanced: raw JSON`,"machine.goalOnly":`This capability currently supports Goal configuration only. Open a Goal’s capability settings to configure it; no machine-wide default is applied.`,"machine.desiredRevision":`Desired revision`,"machine.editorUnavailable":`No editor is installed for this namespace`,"machine.editorUnavailableDescription":`The namespace remains visible in the registry. Install or upgrade its Dashboard editor before changing it.`,"machine.editorMode":`Editor mode`,"machine.liveDefault":`Live default; Goal override wins`,"machine.liveDefaultDescription":`Goals without an explicit periodic-report override read this machine policy on every plan. Changes and removal affect those existing Goals immediately; an explicit Goal override stays pinned.`,"machine.genericNamespaceDescription":`Edit this registered namespace as JSON. LoopX validates it with the capability-owned schema before previewing any write.`,"machine.jsonConfiguration":`Namespace configuration (JSON)`,"machine.jsonConfigurationHelp":`Only this namespace is updated. Other machine configuration is preserved, and Apply remains locked to the reviewed preview revision.`,"machine.jsonEditor":`JSON`,"machine.jsonInvalid":`Enter one valid JSON object before previewing changes.`,"machine.loadError":`Machine configuration could not be loaded.`,"machine.machinePolicy":`Machine policy`,"machine.namespaceCount":`Registered namespaces`,"machine.namespaces":`Configuration namespaces`,"machine.periodicReport":`Periodic reports`,"machine.periodicReportDescription":`Default report policy for every Goal without an explicit override. Goal scheduling and delivery consume the effective configuration.`,"machine.periodicReportActivation":`Enabled means automatic delivery at validated stage boundaries`,"machine.periodicReportActivationDescription":`This is not a weekly timer. When LoopX validates a Goal stage completion, an Agent prepares and freezes the report, then automatically delivers it through the configured Goal Channel. The enabled subscription is standing delivery authority; failures and route drift stop closed for repair.`,"machine.preview":`Review exact machine change`,"machine.previewChanges":`Preview changes`,"machine.previewError":`A machine-policy preview could not be created.`,"machine.previewLocked":`Apply is locked to this exact revision. If machine state changes, LoopX requires a new preview.`,"machine.previewRollback":`Preview rollback`,"machine.previewRemoval":`Preview removal`,"machine.profilePreset":`Profile preset`,"machine.profilePresetHelp":`A capability-owned preset, such as weekly-progress.`,"machine.registry":`Typed registry`,"machine.requiredFields":`Enable requires a profile preset, Goal Channel route, and valid timezone.`,"machine.revision":`Machine revision`,"machine.revisionLockedReady":`All changes require a preview and apply only while that exact machine revision remains current.`,"machine.rollbackAvailable":`Rollback is available for the last apply`,"machine.rollbackDescription":`Preview the stored prior revision before restoring it.`,"machine.rollbackError":`The rollback could not be completed.`,"machine.rollbackPreviewDescription":`The prior revision is ready to restore. Confirm to apply this rollback.`,"machine.rolledBack":`The prior machine policy was restored and verified.`,"machine.removed":`Machine policy removed and the resulting configuration read back successfully.`,"machine.routeRef":`Goal Channel route`,"machine.routeRefHelp":`Use a public route alias; credentials and provider identifiers never enter this form.`,"machine.timezone":`Timezone`,"machine.timezoneHelp":`Use an IANA timezone, for example Asia/Shanghai.`,"machine.title":`Machine configuration`,"machine.unchanged":`Machine policy already matches this preview; nothing was written.`,"machine.visualEditor":`Guided`,"capabilities.atomicOverride":`Goal override is atomic`,"capabilities.atomicOverrideDescription":`A complete Goal value wins over the machine default. LoopX never mixes individual fields across scopes.`,"capabilities.applyFailed":`Goal capability changes were not applied.`,"capabilities.applyPreview":`Apply preview`,"capabilities.catalog":`Goal capability catalog`,"capabilities.chooseGoal":`Choose a Goal before inspecting its capabilities.`,"capabilities.defaultValue":`Declared default`,"capabilities.description":`Inspect the capabilities available to this Goal and the exact scope of each setting.`,"capabilities.editorPrepared":`Typed editor contract available`,"capabilities.effectiveSource":`Effective source`,"capabilities.empty":`No capability descriptors are available for this Goal.`,"capabilities.fields":`Registered fields`,"capabilities.goalPolicy":`Goal capability policy`,"capabilities.goalScope":`Goal`,"capabilities.goalValue":`Current Goal value`,"capabilities.loadFailed":`Could not load Goal capabilities`,"capabilities.loading":`Loading Goal capabilities…`,"capabilities.machineOnly":`This capability is configured only at machine scope.`,"capabilities.machineValue":`Live machine default`,"capabilities.machineScope":`Machine`,"capabilities.previewOnly":`Inspection is live. Goal writes remain unavailable until the revision-locked preview and apply path is connected.`,"capabilities.preview":`Revision-locked preview`,"capabilities.previewChanges":`Preview changes`,"capabilities.restoreInheritance":`Restore machine-default inheritance`,"capabilities.previewFailed":`Could not preview Goal capability changes.`,"capabilities.previewLocked":`Apply will re-check this exact plan revision and reject stale changes.`,"capabilities.partialWrite":`Goal value saved; shared projection needs reconciliation`,"capabilities.partialWriteDescription":`The source Goal configuration was written and read back. Its shared runtime projection did not synchronize, so do not submit the change again.`,"capabilities.refreshSource":`Refresh source value`,"capabilities.readOnly":`Read-only capability`,"capabilities.revisionLockedReady":`Changes require a preview and are applied only when its exact revision is still current.`,"capabilities.retry":`Retry`,"capabilities.source.capability_default":`Capability default`,"capabilities.source.goal_override":`Goal override`,"capabilities.source.machine_default":`Live machine default`,"capabilities.source.not_configured":`Not configured`,"capabilities.title":`Goal capabilities`,"settings.close":`Close settings`,"settings.appearance":`Appearance`,"settings.appearanceDescription":`Manage workspace display preferences in this browser.`,"settings.appearanceTabDescription":`Theme and display preferences`,"settings.capabilitiesTabDescription":`Capability overrides for this Goal`,"settings.back":`Back to workspace`,"settings.categories":`Settings categories`,"settings.description":`Manage workspace preferences and integrations.`,"settings.eyebrow":`Workspace preferences`,"settings.general":`General`,"settings.goalConnections":`Goal connections`,"settings.language":`Language`,"settings.languageDescription":`Choose the language used by the LoopX desktop workspace.`,"settings.languageEnglishDescription":`Use English for navigation, settings, and workspace controls.`,"settings.languageEnglish":`English`,"settings.languageSimplifiedChineseDescription":`Use Simplified Chinese for navigation, settings, and workspace controls.`,"settings.languageSimplifiedChinese":`Simplified Chinese`,"settings.languageStoredLocally":`This preference is stored only on this device.`,"settings.languageTabDescription":`Interface language for this device`,"settings.larkTabDescription":`Apps, group chats, and Goal Topic connections`,"settings.machineTabDescription":`Typed defaults shared by capabilities on this machine`,"settings.notifications":`Notifications`,"settings.open":`Settings`,"settings.themeDefault":`Paper`,"settings.themeDefaultDescription":`Calm and lightweight for long-running work.`,"settings.themeDescription":`Choose the workspace visual style. This preference is stored in the current browser.`,"settings.themeHighContrast":`High contrast`,"settings.themeHighContrastDescription":`Stronger borders and more prominent state blocks.`,"settings.themeLoopx":`LoopX standard`,"settings.themeLoopxDescription":`Precise monochrome surfaces, Geist type, and quiet hairline structure.`,"settings.title":`Settings`,"settings.workspaceDisplay":`Workspace display`,"settings.workspaceTheme":`Workspace theme`,"session.closeRecord":`Exit run record`,"session.details":`Session details`,"session.record":`Execution Session · Run record`,"session.recordDescription":`The timeline now shows messages and Turn records from this Session.`,"sidebar.createGoal":`Create Goal`,"sidebar.delete":`Delete`,"sidebar.deleteGoal":`Delete Goal`,"sidebar.manager":`LoopX Manager`,"sidebar.notifications":`Settings`,"sidebar.owner":`Personal workspace`,"sidebar.product":`Personal Agent workspace`,"sidebar.resume":`Resume`,"sidebar.resumeGoal":`Resume Goal`,"sidebar.stop":`Stop`,"tasks.historyLoading":`Loading history…`,"tasks.historyError":`History could not be loaded.`,"tasks.historyExpired":`History snapshot expired. Reload to continue.`,"tasks.historyRetry":`Reload`,"tasks.historyEnd":`End of completed history`,"tasks.historyMore":`Load more`,"tasks.historyLocalOnly":`Open this machine’s Dashboard to browse full history.`,"sidebar.sortGoals":`Reorder Goals`,"sidebar.dragGoal":`Drag to reorder, or use Reorder Goals`,"sidebar.moveUp":`Move {goal} up`,"sidebar.moveDown":`Move {goal} down`,"sidebar.goalMoved":`{goal} moved to position {position}`,"sidebar.orderNotSaved":`Order changed for this visit; browser storage is unavailable.`,"sidebar.stopGoal":`Stop Goal`,"sidebar.stopped":`Stopped`,"sidebar.stoppedLoading":`Loading stopped Goals`,"sidebar.stoppedLoadFailed":`Stopped Goals could not be loaded. Active Goals remain available.`,"sidebar.retryStopped":`Retry`,"state.completed":`Completed`,"state.needsRepair":`Needs repair`,"state.needsYou":`Needs you`,"state.quiet":`Quiet`,"state.running":`Running`,"state.stopped":`Stopped`,"state.waiting":`Waiting`,"tasks.blocked":`Blocked`,"tasks.agentLane":`Work Agent`,"tasks.agentLaneDescription":`Filter this Goal's projected work lanes`,"tasks.agentLaneFilter":`Filter by work Agent`,"tasks.allAgentLanes":`All Agents ({count})`,"tasks.chatAgentReplied":`Agent replied`,"tasks.chatPending":`Sent to Agent`,"tasks.chatPendingDescription":`Processing. Tasks update only after a task operation is confirmed.`,"tasks.chatRecent":`Recent conversation`,"tasks.chatUnchangedDescription":`This conversation did not directly change Tasks. Convert the reply to a Task draft and confirm it when execution is needed.`,"tasks.chatViewReply":`View reply`,"tasks.convertToTask":`Convert to Task`,"tasks.completed":`Completed`,"runs.discoveryPartial":`Some execution details are unavailable. Reconnecting; task summaries are not live execution status.`,"runs.discoveryOffline":`Execution service unavailable. Reconnecting; retained task summaries may be stale.`,"files.openConversation":`Go to conversation`,"files.exportSummary":`Export summary`,"tasks.viewDescription":`Decisions first, then work and recent completions`,"tasks.viewLabel":`Task view`,"tasks.listView":`List`,"tasks.boardView":`Board`,"tasks.completedSummary":`{count} tasks completed. Recent details are projected by the control plane when needed.`,"tasks.emptyCompleted":`No completed tasks yet.`,"tasks.emptyConfirm":`No tasks waiting for confirmation.`,"tasks.emptyRunning":`No queued or running tasks.`,"tasks.emptySchedules":`No scheduled tasks.`,"tasks.emptyGoal":`This Goal has no tasks yet. Describe the next step below and LoopX will show a confirmation preview first.`,"tasks.markComplete":`Mark complete: {name}`,"tasks.moreActions":`More actions: {name}`,"tasks.openExecution":`View execution: {name}`,"tasks.pending":`Pending`,"tasks.pendingAndRunning":`Queued / Running`,"tasks.scheduled":`Scheduled & continuous`,"tasks.sessionError":`Session issue`,"tasks.waiting":`Queued`,"tasks.waitingAge":`Waiting {age}`,"tasks.viewExecution":`View execution`,"tasks.viewResult":`View result`,"time.days":`{count} days`,"time.hours":`{count} hours`,"timeline.emptyGoal":`This Goal has no new activity`,"timeline.emptyGoalDescription":`Ask for progress or send new guidance.`,"timeline.emptyWorkspace":`Your workspace is quiet today`,"timeline.emptyWorkspaceDescription":`Describe a Goal to the LoopX Manager, or ask what deserves attention today.`,"timeline.gateHistory":`{count} historical Gates`,"timeline.pending":`Working…`,"timeline.runCompleted":`{run}: completed`,"timeline.review":`Review`,"timeline.reviewAndConfirm":`Review and confirm`,"timeline.waitingConfirmation":`Needs your confirmation`},"zh-CN":{"common.actions":`操作`,"common.agent":`Agent`,"common.allMessages":`所有消息`,"common.cancel":`取消`,"common.close":`关闭`,"common.closeActionReceipt":`关闭操作回执`,"common.confirm":`确认`,"common.export":`导出`,"common.failed":`失败`,"common.goal":`Goal`,"common.loading":`加载中…`,"common.none":`无`,"common.off":`关闭`,"common.on":`开启`,"common.open":`打开`,"common.owner":`Owner`,"common.readOnly":`只读`,"common.recently":`刚刚`,"common.status":`状态`,"common.task":`Task`,"common.you":`你`,"common.waiting":`等待中`,"composer.addImage":`添加图片`,"composer.agentProgress":`向 Agent 获取进度报告`,"composer.agentProgressPrompt":`请给我一份当前 Goal 的进度报告:已完成、执行中、阻塞和下一步。`,"composer.attachImageHint":`选择、粘贴或拖入图片`,"composer.clarifyDefer":`暂缓 Todo 需要可自动判断的恢复条件。请补充 todo_done:、pr_merged:[owner/repo]# 或 capacity_available:。`,"composer.clarifySingleAction":`这句话包含多个可能修改状态的操作。请一次描述一项操作,我会逐项展示确认预览。`,"composer.createGoal":`创建新 Goal`,"composer.createGoalDraft":`Goal 草稿`,"composer.createGoalDraftDescription":`补充内容后发送,LoopX 会先展示待确认操作。`,"composer.createGoalDraftLead":`我想创建一个长期 Goal:`,"composer.createGoalTemplate":`我想创建一个长期 Goal: +目标: +完成标准: +执行边界(可选): +关联仓库(可选): +通知方式(可选):`,"composer.createGoalHint":`填入 Goal 模板草稿,检查后再创建`,"composer.draft":`草稿`,"composer.globalProgress":`汇总所有 Goal 进展`,"composer.globalProgressPrompt":`请帮我汇总所有活跃 Goal 的最新进展与阻塞。`,"composer.globalTasks":`询问全局待办`,"composer.globalTasksPrompt":`有哪些 Goal 正在等我?我现在该优先处理什么?`,"composer.goalMessageHint":`你的消息由 {agent} 在本 Goal 的会话中接收`,"composer.goalRunningHint":`{agent} 正在执行 {count} 个任务 · 你的消息作为纠偏进入本会话,不会打断执行`,"composer.goalPlaceholder":`询问或纠偏 {goal}…`,"composer.imageAnalysisPrompt":`请结合这些图片分析当前 Goal,并告诉我下一步。`,"composer.imageCountError":`最多添加 {count} 张图片。`,"composer.imagePicker":`图片文件选择器`,"composer.imageReadError":`无法读取图片 {name}`,"composer.imageReadGenericError":`图片读取失败。`,"composer.imageSizeError":`单张图片不能超过 {size}MB。`,"composer.imageTypeError":`支持 PNG、JPEG、WebP 和 GIF 图片。`,"composer.imagesPending":`待发送图片`,"composer.immediate":`立即发送`,"composer.managerMessageHint":`你的消息由 LoopX 管家跨 Goal 接收,支持全局询问与创建 Goal`,"composer.managerPlaceholder":`问问 LoopX 管家,或描述一个新 Goal…`,"composer.monitor":`配置定时检查`,"composer.monitorGoalQuestion":`为哪个 Goal 添加定时检查?`,"composer.monitorTemplate":`为当前 Goal 添加定时检查: +检查内容: +频率(支持 30 分钟 / 2 小时 / 每天):每 2 小时 +停止条件:Goal 完成`,"composer.monitorTemplateWithoutGoal":`配置定时检查: +Goal: +检查内容: +频率:每 2 小时 +停止条件:Goal 完成`,"composer.monitorHint":`先填写检查内容、频率和停止条件,不会立即创建`,"composer.heartbeatGoalQuestion":`为哪个 Goal 设置 Heartbeat?`,"composer.heartbeatTemplate":`为当前 Goal 设置 Heartbeat: +频率:每天 +停止条件:Goal 完成 +通知:仅在需要我时`,"composer.heartbeatTemplateWithoutGoal":`设置 Heartbeat: +Goal: +频率:每天 +停止条件:Goal 完成 +通知:仅在需要我时`,"composer.nextAction":`询问下一步`,"composer.nextActionPrompt":`我现在该做什么?`,"composer.prepareDraft":`填入编辑框,确认后再发送`,"composer.send":`发送`,"composer.sendMessage":`向 LoopX 发送消息`,"composer.sendMessageHint":`发送消息`,"composer.sentImageAlt":`移除图片 {name}`,"conversation.agentPending":`正在整理…`,"conversation.close":`关闭对话回执`,"conversation.convertHint":`将 Agent 最新回复转为 Task 草稿`,"conversation.full":`查看完整对话`,"conversation.receipt":`对话回执`,"conversation.replying":`正在回复`,"conversation.title":`管家对话`,"conversation.toTask":`转为 Task`,"digest.away":`自上次访问以来的运行记录`,"digest.completed":`新增完成运行`,"digest.failed":`新增失败或中断`,"digest.needsYou":`当前待确认`,"feedback.applying":`正在执行:{title}`,"feedback.cancelFailed":`取消失败:{error}`,"feedback.completed":`已完成:{title}`,"feedback.executionFailed":`执行失败:{error}`,"feedback.gateRequired":`需要你确认:{summary}`,"feedback.notCompleted":`操作未完成:{status}`,"feedback.goalRefreshFailed":`已打开 Goal,但暂时无法刷新最新状态。请点击刷新重试。`,"feedback.preparingPreview":`正在准备确认预览:{title}`,"feedback.previewFailed":`无法准备确认预览:{error}`,"feedback.sendFailed":`发送失败:{error}`,"feedback.sendGenericError":`消息发送失败,请稍后重试。`,"feedback.stale":`状态已变化,操作未执行,请重新生成确认预览。`,"feedback.taskDraftCreated":`已根据回复生成 Task 草稿。编辑后发送,LoopX 会先展示确认预览。`,"goal.defaultTitle":`新的个人 Goal`,"goal.initialTodo":`按完成标准推进:{criteria}`,"goal.objectiveBoundary":`执行边界:{boundary}`,"goal.objectiveCompletion":`完成标准:{criteria}`,"drawer.advancedDiagnostics":`高级诊断`,"drawer.agentWorking":`Agent 正在继续执行,记录会自动更新。`,"drawer.analysis":`正在分析`,"drawer.apply":`确认并应用`,"drawer.applying":`正在应用…`,"drawer.attentionBlocking":`正在阻塞 Agent`,"drawer.attentionWaiting":`等待你的决定`,"drawer.autoNotify":`Human-gate 自动通知`,"drawer.branch":`分支`,"drawer.closeDetail":`关闭详情:返回{context}`,"drawer.connected":`已连接`,"drawer.correctionDescription":`消息会沿用当前 Goal、Todo 与 Agent Session 上下文。`,"drawer.correctionLabel":`与 {agent} 纠偏`,"drawer.correctionPlaceholder":`例如:先关注权限风险,暂时不要提交…`,"drawer.correctionSend":`发送纠偏`,"drawer.correctionTextarea":`输入纠偏信息:Goal {goal},Agent {agent},Run {run}`,"drawer.copyRepository":`复制仓库标识`,"drawer.copyRepositoryDone":`已复制仓库标识`,"drawer.copyRepositoryError":`复制失败,请检查浏览器剪贴板权限。`,"drawer.copyRepositorySuccess":`已复制,可粘贴到其他工具。`,"drawer.cost":`成本 24h / 7d`,"drawer.costShort":`成本`,"drawer.durationShort":`时长`,"drawer.period24h":`24 小时`,"drawer.period7d":`7 天`,"drawer.tokens":`Token 24 小时 / 7 天`,"drawer.tokensShort":`Token`,"drawer.usageNotMeasured":`未采集`,"drawer.currentGoal":`当前 Goal`,"drawer.decisionDefaultEvidence":`当前状态没有附加公开安全证据;下一步仍会先展示 Preview。`,"drawer.decisionDefaultReason":`该决定会影响当前 Todo 的下一步执行。`,"drawer.decisionDefer":`稍后决定`,"drawer.decisionMore":`更多决定`,"drawer.decisionReject":`拒绝`,"drawer.decisionReview":`查看影响并决定`,"drawer.dependencies":`依赖`,"drawer.detailsAndActions":`详情与操作`,"drawer.duration":`运行时长 24h / 7d`,"drawer.evidence":`证据`,"drawer.executionHistory":`执行历史`,"drawer.executionRecord":`运行记录`,"drawer.executionRecordAndResult":`执行过程与结果`,"drawer.explainDecision":`解释此决定`,"drawer.gateApproveHint":`在终端执行一条命令即可完成审批:`,"drawer.gateRejectHint":`不同意就把末尾的 approve 换成 reject。执行后这条提醒会自动消失。`,"drawer.gateRequiresHost":`需要宿主确认`,"drawer.gateRequiresHostDescription":`页面无权直接批准这类权限变更,你的点击没有写入任何内容。`,"drawer.goalAutoRun":`当前 Goal 的自动运行`,"drawer.goalChanges":`当前 Goal 的待确认变更`,"drawer.goalDetails":`Goal 详情`,"drawer.group":`群聊`,"drawer.inspectorFull":`切换到全屏`,"drawer.inspectorFullView":`全屏查看`,"drawer.inspectorHalf":`切换到半屏`,"drawer.inspectorHalfView":`半屏查看`,"drawer.lastNotification":`最近通知`,"drawer.larkConfigure":`管理 Lark connection`,"drawer.larkConnect":`连接 Lark App`,"drawer.larkConnection":`Lark connection`,"drawer.larkNotConfigured":`未配置`,"drawer.larkNotConfiguredDescription":`配置后,当这个 Goal 出现需要你确认的变更时,会自动发飞书通知。`,"drawer.managerChanges":`管家待确认变更`,"drawer.moreActions":`更多操作`,"drawer.moreRunActions":`更多运行操作`,"drawer.nextTransition":`下一转换`,"drawer.noExecutionHistory":`暂无执行记录。`,"drawer.noRun":`尚未启动执行 Session`,"drawer.noRunDescription":`Agent 开始执行后,运行记录会稳定显示在这里。`,"drawer.notAssigned":`未分配`,"drawer.notLinked":`未关联`,"drawer.notSet":`未设置`,"drawer.outputDetails":`产出详情`,"drawer.outputRecorded":`该产出已记录到当前 Goal。`,"drawer.outputSafePreview":`公开安全产出预览`,"drawer.outputRun":`Run`,"drawer.outputTodo":`Todo`,"drawer.outputs":`本次运行产出`,"drawer.previewUnavailable":`此产出没有可用的公开安全内联预览。`,"drawer.priority":`优先级`,"drawer.progress":`进度`,"drawer.proposalApplied":`已应用,LoopX 状态将刷新。`,"drawer.proposalApplyFailed":`应用失败,没有写入任何变更。`,"drawer.proposalApplyFailedHint":`请刷新 Goal 状态后重新生成;若仍失败,可保留此页并查看高级诊断。`,"drawer.proposalClose":`关闭`,"drawer.proposalDefer":`稍后`,"drawer.proposalDeferred":`已暂缓,可稍后继续应用或重新生成。`,"drawer.proposalEnterGoal":`进入新 Goal`,"drawer.proposalExplainer":`确认后,LoopX 会执行这项变更并显示写入结果。关闭或取消不会修改任何状态。`,"drawer.proposalRecheck":`按最新状态重新检查`,"drawer.proposalRegenerate":`基于最新状态重试`,"drawer.proposalRejected":`已拒绝,这项变更不会写入。`,"drawer.proposalStale":`来源状态已变化,请按最新状态重新检查。`,"drawer.proposalViewGoal":`查看更新后的 Goal`,"drawer.reassign":`改派给`,"drawer.reassignSummary":`重新分配:{task}`,"drawer.reason":`原因`,"drawer.recoveryDescription":`本地历史已经保留,请选择恢复路径。`,"drawer.recoveryFailed":`上游 Session 恢复失败`,"drawer.recoveryNewSession":`携带上下文开始新 Session`,"drawer.recoveryRetry":`重试恢复`,"drawer.repositoryRole":`执行工作区`,"drawer.repository":`仓库`,"drawer.replyMode":`回复方式`,"drawer.subagentApplied":`已写入,并通过共享 Goal 状态读回校验。`,"drawer.subagentAppliedRefreshFailed":`已写入并通过共享 Goal 状态读回;状态投影刷新失败,可稍后手动刷新。`,"drawer.subagentApplying":`正在写入并校验共享状态读回…`,"drawer.subagentApplyFailed":`子代理设置写入失败。`,"drawer.subagentChildLimit":`当前上限`,"drawer.subagentConfirmDisable":`确认关闭子代理执行`,"drawer.subagentConfirmEnable":`确认开启子代理执行`,"drawer.subagentCurrentBoundary":`当前任务领域限制`,"drawer.subagentDescription":`仅在 Todo、配额、能力和写入范围门禁全部通过后,允许运行时为相互独立的任务临时创建子代理;不会强制并行,也不会授予持久权限。`,"drawer.subagentDisable":`预览关闭子代理执行`,"drawer.subagentDisableSummary":`这个 Goal 将不再创建新的子代理;现有 Todo 归属和执行记录不受影响。`,"drawer.subagentDomainInvalid":`所选任务领域限制无效。`,"drawer.subagentDomainTodoCount":`匹配 {count} 个开放 Todo`,"drawer.subagentDomains":`任务领域限制(可选)`,"drawer.subagentDomainsEmpty":`当前没有开放的 advancement Todo 声明 task_domain;保持为空即可不按任务领域限制子代理执行。`,"drawer.subagentDomainsHint":`全部不选表示不按任务领域过滤;选择后只放行匹配且已声明领域的 Todo,其他执行门禁始终生效。`,"drawer.subagentDomainsUnrestricted":`不限制任务领域`,"drawer.subagentEnable":`预览开启子代理执行`,"drawer.subagentLabel":`Per-Goal 执行边界`,"drawer.subagentMaxChildren":`最多子代理数`,"drawer.subagentNoChange":`当前 Goal 已是这个设置,没有写入任何内容。`,"drawer.subagentPending":`待确认`,"drawer.subagentPreviewBoundary":`预览边界调整`,"drawer.subagentPreviewFailed":`无法生成子代理设置预览。`,"drawer.subagentPreviewing":`正在核对最新 Goal 状态…`,"drawer.subagentPreviewReady":`预览已锁定,确认后才会写入这个 Goal。`,"drawer.subagentPreviewSummary":`最多允许创建 {count} 个子代理;任务领域限制:{domains}。`,"drawer.subagentRemoteReadOnly":`当前来源只读,请在 Goal 所在主机上修改。`,"drawer.subagentTitle":`自适应子代理执行`,"drawer.remoteDetailsDescription":`SSH 来源只展示公开安全状态,不读取来源主机上的连接配置。`,"drawer.remoteDetailsUnavailable":`远端详情未投影`,"drawer.resumeNo":`否`,"drawer.resumeYes":`是`,"drawer.runDetails":`执行 Session`,"drawer.runInterrupt":`中断本次运行`,"drawer.runLatest":`查看最近执行过程`,"drawer.runNewSession":`开始新 Session`,"drawer.runCloseSession":`关闭 Session`,"drawer.runRecordEmpty":`还没有运行记录。Agent 尚未开始这次执行;请在“详情与操作”查看等待条件或恢复 Session。`,"drawer.runRecordProjected":`当前没有可展示的逐步运行记录。LoopX 已读取到 {completed}/{total} 的投影进度{outputs};请在“详情与操作”检查 Session 状态。`,"drawer.runRecordProjectedOutputs":`和 {count} 项产出`,"drawer.runRoleAssistant":`已完成`,"drawer.runRoleSystem":`需检查`,"drawer.runRoleUser":`收到任务`,"drawer.runView":`Session 视图`,"drawer.scheduleAdd":`添加定时检查`,"drawer.scheduleDefaultNotification":`仅在需要你时通知`,"drawer.scheduleDefaultStop":`Goal 完成或 owner 停止`,"drawer.scheduleDefaultTarget":`由 LoopX 调度器按 Goal 配置唤醒。`,"drawer.scheduleEdit":`改为每 2 小时`,"drawer.scheduleLast":`上次执行`,"drawer.scheduleLocalTimezone":`本地时区`,"drawer.scheduleNext":`下次执行`,"drawer.scheduleNeverRun":`尚未执行`,"drawer.scheduleNotification":`通知`,"drawer.schedulePause":`暂停`,"drawer.schedulePending":`等待调度`,"drawer.scheduleResume":`恢复`,"drawer.scheduleRunNow":`立即运行`,"drawer.scheduleStop":`停止{kind}`,"drawer.scheduleStopCondition":`停止条件`,"drawer.scheduleTimezone":`时区`,"drawer.sessionRecoverable":`可恢复`,"drawer.sessionStatus":`会话状态`,"drawer.setupHeartbeat":`设置 Heartbeat`,"drawer.taskActions":`Todo 待确认操作`,"drawer.taskAdvancement":`推进任务`,"drawer.taskBlock":`标记阻塞`,"drawer.taskComplete":`标记完成`,"drawer.taskCompletedNote":`该任务保留为只读记录。`,"drawer.taskCompletedTitle":`任务已完成`,"drawer.taskDefer":`暂缓`,"drawer.taskDeferCondition":`Todo 暂缓恢复条件`,"drawer.taskDeferInvalid":`条件格式不受支持;请使用下列三种可判定条件。`,"drawer.taskDeferPlaceholder":`例如 pr_merged:owner/repo#123`,"drawer.taskDeferReview":`检查暂缓`,"drawer.taskDeferSupported":`支持 todo_done、pr_merged、capacity_available 条件。`,"drawer.taskDeferUntil":`暂缓至`,"drawer.taskDetails":`Todo 详情`,"drawer.taskInfo":`任务信息`,"drawer.taskManage":`管理任务`,"drawer.taskNextCompleted":`可创建后续任务`,"drawer.taskNextOpen":`推进或更新状态`,"drawer.taskOrdinary":`普通任务`,"drawer.taskStatusBlocked":`受阻`,"drawer.taskStatusDeferred":`已延期`,"drawer.resumeWhen":`恢复条件`,"drawer.taskNextDeferred":`等待恢复条件满足后重新评估`,"drawer.taskStatusCompleted":`已完成`,"drawer.taskStatusOpen":`待执行`,"drawer.taskSuccessor":`创建后续 Todo`,"drawer.taskSuccessorNote":`Owner 标记为阻塞,等待补充上下文。`,"drawer.taskSuccessorSummary":`创建后续 Todo:{task}`,"drawer.taskSuccessorText":`{task} 的后续工作`,"drawer.taskType":`任务类型`,"drawer.topic":`Topic`,"drawer.trigger":`触发方式`,"drawer.titleAttention":`需要你`,"drawer.titleOutput":`产出详情`,"drawer.titleProposalApplied":`执行结果`,"drawer.titleProposalConfirm":`确认执行`,"drawer.titleSchedule":`定时检查`,"drawer.unconfigured":`未配置`,"drawer.workspaceCandidates":`可选择的工作区`,"files.emptySummary":`公开安全产出`,"files.empty":`还没有文件、产出或已验证的阶段周报。`,"files.loadingReports":`正在加载已验证的阶段周报…`,"files.reportDelta":`+{added} 新增 · {changed} 变化`,"files.reportAdded":`新增`,"files.reportChanged":`变化`,"files.reportGeneration":`生成批次`,"files.reportLoadFailed":`无法加载已验证周报`,"files.reportPublication":`发布批次`,"files.title":`Files & Outputs`,"files.verifiedReport":`已验证阶段周报`,"header.agentUnavailable":`不可用`,"header.chatRuntime":`Chat`,"header.workAgentCount":`{count} 个工作 Agent`,"header.chat":`Chat`,"header.files":`Files`,"header.goalCapabilities":`能力配置`,"header.goalCapabilitiesDescription":`管理 Goal override 与继承的本机默认值。`,"header.goalDetails":`Goal 详情`,"header.goalDetailsDescription":`查看状态、用量、仓库、通知与 Session。`,"header.goalSettings":`Goal 设置`,"header.goalSettingsDescription":`打开 Goal 详情或能力配置`,"header.goalNavigation":`Goal 导航`,"header.goalView":`Goal 视图`,"header.live":`实时`,"header.manager":`LoopX 管家`,"header.managerDescription":`跨 Goal 的个人工作入口`,"header.managerOverview":`总览`,"header.managerView":`管家视图`,"header.openGoalNavigation":`打开 Goal 导航`,"header.readOnlySourceDescription":`{source} 通过 SSH 隧道只读展示`,"header.refresh":`刷新状态`,"header.refreshDone":`刚刚更新`,"header.refreshFailed":`刷新失败`,"header.refreshing":`刷新中`,"header.selectAgent":`选择 Agent`,"header.selectChatRuntime":`选择聊天 Runtime`,"header.tasks":`Tasks`,"header.themeBrutal":`切换到野兽主题`,"header.themePaper":`切换到默认主题`,"home.blockingSummary":`其中 {count} 项正在阻塞 Agent。`,"home.completedGoals":`已完成的 Goal`,"home.empty":`当前没有`,"startup.goalLoading":`正在加载状态…`,"startup.goalError":`状态加载失败`,"startup.progress":`已加载 {loaded} / {total} 个活跃 Goal`,"startup.partial":`Goal 状态正在逐个更新,当前统计尚不完整。`,"startup.independent":`此 Goal 的加载不会阻塞其他 Goal,你可以先查看已加载的内容。`,"startup.error.timeout":`读取超时,可在本地服务就绪后重试。`,"startup.error.network":`连接中断,请重试以重新连接。`,"startup.error.service":`本地服务暂时不可用,请重试继续加载。`,"startup.error.revision":`加载期间 Goal 目录发生变化,请刷新以同步。`,"startup.error.scope":`该 Goal 已不在当前来源中,请刷新目录。`,"startup.error.invalid":`无法解析状态响应,请刷新或检查 LoopX 更新。`,"startup.retry":`重试`,"startup.retryFailed":`重试失败的 Goal`,"startup.failedCount":`{count} 个 Goal 加载失败,已加载的 Goal 可继续使用。`,"home.greeting":`你好,我是 LoopX 管家`,"home.history":`历史`,"home.lane.needsYou":`需要你`,"home.lane.needsYouDescription":`等待你的决定、授权或补充信息`,"home.lane.observing":`观察中`,"home.lane.observingDescription":`持续监控,出现变化时再提醒你`,"home.lane.running":`执行中`,"home.lane.runningDescription":`Agent 正在推进并持续回传进展`,"home.lane.scheduled":`已安排`,"home.lane.scheduledDescription":`已经安排,等待时间或前置条件`,"home.noActivity":`尚无活动`,"home.noFirstActivity":`等待首次活动`,"home.noCompletedGoals":`还没有已完成的 Goal`,"home.preservedState":`保留状态,可随时恢复`,"home.stopped":`已停止`,"home.systemHealth":`系统健康:{summary}`,"home.taskCount":`{count} 个 Task`,"home.todayAt":`今天 {time}`,"home.waitingCount":`你有 {count} 项需要处理。`,"home.workspace":`Goal 工作区`,"lark.allMessages":`此 Topic 中的所有消息`,"lark.allTopicMessages":`所有 Topic 消息`,"lark.agentIngress":`Agent 入站方式`,"lark.agentAppPermissions":`每个选中的 Agent 都需要一个已具备群聊提及和回复能力的 Lark App。`,"lark.agentApps":`每个 Agent 的 Lark App`,"lark.agentAppsDescription":`默认使用上方 App;需要独立机器人身份时,可为 Agent 选择另一个兼容 App。`,"lark.agentAppSelection":`{agent} 的 Lark App`,"lark.appCreated":`App 已创建`,"lark.appCreateFailed":`创建失败`,"lark.appLoading":`正在加载可用的 Lark Apps…`,"lark.appPermissions":`该 App 能发送建联消息,但缺少接收群聊 @ 消息或自动回复所需的机器人权限。请开启 im:message.group_at_msg:readonly、im:message.send_as_bot 和事件 im.message.receive_v1,发布新版后刷新。`,"lark.appProfile":`Lark App`,"lark.apps":`Lark Apps`,"lark.autoReplyUnavailable":`自动回复暂不可用`,"lark.autoReplyReady":`自动回复可用`,"lark.bindGoal":`绑定到 Goal`,"lark.cancel":`取消`,"lark.cardinality":`一个 Lark App · 多个 Goal · 每个 Agent 一条隔离路由`,"lark.capture":`接收范围`,"lark.captureAddressed":`仅接收提及 App 或回复 App 的消息`,"lark.captureAll":`接收此 Goal Topic 中的所有消息`,"lark.captureScope":`接收范围`,"lark.captureScopeDescription":`决定哪些 Topic 消息会进入 LoopX;不会扩大 Agent 权限。`,"lark.closeConnection":`关闭连接弹窗`,"lark.closeCreate":`关闭创建弹窗`,"lark.closeSettings":`关闭 Lark 设置`,"lark.connect":`连接`,"lark.connectAllAgents":`连接全部已注册 Agent`,"lark.connectAllAgentsAction":`一键连接 {count} 个 Agent`,"lark.connectAllAgentsDescription":`一次引导创建 {count} 个隔离的 Agent Topic;请在对应 Topic 内发送请求,每个 Agent 保留独立路由和收件箱。`,"lark.connectApp":`连接 Lark App`,"lark.connection":`连接`,"lark.connections":`连接`,"lark.configuration":`Lark 配置`,"lark.continueFeishu":`在飞书中继续`,"lark.createAutomatically":`自动创建 Goal Topic`,"lark.createAutomaticallyDescription":`将为每个选中的 Agent 创建带 Agent 标识的专属 Topic。`,"lark.defaultAgentAppDescription":`用于查找目标群聊,并作为所有选中 Agent 的默认 App;下方的逐 Agent 选择可覆盖它。`,"lark.description":`管理可复用的 Lark App,并用独立 Topic 将群聊连接到 Goal。`,"lark.editConnection":`编辑 Lark 连接`,"lark.goalConnections":`{count} 个 Goal 连接`,"lark.goalTopicConnections":`Lark Goal Topic 连接`,"lark.groupChat":`群聊`,"lark.groupEmpty":`该机器人尚未加入可连接的群。请先在飞书群设置中添加这个机器人,再回来刷新或搜索。`,"lark.groupLoading":`正在读取该机器人已加入的群…`,"lark.groupSearch":`搜索该机器人已加入的群`,"lark.historyPermission":`历史补读权限(独立能力)`,"lark.health.eventProcessed":`已处理 {events} 条事件,成功回复 {replies} 条。`,"lark.health.eventUnverified":`事件订阅待验证`,"lark.health.eventUnverifiedDetail":`Provider listener 已就绪,但尚未收到消息事件。请启用 im.message.receive_v1、开通群聊 @ 消息权限并发布新版,然后在这个 Agent Topic 内发送新的 @ 消息;存在多条 Agent 路由时,群顶层消息会 fail closed。`,"lark.health.ignoredSelf":`已忽略机器人自身发送的消息,避免重复回复。`,"lark.health.invalidRouting":`路由配置无效`,"lark.health.invalidRoutingDetail":`连接已安全停用,请重新选择处理方式并保存。`,"lark.health.lastStatus":`最近事件状态:{status}`,"lark.health.listening":`监听中`,"lark.health.messageContextPermission":`消息权限不足`,"lark.health.messageContextPermissionDetail":`已收到消息事件,但无法读取群消息上下文。请发布并授权该 App 的群消息读取权限。`,"lark.health.notAddressed":`最近消息未直接 @ 机器人`,"lark.health.notAddressedDetail":`监听正常;当前连接只响应直接 @ 机器人或对机器人的回复。`,"lark.health.notStarted":`监听未启动`,"lark.health.notStartedDetail":`请刷新连接或重新启动 LoopX 后再试。`,"lark.health.processingFailed":`消息处理失败`,"lark.health.processingFailedDetail":`已收到消息事件,但 Agent 处理失败。请查看本地诊断后重试。`,"lark.health.queued":`已进入 Agent 收件箱`,"lark.health.queuedDetail":`消息由 {agent} 异步处理,不会启动通用 Chat Session。`,"lark.health.retrying":`监听重试中`,"lark.health.retryingDetail":`事件监听暂时中断,LoopX 正在自动重试。`,"lark.health.routeAmbiguous":`消息匹配多个 Goal`,"lark.health.routeAmbiguousDetail":`同一 Bot 和群聊存在多个完整群捕获连接。请让每个 Agent 使用独立 Bot,或只保留一个完整群连接。`,"lark.health.routeMismatch":`消息未匹配当前 Goal Topic`,"lark.health.routeMismatchDetail":`事件来自其他群聊或 Topic。请重新选择群聊并连接该 Goal,然后发送一条新的 @ 消息。`,"lark.health.routeUnavailable":`消息无法路由到 Goal`,"lark.health.routeUnavailableDetail":`当前连接信息不完整。请重新连接该 Goal 后再发送一条新的 @ 消息。`,"lark.health.starting":`正在启动`,"lark.health.startingDetail":`LoopX 正在启动该 App 的消息事件监听。`,"lark.health.unavailable":`自动回复不可用`,"lark.health.waiting":`等待处理`,"lark.incomingMessages":`接收消息`,"lark.ingressAsync":`异步收件箱`,"lark.ingressAsyncDescription":`写入 Agent 私有收件箱,等待后续显式处理。`,"lark.ingressLegacy":`旧版直连`,"lark.ingressLegacyDescription":`旧连接兼容模式;保存时请选择新的三种入站模式之一。`,"lark.ingressQueue":`排队`,"lark.ingressQueueDescription":`进入同一 Agent Session 的有界 FIFO 队列,当前 Turn 完成后处理。`,"lark.ingressSteering":`实时引导`,"lark.ingressSteeringDescription":`投到当前活跃 Turn;没有精确活跃 Turn 时安全拒绝。`,"lark.loading":`加载 Lark 配置…`,"lark.management":`Lark 管理`,"lark.openEventSettings":`查看飞书事件配置`,"lark.mentions":`提及机器人`,"lark.mentionsOnly":`仅提及消息`,"lark.needsMessagePermissions":`需要消息权限`,"lark.needsSetup":`需要设置`,"lark.newApp":`新建 Lark App`,"lark.noAgentConfigured":`未配置 Agent`,"lark.noConnections":`暂无匹配的连接。`,"lark.noProfiles":`还没有可用的 lark-cli App profile。`,"lark.profileName":`Profile 名称`,"lark.profileValidation":`Profile 只能包含字母、数字、点、下划线和连字符。`,"lark.processing":`处理方式`,"lark.region":`区域`,"lark.registerAnother":`+ 注册另一个 Lark App — 通过飞书创建`,"lark.reopenFeishu":`重新打开飞书`,"lark.settingsConfigure":`配置 {goal}`,"lark.settingsDisconnect":`解绑 {goal}`,"lark.replyMode":`回复方式`,"lark.replyModeDescription":`当前只支持在来源 Topic 内回复,避免跨群或跨 Goal 投递。`,"lark.reusableApps":`{count} 个可复用 App`,"lark.reusableWorkspaceApp":`可复用工作区 App`,"lark.saveConnection":`保存连接`,"lark.searchConnections":`搜索 Lark 连接`,"lark.searchPlaceholder":`搜索 App、群、Goal 或 Topic`,"lark.setupCopy":`LoopX 将通过 lark-cli 打开飞书官方创建页面。应用凭证保存在系统 Keychain,LoopX 只保留 profile 引用。`,"lark.someoneMentions":`有人提及 Agent`,"lark.targetAgent":`目标 Agent`,"lark.targetAgentDescription":`选择该 Goal 内已注册的 Agent。此连接只投递给一个 Agent,不广播、不授予新权限。实时引导与排队需要该 Agent 的精确活跃 Session。`,"lark.agentUnavailable":`{agent} · 已不可用`,"lark.selectRegisteredAgent":`请先选择可用的已注册 Agent;不会自动替换原先的接收者。`,"lark.topicPreview":`Topic 预览`,"lark.topicReply":`Topic 回复`,"lark.trigger":`触发方式`,"lark.waitingFeishu":`等待飞书完成创建`,"lark.waitingFeishuDescription":`请在新窗口中完成飞书授权,完成后会自动回到这里。`,"lark.waitingLink":`正在生成飞书官方创建链接…`,"lark.error.appCreate":`Lark App 创建失败`,"lark.error.appRequired":`请选择一个 Lark App profile。`,"lark.error.bind":`绑定失败`,"lark.error.bindPreview":`绑定预览失败`,"lark.error.configuration":`Lark 配置加载失败`,"lark.error.groupLookup":`无法读取该机器人已加入的群。请检查机器人状态后重试。`,"lark.error.groupLoad":`群聊加载失败`,"lark.error.invalidApp":`Lark App profile 不可用或尚未完成授权。`,"lark.error.messagePermissions":`该 App 缺少自动回复所需的机器人权限。请开启 im:message.group_at_msg:readonly 和 im:message:send_as_bot,发布新版后回来刷新重试。`,"lark.error.provider":`飞书 API 调用失败,且没有生成已验证回执。请稍后重试。`,"lark.error.setupPoll":`创建状态查询失败`,"lark.error.setupStart":`无法启动 Lark App 创建流程`,"lark.error.cliExecutable":`已找到配置的 lark-cli,但当前无法执行。请检查安装或启动参数。`,"lark.error.cliMissing":`未发现 lark-cli。请先安装 lark-cli,然后重新启动 LoopX。`,"lark.error.cliStart":`lark-cli 启动失败。请检查安装状态,然后重新启动 LoopX。`,"lark.error.disconnect":`解绑失败`,"notifications.autoNotify":`需要你确认时自动推送到群里`,"notifications.bind":`绑定到通知群`,"notifications.bindConfirm":`将把「{goal}」绑定到通知群「{target}」,绑定时会验证机器人在群内并发送一条确认消息。`,"notifications.bindFailed":`绑定失败`,"notifications.bound":`已绑定`,"notifications.confirmBind":`确认绑定`,"notifications.description":`把 Goal 里需要你确认的变更推送到飞书群。绑定和开关在这里完成,推送逻辑沿用现有通道。`,"notifications.disabled":`已停用`,"notifications.group":`通知群:{target}`,"notifications.loadFailed":`通知群列表加载失败`,"notifications.noTargets":`还没有可用的通知群。通知群涉及机器人私有身份,请先在终端配置一次:`,"notifications.notBound":`未绑定`,"notifications.recent":`最近 {time}`,"notifications.sentCount":`已发送 {count} 条`,"notifications.settings":`Goal 通知绑定`,"notifications.setupFailed":`设置失败`,"notifications.title":`飞书群通知`,"proposal.field.agentId":`Agent`,"proposal.field.cadence":`频率`,"proposal.field.completionCriteria":`完成标准`,"proposal.field.executionBoundary":`执行边界`,"proposal.field.goalId":`Goal ID`,"proposal.field.heartbeat":`Heartbeat`,"proposal.field.initialTodos":`首个任务`,"proposal.field.objective":`目标`,"proposal.field.operation":`操作`,"proposal.field.permission":`权限`,"proposal.field.reason":`原因`,"proposal.field.stopCondition":`停止条件`,"proposal.field.target":`检查内容`,"proposal.field.timezone":`时区`,"proposal.field.title":`标题`,"proposal.field.workspace":`执行工作区`,"proposal.gate.default":`需要宿主确认`,"proposal.impact.default":`确认后会调用规范 LoopX 服务写入状态。`,"proposal.impact.goalCreate":`确认后会创建 Goal 和首个 Todo,并让选定 Agent 开始首轮推进。`,"proposal.impact.lifecycleDelete":`确认后会从 source registry 和 global registry 移除这个已停止 Goal;项目文件、历史状态文件和备份不会被删除。`,"proposal.impact.lifecycleResume":`确认后会恢复 Goal 的自动调度资格并移回 Active Goals;实际执行仍受 quota、Gate 和 Todo 约束。`,"proposal.impact.lifecycleStop":`确认后会停止自动推进,并将 Goal 移入折叠的「已停止」列表;历史、Todo 和证据都会保留,可随时恢复。`,"proposal.impact.protected":`该操作需要通过受保护的 LoopX 写入服务完成。`,"proposal.primary.apply":`确认并应用`,"proposal.primary.goalCreate":`创建 Goal 并开始首轮`,"proposal.primary.lifecycleDelete":`删除 Goal`,"proposal.primary.lifecycleResume":`恢复 Goal`,"proposal.primary.lifecycleStop":`停止 Goal`,"proposal.primary.todoStart":`创建任务并开始执行`,"proposal.summary.goalCreate":`创建 Goal:{title}`,"proposal.summary.heartbeat":`为当前 Goal 设置 Heartbeat`,"proposal.summary.lifecycleDelete":`删除 Goal:{title}`,"proposal.summary.lifecycleResume":`恢复 Goal:{title}`,"proposal.summary.lifecycleStop":`停止 Goal:{title}`,"proposal.summary.monitor":`为当前 Goal 创建定时检查:{target}`,"proposal.workspace.current":`当前本地工作区(未绑定 Repository)`,"proposal.workspace.named":`{workspace}(仅提供执行环境,不会自动关联仓库)`,"proposal.workspaceGate.agentImpact":`先完成 Agent 身份绑定,再重新检查原操作;当前没有写入 Goal。`,"proposal.workspaceGate.agentTitle":`先绑定 Agent`,"proposal.workspaceGate.defaultSummary":`请选择 Goal 所属工作区。`,"proposal.workspaceGate.selectionImpact":`选择工作区后会重新展示待确认操作,选择本身不会写入状态。`,"proposal.workspaceGate.selectionTitle":`选择 Goal 工作区`,"projection.agentAdvancingGoal":`Agent 正在推进当前 Goal`,"projection.agentIdle":`暂无需要你处理`,"projection.agentNeedsDecision":`Agent 等待你的决定`,"projection.agentPreparingNextStep":`Agent 正在整理下一步`,"projection.agentStopped":`已由你停止;历史、Todo 和证据仍保留`,"projection.agentWaitingExternal":`正在等待外部条件`,"projection.confirmAgentDecision":`请确认 Agent 下一步需要的权限或决策`,"projection.events24h":`24 小时内 {count} 个事件`,"projection.firstReadOnlyAdapterCheck":`执行首次只读适配检查并保存进度`,"projection.goalVerified":`Goal 状态、Todo 与注册信息已验证`,"projection.latestRun":`最近运行`,"projection.latestValidation":`最近验证`,"projection.nextUpdatePending":`等待 LoopX 更新下一步`,"projection.publicSafeProjection":`公开安全状态投影`,"projection.refreshState":`刷新 LoopX 状态,确认当前进度仍然有效`,"projection.runEvidenceAvailable":`存在可查看的运行证据`,"projection.runRecorded":`最近一次 LoopX 运行已经记录`,"projection.statusRefreshNeeded":`LoopX 状态需要刷新`,"projection.todoStatusUpdated":`Todo 状态已经更新,正在确认下一步`,"projection.validationRecorded":`最近验证已经记录`,"runs.completed":`已完成`,"runs.failed":`需检查`,"runs.interrupted":`已中断`,"runs.queued":`已安排`,"runs.ready":`可继续`,"runs.resumeFailed":`恢复失败`,"runs.running":`执行中`,"runs.unknown":`状态未知`,"runs.waiting":`等待条件`,"schedule.active":`执行中`,"schedule.heartbeat":`Goal Heartbeat`,"schedule.monitor":`定时与持续任务`,"schedule.paused":`已暂停`,"schedule.summary":`按 LoopX 调度约束持续检查`,"schedule.defaultTarget":`检查当前 Goal 的阻塞、进度与新产出`,"schedule.unsupportedCalendar":`当前定时检查不支持精确到星期或时刻的日历计划。请改用固定间隔,例如“每 30 分钟”“每 2 小时”或“每天”;草稿已保留,没有生成待确认操作。`,"source.add":`添加来源`,"source.addConfigured":`添加只读来源`,"source.addMethod":`来源添加方式`,"source.addSsh":`添加 SSH 隧道来源`,"source.closeForm":`关闭来源表单`,"source.configured":`已配置 SSH`,"source.configuredCount":`本机 SSH Host · {count} 个`,"source.configuredGroup":`已配置 SSH Host · {count}(点击快速添加)`,"source.connected":`已连接`,"source.connecting":`连接中`,"source.controlPlane":`控制面来源`,"source.copy":`复制`,"source.copyCommand":`复制 SSH 隧道命令`,"source.copyError":`无法复制命令,请手动复制下方命令。`,"source.copied":`已复制`,"source.description":`已读取全部显式 Host(含 Include);通配规则不会作为具体来源。先运行命令,LoopX 不读取密钥或配置细节。`,"source.host":`本机 SSH Host`,"source.hostEmpty":`~/.ssh/config 中没有可直接选择的显式 Host。`,"source.hostLoadError":`无法读取本机 SSH Host。`,"source.hostPlaceholder":`输入或搜索 Host`,"source.invalid":`SSH 来源参数无效。`,"source.loadingHosts":`正在读取…`,"source.localInteractive":`本机交互`,"source.localPort":`本地端口`,"source.manual":`手动 URL`,"source.manualDescription":`远端来源始终按只读投影处理,不继承本机写权限。`,"source.name":`名称`,"source.namePlaceholder":`远程开发机`,"source.notAvailable":`不可用`,"source.readOnly":`SSH 隧道 · 只读`,"source.readOnlyNoticeDescription":`你可以查看 Goal、Task、证据与运行状态;写入、纠偏和 Agent 会话仍留在来源主机。`,"source.readOnlyNoticeTitle":`远端只读投影`,"source.readOnlyWriteError":`远端 SSH 隧道来源是只读投影,不能执行控制面写入。`,"source.refreshHosts":`重新读取 SSH Host`,"source.remove":`移除来源 {source}`,"source.removeCurrent":`移除当前来源`,"source.select":`选择控制面来源`,"source.selectHost":`请选择已配置的 SSH Host。`,"source.statusUrl":`本地转发 URL`,"source.tunnelCommandPending":`选择 Host 后生成隧道命令`,"machine.absent":`尚未配置`,"machine.action.create":`创建机器策略`,"machine.action.delete":`移除机器策略`,"machine.action.unchanged":`无需写入`,"machine.action.update":`更新机器策略`,"machine.applied":`机器策略已应用,并通过回读校验。`,"machine.applyError":`无法应用机器策略。`,"machine.applyPreview":`应用已审阅预览`,"machine.changedNamespaces":`变更的 Namespace`,"machine.capabilityCatalog":`机器能力目录`,"machine.capabilityEmpty":`当前没有注册可在机器作用域配置的能力。`,"machine.configured":`已配置`,"machine.confirmRollback":`确认回滚`,"machine.currentRevision":`当前 Revision`,"machine.currentValue":`当前机器值`,"machine.description":`与 Goal 设置共用能力目录。在这里管理受支持的机器默认值;仅支持 Goal 配置的能力会明确标注。`,"capabilities.rawJson":`高级:原始 JSON`,"machine.goalOnly":`此能力目前仅支持 Goal 级配置。请打开具体 Goal 的能力设置进行配置;这里不会设置机器级默认值。`,"machine.desiredRevision":`目标 Revision`,"machine.editorUnavailable":`当前版本未安装此 Namespace 的编辑器`,"machine.editorUnavailableDescription":`它仍会显示在 Registry 中;安装或升级对应的 Dashboard 编辑器后才能修改。`,"machine.editorMode":`编辑模式`,"machine.liveDefault":`实时默认值;Goal 显式覆盖优先`,"machine.liveDefaultDescription":`没有显式周期报告覆盖的 Goal 会在每次规划时读取当前机器策略。修改或移除策略会立即影响这些已有 Goal;显式 Goal 覆盖保持固定。`,"machine.genericNamespaceDescription":`使用 JSON 编辑这个已注册 Namespace。LoopX 会先按 capability 自己拥有的 schema 校验,再允许预览写入。`,"machine.jsonConfiguration":`Namespace 配置(JSON)`,"machine.jsonConfigurationHelp":`只更新当前 Namespace;其他机器配置会保留,Apply 仍锁定到已审阅的 Preview Revision。`,"machine.jsonEditor":`JSON`,"machine.jsonInvalid":`请先填写一个合法的 JSON object,再预览变更。`,"machine.loadError":`无法读取机器配置。`,"machine.machinePolicy":`机器策略`,"machine.namespaceCount":`已注册 Namespace`,"machine.namespaces":`配置 Namespace`,"machine.periodicReport":`周期报告`,"machine.periodicReportDescription":`为所有未显式覆盖的 Goal 提供默认报告策略;Goal 调度与发送消费解析后的有效配置。`,"machine.periodicReportActivation":`开启后将在已验证的阶段节点自动投递`,"machine.periodicReportActivationDescription":`这不是每周定时器。当 LoopX 验证 Goal 已完成一个阶段时,Agent 会生成并冻结报告,随后通过配置的 Goal Channel 自动发送。启用此订阅即授予持续投递权;发送失败或路由漂移会 fail closed 并进入修复。`,"machine.preview":`审阅机器配置变更`,"machine.previewChanges":`预览变更`,"machine.previewError":`无法生成机器策略预览。`,"machine.previewLocked":`应用操作锁定到当前 Revision;若机器状态变化,LoopX 会要求重新预览。`,"machine.previewRollback":`预览回滚`,"machine.previewRemoval":`预览移除`,"machine.profilePreset":`Profile preset`,"machine.profilePresetHelp":`由 capability 管理的 preset,例如 weekly-progress。`,"machine.registry":`Typed Registry`,"machine.requiredFields":`开启后必须填写 profile preset、Goal Channel route 与有效时区。`,"machine.revision":`机器 Revision`,"machine.revisionLockedReady":`所有变更必须先预览;只有对应的机器 Revision 仍然有效时才会应用。`,"machine.rollbackAvailable":`可回滚上一次应用`,"machine.rollbackDescription":`先预览已保存的前一 Revision,再决定是否恢复。`,"machine.rollbackError":`无法完成回滚。`,"machine.rollbackPreviewDescription":`前一 Revision 已准备恢复,请确认执行本次回滚。`,"machine.rolledBack":`已恢复前一版机器策略,并通过校验。`,"machine.removed":`机器策略已移除,并通过回读校验。`,"machine.routeRef":`Goal Channel route`,"machine.routeRefHelp":`只填写公开 route alias;凭据与 provider identifier 不会进入此表单。`,"machine.timezone":`时区`,"machine.timezoneHelp":`填写 IANA 时区,例如 Asia/Shanghai。`,"machine.title":`机器配置`,"machine.unchanged":`机器策略已与预览一致,本次没有写入。`,"machine.visualEditor":`引导式`,"capabilities.atomicOverride":`Goal override 按完整配置生效`,"capabilities.atomicOverrideDescription":`Goal 的完整配置优先于机器默认值;LoopX 不会在两个作用域之间逐字段拼接。`,"capabilities.applyFailed":`Goal 能力变更未写入。`,"capabilities.applyPreview":`应用此预览`,"capabilities.catalog":`Goal 能力目录`,"capabilities.chooseGoal":`请先选择一个 Goal,再查看它的能力配置。`,"capabilities.defaultValue":`声明的默认值`,"capabilities.description":`查看当前 Goal 可用的能力,以及每项配置的准确作用域。`,"capabilities.editorPrepared":`已注册 typed editor contract`,"capabilities.effectiveSource":`当前生效来源`,"capabilities.empty":`当前 Goal 没有可用的能力描述。`,"capabilities.fields":`已注册字段`,"capabilities.goalPolicy":`Goal 能力策略`,"capabilities.goalScope":`Goal`,"capabilities.goalValue":`当前 Goal 值`,"capabilities.loadFailed":`无法加载 Goal 能力`,"capabilities.loading":`正在加载 Goal 能力…`,"capabilities.machineOnly":`此能力只能在机器作用域配置。`,"capabilities.machineValue":`实时机器默认值`,"capabilities.machineScope":`机器`,"capabilities.previewOnly":`当前读取结果来自真实配置;在 revision-locked preview/apply 路径接通前,Dashboard 不会提供 Goal 写入控件。`,"capabilities.preview":`锁定 revision 的变更预览`,"capabilities.previewChanges":`预览变更`,"capabilities.restoreInheritance":`恢复继承机器默认值`,"capabilities.previewFailed":`无法预览 Goal 能力变更。`,"capabilities.previewLocked":`应用时会重新校验这一个 plan revision;过期变更将被拒绝。`,"capabilities.partialWrite":`Goal 值已保存;共享投影仍需修复`,"capabilities.partialWriteDescription":`源 Goal 配置已经写入并回读,但共享 runtime 投影尚未同步;请勿重复提交本次变更。`,"capabilities.refreshSource":`刷新源配置`,"capabilities.readOnly":`只读能力`,"capabilities.revisionLockedReady":`所有变更必须先预览;只有对应的精确 revision 仍然有效时才会写入。`,"capabilities.retry":`重试`,"capabilities.source.capability_default":`能力默认值`,"capabilities.source.goal_override":`Goal override`,"capabilities.source.machine_default":`实时机器默认值`,"capabilities.source.not_configured":`未配置`,"capabilities.title":`Goal 能力`,"settings.close":`关闭设置`,"settings.appearance":`外观`,"settings.appearanceDescription":`管理当前浏览器里的工作区显示偏好。`,"settings.appearanceTabDescription":`主题和显示偏好`,"settings.capabilitiesTabDescription":`当前 Goal 的能力覆盖配置`,"settings.back":`返回工作区`,"settings.categories":`设置分类`,"settings.description":`管理工作区偏好与集成。`,"settings.eyebrow":`工作区偏好`,"settings.general":`通用`,"settings.goalConnections":`Goal 连接`,"settings.language":`语言`,"settings.languageDescription":`选择 LoopX Desktop 工作区使用的界面语言。`,"settings.languageEnglishDescription":`使用英文显示导航、设置和工作区控件。`,"settings.languageEnglish":`English`,"settings.languageSimplifiedChineseDescription":`使用简体中文显示导航、设置和工作区控件。`,"settings.languageSimplifiedChinese":`简体中文`,"settings.languageStoredLocally":`此偏好仅保存在当前设备。`,"settings.languageTabDescription":`当前设备的界面语言`,"settings.larkTabDescription":`App、群聊和 Goal Topic 连接`,"settings.machineTabDescription":`本机各 Capability 共享的 typed defaults`,"settings.notifications":`通知`,"settings.open":`设置`,"settings.themeDefault":`纸张`,"settings.themeDefaultDescription":`安静、轻量,适合长期查看。`,"settings.themeDescription":`选择工作区的视觉风格。设置会保存在当前浏览器本地。`,"settings.themeHighContrast":`高对比`,"settings.themeHighContrastDescription":`更强边框和更醒目的状态块。`,"settings.themeLoopx":`LoopX 标准`,"settings.themeLoopxDescription":`精确的黑白界面、Geist 字体与安静的细线结构。`,"settings.title":`设置`,"settings.workspaceDisplay":`工作区显示`,"settings.workspaceTheme":`工作区主题`,"session.closeRecord":`退出运行记录`,"session.details":`Session 详情`,"session.record":`执行 Session · 运行记录`,"session.recordDescription":`当前时间线已切换到这次 Session 的消息与 Turn 记录。`,"sidebar.createGoal":`创建 Goal`,"sidebar.delete":`删除`,"sidebar.deleteGoal":`删除 Goal`,"sidebar.manager":`LoopX 管家`,"sidebar.notifications":`设置`,"sidebar.owner":`个人工作区`,"sidebar.product":`个人 Agent 工作区`,"sidebar.resume":`恢复`,"sidebar.resumeGoal":`恢复 Goal`,"sidebar.stop":`停止`,"tasks.historyLoading":`正在加载历史…`,"tasks.historyError":`历史加载失败,已显示的内容仍可查看。`,"tasks.historyExpired":`历史快照已过期,重新加载后可继续查看。`,"tasks.historyRetry":`重新加载`,"tasks.historyEnd":`已显示全部完成记录`,"tasks.historyMore":`加载更多`,"tasks.historyLocalOnly":`请打开这台机器的 Dashboard 查看完整历史。`,"sidebar.sortGoals":`调整 Goal 顺序`,"sidebar.dragGoal":`拖拽调整顺序,或使用列表排序按钮`,"sidebar.moveUp":`上移 {goal}`,"sidebar.moveDown":`下移 {goal}`,"sidebar.goalMoved":`{goal} 已移至第 {position} 位`,"sidebar.orderNotSaved":`顺序已在本次页面生效;浏览器存储不可用,无法保存。`,"sidebar.stopGoal":`停止 Goal`,"sidebar.stopped":`已停止`,"sidebar.stoppedLoading":`正在加载已停止 Goal`,"sidebar.stoppedLoadFailed":`已停止 Goal 加载失败,其他 Goal 仍可使用。`,"sidebar.retryStopped":`重试`,"state.completed":`已完成`,"state.needsRepair":`需修复`,"state.needsYou":`等你`,"state.quiet":`安静运行`,"state.running":`推进中`,"state.stopped":`已停止`,"state.waiting":`等待条件`,"tasks.blocked":`受阻`,"tasks.agentLane":`工作 Agent`,"tasks.agentLaneDescription":`筛选这个 Goal 下的工作泳道`,"tasks.agentLaneFilter":`按工作 Agent 筛选`,"tasks.allAgentLanes":`全部 Agent({count})`,"tasks.chatAgentReplied":`Agent 已回复`,"tasks.chatPending":`已发送给 Agent`,"tasks.chatPendingDescription":`正在处理;只有经过确认的任务操作才会更新 Tasks。`,"tasks.chatRecent":`最近对话`,"tasks.chatUnchangedDescription":`本次对话没有直接修改 Tasks。需要执行时,可先转成 Task 草稿并确认。`,"tasks.chatViewReply":`查看回复`,"tasks.convertToTask":`转为 Task`,"tasks.completed":`已完成`,"runs.discoveryPartial":`部分执行详情暂不可用,正在重连;任务摘要不代表实时执行状态。`,"runs.discoveryOffline":`执行服务暂不可用,正在重连;保留的任务摘要可能已过时。`,"files.openConversation":`前往会话`,"files.exportSummary":`导出摘要`,"tasks.viewDescription":`先处理待确认,再查看工作与完成记录`,"tasks.viewLabel":`任务视图`,"tasks.listView":`列表`,"tasks.boardView":`看板`,"tasks.completedSummary":`已完成 {count} 项,近期完成明细由控制面按需投影。`,"tasks.emptyCompleted":`还没有完成的任务。`,"tasks.emptyConfirm":`没有待确认的任务。`,"tasks.emptyRunning":`没有待执行或进行中的任务。`,"tasks.emptySchedules":`没有定时任务。`,"tasks.emptyGoal":`这个 Goal 还没有任务。用下面的输入框描述下一步,LoopX 会先展示待确认操作。`,"tasks.markComplete":`标记完成:{name}`,"tasks.moreActions":`更多操作:{name}`,"tasks.openExecution":`查看执行过程:{name}`,"tasks.pending":`待处理`,"tasks.pendingAndRunning":`待执行 / 进行中`,"tasks.scheduled":`定时与持续`,"tasks.sessionError":`Session 异常`,"tasks.waiting":`待执行`,"tasks.waitingAge":`已等待 {age}`,"tasks.viewExecution":`查看执行过程`,"tasks.viewResult":`查看结果`,"time.days":`{count} 天`,"time.hours":`{count} 小时`,"timeline.emptyGoal":`这个 Goal 还没有新动态`,"timeline.emptyGoalDescription":`你可以直接询问进度或下发新的纠偏信息。`,"timeline.emptyWorkspace":`今天的工作区很安静`,"timeline.emptyWorkspaceDescription":`向 LoopX 管家描述一个 Goal,或询问今天最值得关注的事情。`,"timeline.gateHistory":`{count} 项历史 Gate`,"timeline.pending":`正在整理…`,"timeline.runCompleted":`{run}:已完成`,"timeline.review":`查看处理方式`,"timeline.reviewAndConfirm":`查看并确认`,"timeline.waitingConfirmation":`待你确认`}};function Gi(e,t){return t?Object.entries(t).reduce((e,[t,n])=>e.replaceAll(`{${t}}`,String(n)),e):e}function Ki(){try{let e=window.localStorage.getItem(Ui);if(e===`en`||e===`zh-CN`)return e}catch{}if(typeof navigator>`u`)return`en`;let e=navigator.languages?.length?navigator.languages:[navigator.language];for(let t of e){let e=t?.split(`-`)[0].toLowerCase();if(e===`en`)return`en`;if(e===`zh`)return`zh-CN`}return`en`}function qi({children:e}){let[t,n]=(0,R.useState)(Ki);function r(e){n(e);try{window.localStorage.setItem(Ui,e)}catch{}}(0,R.useEffect)(()=>{document.documentElement.lang=t},[t]);let i=(0,R.useMemo)(()=>({locale:t,setLocale:r,t:(e,n)=>Gi(Wi[t][e],n)}),[t]);return(0,z.jsx)(Hi.Provider,{value:i,children:e})}function Ji(){let e=(0,R.useContext)(Hi);if(!e)throw Error(`useWorkspaceI18n must be used within WorkspaceI18nProvider`);return e}function Yi(e,t){let n={安静运行:`state.quiet`,等你:`state.needsYou`,等待条件:`state.waiting`,推进中:`state.running`,需修复:`state.needsRepair`,已完成:`state.completed`,已停止:`state.stopped`}[e];return n?Wi[t][n]:e}function Xi(e,t){let n={busy:`runs.running`,completed:`runs.completed`,failed:`runs.failed`,queued:`runs.queued`,ready:`runs.ready`,resume_failed:`runs.resumeFailed`,running:`runs.running`,waiting:`runs.waiting`};return e?n[e]?t(n[e]):e:t(`runs.unknown`)}function Zi(e,t){if(!e)return null;let n=new Date(e).getTime();if(Number.isNaN(n))return null;let r=Date.now()-n;if(r<36e5)return null;let i=Math.floor(r/864e5);return i>=1?t(`time.days`,{count:i}):t(`time.hours`,{count:Math.floor(r/36e5)})}var Qi;function H(e,t,n){function r(n,r){if(n._zod||Object.defineProperty(n,"_zod",{value:{def:r,constr:o,traits:new Set},enumerable:!1}),n._zod.traits.has(e))return;n._zod.traits.add(e),t(n,r);let i=o.prototype,a=Object.keys(i);for(let e=0;en?.Parent&&t instanceof n.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(o,"name",{value:e}),o}var $i=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},ea=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(Qi=globalThis).__zod_globalConfig??(Qi.__zod_globalConfig={});var ta=globalThis.__zod_globalConfig;function na(e){return e&&Object.assign(ta,e),ta}function ra(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function ia(e,t){return typeof t==`bigint`?t.toString():t}function aa(e){return{get value(){{let t=e();return Object.defineProperty(this,"value",{value:t}),t}}}}function oa(e){return e==null}function sa(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function ca(e,t){let n=e/t,r=Math.round(n),i=2**-52*Math.max(Math.abs(n),1);return Math.abs(n-r){};function ga(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var _a=aa(()=>{if(ta.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function va(e){if(ga(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return ga(n)!==!1&&Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)!==!1}function ya(e){return va(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var ba=new Set([`string`,`number`,`symbol`]);function xa(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Sa(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function U(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function Ca(e){return Object.keys(e).filter(t=>e[t]._zod.optin===`optional`&&e[t]._zod.optout===`optional`)}var wa={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function Ta(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);return Sa(e,fa(e._zod.def,{get shape(){let e={};for(let r in t){if(!(r in n.shape))throw Error(`Unrecognized key: "${r}"`);t[r]&&(e[r]=n.shape[r])}return da(this,`shape`,e),e},checks:[]}))}function Ea(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);return Sa(e,fa(e._zod.def,{get shape(){let r={...e._zod.def.shape};for(let e in t){if(!(e in n.shape))throw Error(`Unrecognized key: "${e}"`);t[e]&&delete r[e]}return da(this,`shape`,r),r},checks:[]}))}function Da(e,t){if(!va(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=e._zod.def.shape;for(let e in t)if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return da(this,`shape`,n),n}}))}function Oa(e,t){if(!va(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return da(this,`shape`,n),n}}))}function ka(e,t){if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t._zod.def.shape};return da(this,`shape`,n),n},get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function Aa(e,t,n){let r=t._zod.def.checks;if(r&&r.length>0)throw Error(`.partial() cannot be used on object schemas containing refinements`);return Sa(t,fa(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in r))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t])}else for(let t in r)i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t];return da(this,`shape`,i),i},checks:[]}))}function ja(e,t,n){return Sa(t,fa(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in i))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=new e({type:`nonoptional`,innerType:r[t]}))}else for(let t in r)i[t]=new e({type:`nonoptional`,innerType:r[t]});return da(this,`shape`,i),i}}))}function Ma(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function Fa(e){return typeof e==`string`?e:e?.message}function Ia(e,t,n){let r=e.message?e.message:Fa(e.inst?._zod.def?.error?.(e))??Fa(t?.error?.(e))??Fa(n.customError?.(e))??Fa(n.localeError?.(e))??`Invalid input`,{inst:i,continue:a,input:o,...s}=e;return s.path??=[],s.message=r,t?.reportInput&&(s.input=o),s}function La(e){return Array.isArray(e)?`array`:typeof e==`string`?`string`:`unknown`}function Ra(...e){let[t,n,r]=e;return typeof t==`string`?{message:t,code:`custom`,input:n,inst:r}:{...t}}var za=(e,t)=>{e.name=`$ZodError`,Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),e.message=JSON.stringify(t,ia,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},Ba=H(`$ZodError`,za),Va=H(`$ZodError`,za,{Parent:Error});function Ha(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}function Ua(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i(t,n,r,i)=>{let a=r?{...r,async:!1}:{async:!1},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise)throw new $i;if(o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>Ia(e,a,na())));throw ha(t,i?.callee),t}return o.value},Ga=e=>async(t,n,r,i)=>{let a=r?{...r,async:!0}:{async:!0},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise&&(o=await o),o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>Ia(e,a,na())));throw ha(t,i?.callee),t}return o.value},Ka=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new $i;return a.issues.length?{success:!1,error:new(e??Ba)(a.issues.map(e=>Ia(e,i,na())))}:{success:!0,data:a.value}},qa=Ka(Va),Ja=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?{success:!1,error:new e(a.issues.map(e=>Ia(e,i,na())))}:{success:!0,data:a.value}},Ya=Ja(Va),Xa=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Wa(e)(t,n,i)},Za=e=>(t,n,r)=>Wa(e)(t,n,r),Qa=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ga(e)(t,n,i)},$a=e=>async(t,n,r)=>Ga(e)(t,n,r),eo=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ka(e)(t,n,i)},to=e=>(t,n,r)=>Ka(e)(t,n,r),no=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ja(e)(t,n,i)},ro=e=>async(t,n,r)=>Ja(e)(t,n,r),io=/^[cC][0-9a-z]{6,}$/,ao=/^[0-9a-z]+$/,oo=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,so=/^[0-9a-vA-V]{20}$/,co=/^[A-Za-z0-9]{27}$/,lo=/^[a-zA-Z0-9_-]{21}$/,uo=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,fo=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,po=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,mo=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,ho=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;function go(){return new RegExp(ho,`u`)}var _o=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,vo=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,yo=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,bo=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,xo=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,So=/^[A-Za-z0-9_-]*$/,Co=/^https?$/,wo=/^\+[1-9]\d{6,14}$/,To=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`,Eo=RegExp(`^${To}$`);function Do(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Oo(e){return RegExp(`^${Do(e)}$`)}function ko(e){let t=Do({precision:e.precision}),n=[`Z`];e.local&&n.push(``),e.offset&&n.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let r=`${t}(?:${n.join(`|`)})`;return RegExp(`^${To}T(?:${r})$`)}var Ao=e=>{let t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??``}}`:`[\\s\\S]*`;return RegExp(`^${t}$`)},jo=/^-?\d+$/,Mo=/^-?\d+(?:\.\d+)?$/,No=/^(?:true|false)$/i,Po=/^null$/i,Fo=/^[^A-Z]*$/,Io=/^[^a-z]*$/,Lo=H(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),Ro={number:`number`,bigint:`bigint`,object:`date`},zo=H(`$ZodCheckLessThan`,(e,t)=>{Lo.init(e,t);let n=Ro[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.maximum:n.exclusiveMaximum)??1/0;t.value{(t.inclusive?r.value<=t.value:r.value{Lo.init(e,t);let n=Ro[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.minimum:n.exclusiveMinimum)??-1/0;t.value>r&&(t.inclusive?n.minimum=t.value:n.exclusiveMinimum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Vo=H(`$ZodCheckMultipleOf`,(e,t)=>{Lo.init(e,t),e._zod.onattach.push(e=>{var n;(n=e._zod.bag).multipleOf??(n.multipleOf=t.value)}),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?n.value%t.value===BigInt(0):ca(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),Ho=H(`$ZodCheckNumberFormat`,(e,t)=>{Lo.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=wa[t.format];e._zod.onattach.push(e=>{let r=e._zod.bag;r.format=t.format,r.minimum=i,r.maximum=a,n&&(r.pattern=jo)}),e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}sa&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),Uo=H(`$ZodCheckMaxLength`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.maximum??1/0;t.maximum{let r=n.value;if(r.length<=t.maximum)return;let i=La(r);n.issues.push({origin:i,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Wo=H(`$ZodCheckMinLength`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.minimum??-1/0;t.minimum>n&&(e._zod.bag.minimum=t.minimum)}),e._zod.check=n=>{let r=n.value;if(r.length>=t.minimum)return;let i=La(r);n.issues.push({origin:i,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Go=H(`$ZodCheckLengthEquals`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag;n.minimum=t.length,n.maximum=t.length,n.length=t.length}),e._zod.check=n=>{let r=n.value,i=r.length;if(i===t.length)return;let a=La(r),o=i>t.length;n.issues.push({origin:a,...o?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),Ko=H(`$ZodCheckStringFormat`,(e,t)=>{var n,r;Lo.init(e,t),e._zod.onattach.push(e=>{let n=e._zod.bag;n.format=t.format,t.pattern&&(n.patterns??=new Set,n.patterns.add(t.pattern))}),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),qo=H(`$ZodCheckRegex`,(e,t)=>{Ko.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),Jo=H(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=Fo,Ko.init(e,t)}),Yo=H(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=Io,Ko.init(e,t)}),Xo=H(`$ZodCheckIncludes`,(e,t)=>{Lo.init(e,t);let n=xa(t.includes),r=new RegExp(typeof t.position==`number`?`^.{${t.position}}${n}`:n);t.pattern=r,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(r)}),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),Zo=H(`$ZodCheckStartsWith`,(e,t)=>{Lo.init(e,t);let n=RegExp(`^${xa(t.prefix)}.*`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),Qo=H(`$ZodCheckEndsWith`,(e,t)=>{Lo.init(e,t);let n=RegExp(`.*${xa(t.suffix)}$`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),$o=H(`$ZodCheckOverwrite`,(e,t)=>{Lo.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),es=class{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),--this.indent}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(` +`).filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>` `.repeat(this.indent*2)+e);for(let e of r)this.content.push(e)}compile(){let e=Function,t=this?.args,n=[...(this?.content??[``]).map(e=>` ${e}`)];return new e(...t,n.join(` +`))}},ts={major:4,minor:4,patch:3},ns=H(`$ZodType`,(e,t)=>{var n;e??={},e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=ts;let r=[...e._zod.def.checks??[]];e._zod.traits.has(`$ZodCheck`)&&r.unshift(e);for(let t of r)for(let n of t._zod.onattach)n(e);if(r.length===0)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let t=(e,t,n)=>{let r=Ma(e),i;for(let a of t){if(a._zod.def.when){if(Na(e)||!a._zod.def.when(e))continue}else if(r)continue;let t=e.issues.length,o=a._zod.check(e);if(o instanceof Promise&&n?.async===!1)throw new $i;if(i||o instanceof Promise)i=(i??Promise.resolve()).then(async()=>{await o,e.issues.length!==t&&(r||=Ma(e,t))});else{if(e.issues.length===t)continue;r||=Ma(e,t)}}return i?i.then(()=>e):e},n=(n,i,a)=>{if(Ma(n))return n.aborted=!0,n;let o=t(i,r,a);if(o instanceof Promise){if(a.async===!1)throw new $i;return o.then(t=>e._zod.parse(t,a))}return e._zod.parse(o,a)};e._zod.run=(i,a)=>{if(a.skipChecks)return e._zod.parse(i,a);if(a.direction===`backward`){let t=e._zod.parse({value:i.value,issues:[]},{...a,skipChecks:!0});return t instanceof Promise?t.then(e=>n(e,i,a)):n(t,i,a)}let o=e._zod.parse(i,a);if(o instanceof Promise){if(a.async===!1)throw new $i;return o.then(e=>t(e,r,a))}return t(o,r,a)}}ua(e,`~standard`,()=>({validate:t=>{try{let n=qa(e,t);return n.success?{value:n.data}:{issues:n.error?.issues}}catch{return Ya(e,t).then(e=>e.success?{value:e.data}:{issues:e.error?.issues})}},vendor:`zod`,version:1}))}),rs=H(`$ZodString`,(e,t)=>{ns.init(e,t),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??Ao(e._zod.bag),e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch{}return typeof n.value==`string`||n.issues.push({expected:`string`,code:`invalid_type`,input:n.value,inst:e}),n}}),is=H(`$ZodStringFormat`,(e,t)=>{Ko.init(e,t),rs.init(e,t)}),as=H(`$ZodGUID`,(e,t)=>{t.pattern??=fo,is.init(e,t)}),os=H(`$ZodUUID`,(e,t)=>{if(t.version){let e={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(e===void 0)throw Error(`Invalid UUID version: "${t.version}"`);t.pattern??=po(e)}else t.pattern??=po();is.init(e,t)}),ss=H(`$ZodEmail`,(e,t)=>{t.pattern??=mo,is.init(e,t)}),cs=H(`$ZodURL`,(e,t)=>{is.init(e,t),e._zod.check=n=>{try{let r=n.value.trim();if(!t.normalize&&t.protocol?.source===Co.source&&!/^https?:\/\//i.test(r)){n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid URL format`,input:n.value,inst:e,continue:!t.abort});return}let i=new URL(r);t.hostname&&(t.hostname.lastIndex=0,t.hostname.test(i.hostname)||n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid hostname`,pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort})),t.protocol&&(t.protocol.lastIndex=0,t.protocol.test(i.protocol.endsWith(`:`)?i.protocol.slice(0,-1):i.protocol)||n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid protocol`,pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort})),n.value=t.normalize?i.href:r;return}catch{n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort})}}}),ls=H(`$ZodEmoji`,(e,t)=>{t.pattern??=go(),is.init(e,t)}),us=H(`$ZodNanoID`,(e,t)=>{t.pattern??=lo,is.init(e,t)}),ds=H(`$ZodCUID`,(e,t)=>{t.pattern??=io,is.init(e,t)}),fs=H(`$ZodCUID2`,(e,t)=>{t.pattern??=ao,is.init(e,t)}),ps=H(`$ZodULID`,(e,t)=>{t.pattern??=oo,is.init(e,t)}),ms=H(`$ZodXID`,(e,t)=>{t.pattern??=so,is.init(e,t)}),hs=H(`$ZodKSUID`,(e,t)=>{t.pattern??=co,is.init(e,t)}),gs=H(`$ZodISODateTime`,(e,t)=>{t.pattern??=ko(t),is.init(e,t)}),_s=H(`$ZodISODate`,(e,t)=>{t.pattern??=Eo,is.init(e,t)}),vs=H(`$ZodISOTime`,(e,t)=>{t.pattern??=Oo(t),is.init(e,t)}),ys=H(`$ZodISODuration`,(e,t)=>{t.pattern??=uo,is.init(e,t)}),bs=H(`$ZodIPv4`,(e,t)=>{t.pattern??=_o,is.init(e,t),e._zod.bag.format=`ipv4`}),xs=H(`$ZodIPv6`,(e,t)=>{t.pattern??=vo,is.init(e,t),e._zod.bag.format=`ipv6`,e._zod.check=n=>{try{new URL(`http://[${n.value}]`)}catch{n.issues.push({code:`invalid_format`,format:`ipv6`,input:n.value,inst:e,continue:!t.abort})}}}),Ss=H(`$ZodCIDRv4`,(e,t)=>{t.pattern??=yo,is.init(e,t)}),Cs=H(`$ZodCIDRv6`,(e,t)=>{t.pattern??=bo,is.init(e,t),e._zod.check=n=>{let r=n.value.split(`/`);try{if(r.length!==2)throw Error();let[e,t]=r;if(!t)throw Error();let n=Number(t);if(`${n}`!==t||n<0||n>128)throw Error();new URL(`http://[${e}]`)}catch{n.issues.push({code:`invalid_format`,format:`cidrv6`,input:n.value,inst:e,continue:!t.abort})}}});function ws(e){if(e===``)return!0;if(/\s/.test(e)||e.length%4!=0)return!1;try{return atob(e),!0}catch{return!1}}var Ts=H(`$ZodBase64`,(e,t)=>{t.pattern??=xo,is.init(e,t),e._zod.bag.contentEncoding=`base64`,e._zod.check=n=>{ws(n.value)||n.issues.push({code:`invalid_format`,format:`base64`,input:n.value,inst:e,continue:!t.abort})}});function Es(e){if(!So.test(e))return!1;let t=e.replace(/[-_]/g,e=>e===`-`?`+`:`/`);return ws(t.padEnd(Math.ceil(t.length/4)*4,`=`))}var Ds=H(`$ZodBase64URL`,(e,t)=>{t.pattern??=So,is.init(e,t),e._zod.bag.contentEncoding=`base64url`,e._zod.check=n=>{Es(n.value)||n.issues.push({code:`invalid_format`,format:`base64url`,input:n.value,inst:e,continue:!t.abort})}}),Os=H(`$ZodE164`,(e,t)=>{t.pattern??=wo,is.init(e,t)});function ks(e,t=null){try{let n=e.split(`.`);if(n.length!==3)return!1;let[r]=n;if(!r)return!1;let i=JSON.parse(atob(r));return!(`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&(!(`alg`in i)||i.alg!==t))}catch{return!1}}var As=H(`$ZodJWT`,(e,t)=>{is.init(e,t),e._zod.check=n=>{ks(n.value,t.alg)||n.issues.push({code:`invalid_format`,format:`jwt`,input:n.value,inst:e,continue:!t.abort})}}),js=H(`$ZodNumber`,(e,t)=>{ns.init(e,t),e._zod.pattern=e._zod.bag.pattern??Mo,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=Number(n.value)}catch{}let i=n.value;if(typeof i==`number`&&!Number.isNaN(i)&&Number.isFinite(i))return n;let a=typeof i==`number`?Number.isNaN(i)?`NaN`:Number.isFinite(i)?void 0:`Infinity`:void 0;return n.issues.push({expected:`number`,code:`invalid_type`,input:i,inst:e,...a?{received:a}:{}}),n}}),Ms=H(`$ZodNumberFormat`,(e,t)=>{Ho.init(e,t),js.init(e,t)}),Ns=H(`$ZodBoolean`,(e,t)=>{ns.init(e,t),e._zod.pattern=No,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=!!n.value}catch{}let i=n.value;return typeof i==`boolean`||n.issues.push({expected:`boolean`,code:`invalid_type`,input:i,inst:e}),n}}),Ps=H(`$ZodNull`,(e,t)=>{ns.init(e,t),e._zod.pattern=Po,e._zod.values=new Set([null]),e._zod.parse=(t,n)=>{let r=t.value;return r===null||t.issues.push({expected:`null`,code:`invalid_type`,input:r,inst:e}),t}}),Fs=H(`$ZodUnknown`,(e,t)=>{ns.init(e,t),e._zod.parse=e=>e}),Is=H(`$ZodNever`,(e,t)=>{ns.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({expected:`never`,code:`invalid_type`,input:t.value,inst:e}),t)});function Ls(e,t,n){e.issues.length&&t.issues.push(...Pa(n,e.issues)),t.value[n]=e.value}var Rs=H(`$ZodArray`,(e,t)=>{ns.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!Array.isArray(i))return n.issues.push({expected:`array`,code:`invalid_type`,input:i,inst:e}),n;n.value=Array(i.length);let a=[];for(let e=0;eLs(t,n,e))):Ls(s,n,e)}return a.length?Promise.all(a).then(()=>n):n}});function zs(e,t,n,r,i,a){let o=n in r;if(e.issues.length){if(i&&a&&!o)return;t.issues.push(...Pa(n,e.issues))}if(!o&&!i){e.issues.length||t.issues.push({code:`invalid_type`,expected:`nonoptional`,input:void 0,path:[n]});return}e.value===void 0?o&&(t.value[n]=void 0):t.value[n]=e.value}function Bs(e){let t=Object.keys(e.shape);for(let n of t)if(!e.shape?.[n]?._zod?.traits?.has(`$ZodType`))throw Error(`Invalid element at key "${n}": expected a Zod schema`);let n=Ca(e.shape);return{...e,keys:t,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(n)}}function Vs(e,t,n,r,i,a){let o=[],s=i.keySet,c=i.catchall._zod,l=c.def.type,u=c.optin===`optional`,d=c.optout===`optional`;for(let i in t){if(i===`__proto__`||s.has(i))continue;if(l===`never`){o.push(i);continue}let a=c.run({value:t[i],issues:[]},r);a instanceof Promise?e.push(a.then(e=>zs(e,n,i,t,u,d))):zs(a,n,i,t,u,d)}return o.length&&n.issues.push({code:`unrecognized_keys`,keys:o,input:t,inst:a}),e.length?Promise.all(e).then(()=>n):n}var Hs=H(`$ZodObject`,(e,t)=>{if(ns.init(e,t),!Object.getOwnPropertyDescriptor(t,`shape`)?.get){let e=t.shape;Object.defineProperty(t,"shape",{get:()=>{let n={...e};return Object.defineProperty(t,"shape",{value:n}),n}})}let n=aa(()=>Bs(t));ua(e._zod,`propValues`,()=>{let e=t.shape,n={};for(let t in e){let r=e[t]._zod;if(r.values){n[t]??(n[t]=new Set);for(let e of r.values)n[t].add(e)}}return n});let r=ga,i=t.catchall,a;e._zod.parse=(t,o)=>{a??=n.value;let s=t.value;if(!r(s))return t.issues.push({expected:`object`,code:`invalid_type`,input:s,inst:e}),t;t.value={};let c=[],l=a.shape;for(let e of a.keys){let n=l[e],r=n._zod.optin===`optional`,i=n._zod.optout===`optional`,a=n._zod.run({value:s[e],issues:[]},o);a instanceof Promise?c.push(a.then(n=>zs(n,t,e,s,r,i))):zs(a,t,e,s,r,i)}return i?Vs(c,s,t,o,n.value,e):c.length?Promise.all(c).then(()=>t):t}}),Us=H(`$ZodObjectJIT`,(e,t)=>{Hs.init(e,t);let n=e._zod.parse,r=aa(()=>Bs(t)),i=e=>{let t=new es([`shape`,`payload`,`ctx`]),n=r.value,i=e=>{let t=pa(e);return`shape[${t}]._zod.run({ value: input[${t}], issues: [] }, ctx)`};t.write(`const input = payload.value;`);let a=Object.create(null),o=0;for(let e of n.keys)a[e]=`key_${o++}`;t.write(`const newResult = {};`);for(let r of n.keys){let n=a[r],o=pa(r),s=e[r],c=s?._zod?.optin===`optional`,l=s?._zod?.optout===`optional`;t.write(`const ${n} = ${i(r)};`),c&&l?t.write(` + if (${n}.issues.length) { + if (${o} in input) { + payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${o}, ...iss.path] : [${o}] + }))); + } + } + + if (${n}.value === undefined) { + if (${o} in input) { + newResult[${o}] = undefined; + } + } else { + newResult[${o}] = ${n}.value; + } + + `):c?t.write(` + if (${n}.issues.length) { + payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${o}, ...iss.path] : [${o}] + }))); + } + + if (${n}.value === undefined) { + if (${o} in input) { + newResult[${o}] = undefined; + } + } else { + newResult[${o}] = ${n}.value; + } + + `):t.write(` + const ${n}_present = ${o} in input; + if (${n}.issues.length) { + payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${o}, ...iss.path] : [${o}] + }))); + } + if (!${n}_present && !${n}.issues.length) { + payload.issues.push({ + code: "invalid_type", + expected: "nonoptional", + input: undefined, + path: [${o}] + }); + } + + if (${n}_present) { + if (${n}.value === undefined) { + newResult[${o}] = undefined; + } else { + newResult[${o}] = ${n}.value; + } + } + + `)}t.write(`payload.value = newResult;`),t.write(`return payload;`);let s=t.compile();return(t,n)=>s(e,t,n)},a,o=ga,s=!ta.jitless,c=s&&_a.value,l=t.catchall,u;e._zod.parse=(d,f)=>{u??=r.value;let p=d.value;return o(p)?s&&c&&f?.async===!1&&f.jitless!==!0?(a||=i(t.shape),d=a(d,f),l?Vs([],p,d,f,u,e):d):n(d,f):(d.issues.push({expected:`object`,code:`invalid_type`,input:p,inst:e}),d)}});function Ws(e,t,n,r){for(let n of e)if(n.issues.length===0)return t.value=n.value,t;let i=e.filter(e=>!Ma(e));return i.length===1?(t.value=i[0].value,i[0]):(t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>Ia(e,r,na())))}),t)}var Gs=H(`$ZodUnion`,(e,t)=>{ns.init(e,t),ua(e._zod,`optin`,()=>t.options.some(e=>e._zod.optin===`optional`)?`optional`:void 0),ua(e._zod,`optout`,()=>t.options.some(e=>e._zod.optout===`optional`)?`optional`:void 0),ua(e._zod,`values`,()=>{if(t.options.every(e=>e._zod.values))return new Set(t.options.flatMap(e=>Array.from(e._zod.values)))}),ua(e._zod,`pattern`,()=>{if(t.options.every(e=>e._zod.pattern)){let e=t.options.map(e=>e._zod.pattern);return RegExp(`^(${e.map(e=>sa(e.source)).join(`|`)})$`)}});let n=t.options.length===1?t.options[0]._zod.run:null;e._zod.parse=(r,i)=>{if(n)return n(r,i);let a=!1,o=[];for(let e of t.options){let t=e._zod.run({value:r.value,issues:[]},i);if(t instanceof Promise)o.push(t),a=!0;else{if(t.issues.length===0)return t;o.push(t)}}return a?Promise.all(o).then(t=>Ws(t,r,e,i)):Ws(o,r,e,i)}}),Ks=H(`$ZodIntersection`,(e,t)=>{ns.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),a=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||a instanceof Promise?Promise.all([i,a]).then(([t,n])=>Js(e,t,n)):Js(e,i,a)}});function qs(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(va(e)&&va(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=qs(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;re.l&&e.r).map(([e])=>e);if(a.length&&i&&e.issues.push({...i,keys:a}),Ma(e))return e;let o=qs(t.value,n.value);if(!o.valid)throw Error(`Unmergable intersection. Error path: ${JSON.stringify(o.mergeErrorPath)}`);return e.value=o.data,e}var Ys=H(`$ZodTuple`,(e,t)=>{ns.init(e,t);let n=t.items;e._zod.parse=(r,i)=>{let a=r.value;if(!Array.isArray(a))return r.issues.push({input:a,inst:e,expected:`tuple`,code:`invalid_type`}),r;r.value=[];let o=[],s=Xs(n,`optin`),c=Xs(n,`optout`);if(!t.rest){if(a.lengthn.length&&r.issues.push({code:`too_big`,maximum:n.length,inclusive:!0,input:a,inst:e,origin:`array`})}let l=Array(n.length);for(let e=0;e{l[e]=t})):l[e]=t}if(t.rest){let e=n.length-1,s=a.slice(n.length);for(let n of s){e++;let a=t.rest._zod.run({value:n,issues:[]},i);a instanceof Promise?o.push(a.then(t=>Zs(t,r,e))):Zs(a,r,e)}}return o.length?Promise.all(o).then(()=>Qs(l,r,n,a,c)):Qs(l,r,n,a,c)}});function Xs(e,t){for(let n=e.length-1;n>=0;n--)if(e[n]._zod[t]!==`optional`)return n+1;return 0}function Zs(e,t,n){e.issues.length&&t.issues.push(...Pa(n,e.issues)),t.value[n]=e.value}function Qs(e,t,n,r,i){for(let a=0;a=i){t.value.length=a;break}t.issues.push(...Pa(a,n.issues))}t.value[a]=n.value}for(let e=t.value.length-1;e>=r.length&&n[e]._zod.optout===`optional`&&t.value[e]===void 0;e--)t.value.length=e;return t}var $s=H(`$ZodRecord`,(e,t)=>{ns.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!va(i))return n.issues.push({expected:`record`,code:`invalid_type`,input:i,inst:e}),n;let a=[],o=t.keyType._zod.values;if(o){n.value={};let s=new Set;for(let c of o)if(typeof c==`string`||typeof c==`number`||typeof c==`symbol`){s.add(typeof c==`number`?c.toString():c);let o=t.keyType._zod.run({value:c,issues:[]},r);if(o instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(o.issues.length){n.issues.push({code:`invalid_key`,origin:`record`,issues:o.issues.map(e=>Ia(e,r,na())),input:c,path:[c],inst:e});continue}let l=o.value,u=t.valueType._zod.run({value:i[c],issues:[]},r);u instanceof Promise?a.push(u.then(e=>{e.issues.length&&n.issues.push(...Pa(c,e.issues)),n.value[l]=e.value})):(u.issues.length&&n.issues.push(...Pa(c,u.issues)),n.value[l]=u.value)}let c;for(let e in i)s.has(e)||(c??=[],c.push(e));c&&c.length>0&&n.issues.push({code:`unrecognized_keys`,input:i,inst:e,keys:c})}else{n.value={};for(let o of Reflect.ownKeys(i)){if(o===`__proto__`||!Object.prototype.propertyIsEnumerable.call(i,o))continue;let s=t.keyType._zod.run({value:o,issues:[]},r);if(s instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(typeof o==`string`&&Mo.test(o)&&s.issues.length){let e=t.keyType._zod.run({value:Number(o),issues:[]},r);if(e instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);e.issues.length===0&&(s=e)}if(s.issues.length){t.mode===`loose`?n.value[o]=i[o]:n.issues.push({code:`invalid_key`,origin:`record`,issues:s.issues.map(e=>Ia(e,r,na())),input:o,path:[o],inst:e});continue}let c=t.valueType._zod.run({value:i[o],issues:[]},r);c instanceof Promise?a.push(c.then(e=>{e.issues.length&&n.issues.push(...Pa(o,e.issues)),n.value[s.value]=e.value})):(c.issues.length&&n.issues.push(...Pa(o,c.issues)),n.value[s.value]=c.value)}}return a.length?Promise.all(a).then(()=>n):n}}),ec=H(`$ZodEnum`,(e,t)=>{ns.init(e,t);let n=ra(t.entries),r=new Set(n);e._zod.values=r,e._zod.pattern=RegExp(`^(${n.filter(e=>ba.has(typeof e)).map(e=>typeof e==`string`?xa(e):e.toString()).join(`|`)})$`),e._zod.parse=(t,i)=>{let a=t.value;return r.has(a)||t.issues.push({code:`invalid_value`,values:n,input:a,inst:e}),t}}),tc=H(`$ZodLiteral`,(e,t)=>{if(ns.init(e,t),t.values.length===0)throw Error(`Cannot create literal schema with no valid values`);let n=new Set(t.values);e._zod.values=n,e._zod.pattern=RegExp(`^(${t.values.map(e=>typeof e==`string`?xa(e):e?xa(e.toString()):String(e)).join(`|`)})$`),e._zod.parse=(r,i)=>{let a=r.value;return n.has(a)||r.issues.push({code:`invalid_value`,values:t.values,input:a,inst:e}),r}}),nc=H(`$ZodTransform`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new ea(e.constructor.name);let i=t.transform(n.value,n);if(r.async)return(i instanceof Promise?i:Promise.resolve(i)).then(e=>(n.value=e,n.fallback=!0,n));if(i instanceof Promise)throw new $i;return n.value=i,n.fallback=!0,n}});function rc(e,t){return t===void 0&&(e.issues.length||e.fallback)?{issues:[],value:void 0}:e}var ic=H(`$ZodOptional`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,e._zod.optout=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0),ua(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${sa(e.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if(t.innerType._zod.optin===`optional`){let r=e.value,i=t.innerType._zod.run(e,n);return i instanceof Promise?i.then(e=>rc(e,r)):rc(i,r)}return e.value===void 0?e:t.innerType._zod.run(e,n)}}),ac=H(`$ZodExactOptional`,(e,t)=>{ic.init(e,t),ua(e._zod,`values`,()=>t.innerType._zod.values),ua(e._zod,`pattern`,()=>t.innerType._zod.pattern),e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)}),oc=H(`$ZodNullable`,(e,t)=>{ns.init(e,t),ua(e._zod,`optin`,()=>t.innerType._zod.optin),ua(e._zod,`optout`,()=>t.innerType._zod.optout),ua(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${sa(e.source)}|null)$`):void 0}),ua(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>e.value===null?e:t.innerType._zod.run(e,n)}),sc=H(`$ZodDefault`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);if(e.value===void 0)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>cc(e,t)):cc(r,t)}});function cc(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}var lc=H(`$ZodPrefault`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>(n.direction===`backward`||e.value===void 0&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),uc=H(`$ZodNonOptional`,(e,t)=>{ns.init(e,t),ua(e._zod,`values`,()=>{let e=t.innerType._zod.values;return e?new Set([...e].filter(e=>e!==void 0)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>dc(t,e)):dc(i,e)}});function dc(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:`invalid_type`,expected:`nonoptional`,input:e.value,inst:t}),e}var fc=H(`$ZodCatch`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`optout`,()=>t.innerType._zod.optout),ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(r=>(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>Ia(e,n,na()))},input:e.value}),e.issues=[],e.fallback=!0),e)):(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>Ia(e,n,na()))},input:e.value}),e.issues=[],e.fallback=!0),e)}}),pc=H(`$ZodPipe`,(e,t)=>{ns.init(e,t),ua(e._zod,`values`,()=>t.in._zod.values),ua(e._zod,`optin`,()=>t.in._zod.optin),ua(e._zod,`optout`,()=>t.out._zod.optout),ua(e._zod,`propValues`,()=>t.in._zod.propValues),e._zod.parse=(e,n)=>{if(n.direction===`backward`){let r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>mc(e,t.in,n)):mc(r,t.in,n)}let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>mc(e,t.out,n)):mc(r,t.out,n)}});function mc(e,t,n){return e.issues.length?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues,fallback:e.fallback},n)}var hc=H(`$ZodReadonly`,(e,t)=>{ns.init(e,t),ua(e._zod,`propValues`,()=>t.innerType._zod.propValues),ua(e._zod,`values`,()=>t.innerType._zod.values),ua(e._zod,`optin`,()=>t.innerType?._zod?.optin),ua(e._zod,`optout`,()=>t.innerType?._zod?.optout),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(gc):gc(r)}});function gc(e){return e.value=Object.freeze(e.value),e}var _c=H(`$ZodCustom`,(e,t)=>{Lo.init(e,t),ns.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>vc(t,n,r,e));vc(i,n,r,e)}});function vc(e,t,n,r){if(!e){let e={code:`custom`,input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(Ra(e))}}var yc,bc=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let n=t[0];return this._map.set(e,n),n&&typeof n==`object`&&`id`in n&&this._idmap.set(n.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t==`object`&&`id`in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function xc(){return new bc}(yc=globalThis).__zod_globalRegistry??(yc.__zod_globalRegistry=xc());var Sc=globalThis.__zod_globalRegistry;function Cc(e,t){return new e({type:`string`,...U(t)})}function wc(e,t){return new e({type:`string`,format:`email`,check:`string_format`,abort:!1,...U(t)})}function Tc(e,t){return new e({type:`string`,format:`guid`,check:`string_format`,abort:!1,...U(t)})}function Ec(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,...U(t)})}function Dc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v4`,...U(t)})}function Oc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v6`,...U(t)})}function kc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v7`,...U(t)})}function Ac(e,t){return new e({type:`string`,format:`url`,check:`string_format`,abort:!1,...U(t)})}function jc(e,t){return new e({type:`string`,format:`emoji`,check:`string_format`,abort:!1,...U(t)})}function Mc(e,t){return new e({type:`string`,format:`nanoid`,check:`string_format`,abort:!1,...U(t)})}function Nc(e,t){return new e({type:`string`,format:`cuid`,check:`string_format`,abort:!1,...U(t)})}function Pc(e,t){return new e({type:`string`,format:`cuid2`,check:`string_format`,abort:!1,...U(t)})}function Fc(e,t){return new e({type:`string`,format:`ulid`,check:`string_format`,abort:!1,...U(t)})}function Ic(e,t){return new e({type:`string`,format:`xid`,check:`string_format`,abort:!1,...U(t)})}function Lc(e,t){return new e({type:`string`,format:`ksuid`,check:`string_format`,abort:!1,...U(t)})}function Rc(e,t){return new e({type:`string`,format:`ipv4`,check:`string_format`,abort:!1,...U(t)})}function zc(e,t){return new e({type:`string`,format:`ipv6`,check:`string_format`,abort:!1,...U(t)})}function Bc(e,t){return new e({type:`string`,format:`cidrv4`,check:`string_format`,abort:!1,...U(t)})}function Vc(e,t){return new e({type:`string`,format:`cidrv6`,check:`string_format`,abort:!1,...U(t)})}function Hc(e,t){return new e({type:`string`,format:`base64`,check:`string_format`,abort:!1,...U(t)})}function Uc(e,t){return new e({type:`string`,format:`base64url`,check:`string_format`,abort:!1,...U(t)})}function Wc(e,t){return new e({type:`string`,format:`e164`,check:`string_format`,abort:!1,...U(t)})}function Gc(e,t){return new e({type:`string`,format:`jwt`,check:`string_format`,abort:!1,...U(t)})}function Kc(e,t){return new e({type:`string`,format:`datetime`,check:`string_format`,offset:!1,local:!1,precision:null,...U(t)})}function qc(e,t){return new e({type:`string`,format:`date`,check:`string_format`,...U(t)})}function Jc(e,t){return new e({type:`string`,format:`time`,check:`string_format`,precision:null,...U(t)})}function Yc(e,t){return new e({type:`string`,format:`duration`,check:`string_format`,...U(t)})}function Xc(e,t){return new e({type:`number`,checks:[],...U(t)})}function Zc(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`safeint`,...U(t)})}function Qc(e,t){return new e({type:`boolean`,...U(t)})}function $c(e,t){return new e({type:`null`,...U(t)})}function el(e){return new e({type:`unknown`})}function tl(e,t){return new e({type:`never`,...U(t)})}function nl(e,t){return new zo({check:`less_than`,...U(t),value:e,inclusive:!1})}function rl(e,t){return new zo({check:`less_than`,...U(t),value:e,inclusive:!0})}function il(e,t){return new Bo({check:`greater_than`,...U(t),value:e,inclusive:!1})}function al(e,t){return new Bo({check:`greater_than`,...U(t),value:e,inclusive:!0})}function ol(e,t){return new Vo({check:`multiple_of`,...U(t),value:e})}function sl(e,t){return new Uo({check:`max_length`,...U(t),maximum:e})}function cl(e,t){return new Wo({check:`min_length`,...U(t),minimum:e})}function ll(e,t){return new Go({check:`length_equals`,...U(t),length:e})}function ul(e,t){return new qo({check:`string_format`,format:`regex`,...U(t),pattern:e})}function dl(e){return new Jo({check:`string_format`,format:`lowercase`,...U(e)})}function fl(e){return new Yo({check:`string_format`,format:`uppercase`,...U(e)})}function pl(e,t){return new Xo({check:`string_format`,format:`includes`,...U(t),includes:e})}function ml(e,t){return new Zo({check:`string_format`,format:`starts_with`,...U(t),prefix:e})}function hl(e,t){return new Qo({check:`string_format`,format:`ends_with`,...U(t),suffix:e})}function gl(e){return new $o({check:`overwrite`,tx:e})}function _l(e){return gl(t=>t.normalize(e))}function vl(){return gl(e=>e.trim())}function yl(){return gl(e=>e.toLowerCase())}function bl(){return gl(e=>e.toUpperCase())}function xl(){return gl(e=>ma(e))}function Sl(e,t,n){return new e({type:`array`,element:t,...U(n)})}function Cl(e,t,n){return new e({type:`custom`,check:`custom`,fn:t,...U(n)})}function wl(e,t){let n=Tl(t=>(t.addIssue=e=>{if(typeof e==`string`)t.issues.push(Ra(e,t.value,n._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??=`custom`,r.input??=t.value,r.inst??=n,r.continue??=!n._zod.def.abort,t.issues.push(Ra(r))}},e(t.value,t)),t);return n}function Tl(e,t){let n=new Lo({check:`custom`,...U(t)});return n._zod.check=e,n}function El(e){let t=e?.target??`draft-2020-12`;return t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),{processors:e.processors??{},metadataRegistry:e?.metadata??Sc,target:t,unrepresentable:e?.unrepresentable??`throw`,override:e?.override??(()=>{}),io:e?.io??`output`,counter:0,seen:new Map,cycles:e?.cycles??`ref`,reused:e?.reused??`inline`,external:e?.external??void 0}}function Dl(e,t,n={path:[],schemaPath:[]}){var r;let i=e._zod.def,a=t.seen.get(e);if(a)return a.count++,n.schemaPath.includes(e)&&(a.cycle=n.path),a.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,o);let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,o.schema,r);else{let n=o.schema,a=t.processors[i.type];if(!a)throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);a(e,t,n,r)}let a=e._zod.parent;a&&(o.ref||=a,Dl(a,t,r),t.seen.get(a).isParent=!0)}let c=t.metadataRegistry.get(e);return c&&Object.assign(o.schema,c),t.io===`input`&&Al(e)&&(delete o.schema.examples,delete o.schema.default),t.io===`input`&&`_prefault`in o.schema&&((r=o.schema).default??(r.default=o.schema._prefault)),delete o.schema._prefault,t.seen.get(e).schema}function Ol(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=new Map;for(let t of e.seen.entries()){let n=e.metadataRegistry.get(t[0])?.id;if(n){let e=r.get(n);if(e&&e!==t[0])throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}let i=t=>{let r=e.target===`draft-2020-12`?`$defs`:`definitions`;if(e.external){let n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};let a=t[1].defId??t[1].schema.id??`schema${e.counter++}`;return t[1].defId=a,{defId:a,ref:`${i(`__shared`)}#/${r}/${a}`}}if(t[1]===n)return{ref:`#`};let i=`#/${r}/`,a=t[1].schema.id??`__schema${e.counter++}`;return{defId:a,ref:i+a}},a=e=>{if(e[1].schema.$ref)return;let t=e[1],{ref:n,defId:r}=i(e);t.def={...t.schema},r&&(t.defId=r);let a=t.schema;for(let e in a)delete a[e];a.$ref=n};if(e.cycles===`throw`)for(let t of e.seen.entries()){let e=t[1];if(e.cycle)throw Error(`Cycle detected: #/${e.cycle?.join(`/`)}/ + +Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}if(r.count>1&&e.reused===`ref`){a(n);continue}}}function kl(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):Object.assign(i,s),Object.assign(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};for(let t of[...e.seen.entries()].reverse())r(t[0]);let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}Object.assign(i,n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,o[e.defId]=e.def)}e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:Ml(t,`input`,e.processors),output:Ml(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function Al(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return Al(r.element,n);if(r.type===`set`)return Al(r.valueType,n);if(r.type===`lazy`)return Al(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`)return Al(r.innerType,n);if(r.type===`intersection`)return Al(r.left,n)||Al(r.right,n);if(r.type===`record`||r.type===`map`)return Al(r.keyType,n)||Al(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:Al(r.in,n)||Al(r.out,n);if(r.type===`object`){for(let e in r.shape)if(Al(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(Al(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(Al(e,n))return!0;return!!(r.rest&&Al(r.rest,n))}return!1}var jl=(e,t={})=>n=>{let r=El({...n,processors:t});return Dl(e,r),Ol(r,e),kl(r,e)},Ml=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=El({...i??{},target:a,io:t,processors:n});return Dl(e,o),Ol(o,e),kl(o,e)},Nl={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},Pl=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l}=e._zod.bag;if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Nl[s]??s,i.format===``&&delete i.format,s===`time`&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c];e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},Fl=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,format:s,multipleOf:c,exclusiveMaximum:l,exclusiveMinimum:u}=e._zod.bag;i.type=typeof s==`string`&&s.includes(`int`)?`integer`:`number`;let d=typeof u==`number`&&u>=(a??-1/0),f=typeof l==`number`&&l<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;d?p?(i.minimum=u,i.exclusiveMinimum=!0):i.exclusiveMinimum=u:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=l,i.exclusiveMaximum=!0):i.exclusiveMaximum=l:typeof o==`number`&&(i.maximum=o),typeof c==`number`&&(i.multipleOf=c)},Il=(e,t,n,r)=>{n.type=`boolean`},Ll=(e,t,n,r)=>{t.target===`openapi-3.0`?(n.type=`string`,n.nullable=!0,n.enum=[null]):n.type=`null`},Rl=(e,t,n,r)=>{n.not={}},zl=(e,t,n,r)=>{let i=e._zod.def,a=ra(i.entries);a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},Bl=(e,t,n,r)=>{let i=e._zod.def,a=[];for(let e of i.values)if(e===void 0){if(t.unrepresentable===`throw`)throw Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof e==`bigint`){if(t.unrepresentable===`throw`)throw Error(`BigInt literals cannot be represented in JSON Schema`);a.push(Number(e))}else a.push(e);if(a.length!==0){if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a}},Vl=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Custom types cannot be represented in JSON Schema`)},Hl=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Transforms cannot be represented in JSON Schema`)},Ul=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=e._zod.bag;typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=Dl(a.element,t,{...r,path:[...r.path,`items`]})},Wl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`,i.properties={};let o=a.shape;for(let e in o)i.properties[e]=Dl(o[e],t,{...r,path:[...r.path,`properties`,e]});let s=new Set(Object.keys(o)),c=new Set([...s].filter(e=>{let n=a.shape[e]._zod;return t.io===`input`?n.optin===void 0:n.optout===void 0}));c.size>0&&(i.required=Array.from(c)),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=Dl(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},Gl=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>Dl(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},Kl=(e,t,n,r)=>{let i=e._zod.def,a=Dl(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=Dl(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1;n.allOf=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]]},ql=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`array`;let o=t.target===`draft-2020-12`?`prefixItems`:`items`,s=t.target===`draft-2020-12`||t.target===`openapi-3.0`?`items`:`additionalItems`,c=a.items.map((e,n)=>Dl(e,t,{...r,path:[...r.path,o,n]})),l=a.rest?Dl(a.rest,t,{...r,path:[...r.path,s,...t.target===`openapi-3.0`?[a.items.length]:[]]}):null;t.target===`draft-2020-12`?(i.prefixItems=c,l&&(i.items=l)):t.target===`openapi-3.0`?(i.items={anyOf:c},l&&i.items.anyOf.push(l),i.minItems=c.length,l||(i.maxItems=c.length)):(i.items=c,l&&(i.additionalItems=l));let{minimum:u,maximum:d}=e._zod.bag;typeof u==`number`&&(i.minItems=u),typeof d==`number`&&(i.maxItems=d)},Jl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=o._zod.bag?.patterns;if(a.mode===`loose`&&s&&s.size>0){let e=Dl(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)i.patternProperties[t.source]=e}else(t.target===`draft-07`||t.target===`draft-2020-12`)&&(i.propertyNames=Dl(a.keyType,t,{...r,path:[...r.path,`propertyNames`]})),i.additionalProperties=Dl(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]});let c=o._zod.values;if(c){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e)}},Yl=(e,t,n,r)=>{let i=e._zod.def,a=Dl(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},Xl=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Zl=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.default=JSON.parse(JSON.stringify(i.defaultValue))},Ql=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,t.io===`input`&&(n._prefault=JSON.parse(JSON.stringify(i.defaultValue)))},$l=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{throw Error(`Dynamic catch values are not supported in JSON Schema`)}n.default=o},eu=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;Dl(o,t,r);let s=t.seen.get(e);s.ref=o},tu=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},nu=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},ru=H(`ZodISODateTime`,(e,t)=>{gs.init(e,t),ju.init(e,t)});function iu(e){return Kc(ru,e)}var au=H(`ZodISODate`,(e,t)=>{_s.init(e,t),ju.init(e,t)});function ou(e){return qc(au,e)}var su=H(`ZodISOTime`,(e,t)=>{vs.init(e,t),ju.init(e,t)});function cu(e){return Jc(su,e)}var lu=H(`ZodISODuration`,(e,t)=>{ys.init(e,t),ju.init(e,t)});function uu(e){return Yc(lu,e)}var du=(e,t)=>{Ba.init(e,t),e.name=`ZodError`,Object.defineProperties(e,{format:{value:t=>Ua(e,t)},flatten:{value:t=>Ha(e,t)},addIssue:{value:t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,ia,2)}},addIssues:{value:t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,ia,2)}},isEmpty:{get(){return e.issues.length===0}}})},fu=H(`ZodError`,du),pu=H(`ZodError`,du,{Parent:Error}),mu=Wa(pu),hu=Ga(pu),gu=Ka(pu),_u=Ja(pu),vu=Xa(pu),yu=Za(pu),bu=Qa(pu),xu=$a(pu),Su=eo(pu),Cu=to(pu),wu=no(pu),Tu=ro(pu),Eu=new WeakMap;function Du(e,t,n){let r=Object.getPrototypeOf(e),i=Eu.get(r);if(i||(i=new Set,Eu.set(r,i)),!i.has(t)){i.add(t);for(let e in n){let t=n[e];Object.defineProperty(r,e,{configurable:!0,enumerable:!1,get(){let n=t.bind(this);return Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:n}),n},set(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:t})}})}}}var Ou=H(`ZodType`,(e,t)=>(ns.init(e,t),Object.assign(e[`~standard`],{jsonSchema:{input:Ml(e,`input`),output:Ml(e,`output`)}}),e.toJSONSchema=jl(e,{}),e.def=t,e.type=t.type,Object.defineProperty(e,"_def",{value:t}),e.parse=(t,n)=>mu(e,t,n,{callee:e.parse}),e.safeParse=(t,n)=>gu(e,t,n),e.parseAsync=async(t,n)=>hu(e,t,n,{callee:e.parseAsync}),e.safeParseAsync=async(t,n)=>_u(e,t,n),e.spa=e.safeParseAsync,e.encode=(t,n)=>vu(e,t,n),e.decode=(t,n)=>yu(e,t,n),e.encodeAsync=async(t,n)=>bu(e,t,n),e.decodeAsync=async(t,n)=>xu(e,t,n),e.safeEncode=(t,n)=>Su(e,t,n),e.safeDecode=(t,n)=>Cu(e,t,n),e.safeEncodeAsync=async(t,n)=>wu(e,t,n),e.safeDecodeAsync=async(t,n)=>Tu(e,t,n),Du(e,`ZodType`,{check(...e){let t=this.def;return this.clone(fa(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return Sa(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(Bd(e,t))},superRefine(e,t){return this.check(Vd(e,t))},overwrite(e){return this.check(gl(e))},optional(){return Sd(this)},exactOptional(){return wd(this)},nullable(){return Ed(this)},nullish(){return Sd(Ed(this))},nonoptional(e){return Md(this,e)},array(){return q(this)},or(e){return ud([this,e])},and(e){return fd(this,e)},transform(e){return Id(this,bd(e))},default(e){return Od(this,e)},prefault(e){return Ad(this,e)},catch(e){return Pd(this,e)},pipe(e){return Id(this,e)},readonly(){return Rd(this)},describe(e){let t=this.clone();return Sc.add(t,{description:e}),t},meta(...e){if(e.length===0)return Sc.get(this);let t=this.clone();return Sc.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e){return e(this)}}),Object.defineProperty(e,"description",{get(){return Sc.get(e)?.description},configurable:!0}),e)),ku=H(`_ZodString`,(e,t)=>{rs.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Pl(e,t,n,r);let n=e._zod.bag;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null,Du(e,`_ZodString`,{regex(...e){return this.check(ul(...e))},includes(...e){return this.check(pl(...e))},startsWith(...e){return this.check(ml(...e))},endsWith(...e){return this.check(hl(...e))},min(...e){return this.check(cl(...e))},max(...e){return this.check(sl(...e))},length(...e){return this.check(ll(...e))},nonempty(...e){return this.check(cl(1,...e))},lowercase(e){return this.check(dl(e))},uppercase(e){return this.check(fl(e))},trim(){return this.check(vl())},normalize(...e){return this.check(_l(...e))},toLowerCase(){return this.check(yl())},toUpperCase(){return this.check(bl())},slugify(){return this.check(xl())}})}),Au=H(`ZodString`,(e,t)=>{rs.init(e,t),ku.init(e,t),e.email=t=>e.check(wc(Mu,t)),e.url=t=>e.check(Ac(Fu,t)),e.jwt=t=>e.check(Gc(Xu,t)),e.emoji=t=>e.check(jc(Iu,t)),e.guid=t=>e.check(Tc(Nu,t)),e.uuid=t=>e.check(Ec(Pu,t)),e.uuidv4=t=>e.check(Dc(Pu,t)),e.uuidv6=t=>e.check(Oc(Pu,t)),e.uuidv7=t=>e.check(kc(Pu,t)),e.nanoid=t=>e.check(Mc(Lu,t)),e.guid=t=>e.check(Tc(Nu,t)),e.cuid=t=>e.check(Nc(Ru,t)),e.cuid2=t=>e.check(Pc(zu,t)),e.ulid=t=>e.check(Fc(Bu,t)),e.base64=t=>e.check(Hc(qu,t)),e.base64url=t=>e.check(Uc(Ju,t)),e.xid=t=>e.check(Ic(Vu,t)),e.ksuid=t=>e.check(Lc(Hu,t)),e.ipv4=t=>e.check(Rc(Uu,t)),e.ipv6=t=>e.check(zc(Wu,t)),e.cidrv4=t=>e.check(Bc(Gu,t)),e.cidrv6=t=>e.check(Vc(Ku,t)),e.e164=t=>e.check(Wc(Yu,t)),e.datetime=t=>e.check(iu(t)),e.date=t=>e.check(ou(t)),e.time=t=>e.check(cu(t)),e.duration=t=>e.check(uu(t))});function W(e){return Cc(Au,e)}var ju=H(`ZodStringFormat`,(e,t)=>{is.init(e,t),ku.init(e,t)}),Mu=H(`ZodEmail`,(e,t)=>{ss.init(e,t),ju.init(e,t)}),Nu=H(`ZodGUID`,(e,t)=>{as.init(e,t),ju.init(e,t)}),Pu=H(`ZodUUID`,(e,t)=>{os.init(e,t),ju.init(e,t)}),Fu=H(`ZodURL`,(e,t)=>{cs.init(e,t),ju.init(e,t)}),Iu=H(`ZodEmoji`,(e,t)=>{ls.init(e,t),ju.init(e,t)}),Lu=H(`ZodNanoID`,(e,t)=>{us.init(e,t),ju.init(e,t)}),Ru=H(`ZodCUID`,(e,t)=>{ds.init(e,t),ju.init(e,t)}),zu=H(`ZodCUID2`,(e,t)=>{fs.init(e,t),ju.init(e,t)}),Bu=H(`ZodULID`,(e,t)=>{ps.init(e,t),ju.init(e,t)}),Vu=H(`ZodXID`,(e,t)=>{ms.init(e,t),ju.init(e,t)}),Hu=H(`ZodKSUID`,(e,t)=>{hs.init(e,t),ju.init(e,t)}),Uu=H(`ZodIPv4`,(e,t)=>{bs.init(e,t),ju.init(e,t)}),Wu=H(`ZodIPv6`,(e,t)=>{xs.init(e,t),ju.init(e,t)}),Gu=H(`ZodCIDRv4`,(e,t)=>{Ss.init(e,t),ju.init(e,t)}),Ku=H(`ZodCIDRv6`,(e,t)=>{Cs.init(e,t),ju.init(e,t)}),qu=H(`ZodBase64`,(e,t)=>{Ts.init(e,t),ju.init(e,t)}),Ju=H(`ZodBase64URL`,(e,t)=>{Ds.init(e,t),ju.init(e,t)}),Yu=H(`ZodE164`,(e,t)=>{Os.init(e,t),ju.init(e,t)}),Xu=H(`ZodJWT`,(e,t)=>{As.init(e,t),ju.init(e,t)}),Zu=H(`ZodNumber`,(e,t)=>{js.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Fl(e,t,n,r),Du(e,`ZodNumber`,{gt(e,t){return this.check(il(e,t))},gte(e,t){return this.check(al(e,t))},min(e,t){return this.check(al(e,t))},lt(e,t){return this.check(nl(e,t))},lte(e,t){return this.check(rl(e,t))},max(e,t){return this.check(rl(e,t))},int(e){return this.check($u(e))},safe(e){return this.check($u(e))},positive(e){return this.check(il(0,e))},nonnegative(e){return this.check(al(0,e))},negative(e){return this.check(nl(0,e))},nonpositive(e){return this.check(rl(0,e))},multipleOf(e,t){return this.check(ol(e,t))},step(e,t){return this.check(ol(e,t))},finite(){return this}});let n=e._zod.bag;e.minValue=Math.max(n.minimum??-1/0,n.exclusiveMinimum??-1/0)??null,e.maxValue=Math.min(n.maximum??1/0,n.exclusiveMaximum??1/0)??null,e.isInt=(n.format??``).includes(`int`)||Number.isSafeInteger(n.multipleOf??.5),e.isFinite=!0,e.format=n.format??null});function G(e){return Xc(Zu,e)}var Qu=H(`ZodNumberFormat`,(e,t)=>{Ms.init(e,t),Zu.init(e,t)});function $u(e){return Zc(Qu,e)}var ed=H(`ZodBoolean`,(e,t)=>{Ns.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Il(e,t,n,r)});function K(e){return Qc(ed,e)}var td=H(`ZodNull`,(e,t)=>{Ps.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ll(e,t,n,r)});function nd(e){return $c(td,e)}var rd=H(`ZodUnknown`,(e,t)=>{Fs.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function id(){return el(rd)}var ad=H(`ZodNever`,(e,t)=>{Is.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Rl(e,t,n,r)});function od(e){return tl(ad,e)}var sd=H(`ZodArray`,(e,t)=>{Rs.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ul(e,t,n,r),e.element=t.element,Du(e,`ZodArray`,{min(e,t){return this.check(cl(e,t))},nonempty(e){return this.check(cl(1,e))},max(e,t){return this.check(sl(e,t))},length(e,t){return this.check(ll(e,t))},unwrap(){return this.element}})});function q(e,t){return Sl(sd,e,t)}var cd=H(`ZodObject`,(e,t)=>{Us.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Wl(e,t,n,r),ua(e,`shape`,()=>t.shape),Du(e,`ZodObject`,{keyof(){return Y(Object.keys(this._zod.def.shape))},catchall(e){return this.clone({...this._zod.def,catchall:e})},passthrough(){return this.clone({...this._zod.def,catchall:id()})},loose(){return this.clone({...this._zod.def,catchall:id()})},strict(){return this.clone({...this._zod.def,catchall:od()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(e){return Da(this,e)},safeExtend(e){return Oa(this,e)},merge(e){return ka(this,e)},pick(e){return Ta(this,e)},omit(e){return Ea(this,e)},partial(...e){return Aa(xd,this,e[0])},required(...e){return ja(jd,this,e[0])}})});function J(e,t){return new cd({type:`object`,shape:e??{},...U(t)})}var ld=H(`ZodUnion`,(e,t)=>{Gs.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Gl(e,t,n,r),e.options=t.options});function ud(e,t){return new ld({type:`union`,options:e,...U(t)})}var dd=H(`ZodIntersection`,(e,t)=>{Ks.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Kl(e,t,n,r)});function fd(e,t){return new dd({type:`intersection`,left:e,right:t})}var pd=H(`ZodTuple`,(e,t)=>{Ys.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ql(e,t,n,r),e.rest=t=>e.clone({...e._zod.def,rest:t})});function md(e,t,n){let r=t instanceof ns;return new pd({type:`tuple`,items:e,rest:r?t:null,...U(r?n:t)})}var hd=H(`ZodRecord`,(e,t)=>{$s.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Jl(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function gd(e,t,n){return!t||!t._zod?new hd({type:`record`,keyType:W(),valueType:e,...U(t)}):new hd({type:`record`,keyType:e,valueType:t,...U(n)})}var _d=H(`ZodEnum`,(e,t)=>{ec.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>zl(e,t,n,r),e.enum=t.entries,e.options=Object.values(t.entries);let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new _d({...t,checks:[],...U(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new _d({...t,checks:[],...U(r),entries:i})}});function Y(e,t){return new _d({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...U(t)})}var vd=H(`ZodLiteral`,(e,t)=>{tc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Bl(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function X(e,t){return new vd({type:`literal`,values:Array.isArray(e)?e:[e],...U(t)})}var yd=H(`ZodTransform`,(e,t)=>{nc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Hl(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new ea(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(Ra(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,t.input??=n.value,t.inst??=e,n.issues.push(Ra(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n.fallback=!0,n)):(n.value=i,n.fallback=!0,n)}});function bd(e){return new yd({type:`transform`,transform:e})}var xd=H(`ZodOptional`,(e,t)=>{ic.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Sd(e){return new xd({type:`optional`,innerType:e})}var Cd=H(`ZodExactOptional`,(e,t)=>{ac.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function wd(e){return new Cd({type:`optional`,innerType:e})}var Td=H(`ZodNullable`,(e,t)=>{oc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Yl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Ed(e){return new Td({type:`nullable`,innerType:e})}var Dd=H(`ZodDefault`,(e,t)=>{sc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Zl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function Od(e,t){return new Dd({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():ya(t)}})}var kd=H(`ZodPrefault`,(e,t)=>{lc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ql(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Ad(e,t){return new kd({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():ya(t)}})}var jd=H(`ZodNonOptional`,(e,t)=>{uc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Xl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Md(e,t){return new jd({type:`nonoptional`,innerType:e,...U(t)})}var Nd=H(`ZodCatch`,(e,t)=>{fc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>$l(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function Pd(e,t){return new Nd({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:()=>t})}var Fd=H(`ZodPipe`,(e,t)=>{pc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>eu(e,t,n,r),e.in=t.in,e.out=t.out});function Id(e,t){return new Fd({type:`pipe`,in:e,out:t})}var Ld=H(`ZodReadonly`,(e,t)=>{hc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>tu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Rd(e){return new Ld({type:`readonly`,innerType:e})}var zd=H(`ZodCustom`,(e,t)=>{_c.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Vl(e,t,n,r)});function Bd(e,t={}){return Cl(zd,e,t)}function Vd(e,t){return wl(e,t)}var Hd={ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,runtime_root:`$HOME/.codex/loopx`,goal_count:1,run_count:8440,status_contract:{schema_version:2,minimum_dashboard_schema_version:2,producer:`loopx status`,reload_hint:`scripts/macos-dashboard-launchagent.sh restart`},usage_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.471166+00:00`,sample_run_count:20,proxy_note:`run-history proxy; excludes token counts and raw thread logs`,totals:{runs_24h:20,runs_7d:20,quota_spend_slots_24h:11,quota_spend_slots_7d:11,automation_run_count_24h:11,automation_run_count_7d:11,progress_signal_run_count_24h:9,progress_signal_run_count_7d:9},goals:[{goal_id:`loopx-meta`,runs_24h:20,runs_7d:20,quota_spend_slots_24h:11,quota_spend_slots_7d:11,automation_run_count_24h:11,automation_run_count_7d:11,progress_signal_run_count_24h:9,progress_signal_run_count_7d:9,project_share_24h:1}]},event_ledger_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.360662+00:00`,sample_run_count:20,proxy_note:`append-only run-history projection; compact event-class counts only`,event_classes:[`accounting`,`decision`,`evidence`,`state`,`work`],totals:{events_24h:20,events_7d:20,by_class_24h:{accounting:11,decision:0,evidence:0,state:0,work:9},by_class_7d:{accounting:11,decision:0,evidence:0,state:0,work:9}},goals:[{goal_id:`loopx-meta`,events_24h:20,events_7d:20,by_class_24h:{accounting:11,decision:0,evidence:0,state:0,work:9},by_class_7d:{accounting:11,decision:0,evidence:0,state:0,work:9},latest_event_class:`accounting`,latest_event_at:`2026-07-06T14:37:32+08:00`}]},promotion_readiness_summary:{available:!0,source:`run_history_full_scan`,goal_id:`loopx-meta`,generated_at:`2026-07-05T20:02:02+08:00`,classification:`canary_promotion_readiness_smoke_group`,delivery_batch_scale:`multi_surface`,delivery_outcome:`primary_goal_outcome`,recommended_action:`Canary promotion-readiness smoke passed; promotion may proceed after doctor/status reports fresh evidence.`,json_exists:!0,markdown_exists:!0,freshness_window_hours:24,freshness_status:`fresh`,is_fresh:!0,requires_readiness_run:!1,age_seconds:67624,age_hours:18.78,freshness_reference_time:`2026-07-06T06:49:06.408527+00:00`,sample_run_count:0,proxy_note:`canary promotion-readiness projection from append-only run history; exact evidence stays in run artifacts`},promotion_gate:{ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,runtime_root:`$HOME/.codex/loopx`,gate:`promotion_readiness`,gate_state:`ready`,can_promote:!0,should_warn:!1,non_blocking:!0,recommended_action:`promotion readiness is fresh`,readiness:{available:!0,goal_id:`loopx-meta`,generated_at:`2026-07-05T20:02:02+08:00`,classification:`canary_promotion_readiness_smoke_group`,delivery_batch_scale:`multi_surface`,delivery_outcome:`primary_goal_outcome`,recommended_action:`Canary promotion-readiness smoke passed; promotion may proceed after doctor/status reports fresh evidence.`,json_exists:!0,markdown_exists:!0,runtime_root:`$HOME/.codex/loopx`,freshness_window_hours:24,freshness_status:`fresh`,is_fresh:!0,requires_readiness_run:!1,age_seconds:67624,age_hours:18.78,freshness_reference_time:`2026-07-06T06:49:06.471087+00:00`}},decision_freshness_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.471133+00:00`,sample_run_count:20,window_days:7,proxy_note:`checkpointed decision freshness projection; rebase old decisions at the decision point before reuse`,summary:{decision_count:0,stale_count:0,rebase_required_count:0,fresh_count:0},items:[]},todo_index:JSON.parse(`{"schema_version":"todo_index_v0","source":"live_loopx_status_public_slice","total_count":12,"current_projected_count":12,"rollout_event_count":94,"item_limit":12,"items":[{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo update recorded for todo_1596c3a678bb","schema_version":"todo_index_item_v0","todo_id":"todo_1596c3a678bb","role":"agent","status":"open","title":"todo update recorded for todo_1596c3a678bb","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:33:32Z","latest_event_status":"open","event_count":7,"event_kinds":["todo_update"]},{"goal_id":"loopx-meta","index":24,"done":false,"text":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","schema_version":"todo_index_item_v0","todo_id":"todo_15bc0926a494","role":"agent","status":"open","priority":"P0-REVENUE MONITOR","title":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"github_public_reply_metadata_monitor","claimed_by":"codex-value-explorer","evidence":"autonomous replan: bounded current value-explorer monitor lane with explicit expires_at.","note":"Set bounded watch expiry for metadata-only public reply monitor; no catch-up after expiry.","updated_at":"2026-07-05T06:27:15+08:00"},{"goal_id":"loopx-meta","index":17,"done":false,"text":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","schema_version":"todo_index_item_v0","todo_id":"todo_2bf560b48a0c","role":"agent","status":"open","priority":"P0","title":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"legacy_open_pr_rename_blocker","claimed_by":"codex-main-control"},{"goal_id":"loopx-meta","index":23,"done":false,"text":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","schema_version":"todo_index_item_v0","todo_id":"todo_3ed1c4a69164","role":"agent","status":"open","priority":"P0","title":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"skillsbench_local_verifier_reward_collection","claimed_by":"codex-main-control","required_capabilities":["benchmark_runner"]},{"goal_id":"loopx-meta","index":32,"done":false,"text":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","schema_version":"todo_index_item_v0","todo_id":"todo_44907a5f355d","role":"agent","status":"blocked","priority":"P0","title":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_raw_new_rerun","claimed_by":"codex-main-control","evidence":"Public-safe redacted live LoopX text; inspect local status for the full row.","note":"Do not spend a full citation-check loopx rerun yet: #865 fixed scored output paths and #874 added bootstrap preflight attribution, but citation-check itself still preflights as apt+verifier bootstrap risk on ECS.","updated_at":"2026-06-29T00:49:36+08:00"},{"goal_id":"loopx-meta","index":39,"done":false,"text":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","schema_version":"todo_index_item_v0","todo_id":"todo_4762c790e583","role":"agent","status":"blocked","priority":"P0","title":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_remote_rerun","claimed_by":"codex-main-control","evidence":"A prior benchmark adapter change was validated before the legacy surface was archived. Current research uses the RFC-linked benchmark workspace and toolkit boundary smokes.","note":"2026-06-29: fixed host-local ACP idle/no-output root cause in PR #894. ACP protocol tool_call_count=0 is now distinguished from reverse-channel task-facing bridge activity; repeated codex_exec_bridge_idle_timeout withou…","updated_at":"2026-06-29T19:40:32+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_584f55f8f3b4","schema_version":"todo_index_item_v0","todo_id":"todo_584f55f8f3b4","role":"agent","status":"open","title":"todo add recorded for todo_584f55f8f3b4","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:48:49Z","latest_event_status":"open","event_count":3,"event_kinds":["todo_add","todo_update"]},{"goal_id":"loopx-meta","index":40,"done":false,"text":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","schema_version":"todo_index_item_v0","todo_id":"todo_62debf065fec","role":"agent","status":"blocked","priority":"P0 MONITOR","title":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"monitor_skillsbench_batch","claimed_by":"codex-main-control","evidence":"Observed 2026-06-30T02:52+08: active-state target_key=skillsbench-goal-baseline-30case-20260629T1826Z-r10; local ps/tmux/recent artifact search found no r10 batch process or compact artifact; no raw task/log/trajectory …","updated_at":"2026-06-30T02:54:54+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_93bc6439c521","schema_version":"todo_index_item_v0","todo_id":"todo_93bc6439c521","role":"agent","status":"open","title":"todo add recorded for todo_93bc6439c521","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_claim","latest_event_at":"2026-07-06T06:32:52Z","latest_event_status":"open","event_count":2,"event_kinds":["todo_add","todo_claim"]},{"goal_id":"loopx-meta","index":27,"done":false,"text":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","schema_version":"todo_index_item_v0","todo_id":"todo_aad7e9716927","role":"agent","status":"blocked","priority":"P0","title":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"run_goal_start_product_mode_matrix","claimed_by":"codex-main-control","evidence":"driver.status shows DONE raw then RUN loopx-goal-start with no running driver; raw benchmark_run.compact first_blocker=skillsbench_codex_acp_provider_zero_activity; source guard requires --host-local-acp-launch for Loop…","note":"Remote run group skillsbench-raw-new-goal-start-20260627T0420Z produced a material closeout for citation-check raw only; raw compact attribution is skillsbench_codex_acp_provider_zero_activity with official score missin…","updated_at":"2026-06-27T13:05:47+08:00"},{"goal_id":"loopx-meta","index":21,"done":false,"text":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","schema_version":"todo_index_item_v0","todo_id":"todo_aec1873c7f28","role":"agent","status":"open","priority":"P0 MONITOR","title":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","claimed_by":"codex-main-control","note":"2026-06-23 projection fix: this is monitor context for the powerlifting run, not an advancement next action; current executable path is SkillsBench build cache/prewarm repair.","updated_at":"2026-06-23T10:37:43+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_c02cb7d19607","schema_version":"todo_index_item_v0","todo_id":"todo_c02cb7d19607","role":"agent","status":"open","title":"todo add recorded for todo_c02cb7d19607","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_add","latest_event_at":"2026-07-06T03:47:54Z","latest_event_status":"open","event_count":1,"event_kinds":["todo_add"]}]}`),agent_management_projection:{schema_version:`agent_management_projection_v0`,mode:`read_only`,goal_id:`loopx-meta`,generated_at:`2026-07-06T06:49:06Z`,style_hint:null,truth_contract:{todo_is_runtime_work_item:!0,projection_is_writable:!1,introduces_task_runtime:!1,write_api:!1},source_summary:{registered_agent_count:4,projected_agent_count:4,todo_source:`live_loopx_status_public_slice`,public_safe_export:!0},agents:[{agent_id:`codex-main-control`,agent_model:`peer_v1`,profile_role:`release-validation`,state:`blocked`,next_action:`Continue projected todo todo_2bf560b48a0c.`,last_activity_at:`2026-06-29T00:49:36+08:00`,evidence_refs:[`todo:todo_e72afc24f04a:evidence`],goal_ids:[`loopx-meta`],stale_claim_hint:{state:`activity_missing`,claimed_by:`codex-main-control`,reason:`claimed open todo has no projected activity timestamp`,recommended_operator_action:`inspect evidence before considering reassignment`},current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_2bf560b48a0c`,goal_id:`loopx-meta`,role:`agent`,status:`open`,priority:`P0`,title:`Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harn…`,task_class:`blocker`,action_kind:`legacy_open_pr_rename_blocker`,claimed_by:`codex-main-control`}},{agent_id:`codex-product-capability`,agent_model:`peer_v1`,profile_role:`product-validation`,state:`monitoring`,next_action:`Continue projected todo todo_ded745761822.`,last_activity_at:`2026-07-06T06:29:53Z`,evidence_refs:[`todo:todo_ded745761822:evidence`],goal_ids:[`loopx-meta`],current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_ded745761822`,goal_id:`loopx-meta`,role:`agent`,status:`open`,priority:`P0-LOCAL`,title:`Public-safe redacted live LoopX text; inspect local status for the full row.`,task_class:`continuous_monitor`,action_kind:`Public-safe redacted live LoopX text; inspect local status for the full row.`,claimed_by:`codex-product-capability`,updated_at:`2026-07-04T20:22:45+08:00`}},{agent_id:`codex-side-bypass`,agent_model:`peer_v1`,profile_role:`implementation-validation`,state:`waiting`,next_action:`Inspect status projection before taking work.`,last_activity_at:`2026-07-06T06:32:16Z`,evidence_refs:[`rollout_event:todo_complete:todo_22c946938115`],goal_ids:[`loopx-meta`]},{agent_id:`codex-value-explorer`,agent_model:`peer_v1`,profile_role:`value-exploration`,state:`monitoring`,next_action:`Continue projected todo todo_584f55f8f3b4.`,last_activity_at:`2026-07-06T09:39:59+08:00`,evidence_refs:[`rollout_event:todo_update:todo_584f55f8f3b4`],goal_ids:[`loopx-meta`],current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_584f55f8f3b4`,goal_id:`loopx-meta`,role:`agent`,status:`open`,title:`todo add recorded for todo_584f55f8f3b4`}}]},contract:{ok:!0,summary:{errors:0,warnings:1,checks:6},errors:[],warnings:["loopx-meta: duplicate index rows raw=8444 unique=8440 unexpected=3 artifact_identity_collisions=2 artifact_collision_rows=3 reward_overlays=1; inspect with `loopx history --goal-id loopx-meta inspect-index-duplicates`; artifact identity collisions need review…"],checks:[`registry goals checked: 12`,`registry boundary: shared_local_registry push_allowed=False tracked=False ignored=False`,`user-gate scopes checked: 6 open multi-agent gates`,`runtime root resolved: $HOME/.codex/loopx`,`run-history goals=28 runs=10210`,`public boundary scan clean: 1218 files`]},global_registry:{available:!0,ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,current_registry:`$HOME/.codex/loopx/registry.global.json`,current_registry_is_global:!0,global_goal_count:12,current_goal_count:12,source_registry_count:7,summary:{high:0,action:8,info:0,checks:2,findings:8},findings:[{kind:`source_registry_missing`,severity:`action`,message:"`cc-test` source registry is missing",recommended_action:"reconnect `cc-test` from its project or archive it if the project is obsolete",goal_id:`cc-test`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-test` active state file is missing",recommended_action:"repair `cc-test` state_file or reconnect the project",goal_id:`cc-test`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`cc-tmp` source registry is missing",recommended_action:"reconnect `cc-tmp` from its project or archive it if the project is obsolete",goal_id:`cc-tmp`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-tmp` active state file is missing",recommended_action:"repair `cc-tmp` state_file or reconnect the project",goal_id:`cc-tmp`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`cc-tmp-xdrchpuaul` source registry is missing",recommended_action:"reconnect `cc-tmp-xdrchpuaul` from its project or archive it if the project is obsolete",goal_id:`cc-tmp-xdrchpuaul`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-tmp-xdrchpuaul` active state file is missing",recommended_action:"repair `cc-tmp-xdrchpuaul` state_file or reconnect the project",goal_id:`cc-tmp-xdrchpuaul`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`loopx-auto-research-e2e-probe-20260628-2225-goal` source registry is missing",recommended_action:"reconnect `loopx-auto-research-e2e-probe-20260628-2225-goal` from its project or archive it if the project is obsolete",goal_id:`loopx-auto-research-e2e-probe-20260628-2225-goal`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`loopx-auto-research-e2e-probe-20260628-2225-goal` active state file is missing",recommended_action:"repair `loopx-auto-research-e2e-probe-20260628-2225-goal` state_file or reconnect the project",goal_id:`loopx-auto-research-e2e-probe-20260628-2225-goal`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`}],checks:[`global registry goals checked: 12`,`global source registries checked: 7`]},attention_queue:JSON.parse(`{"available":true,"item_count":1,"needs_user_or_controller":0,"needs_controller":0,"needs_codex":1,"watching_external_evidence":0,"items":[{"goal_id":"loopx-meta","status":"skillsbench_codex_cli_goal_tail4_keepalive_relaunched","lifecycle_phase":"adapter_inspected","lifecycle_flags":["adapter_inspected"],"waiting_on":"codex","severity":"action","recommended_action":"Monitor run_group skillsbench-codex-cli-goal-xhigh-tail4-keepalive-20260706T143132CST using public compact/public artifacts only; once benchmark_run.compact.json lands for each case, classify launcher/case/solver/verifi…","source":"latest_run","quota":{"compute":1.0,"window_hours":24,"slot_minutes":1,"allowed_slots":1440,"spent_slots":97,"state":"eligible","reason":"1 compute quota; eligible for the next automatic agent turn"},"agent_todos":{"source_section":"Agent Todo","total_count":12,"open_count":12,"done_count":0,"items":[{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo update recorded for todo_1596c3a678bb","schema_version":"todo_index_item_v0","todo_id":"todo_1596c3a678bb","role":"agent","status":"open","title":"todo update recorded for todo_1596c3a678bb","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:33:32Z","latest_event_status":"open","event_count":7,"event_kinds":["todo_update"]},{"goal_id":"loopx-meta","index":24,"done":false,"text":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","schema_version":"todo_index_item_v0","todo_id":"todo_15bc0926a494","role":"agent","status":"open","priority":"P0-REVENUE MONITOR","title":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"github_public_reply_metadata_monitor","claimed_by":"codex-value-explorer","evidence":"autonomous replan: bounded current value-explorer monitor lane with explicit expires_at.","note":"Set bounded watch expiry for metadata-only public reply monitor; no catch-up after expiry.","updated_at":"2026-07-05T06:27:15+08:00"},{"goal_id":"loopx-meta","index":17,"done":false,"text":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","schema_version":"todo_index_item_v0","todo_id":"todo_2bf560b48a0c","role":"agent","status":"open","priority":"P0","title":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"legacy_open_pr_rename_blocker","claimed_by":"codex-main-control"},{"goal_id":"loopx-meta","index":23,"done":false,"text":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","schema_version":"todo_index_item_v0","todo_id":"todo_3ed1c4a69164","role":"agent","status":"open","priority":"P0","title":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"skillsbench_local_verifier_reward_collection","claimed_by":"codex-main-control","required_capabilities":["benchmark_runner"]},{"goal_id":"loopx-meta","index":32,"done":false,"text":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","schema_version":"todo_index_item_v0","todo_id":"todo_44907a5f355d","role":"agent","status":"blocked","priority":"P0","title":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_raw_new_rerun","claimed_by":"codex-main-control","evidence":"Public-safe redacted live LoopX text; inspect local status for the full row.","note":"Do not spend a full citation-check loopx rerun yet: #865 fixed scored output paths and #874 added bootstrap preflight attribution, but citation-check itself still preflights as apt+verifier bootstrap risk on ECS.","updated_at":"2026-06-29T00:49:36+08:00"},{"goal_id":"loopx-meta","index":39,"done":false,"text":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","schema_version":"todo_index_item_v0","todo_id":"todo_4762c790e583","role":"agent","status":"blocked","priority":"P0","title":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_remote_rerun","claimed_by":"codex-main-control","evidence":"A prior benchmark adapter change was validated before the legacy surface was archived. Current research uses the RFC-linked benchmark workspace and toolkit boundary smokes.","note":"2026-06-29: fixed host-local ACP idle/no-output root cause in PR #894. ACP protocol tool_call_count=0 is now distinguished from reverse-channel task-facing bridge activity; repeated codex_exec_bridge_idle_timeout withou…","updated_at":"2026-06-29T19:40:32+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_584f55f8f3b4","schema_version":"todo_index_item_v0","todo_id":"todo_584f55f8f3b4","role":"agent","status":"open","title":"todo add recorded for todo_584f55f8f3b4","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:48:49Z","latest_event_status":"open","event_count":3,"event_kinds":["todo_add","todo_update"]},{"goal_id":"loopx-meta","index":40,"done":false,"text":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","schema_version":"todo_index_item_v0","todo_id":"todo_62debf065fec","role":"agent","status":"blocked","priority":"P0 MONITOR","title":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"monitor_skillsbench_batch","claimed_by":"codex-main-control","evidence":"Observed 2026-06-30T02:52+08: active-state target_key=skillsbench-goal-baseline-30case-20260629T1826Z-r10; local ps/tmux/recent artifact search found no r10 batch process or compact artifact; no raw task/log/trajectory …","updated_at":"2026-06-30T02:54:54+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_93bc6439c521","schema_version":"todo_index_item_v0","todo_id":"todo_93bc6439c521","role":"agent","status":"open","title":"todo add recorded for todo_93bc6439c521","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_claim","latest_event_at":"2026-07-06T06:32:52Z","latest_event_status":"open","event_count":2,"event_kinds":["todo_add","todo_claim"]},{"goal_id":"loopx-meta","index":27,"done":false,"text":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","schema_version":"todo_index_item_v0","todo_id":"todo_aad7e9716927","role":"agent","status":"blocked","priority":"P0","title":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"run_goal_start_product_mode_matrix","claimed_by":"codex-main-control","evidence":"driver.status shows DONE raw then RUN loopx-goal-start with no running driver; raw benchmark_run.compact first_blocker=skillsbench_codex_acp_provider_zero_activity; source guard requires --host-local-acp-launch for Loop…","note":"Remote run group skillsbench-raw-new-goal-start-20260627T0420Z produced a material closeout for citation-check raw only; raw compact attribution is skillsbench_codex_acp_provider_zero_activity with official score missin…","updated_at":"2026-06-27T13:05:47+08:00"},{"goal_id":"loopx-meta","index":21,"done":false,"text":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","schema_version":"todo_index_item_v0","todo_id":"todo_aec1873c7f28","role":"agent","status":"open","priority":"P0 MONITOR","title":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","claimed_by":"codex-main-control","note":"2026-06-23 projection fix: this is monitor context for the powerlifting run, not an advancement next action; current executable path is SkillsBench build cache/prewarm repair.","updated_at":"2026-06-23T10:37:43+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_c02cb7d19607","schema_version":"todo_index_item_v0","todo_id":"todo_c02cb7d19607","role":"agent","status":"open","title":"todo add recorded for todo_c02cb7d19607","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_add","latest_event_at":"2026-07-06T03:47:54Z","latest_event_status":"open","event_count":1,"event_kinds":["todo_add"]}]}}]}`),run_history:{available:!0,goal_count:1,run_count:5,goals:[{id:`loopx-meta`,domain:`loopx-platform`,status:`active-read-only`,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`],registry_member:!0,legacy_runtime_goal:!1,adapter_kind:`harness_self_improvement`,adapter_status:`connected-read-only`,index_exists:!0,raw_index_records:8444,unique_runs:8440,quota:{compute:1,window_hours:24,slot_minutes:1,allowed_slots:1440,spent_slots:97,state:`waiting`,reason:`no active Codex-ready work is currently selected`},latest_runs:[{generated_at:`2026-07-06T14:37:32+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-value-explorer`,recommended_action:`审阅 PR #1524 的 Agent Management 面板视觉方向:workspace hint 与 stale claim hint 是否符合预期;确认后允许 codex-value-explorer 自合并。`,health_check:`quota safe-bypass operator gate; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:55+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-main-control`,recommended_action:`[P1] Repair SkillsBench post-run debug gate consistency for countable codex-cli-goal official-zero runs: when attempt_accounting is countable and case_closeout_complete=true, do not project first_blocker=loopx_closeout_…`,health_check:`quota should-run eligible; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:54+08:00`,goal_id:`loopx-meta`,classification:`skillsbench_codex_cli_goal_tail4_keepalive_relaunched`,agent_id:`codex-main-control`,progress_scope:`goal`,delivery_batch_scale:`single_surface`,delivery_outcome:`outcome_progress`,recommended_action:`Monitor run_group skillsbench-codex-cli-goal-xhigh-tail4-keepalive-20260706T143132CST using public compact/public artifacts only; once benchmark_run.compact.json lands for each case, classify launcher/case/solver/verifi…`,health_check:`state_file 1/1; registry_goal 1/1; authority_sources 10`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:34+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-side-bypass`,recommended_action:`[P0] Rerun real KNN visible auto-research after the successor-link fix and verify evaluator completion projects a second-round hypothesis/frontier or explicit completion gate without manual intervention; keep evidence p…`,health_check:`quota should-run eligible; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:32:57+08:00`,goal_id:`loopx-meta`,classification:`auto_research_successor_link_fix_merged`,agent_id:`codex-side-bypass`,progress_scope:`agent_lane`,delivery_batch_scale:`implementation`,delivery_outcome:`outcome_progress`,recommended_action:`[P0] Rerun real KNN visible auto-research after the successor-link fix and verify evaluator completion projects a second-round hypothesis/frontier or explicit completion gate without manual intervention; keep evidence p…`,health_check:`state_file 1/1; registry_goal 1/1; authority_sources 0`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]}]}]}},Ud=ud([W(),G(),K(),nd()]),Wd=gd(W(),Ud),Gd=J({todo_id:W().optional(),priority:W().optional(),status:W(),title:W(),claimed_by:W().optional(),task_class:W().optional(),action_kind:W().optional()}),Kd=J({gate_id:W(),kind:W(),status:W(),blocks:q(W()).optional()}),qd=J({todo_id:W().optional(),owner_agent:W().optional(),status:W().optional(),lease_until:W().optional(),write_scope:q(W()).optional()}),Jd=J({generated_at:W().optional(),classification:W().optional(),summary:W().optional()}),Yd=J({kind:W().optional().default(`warning`),message:ud([W(),q(W())]).optional().default(`compact source warning`)}).passthrough(),Xd=J({schema_version:X(`goal_channel_projection_v0`),mode:X(`read_only`),goal_id:W(),display_name:W(),generated_at:W().optional().nullable(),latest_status:W(),waiting_on:W(),next_action:W(),source_refs:gd(W(),Ud),decision_frame:J({user_action_required:K(),agent_action_required:K(),quiet_noop_allowed:K()}),quota:Wd,user_todos:q(Gd).default([]),agent_todos:q(Gd).default([]),open_gates:q(Kd).default([]),active_leases:q(qd).default([]),artifacts:q(Wd).default([]),recent_events:q(Jd).default([]),source_warnings:q(Yd).default([]),truth_contract:J({event_ledger_is_source_of_truth:K(),projection_is_writable:K(),recompute_rule:W(),write_authority:W()})}),Zd=J({compute:G().optional().default(1),window_hours:G().optional().default(24),slot_minutes:G().optional().default(1),allowed_slots:G().optional().nullable(),spent_slots:G().optional().default(0),state:W().optional().nullable(),next_eligible_at:W().optional().nullable(),reason:W().optional().nullable(),blocked_action_scope:W().optional().nullable(),focus_wait:K().optional().nullable(),handoff_outcome_floor_block:K().optional().nullable(),safe_bypass_allowed:K().optional().default(!1),safe_bypass_kind:W().optional().nullable(),safe_bypass_policy:W().optional().nullable(),post_handoff_outcome_gap_streak:G().optional().nullable(),outcome_gap_threshold:G().optional().nullable(),must_advance:q(W()).optional().default([]),avoid:q(W()).optional().default([])}).transform(e=>{let t=Math.max(1,e.slot_minutes),n=Math.round(e.window_hours*60*e.compute/t);return{...e,slot_minutes:t,allowed_slots:e.allowed_slots??n}}),Qd=J({self_repair:J({enabled:K().optional().default(!1),allow_health_blocker_repair:K().optional().default(!1),allow_waiting_projection_repair:K().optional().default(!1)}).optional().nullable()}).passthrough(),$d=J({mode:W().optional().default(`default`),orchestration_mode:W().optional().nullable(),spawn_allowed:K().optional().default(!1),allowed:K().optional().nullable(),max_children:G().optional().default(0),allowed_domains:q(W()).optional().default([])}).passthrough(),ef=J({label:W().optional().nullable(),path:W(),anchor:W().optional().nullable(),exists:K().optional().default(!1),resolved_path:W().optional().nullable()}),tf=J({index:G(),done:K(),text:W(),schema_version:W().optional().nullable(),todo_id:W().optional().nullable(),role:W().optional().nullable(),status:W().optional().nullable(),resume_when:W().optional().nullable(),priority:W().optional().nullable(),title:W().optional().nullable(),archive_state:W().optional().nullable(),source_section:W().optional().nullable(),task_class:W().optional().nullable(),task_domain:W().optional().nullable(),action_kind:W().optional().nullable(),claimed_by:W().optional().nullable(),required_capabilities:q(W()).optional(),note:W().optional().nullable(),evidence:W().optional().nullable(),updated_at:W().optional().nullable(),review_materials:q(ef).optional().default([])}).passthrough(),nf=J({source_section:W().optional().nullable(),total_count:G().optional().default(0),open_count:G().optional().default(0),done_count:G().optional().default(0),advancement_done_count:G().optional(),items:q(tf).optional().default([]),deferred_items:q(tf).optional()}),rf=tf.extend({goal_id:W(),source:W().optional().nullable(),event_count:G().optional().default(0),event_kinds:q(W()).optional().default([]),latest_event_kind:W().optional().nullable(),latest_event_at:W().optional().nullable(),latest_event_status:W().optional().nullable(),agent_id:W().optional().nullable()}).passthrough(),af=J({schema_version:W().optional().nullable(),source:W().optional().nullable(),total_count:G().optional().default(0),current_projected_count:G().optional().default(0),rollout_event_count:G().optional().default(0),item_limit:G().optional().nullable(),items:q(rf).optional().default([])}),of=J({kind:W().optional().nullable(),label:W().optional().nullable(),path_safe:K().optional().default(!1),branch:W().optional().nullable(),write_scope:q(W()).optional().default([])}).passthrough(),sf=J({state:W().optional().nullable(),claimed_by:W().optional().nullable(),last_activity_at:W().optional().nullable(),threshold_hours:G().optional().nullable(),reason:W().optional().nullable(),recommended_operator_action:W().optional().nullable()}).passthrough(),cf=J({schema_version:W().optional().nullable(),todo_id:W().optional().nullable(),goal_id:W().optional().nullable(),role:W().optional().nullable(),status:W().optional().nullable(),priority:W().optional().nullable(),title:W().optional().nullable(),task_class:W().optional().nullable(),action_kind:W().optional().nullable(),claimed_by:W().optional().nullable(),required_write_scopes:q(W()).optional().default([]),workspace_ref:of.optional().nullable()}).passthrough(),lf=J({schema_version:W().optional().nullable(),from_agent:W().optional().nullable(),to_agent:W().optional().nullable(),intent:W().optional().nullable(),summary:W().optional().nullable(),blocker:W().optional().nullable(),suggested_next_action:W().optional().nullable(),evidence_refs:q(W()).optional().default([]),updated_at:W().optional().nullable()}).passthrough(),uf=J({agent_id:W(),role:W().optional().nullable(),state:W().optional().nullable(),current_todo:cf.optional().nullable(),next_action:W().optional().nullable(),last_activity_at:W().optional().nullable(),evidence_refs:q(W()).optional().default([]),handoff_refs:q(W()).optional().default([]),handoff_note:lf.optional().nullable(),workspace_ref:of.optional().nullable(),stale_claim_hint:sf.optional().nullable(),blocked_on:cf.optional().nullable(),goal_ids:q(W()).optional().default([])}).passthrough(),df=J({schema_version:W().optional().nullable(),mode:W().optional().nullable(),goal_id:W().optional().nullable(),generated_at:W().optional().nullable(),style_hint:J({preferred:W().optional().nullable(),license_boundary:W().optional().nullable()}).optional().nullable(),truth_contract:J({todo_is_runtime_work_item:K().optional().default(!0),projection_is_writable:K().optional().default(!1),introduces_task_runtime:K().optional().default(!1),write_api:K().optional().default(!1)}).optional().nullable(),source_summary:J({registered_agent_count:G().optional().default(0),projected_agent_count:G().optional().default(0),todo_source:W().optional().nullable()}).optional().nullable(),agents:q(uf).optional().default([])}).passthrough(),ff=J({goal_id:W(),configured:K().optional().default(!1),enabled:K().optional().default(!1),human_gate_auto_notify_enabled:K().optional().default(!1),target_ref:W().optional().nullable(),receipt_count:G().optional().default(0),last_notified_at:W().optional().nullable()}).passthrough(),pf=J({schema_version:W().optional().nullable(),generated_at:W().optional().nullable(),goals:q(ff).optional().default([])}).passthrough(),mf=J({source_section:W().optional().nullable(),open:G().optional().default(0),done:G().optional().default(0),total:G().optional().default(0),advancement_done_count:G().optional(),next:W().optional().nullable(),next_index:G().optional().nullable(),items:q(tf).optional().default([]),recent_completed_advancement_items:q(tf).optional().default([])}),hf=J({goal_id:W(),status:W().optional().nullable(),waiting_on:W().optional().nullable(),severity:W().optional().nullable(),index:G().optional().nullable(),text:W(),source:W().optional().nullable()}),gf=J({source:W().optional().nullable(),open_count:G().optional().default(0),items:q(hf).optional().default([])}),_f=J({goal_id:W(),status:W().optional().nullable(),waiting_on:W().optional().nullable(),quota_state:W().optional().nullable(),priority:W().optional().nullable(),todo_index:G().optional().nullable(),text:W(),source:W().optional().nullable()}),vf=J({source:W().optional().nullable(),open_count:G().optional().default(0),items:q(_f).optional().default([])}),yf=J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),summary:W().optional().nullable()}),bf=J({kind:W().optional().nullable(),source:W().optional().nullable(),severity:W().optional().nullable(),requires_refresh_state:K().optional().default(!1),reason:W().optional().nullable(),active_state_updated_at:W().optional().nullable(),latest_run_generated_at:W().optional().nullable(),latest_run_state_updated_at:W().optional().nullable(),latest_run_classification:W().optional().nullable(),recommended_action:W().optional().nullable()}),xf=J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),delivery_batch_scale:W().optional().nullable(),delivery_outcome:W().optional().nullable(),health_check:W().optional().nullable(),json_exists:K().optional().nullable(),markdown_exists:K().optional().nullable()}),Sf=J({project_asset_backed:K().optional(),same_source_should_run:K().optional(),codex_ready:K().optional(),handoff_has_next_action:K().optional(),handoff_has_stop_condition:K().optional(),handoff_sanitized_surface:K().optional()}).catchall(K()),Cf=J({ready:K().optional().default(!1),codex_ready:K().optional().default(!1),source:W().optional().nullable(),quota_state:W().optional().nullable(),checks:Sf.optional().default({}),handoff_status:W().optional().nullable(),handoff_ready_at:W().optional().nullable(),handoff_ready_classification:W().optional().nullable(),post_handoff_run_seen:K().optional().default(!1),post_handoff_latest_run:xf.optional().nullable(),post_handoff_recent_runs:q(xf).optional().default([]),post_handoff_small_scale_streak:G().int().nonnegative().optional().default(0),post_handoff_outcome_gap_streak:G().int().nonnegative().optional().default(0),next_probe:W().optional().nullable()}),wf=J({schema_version:W().optional().nullable(),kind:W().optional().nullable(),missing_roles:q(W()).optional().default([]),source:W().optional().nullable(),recommended_action:W().optional().nullable()}),Tf=J({owner:W(),gate:W(),next_action:W(),stop_condition:W(),user_todos:mf.optional().nullable(),agent_todos:mf.optional().nullable(),quota:Zd.optional().nullable(),control_plane:Qd.optional().nullable(),orchestration:$d.optional().nullable(),latest_validation:yf.optional().nullable(),stale_latest_run_warning:bf.optional().nullable(),todo_projection_gap:wf.optional().nullable()}),Ef=J({goal_id:W(),activation_state:Y([`active`,`stopped`]).optional().default(`active`),status:W(),waiting_on:W(),severity:W(),recommended_action:W(),project_asset:Tf.optional().nullable(),handoff_readiness:Cf.optional().nullable(),source:W().optional(),operator_question:W().optional().nullable(),agent_command:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),controller_stage:W().optional().nullable(),missing_gates:q(W()).optional().default([]),next_handoff_condition:W().optional().nullable(),quota:Zd.optional().nullable(),control_plane:Qd.optional().nullable(),user_todos:nf.optional().nullable(),agent_todos:nf.optional().nullable(),stale_latest_run_warning:bf.optional().nullable(),dependency_blockers:gf.optional().nullable(),todo_state_file:W().optional().nullable(),goal_channel_projection:Xd.optional().nullable()}),Df=J({recorded_at:W().optional().nullable(),decision:W().optional().nullable(),reward:W().optional().nullable(),reason_summary:W().optional().nullable(),follow_up:W().optional().nullable()}),Of=J({recorded_at:W().optional().nullable(),gate:W().optional().nullable(),decision:W().optional().nullable(),operator_question:W().optional().nullable(),reason_summary:W().optional().nullable(),follow_up:W().optional().nullable(),agent_command:W().optional().nullable()}),kf=J({version:W().optional().nullable(),goal_id:W().optional().nullable(),run_id:W().optional().nullable(),gate_id:W().optional().nullable(),created_state_ref:W().optional().nullable(),created_policy_version:W().optional().nullable(),interrupt_payload:J({question:W().optional().nullable(),choices:q(W()).optional().default([])}).optional().nullable(),allowed_decisions:q(W()).optional().default([]),operator_decision:W().optional().nullable(),latest_state_ref:W().optional().nullable(),freshness_check:W().optional().nullable(),precondition_check:W().optional().nullable(),migration_or_rebase_result:W().optional().nullable(),resulting_action:W().optional().nullable(),validation_after_resume:W().optional().nullable()}),Af=J({id:W().optional().nullable(),ok:K().optional().nullable(),review:W().optional().nullable()}),jf=J({classification:W().optional().nullable(),read_only_observer_ready:K().optional().nullable(),decision_advisor_ready:K().optional().nullable(),write_controller_ready:K().optional().nullable(),missing_gates:q(W()).optional().default([]),review_judgment:W().optional().nullable(),next_handoff_condition:W().optional().nullable(),gates:q(Af).optional().default([])}),Mf=J({declared:K().optional().default(!1),required:K().optional().default(!1),path:W().optional().nullable(),path_exists:K().optional().nullable(),read_status:W().optional().nullable(),default_entry_count:G().optional().default(0),default_entries_checked:G().optional().default(0),default_entries_present:G().optional().default(0),topic_authority_count:G().optional().default(0),project_material_count:G().optional().default(0),project_material_repository_count:G().optional().default(0),project_material_owner_review_required_count:G().optional().default(0),project_material_stale_count:G().optional().default(0),project_material_current_authority_count:G().optional().default(0),deprecated_source_count:G().optional().default(0),conflict_risk:W().optional().nullable()}),Nf=J({adapter_kind:W().optional().nullable(),adapter_status:W().optional().nullable(),authority_source_count:G().optional().nullable(),authority_registry_declared:K().optional().nullable(),authority_registry_path_exists:K().optional().nullable(),authority_registry_default_entry_count:G().optional().nullable(),authority_registry_default_entries_present:G().optional().nullable(),topic_authority_count:G().optional().nullable(),project_material_count:G().optional().nullable(),project_material_repository_count:G().optional().nullable(),project_material_owner_review_required_count:G().optional().nullable(),project_material_stale_count:G().optional().nullable(),project_material_current_authority_count:G().optional().nullable(),authority_registry_conflict_risk:W().optional().nullable(),guard_count:G().optional().nullable(),sections_found:G().optional().nullable(),sections_checked:G().optional().nullable(),files_present:G().optional().nullable(),files_checked:G().optional().nullable()}),Pf=J({generated_at:W(),goal_id:W(),classification:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),recommended_action:W().optional().nullable(),health_check:W().optional().nullable(),active_task_count:G().optional().nullable(),active_priorities:gd(W(),id()).optional().nullable(),cache_check:W().optional().nullable(),json_exists:K().optional().default(!1),markdown_exists:K().optional().default(!1),human_reward:Df.optional().nullable(),operator_gate:Of.optional().nullable(),operator_gate_resume_contract:kf.optional().nullable(),controller_readiness:jf.optional().nullable(),project_map:Nf.optional().nullable()}),Ff=J({id:W(),activation_state:Y([`active`,`stopped`]).optional().default(`active`),display_name:W().optional().nullable(),domain:W().optional().nullable(),status:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),registry_member:K().optional().default(!1),legacy_runtime_goal:K().optional().default(!1),adapter_kind:W().optional().nullable(),adapter_status:W().optional().nullable(),authority_registry:Mf.optional().nullable(),quota:Zd.optional().nullable(),control_plane:Qd.optional().nullable(),spawn_policy:$d.optional().nullable(),orchestration:$d.optional().nullable(),coordination:J({agent_model:W().optional().nullable(),registered_agents:q(W()).optional().default([])}).optional().nullable(),index_exists:K().optional().default(!1),raw_index_records:G().optional().default(0),unique_runs:G().optional().default(0),latest_runs:q(Pf).optional().default([])}),If=J({available:K(),goal_count:G().optional().default(0),run_count:G().optional().default(0),goals:q(Ff).optional().default([]),recent_runs:q(Pf).optional().default([])}),Lf=J({kind:W(),severity:W(),message:W(),recommended_action:W(),goal_id:W().optional().nullable(),path:W().optional().nullable(),goal_ids:q(W()).optional().default([])}),Rf=J({available:K(),ok:K(),registry:W(),current_registry:W().optional().nullable(),current_registry_is_global:K().optional().default(!1),global_goal_count:G().optional().default(0),current_goal_count:G().optional().default(0),source_registry_count:G().optional().default(0),summary:J({high:G().optional().default(0),action:G().optional().default(0),info:G().optional().default(0),checks:G().optional().default(0),findings:G().optional().default(0)}),findings:q(Lf).optional().default([]),checks:q(W()).optional().default([])}),zf=J({runs_24h:G().optional().default(0),runs_7d:G().optional().default(0),quota_spend_slots_24h:G().optional().default(0),quota_spend_slots_7d:G().optional().default(0),automation_run_count_24h:G().optional().default(0),automation_run_count_7d:G().optional().default(0),progress_signal_run_count_24h:G().optional().default(0),progress_signal_run_count_7d:G().optional().default(0),input_tokens_24h:G().optional(),input_tokens_7d:G().optional(),output_tokens_24h:G().optional(),output_tokens_7d:G().optional(),cache_tokens_24h:G().optional(),cache_tokens_7d:G().optional(),cost_usd_24h:G().optional(),cost_usd_7d:G().optional(),duration_ms_24h:G().optional(),duration_ms_7d:G().optional()}),Bf=zf.extend({goal_id:W(),project_share_24h:G().optional().default(0)}),Vf=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),totals:zf.optional().default({runs_24h:0,runs_7d:0,quota_spend_slots_24h:0,quota_spend_slots_7d:0,automation_run_count_24h:0,automation_run_count_7d:0,progress_signal_run_count_24h:0,progress_signal_run_count_7d:0}),goals:q(Bf).optional().default([])}).optional().nullable(),Hf=J({accounting:G().optional().default(0),decision:G().optional().default(0),evidence:G().optional().default(0),state:G().optional().default(0),work:G().optional().default(0)}),Uf={accounting:0,decision:0,evidence:0,state:0,work:0},Wf=J({events_24h:G().optional().default(0),events_7d:G().optional().default(0),by_class_24h:Hf.optional().default(Uf),by_class_7d:Hf.optional().default(Uf)}),Gf=Wf.extend({goal_id:W(),latest_event_class:W().optional().nullable(),latest_event_at:W().optional().nullable()}),Kf={events_24h:0,events_7d:0,by_class_24h:Uf,by_class_7d:Uf},qf=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),event_classes:q(W()).optional().default([`accounting`,`decision`,`evidence`,`state`,`work`]),totals:Wf.optional().default(Kf),goals:q(Gf).optional().default([])}).optional().nullable(),Jf=J({available:K().optional().default(!1),source:W().optional().default(`run_history`),goal_id:W().optional().nullable(),generated_at:W().optional().nullable(),classification:W().optional().nullable(),delivery_batch_scale:W().optional().nullable(),delivery_outcome:W().optional().nullable(),recommended_action:W().optional().nullable(),json_exists:K().optional().default(!1),markdown_exists:K().optional().default(!1),freshness_window_hours:G().optional().default(24),freshness_status:W().optional().nullable(),is_fresh:K().optional().default(!1),requires_readiness_run:K().optional().default(!0),age_seconds:G().optional().nullable(),age_hours:G().optional().nullable(),freshness_reference_time:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),reason:W().optional().nullable()}).optional().nullable(),Yf=J({ok:K().optional().default(!0),registry:W().optional().nullable(),runtime_root:W().optional().nullable(),gate:W().optional().default(`promotion_readiness`),gate_state:W().optional().default(`warning`),can_promote:K().optional().default(!1),should_warn:K().optional().default(!0),non_blocking:K().optional().default(!0),recommended_action:W().optional().nullable(),warning_message:W().optional().nullable(),readiness:Jf.default(null)}).optional().nullable(),Xf=J({decision_count:G().optional().default(0),stale_count:G().optional().default(0),rebase_required_count:G().optional().default(0),fresh_count:G().optional().default(0)}),Zf=J({goal_id:W(),decision_kind:W().optional().nullable(),decision_at:W().optional().nullable(),classification:W().optional().nullable(),age_days:G().optional().nullable(),stale_by_age:K().optional().default(!1),newer_event_count_7d:G().optional().default(0),newer_event_classes_7d:Hf.optional().default(Uf),freshness_state:W().optional().nullable(),requires_decision_point_rebase:K().optional().default(!1),reason:W().optional().nullable()}),Qf=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),window_days:G().optional().default(7),proxy_note:W().optional().nullable(),summary:Xf.optional().default({decision_count:0,stale_count:0,rebase_required_count:0,fresh_count:0}),items:q(Zf).optional().default([])}).optional().nullable(),$f=J({schema_version:G().optional().default(0),minimum_dashboard_schema_version:G().optional().default(2),producer:W().optional().nullable(),reload_hint:W().optional().nullable()}).optional().default({schema_version:0,minimum_dashboard_schema_version:2,producer:null,reload_hint:`scripts/macos-dashboard-launchagent.sh restart`}),ep=J({schema_version:X(`loopx_goal_projection_scope_v0`),scope:Y([`all`,`active`,`stopped`]),complete:K(),projected_goal_count:G().int().nonnegative(),registry_goal_count:G().int().nonnegative(),registry_revision:W().optional().nullable()}),tp=J({source:W().optional().default(`serve-status`),status_url:W().optional().nullable(),health_url:W().optional().nullable(),review_material_url:W().optional().nullable(),presentation_surfaces_url:W().optional().nullable(),presentation_detail_url:W().optional().nullable(),periodic_report_index_url:W().optional().nullable(),periodic_report_detail_url:W().optional().nullable(),ssh_hosts_url:W().optional().nullable(),reward_dry_run_url:W().optional().nullable(),reward_append_url:W().optional().nullable(),reward_write_enabled:K().optional().default(!1),configure_goal_dry_run_url:W().optional().nullable(),configure_goal_apply_url:W().optional().nullable(),control_plane_write_enabled:K().optional().default(!1)}).optional().nullable(),np=J({extension_id:W().min(1),surface_id:W().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/),extension_revision:W().min(1),payload_sha256:W().regex(/^[0-9a-f]{64}$/)}).strict(),rp=J({extension_id:W().min(1),extension_revision:W().min(1),surface_id:W().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/),surface_kind:W().regex(/^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/),title:W().min(1),view_schema:W().regex(/^[a-z][a-z0-9_]*_v\d+$/),visibility:Y([`public-safe`,`owner-only`]),goal_id:W().min(1).nullable(),generated_at:W().min(1).nullable(),review_due_at:W().min(1).nullable(),diagnostic:W().min(1).nullable(),empty_state_title:W().min(1),empty_state_detail:W().min(1)}),ip=ud([rp.extend({state:Y([`ready`,`review_due`]),goal_id:W().min(1),generated_at:W().min(1),detail_ref:np}).strict(),rp.extend({state:X(`empty`),detail_ref:od().optional()}).strict(),rp.extend({state:X(`invalid`),diagnostic:W().min(1),detail_ref:od().optional()}).strict()]),ap=J({schema_version:X(`extension_presentation_surfaces_v0`),count:G().int().nonnegative(),ready_count:G().int().nonnegative(),review_due_count:G().int().nonnegative(),empty_count:G().int().nonnegative(),invalid_count:G().int().nonnegative(),items:q(ip)}).strict(),op={schema_version:`extension_presentation_surfaces_v0`,count:0,ready_count:0,review_due_count:0,empty_count:0,invalid_count:0,items:[]};J({ok:X(!0),presentation_surfaces:ap}).strict();var sp=J({goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),content_sha256:W().regex(/^sha256:[0-9a-f]{64}$/)}).strict(),cp=J({goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),publication_id:W().min(1),delivered_at:W().min(1),predecessor_publication_id:W().min(1).nullable().optional(),detail_ref:sp}).strict(),lp=J({schema_version:X(`periodic_report_workspace_index_v0`),count:G().int().nonnegative(),items:q(cp)}),up=lp.extend({returned_count:G().int().nonnegative(),total_count:G().int().nonnegative(),limit:G().int().nonnegative(),offset:G().int().nonnegative(),truncated:K()}).strict(),dp=lp.strict().transform(e=>({...e,returned_count:e.count,total_count:e.count,limit:e.count,offset:0,truncated:!1})),fp=J({ok:X(!0),periodic_reports:ud([up,dp])}).strict(),pp=J({schema_version:X(`periodic_report_workspace_projection_v0`),goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),generated_at:W().min(1),title:W().min(1),summary:W().min(1),content_sha256:W().regex(/^sha256:[0-9a-f]{64}$/),period_window:J({start_at:W().min(1),end_at:W().min(1)}).strict(),interaction:J({attention_kind:X(`progress`),interaction:X(`inform`),delivery:X(`surface`),form:X(`milestone_report`),writable:X(!1)}).strict(),delta:J({added_count:G().int().nonnegative(),changed_count:G().int().nonnegative(),item_count:G().int().positive(),items:q(J({fact_id:W().min(1),source_ref:W().min(1),title:W().min(1),summary:W().min(1),status:W().min(1),content_kind:W().min(1),change_kind:Y([`added`,`changed`]),previous_status:W().min(1).optional()}).strict())}).strict(),publication:J({publication_id:W().min(1),delivered_at:W().min(1),predecessor_publication_id:W().min(1).nullable().optional(),cursor_id:W().min(1)}).strict(),truth_contract:J({published_cursor_is_source_of_truth:X(!0),generation_receipt_is_delivery_receipt:X(!1),projection_is_writable:X(!1),browser_write_api:X(!1)}).strict()}).strict(),mp=J({ok:X(!0),projection:pp}).strict(),hp=J({ok:K(),registry:W(),runtime_root:W(),goal_count:G(),run_count:G(),status_contract:$f,goal_projection:ep.optional().nullable().default(null),local_dashboard_api:tp,contract:J({ok:K(),summary:J({errors:G(),warnings:G(),checks:G()}),errors:q(W()),warnings:q(W()),checks:q(W()).optional().default([])}),global_registry:Rf.optional().default({available:!1,ok:!0,registry:``,current_registry:null,current_registry_is_global:!1,global_goal_count:0,current_goal_count:0,source_registry_count:0,summary:{high:0,action:0,info:0,checks:0,findings:0},findings:[],checks:[]}),attention_queue:J({available:K(),item_count:G(),needs_user_or_controller:G(),needs_controller:G().optional().default(0),needs_codex:G(),watching_external_evidence:G(),autonomous_backlog_candidates:vf.optional().nullable(),items:q(Ef)}),run_history:If.optional().default({available:!1,goal_count:0,run_count:0,goals:[],recent_runs:[]}),event_ledger_summary:qf.default(null),promotion_readiness_summary:Jf.default(null),promotion_gate:Yf.default(null),decision_freshness_summary:Qf.default(null),usage_summary:Vf.default(null),todo_index:af.optional().nullable().default(null),agent_management_projection:df.optional().nullable().default(null),goal_channel_notification_projection:pf.optional().nullable().default(null),presentation_surfaces:ap.optional().default(op)});J({ok:K(),dry_run:K().optional().default(!0),appended:K().optional().default(!1),goal_id:W().optional().nullable(),raw_index_records_before:G().optional().nullable(),preview_id:W().optional().nullable(),selected_run:J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),recommended_action:W().optional().nullable(),json_exists:K().optional().nullable(),markdown_exists:K().optional().nullable()}).optional().nullable(),human_reward:Df.optional().nullable(),active_state_summary:W().optional().nullable(),project_agent_visibility:J({source_of_truth:W().optional().nullable(),history_command:W().optional().nullable(),active_state_role:W().optional().nullable(),review_packet_role:W().optional().nullable()}).optional().nullable(),error:W().optional().nullable()});function gp(e,t,n){let r=e.run_history.goals.map(e=>e.id===t&&e.activation_state!==n?{...e,activation_state:n}:e),i=e.attention_queue.items.map(e=>e.goal_id===t&&e.activation_state!==n?{...e,activation_state:n}:e),a=r.some((t,n)=>t!==e.run_history.goals[n]),o=i.some((t,n)=>t!==e.attention_queue.items[n]);return!a&&!o?e:{...e,attention_queue:o?{...e.attention_queue,items:i}:e.attention_queue,run_history:a?{...e.run_history,goals:r}:e.run_history}}function _p(e,t){let n=e.run_history.goals.filter(e=>e.id!==t),r=e.attention_queue.items.filter(e=>e.goal_id!==t);return n.length===e.run_history.goals.length&&r.length===e.attention_queue.items.length?e:{...e,attention_queue:{...e.attention_queue,items:r},run_history:{...e.run_history,goals:n}}}function vp(e){return hp.parse(e)}function yp(e){return e instanceof fu?e.issues.map(e=>`${e.path.join(`.`)||`root`}: ${e.message}`).join(`; `):e instanceof Error?e.message:String(e)}var bp=vp(Hd),xp=J({ok:X(!0),schema_version:X(`loopx_workspace_directory_v1`),registry_revision:W(),goals:q(J({id:W(),display_name:W(),activation_state:Y([`active`,`stopped`]),registry_member:X(!0)}))});function Sp(e,t,n){let r=new URL(e,n);r.searchParams.delete(`goal_activation`),r.searchParams.delete(`goal_id`),r.searchParams.delete(`view`);for(let[e,n]of Object.entries(t))r.searchParams.set(e,n);return r.toString()}async function Cp(e,t){let n=await fetch(Sp(e,{view:`workspace-directory`},t),{cache:`no-store`,signal:AbortSignal.timeout(5e3)});if(!n.ok)return null;let r=xp.safeParse(await n.json());return r.success?r.data:null}function wp(e){return vp({ok:!0,registry:``,runtime_root:``,goal_count:e.goals.length,run_count:0,local_dashboard_api:{},contract:{ok:!0,summary:{errors:0,warnings:0,checks:0},errors:[],warnings:[]},attention_queue:{available:!1,item_count:0,needs_user_or_controller:0,needs_codex:0,watching_external_evidence:0,items:[]},run_history:{available:!1,goal_count:e.goals.length,run_count:0,goals:e.goals,recent_runs:[]}})}async function Tp(e,t,n,r,i,a,o){let s=[...n.goals],c=new Map;async function l(){for(;s.length&&i()&&!o?.aborted;){let l=s.findIndex(e=>e.id===a()),u=l>=0?l:s.findIndex(e=>e.activation_state===`active`);if(u<0)return;let d=s.splice(u,1)[0],f=(c.get(d.id)??0)+1;c.set(d.id,f);let p=new AbortController,m=!1,h=()=>p.abort();o?.addEventListener(`abort`,h,{once:!0});let g=setTimeout(()=>{m=!0,p.abort()},3e4),_=null;try{let a=await fetch(Sp(e,{goal_id:d.id},t),{cache:`no-store`,signal:p.signal});if(!a.ok)_=a.status===409?`revision`:a.status>=500?`service`:`scope`;else{let e=await a.json();if(e.workspace_registry_revision!==n.registry_revision)_=`revision`;else{let t=vp(e);!t.run_history.goals.some(e=>e.id===d.id)||t.run_history.goals.some(e=>e.id!==d.id)?_=`scope`:i()&&!o?.aborted&&r(d.id,t,null)}}}catch(e){_=m?`timeout`:e instanceof TypeError?`network`:`invalid`}finally{clearTimeout(g),o?.removeEventListener(`abort`,h)}if(!i()||o?.aborted)return;_&&[`timeout`,`network`,`service`].includes(_)&&f<3?(await new Promise(e=>setTimeout(e,f*1e3)),s.push(d)):_&&r(d.id,null,_)}}await Promise.all([l(),l()])}var Ep=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),Dp=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),Op=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),kp=e=>{let t=Op(e);return t.charAt(0).toUpperCase()+t.slice(1)},Ap={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},jp=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Mp=(0,R.createContext)({}),Np=()=>(0,R.useContext)(Mp),Pp=(0,R.forwardRef)(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>{let{size:l=24,strokeWidth:u=2,absoluteStrokeWidth:d=!1,color:f=`currentColor`,className:p=``}=Np()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return(0,R.createElement)(`svg`,{ref:c,...Ap,width:t??l??Ap.width,height:t??l??Ap.height,stroke:e??f,strokeWidth:m,className:Ep(`lucide`,p,i),...!a&&!jp(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,R.createElement)(e,t)),...Array.isArray(a)?a:[a]])}),Z=(e,t)=>{let n=(0,R.forwardRef)(({className:n,...r},i)=>(0,R.createElement)(Pp,{ref:i,iconNode:t,className:Ep(`lucide-${Dp(kp(e))}`,`lucide-${e}`,n),...r}));return n.displayName=kp(e),n},Fp=Z(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]),Ip=Z(`arrow-down`,[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]),Lp=Z(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),Rp=Z(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),zp=Z(`arrow-up-down`,[[`path`,{d:`m21 16-4 4-4-4`,key:`f6ql7i`}],[`path`,{d:`M17 20V4`,key:`1ejh1v`}],[`path`,{d:`m3 8 4-4 4 4`,key:`11wl7u`}],[`path`,{d:`M7 4v16`,key:`1glfcx`}]]),Bp=Z(`arrow-up`,[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]),Vp=Z(`badge-check`,[[`path`,{d:`M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z`,key:`3c2336`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),Hp=Z(`bell`,[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]]),Up=Z(`bot`,[[`path`,{d:`M12 8V4H8`,key:`hb8ula`}],[`rect`,{width:`16`,height:`12`,x:`4`,y:`8`,rx:`2`,key:`enze0r`}],[`path`,{d:`M2 14h2`,key:`vft8re`}],[`path`,{d:`M20 14h2`,key:`4cs60a`}],[`path`,{d:`M15 13v2`,key:`1xurst`}],[`path`,{d:`M9 13v2`,key:`rq6x2g`}]]),Wp=Z(`braces`,[[`path`,{d:`M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1`,key:`ezmyqa`}],[`path`,{d:`M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1`,key:`e1hn23`}]]),Gp=Z(`calendar-clock`,[[`path`,{d:`M16 14v2.2l1.6 1`,key:`fo4ql5`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`path`,{d:`M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5`,key:`1osxxc`}],[`path`,{d:`M3 10h5`,key:`r794hk`}],[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`circle`,{cx:`16`,cy:`16`,r:`6`,key:`qoo3c4`}]]),Kp=Z(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),qp=Z(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),Jp=Z(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),Yp=Z(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),Xp=Z(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]),Zp=Z(`circle-check`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),Qp=Z(`clipboard-check`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}],[`path`,{d:`m9 14 2 2 4-4`,key:`df797q`}]]),$p=Z(`code-xml`,[[`path`,{d:`m18 16 4-4-4-4`,key:`1inbqp`}],[`path`,{d:`m6 8-4 4 4 4`,key:`15zrgr`}],[`path`,{d:`m14.5 4-5 16`,key:`e7oirm`}]]),em=Z(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),tm=Z(`database`,[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]),nm=Z(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),rm=Z(`ellipsis`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]]),im=Z(`external-link`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]),am=Z(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),om=Z(`file-braces`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1`,key:`1oajmo`}],[`path`,{d:`M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1`,key:`mpwhp6`}]]),sm=Z(`file-check-corner`,[[`path`,{d:`M10.5 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v6`,key:`g5mvt7`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m14 20 2 2 4-4`,key:`15kota`}]]),cm=Z(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]),lm=Z(`git-branch`,[[`path`,{d:`M15 6a9 9 0 0 0-9 9V3`,key:`1cii5b`}],[`circle`,{cx:`18`,cy:`6`,r:`3`,key:`1h7g24`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}]]),um=Z(`git-compare-arrows`,[[`circle`,{cx:`5`,cy:`6`,r:`3`,key:`1qnov2`}],[`path`,{d:`M12 6h5a2 2 0 0 1 2 2v7`,key:`1yj91y`}],[`path`,{d:`m15 9-3-3 3-3`,key:`1lwv8l`}],[`circle`,{cx:`19`,cy:`18`,r:`3`,key:`1qljk2`}],[`path`,{d:`M12 18H7a2 2 0 0 1-2-2V9`,key:`16sdep`}],[`path`,{d:`m9 15 3 3-3 3`,key:`1m3kbl`}]]),dm=Z(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),fm=Z(`languages`,[[`path`,{d:`m5 8 6 6`,key:`1wu5hv`}],[`path`,{d:`m4 14 6-6 2-3`,key:`1k1g8d`}],[`path`,{d:`M2 5h12`,key:`or177f`}],[`path`,{d:`M7 2h1`,key:`1t2jsx`}],[`path`,{d:`m22 22-5-10-5 10`,key:`don7ne`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),pm=Z(`layout-dashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),mm=Z(`list-plus`,[[`path`,{d:`M16 5H3`,key:`m91uny`}],[`path`,{d:`M11 12H3`,key:`51ecnj`}],[`path`,{d:`M16 19H3`,key:`zzsher`}],[`path`,{d:`M18 9v6`,key:`1twb98`}],[`path`,{d:`M21 12h-6`,key:`bt1uis`}]]),hm=Z(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),gm=Z(`maximize-2`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]),_m=Z(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),vm=Z(`message-circle-question-mark`,[[`path`,{d:`M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719`,key:`1sd12s`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),ym=Z(`message-square-text`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}],[`path`,{d:`M7 11h10`,key:`1twpyw`}],[`path`,{d:`M7 15h6`,key:`d9of3u`}],[`path`,{d:`M7 7h8`,key:`af5zfr`}]]),bm=Z(`minimize-2`,[[`path`,{d:`m14 10 7-7`,key:`oa77jy`}],[`path`,{d:`M20 10h-6V4`,key:`mjg0md`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M4 14h6v6`,key:`rmj7iw`}]]),xm=Z(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),Sm=Z(`palette`,[[`path`,{d:`M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z`,key:`e79jfc`}],[`circle`,{cx:`13.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`1okk4w`}],[`circle`,{cx:`17.5`,cy:`10.5`,r:`.5`,fill:`currentColor`,key:`f64h9f`}],[`circle`,{cx:`6.5`,cy:`12.5`,r:`.5`,fill:`currentColor`,key:`qy21gx`}],[`circle`,{cx:`8.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`fotxhn`}]]),Cm=Z(`paperclip`,[[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551`,key:`1miecu`}]]),wm=Z(`pause`,[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]),Tm=Z(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),Em=Z(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),Dm=Z(`radio`,[[`path`,{d:`M16.247 7.761a6 6 0 0 1 0 8.478`,key:`1fwjs5`}],[`path`,{d:`M19.075 4.933a10 10 0 0 1 0 14.134`,key:`ehdyv1`}],[`path`,{d:`M4.925 19.067a10 10 0 0 1 0-14.134`,key:`1q22gi`}],[`path`,{d:`M7.753 16.239a6 6 0 0 1 0-8.478`,key:`r2q7qm`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]),Om=Z(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),km=Z(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),Am=Z(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]),jm=Z(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),Mm=Z(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]),Nm=Z(`server-cog`,[[`path`,{d:`m10.852 14.772-.383.923`,key:`11vil6`}],[`path`,{d:`M13.148 14.772a3 3 0 1 0-2.296-5.544l-.383-.923`,key:`1v3clb`}],[`path`,{d:`m13.148 9.228.383-.923`,key:`t2zzyc`}],[`path`,{d:`m13.53 15.696-.382-.924a3 3 0 1 1-2.296-5.544`,key:`1bxfiv`}],[`path`,{d:`m14.772 10.852.923-.383`,key:`k9m8cz`}],[`path`,{d:`m14.772 13.148.923.383`,key:`1xvhww`}],[`path`,{d:`M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5`,key:`tn8das`}],[`path`,{d:`M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5`,key:`1g2pve`}],[`path`,{d:`M6 18h.01`,key:`uhywen`}],[`path`,{d:`M6 6h.01`,key:`1utrut`}],[`path`,{d:`m9.228 10.852-.923-.383`,key:`1wtb30`}],[`path`,{d:`m9.228 13.148-.923.383`,key:`1a830x`}]]),Pm=Z(`server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]),Fm=Z(`settings-2`,[[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`path`,{d:`M19 7h-9`,key:`6i9tg`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]),Im=Z(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),Lm=Z(`sliders-horizontal`,[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]),Rm=Z(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]),zm=Z(`square`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]),Bm=Z(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),Vm=Z(`test-tube-diagonal`,[[`path`,{d:`M21 7 6.82 21.18a2.83 2.83 0 0 1-3.99-.01a2.83 2.83 0 0 1 0-4L17 3`,key:`1ub6xw`}],[`path`,{d:`m16 2 6 6`,key:`1gw87d`}],[`path`,{d:`M12 16H4`,key:`1cjfip`}]]),Hm=Z(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),Um=Z(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Wm=Z(`unlink`,[[`path`,{d:`m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71`,key:`yqzxt4`}],[`path`,{d:`m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71`,key:`4qinb0`}],[`line`,{x1:`8`,x2:`8`,y1:`2`,y2:`5`,key:`1041cp`}],[`line`,{x1:`2`,x2:`5`,y1:`8`,y2:`8`,key:`14m1p5`}],[`line`,{x1:`16`,x2:`16`,y1:`19`,y2:`22`,key:`rzdirn`}],[`line`,{x1:`19`,x2:`22`,y1:`16`,y2:`16`,key:`ox905f`}]]),Gm=Z(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);function Km(e){return/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(e)||e.startsWith(`//`)}function qm(e){return[`localhost`,`127.0.0.1`,`::1`,`[::1]`].includes(e)}function Jm(e,t,n){let r=e.trim();if(!r)return{error:`status URL is empty`};let i;try{i=new URL(r,t)}catch{return{error:`status URL is invalid`}}let a=!Km(r),o=qm(i.hostname);return!a&&!o?{error:`${n} must be relative or loopback`}:{source:{isLoopback:o,isRelative:a,url:r}}}function Ym(e,t){return Jm(e,t,`statusUrl`)}function Xm(e,t){let n=Jm(e,t,`Ops statusUrl`);return n.error?{error:`${n.error}; use showcase mode for public links.`}:n}function Zm(e,t,n){let r=new URL(e,n);return r.searchParams.set(`goal_activation`,t),r.toString()}function Qm(e,t){if(!t||!e.isLoopback)return null;try{let n=new URL(e.url,window.location.href),r=new URL(t,n.origin);return qm(r.hostname)?r.toString():null}catch{return null}}function $m(e,t){return{detailUrl:Qm(t,e.local_dashboard_api?.periodic_report_detail_url),indexUrl:Qm(t,e.local_dashboard_api?.periodic_report_index_url)}}async function eh(e,t){let n=new URL(e);n.searchParams.set(`goal_id`,t),n.searchParams.set(`limit`,`100`),n.searchParams.set(`offset`,`0`);let r=await fetch(n,{cache:`no-store`});if(!r.ok)throw Error(`HTTP ${r.status} while loading published reports`);return fp.parse(await r.json()).periodic_reports}async function th(e,t){let n=new URL(e);Object.entries(t).forEach(([e,t])=>n.searchParams.set(e,t));let r=await fetch(n,{cache:`no-store`});if(!r.ok)throw Error(`HTTP ${r.status} while loading published report detail`);return mp.parse(await r.json()).projection}function nh(e,t,n){let r=e.find(e=>e.agentId===t&&e.available)??e.find(e=>e.agentId===n&&e.available)??e.find(e=>e.available);if(!r)throw Error(`Chat requires at least one available route`);return r}function rh(e){return!!(e&&typeof e==`object`&&e.session_invalidated===!0)}var ih=``.replace(/\/+$/,``);function ah(e){return!ih||/^https?:\/\//.test(e)?e:new URL(e,`${ih}/`).toString()}var oh=J({todo_id:W().nullable(),role:W().nullable(),status:W(),priority:W().nullable(),text:W(),action_kind:W().nullable(),task_class:W().nullable(),claimed_by:W().nullable(),evidence:W().nullable()}),sh=J({goal_id:W(),title:W(),objective:W(),status:W(),waiting_on:W().nullable(),severity:W().nullable(),gate:W(),next_action:W(),top_todo:oh.nullable(),todos:q(oh),evidence:q(W()),quota:J({state:W().nullable(),spent_slots:G().nullable(),allowed_slots:G().nullable(),reason:W().nullable()})});J({ok:K(),schema_version:X(`loopx_chat_status_v0`),selected_goal_id:W().nullable(),goal_count:G(),goals:q(sh)});var ch=J({ok:X(!0),schema_version:Y([`loopx_chat_capabilities_v0`,`loopx_chat_capabilities_v1`]),agent_backend:W(),sandbox:W(),approval_policy:W(),todo_write:W(),goal_subagent_configuration:W().optional(),goal_id:W().nullable(),streaming:K().optional(),resume:K().optional(),interrupt:K().optional(),typed_actions:K().optional(),action_kinds:q(W()).optional(),adapters:q(J({agent_id:W(),display_name:W(),adapter_kind:W(),available:K(),streaming:K(),resume:K(),interrupt:K(),location:W().optional(),source:W().optional(),tool_calls:K().optional(),trust_scope:W().optional()})).optional(),lark_cli:J({available:K(),source:W(),version:W().nullable(),error_code:W().nullable()}).optional()}),lh=J({kind:X(`todo`),text:W(),priority:Y([`P0`,`P1`,`P2`]),rationale:W()}),uh=J({operation:Y([`merge`,`release`,`deploy`,`delete`,`payment`]),target:W().min(1).max(160),summary:W().max(300)}),dh=J({schema_version:X(`loopx_chat_agent_response_v0`),message:W(),proposals:q(lh),protected_action:uh.nullable().optional().default(null),gate:J({kind:W(),summary:W(),next_action:W()}).nullable()}),fh=J({closed:X(!0),ok:X(!0),session_id:W().min(1)});J({dry_run:X(!0),ok:X(!0),preview_id:W().min(1),todo:J({goal_id:W().min(1),text:W(),todo_id:W().optional()})});var ph=J({schema_version:X(`loopx_chat_todo_receipt_v0`),receipt_id:W().min(1),preview_id:W().min(1),goal_id:W().min(1),todo_id:W().min(1),status:X(`applied`),outcome:Y([`todo_added`,`todo_already_exists`]),already_exists:K(),preview_revision:W().nullable()});J({applied:X(!0),ok:X(!0),receipt:ph,todo:J({text:W(),todo_id:W()})});var mh=J({mode:W(),spawn_allowed:K(),max_children:G().int().nonnegative(),allowed_domains:q(W()).optional().default([])}).passthrough(),hh=J({ok:X(!0),dry_run:K(),execute:K(),written:K(),changed:K(),goal_id:W().min(1),changed_fields:q(W()),before:J({orchestration:mh}).passthrough(),after:J({orchestration:mh}).passthrough(),preview_id:W().min(1),feature_summary:J({multi_subagent:Y([`off`,`enabled`])}).passthrough(),global_sync:J({required:K(),executed:K(),readback:J({status:W(),verified:K()}).passthrough()}).passthrough()}),gh=J({id:W().min(1),outcome:Y([`approved`,`rejected`,`cancelled`]),projectionVerified:K().nullable(),proposal:lh,receipt:ph.nullable()}).superRefine((e,t)=>{e.outcome===`approved`&&!e.receipt&&t.addIssue({code:`custom`,message:`approved decision history requires a Todo receipt`,path:[`receipt`]}),e.outcome!==`approved`&&e.receipt&&t.addIssue({code:`custom`,message:`zero-write decision history must not include a Todo receipt`,path:[`receipt`]})});J({schema_version:X(`loopx_chat_decision_history_v0`),goal_id:W().min(1),decisions:q(gh).max(24)});var _h=class extends Error{payload;constructor(e,t){super(e),this.payload=t}},vh=Y([`goal.create`,`goal.update`,`goal.lifecycle`,`todo.create`,`todo.update`,`agent.bind`,`heartbeat.bind`,`monitor.create`,`monitor.update`,`gate.resolve`,`run.correct`]),yh=J({schema_version:X(`loopx_chat_action_proposal_v1`),proposal_id:W().min(1),action_kind:vh,summary:W().min(1),normalized_parameters:gd(W(),id()),context:gd(W(),id()),expected_state_fingerprint:W().min(1),permission_classification:W().min(1),validation_evidence:q(id()),available_transitions:q(Y([`apply`,`cancel`,`regenerate`,`reject`,`defer`])),status:Y([`preview_ready`,`applying`,`gated`,`failed`,`rejected`,`deferred`,`cancelled`,`stale`,`applied`]),receipt:gd(W(),id()).nullable(),stale:gd(W(),id()).nullable(),gate:gd(W(),id()).nullable().optional(),error:gd(W(),id()).nullable().optional(),checkpoint:gd(W(),id()).nullable().optional(),regenerated_from:W().nullable().optional(),created_at:W(),updated_at:W()}),bh=J({ok:X(!0),proposal:yh});async function xh(e){let t=await Dh(`/api/actions/preview`,{method:`POST`,body:JSON.stringify({action_kind:e.actionKind,context:e.context,idempotency_key:e.idempotencyKey,normalized_parameters:e.normalizedParameters,summary:e.summary})});return bh.parse(t).proposal}var Sh=J({ok:X(!0),schema_version:X(`loopx_chat_action_list_v1`),proposals:q(yh)});async function Ch(e={}){let t=new URLSearchParams;e.contextKind&&t.set(`context_kind`,e.contextKind),e.goalId&&t.set(`goal_id`,e.goalId);let n=t.size>0?`?${t.toString()}`:``;return Sh.parse(await Dh(`/api/actions${n}`)).proposals}async function wh(e){let t=await Dh(`/api/actions/${encodeURIComponent(e)}/apply`,{method:`POST`,body:`{}`});return J({ok:X(!0),proposal:yh,turn:gd(W(),id()).nullable().optional()}).parse(t)}async function Th(e){return bh.parse(await Dh(`/api/actions/${encodeURIComponent(e)}/cancel`,{method:`POST`,body:`{}`})).proposal}async function Eh(e,t){return bh.parse(await Dh(`/api/actions/${encodeURIComponent(e)}/${t}`,{method:`POST`,body:`{}`})).proposal}async function Dh(e,t){let n;try{n=await fetch(ah(e),{cache:`no-store`,...t,headers:{"Content-Type":`application/json`,...t?.headers}})}catch{throw new _h(`无法连接 LoopX Chat 服务。请确认 Dashboard 与 Chat 服务已启动且来自同一版本。`,{error_code:`chat_api_unavailable`})}let r=await n.text(),i=null;if(r.trim())try{i=JSON.parse(r)}catch{i=null}let a=i&&typeof i==`object`&&!Array.isArray(i)?i:{};if(!n.ok){let e=(a.proposal&&typeof a.proposal==`object`?a.proposal:null)?.status===`stale`?`来源状态已变化,请重新生成预览。`:null,t=n.status>=500?`LoopX Chat 服务暂时不可用(HTTP ${n.status})。请确认 Dashboard 与 Chat 服务已启动且来自同一版本。`:`LoopX Chat 请求失败(HTTP ${n.status})。`;throw new _h(e??String(a.error||t),Object.keys(a).length?a:{error_code:`chat_api_unavailable`,http_status:n.status})}if(i===null)throw new _h(`LoopX Chat 服务返回了无法识别的响应(HTTP ${n.status})。请确认 Dashboard 与 Chat 服务来自同一版本。`,{error_code:`invalid_chat_api_response`,http_status:n.status});return i}async function Oh(){return ch.parse(await Dh(`/api/chat/capabilities`))}async function kh(e){return Dh(`/api/chat/projection-messages`,{method:`POST`,body:JSON.stringify({answer:e.answer,context_kind:e.contextKind,goal_id:e.goalId,question:e.question})})}async function Ah(e,t=`codex`,n=`resume_latest`,r=`goal`){return Dh(`/api/chat/sessions`,{method:`POST`,body:JSON.stringify({goal_id:e,agent_id:t,mode:n,context_kind:r})})}async function jh(e){return Dh(`/api/chat/sessions/${e}`)}async function Mh(e){let t=new URLSearchParams;return e.agentId&&t.set(`agent_id`,e.agentId),e.channelId&&t.set(`channel_id`,e.channelId),e.goalId&&t.set(`goal_id`,e.goalId),Dh(`/api/chat/sessions?${t.toString()}`)}function Nh(e){let t=new Map;for(let n of e)for(let e of n.messages)t.set(e.message_id,e);return[...t.values()].sort((e,t)=>e.created_at.localeCompare(t.created_at)||e.message_id.localeCompare(t.message_id))}async function Ph(e){let t=await Mh(e),n=await Promise.all(t.sessions.map(e=>jh(e.session_id)));return{messages:Nh(n),sessions:t.sessions,snapshots:n}}async function Fh(e,t,n,r=[]){return Dh(`/api/chat/sessions/${e}/turns`,{method:`POST`,body:JSON.stringify({message:t,client_turn_id:n,...r.length?{attachments:r.map(e=>({data_url:e.dataUrl,id:e.id,mime_type:e.mimeType,name:e.name,size:e.size}))}:{}})})}function Ih(e){let t=e.split(` +`).filter(e=>e.startsWith(`data:`)).map(e=>e.slice(5).trimStart()).join(` +`);if(!t)return null;try{let e=JSON.parse(t);return!e.kind||!e.payload||typeof e.payload!=`object`?null:{event_id:String(e.event_id??``),sequence:Number(e.sequence??0),kind:String(e.kind),created_at:String(e.created_at??``),payload:e.payload}}catch{return null}}async function Lh(e,t,n){let r=``,i=0,a=!1;for(;!a&&i<4;){let o=typeof window>`u`?`http://127.0.0.1`:window.location.origin,s=new URL(ah(e),o);r&&s.searchParams.set(`after`,r);try{let e=await fetch(s,{cache:`no-store`,headers:{Accept:`text/event-stream`},signal:n});if(!e.ok||!e.body)throw new _h(`SSE HTTP ${e.status}`,{status:e.status});let o=e.body.getReader(),c=new TextDecoder,l=``;for(;;){let{done:e,value:n}=await o.read();l+=c.decode(n,{stream:!e}).replaceAll(`\r +`,` +`);let i=l.indexOf(` + +`);for(;i>=0;){let e=l.slice(0,i);l=l.slice(i+2);let n=Ih(e);n&&(n.event_id&&(r=n.event_id),t(n),a=[`turn.completed`,`turn.interrupted`,`turn.failed`].includes(n.kind)),i=l.indexOf(` + +`)}if(e||a)break}i=a?i:i+1}catch(e){if(n?.aborted||(i+=1,i>=4))throw e;await new Promise(e=>globalThis.setTimeout(e,250*2**(i-1)))}}if(!a)throw new _h(`Agent 事件流连接已断开。`,{reconnect_attempts:i})}async function Rh(e,t){return Dh(`/api/chat/sessions/${e}/turns/${t}/interrupt`,{method:`POST`,body:`{}`})}async function zh(e,t,n={}){let r=await Fh(e,t,n.clientTurnId??crypto.randomUUID(),n.attachments);return n.onPhase?.(`turn.accepted`,r.turn_id),Bh(e,r.turn_id,r.events_url,n)}async function Bh(e,t,n,r={}){let i=null,a={failure:null,interrupted:null};try{await Lh(n,e=>{r.onPhase?.(e.kind,t),(e.kind===`answer.delta`||e.kind===`assistant.delta`)&&r.onDelta?.(String(e.payload.text??``)),e.kind===`agent.phase`&&r.onActivity?.(String(e.payload.label??`Agent 正在处理`)),e.kind===`turn.completed`&&(i=e.payload.response),e.kind===`turn.failed`&&(a.failure=e.payload),e.kind===`turn.interrupted`&&(a.interrupted=e.payload)},r.signal)}catch(i){throw i instanceof _h&&!r.signal?.aborted?new _h(i.message,{...i.payload,events_url:n,reconnectable:!0,session_id:e,turn_id:t}):i}if(a.failure)throw new _h(String(a.failure.message||`Agent 回合失败。`),a.failure);if(a.interrupted)throw new _h(`Agent 回合已中断。`,{...a.interrupted,error_code:`turn_interrupted`,session_id:e,turn_id:t});return{response:dh.parse(i),sessionId:e,turnId:t}}async function Vh(e,t,n={}){return Bh(e,t,`/api/chat/sessions/${e}/turns/${t}/events`,n)}async function Hh(e){let t=fh.parse(await Dh(`/api/chat/sessions/${e}`,{keepalive:!0,method:`DELETE`}));if(t.session_id!==e)throw new _h(`Agent 会话关闭回执与本次请求不一致。`,{session_id:t.session_id});return t}async function Uh(e){return Dh(`/api/chat/sessions/${e}/resume`,{method:`POST`,body:`{}`})}function Wh(e){return{goal_id:e.goalId,enabled:e.enabled,...e.enabled?{max_children:e.maxChildren,allowed_domains:e.allowedDomains}:{}}}function Gh(e,t){let n=e.after.orchestration,r=[...new Set(t.allowedDomains)],i=e.feature_summary.multi_subagent===`enabled`;if(!(e.goal_id===t.goalId&&i===t.enabled&&(t.enabled?n.max_children===t.maxChildren&&JSON.stringify(n.allowed_domains)===JSON.stringify(r):n.spawn_allowed===!1&&n.max_children===0)))throw new _h(`Goal 子代理配置回执与本次请求不一致,界面已停止更新。`,{after:e.after,goal_id:e.goal_id});return e}async function Kh(e){let t=hh.parse(await Dh(`/api/chat/goal-subagents/dry-run`,{method:`POST`,body:JSON.stringify(Wh(e))}));if(!t.dry_run||t.execute||t.written)throw new _h(`Goal 子代理预览返回了非预览回执,已停止进入确认状态。`,{result:t});return Gh(t,e)}async function qh(e,t){let n=hh.parse(await Dh(`/api/chat/goal-subagents/apply`,{method:`POST`,body:JSON.stringify({...Wh(e),preview_id:t})}));if(n.preview_id!==t||n.dry_run||!n.execute)throw new _h(`Goal 子代理写入回执与本次确认不一致,界面已停止更新。`,{result:n});if(n.changed&&(!n.written||!n.global_sync.executed||!n.global_sync.readback.verified))throw new _h(`Goal 子代理设置未通过共享状态读回验证。`,{result:n});return Gh(n,e)}var Jh=J({ok:X(!0),targets:q(J({enabled:K(),provider:W(),target_name:W()}))});async function Yh(){return Jh.parse(await Dh(`/api/chat/goal-channel/targets`)).targets}var Xh=J({ok:K(),blocker:W().optional(),public_summary:W().optional(),status:W().optional()});async function Zh(e){return Xh.parse(await Dh(`/api/chat/goal-channel/setup`,{method:`POST`,body:JSON.stringify({execute:e.execute,goal_id:e.goalId,target:e.target})}))}async function Qh(e){return Xh.parse(await Dh(`/api/chat/goal-channel/configure`,{method:`POST`,body:JSON.stringify({auto_notify_human_gates:e.autoNotify,goal_id:e.goalId})}))}J({schema_version:X(`periodic_report_machine_defaults_v0`),enabled:K(),inheritance:X(`live_machine_default`),profile_preset:W().optional(),route_ref:W().optional(),timezone:W()});var $h=J({schema_version:X(`loopx_machine_configuration_v0`),namespaces:gd(W(),gd(W(),id()))}),eg=J({namespace:W(),title:W(),description:W(),schema_versions:q(W()).min(1),configuration_template:gd(W(),id()),template_status:Y([`ready`,`schema_only`])}),tg=J({schema_version:X(`machine_configuration_catalog_v0`),namespaces:q(eg)}),ng=J({key:W(),label:W(),description:W(),input_kind:Y([`boolean`,`number`,`select`,`string_list`,`text`]),required:K(),minimum:G().int().optional(),maximum:G().int().optional(),options:q(W()).optional()}),rg=J({schema_version:X(`capability_configuration_editor_v0`),editable:K(),supported_scopes:q(Y([`goal`,`machine`])),writable_scopes:q(Y([`goal`,`machine`])),fields:q(ng),read_only_reason:W().optional()}),ig=J({schema_version:X(`capability_configuration_catalog_v0`),capabilities:q(J({capability_id:W(),display_name:W(),description:W(),available_scopes:q(Y([`goal`,`machine`])),machine_namespace:W().optional(),goal_feature_id:W().optional(),effective_value_policy:X(`goal_override_over_live_machine_default`).optional(),availability:W().optional(),default:gd(W(),id()).optional(),current:gd(W(),id()).optional(),machine_current:gd(W(),id()).optional(),effective_configuration:J({schema_version:X(`capability_configuration_resolution_v0`),capability_id:W(),source:Y([`goal_override`,`machine_default`,`capability_default`,`not_configured`]),configuration:gd(W(),id()).nullable(),inherited:K(),goal_override_present:K(),machine_default_present:K(),effective_revision:W()}).optional(),documentation:gd(W(),id()).optional(),configuration_editor:rg}))}),ag=J({ok:X(!0),schema_version:X(`goal_configuration_inspection_v0`),status:X(`configured`),goal_id:W(),revision:W(),available_capabilities:q(W()),capability_catalog:ig}),og=J({ok:X(!0),goal_id:W(),capability_id:W(),changed_fields:q(W()),goal_configuration:gd(W(),id()).nullable(),capability_catalog:ig}),sg=og.extend({schema_version:X(`goal_configuration_update_plan_v0`),status:X(`preview`),action:Y([`create`,`update`,`delete`,`unchanged`]),current_revision:W(),desired_revision:W(),base_revision:W(),plan_revision:W(),writes_required:G().int().nonnegative()}),cg=ud([og.extend({schema_version:X(`goal_configuration_transaction_v0`),status:Y([`applied`,`unchanged`]),plan_revision:W(),applied_revision:W(),readback_verified:X(!0)}),J({ok:X(!1),schema_version:X(`goal_configuration_transaction_v0`),status:X(`partial_write`),goal_id:W(),capability_id:W(),plan_revision:W(),applied_revision:W().nullable(),source_written:X(!0),shared_sync_pending:X(!0),readback_verified:K(),changed_fields:q(W()),goal_configuration:gd(W(),id()).nullable(),capability_catalog:ig,error:W(),recommended_action:W()})]),lg=J({ok:X(!0),available_namespaces:q(W()),namespace_catalog:tg.optional().default({schema_version:`machine_configuration_catalog_v0`,namespaces:[]}),capability_catalog:ig,changed_namespaces:q(W()).optional().default([]),machine_configuration:$h.nullable().optional()}),ug=lg.extend({schema_version:X(`machine_configuration_inspection_v0`),status:Y([`configured`,`absent`]),revision:W()}),dg=lg.extend({schema_version:X(`machine_configuration_update_plan_v0`),status:X(`preview`),action:Y([`create`,`update`,`delete`,`unchanged`]),current_revision:W(),desired_revision:W(),plan_revision:W(),writes_required:G().int().nonnegative(),machine_configuration:$h.nullable()}),fg=lg.extend({schema_version:X(`machine_configuration_transaction_v0`),status:Y([`applied`,`unchanged`]),plan_revision:W(),transaction_id:W().nullable(),readback_verified:X(!0),rollback_available:K(),applied_revision:W().optional(),prior_revision:W().optional()}),pg=lg.extend({schema_version:X(`machine_configuration_rollback_plan_v0`),status:X(`preview`),action:Y([`delete`,`restore`,`unchanged`,`blocked`]),reason:W(),transaction_id:W(),plan_revision:W(),rollback_allowed:K(),writes_required:G().int().nonnegative()}),mg=lg.extend({schema_version:X(`machine_configuration_rollback_receipt_v0`),status:Y([`rolled_back`,`unchanged`]),transaction_id:W(),plan_revision:W(),rollback_id:W().nullable(),readback_verified:X(!0)});async function hg(){return ug.parse(await Dh(`/api/chat/machine-configuration`))}async function gg(e){let t=new URLSearchParams({goal_id:e});return ag.parse(await Dh(`/api/chat/goal-configuration?${t.toString()}`))}async function _g(e,t,n){return sg.parse(await Dh(`/api/chat/goal-configuration/preview`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n})}))}async function vg(e,t,n,r){return cg.parse(await Dh(`/api/chat/goal-configuration/apply`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n,expected_plan_revision:r})}))}async function yg(e,t){return dg.parse(await Dh(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,namespace_configuration:t})}))}async function bg(e,t,n){return fg.parse(await Dh(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:n,namespace:e,namespace_configuration:t})}))}async function xg(e){return dg.parse(await Dh(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,operation:`remove`})}))}async function Sg(e,t){return fg.parse(await Dh(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:t,namespace:e,operation:`remove`})}))}async function Cg(e){return pg.parse(await Dh(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!1,transaction_id:e})}))}async function wg(e,t){return mg.parse(await Dh(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!0,expected_plan_revision:t,transaction_id:e})}))}var Tg=J({ok:X(!0),goals:q(J({goal_id:W(),repository:J({branch:W(),identity:W(),label:W(),read_only:X(!0)})}))});async function Eg(){return Tg.parse(await Dh(`/api/chat/goals/contexts`)).goals}var Dg=J({ok:X(!0),apps:q(J({active:K(),app_ref:W(),brand:W(),health_error_code:W().nullable().default(null),label:W(),ready:K(),reply_ready:K().default(!1)}))});async function Og(){return Dg.parse(await Dh(`/api/chat/lark/apps`)).apps}var kg=J({ok:X(!0),app_ref:W(),error:W().nullable(),setup_id:W(),status:Y([`starting`,`waiting_for_feishu`,`ready`,`failed`,`cancelled`]),verification_url:W().url().nullable()});async function Ag(e){return kg.parse(await Dh(`/api/chat/lark/app-setups`,{method:`POST`,body:JSON.stringify({app_ref:e.appRef,brand:e.brand})}))}async function jg(e){return kg.parse(await Dh(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`))}async function Mg(e){return kg.parse(await Dh(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`,{method:`DELETE`}))}var Ng=[`invalid_event`,`binding_unavailable`,`chat_mismatch`,`topic_mismatch`,`route_ambiguous`,`self_message`,`invalid_routing_state`,`not_addressed`],Pg=J({ok:X(!0),chats:q(J({chat_id:W(),chat_name:W()}))});async function Fg(e,t){let n=new URLSearchParams({app_ref:e});return t&&n.set(`query`,t),Pg.parse(await Dh(`/api/chat/lark/chats?${n.toString()}`)).chats}var Ig=J({ok:X(!0),connections:q(J({agent_id:W().nullable().default(null),connection_id:W(),app_label:W(),app_ref:W(),capture_scope:Y([`addressed_only`,`configured_chat_all`]).default(`addressed_only`),chat_name:W(),enabled:K(),goal_id:W(),goal_title:W(),health_error_code:W().nullable().default(null),history_permission_guidance:J({action:X(`enable_application_scopes_and_publish`),api_document_url:W().url(),capability:X(`group_history_pagination`),identity:X(`bot`),required_scopes:md([X(`im:message.group_msg`),X(`im:message.group_msg.include_bot:read`)]),schema_version:X(`lark_bot_group_history_permission_guidance_v0`)}).nullable().default(null),incoming_mode:Y([`mentions`,`all`]),ingress_mode:Y([`live_steering`,`session_queue`,`async_inbox`,`direct_session`]).default(`async_inbox`),event_count:G().int().nonnegative().default(0),last_event_reason:Y(Ng).nullable().default(null).catch(null),last_event_status:W().nullable().default(null),listener_error_code:W().nullable().default(null),listener_status:Y([`starting`,`listening`,`retrying`,`stopped`]).nullable().default(null),replied_count:G().int().nonnegative().default(0),reply_ready:K().default(!1),reply_mode:X(`topic_reply`),session_bound:K().default(!1),target_ref:W(),topic_name:W(),topic_setup_required:K()}))});async function Lg(){return Ig.parse(await Dh(`/api/chat/lark/connections`)).connections}async function Rg(e){return Xh.parse(await Dh(`/api/chat/lark/connections`,{method:`POST`,body:JSON.stringify({...e.agentBindings?{agent_bindings:e.agentBindings.map(e=>({agent_id:e.agentId,app_ref:e.appRef}))}:{},...e.agentId?{agent_id:e.agentId}:{},...e.appRef?{app_ref:e.appRef}:{},capture_scope:e.captureScope,chat_id:e.chatId,chat_name:e.chatName,execute:e.execute,goal_id:e.goalId,incoming_mode:e.incomingMode,ingress_mode:e.ingressMode,reply_mode:e.replyMode})}))}async function zg(e,t){let n=new URLSearchParams({goal_id:e,connection_id:t});return Xh.parse(await Dh(`/api/chat/lark/connections?${n.toString()}`,{method:`DELETE`}))}function Bg(e){return{loadedUrl:null,projectionRevision:0,requestedUrl:e,selectionRevision:0,requestGeneration:0}}function Vg(e,t){return e.selectionRevision+=1,e.requestedUrl=t,e.selectionRevision}function Hg(e,t,n){if(n.background)return e.requestedUrl!==null||e.loadedUrl!==t?null:(e.requestGeneration+=1,{background:!0,projectionRevision:e.projectionRevision,selectionRevision:e.selectionRevision,url:t,generation:e.requestGeneration});let r=n.selectionRevision??e.selectionRevision+1;return n.selectionRevision!==void 0&&e.selectionRevision!==r?null:(e.selectionRevision=r,e.projectionRevision+=1,e.requestedUrl=t,e.requestGeneration+=1,{background:!1,projectionRevision:e.projectionRevision,selectionRevision:r,url:t,generation:e.requestGeneration})}function Ug(e,t){return t.generation===e.requestGeneration&&e.projectionRevision===t.projectionRevision&&e.selectionRevision===t.selectionRevision}function Wg(e,t){return Ug(e,t)&&(!t.background||e.requestedUrl===null&&e.loadedUrl===t.url)}function Gg(e,t,n){return t.get(e)===n}function Kg(e,t,n,r){return e.filter(e=>Gg(r(e),n,t))}function qg(e,t,n){let r=new Set,i=[];for(let a of[...e,...t]){let e=n(a);e==null||r.has(e)||(r.add(e),i.push(a))}return i}var Jg=[`runs_24h`,`runs_7d`,`quota_spend_slots_24h`,`quota_spend_slots_7d`,`automation_run_count_24h`,`automation_run_count_7d`,`progress_signal_run_count_24h`,`progress_signal_run_count_7d`],Yg=[`input_tokens_24h`,`input_tokens_7d`,`output_tokens_24h`,`output_tokens_7d`,`cache_tokens_24h`,`cache_tokens_7d`,`cost_usd_24h`,`cost_usd_7d`,`duration_ms_24h`,`duration_ms_7d`],Xg=[`accounting`,`decision`,`evidence`,`state`,`work`],Zg={accounting:0,decision:0,evidence:0,state:0,work:0},Qg={runs_24h:0,runs_7d:0,quota_spend_slots_24h:0,quota_spend_slots_7d:0,automation_run_count_24h:0,automation_run_count_7d:0,progress_signal_run_count_24h:0,progress_signal_run_count_7d:0};function $g(e,t){let n={...e};for(let r of Jg)n[r]=(Number(e[r])||0)+(Number(t[r])||0);for(let r of Yg)(e[r]!==void 0||t[r]!==void 0)&&(n[r]=(e[r]??0)+(t[r]??0));return n}function e_(e,t){return!e.length||t<=0?e:e.map(e=>({...e,project_share_24h:Math.round((Number(e.runs_24h)||0)/t*1e3)/1e3}))}function t_(e,t){let n={...e};for(let r of Xg)n[r]=(e[r]??0)+(t[r]??0);return n}function n_(e){let t={events_24h:0,events_7d:0,by_class_24h:{...Zg},by_class_7d:{...Zg}};for(let n of e)t.events_24h+=n.events_24h,t.events_7d+=n.events_7d,t.by_class_24h=t_(t.by_class_24h,n.by_class_24h),t.by_class_7d=t_(t.by_class_7d,n.by_class_7d);return t}function r_(e,t,n){if(!e&&!t)return null;let r=Kg(e?.goals??[],`active`,n,e=>e.goal_id),i=Kg(t?.goals??[],`stopped`,n,e=>e.goal_id),a=qg(r,i,e=>e.goal_id),o=n_(r),s=n_(i),c={events_24h:o.events_24h+s.events_24h,events_7d:o.events_7d+s.events_7d,by_class_24h:t_(o.by_class_24h,s.by_class_24h),by_class_7d:t_(o.by_class_7d,s.by_class_7d)};return{...e??t,goals:a,sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),totals:c}}function i_(e,t,n){if(!e&&!t)return null;let r=qg([...Kg(e?.items??[],`active`,n,e=>e.goal_id),...Kg(t?.items??[],`stopped`,n,e=>e.goal_id)],[],e=>`${e.goal_id}:${e.decision_kind??``}:${e.decision_at??``}`),i={decision_count:(e?.summary.decision_count??0)+(t?.summary.decision_count??0),stale_count:r.filter(e=>e.stale_by_age).length,rebase_required_count:(e?.summary.rebase_required_count??0)+(t?.summary.rebase_required_count??0),fresh_count:(e?.summary.fresh_count??0)+(t?.summary.fresh_count??0)};return{...e??t,items:r,sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),summary:i}}function a_(e,t){return qg([...e,...t].sort((e,t)=>t.generated_at.localeCompare(e.generated_at)),[],e=>`${e.goal_id}:${e.generated_at}:${e.classification??``}`)}function o_(e,t,n){let r=qg(Kg(e.items,`active`,n,e=>e.goal_id),Kg(t.items,`stopped`,n,e=>e.goal_id),e=>e.goal_id);return{...e,item_count:r.length,items:r,needs_controller:r.filter(e=>e.waiting_on===`controller`).length,needs_codex:r.filter(e=>e.waiting_on===`codex`).length,needs_user_or_controller:r.filter(e=>[`user_or_controller`,`controller`].includes(e.waiting_on)).length,watching_external_evidence:r.filter(e=>e.waiting_on===`external_evidence`).length}}function s_(e){let t=e.todo_id?.trim()||``;return t?`${e.goal_id}:${t}`:`${e.goal_id}:synthetic:${e.role??``}:${e.index??``}:${e.text??``}`}function c_(e){let t={...Qg};for(let n of e){for(let e of Jg)t[e]+=Number(n[e])||0;for(let e of Yg)n[e]!==void 0&&(t[e]=(t[e]??0)+n[e])}return t}function l_(e,t,n){if(!e&&!t)return null;let r=Kg(e?.items??[],`active`,n,e=>e.goal_id),i=Kg(t?.items??[],`stopped`,n,e=>e.goal_id),a=qg(r,i,s_);return{...e??t,current_projected_count:r.length+i.length,items:a,rollout_event_count:a.reduce((e,t)=>e+(t.event_count??0),0),total_count:a.length}}function u_(e,t,n){if(!e&&!t)return null;let r=Kg(e?.goals??[],`active`,n,e=>e.goal_id),i=Kg(t?.goals??[],`stopped`,n,e=>e.goal_id),a=qg(r,i,e=>e.goal_id),o=$g(c_(r),c_(i));return{...e??t,goals:e_(a,Number(o.runs_24h)||0),sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),totals:o}}function d_(e,t,n){if(!e&&!t)return null;let r=(e?.agents??[]).filter(e=>e.goal_ids.some(e=>Gg(e,n,`active`))||(e.current_todo?.goal_id?Gg(e.current_todo.goal_id,n,`active`):!1)),i=(t?.agents??[]).filter(e=>e.goal_ids.some(e=>Gg(e,n,`stopped`))||(e.current_todo?.goal_id?Gg(e.current_todo.goal_id,n,`stopped`):!1)),a=qg(r,i,e=>e.agent_id).map(e=>{let t=i.find(t=>t.agent_id===e.agent_id);return t?{...e,goal_ids:Array.from(new Set([...e.goal_ids??[],...t.goal_ids]))}:e});return{...e??t,agents:a,source_summary:(e??t)?.source_summary?{...(e??t).source_summary,projected_agent_count:a.length,registered_agent_count:new Set(a.map(e=>e.agent_id)).size}:(e??t)?.source_summary}}function f_(e,t,n){if(!e&&!t)return null;let r=qg(Kg(e?.goals??[],`active`,n,e=>e.goal_id),Kg(t?.goals??[],`stopped`,n,e=>e.goal_id),e=>e.goal_id);return{...e??t,goals:r}}function p_(e,t){let n=t.goal_projection?.scope;if(n!==`active`&&n!==`stopped`)return t;let r=n,i=t.run_history.goals,a=e.run_history.goals,o=qg(r===`active`?i:a.filter(e=>e.activation_state!==`stopped`),r===`stopped`?i:a.filter(e=>e.activation_state===`stopped`),e=>e.id),s=new Map(o.map(e=>[e.id,e.activation_state])),c=r===`active`?t:e,l=r===`stopped`?t:e,u=e.goal_projection?.registry_revision??null,d=t.goal_projection?.registry_revision??null,f=u===null||d===null||u===d;return{...e,agent_management_projection:d_(c.agent_management_projection,l.agent_management_projection,s),attention_queue:o_(c.attention_queue,l.attention_queue,s),decision_freshness_summary:i_(c.decision_freshness_summary,l.decision_freshness_summary,s),event_ledger_summary:r_(c.event_ledger_summary,l.event_ledger_summary,s),goal_channel_notification_projection:f_(c.goal_channel_notification_projection,l.goal_channel_notification_projection,s),goal_projection:{schema_version:`loopx_goal_projection_scope_v0`,...t.goal_projection,complete:f,projected_goal_count:o.length,registry_goal_count:t.goal_projection?.registry_goal_count??0,scope:`all`},run_history:{...e.run_history,goal_count:o.length,goals:o,recent_runs:a_(c.run_history.recent_runs,l.run_history.recent_runs),run_count:c.run_history.run_count+l.run_history.run_count},todo_index:l_(c.todo_index,l.todo_index,s),usage_summary:u_(c.usage_summary,l.usage_summary,s)}}function m_(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`){if(Array.isArray(e)){var i=e.length;for(t=0;ttypeof e==`boolean`?`${e}`:e===0?`0`:e,__=h_,v_=(e,t)=>n=>{if(t?.variants==null)return __(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=g_(t)||g_(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return __(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)},y_=(e,t)=>{let n=Array(e.length+t.length);for(let t=0;t({classGroupId:e,validator:t}),x_=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),S_=`-`,C_=[],w_=`arbitrary..`,T_=e=>{let t=O_(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:e=>{if(e.startsWith(`[`)&&e.endsWith(`]`))return D_(e);let n=e.split(S_);return E_(n,+(n[0]===``&&n.length>1),t)},getConflictingClassGroupIds:(e,t)=>{if(t){let t=r[e],i=n[e];return t?i?y_(i,t):t:i||C_}return n[e]||C_}}},E_=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;let r=e[t],i=n.nextPart.get(r);if(i){let n=E_(e,t+1,i);if(n)return n}let a=n.validators;if(a===null)return;let o=t===0?e.join(S_):e.slice(t).join(S_),s=a.length;for(let e=0;ee.slice(1,-1).indexOf(`:`)===-1?void 0:(()=>{let t=e.slice(1,-1),n=t.indexOf(`:`),r=t.slice(0,n);return r?w_+r:void 0})(),O_=e=>{let{theme:t,classGroups:n}=e;return k_(n,t)},k_=(e,t)=>{let n=x_();for(let r in e){let i=e[r];A_(i,n,r,t)}return n},A_=(e,t,n,r)=>{let i=e.length;for(let a=0;a{if(typeof e==`string`){M_(e,t,n);return}if(typeof e==`function`){N_(e,t,n,r);return}P_(e,t,n,r)},M_=(e,t,n)=>{let r=e===``?t:F_(t,e);r.classGroupId=n},N_=(e,t,n,r)=>{if(I_(e)){A_(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(b_(n,e))},P_=(e,t,n,r)=>{let i=Object.entries(e),a=i.length;for(let e=0;e{let n=e,r=t.split(S_),i=r.length;for(let e=0;e`isThemeGetter`in e&&e.isThemeGetter===!0,L_=e=>{if(e<1)return{get:()=>void 0,set:()=>{}};let t=0,n=Object.create(null),r=Object.create(null),i=(i,a)=>{n[i]=a,t++,t>e&&(t=0,r=n,n=Object.create(null))};return{get(e){let t=n[e];if(t!==void 0)return t;if((t=r[e])!==void 0)return i(e,t),t},set(e,t){e in n?n[e]=t:i(e,t)}}},R_=`!`,z_=`:`,B_=[],V_=(e,t,n,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:i}),H_=e=>{let{prefix:t,experimentalParseClassName:n}=e,r=e=>{let t=[],n=0,r=0,i=0,a,o=e.length;for(let s=0;si?a-i:void 0;return V_(t,l,c,u)};if(t){let e=t+z_,n=r;r=t=>t.startsWith(e)?n(t.slice(e.length)):V_(B_,!1,t,void 0,!0)}if(n){let e=r;r=t=>n({className:t,parseClassName:e})}return r},U_=e=>{let t=new Map;return e.orderSensitiveModifiers.forEach((e,n)=>{t.set(e,1e6+n)}),e=>{let n=[],r=[];for(let i=0;i0&&(r.sort(),n.push(...r),r=[]),n.push(a)):r.push(a)}return r.length>0&&(r.sort(),n.push(...r)),n}},W_=e=>({cache:L_(e.cacheSize),parseClassName:H_(e),sortModifiers:U_(e),postfixLookupClassGroupIds:G_(e),...T_(e)}),G_=e=>{let t=Object.create(null),n=e.postfixLookupClassGroups;if(n)for(let e=0;e{let{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i,sortModifiers:a,postfixLookupClassGroupIds:o}=t,s=[],c=e.trim().split(K_),l=``;for(let e=c.length-1;e>=0;--e){let t=c[e],{isExternal:u,modifiers:d,hasImportantModifier:f,baseClassName:p,maybePostfixModifierPosition:m}=n(t);if(u){l=t+(l.length>0?` `+l:l);continue}let h=!!m,g;if(h){g=r(p.substring(0,m));let e=g&&o[g]?r(p):void 0;e&&e!==g&&(g=e,h=!1)}else g=r(p);if(!g){if(!h){l=t+(l.length>0?` `+l:l);continue}if(g=r(p),!g){l=t+(l.length>0?` `+l:l);continue}h=!1}let _=d.length===0?``:d.length===1?d[0]:a(d).join(`:`),v=f?_+R_:_,y=v+g;if(s.indexOf(y)>-1)continue;s.push(y);let b=i(g,h);for(let e=0;e0?` `+l:l)}return l},J_=(...e)=>{let t=0,n,r,i=``;for(;t{if(typeof e==`string`)return e;let t,n=``;for(let r=0;r{let n,r,i,a,o=o=>(n=W_(t.reduce((e,t)=>t(e),e())),r=n.cache.get,i=n.cache.set,a=s,s(o)),s=e=>{let t=r(e);if(t)return t;let a=q_(e,n);return i(e,a),a};return a=o,(...e)=>a(J_(...e))},Z_=[],Q_=e=>{let t=t=>t[e]||Z_;return t.isThemeGetter=!0,t},$_=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,ev=/^\((?:(\w[\w-]*):)?(.+)\)$/i,tv=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,nv=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,rv=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,iv=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,av=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,ov=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,sv=e=>tv.test(e),cv=e=>!!e&&!Number.isNaN(Number(e)),lv=e=>!!e&&Number.isInteger(Number(e)),uv=e=>e.endsWith(`%`)&&cv(e.slice(0,-1)),dv=e=>nv.test(e),fv=()=>!0,pv=e=>rv.test(e)&&!iv.test(e),mv=()=>!1,hv=e=>av.test(e),gv=e=>ov.test(e),_v=e=>!Q(e)&&!$(e),vv=e=>e.startsWith(`@container`)&&(e[10]===`/`&&e[11]!==void 0||e[11]===`s`&&e[16]!==void 0&&e.startsWith(`-size/`,10)||e[11]===`n`&&e[18]!==void 0&&e.startsWith(`-normal/`,10)),yv=e=>Pv(e,Rv,mv),Q=e=>$_.test(e),bv=e=>Pv(e,zv,pv),xv=e=>Pv(e,Bv,cv),Sv=e=>Pv(e,Hv,fv),Cv=e=>Pv(e,Vv,mv),wv=e=>Pv(e,Iv,mv),Tv=e=>Pv(e,Lv,gv),Ev=e=>Pv(e,Uv,hv),$=e=>ev.test(e),Dv=e=>Fv(e,zv),Ov=e=>Fv(e,Vv),kv=e=>Fv(e,Iv),Av=e=>Fv(e,Rv),jv=e=>Fv(e,Lv),Mv=e=>Fv(e,Uv,!0),Nv=e=>Fv(e,Hv,!0),Pv=(e,t,n)=>{let r=$_.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},Fv=(e,t,n=!1)=>{let r=ev.exec(e);return r?r[1]?t(r[1]):n:!1},Iv=e=>e===`position`||e===`percentage`,Lv=e=>e===`image`||e===`url`,Rv=e=>e===`length`||e===`size`||e===`bg-size`,zv=e=>e===`length`,Bv=e=>e===`number`,Vv=e=>e===`family-name`,Hv=e=>e===`number`||e===`weight`,Uv=e=>e===`shadow`,Wv=X_(()=>{let e=Q_(`color`),t=Q_(`font`),n=Q_(`text`),r=Q_(`font-weight`),i=Q_(`tracking`),a=Q_(`leading`),o=Q_(`breakpoint`),s=Q_(`container`),c=Q_(`spacing`),l=Q_(`radius`),u=Q_(`shadow`),d=Q_(`inset-shadow`),f=Q_(`text-shadow`),p=Q_(`drop-shadow`),m=Q_(`blur`),h=Q_(`perspective`),g=Q_(`aspect`),_=Q_(`ease`),v=Q_(`animate`),y=()=>[`auto`,`avoid`,`all`,`avoid-page`,`page`,`left`,`right`,`column`],b=()=>[`center`,`top`,`bottom`,`left`,`right`,`top-left`,`left-top`,`top-right`,`right-top`,`bottom-right`,`right-bottom`,`bottom-left`,`left-bottom`],x=()=>[...b(),$,Q],S=()=>[`auto`,`hidden`,`clip`,`visible`,`scroll`],C=()=>[`auto`,`contain`,`none`],w=()=>[$,Q,c],T=()=>[sv,`full`,`auto`,...w()],E=()=>[lv,`none`,`subgrid`,$,Q],D=()=>[`auto`,{span:[`full`,lv,$,Q]},lv,$,Q],O=()=>[lv,`auto`,$,Q],k=()=>[`auto`,`min`,`max`,`fr`,$,Q],ee=()=>[`start`,`end`,`center`,`between`,`around`,`evenly`,`stretch`,`baseline`,`center-safe`,`end-safe`],A=()=>[`start`,`end`,`center`,`stretch`,`center-safe`,`end-safe`],j=()=>[`auto`,...w()],te=()=>[sv,`auto`,`full`,`dvw`,`dvh`,`lvw`,`lvh`,`svw`,`svh`,`min`,`max`,`fit`,...w()],ne=()=>[sv,`screen`,`full`,`dvw`,`lvw`,`svw`,`min`,`max`,`fit`,...w()],re=()=>[sv,`screen`,`full`,`lh`,`dvh`,`lvh`,`svh`,`min`,`max`,`fit`,...w()],M=()=>[e,$,Q],N=()=>[...b(),kv,wv,{position:[$,Q]}],ie=()=>[`no-repeat`,{repeat:[``,`x`,`y`,`space`,`round`]}],ae=()=>[`auto`,`cover`,`contain`,Av,yv,{size:[$,Q]}],oe=()=>[uv,Dv,bv],P=()=>[``,`none`,`full`,l,$,Q],F=()=>[``,cv,Dv,bv],I=()=>[`solid`,`dashed`,`dotted`,`double`],se=()=>[`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`],ce=()=>[cv,uv,kv,wv],le=()=>[``,`none`,m,$,Q],ue=()=>[`none`,cv,$,Q],de=()=>[`none`,cv,$,Q],fe=()=>[cv,$,Q],pe=()=>[sv,`full`,...w()];return{cacheSize:500,theme:{animate:[`spin`,`ping`,`pulse`,`bounce`],aspect:[`video`],blur:[dv],breakpoint:[dv],color:[fv],container:[dv],"drop-shadow":[dv],ease:[`in`,`out`,`in-out`],font:[_v],"font-weight":[`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`],"inset-shadow":[dv],leading:[`none`,`tight`,`snug`,`normal`,`relaxed`,`loose`],perspective:[`dramatic`,`near`,`normal`,`midrange`,`distant`,`none`],radius:[dv],shadow:[dv],spacing:[`px`,cv],text:[dv],"text-shadow":[dv],tracking:[`tighter`,`tight`,`normal`,`wide`,`wider`,`widest`]},classGroups:{aspect:[{aspect:[`auto`,`square`,sv,Q,$,g]}],container:[`container`],"container-type":[{"@container":[``,`normal`,`size`,$,Q]}],"container-named":[vv],columns:[{columns:[cv,Q,$,s]}],"break-after":[{"break-after":y()}],"break-before":[{"break-before":y()}],"break-inside":[{"break-inside":[`auto`,`avoid`,`avoid-page`,`avoid-column`]}],"box-decoration":[{"box-decoration":[`slice`,`clone`]}],box:[{box:[`border`,`content`]}],display:[`block`,`inline-block`,`inline`,`flex`,`inline-flex`,`table`,`inline-table`,`table-caption`,`table-cell`,`table-column`,`table-column-group`,`table-footer-group`,`table-header-group`,`table-row-group`,`table-row`,`flow-root`,`grid`,`inline-grid`,`contents`,`list-item`,`hidden`],sr:[`sr-only`,`not-sr-only`],float:[{float:[`right`,`left`,`none`,`start`,`end`]}],clear:[{clear:[`left`,`right`,`both`,`none`,`start`,`end`]}],isolation:[`isolate`,`isolation-auto`],"object-fit":[{object:[`contain`,`cover`,`fill`,`none`,`scale-down`]}],"object-position":[{object:x()}],overflow:[{overflow:S()}],"overflow-x":[{"overflow-x":S()}],"overflow-y":[{"overflow-y":S()}],overscroll:[{overscroll:C()}],"overscroll-x":[{"overscroll-x":C()}],"overscroll-y":[{"overscroll-y":C()}],position:[`static`,`fixed`,`absolute`,`relative`,`sticky`],inset:[{inset:T()}],"inset-x":[{"inset-x":T()}],"inset-y":[{"inset-y":T()}],start:[{"inset-s":T(),start:T()}],end:[{"inset-e":T(),end:T()}],"inset-bs":[{"inset-bs":T()}],"inset-be":[{"inset-be":T()}],top:[{top:T()}],right:[{right:T()}],bottom:[{bottom:T()}],left:[{left:T()}],visibility:[`visible`,`invisible`,`collapse`],z:[{z:[lv,`auto`,$,Q]}],basis:[{basis:[sv,`full`,`auto`,s,...w()]}],"flex-direction":[{flex:[`row`,`row-reverse`,`col`,`col-reverse`]}],"flex-wrap":[{flex:[`nowrap`,`wrap`,`wrap-reverse`]}],flex:[{flex:[cv,sv,`auto`,`initial`,`none`,Q]}],grow:[{grow:[``,cv,$,Q]}],shrink:[{shrink:[``,cv,$,Q]}],order:[{order:[lv,`first`,`last`,`none`,$,Q]}],"grid-cols":[{"grid-cols":E()}],"col-start-end":[{col:D()}],"col-start":[{"col-start":O()}],"col-end":[{"col-end":O()}],"grid-rows":[{"grid-rows":E()}],"row-start-end":[{row:D()}],"row-start":[{"row-start":O()}],"row-end":[{"row-end":O()}],"grid-flow":[{"grid-flow":[`row`,`col`,`dense`,`row-dense`,`col-dense`]}],"auto-cols":[{"auto-cols":k()}],"auto-rows":[{"auto-rows":k()}],gap:[{gap:w()}],"gap-x":[{"gap-x":w()}],"gap-y":[{"gap-y":w()}],"justify-content":[{justify:[...ee(),`normal`]}],"justify-items":[{"justify-items":[...A(),`normal`]}],"justify-self":[{"justify-self":[`auto`,...A()]}],"align-content":[{content:[`normal`,...ee()]}],"align-items":[{items:[...A(),{baseline:[``,`last`]}]}],"align-self":[{self:[`auto`,...A(),{baseline:[``,`last`]}]}],"place-content":[{"place-content":ee()}],"place-items":[{"place-items":[...A(),`baseline`]}],"place-self":[{"place-self":[`auto`,...A()]}],p:[{p:w()}],px:[{px:w()}],py:[{py:w()}],ps:[{ps:w()}],pe:[{pe:w()}],pbs:[{pbs:w()}],pbe:[{pbe:w()}],pt:[{pt:w()}],pr:[{pr:w()}],pb:[{pb:w()}],pl:[{pl:w()}],m:[{m:j()}],mx:[{mx:j()}],my:[{my:j()}],ms:[{ms:j()}],me:[{me:j()}],mbs:[{mbs:j()}],mbe:[{mbe:j()}],mt:[{mt:j()}],mr:[{mr:j()}],mb:[{mb:j()}],ml:[{ml:j()}],"space-x":[{"space-x":w()}],"space-x-reverse":[`space-x-reverse`],"space-y":[{"space-y":w()}],"space-y-reverse":[`space-y-reverse`],size:[{size:te()}],"inline-size":[{inline:[`auto`,...ne()]}],"min-inline-size":[{"min-inline":[`auto`,...ne()]}],"max-inline-size":[{"max-inline":[`none`,...ne()]}],"block-size":[{block:[`auto`,...re()]}],"min-block-size":[{"min-block":[`auto`,...re()]}],"max-block-size":[{"max-block":[`none`,...re()]}],w:[{w:[s,`screen`,...te()]}],"min-w":[{"min-w":[s,`screen`,`none`,...te()]}],"max-w":[{"max-w":[s,`screen`,`none`,`prose`,{screen:[o]},...te()]}],h:[{h:[`screen`,`lh`,...te()]}],"min-h":[{"min-h":[`screen`,`lh`,`none`,...te()]}],"max-h":[{"max-h":[`screen`,`lh`,...te()]}],"font-size":[{text:[`base`,n,Dv,bv]}],"font-smoothing":[`antialiased`,`subpixel-antialiased`],"font-style":[`italic`,`not-italic`],"font-weight":[{font:[r,Nv,Sv]}],"font-stretch":[{"font-stretch":[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`,uv,Q]}],"font-family":[{font:[Ov,Cv,t]}],"font-features":[{"font-features":[Q]}],"fvn-normal":[`normal-nums`],"fvn-ordinal":[`ordinal`],"fvn-slashed-zero":[`slashed-zero`],"fvn-figure":[`lining-nums`,`oldstyle-nums`],"fvn-spacing":[`proportional-nums`,`tabular-nums`],"fvn-fraction":[`diagonal-fractions`,`stacked-fractions`],tracking:[{tracking:[i,$,Q]}],"line-clamp":[{"line-clamp":[cv,`none`,$,xv]}],leading:[{leading:[a,...w()]}],"list-image":[{"list-image":[`none`,$,Q]}],"list-style-position":[{list:[`inside`,`outside`]}],"list-style-type":[{list:[`disc`,`decimal`,`none`,$,Q]}],"text-alignment":[{text:[`left`,`center`,`right`,`justify`,`start`,`end`]}],"placeholder-color":[{placeholder:M()}],"text-color":[{text:M()}],"text-decoration":[`underline`,`overline`,`line-through`,`no-underline`],"text-decoration-style":[{decoration:[...I(),`wavy`]}],"text-decoration-thickness":[{decoration:[cv,`from-font`,`auto`,$,bv]}],"text-decoration-color":[{decoration:M()}],"underline-offset":[{"underline-offset":[cv,`auto`,$,Q]}],"text-transform":[`uppercase`,`lowercase`,`capitalize`,`normal-case`],"text-overflow":[`truncate`,`text-ellipsis`,`text-clip`],"text-wrap":[{text:[`wrap`,`nowrap`,`balance`,`pretty`]}],indent:[{indent:w()}],"tab-size":[{tab:[lv,$,Q]}],"vertical-align":[{align:[`baseline`,`top`,`middle`,`bottom`,`text-top`,`text-bottom`,`sub`,`super`,$,Q]}],whitespace:[{whitespace:[`normal`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]}],break:[{break:[`normal`,`words`,`all`,`keep`]}],wrap:[{wrap:[`break-word`,`anywhere`,`normal`]}],hyphens:[{hyphens:[`none`,`manual`,`auto`]}],content:[{content:[`none`,$,Q]}],"bg-attachment":[{bg:[`fixed`,`local`,`scroll`]}],"bg-clip":[{"bg-clip":[`border`,`padding`,`content`,`text`]}],"bg-origin":[{"bg-origin":[`border`,`padding`,`content`]}],"bg-position":[{bg:N()}],"bg-repeat":[{bg:ie()}],"bg-size":[{bg:ae()}],"bg-image":[{bg:[`none`,{linear:[{to:[`t`,`tr`,`r`,`br`,`b`,`bl`,`l`,`tl`]},lv,$,Q],radial:[``,$,Q],conic:[lv,$,Q]},jv,Tv]}],"bg-color":[{bg:M()}],"gradient-from-pos":[{from:oe()}],"gradient-via-pos":[{via:oe()}],"gradient-to-pos":[{to:oe()}],"gradient-from":[{from:M()}],"gradient-via":[{via:M()}],"gradient-to":[{to:M()}],rounded:[{rounded:P()}],"rounded-s":[{"rounded-s":P()}],"rounded-e":[{"rounded-e":P()}],"rounded-t":[{"rounded-t":P()}],"rounded-r":[{"rounded-r":P()}],"rounded-b":[{"rounded-b":P()}],"rounded-l":[{"rounded-l":P()}],"rounded-ss":[{"rounded-ss":P()}],"rounded-se":[{"rounded-se":P()}],"rounded-ee":[{"rounded-ee":P()}],"rounded-es":[{"rounded-es":P()}],"rounded-tl":[{"rounded-tl":P()}],"rounded-tr":[{"rounded-tr":P()}],"rounded-br":[{"rounded-br":P()}],"rounded-bl":[{"rounded-bl":P()}],"border-w":[{border:F()}],"border-w-x":[{"border-x":F()}],"border-w-y":[{"border-y":F()}],"border-w-s":[{"border-s":F()}],"border-w-e":[{"border-e":F()}],"border-w-bs":[{"border-bs":F()}],"border-w-be":[{"border-be":F()}],"border-w-t":[{"border-t":F()}],"border-w-r":[{"border-r":F()}],"border-w-b":[{"border-b":F()}],"border-w-l":[{"border-l":F()}],"divide-x":[{"divide-x":F()}],"divide-x-reverse":[`divide-x-reverse`],"divide-y":[{"divide-y":F()}],"divide-y-reverse":[`divide-y-reverse`],"border-style":[{border:[...I(),`hidden`,`none`]}],"divide-style":[{divide:[...I(),`hidden`,`none`]}],"border-color":[{border:M()}],"border-color-x":[{"border-x":M()}],"border-color-y":[{"border-y":M()}],"border-color-s":[{"border-s":M()}],"border-color-e":[{"border-e":M()}],"border-color-bs":[{"border-bs":M()}],"border-color-be":[{"border-be":M()}],"border-color-t":[{"border-t":M()}],"border-color-r":[{"border-r":M()}],"border-color-b":[{"border-b":M()}],"border-color-l":[{"border-l":M()}],"divide-color":[{divide:M()}],"outline-style":[{outline:[...I(),`none`,`hidden`]}],"outline-offset":[{"outline-offset":[cv,$,Q]}],"outline-w":[{outline:[``,cv,Dv,bv]}],"outline-color":[{outline:M()}],shadow:[{shadow:[``,`none`,u,Mv,Ev]}],"shadow-color":[{shadow:M()}],"inset-shadow":[{"inset-shadow":[`none`,d,Mv,Ev]}],"inset-shadow-color":[{"inset-shadow":M()}],"ring-w":[{ring:F()}],"ring-w-inset":[`ring-inset`],"ring-color":[{ring:M()}],"ring-offset-w":[{"ring-offset":[cv,bv]}],"ring-offset-color":[{"ring-offset":M()}],"inset-ring-w":[{"inset-ring":F()}],"inset-ring-color":[{"inset-ring":M()}],"text-shadow":[{"text-shadow":[`none`,f,Mv,Ev]}],"text-shadow-color":[{"text-shadow":M()}],opacity:[{opacity:[cv,$,Q]}],"mix-blend":[{"mix-blend":[...se(),`plus-darker`,`plus-lighter`]}],"bg-blend":[{"bg-blend":se()}],"mask-clip":[{"mask-clip":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]},`mask-no-clip`],"mask-composite":[{mask:[`add`,`subtract`,`intersect`,`exclude`]}],"mask-image-linear-pos":[{"mask-linear":[cv]}],"mask-image-linear-from-pos":[{"mask-linear-from":ce()}],"mask-image-linear-to-pos":[{"mask-linear-to":ce()}],"mask-image-linear-from-color":[{"mask-linear-from":M()}],"mask-image-linear-to-color":[{"mask-linear-to":M()}],"mask-image-t-from-pos":[{"mask-t-from":ce()}],"mask-image-t-to-pos":[{"mask-t-to":ce()}],"mask-image-t-from-color":[{"mask-t-from":M()}],"mask-image-t-to-color":[{"mask-t-to":M()}],"mask-image-r-from-pos":[{"mask-r-from":ce()}],"mask-image-r-to-pos":[{"mask-r-to":ce()}],"mask-image-r-from-color":[{"mask-r-from":M()}],"mask-image-r-to-color":[{"mask-r-to":M()}],"mask-image-b-from-pos":[{"mask-b-from":ce()}],"mask-image-b-to-pos":[{"mask-b-to":ce()}],"mask-image-b-from-color":[{"mask-b-from":M()}],"mask-image-b-to-color":[{"mask-b-to":M()}],"mask-image-l-from-pos":[{"mask-l-from":ce()}],"mask-image-l-to-pos":[{"mask-l-to":ce()}],"mask-image-l-from-color":[{"mask-l-from":M()}],"mask-image-l-to-color":[{"mask-l-to":M()}],"mask-image-x-from-pos":[{"mask-x-from":ce()}],"mask-image-x-to-pos":[{"mask-x-to":ce()}],"mask-image-x-from-color":[{"mask-x-from":M()}],"mask-image-x-to-color":[{"mask-x-to":M()}],"mask-image-y-from-pos":[{"mask-y-from":ce()}],"mask-image-y-to-pos":[{"mask-y-to":ce()}],"mask-image-y-from-color":[{"mask-y-from":M()}],"mask-image-y-to-color":[{"mask-y-to":M()}],"mask-image-radial":[{"mask-radial":[$,Q]}],"mask-image-radial-from-pos":[{"mask-radial-from":ce()}],"mask-image-radial-to-pos":[{"mask-radial-to":ce()}],"mask-image-radial-from-color":[{"mask-radial-from":M()}],"mask-image-radial-to-color":[{"mask-radial-to":M()}],"mask-image-radial-shape":[{"mask-radial":[`circle`,`ellipse`]}],"mask-image-radial-size":[{"mask-radial":[{closest:[`side`,`corner`],farthest:[`side`,`corner`]}]}],"mask-image-radial-pos":[{"mask-radial-at":b()}],"mask-image-conic-pos":[{"mask-conic":[cv]}],"mask-image-conic-from-pos":[{"mask-conic-from":ce()}],"mask-image-conic-to-pos":[{"mask-conic-to":ce()}],"mask-image-conic-from-color":[{"mask-conic-from":M()}],"mask-image-conic-to-color":[{"mask-conic-to":M()}],"mask-mode":[{mask:[`alpha`,`luminance`,`match`]}],"mask-origin":[{"mask-origin":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]}],"mask-position":[{mask:N()}],"mask-repeat":[{mask:ie()}],"mask-size":[{mask:ae()}],"mask-type":[{"mask-type":[`alpha`,`luminance`]}],"mask-image":[{mask:[`none`,$,Q]}],filter:[{filter:[``,`none`,$,Q]}],blur:[{blur:le()}],brightness:[{brightness:[cv,$,Q]}],contrast:[{contrast:[cv,$,Q]}],"drop-shadow":[{"drop-shadow":[``,`none`,p,Mv,Ev]}],"drop-shadow-color":[{"drop-shadow":M()}],grayscale:[{grayscale:[``,cv,$,Q]}],"hue-rotate":[{"hue-rotate":[cv,$,Q]}],invert:[{invert:[``,cv,$,Q]}],saturate:[{saturate:[cv,$,Q]}],sepia:[{sepia:[``,cv,$,Q]}],"backdrop-filter":[{"backdrop-filter":[``,`none`,$,Q]}],"backdrop-blur":[{"backdrop-blur":le()}],"backdrop-brightness":[{"backdrop-brightness":[cv,$,Q]}],"backdrop-contrast":[{"backdrop-contrast":[cv,$,Q]}],"backdrop-grayscale":[{"backdrop-grayscale":[``,cv,$,Q]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[cv,$,Q]}],"backdrop-invert":[{"backdrop-invert":[``,cv,$,Q]}],"backdrop-opacity":[{"backdrop-opacity":[cv,$,Q]}],"backdrop-saturate":[{"backdrop-saturate":[cv,$,Q]}],"backdrop-sepia":[{"backdrop-sepia":[``,cv,$,Q]}],"border-collapse":[{border:[`collapse`,`separate`]}],"border-spacing":[{"border-spacing":w()}],"border-spacing-x":[{"border-spacing-x":w()}],"border-spacing-y":[{"border-spacing-y":w()}],"table-layout":[{table:[`auto`,`fixed`]}],caption:[{caption:[`top`,`bottom`]}],transition:[{transition:[``,`all`,`colors`,`opacity`,`shadow`,`transform`,`none`,$,Q]}],"transition-behavior":[{transition:[`normal`,`discrete`]}],duration:[{duration:[cv,`initial`,$,Q]}],ease:[{ease:[`linear`,`initial`,_,$,Q]}],delay:[{delay:[cv,$,Q]}],animate:[{animate:[`none`,v,$,Q]}],backface:[{backface:[`hidden`,`visible`]}],perspective:[{perspective:[h,$,Q]}],"perspective-origin":[{"perspective-origin":x()}],rotate:[{rotate:ue()}],"rotate-x":[{"rotate-x":ue()}],"rotate-y":[{"rotate-y":ue()}],"rotate-z":[{"rotate-z":ue()}],scale:[{scale:de()}],"scale-x":[{"scale-x":de()}],"scale-y":[{"scale-y":de()}],"scale-z":[{"scale-z":de()}],"scale-3d":[`scale-3d`],skew:[{skew:fe()}],"skew-x":[{"skew-x":fe()}],"skew-y":[{"skew-y":fe()}],transform:[{transform:[$,Q,``,`none`,`gpu`,`cpu`]}],"transform-origin":[{origin:x()}],"transform-style":[{transform:[`3d`,`flat`]}],translate:[{translate:pe()}],"translate-x":[{"translate-x":pe()}],"translate-y":[{"translate-y":pe()}],"translate-z":[{"translate-z":pe()}],"translate-none":[`translate-none`],zoom:[{zoom:[lv,$,Q]}],accent:[{accent:M()}],appearance:[{appearance:[`none`,`auto`]}],"caret-color":[{caret:M()}],"color-scheme":[{scheme:[`normal`,`dark`,`light`,`light-dark`,`only-dark`,`only-light`]}],cursor:[{cursor:[`auto`,`default`,`pointer`,`wait`,`text`,`move`,`help`,`not-allowed`,`none`,`context-menu`,`progress`,`cell`,`crosshair`,`vertical-text`,`alias`,`copy`,`no-drop`,`grab`,`grabbing`,`all-scroll`,`col-resize`,`row-resize`,`n-resize`,`e-resize`,`s-resize`,`w-resize`,`ne-resize`,`nw-resize`,`se-resize`,`sw-resize`,`ew-resize`,`ns-resize`,`nesw-resize`,`nwse-resize`,`zoom-in`,`zoom-out`,$,Q]}],"field-sizing":[{"field-sizing":[`fixed`,`content`]}],"pointer-events":[{"pointer-events":[`auto`,`none`]}],resize:[{resize:[`none`,``,`y`,`x`]}],"scroll-behavior":[{scroll:[`auto`,`smooth`]}],"scrollbar-thumb-color":[{"scrollbar-thumb":M()}],"scrollbar-track-color":[{"scrollbar-track":M()}],"scrollbar-gutter":[{"scrollbar-gutter":[`auto`,`stable`,`both`]}],"scrollbar-w":[{scrollbar:[`auto`,`thin`,`none`]}],"scroll-m":[{"scroll-m":w()}],"scroll-mx":[{"scroll-mx":w()}],"scroll-my":[{"scroll-my":w()}],"scroll-ms":[{"scroll-ms":w()}],"scroll-me":[{"scroll-me":w()}],"scroll-mbs":[{"scroll-mbs":w()}],"scroll-mbe":[{"scroll-mbe":w()}],"scroll-mt":[{"scroll-mt":w()}],"scroll-mr":[{"scroll-mr":w()}],"scroll-mb":[{"scroll-mb":w()}],"scroll-ml":[{"scroll-ml":w()}],"scroll-p":[{"scroll-p":w()}],"scroll-px":[{"scroll-px":w()}],"scroll-py":[{"scroll-py":w()}],"scroll-ps":[{"scroll-ps":w()}],"scroll-pe":[{"scroll-pe":w()}],"scroll-pbs":[{"scroll-pbs":w()}],"scroll-pbe":[{"scroll-pbe":w()}],"scroll-pt":[{"scroll-pt":w()}],"scroll-pr":[{"scroll-pr":w()}],"scroll-pb":[{"scroll-pb":w()}],"scroll-pl":[{"scroll-pl":w()}],"snap-align":[{snap:[`start`,`end`,`center`,`align-none`]}],"snap-stop":[{snap:[`normal`,`always`]}],"snap-type":[{snap:[`none`,`x`,`y`,`both`]}],"snap-strictness":[{snap:[`mandatory`,`proximity`]}],touch:[{touch:[`auto`,`none`,`manipulation`]}],"touch-x":[{"touch-pan":[`x`,`left`,`right`]}],"touch-y":[{"touch-pan":[`y`,`up`,`down`]}],"touch-pz":[`touch-pinch-zoom`],select:[{select:[`none`,`text`,`all`,`auto`]}],"will-change":[{"will-change":[`auto`,`scroll`,`contents`,`transform`,$,Q]}],fill:[{fill:[`none`,...M()]}],"stroke-w":[{stroke:[cv,Dv,bv,xv]}],stroke:[{stroke:[`none`,...M()]}],"forced-color-adjust":[{"forced-color-adjust":[`auto`,`none`]}]},conflictingClassGroups:{"container-named":[`container-type`],overflow:[`overflow-x`,`overflow-y`],overscroll:[`overscroll-x`,`overscroll-y`],inset:[`inset-x`,`inset-y`,`inset-bs`,`inset-be`,`start`,`end`,`top`,`right`,`bottom`,`left`],"inset-x":[`right`,`left`],"inset-y":[`top`,`bottom`],flex:[`basis`,`grow`,`shrink`],gap:[`gap-x`,`gap-y`],p:[`px`,`py`,`ps`,`pe`,`pbs`,`pbe`,`pt`,`pr`,`pb`,`pl`],px:[`pr`,`pl`],py:[`pt`,`pb`],m:[`mx`,`my`,`ms`,`me`,`mbs`,`mbe`,`mt`,`mr`,`mb`,`ml`],mx:[`mr`,`ml`],my:[`mt`,`mb`],size:[`w`,`h`],"font-size":[`leading`],"fvn-normal":[`fvn-ordinal`,`fvn-slashed-zero`,`fvn-figure`,`fvn-spacing`,`fvn-fraction`],"fvn-ordinal":[`fvn-normal`],"fvn-slashed-zero":[`fvn-normal`],"fvn-figure":[`fvn-normal`],"fvn-spacing":[`fvn-normal`],"fvn-fraction":[`fvn-normal`],"line-clamp":[`display`,`overflow`],rounded:[`rounded-s`,`rounded-e`,`rounded-t`,`rounded-r`,`rounded-b`,`rounded-l`,`rounded-ss`,`rounded-se`,`rounded-ee`,`rounded-es`,`rounded-tl`,`rounded-tr`,`rounded-br`,`rounded-bl`],"rounded-s":[`rounded-ss`,`rounded-es`],"rounded-e":[`rounded-se`,`rounded-ee`],"rounded-t":[`rounded-tl`,`rounded-tr`],"rounded-r":[`rounded-tr`,`rounded-br`],"rounded-b":[`rounded-br`,`rounded-bl`],"rounded-l":[`rounded-tl`,`rounded-bl`],"border-spacing":[`border-spacing-x`,`border-spacing-y`],"border-w":[`border-w-x`,`border-w-y`,`border-w-s`,`border-w-e`,`border-w-bs`,`border-w-be`,`border-w-t`,`border-w-r`,`border-w-b`,`border-w-l`],"border-w-x":[`border-w-r`,`border-w-l`],"border-w-y":[`border-w-t`,`border-w-b`],"border-color":[`border-color-x`,`border-color-y`,`border-color-s`,`border-color-e`,`border-color-bs`,`border-color-be`,`border-color-t`,`border-color-r`,`border-color-b`,`border-color-l`],"border-color-x":[`border-color-r`,`border-color-l`],"border-color-y":[`border-color-t`,`border-color-b`],translate:[`translate-x`,`translate-y`,`translate-none`],"translate-none":[`translate`,`translate-x`,`translate-y`,`translate-z`],"scroll-m":[`scroll-mx`,`scroll-my`,`scroll-ms`,`scroll-me`,`scroll-mbs`,`scroll-mbe`,`scroll-mt`,`scroll-mr`,`scroll-mb`,`scroll-ml`],"scroll-mx":[`scroll-mr`,`scroll-ml`],"scroll-my":[`scroll-mt`,`scroll-mb`],"scroll-p":[`scroll-px`,`scroll-py`,`scroll-ps`,`scroll-pe`,`scroll-pbs`,`scroll-pbe`,`scroll-pt`,`scroll-pr`,`scroll-pb`,`scroll-pl`],"scroll-px":[`scroll-pr`,`scroll-pl`],"scroll-py":[`scroll-pt`,`scroll-pb`],touch:[`touch-x`,`touch-y`,`touch-pz`],"touch-x":[`touch`],"touch-y":[`touch`],"touch-pz":[`touch`]},conflictingClassGroupModifiers:{"font-size":[`leading`]},postfixLookupClassGroups:[`container-type`],orderSensitiveModifiers:[`*`,`**`,`after`,`backdrop`,`before`,`details-content`,`file`,`first-letter`,`first-line`,`marker`,`placeholder`,`selection`]}});function Gv(...e){return Wv(h_(e))}var Kv=v_(`inline-flex h-9 shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md border px-3 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 disabled:pointer-events-none disabled:opacity-50 dark:focus-visible:ring-zinc-500`,{variants:{variant:{primary:`border-slate-900 bg-slate-950 text-white hover:bg-slate-800 dark:border-zinc-100 dark:bg-zinc-50 dark:text-zinc-950 dark:hover:bg-zinc-200`,secondary:`border-slate-200 bg-white text-slate-900 hover:bg-slate-50 dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-100 dark:hover:bg-zinc-900`,ghost:`border-transparent bg-transparent text-slate-700 hover:bg-slate-100 dark:text-zinc-300 dark:hover:bg-zinc-900`},size:{sm:`h-8 px-2 text-xs`,md:`h-9 px-3 text-sm`,icon:`h-9 w-9 px-0`}},defaultVariants:{variant:`secondary`,size:`md`}});function qv({className:e,variant:t,size:n,...r}){return(0,z.jsx)(`button`,{className:Gv(Kv({variant:t,size:n}),e),type:`button`,...r})}function Jv({className:e,...t}){return(0,z.jsx)(`section`,{className:Gv(`rounded-lg border border-slate-200/80 bg-white/95 text-slate-950 shadow-[0_1px_2px_rgba(15,23,42,0.04)] dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-50`,e),...t})}function Yv({className:e,...t}){return(0,z.jsx)(`div`,{className:Gv(`p-4 pt-0`,e),...t})}var Xv=[`codex`,`claude`,`kiro`,`trae`,`coco`,`openai`,`anthropic`];function Zv(e){let t=e.trim().toLowerCase().replace(/_/gu,`-`);for(let e of Xv)if(t===e||t.startsWith(`${e}-`))return e;return t}function Qv(e,t){let n=t?.trim().toLowerCase()??``;return n.length>0&&n!==`status_projection`?Zv(n):Zv(e)}function $v(e){return{blockingTodoCount:e.blockingTodoCount,goalNotifications:e.goalNotifications,goals:e.goals,openUserTodoCount:e.openUserTodoCount,systemHealth:e.systemHealth,userTodos:e.userTodos,workers:e.workers}}function ey(e,t){return e.goals.find(e=>e.goalId===t)?.title??t}function ty(e){return e.activationState===`stopped`||e.state===`已停止`?`stopped`:e.state===`已完成`?`history`:e.needsYou||e.state===`等你`?`needs_you`:e.state===`推进中`||e.state===`需修复`?`running`:e.state===`安静运行`?`observing`:`scheduled`}function ny(e){let t=e;return t>=1e6?`${(t/1e6).toFixed(1)}M`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}function ry(e){return`$${e.toFixed(2)}`}function iy(e){let t=e;return t>=36e5?`${(t/36e5).toFixed(1)}h`:t>=6e4?`${(t/6e4).toFixed(1)}m`:t>=1e3?`${Math.round(t/1e3)}s`:`${t}ms`}function ay(e,t,n){return e==null?t:n(e)}function oy(e){return!!(e&&[e.tokens24h,e.tokens7d,e.costUsd24h,e.costUsd7d,e.durationMs24h,e.durationMs7d].some(e=>e!=null))}function sy(e,t){if(!oy(e))return null;let n=(e,n,r,i)=>{let a=[n==null?null:`${ny(n)} ${t.tokens}`,r==null?null:`${t.cost}: ${ry(r)}`,i==null?null:`${t.duration}: ${iy(i)}`].filter(e=>e!==null);return a.length?`${e} ${a.join(` · `)}`:null};return n(t.period7d,e.tokens7d,e.costUsd7d,e.durationMs7d)??n(t.period24h,e.tokens24h,e.costUsd24h,e.durationMs24h)}function cy({ariaLabel:e,className:t,icon:n,onChange:r,options:i,prefixLabel:a,value:o}){let s=(0,R.useId)(),c=(0,R.useRef)(null),l=(0,R.useRef)(null),u=(0,R.useRef)(new Map),[d,f]=(0,R.useState)(!1),[p,m]=(0,R.useState)(o),h=i.find(e=>e.value===o)??i[0],g=i.filter(e=>!e.disabled);(0,R.useEffect)(()=>{if(!d)return;let e=e=>{c.current?.contains(e.target)||f(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[d]),(0,R.useEffect)(()=>{d&&u.current.get(p)?.focus()},[p,d]);function _(e){m(e)}function v(e=`selected`){let t=e===`last`?g.at(-1):g[0],n=e===`selected`&&h&&!h.disabled?h:t;n&&(f(!0),_(n.value))}function y({restoreFocus:e=!1}={}){f(!1),e&&l.current?.focus()}function b(e){e.disabled||(r(e.value),y({restoreFocus:!0}))}function x(e){if(!g.length)return;let t=g.findIndex(e=>e.value===p),n=t<0?0:(t+e+g.length)%g.length;_(g[n].value)}function S(e){e.key===`ArrowDown`||e.key===`Enter`||e.key===` `?(e.preventDefault(),v(`selected`)):e.key===`ArrowUp`&&(e.preventDefault(),v(`last`))}function C(e,t){if(e.key===`ArrowDown`)e.preventDefault(),x(1);else if(e.key===`ArrowUp`)e.preventDefault(),x(-1);else if(e.key===`Home`)e.preventDefault(),g[0]&&_(g[0].value);else if(e.key===`End`){e.preventDefault();let t=g.at(-1);t&&_(t.value)}else e.key===`Enter`||e.key===` `?(e.preventDefault(),b(t)):e.key===`Escape`?(e.preventDefault(),y({restoreFocus:!0})):e.key===`Tab`&&y()}let w;return(0,z.jsxs)(`div`,{className:`personal-select${t?` ${t}`:``}`,ref:c,children:[(0,z.jsxs)(`button`,{"aria-controls":s,"aria-expanded":d,"aria-haspopup":`listbox`,"aria-label":e,className:`personal-select-trigger`,"data-value":o,onClick:()=>d?y():v(),onKeyDown:S,ref:l,role:`combobox`,type:`button`,children:[n?(0,z.jsx)(`span`,{className:`personal-select-icon`,children:n}):null,(0,z.jsxs)(`span`,{className:`personal-select-value`,children:[a?(0,z.jsx)(`small`,{children:a}):null,(0,z.jsx)(`span`,{children:h?.label??o})]}),(0,z.jsx)(qp,{"aria-hidden":!0,className:d?`is-open`:void 0,size:14})]}),d?(0,z.jsx)(`div`,{"aria-label":e,className:`personal-select-listbox`,id:s,role:`listbox`,children:i.map(e=>{let t=e.group&&e.group!==w;return w=e.group,(0,z.jsxs)(`div`,{className:`personal-select-option-wrap`,children:[t?(0,z.jsx)(`div`,{className:`personal-select-group-label`,children:e.group}):null,(0,z.jsxs)(`button`,{"aria-disabled":e.disabled||void 0,"aria-selected":e.value===o,className:`personal-select-option`,disabled:e.disabled,id:`${s}-${e.value.replace(/[^a-z0-9_-]/gi,`-`)}`,onClick:()=>b(e),onFocus:()=>m(e.value),onKeyDown:t=>C(t,e),ref:t=>{t?u.current.set(e.value,t):u.current.delete(e.value)},role:`option`,tabIndex:e.value===p?0:-1,type:`button`,children:[(0,z.jsx)(`span`,{children:e.label}),e.value===o?(0,z.jsx)(Kp,{"aria-hidden":!0,size:15}):null]})]},e.value)})}):null]})}function ly({agents:e,managerChatOpen:t,mobileNavigationOpen:n,onOpenGoalCapabilities:r,onOpenGoalDetail:i,onOpenManagerChat:a,onRefresh:o,onOpenNavigation:s,onSelectGoalTab:c,onSelectAgent:l,onReturnManagerHome:u,refreshState:d,readOnlySourceLabel:f,selectedAgentId:p,selectedGoal:m,selectedGoalTab:h}){let{locale:g,t:_}=Ji(),[v,y]=(0,R.useState)(!1),b=(0,R.useRef)(null),x=(0,R.useRef)(null);(0,R.useEffect)(()=>{if(!v)return;function e(e){x.current?.contains(e.target)||y(!1)}function t(e){e.key===`Escape`&&(y(!1),b.current?.focus())}return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t)}},[v]),(0,R.useEffect)(()=>y(!1),[m?.goalId]);function S(e){y(!1),e?.()}let C=m?sy(m.usage,{cost:_(`drawer.costShort`),duration:_(`drawer.durationShort`),period24h:_(`drawer.period24h`),period7d:_(`drawer.period7d`),tokens:_(`drawer.tokensShort`)}):null;return(0,z.jsxs)(`header`,{className:`personal-channel-header`,children:[(0,z.jsx)(`button`,{"aria-expanded":n??!1,"aria-label":_(`header.openGoalNavigation`),className:`personal-icon-button personal-mobile-menu`,onClick:s,type:`button`,children:(0,z.jsx)(_m,{size:18})}),(0,z.jsxs)(`div`,{className:`personal-channel-title`,children:[(0,z.jsx)(`h1`,{children:m?.title??_(`header.manager`)}),(0,z.jsx)(`p`,{children:m?m.loadState?_(m.loadState===`error`?`startup.goalError`:`startup.goalLoading`):`${m.agentLaneCount&&m.agentLaneCount>1?_(`header.workAgentCount`,{count:m.agentLaneCount}):m.agentLabel??m.agentId} · ${m.loadState?_(m.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(m.state,g)}${C?` · ${C}`:``} · ${m.nextSentence}`:_(`header.managerDescription`)})]}),m?(0,z.jsxs)(`nav`,{"aria-label":_(`header.goalView`),className:`personal-goal-tabs`,children:[(0,z.jsx)(`button`,{"aria-current":h===`chat`?`page`:void 0,onClick:()=>c(`chat`),type:`button`,children:_(`header.chat`)}),(0,z.jsx)(`button`,{"aria-current":h===`tasks`?`page`:void 0,onClick:()=>c(`tasks`),type:`button`,children:_(`header.tasks`)}),(0,z.jsx)(`button`,{"aria-current":h===`files`?`page`:void 0,onClick:()=>c(`files`),type:`button`,children:_(`header.files`)})]}):(0,z.jsxs)(`nav`,{"aria-label":_(`header.managerView`),className:`personal-goal-tabs`,children:[(0,z.jsx)(`button`,{"aria-current":t?void 0:`page`,onClick:u,type:`button`,children:_(`header.managerOverview`)}),(0,z.jsx)(`button`,{"aria-current":t?`page`:void 0,onClick:a,type:`button`,children:_(`header.chat`)})]}),(0,z.jsxs)(`div`,{className:`personal-channel-actions`,children:[m&&i&&r?(0,z.jsxs)(`div`,{className:`personal-goal-tools`,ref:x,children:[(0,z.jsxs)(`button`,{"aria-expanded":v,"aria-haspopup":`menu`,"aria-label":_(`header.goalSettingsDescription`),className:`personal-goal-tools-trigger`,onClick:()=>y(e=>!e),ref:b,title:_(`header.goalSettingsDescription`),type:`button`,children:[(0,z.jsx)(Lm,{"aria-hidden":!0,size:16}),(0,z.jsx)(`span`,{children:_(`header.goalSettings`)}),(0,z.jsx)(qp,{"aria-hidden":!0,size:13})]}),v?(0,z.jsxs)(`fieldset`,{"aria-label":_(`header.goalSettings`),className:`personal-goal-tools-menu`,children:[(0,z.jsxs)(`button`,{onClick:()=>S(i),type:`button`,children:[(0,z.jsx)(dm,{"aria-hidden":!0,size:17}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:_(`header.goalDetails`)}),(0,z.jsx)(`small`,{children:_(`header.goalDetailsDescription`)})]})]}),(0,z.jsxs)(`button`,{onClick:()=>S(r),type:`button`,children:[(0,z.jsx)(Lm,{"aria-hidden":!0,size:17}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:_(`header.goalCapabilities`)}),(0,z.jsx)(`small`,{children:_(`header.goalCapabilitiesDescription`)})]})]})]}):null]}):null,f?(0,z.jsxs)(`span`,{className:`personal-read-only-source`,title:_(`header.readOnlySourceDescription`,{source:f}),children:[(0,z.jsx)(am,{size:15}),f,(0,z.jsx)(`small`,{children:_(`common.readOnly`)})]}):(0,z.jsx)(cy,{ariaLabel:_(`header.selectChatRuntime`),className:`personal-agent-select`,icon:(0,z.jsx)(Up,{size:16}),onChange:l,options:e.map(e=>({disabled:!e.available,label:`${e.label}${e.available?``:` · ${_(`header.agentUnavailable`)}`}`,value:e.agentId})),prefixLabel:_(`header.chatRuntime`),value:p}),(0,z.jsxs)(`span`,{className:`personal-live-indicator`,children:[(0,z.jsx)(`i`,{}),_(`header.live`)]}),o?(0,z.jsxs)(`span`,{className:`personal-refresh-control is-${d??`idle`}`,children:[d===`loading`?(0,z.jsx)(`small`,{children:_(`header.refreshing`)}):d===`done`?(0,z.jsx)(`small`,{children:_(`header.refreshDone`)}):d===`error`?(0,z.jsx)(`small`,{children:_(`header.refreshFailed`)}):null,(0,z.jsx)(`button`,{"aria-label":_(d===`loading`?`header.refreshing`:`header.refresh`),className:`personal-icon-button`,disabled:d===`loading`,onClick:o,type:`button`,children:(0,z.jsx)(Om,{className:d===`loading`?`is-spinning`:void 0,size:17})})]}):null]})]})}function uy({attention:e,onSelect:t}){let{t:n}=Ji(),r=Zi(e.updatedAt,n);return(0,z.jsxs)(`button`,{className:`personal-timeline-row personal-attention-row`,"data-testid":`personal-browse-row`,onClick:t,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-row-icon is-attention`,children:(0,z.jsx)(Xp,{size:18})}),(0,z.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,z.jsxs)(`small`,{children:[e.goalTitle??e.goalId,` · `,n(`home.lane.needsYou`),r?` · ${n(`tasks.waitingAge`,{age:r})}`:``]}),(0,z.jsx)(`strong`,{children:e.text})]}),(0,z.jsx)(`span`,{className:`personal-priority-dot is-${e.priority??(e.blocking?`high`:`medium`)}`}),(0,z.jsx)(`span`,{className:`personal-row-status ${e.blocking?`is-blocking`:`is-pending`}`,children:e.blocking?n(`tasks.blocked`):n(`tasks.pending`)}),(0,z.jsx)(Jp,{size:17})]})}var dy=/(`[^`\n]+`)|(\*\*[^*\n]+(\*[^*\n]*)?\*\*)|(\[[^\]\n]{1,120}\]\(https?:\/\/[^)\s]+\))/g;function fy(e,t){let n=[],r=0,i=0;for(let a of e.matchAll(dy)){let o=a.index??0;o>r&&n.push(e.slice(r,o));let s=a[0],c=`${t}-i${i++}`;if(s.startsWith("`"))n.push((0,z.jsx)(`code`,{className:`personal-md-code`,children:s.slice(1,-1)},c));else if(s.startsWith(`**`))n.push((0,z.jsx)(`strong`,{children:s.slice(2,-2)},c));else{let e=s.indexOf(`](`),t=s.slice(1,e),r=s.slice(e+2,-1);n.push((0,z.jsx)(`a`,{className:`personal-md-link`,href:r,rel:`noreferrer`,target:`_blank`,children:t},c))}r=o+s.length}return r{r.length>0&&(n.push({type:`paragraph`,lines:r}),r=[])},a=0;for(;a{let n=`b${t}`;if(e.type===`code`)return(0,z.jsx)(`pre`,{className:`personal-md-pre`,children:(0,z.jsx)(`code`,{children:e.text})},n);if(e.type===`heading`)return(0,z.jsx)(`p`,{className:`personal-md-heading is-h${e.level}`,children:fy(e.text,n)},n);if(e.type===`list`){let t=e.items.map((e,t)=>(0,z.jsx)(`li`,{children:fy(e,`${n}-${t}`)},`${n}-${t}`));return e.ordered?(0,z.jsx)(`ol`,{className:`personal-md-list`,children:t},n):(0,z.jsx)(`ul`,{className:`personal-md-list`,children:t},n)}return(0,z.jsx)(`p`,{children:e.lines.map((e,t)=>(0,z.jsxs)(R.Fragment,{children:[t>0?(0,z.jsx)(`br`,{}):null,fy(e,`${n}-${t}`)]},`${n}-${t}`))},n)})})}function _y({onSelect:e,output:t}){let{t:n}=Ji(),r=t.kind===`report`?cm:sm;return(0,z.jsxs)(`button`,{className:`personal-timeline-row personal-output-row`,"data-output-kind":t.kind,"data-testid":`personal-browse-row`,onClick:e,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-row-icon is-output`,children:(0,z.jsx)(r,{size:18})}),(0,z.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,z.jsxs)(`small`,{children:[t.goalTitle??t.goalId,` · `,t.agentLabel??`LoopX`]}),(0,z.jsx)(`strong`,{children:t.title}),t.summary?(0,z.jsx)(`span`,{children:t.summary}):null,t.report?(0,z.jsxs)(`small`,{children:[n(`files.reportDelta`,{added:t.report.addedCount,changed:t.report.changedCount}),` · `,n(`files.verifiedReport`)]}):null]}),t.createdAt?(0,z.jsx)(`time`,{children:t.createdAt}):null,(0,z.jsx)(Jp,{size:17})]})}var vy={completed:`runs.completed`,failed:`runs.failed`,interrupted:`runs.interrupted`,queued:`runs.queued`,running:`runs.running`,waiting:`runs.waiting`};function yy({onSelect:e,run:t}){let{t:n}=Ji(),r=t.totalSteps>0?Math.min(100,t.completedSteps/t.totalSteps*100):0;return(0,z.jsxs)(`button`,{"aria-label":`${n(`tasks.viewExecution`)}:${t.title}`,className:`personal-timeline-row personal-run-row`,"data-testid":`personal-browse-row`,onClick:e,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-row-icon is-run`,children:(0,z.jsx)(Up,{size:18})}),(0,z.jsxs)(`span`,{className:`personal-run-identity`,children:[(0,z.jsx)(`small`,{children:t.goalTitle}),(0,z.jsx)(`strong`,{children:t.agentLabel})]}),(0,z.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,z.jsx)(`strong`,{children:t.title}),(0,z.jsx)(`small`,{children:t.latestActivity})]}),(0,z.jsxs)(`span`,{className:`personal-run-progress`,"aria-label":`${t.completedSteps}/${t.totalSteps}`,children:[(0,z.jsxs)(`small`,{children:[t.completedSteps,`/`,t.totalSteps]}),(0,z.jsx)(`i`,{children:(0,z.jsx)(`b`,{style:{width:`${r}%`}})})]}),(0,z.jsxs)(`span`,{className:`personal-row-status is-${t.status}`,children:[t.status===`running`?(0,z.jsx)(hm,{className:`personal-spin`,size:14}):null,n(vy[t.status])]}),t.sessionId?(0,z.jsx)(`span`,{className:`personal-run-open-label`,children:n(`tasks.viewExecution`)}):null,(0,z.jsx)(Jp,{size:17})]})}function by({onSelect:e,schedule:t}){let{t:n}=Ji(),r=t.scheduleKind===`heartbeat`;return(0,z.jsxs)(`button`,{"aria-label":`${r?`Heartbeat`:n(`tasks.scheduled`)}:${t.label};${t.status??`active`}`,className:`personal-schedule-row`,onClick:e,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-schedule-icon`,children:r?(0,z.jsx)(Dm,{size:17}):(0,z.jsx)(Gp,{size:17})}),(0,z.jsxs)(`span`,{className:`personal-schedule-copy`,children:[(0,z.jsx)(`small`,{children:n(r?`schedule.heartbeat`:`schedule.monitor`)}),(0,z.jsx)(`strong`,{children:t.label}),(0,z.jsx)(`p`,{children:t.schedule??n(`schedule.summary`)})]}),(0,z.jsx)(`span`,{className:`personal-schedule-status is-${t.status??`active`}`,children:t.status===`paused`?n(`schedule.paused`):n(`schedule.active`)}),(0,z.jsx)(Jp,{size:16})]})}function xy({items:e,onSelect:t,selectedGoal:n}){let{t:r}=Ji();if(e.length===0)return(0,z.jsxs)(`div`,{className:`personal-timeline-empty`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(Rm,{size:20})}),(0,z.jsx)(`strong`,{children:r(n?`timeline.emptyGoal`:`timeline.emptyWorkspace`)}),(0,z.jsx)(`p`,{children:r(n?`timeline.emptyGoalDescription`:`timeline.emptyWorkspaceDescription`)})]});let i=[...e].reverse().find(e=>e.kind===`message`&&e.message.role!==`user`||e.kind===`proposal`&&[`applied`,`stale`,`error`,`gated`].includes(e.proposal.status)||e.kind===`run`&&e.run.status===`completed`),a=i?.kind===`message`?`${i.message.agentLabel??r(`header.manager`)}:${i.message.pending?r(`timeline.pending`):i.message.text}`:i?.kind===`proposal`?`${i.proposal.title}:${i.proposal.status}`:i?.kind===`run`?r(`timeline.runCompleted`,{run:i.run.title}):``,o=e.filter(e=>e.kind===`proposal`&&e.proposal.status===`gated`),s=e.filter(e=>e.kind!==`proposal`),c=e.filter(e=>e.kind===`proposal`&&e.proposal.status!==`gated`);function l(e){return e.kind===`attention`?(0,z.jsx)(uy,{attention:e.attention,onSelect:()=>t({item:e.attention,kind:`attention`})},e.id):e.kind===`run`?(0,z.jsx)(yy,{onSelect:()=>t({item:e.run,kind:`run`}),run:e.run},e.id):e.kind===`output`?(0,z.jsx)(_y,{onSelect:()=>t({item:e.output,kind:`output`}),output:e.output},e.id):e.kind===`schedule`?(0,z.jsx)(by,{onSelect:()=>t({item:e.schedule,kind:`schedule`}),schedule:e.schedule},e.id):e.kind===`proposal`?(0,z.jsxs)(`button`,{className:`personal-proposal-row is-${e.proposal.status}`,onClick:()=>t({item:e.proposal,kind:`proposal`}),type:`button`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(Rm,{size:17})}),(0,z.jsxs)(`span`,{children:[(0,z.jsxs)(`small`,{children:[e.proposal.actionKind,` · `,e.proposal.status]}),(0,z.jsx)(`strong`,{children:e.proposal.title}),(0,z.jsx)(`p`,{children:e.proposal.impact})]}),(0,z.jsx)(`b`,{children:e.proposal.status===`gated`?r(`timeline.review`):e.proposal.primaryLabel??r(`timeline.reviewAndConfirm`)})]},e.id):(0,z.jsxs)(`article`,{className:`personal-message is-${e.message.role}`,children:[e.message.role===`user`?null:(0,z.jsx)(`span`,{className:`personal-message-avatar`,children:(0,z.jsx)(Up,{size:17})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:e.message.role===`user`?r(`common.you`):e.message.agentLabel??r(`header.manager`)}),e.message.time?(0,z.jsx)(`time`,{children:e.message.time}):null]}),e.message.attachments?.length?(0,z.jsx)(`div`,{className:`personal-message-images`,children:e.message.attachments.map(e=>(0,z.jsx)(`img`,{alt:e.name,src:e.dataUrl},e.id))}):null,e.message.role===`user`?(0,z.jsx)(`p`,{children:e.message.text}):(0,z.jsx)(gy,{text:e.message.text}),e.message.pending?(0,z.jsx)(`span`,{className:`personal-message-pending`,children:r(`timeline.pending`)}):null]})]},e.id)}return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{"aria-atomic":`true`,"aria-live":`polite`,className:`personal-live-region`,role:`status`,children:a}),(0,z.jsxs)(`div`,{className:`personal-channel-timeline`,children:[s.map(l),o.length?(0,z.jsxs)(`details`,{className:`personal-gated-summary`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(Rm,{size:16})}),(0,z.jsx)(`strong`,{children:r(`timeline.waitingConfirmation`)}),(0,z.jsx)(`small`,{children:r(`timeline.gateHistory`,{count:o.length})})]}),(0,z.jsx)(`div`,{children:o.map(l)})]}):null,c.map(l)]})]})}function Sy(e){return e.replace(/\s+/gu,` `).trim()}function Cy(e,t){let n=RegExp(`(?:不要|不需要|无需|禁止|别|暂不|do not\\b|don't\\b|without\\b).{0,10}(?:${t.source})`,`iu`),r=RegExp(`(?:${t.source}).{0,10}(?:不要|不需要|无需|禁止|关闭)`,`iu`),i=RegExp(`disable\\b.{0,10}(?:${t.source})|(?:turn|switch|set)\\b.{0,10}(?:${t.source}).{0,10}\\boff\\b|(?:${t.source})\\s+(?:is\\s+)?disabled\\b`,`iu`);return n.test(e)||r.test(e)||i.test(e)}function wy(e){return/(我现在该做什么|下一步|哪些\s*Goal\s*在等我|需要我|谁在等我|Agent\s*在做什么|当前进度|总结(?:今天)?进展)/iu.test(e)}function Ty(e){let t=/(怎么|如何|为什么|给.*建议|分析一下|解释|只读)/u.test(e),n=/(解决一下|修复一下|处理一下|执行一下|改一下|跑(?:一下)?测试|rebase|push|提交|推送)/iu.test(e);return!t&&n&&/(帮我|请|给我|直接|现在|开始|bytedcli|codebase|git|rebase|push|提交|推送)/iu.test(e)}function Ey(e){return Sy(e).toLowerCase().match(/(?:^|[\s,,;;:((:]|到|至)(?todo_done:todo_[a-z0-9_-]{3,64}|pr_merged:(?:(?:[a-z0-9_.-]{1,80})\/(?:[a-z0-9_.-]{1,100}))?#[1-9][0-9]{0,8}|capacity_available:[a-z][a-z0-9_:-]{0,63})(?=$|[\s,,。;;))])/iu)?.groups?.condition??null}function Dy(e,t){let n=Sy(e),r=[],i=t.agents.find(e=>{let t=n.toLowerCase();return t.includes(e.agentId.toLowerCase())||t.includes(e.label.toLowerCase())}),a=t.todos.find(e=>n.includes(e.todoId)||n.includes(e.text)),o=/(刚刚|已经|已)(?:经)?\s*(新增|创建|添加)(?:的)?\s*(todo|待办|任务)/iu.test(n),s=!!t.goalId&&!Cy(n,/heartbeat|心跳/iu)&&/(heartbeat|心跳|每天推进|持续推进|daily progress)/iu.test(n);if(!t.goalId&&!Cy(n,/goal|目标/iu)&&/(创建|新建|设置|create|start|set up).{0,24}(goal|目标)/iu.test(n)&&r.push({actionKind:`goal.create`,confidence:.97,normalizedParameters:{heartbeat_enabled:!Cy(n,/heartbeat|心跳/iu)&&/(heartbeat|心跳|每天推进|持续推进|daily progress)/iu.test(n)}}),t.goalId&&s&&r.push({actionKind:`heartbeat.bind`,confidence:.96,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&!s&&!Cy(n,/定时|监控|监测|持续观察|scheduled check|monitor/iu)&&/(定时|监控|监测|每.{0,8}(分钟|小时|天)|持续观察|scheduled check|monitor|every.{0,12}(minute|hour|day)|daily)/iu.test(n)&&r.push({actionKind:`monitor.create`,confidence:.94,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&i&&!Cy(n,/绑定|负责|接管|管理/iu)&&/((让|交给).{0,20}(管理|负责|接管).{0,8}(goal|目标)|(绑定).{0,12}(goal|目标)|(goal|目标).{0,12}(交给|绑定|负责|接管))/iu.test(n)&&r.push({actionKind:`agent.bind`,confidence:.96,normalizedParameters:{agent_id:i.agentId,goal_id:t.goalId}}),t.goalId&&!o&&!Cy(n,RegExp(`todo|待办|任务`,`iu`))&&/(创建|新建|新增|添加|加一个|记一个).{0,16}(todo|待办|任务)|(todo|待办|任务).{0,12}(创建|新建|新增|添加)|(?:create|add)(?:\s+(?:a|an|new))?\s+(?:todo|task)|(?:todo|task).{0,12}(?:create|add)/iu.test(n)&&r.push({actionKind:`todo.create`,confidence:.94,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&Ty(n)&&r.push({actionKind:`todo.create`,confidence:.9,normalizedParameters:{goal_id:t.goalId,start_execution:!0}}),t.goalId&&a){let e=!Cy(n,/完成|做完|关闭/u)&&/完成|做完|关闭/u.test(n)?`complete`:!Cy(n,/阻塞|卡住/u)&&/阻塞|卡住/u.test(n)?`block`:!Cy(n,/暂缓|稍后|推迟/u)&&/暂缓|稍后|推迟/u.test(n)?`defer`:i&&!Cy(n,/交给|分配给|改派/u)&&/交给|分配给|改派/u.test(n)?`reassign`:null;if(e){let i=e===`defer`?Ey(n):null;if(e===`defer`&&!i)return{actionKind:`todo.update`,confidence:.97,missingFields:[`resume_when`],normalizedParameters:{goal_id:t.goalId,operation:e,todo_id:a.todoId},route:`clarify`};r.push({actionKind:`todo.update`,confidence:.97,normalizedParameters:{goal_id:t.goalId,operation:e,...i?{resume_when:i}:{},todo_id:a.todoId}})}}let c=[...new Map(r.map(e=>[e.actionKind,e])).values()];return c.length>1?{actionKind:null,confidence:.4,missingFields:[`single_intent`],normalizedParameters:{},route:`clarify`}:c.length===1?{...c[0],missingFields:[],route:`typed_action`}:!t.goalId&&wy(n)?{actionKind:null,confidence:.98,missingFields:[],normalizedParameters:{},route:`projection`}:{actionKind:null,confidence:.75,missingFields:[],normalizedParameters:{},route:`agent_chat`}}var Oy=[`a[href]`,`button:not([disabled])`,`textarea:not([disabled])`,`select:not([disabled])`,`input:not([disabled])`,`[tabindex]:not([tabindex='-1'])`].join(`,`),ky=[{key:`drawer.taskBlock`,operation:`block`},{key:`drawer.taskSuccessor`,operation:`successor_create`}],Ay=[{key:`drawer.decisionReject`,resolution:`reject`},{key:`drawer.decisionDefer`,resolution:`defer`}],jy=Array.from({length:32},(e,t)=>t+1),My=/^[a-z][a-z0-9_.-]{0,63}$/u;function Ny(e){let t=String(e??``).trim().toLowerCase();return My.test(t)?t:null}function Py(e,t){return e.enabled===t.enabled&&e.maxChildren===t.maxChildren&&[...e.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)===[...t.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)}function Fy({agents:e,callbacks:t,goalNotifications:n=[],goals:r=[],inspectorExpanded:i=!1,larkConnections:a=[],onClose:o,onToggleInspectorSize:s,readOnly:c=!1,runs:l=[],selection:u}){let{locale:d,t:f}=Ji(),[p,m]=(0,R.useState)(``),[h,g]=(0,R.useState)(!1),[_,v]=(0,R.useState)(`idle`),[y,b]=(0,R.useState)(`record`),[x,S]=(0,R.useState)([]),[C,w]=(0,R.useState)(null),[T,E]=(0,R.useState)(2),[D,O]=(0,R.useState)(`idle`),[k,ee]=(0,R.useState)(null),[A,j]=(0,R.useState)(null),te=(0,R.useRef)(null),ne=(0,R.useRef)(null),[re,M]=(0,R.useState)(e.find(e=>e.available)?.agentId??`codex`),[N,ie]=(0,R.useState)(``),ae=(0,R.useRef)(null),oe=(0,R.useRef)(null),P=(0,R.useRef)(null),F=(0,R.useRef)(null),I=u.kind===`run`?`run:${u.item.runId}`:u.kind===`proposal`?`proposal:${u.item.previewId}`:u.kind===`todo`?`todo:${u.item.todoId}`:u.kind===`attention`?`attention:${u.item.todoId}`:u.kind===`output`?`output:${u.item.outputId}`:u.kind===`schedule`?`schedule:${u.item.scheduleId}`:`goal:${u.item.goalId}`;(0,R.useEffect)(()=>{v(`idle`),g(!1),b(`record`),ie(``);let e=u.kind===`goal`?u.item.subagentExecution:void 0;S(e?.allowedDomains??[]),E(e?.maxChildren?Math.min(e.maxChildren,32):2),w(null),O(`idle`),ee(null),j(null),te.current=e??null,ne.current=null},[I]);let se=u.kind===`goal`?u.item.subagentExecution:void 0;(0,R.useEffect)(()=>{let e=te.current,t=se?!e||!Py(e,se):e!==null;if(te.current=se??null,!A){t&&se&&(S(se.allowedDomains),E(se.maxChildren||2),w(null),O(`idle`),ee(null));return}let n=ne.current;(!se||Py(A,se)||n&&!Py(n,se))&&(se&&(S(se.allowedDomains),E(se.maxChildren||2)),ne.current=null,j(null))},[se,A]),(0,R.useEffect)(()=>{let e=document.activeElement;e instanceof HTMLElement&&!oe.current?.contains(e)&&(P.current=e);let t=window.requestAnimationFrame(()=>F.current?.focus());return()=>window.cancelAnimationFrame(t)},[I]);let ce=(0,R.useCallback)(()=>{let e=P.current;o(),window.requestAnimationFrame(()=>e?.focus())},[o]);(0,R.useEffect)(()=>{function e(e){if(e.key===`Escape`){e.preventDefault(),ce();return}if(e.key===`Tab`&&u.kind!==`todo`){let t=Array.from(oe.current?.querySelectorAll(Oy)??[]).filter(e=>!e.hasAttribute(`disabled`)&&e.getAttribute(`aria-hidden`)!==`true`);if(t.length===0)return;let n=t[0],r=t[t.length-1];e.shiftKey&&document.activeElement===n?(e.preventDefault(),r.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n.focus())}}return document.addEventListener(`keydown`,e),()=>{document.removeEventListener(`keydown`,e)}},[ce,u.kind]);let le=u.kind===`attention`?f(`drawer.titleAttention`):u.kind===`todo`?f(`drawer.taskDetails`):u.kind===`run`?f(`drawer.runDetails`):u.kind===`output`?f(`drawer.titleOutput`):u.kind===`proposal`?f(u.item.status===`applied`?`drawer.titleProposalApplied`:`drawer.titleProposalConfirm`):u.kind===`schedule`?u.item.scheduleKind===`heartbeat`?`Heartbeat`:f(`drawer.titleSchedule`):f(`drawer.goalDetails`),ue=u.kind===`proposal`?u.item.goalId??`manager`:u.item.goalId,de=u.kind===`attention`?u.item.goalTitle??f(`drawer.currentGoal`):u.kind===`todo`||u.kind===`run`?u.item.goalTitle:u.kind===`output`?u.item.goalTitle??f(`drawer.currentGoal`):u.kind===`goal`?u.item.title:u.kind===`schedule`?f(`drawer.goalAutoRun`):u.item.goalId?f(`drawer.goalChanges`):f(`drawer.managerChanges`),fe=u.kind===`goal`?l.find(e=>e.goalId===u.item.goalId&&!!e.sessionId)??l.find(e=>e.goalId===u.item.goalId):null,pe=u.kind===`run`&&(u.item.completedSteps>0||!!u.item.latestActivity||!!u.item.outputs?.length),me=u.kind===`attention`?Zi(u.item.updatedAt,f):null,he=Ey(N);async function ge(){u.kind!==`run`||!p.trim()||(await t.onCorrectRun?.(u.item,p.trim()),m(``))}async function _e(e,n,r,i){if(n===`successor_create`){await t.onPreviewAction?.({actionKind:`todo.create`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-successor-${e.todoId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,text:f(`drawer.taskSuccessorText`,{task:e.text})},summary:f(`drawer.taskSuccessorSummary`,{task:e.text})});return}await t.onPreviewAction?.({actionKind:`todo.update`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-${e.todoId}-${n}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:e.claimedBy??re,goal_id:e.goalId,operation:n,...n===`block`?{note:f(`drawer.taskSuccessorNote`)}:{},...n===`defer`&&i?{resume_when:i}:{},todo_id:e.todoId},summary:`${r}:${e.text}`})}async function ve(e,n,r){await t.onPreviewAction?.({actionKind:`gate.resolve`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-decision-${e.todoId}-${n}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,decision:n,todo_id:e.todoId},summary:`${r}:${e.text}`})}let ye=u.kind===`goal`?A??u.item.subagentExecution??{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0}:{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0},be=D===`previewing`||D===`applying`,xe=(()=>{if(u.kind!==`goal`)return[];let e=new Map;for(let t of ye.allowedDomains){let n=Ny(t);n&&e.set(n,{matchingTodoCount:0,value:n})}if(ye.domainCandidates)for(let t of ye.domainCandidates){let n=Ny(t.domain);if(!n)continue;let r=e.get(n);e.set(n,{matchingTodoCount:(r?.matchingTodoCount??0)+t.matchingTodoCount,value:n})}else for(let t of u.item.agentTodos){if(t.done||t.taskClass!==`advancement_task`)continue;let n=Ny(t.taskDomain);if(!n)continue;let r=e.get(n);e.set(n,{matchingTodoCount:(r?.matchingTodoCount??0)+1,value:n})}return[...e.values()]})();function Se(){S(ye.allowedDomains),E(ye.maxChildren||2),w(null),O(`idle`),ee(null)}function Ce(){let e=[...new Set(x.map(e=>Ny(e)))];return e.every(e=>!!e)?e:null}function we(e,t){S(n=>t?[...n,e].filter((e,t,n)=>n.indexOf(e)===t):n.filter(t=>t!==e)),ee(null),O(`idle`),w(null)}async function Te(e){if(u.kind!==`goal`||!t.onPreviewGoalSubagentConfiguration)return;let n=e?Ce():[];if(e&&!n){O(`error`),w(f(`drawer.subagentDomainInvalid`)),ee(null);return}let r={allowedDomains:n??[],enabled:e,goalId:u.item.goalId,maxChildren:e?T:0};O(`previewing`),w(f(`drawer.subagentPreviewing`)),ee(null);try{let e=await t.onPreviewGoalSubagentConfiguration(r);if(!e.changed){ne.current=se??null,j({...e.configuration,domainCandidates:ye.domainCandidates}),S(e.configuration.allowedDomains),E(e.configuration.maxChildren||2),O(`success`),w(f(`drawer.subagentNoChange`));return}ee({...r,changed:e.changed,previewId:e.previewId}),O(`ready`),w(f(`drawer.subagentPreviewReady`))}catch(e){O(`error`),w(e instanceof Error?e.message:f(`drawer.subagentPreviewFailed`))}}async function Ee(){if(!(!k||!t.onApplyGoalSubagentConfiguration)){O(`applying`),w(f(`drawer.subagentApplying`));try{let e=await t.onApplyGoalSubagentConfiguration({allowedDomains:k.allowedDomains,enabled:k.enabled,goalId:k.goalId,maxChildren:k.maxChildren,previewId:k.previewId});ne.current=se??null,j({...e,domainCandidates:ye.domainCandidates}),S(e.allowedDomains),E(e.maxChildren||2),O(`success`),w(f(`drawer.subagentApplied`)),ee(null);try{await t.onRefresh?.()}catch{O(`warning`),w(f(`drawer.subagentAppliedRefreshFailed`))}}catch(e){O(`error`),w(e instanceof Error?e.message:f(`drawer.subagentApplyFailed`))}}}return(0,z.jsxs)(`div`,{"aria-labelledby":`personal-drawer-title`,"aria-modal":u.kind===`todo`?void 0:`true`,className:`personal-context-drawer`,"data-context-kind":u.kind,ref:oe,role:`dialog`,children:[(0,z.jsxs)(`header`,{className:`personal-drawer-header${u.kind===`todo`?` is-task-inspector`:``}`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h2`,{id:`personal-drawer-title`,ref:F,tabIndex:-1,children:le}),(0,z.jsx)(`p`,{children:de})]}),(0,z.jsxs)(`div`,{className:`personal-drawer-header-actions`,children:[u.kind===`todo`&&s?(0,z.jsx)(`button`,{"aria-label":f(i?`drawer.inspectorHalf`:`drawer.inspectorFull`),className:`personal-icon-button personal-inspector-size`,onClick:s,title:f(i?`drawer.inspectorHalfView`:`drawer.inspectorFullView`),type:`button`,children:i?(0,z.jsx)(bm,{size:17}):(0,z.jsx)(gm,{size:17})}):null,(0,z.jsxs)(`button`,{"aria-label":f(`drawer.closeDetail`,{context:de}),className:`personal-icon-button personal-drawer-close`,onClick:ce,ref:ae,type:`button`,children:[(0,z.jsx)(Lp,{className:`personal-mobile-back`,size:18}),(0,z.jsx)(Gm,{className:`personal-desktop-close`,size:18})]})]})]}),(0,z.jsxs)(`div`,{className:`personal-drawer-body`,children:[u.kind===`attention`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card is-attention`,children:[(0,z.jsx)(`small`,{children:u.item.blocking?f(`drawer.attentionBlocking`):f(`drawer.attentionWaiting`)}),(0,z.jsx)(`h3`,{children:u.item.text}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:u.item.goalTitle??u.item.goalId})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.priority`)}),(0,z.jsx)(`dd`,{children:u.item.priority??`medium`})]}),me?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`common.waiting`)}),(0,z.jsx)(`dd`,{children:f(`tasks.waitingAge`,{age:me})})]}):null,(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.reason`)}),(0,z.jsx)(`dd`,{children:u.item.explanation??f(`drawer.decisionDefaultReason`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.evidence`)}),(0,z.jsx)(`dd`,{children:u.item.evidence??f(`drawer.decisionDefaultEvidence`)})]})]})]}),c?null:(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void ve(u.item,`approve`,f(`common.confirm`)),type:`button`,children:[(0,z.jsx)(Kp,{size:17}),f(`drawer.decisionReview`)]}),(0,z.jsxs)(`details`,{className:`personal-compact-menu`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(rm,{size:17}),f(`drawer.decisionMore`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`button`,{onClick:()=>void t.onExplainDecision?.(u.item),type:`button`,children:[(0,z.jsx)(vm,{size:16}),f(`drawer.explainDecision`)]}),Ay.map(e=>(0,z.jsx)(`button`,{onClick:()=>void ve(u.item,e.resolution,f(e.key)),type:`button`,children:f(e.key)},e.resolution))]})]})]})]}):null,u.kind===`todo`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-task-inspector-summary`,children:[(0,z.jsxs)(`div`,{className:`personal-task-inspector-status`,children:[(0,z.jsxs)(`span`,{className:u.item.done?`is-done`:u.item.status===`blocked`?`is-blocked`:`is-open`,children:[(0,z.jsx)(`i`,{}),u.item.done?f(`drawer.taskStatusCompleted`):u.item.status===`deferred`?f(`drawer.taskStatusDeferred`):u.item.status===`blocked`?f(`drawer.taskStatusBlocked`):f(`drawer.taskStatusOpen`)]}),u.item.priority?(0,z.jsx)(`span`,{children:u.item.priority}):null,(0,z.jsx)(`span`,{children:u.item.taskClass===`advancement_task`?f(`drawer.taskAdvancement`):u.item.taskClass??f(`drawer.taskOrdinary`)})]}),(0,z.jsx)(`h3`,{children:u.item.text})]}),(0,z.jsxs)(`section`,{"aria-label":f(`drawer.taskInfo`),className:`personal-task-inspector-fields`,children:[(0,z.jsx)(`h4`,{children:f(`drawer.taskInfo`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:u.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`common.owner`)}),(0,z.jsx)(`dd`,{children:u.item.ownerLabel??u.item.claimedBy??f(`drawer.notAssigned`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`common.status`)}),(0,z.jsx)(`dd`,{children:u.item.done?f(`drawer.taskStatusCompleted`):u.item.status===`deferred`?f(`drawer.taskStatusDeferred`):u.item.status===`blocked`?f(`drawer.taskStatusBlocked`):f(`drawer.taskStatusOpen`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.priority`)}),(0,z.jsx)(`dd`,{children:u.item.priority??f(`drawer.notSet`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.dependencies`)}),(0,z.jsx)(`dd`,{children:u.item.dependencies?.join(` · `)||f(`common.none`)})]}),u.item.status===`deferred`?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.resumeWhen`)}),(0,z.jsx)(`dd`,{children:u.item.resumeWhen||f(`drawer.notSet`)})]}):null,(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.nextTransition`)}),(0,z.jsx)(`dd`,{children:u.item.nextTransition??(u.item.done?f(`drawer.taskNextCompleted`):u.item.status===`deferred`?f(`drawer.taskNextDeferred`):f(`drawer.taskNextOpen`))})]})]})]}),!c&&!u.item.done?(0,z.jsxs)(`div`,{className:`personal-task-inspector-actions`,"aria-label":f(`drawer.taskActions`),children:[(0,z.jsxs)(`details`,{className:`personal-task-management`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(rm,{size:16}),f(`drawer.taskManage`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:f(`drawer.reassign`)}),(0,z.jsxs)(`label`,{className:`personal-inline-agent-select`,children:[f(`drawer.reassign`),(0,z.jsx)(`select`,{"aria-label":f(`drawer.reassign`),onChange:e=>M(e.target.value),value:re,children:e.filter(e=>e.available).map(e=>(0,z.jsx)(`option`,{value:e.agentId,children:e.label},e.agentId))}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void t.onPreviewAction?.({actionKind:`todo.update`,context:{goal_id:u.item.goalId,kind:`todo`,todo_id:u.item.todoId},idempotencyKey:`workspace-todo-${u.item.todoId}-reassign-${re}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:re,goal_id:u.item.goalId,operation:`reassign`,todo_id:u.item.todoId},summary:f(`drawer.reassignSummary`,{task:u.item.text})}),type:`button`,children:f(`timeline.review`)})]}),(0,z.jsx)(`strong`,{children:f(`drawer.taskDeferUntil`)}),(0,z.jsxs)(`label`,{className:`personal-inline-agent-select personal-inline-resume-when`,children:[f(`drawer.taskDeferUntil`),(0,z.jsx)(`input`,{"aria-label":f(`drawer.taskDeferCondition`),"aria-invalid":!!N.trim()&&!he,onChange:e=>ie(e.target.value),placeholder:f(`drawer.taskDeferPlaceholder`),value:N}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:!he,onClick:()=>void _e(u.item,`defer`,f(`drawer.taskDefer`),he??void 0),type:`button`,children:f(`drawer.taskDeferReview`)}),(0,z.jsx)(`small`,{children:N.trim()&&!he?f(`drawer.taskDeferInvalid`):f(`drawer.taskDeferSupported`)})]}),(0,z.jsx)(`div`,{className:`personal-task-management-secondary`,children:ky.map(e=>(0,z.jsx)(`button`,{onClick:()=>void _e(u.item,e.operation,f(e.key)),type:`button`,children:f(e.key)},e.operation))})]})]}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void _e(u.item,`complete`,f(`drawer.taskComplete`)),type:`button`,children:[(0,z.jsx)(Kp,{size:17}),f(`drawer.taskComplete`)]})]}):null,u.item.done?(0,z.jsxs)(`div`,{className:`personal-task-completed-note`,children:[(0,z.jsx)(Kp,{size:16}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:f(`drawer.taskCompletedTitle`)}),(0,z.jsx)(`small`,{children:f(`drawer.taskCompletedNote`)})]})]}):null]}):null,u.kind===`goal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsx)(`small`,{children:Yi(u.item.state,d)}),(0,z.jsx)(`h3`,{children:u.item.title}),(0,z.jsx)(`p`,{children:u.item.agentSentence}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.tokens`)}),(0,z.jsxs)(`dd`,{children:[ay(u.item.usage?.tokens24h,f(`drawer.usageNotMeasured`),ny),` / `,ay(u.item.usage?.tokens7d,f(`drawer.usageNotMeasured`),ny)]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.cost`)}),(0,z.jsxs)(`dd`,{children:[ay(u.item.usage?.costUsd24h,f(`drawer.usageNotMeasured`),ry),` / `,ay(u.item.usage?.costUsd7d,f(`drawer.usageNotMeasured`),ry)]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.duration`)}),(0,z.jsxs)(`dd`,{children:[ay(u.item.usage?.durationMs24h,f(`drawer.usageNotMeasured`),iy),` / `,ay(u.item.usage?.durationMs7d,f(`drawer.usageNotMeasured`),iy)]})]})]})]}),(()=>{let e=n.find(e=>e.goalId===u.item.goalId),r=a.find(e=>e.goal_id===u.item.goalId);return(0,z.jsxs)(z.Fragment,{children:[u.item.repository?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-repository`,children:[(0,z.jsxs)(`div`,{className:`personal-detail-card-title`,children:[(0,z.jsx)(`small`,{children:f(`drawer.repository`)}),(0,z.jsx)(`em`,{children:f(`common.readOnly`)})]}),(0,z.jsxs)(`h3`,{children:[(0,z.jsx)(lm,{size:16}),u.item.repository.label]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.branch`)}),(0,z.jsx)(`dd`,{children:u.item.repository.branch||`detached`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Role`}),(0,z.jsx)(`dd`,{children:f(`drawer.repositoryRole`)})]})]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>{let e=navigator.clipboard?.writeText(u.item.repository?.identity??``);if(!e){v(`error`);return}e.then(()=>v(`copied`)).catch(()=>v(`error`))},type:`button`,children:[(0,z.jsx)(em,{size:15}),f(_===`copied`?`drawer.copyRepositoryDone`:`drawer.copyRepository`)]}),_===`error`?(0,z.jsx)(`p`,{className:`personal-copy-feedback is-error`,role:`status`,children:f(`drawer.copyRepositoryError`)}):_===`copied`?(0,z.jsx)(`p`,{className:`personal-copy-feedback`,role:`status`,children:f(`drawer.copyRepositorySuccess`)}):null]}):null,c?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-notification`,children:[(0,z.jsx)(`small`,{children:f(`drawer.larkConnection`)}),(0,z.jsx)(`h3`,{children:f(`drawer.remoteDetailsUnavailable`)}),(0,z.jsx)(`p`,{children:f(`drawer.remoteDetailsDescription`)})]}):(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-notification`,children:[(0,z.jsx)(`small`,{children:f(`drawer.larkConnection`)}),r?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`h3`,{children:[r.app_label,(0,z.jsx)(`span`,{className:`personal-connection-status`,children:f(`drawer.connected`)})]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.group`)}),(0,z.jsx)(`dd`,{children:r.chat_name})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.topic`)}),(0,z.jsxs)(`dd`,{children:[`# `,r.topic_name]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.trigger`)}),(0,z.jsx)(`dd`,{children:r.incoming_mode===`mentions`?f(`lark.someoneMentions`):f(`lark.allMessages`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.replyMode`)}),(0,z.jsx)(`dd`,{children:f(`lark.topicReply`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.autoNotify`)}),(0,z.jsx)(`dd`,{children:e?.humanGateAutoNotifyEnabled?f(`common.on`):f(`common.off`)})]}),e?.lastNotifiedAt?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.lastNotification`)}),(0,z.jsx)(`dd`,{children:e.lastNotifiedAt})]}):null]})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:f(`drawer.larkNotConfigured`)}),(0,z.jsx)(`p`,{children:f(`drawer.larkNotConfiguredDescription`)})]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>t.onOpenNotificationSettings?.(u.item.goalId),type:`button`,children:[(0,z.jsx)(Hp,{size:16}),f(r?`drawer.larkConfigure`:`drawer.larkConnect`)]})]})]})})(),(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-session`,children:[(0,z.jsx)(`small`,{children:f(`drawer.runDetails`)}),fe?.sessionId?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:Xi(fe.sessionStatus??fe.status,f)}),(0,z.jsx)(`p`,{children:fe.title}),t.onOpenRunSession?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void t.onOpenRunSession?.(fe),type:`button`,children:[(0,z.jsx)(Tm,{size:16}),f(`drawer.runLatest`)]}):null]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:f(`drawer.noRun`)}),(0,z.jsx)(`p`,{children:f(`drawer.noRunDescription`)})]})]}),c?null:(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>t.onRequestScheduleConfig?.(`heartbeat`,u.item.goalId),type:`button`,children:[(0,z.jsx)(Dm,{size:16}),f(`drawer.setupHeartbeat`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>t.onRequestScheduleConfig?.(`monitor`,u.item.goalId),type:`button`,children:[(0,z.jsx)(Gp,{size:16}),f(`drawer.scheduleAdd`)]})]}),u.item.subagentExecution?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-subagents`,children:[(0,z.jsxs)(`div`,{className:`personal-subagent-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:f(`drawer.subagentLabel`)}),(0,z.jsxs)(`h3`,{children:[(0,z.jsx)(Up,{size:16}),f(`drawer.subagentTitle`)]})]}),(0,z.jsxs)(`button`,{"aria-checked":ye.enabled,"aria-label":f(k&&D===`ready`?`drawer.subagentPending`:ye.enabled?`drawer.subagentDisable`:`drawer.subagentEnable`),className:`personal-subagent-switch`,"data-pending":k&&D===`ready`?`true`:void 0,disabled:c||be||!!k||!t.onPreviewGoalSubagentConfiguration,onClick:()=>void Te(!ye.enabled),role:`switch`,type:`button`,children:[(0,z.jsx)(`span`,{}),f(k&&D===`ready`?`drawer.subagentPending`:ye.enabled?`common.on`:`common.off`)]})]}),(0,z.jsx)(`p`,{children:f(`drawer.subagentDescription`)}),k&&D===`ready`?(0,z.jsxs)(`div`,{className:`personal-subagent-preview`,children:[(0,z.jsx)(`strong`,{children:f(k.enabled?`drawer.subagentConfirmEnable`:`drawer.subagentConfirmDisable`)}),(0,z.jsx)(`p`,{children:k.enabled?f(`drawer.subagentPreviewSummary`,{count:k.maxChildren,domains:k.allowedDomains.join(` · `)||f(`drawer.subagentDomainsUnrestricted`)}):f(`drawer.subagentDisableSummary`)}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`button`,{className:`personal-primary-action`,onClick:()=>void Ee(),type:`button`,children:f(`common.confirm`)}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:Se,type:`button`,children:f(`common.cancel`)})]})]}):null,C?(0,z.jsxs)(`p`,{className:`personal-subagent-feedback is-${D}`,role:`status`,children:[D===`previewing`||D===`applying`?(0,z.jsx)(km,{className:`personal-spin`,size:13}):null,C]}):null,(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.subagentCurrentBoundary`)}),(0,z.jsx)(`dd`,{children:ye.allowedDomains.join(` · `)||f(`drawer.subagentDomainsUnrestricted`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.subagentChildLimit`)}),(0,z.jsx)(`dd`,{children:ye.maxChildren||0})]})]}),c?(0,z.jsx)(`p`,{className:`personal-subagent-read-only`,children:f(`drawer.subagentRemoteReadOnly`)}):(0,z.jsxs)(`div`,{className:`personal-subagent-fields`,children:[(0,z.jsxs)(`fieldset`,{className:`personal-subagent-domain-picker`,disabled:be,children:[(0,z.jsx)(`legend`,{children:f(`drawer.subagentDomains`)}),xe.length>0?(0,z.jsx)(`div`,{className:`personal-subagent-domain-options`,children:xe.map(e=>{let t=x.includes(e.value);return(0,z.jsxs)(`label`,{className:`personal-subagent-domain-option${t?` is-selected`:``}`,children:[(0,z.jsx)(`input`,{"aria-label":e.value,checked:t,onChange:t=>we(e.value,t.target.checked),type:`checkbox`}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.value}),(0,z.jsx)(`small`,{children:f(`drawer.subagentDomainTodoCount`,{count:e.matchingTodoCount})})]})]},e.value)})}):(0,z.jsx)(`p`,{className:`personal-subagent-domain-empty`,children:f(`drawer.subagentDomainsEmpty`)}),(0,z.jsx)(`small`,{children:f(`drawer.subagentDomainsHint`)})]}),(0,z.jsxs)(`label`,{className:`personal-subagent-limit-field`,children:[(0,z.jsx)(`span`,{children:f(`drawer.subagentMaxChildren`)}),(0,z.jsx)(`select`,{"aria-label":f(`drawer.subagentMaxChildren`),disabled:be,onChange:e=>{E(Number(e.target.value)),ee(null),O(`idle`),w(null)},value:T,children:jy.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))})]}),ye.enabled?(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:be,onClick:()=>void Te(!0),type:`button`,children:f(`drawer.subagentPreviewBoundary`)}):null]})]}):null]}):null,u.kind===`run`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{"aria-label":f(`drawer.runView`),className:`personal-run-drawer-tabs`,role:`tablist`,children:[(0,z.jsx)(`button`,{"aria-selected":y===`record`,onClick:()=>b(`record`),role:`tab`,type:`button`,children:f(`drawer.executionRecordAndResult`)}),(0,z.jsx)(`button`,{"aria-selected":y===`details`,onClick:()=>b(`details`),role:`tab`,type:`button`,children:f(`drawer.detailsAndActions`)})]}),y===`record`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card personal-session-summary`,children:[(0,z.jsxs)(`small`,{children:[u.item.agentLabel,` · `,Xi(u.item.sessionStatus??u.item.status,f)]}),(0,z.jsx)(`h3`,{children:u.item.title}),(0,z.jsx)(`p`,{children:u.item.latestActivity}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:u.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.progress`)}),(0,z.jsxs)(`dd`,{children:[u.item.completedSteps,`/`,u.item.totalSteps]})]})]})]}),(0,z.jsxs)(`section`,{"aria-label":f(`drawer.executionRecord`),className:`personal-session-message-record`,children:[(0,z.jsx)(`h3`,{children:f(`drawer.executionRecord`)}),u.item.sessionMessages?.length?(0,z.jsx)(`ol`,{children:u.item.sessionMessages.map(e=>(0,z.jsxs)(`li`,{className:`is-${e.role}`,children:[(0,z.jsx)(`i`,{}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:e.role===`user`?f(`drawer.runRoleUser`):e.role===`assistant`?f(`drawer.runRoleAssistant`):f(`drawer.runRoleSystem`)}),e.createdAt?(0,z.jsx)(`time`,{children:new Date(e.createdAt).toLocaleTimeString(d,{hour:`2-digit`,minute:`2-digit`,hour12:!1})}):null]}),(0,z.jsx)(`p`,{children:e.text})]})]},e.messageId))}):(0,z.jsx)(`p`,{className:`personal-session-empty`,children:pe?f(`drawer.runRecordProjected`,{completed:u.item.completedSteps,outputs:u.item.outputs?.length?f(`drawer.runRecordProjectedOutputs`,{count:u.item.outputs.length}):``,total:u.item.totalSteps}):f(`drawer.runRecordEmpty`)}),u.item.status===`running`?(0,z.jsxs)(`div`,{className:`personal-session-active-step`,children:[(0,z.jsx)(`i`,{}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:f(`drawer.analysis`)}),(0,z.jsx)(`small`,{children:f(`drawer.agentWorking`)})]})]}):null]}),u.item.outputs?.length?(0,z.jsxs)(`section`,{className:`personal-execution-history`,"aria-labelledby":`personal-run-outputs-title`,children:[(0,z.jsx)(`h3`,{id:`personal-run-outputs-title`,children:f(`drawer.outputs`)}),(0,z.jsx)(`ol`,{children:u.item.outputs.map(e=>(0,z.jsx)(`li`,{children:(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`small`,{children:e.createdAt??e.kind??f(`files.emptySummary`)})]})},e.outputId))})]}):null]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsxs)(`small`,{children:[u.item.agentLabel,` · `,Xi(u.item.status,f)]}),(0,z.jsx)(`h3`,{children:u.item.title}),(0,z.jsx)(`p`,{children:u.item.latestActivity}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:u.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.progress`)}),(0,z.jsxs)(`dd`,{children:[u.item.completedSteps,`/`,u.item.totalSteps]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.sessionStatus`)}),(0,z.jsx)(`dd`,{children:Xi(u.item.sessionStatus??u.item.status,f)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.sessionRecoverable`)}),(0,z.jsx)(`dd`,{children:u.item.resumable===!1?f(`drawer.resumeNo`):f(`drawer.resumeYes`)})]})]})]}),u.item.sessionStatus===`resume_failed`&&!c?(0,z.jsxs)(`section`,{className:`personal-recovery-panel`,"aria-label":f(`drawer.recoveryFailed`),children:[(0,z.jsx)(`strong`,{children:f(`drawer.recoveryFailed`)}),(0,z.jsx)(`p`,{children:f(`drawer.recoveryDescription`)}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void t.onRetryResumeRun?.(u.item),type:`button`,children:[(0,z.jsx)(km,{size:16}),f(`drawer.recoveryRetry`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void t.onStartNewRunSession?.(u.item),type:`button`,children:[(0,z.jsx)(Tm,{size:16}),f(`drawer.recoveryNewSession`)]})]}):null,c?null:(0,z.jsxs)(`section`,{className:`personal-correction-panel`,children:[(0,z.jsx)(`header`,{children:(0,z.jsxs)(`span`,{children:[(0,z.jsx)(Up,{size:16}),f(`drawer.correctionLabel`,{agent:u.item.agentLabel})]})}),(0,z.jsx)(`p`,{children:f(`drawer.correctionDescription`)}),(0,z.jsxs)(`div`,{className:`personal-correction-composer`,children:[(0,z.jsx)(`textarea`,{"aria-label":f(`drawer.correctionTextarea`,{agent:u.item.agentLabel,goal:u.item.goalTitle,run:u.item.title}),onChange:e=>m(e.target.value),placeholder:f(`drawer.correctionPlaceholder`),rows:3,value:p}),(0,z.jsx)(`button`,{"aria-label":f(`drawer.correctionSend`),disabled:!p.trim(),onClick:()=>void ge(),type:`button`,children:(0,z.jsx)(Mm,{size:16})})]})]}),c?null:(0,z.jsxs)(`details`,{className:`personal-compact-menu personal-run-more`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(rm,{size:17}),f(`drawer.moreRunActions`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`button`,{disabled:!u.item.canInterrupt,onClick:()=>void t.onInterruptRun?.(u.item),type:`button`,children:[(0,z.jsx)(wm,{size:16}),f(`drawer.runInterrupt`)]}),(0,z.jsxs)(`button`,{disabled:u.item.resumable===!1,onClick:()=>void t.onRetryResumeRun?.(u.item),type:`button`,children:[(0,z.jsx)(km,{size:16}),f(`drawer.recoveryRetry`)]}),(0,z.jsxs)(`button`,{onClick:()=>void t.onStartNewRunSession?.(u.item),type:`button`,children:[(0,z.jsx)(Tm,{size:16}),f(`drawer.runNewSession`)]}),(0,z.jsxs)(`button`,{onClick:()=>void t.onCloseRunSession?.(u.item),type:`button`,children:[(0,z.jsx)(zm,{size:16}),f(`drawer.runCloseSession`)]})]})]})]})]}):null,u.kind===`output`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsx)(`small`,{children:u.item.kind??`output`}),(0,z.jsx)(`h3`,{children:u.item.title}),(0,z.jsx)(`p`,{children:u.item.summary??f(`drawer.outputRecorded`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:u.item.goalTitle??u.item.goalId})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.outputTodo`)}),(0,z.jsx)(`dd`,{children:u.item.todoId??f(`drawer.notLinked`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.outputRun`)}),(0,z.jsx)(`dd`,{children:u.item.runId??f(`drawer.notLinked`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Agent`}),(0,z.jsx)(`dd`,{children:u.item.agentLabel??u.item.agentId??`LoopX`})]})]})]}),u.item.report?(0,z.jsxs)(`section`,{className:`personal-report-detail`,"data-testid":`personal-periodic-report-detail`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsxs)(`strong`,{children:[`+`,u.item.report.addedCount]}),f(`files.reportAdded`)]}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:u.item.report.changedCount}),f(`files.reportChanged`)]})]}),(0,z.jsxs)(`p`,{children:[u.item.report.periodStartAt,` → `,u.item.report.periodEndAt]}),(0,z.jsx)(`ol`,{children:u.item.report.items.map(e=>(0,z.jsxs)(`li`,{"data-change-kind":e.changeKind,children:[(0,z.jsxs)(`small`,{children:[e.changeKind,` · `,e.status]}),(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`p`,{children:e.summary})]},e.sourceRef))}),(0,z.jsxs)(`footer`,{children:[(0,z.jsxs)(`span`,{children:[f(`files.reportPublication`),`: `,u.item.report.publicationId]}),(0,z.jsxs)(`span`,{children:[f(`files.reportGeneration`),`: `,u.item.report.generationId]})]})]}):null,u.item.safePreview?(0,z.jsx)(`pre`,{"aria-label":f(`drawer.outputSafePreview`),className:`personal-safe-preview`,children:u.item.safePreview}):(0,z.jsx)(`p`,{className:`personal-preview-unavailable`,children:f(`drawer.previewUnavailable`)}),(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:!t.onOpenOutput,onClick:()=>{t.onOpenOutput?.(u.item),o()},type:`button`,children:[(0,z.jsx)(im,{size:16}),f(`files.openConversation`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,disabled:!t.onExportOutput,onClick:()=>void t.onExportOutput?.(u.item),type:`button`,children:[(0,z.jsx)(nm,{size:16}),f(`files.exportSummary`)]})]})]}):null,u.kind===`proposal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-proposal-card`,children:[(0,z.jsxs)(`small`,{children:[u.item.actionKind,` · `,u.item.status]}),(0,z.jsx)(`h3`,{children:u.item.title}),(0,z.jsx)(`p`,{children:u.item.impact}),u.item.status===`ready`?(0,z.jsx)(`p`,{className:`personal-proposal-explainer`,children:f(`drawer.proposalExplainer`)}):null,(0,z.jsx)(`dl`,{children:u.item.fields.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e.label}),(0,z.jsx)(`dd`,{children:e.value})]},e.key))})]}),u.item.status===`applied`?(0,z.jsxs)(`p`,{className:`personal-proposal-state is-applied`,children:[(0,z.jsx)(Kp,{size:16}),f(`drawer.proposalApplied`)]}):null,u.item.status===`applied`&&u.item.goalId?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>{let e=u.item.goalId;o(),t.onOpenGoal?.(e)},type:`button`,children:[(0,z.jsx)(im,{size:16}),u.item.actionKind===`goal.create`?f(`drawer.proposalEnterGoal`):f(`drawer.proposalViewGoal`)]}):null,u.item.status===`stale`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-stale`,children:f(`drawer.proposalStale`)}):null,u.item.status===`error`?(0,z.jsxs)(`div`,{className:`personal-proposal-state is-error`,children:[(0,z.jsx)(`span`,{children:f(`drawer.proposalApplyFailed`)}),u.item.errorMessage?(0,z.jsx)(`small`,{children:u.item.errorMessage}):null,(0,z.jsx)(`small`,{children:f(`drawer.proposalApplyFailedHint`)})]}):null,u.item.status===`rejected`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-error`,children:f(`drawer.proposalRejected`)}):null,u.item.status===`deferred`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-gated`,children:f(`drawer.proposalDeferred`)}):null,u.item.status===`gated`?(0,z.jsxs)(`div`,{className:`personal-proposal-state is-gated`,children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:f(`drawer.gateRequiresHost`)}),f(`drawer.gateRequiresHostDescription`)]}),u.item.gate?.nextAction?(0,z.jsx)(`small`,{children:u.item.gate.nextAction}):null]}):null,u.item.status===`gated`&&u.item.actionKind===`gate.resolve`?(()=>{let e=e=>u.item.fields.find(t=>t.key===e)?.value,t=e(`goal_id`),n=e(`todo_id`);return!t||!n?null:(0,z.jsxs)(`section`,{className:`personal-detail-card personal-gate-cli-hint`,children:[(0,z.jsx)(`small`,{children:f(`drawer.gateApproveHint`)}),(0,z.jsxs)(`code`,{children:[`loopx todo complete --goal-id `,t,` --todo-id `,n,` --decision-outcome approve`]}),(0,z.jsx)(`small`,{children:f(`drawer.gateRejectHint`)})]})})():null,!c&&u.item.workspaceCandidates?.length?(0,z.jsx)(`div`,{className:`personal-workspace-candidates`,"aria-label":f(`drawer.workspaceCandidates`),children:u.item.workspaceCandidates.map(e=>(0,z.jsxs)(`button`,{onClick:()=>void t.onSelectWorkspaceCandidate?.(u.item,e.workspaceRef),type:`button`,children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.workspaceRef})]},e.workspaceRef))}):null,!c&&u.item.status===`error`?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void t.onTransitionProposal?.(u.item,`regenerate`),type:`button`,children:[(0,z.jsx)(km,{size:17}),f(`drawer.proposalRegenerate`)]}):!c&&u.item.status!==`gated`?(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:![`ready`,`deferred`].includes(u.item.status),onClick:()=>void t.onApplyProposal?.(u.item),type:`button`,children:[(0,z.jsx)(Kp,{size:17}),u.item.status===`applying`?f(`drawer.applying`):u.item.primaryLabel??f(`drawer.apply`)]}):null,!c&&[`stale`,`gated`,`rejected`].includes(u.item.status)?(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void t.onTransitionProposal?.(u.item,`regenerate`),type:`button`,children:[(0,z.jsx)(km,{size:16}),f(`drawer.proposalRecheck`)]}):null,!c&&[`ready`,`gated`].includes(u.item.status)?(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void t.onTransitionProposal?.(u.item,`defer`),type:`button`,children:f(`drawer.proposalDefer`)}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void t.onTransitionProposal?.(u.item,`reject`),type:`button`,children:f(`drawer.decisionReject`)})]}):null,[`applied`,`applying`].includes(u.item.status)?null:(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:o,type:`button`,children:f(`drawer.proposalClose`)})]}):null,u.kind===`schedule`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsxs)(`small`,{children:[u.item.scheduleKind===`heartbeat`?`Goal Heartbeat`:`continuous_monitor`,` · `,u.item.status??`active`]}),(0,z.jsx)(`h3`,{children:u.item.label}),(0,z.jsx)(`p`,{children:u.item.target??u.item.schedule??f(`drawer.scheduleDefaultTarget`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.scheduleTimezone`)}),(0,z.jsx)(`dd`,{children:u.item.timezone??f(`drawer.scheduleLocalTimezone`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.scheduleNext`)}),(0,z.jsx)(`dd`,{children:u.item.nextRunAt??f(`drawer.schedulePending`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.scheduleLast`)}),(0,z.jsx)(`dd`,{children:u.item.previousRunAt??f(`drawer.scheduleNeverRun`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.scheduleNotification`)}),(0,z.jsx)(`dd`,{children:u.item.notificationRule??f(`drawer.scheduleDefaultNotification`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.scheduleStopCondition`)}),(0,z.jsx)(`dd`,{children:u.item.stopCondition??f(`drawer.scheduleDefaultStop`)})]})]})]}),!c&&u.item.scheduleKind===`monitor`?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void t.onUpdateSchedule?.(u.item,`run_now`),type:`button`,children:[(0,z.jsx)(Tm,{size:16}),f(`drawer.scheduleRunNow`)]}):null,c?null:(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void t.onUpdateSchedule?.(u.item,u.item.status===`paused`?`resume`:`pause`),type:`button`,children:[u.item.status===`paused`?(0,z.jsx)(Tm,{size:16}):(0,z.jsx)(wm,{size:16}),u.item.status===`paused`?f(`drawer.scheduleResume`):f(`drawer.schedulePause`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void t.onUpdateSchedule?.(u.item,`edit`),type:`button`,children:[(0,z.jsx)(Gp,{size:16}),f(`drawer.scheduleEdit`)]})]}),c?null:(0,z.jsxs)(`button`,{className:`personal-danger-action`,onClick:()=>void t.onUpdateSchedule?.(u.item,`stop`),type:`button`,children:[(0,z.jsx)(zm,{size:16}),f(`drawer.scheduleStop`,{kind:u.item.scheduleKind===`heartbeat`?` Heartbeat`:f(`drawer.titleSchedule`)})]}),(0,z.jsxs)(`section`,{className:`personal-execution-history`,"aria-labelledby":`personal-execution-history-title`,children:[(0,z.jsx)(`h3`,{id:`personal-execution-history-title`,children:f(`drawer.executionHistory`)}),u.item.executionHistory?.length?(0,z.jsx)(`ol`,{children:u.item.executionHistory.map((e,t)=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.timestamp})]}),(0,z.jsx)(`em`,{className:`is-${e.status}`,children:e.status})]},`${e.timestamp}:${e.runId??t}`))}):(0,z.jsx)(`p`,{children:f(`drawer.noExecutionHistory`)})]})]}):null,u.kind===`run`||u.kind===`proposal`||u.kind===`schedule`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`button`,{"aria-expanded":h,className:`personal-diagnostics-trigger`,onClick:()=>g(e=>!e),type:`button`,children:[(0,z.jsx)(`span`,{children:f(`drawer.advancedDiagnostics`)}),(0,z.jsx)(qp,{className:h?`is-open`:``,size:16})]}),h?(0,z.jsxs)(`div`,{className:`personal-diagnostics`,children:[(0,z.jsxs)(`code`,{children:[`goal_id: `,ue]}),(0,z.jsxs)(`code`,{children:[`kind: `,u.kind]}),u.kind===`run`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`session_id: `,u.item.sessionId??f(`drawer.notLinked`)]}),(0,z.jsxs)(`code`,{children:[`turn_id: `,u.item.turnId??f(`common.none`)]}),(0,z.jsxs)(`code`,{children:[`adapter: `,u.item.agentId]}),(0,z.jsxs)(`code`,{children:[`status: `,u.item.sessionStatus??u.item.status]})]}):u.kind===`proposal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`action: `,u.item.actionKind]}),(0,z.jsxs)(`code`,{children:[`status: `,u.item.status]})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`schedule_id: `,u.item.scheduleId]}),(0,z.jsxs)(`code`,{children:[`status: `,u.item.status??`active`]})]})]}):null]}):null]})]})}var Iy=[`checking`,`connecting`,`downloading`,`installing_app`,`installing_runtime`],Ly={desktop_status_unavailable:[`无法读取 App 更新状态。请重启 App 后再试;若仍失败,请重新安装最新 App。`,`Cannot read the App update status. Restart the App; if this persists, reinstall the latest App.`],update_feed_unavailable:[`此通道的更新源尚未就绪或暂时不可用。可稍后重新检查,当前版本仍可继续使用。`,`This channel's update feed is not ready or temporarily unavailable. Check again later; you can keep using this version.`],update_feed_invalid:[`更新源格式异常。请稍后重新检查。`,`The update feed is invalid. Check again later.`],update_platform_unavailable:[`此通道尚无适用于本机的更新包。`,`This channel has no update package for this platform.`],update_check_timeout:[`检查更新超时。请稍后重试。`,`The update check timed out. Try again later.`],update_network_failed:[`无法连接更新服务器。请检查网络后重试。`,`Cannot reach the update server. Check your connection and retry.`],update_download_or_signature_failed:[`更新包下载或签名校验失败,尚未安装。请重新检查更新。`,`Download or signature verification failed; the update was not installed. Check for updates again.`]};function Ry(e,t=`update_failed`){return{phase:`error`,details:{code:typeof e==`string`&&Object.hasOwn(Ly,e)?e:t}}}function zy(){let{locale:e}=Ji(),t=e===`zh-CN`,[n,r]=(0,R.useState)(!1),i=(0,R.useRef)(null),[a,o]=(0,R.useState)(`stable`),[s,c]=(0,R.useState)({phase:`idle`}),[l,u]=(0,R.useState)(``),[d,f]=(0,R.useState)(!1),p=(0,R.useRef)(!1),m=window.__TAURI__?.core.invoke,h=Iy.includes(s.phase);(0,R.useEffect)(()=>{let e=i.current;if(!e)return;let t=()=>r(e.matches(`:popover-open`));return e.addEventListener(`toggle`,t),()=>e.removeEventListener(`toggle`,t)},[]),(0,R.useEffect)(()=>{if(!m)return;let e=!0;return m(`desktop_update_status`).then(t=>{if(!e)return;u(t.app_version),f(t.rollback_available===!0),t.state?.phase&&c(t.state);let n=t.state?.details?.channel??(t.app_version.includes(`-main.`)?`main`:`stable`);o(n),t.state?.phase||m(`desktop_update`,{action:`check`,channel:n}).then(t=>{e&&c(t)}).catch(t=>{e&&c(Ry(t))})}).catch(()=>{e&&c(Ry(null,`desktop_status_unavailable`))}),()=>{e=!1}},[m]),(0,R.useEffect)(()=>{if(!m||!h)return;let e=window.setInterval(()=>{m(`desktop_update_status`).then(e=>{e.state?.phase&&c(e.state)}).catch(()=>{})},1e3);return()=>window.clearInterval(e)},[m,h]);async function g(e){if(!(!m||p.current)){p.current=!0,c({phase:e===`check`?`checking`:e===`repair`?`installing_runtime`:`downloading`});try{if(!l){let e=await m(`desktop_update_status`);u(e.app_version),f(e.rollback_available===!0)}c(await m(`desktop_update`,{action:e,channel:a}))}catch(e){c(Ry(e,l?`update_failed`:`desktop_status_unavailable`))}finally{p.current=!1}}}let _={service_error:t?`运行时已安装,但服务尚未连接。可重试更新、修复或恢复上版。`:`Runtime installed, but services are unavailable. Retry updates, repair, or restore the previous version.`,idle:t?`App 会检查可用更新,不会自动安装。`:`Updates are checked automatically, never installed without confirmation.`,runtime_required:t?`请完成匹配组件安装,或检查 App 更新。`:`Install matching components or check for an App update.`,connecting:t?`正在连接更新后的服务…`:`Connecting to updated services…`,checking:t?`正在检查更新…`:`Checking for updates…`,available:t?`新版本已就绪,一次更新 App 与匹配的运行时。`:`Update the App and its matching runtime together.`,up_to_date:t?`当前通道暂无更新。`:`No newer update on this channel.`,downloading:t?`正在下载并校验签名…`:`Downloading and verifying signature…`,installing_app:t?`正在安装 App,请保持窗口打开。`:`Installing the App. Keep this window open.`,installing_runtime:t?`正在安装匹配的运行时,请稍候…`:`Installing the matching runtime…`,restart_required:t?`重启后将自动完成运行时安装与服务连接。`:`Restart to finish runtime installation and reconnect services.`,ready:t?`更新完成,服务已就绪。`:`Update completed; services are ready.`,error:Ly[s.details?.code??``]?.[+!t]??(t?`更新未完成。请重试;启动失败可尝试修复当前版本。`:`Update incomplete. Retry; repair this version if startup fails.`)},v=h?t?`正在更新…`:`Updating…`:s.phase===`available`?t?`有可用更新`:`Update available`:s.phase===`restart_required`?t?`重启完成更新`:`Restart to finish`:s.phase===`error`?t?`更新需重试`:`Retry update`:t?`更新 LoopX`:`Update LoopX`;return(0,z.jsxs)(`div`,{className:`personal-desktop-update`,children:[(0,z.jsxs)(`button`,{className:`personal-update-trigger`,type:`button`,"aria-expanded":n,"aria-controls":`desktop-update-panel`,onClick:e=>{i.current?.style.setProperty(`bottom`,`${window.innerHeight-e.currentTarget.getBoundingClientRect().top+8}px`),i.current?.togglePopover()},children:[(0,z.jsx)(nm,{size:16,"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:v}),(0,z.jsx)(Yp,{size:14,"aria-hidden":`true`})]}),(0,z.jsxs)(`section`,{ref:i,popover:`auto`,id:`desktop-update-panel`,className:`personal-update-panel`,"aria-label":t?`LoopX 更新`:`LoopX updates`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:t?`LoopX 更新`:`LoopX updates`}),(0,z.jsx)(`button`,{type:`button`,"aria-label":t?`关闭更新面板`:`Close updates`,onClick:()=>i.current?.hidePopover(),children:(0,z.jsx)(Gm,{size:16,"aria-hidden":`true`})})]}),(0,z.jsxs)(`small`,{children:[l,` · `,a===`main`?t?`main 预览版`:`main preview`:t?`稳定版`:`Stable`]}),s.details?.version?(0,z.jsxs)(`p`,{children:[t?`目标版本:`:`Target: `,s.details.version]}):null,(0,z.jsxs)(`p`,{role:`status`,"aria-live":`polite`,children:[h?(0,z.jsx)(Om,{className:`is-spinning`,size:14,"aria-hidden":`true`}):null,_[s.phase]]}),s.phase===`downloading`&&s.details?.total?(0,z.jsx)(`progress`,{"aria-label":t?`下载进度`:`Download progress`,max:s.details.total,value:s.details.received??0}):null,m?(0,z.jsx)(`div`,{className:`personal-update-actions`,children:s.phase===`restart_required`?(0,z.jsx)(`button`,{type:`button`,onClick:()=>void g(`restart`),children:t?`重启完成更新`:`Restart to finish`}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,disabled:h,onClick:()=>void g(`check`),children:t?`检查更新`:`Check for updates`}),s.phase===`available`?(0,z.jsx)(`button`,{type:`button`,onClick:()=>void g(`apply`),children:t?`更新并准备重启`:`Install update`}):null]})}):(0,z.jsx)(`p`,{children:t?`请在 LoopX App 中更新;浏览器自身无需安装包。`:`Update from the LoopX App; the browser needs no installer.`}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`高级选项`:`Advanced options`}),(0,z.jsxs)(`label`,{children:[t?`更新通道`:`Update channel`,(0,z.jsxs)(`select`,{disabled:h||s.phase===`restart_required`,value:a,onChange:e=>{o(e.target.value),c({phase:`idle`})},children:[(0,z.jsx)(`option`,{value:`stable`,children:t?`稳定版(推荐)`:`Stable (recommended)`}),(0,z.jsx)(`option`,{value:`main`,children:t?`main 预览版`:`main preview`})]})]}),(0,z.jsx)(`p`,{children:t?`App 与匹配的 CLI 一起更新,服务可能短暂断开。不删除 Goal 数据。`:`Updates the App and matching CLI. Services may briefly disconnect. Goal data is not deleted.`}),m?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{children:t?`启动失败时,可重装当前 App 随附的运行时。`:`If startup fails, reinstall this App's bundled runtime.`}),(0,z.jsx)(`button`,{disabled:h||s.phase===`restart_required`,type:`button`,onClick:()=>void g(`repair`),children:t?`修复当前版本`:`Repair this version`})]}):null,m&&d?(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`恢复上个版本`:`Restore previous version`}),(0,z.jsx)(`p`,{children:t?`将恢复已保留的 App 和它的运行时,需要重启。`:`Restore the retained App and its runtime, then restart.`}),(0,z.jsx)(`button`,{disabled:h,type:`button`,onClick:()=>void g(`rollback`),children:t?`确认恢复上版`:`Restore previous version`})]}):null]})]})]})}var By=e=>`loopx-sidebar-goal-order-v1:${encodeURIComponent(e)}`;function Vy(e){try{let t=JSON.parse(e??`null`);return Array.isArray(t)&&t.every(e=>typeof e==`string`)?[...new Set(t)]:[]}catch{return[]}}function Hy(e,t){let n=new Map(t.map((e,t)=>[e,t]));return[...e].sort((e,t)=>(n.get(e.goalId)??1/0)-(n.get(t.goalId)??1/0))}function Uy(e,t,n,r,i){if(n===r||!t.includes(n)||!t.includes(r))return e;let a=[...new Set([...e,...t])].filter(e=>e!==n);return a.splice(a.indexOf(r)+Number(i),0,n),a}function Wy(e,t){let n=By(t),[r,i]=(0,R.useState)(()=>{try{return Vy(localStorage.getItem(n))}catch{return[]}}),[a,o]=(0,R.useState)(!1),[s,c]=(0,R.useState)(null),[l,u]=(0,R.useState)(null),d=(0,R.useRef)(null),f=(0,R.useRef)(!1),p=Hy(e,r),m=p.map(e=>e.goalId);function h(t,a,s){let l=Uy(r,m,t,a,s);if(l===r)return;i(l);let u=Hy(e,l),d=u.findIndex(e=>e.goalId===t),f=u[d];f&&c({title:f.title,position:d+1});try{localStorage.setItem(n,JSON.stringify(l)),o(!1)}catch{o(!0)}}function g(){d.current=null,u(null)}return{sorted:p,target:l,saveFailed:a,lastMoved:s,move:h,moveBy(e,t){let n=p[m.indexOf(e)+t];n&&h(e,n.goalId,t===1)},pointerProps:e=>({onPointerDown(t){f.current=!1,t.pointerType===`mouse`&&t.button===0&&(d.current={id:e,x:t.clientX,y:t.clientY,dragging:!1},t.currentTarget.setPointerCapture(t.pointerId))},onPointerMove(e){let t=d.current;if(!t||!t.dragging&&Math.hypot(e.clientX-t.x,e.clientY-t.y)<6)return;t.dragging=!0,f.current=!0;let n=document.elementFromPoint(e.clientX,e.clientY)?.closest(`[data-reorder-goal]`),r=e.currentTarget.closest(`.personal-goal-list`),i=n?.dataset.reorderGoal;if(!n||!i||!r?.contains(n)||i===t.id){u(null);return}let a=n.getBoundingClientRect();u({id:i,after:e.clientY>a.top+a.height/2})},onPointerUp(){d.current?.dragging&&l&&h(d.current.id,l.id,l.after),g()},onPointerCancel:g,onLostPointerCapture:g,onKeyDown(e){e.key===`Escape`&&g()},onClickCapture(e){f.current&&=(e.preventDefault(),e.stopPropagation(),!1)}})}}var Gy=`/ssh-hosts`,Ky=/^[A-Za-z0-9][A-Za-z0-9._-]{0,254}$/;function qy(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`SSH Host 列表响应无效。`);let t=e;if(t.ok!==!0||t.schema_version!==`ssh_host_catalog_v0`||!Array.isArray(t.hosts))throw Error(`SSH Host 列表协议不兼容,请更新本机 LoopX 服务。`);let n=new Set;return{hosts:t.hosts.flatMap(e=>{if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=String(e.alias??``).trim();return!Ky.test(t)||n.has(t)?[]:(n.add(t),[{alias:t}])}),schemaVersion:`ssh_host_catalog_v0`}}async function Jy(e=fetch,t=Gy){let n=await e(t,{cache:`no-store`});if(!n.ok)throw Error(`无法读取本机 SSH Host(HTTP ${n.status})。`);return qy(await n.json())}function Yy(e,t){let n=e.trim();if(!Ky.test(n))return{error:`请选择有效的 SSH Host。`};let r=Number(t);return!Number.isInteger(r)||r<1024||r>65535?{error:`本地端口必须是 1024–65535 之间的整数。`}:{command:`ssh -N -L ${r}:127.0.0.1:8766 ${n}`,label:n,statusUrl:`http://127.0.0.1:${r}/status.json`}}var Xy=`/api/ssh-source/ensure`;async function Zy(e,t){let n=await fetch(Xy,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({host_alias:e,local_port:Number(t)})}),r=await n.json().catch(()=>null);if(!n.ok)throw Error(r?.error??`无法建立 SSH 隧道来源。`);if(!r?.ok)throw Error(`无法建立 SSH 隧道来源。`);return r}function Qy({activeSource:e,connectionState:t,errorMessage:n,onAdd:r,onRemove:i,onSelect:a,sources:o}){let{t:s}=Ji(),[c,l]=(0,R.useState)(!1),[u,d]=(0,R.useState)(null),[f,p]=(0,R.useState)(`configured`),[m,h]=(0,R.useState)([]),[g,_]=(0,R.useState)(null),[v,y]=(0,R.useState)(!1),[b,x]=(0,R.useState)(!1),[S,C]=(0,R.useState)(``),[w,T]=(0,R.useState)(``),[E,D]=(0,R.useState)(`8876`),[O,k]=(0,R.useState)(``),ee=`configured:`,A=[...o.map(e=>({label:e.label,value:e.id})),...m.filter(e=>!o.some(t=>t.label===e.alias)).map(e=>({group:s(`source.configuredGroup`,{count:m.length}),label:e.alias,value:`${ee}${e.alias}`}))],j=(0,R.useMemo)(()=>m.some(e=>e.alias===S)?Yy(S,E):{error:s(`source.selectHost`)},[m,S,E,s]);(0,R.useEffect)(()=>{te()},[]);async function te(){y(!0),_(null);try{let e=await Jy();h(e.hosts),C(t=>t||e.hosts[0]?.alias||``),e.hosts.length||_(s(`source.hostEmpty`))}catch(e){_(e instanceof Error?e.message:s(`source.hostLoadError`))}finally{y(!1)}}function ne(){l(!0),p(`configured`),d(null),te()}function re(){l(!1),p(`configured`),_(null),x(!1),C(``),d(null),T(``),D(`8876`),k(``)}function M(){let e=r({label:w,statusUrl:O});if(e.error){d(e.error);return}re()}function N(){if(`error`in j){d(j.error??s(`source.invalid`));return}let e=r({ensureTunnel:!0,label:j.label,statusUrl:j.statusUrl});if(e.error){d(e.error);return}re()}function ie(e){let t=new Set;for(let e of o)try{t.add(new URL(e.statusUrl).port)}catch{}let n=`8877`;for(let e=8877;e<9077;e+=1)if(!t.has(String(e))){n=String(e);break}let i=Yy(e,n);if(`error`in i){d(i.error??s(`source.invalid`));return}let a=r({ensureTunnel:!0,label:i.label,statusUrl:i.statusUrl});a.error?d(a.error):d(null),D(n)}async function ae(){if(`error`in j){d(j.error??s(`source.invalid`));return}try{await navigator.clipboard.writeText(j.command),x(!0),d(null)}catch{d(s(`source.copyError`))}}return(0,z.jsxs)(`section`,{"aria-label":s(`source.controlPlane`),className:`personal-status-source`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`span`,{children:`Control plane`}),(0,z.jsx)(`button`,{"aria-label":s(`source.addSsh`),onClick:ne,title:s(`source.add`),type:`button`,children:(0,z.jsx)(Em,{size:14})})]}),(0,z.jsx)(cy,{ariaLabel:s(`source.select`),className:`personal-status-source-select`,icon:(0,z.jsx)(Pm,{size:15}),onChange:e=>{if(e.startsWith(ee)){ie(e.slice(11));return}a(e)},options:A,value:e.id}),(0,z.jsxs)(`div`,{className:`personal-status-source-meta`,children:[(0,z.jsxs)(`span`,{className:`is-${t}`,children:[(0,z.jsx)(`i`,{}),s(t===`loading`?`source.connecting`:t===`error`?`source.notAvailable`:`source.connected`)]}),(0,z.jsx)(`small`,{children:e.readOnly?s(`source.readOnly`):s(`source.localInteractive`)}),e.kind===`ssh_tunnel`?(0,z.jsx)(`button`,{"aria-label":s(`source.remove`,{source:e.label}),onClick:()=>i(e.id),title:s(`source.removeCurrent`),type:`button`,children:(0,z.jsx)(Hm,{size:12})}):null]}),n?(0,z.jsx)(`p`,{className:`personal-status-source-error`,role:`alert`,children:n}):null,c?(0,z.jsxs)(`div`,{className:`personal-status-source-form`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:s(`source.addSsh`)}),(0,z.jsx)(`button`,{"aria-label":s(`source.closeForm`),onClick:re,type:`button`,children:(0,z.jsx)(Gm,{size:13})})]}),(0,z.jsxs)(`div`,{"aria-label":s(`source.addMethod`),className:`personal-status-source-modes`,role:`tablist`,children:[(0,z.jsx)(`button`,{"aria-selected":f===`configured`,onClick:()=>{p(`configured`),d(null)},role:`tab`,type:`button`,children:s(`source.configured`)}),(0,z.jsx)(`button`,{"aria-selected":f===`manual`,onClick:()=>{p(`manual`),d(null)},role:`tab`,type:`button`,children:s(`source.manual`)})]}),f===`configured`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:s(`source.configuredCount`,{count:m.length})}),(0,z.jsxs)(`span`,{className:`personal-status-source-field-row`,children:[(0,z.jsx)(`input`,{"aria-label":s(`source.host`),disabled:v||!m.length,list:`loopx-configured-ssh-hosts`,onChange:e=>{C(e.target.value),x(!1)},placeholder:s(v?`source.loadingHosts`:`source.hostPlaceholder`),value:S}),(0,z.jsx)(`datalist`,{id:`loopx-configured-ssh-hosts`,children:m.map(e=>(0,z.jsx)(`option`,{value:e.alias},e.alias))}),(0,z.jsx)(`button`,{"aria-label":s(`source.refreshHosts`),disabled:v,onClick:()=>void te(),title:s(`source.refreshHosts`),type:`button`,children:(0,z.jsx)(Am,{size:13})})]})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:s(`source.localPort`)}),(0,z.jsx)(`input`,{"aria-label":s(`source.localPort`),inputMode:`numeric`,onChange:e=>{D(e.target.value),x(!1)},value:E})]}),(0,z.jsxs)(`div`,{className:`personal-status-source-command`,children:[(0,z.jsx)(`code`,{children:`error`in j?s(`source.tunnelCommandPending`):j.command}),(0,z.jsxs)(`button`,{"aria-label":s(`source.copyCommand`),disabled:`error`in j,onClick:()=>void ae(),type:`button`,children:[(0,z.jsx)(em,{size:12}),s(b?`source.copied`:`source.copy`)]})]}),g?(0,z.jsx)(`p`,{className:`is-error`,children:g}):null,(0,z.jsx)(`p`,{children:s(`source.description`)}),(0,z.jsx)(`button`,{className:`personal-status-source-add`,disabled:`error`in j,onClick:N,type:`button`,children:s(`source.addConfigured`)})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:s(`source.name`)}),(0,z.jsx)(`input`,{autoFocus:!0,maxLength:48,onChange:e=>T(e.target.value),placeholder:s(`source.namePlaceholder`),value:w})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:s(`source.statusUrl`)}),(0,z.jsx)(`input`,{onChange:e=>k(e.target.value),placeholder:`http://127.0.0.1:8876/status.json`,value:O})]}),(0,z.jsx)(`p`,{children:(0,z.jsx)(`code`,{children:`ssh -N -L 8876:127.0.0.1:8766 `})}),(0,z.jsx)(`p`,{children:s(`source.manualDescription`)}),(0,z.jsx)(`button`,{className:`personal-status-source-add`,onClick:M,type:`button`,children:s(`source.addConfigured`)})]}),u?(0,z.jsx)(`p`,{className:`is-error`,role:`alert`,children:u}):null]}):null]})}var $y={需修复:`is-danger`,等你:`is-warning`,等待条件:`is-info`,推进中:`is-success`,安静运行:`is-quiet`,已完成:`is-quiet`,已停止:`is-stopped`};function eb({attentionCount:e,goals:t,goalArchiveLoadState:n={error:null,phase:`ready`},lifecycleBusyGoalIds:r,onRequestGoalCreate:i,onOpenSettings:a,onRetryGoalArchive:o,onRequestGoalLifecycle:s,onSelectGoal:c,selectedGoalId:l,statusSourceControl:u}){let{locale:d,t:f}=Ji(),[p,m]=(0,R.useState)(!1),h=Wy(t.filter(e=>e.activationState!==`stopped`),u?.activeSource.statusUrl??`/status.json`),g=h.sorted,_=t.filter(e=>e.activationState===`stopped`),v=(e,t)=>(0,z.jsxs)(`div`,{className:`personal-goal-row${h.target?.id===e.goalId?h.target.after?` is-drop-after`:` is-drop-before`:``}`,"data-reorder-goal":t?void 0:e.goalId,"data-load-error":e.loadError,children:[(0,z.jsxs)(`button`,{...t?{}:h.pointerProps(e.goalId),title:t?void 0:f(`sidebar.dragGoal`),"aria-current":l===e.goalId?`page`:void 0,className:`personal-goal-link`,onClick:()=>c(e.goalId),type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-goal-state-dot ${e.loadState?``:$y[e.state]}`}),(0,z.jsxs)(`span`,{className:`personal-goal-link-copy`,children:[(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsxs)(`small`,{children:[e.loadState&&(!t||l===e.goalId)?f(e.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(e.state,d),e.needsYou&&!t?` · ${f(`home.lane.needsYou`)}`:``]})]}),(0,z.jsx)(Jp,{size:15})]}),!t&&p?(0,z.jsxs)(`div`,{className:`personal-goal-move-actions`,children:[(0,z.jsx)(`button`,{type:`button`,"aria-label":f(`sidebar.moveUp`,{goal:e.title}),disabled:g[0]?.goalId===e.goalId,onClick:()=>h.moveBy(e.goalId,-1),children:(0,z.jsx)(Bp,{"aria-hidden":`true`,size:13})}),(0,z.jsx)(`button`,{type:`button`,"aria-label":f(`sidebar.moveDown`,{goal:e.title}),disabled:g.at(-1)?.goalId===e.goalId,onClick:()=>h.moveBy(e.goalId,1),children:(0,z.jsx)(Ip,{"aria-hidden":`true`,size:13})})]}):null,s?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{"aria-label":`${f(t?`sidebar.resume`:`sidebar.stop`)} ${e.title}`,"aria-busy":r?.has(e.goalId)||void 0,className:`personal-goal-lifecycle${r?.has(e.goalId)?` is-pending`:``}`,disabled:r?.has(e.goalId),onClick:()=>s(e,t?`resume`:`stop`),title:f(t?`sidebar.resumeGoal`:`sidebar.stopGoal`),type:`button`,children:r?.has(e.goalId)?(0,z.jsx)(hm,{size:13}):t?(0,z.jsx)(km,{size:13}):(0,z.jsx)(wm,{size:13})}),t?(0,z.jsx)(`button`,{"aria-label":`${f(`sidebar.delete`)} ${e.title}`,className:`personal-goal-lifecycle personal-goal-delete`,onClick:()=>s(e,`delete`),title:f(`sidebar.deleteGoal`),type:`button`,children:(0,z.jsx)(Hm,{size:13})}):null]}):null]},e.goalId);return(0,z.jsxs)(`div`,{className:`personal-goal-directory`,children:[(0,z.jsxs)(`div`,{className:`personal-sidebar-brand`,children:[(0,z.jsx)(`span`,{className:`personal-brand-mark`,children:(0,z.jsx)(Up,{size:18})}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:`LoopX`}),(0,z.jsx)(`small`,{children:f(`sidebar.product`)})]})]}),u?(0,z.jsx)(Qy,{...u}):null,(0,z.jsxs)(`nav`,{"aria-label":f(`home.workspace`),className:`personal-sidebar-nav`,children:[(0,z.jsxs)(`button`,{"aria-current":l===null?`page`:void 0,className:`personal-manager-link`,onClick:()=>c(null),type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-manager-icon`,children:(0,z.jsx)(Up,{size:17})}),(0,z.jsx)(`span`,{children:f(`sidebar.manager`)}),e>0?(0,z.jsx)(`span`,{className:`personal-sidebar-count`,children:e}):null,(0,z.jsx)(Jp,{size:15})]}),(0,z.jsxs)(`div`,{className:`personal-sidebar-section-title`,children:[(0,z.jsx)(`span`,{children:`Goals`}),(0,z.jsxs)(`span`,{className:`personal-sidebar-title-actions`,children:[(0,z.jsx)(`small`,{children:g.length}),(0,z.jsx)(`button`,{"aria-label":f(`sidebar.sortGoals`),title:f(`sidebar.sortGoals`),"aria-pressed":p,onClick:()=>m(!p),type:`button`,children:(0,z.jsx)(zp,{"aria-hidden":`true`,size:15})}),i?(0,z.jsx)(`button`,{"aria-label":f(`sidebar.createGoal`),onClick:i,type:`button`,children:(0,z.jsx)(Em,{size:15})}):null]})]}),h.saveFailed?(0,z.jsx)(`p`,{role:`status`,children:f(`sidebar.orderNotSaved`)}):null,(0,z.jsx)(`span`,{className:`personal-sr-only`,role:`status`,children:h.lastMoved?f(`sidebar.goalMoved`,{goal:h.lastMoved.title,position:h.lastMoved.position}):``}),(0,z.jsx)(`div`,{className:`personal-goal-list`,children:g.map(e=>v(e,!1))}),_.length||n.phase===`loading`||n.phase===`error`?(0,z.jsxs)(`details`,{className:`personal-stopped-goals`,open:n.phase===`error`||void 0,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(qp,{size:13}),(0,z.jsx)(`span`,{children:f(`sidebar.stopped`)}),n.phase===`loading`?(0,z.jsx)(hm,{"aria-label":f(`sidebar.stoppedLoading`),className:`is-spinning`,size:13}):(0,z.jsx)(`small`,{children:_.length})]}),(0,z.jsxs)(`div`,{className:`personal-goal-list is-stopped`,children:[n.phase===`error`?(0,z.jsxs)(`div`,{className:`personal-stopped-goal-error`,role:`alert`,children:[(0,z.jsx)(`span`,{children:f(`sidebar.stoppedLoadFailed`)}),o?(0,z.jsx)(`button`,{onClick:o,type:`button`,children:f(`sidebar.retryStopped`)}):null]}):null,_.map(e=>v(e,!0))]})]}):null]}),(0,z.jsxs)(`div`,{className:`personal-sidebar-footer`,children:[(0,z.jsx)(zy,{}),a?(0,z.jsxs)(`button`,{"aria-label":f(`settings.open`),className:`personal-sidebar-utility`,onClick:a,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-sidebar-utility-icon`,children:(0,z.jsx)(Fm,{size:17})}),(0,z.jsxs)(`span`,{className:`personal-sidebar-utility-copy`,children:[(0,z.jsx)(`strong`,{children:f(`settings.open`)}),(0,z.jsx)(`small`,{children:f(`settings.eyebrow`)})]}),(0,z.jsx)(Jp,{"aria-hidden":`true`,size:15})]}):null]})]})}var tb=J({ok:X(!0),total:G().int().nonnegative(),next_cursor:W().nullable(),items:q(J({todo_id:W(),text:W(),claimed_by:W().nullable(),evidence:W().nullable(),priority:W().nullable(),task_class:W().nullable()})).max(40)});function nb({goal:e,agentId:t,seed:n,enabled:r,listView:i=!1,onSelect:a}){let{t:o}=Ji(),s=(0,R.useId)(),[c,l]=(0,R.useState)(!1),u=!i||c,d=i?96:148,[f,p]=(0,R.useState)(n),[m,h]=(0,R.useState)(t===`all`?e.doneTodoCount??n.length:n.length),[g,_]=(0,R.useState)(void 0),[v,y]=(0,R.useState)(!1),[b,x]=(0,R.useState)(!1),[S,C]=(0,R.useState)(!1),[w,T]=(0,R.useState)({top:0,height:600}),[E,D]=(0,R.useState)(null),O=(0,R.useRef)(null),k=(0,R.useRef)(null),[ee,A]=(0,R.useState)(0);(0,R.useEffect)(()=>{let e=O.current;if(!e)return;let t=new ResizeObserver(()=>T({top:e.scrollTop,height:e.clientHeight}));return t.observe(e),()=>{t.disconnect(),k.current?.abort()}},[]);let j=g===void 0||w.top+w.height>=f.length*d-d*2;(0,R.useEffect)(()=>{if(!r||!u||!j||g===null||b||k.current)return;let n=new AbortController;k.current=n,y(!0);let i=new URLSearchParams({goal_id:e.goalId});t!==`all`&&i.set(`agent_id`,t),g&&i.set(`cursor`,g),fetch(`/api/chat/completed-todos?${i}`,{signal:n.signal}).then(async e=>{if(e.status===409&&C(!0),!e.ok)throw Error(`history unavailable`);let t=tb.parse(await e.json());if(n.signal.aborted)return;let r=t.items.map(e=>({todoId:e.todo_id,text:e.text,claimedBy:e.claimed_by,evidence:e.evidence,priority:e.priority,taskClass:e.task_class,done:!0,status:`done`}));p(e=>g===void 0?r:[...e,...r.filter(t=>!e.some(e=>e.todoId===t.todoId))]),h(t.total),_(t.next_cursor)}).catch(()=>{n.signal.aborted||x(!0)}).finally(()=>{n.signal.aborted||(k.current=null,y(!1))})},[r,u,j,g,b,ee,e.goalId,t,v]),(0,R.useEffect)(()=>{O.current&&(O.current.scrollTop=0),T({top:0,height:O.current?.clientHeight??600}),D(null)},[i]);let te=Math.max(0,Math.floor(w.top/d)-3),ne=Math.min(f.length,Math.ceil((w.top+w.height)/d)+3),re=Array.from({length:Math.max(0,ne-te)},(e,t)=>te+t);return E!==null&&El(e=>!e),children:[(0,z.jsx)(`span`,{"aria-hidden":`true`,children:c?`▾`:`▸`}),` `,o(`tasks.completed`)]}):(0,z.jsxs)(`strong`,{children:[(0,z.jsx)(`i`,{"aria-hidden":`true`,className:`personal-kanban-dot tone-done`}),o(`tasks.completed`)]}),(0,z.jsx)(`span`,{children:m})]}),(0,z.jsxs)(`div`,{id:s,hidden:!u,"aria-label":o(`tasks.completed`),className:`personal-task-lane-scroll`,ref:O,role:`region`,tabIndex:0,onScroll:e=>T({top:e.currentTarget.scrollTop,height:e.currentTarget.clientHeight}),children:[(0,z.jsx)(`div`,{className:`personal-completed-window`,style:{height:f.length*d},children:re.map(t=>{let n=f[t];return(0,z.jsx)(`div`,{className:`personal-task-card personal-completed-row`,style:{top:t*d,height:d},children:(0,z.jsxs)(`button`,{type:`button`,onFocus:()=>D(t),onBlur:()=>D(null),onClick:()=>a({kind:`todo`,item:{...n,goalId:e.goalId,goalTitle:e.title,ownerLabel:n.claimedBy??e.agentLabel??e.agentId}}),children:[(0,z.jsx)(`span`,{className:`is-done`,children:`✓`}),(0,z.jsx)(`strong`,{children:n.text}),(0,z.jsx)(`small`,{children:n.claimedBy??e.agentLabel??e.agentId})]})},n.todoId)})}),(0,z.jsx)(`div`,{className:`personal-completed-footer`,role:`status`,children:v?o(`tasks.historyLoading`):b?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`span`,{children:o(S?`tasks.historyExpired`:`tasks.historyError`)}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>{S&&(_(void 0),O.current&&(O.current.scrollTop=0)),C(!1),x(!1),A(e=>e+1)},children:o(`tasks.historyRetry`)})]}):r?g===null?o(`tasks.historyEnd`):(0,z.jsx)(`button`,{type:`button`,onClick:()=>{O.current&&(O.current.scrollTop=f.length*d)},children:o(`tasks.historyMore`)}):o(`tasks.historyLocalOnly`)})]})]})}function rb({children:e,count:t,label:n,tone:r,listView:i=!1}){let a=(0,R.useId)(),o=(0,R.useRef)(null),s=(0,R.useRef)([]),c=(0,R.useRef)(null),[l,u]=(0,R.useState)({after:!1,before:!1}),d=(0,R.useCallback)(()=>{let e=o.current;if(!e)return;let t={after:Math.max(0,e.scrollHeight-e.clientHeight)-e.scrollTop>1,before:e.scrollTop>1};u(e=>e.after===t.after&&e.before===t.before?e:t)},[]);return(0,R.useEffect)(()=>{let e=o.current;if(!e)return;let t=new ResizeObserver(d);return c.current=t,t.observe(e),e.addEventListener(`scroll`,d,{passive:!0}),d(),()=>{t.disconnect(),c.current=null,s.current=[],e.removeEventListener(`scroll`,d)}},[i,d]),(0,R.useEffect)(()=>{let e=o.current,t=c.current;if(!e||!t)return;for(let e of s.current)t.unobserve(e);let n=Array.from(e.children).filter(e=>e instanceof HTMLElement);for(let e of n)t.observe(e);s.current=n,d()},[e,t,i,d]),i?!t&&r!==`done`?null:(0,z.jsxs)(`details`,{className:`personal-task-group tone-${r}`,open:!0,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(qp,{size:16}),(0,z.jsx)(`strong`,{children:n}),(0,z.jsx)(`span`,{children:t})]}),(0,z.jsx)(`div`,{className:`personal-task-list-rows`,children:e})]}):(0,z.jsxs)(`section`,{className:`personal-object-list personal-task-lane`,children:[(0,z.jsxs)(`header`,{id:a,children:[(0,z.jsxs)(`strong`,{children:[(0,z.jsx)(`i`,{"aria-hidden":`true`,className:`personal-kanban-dot tone-${r}`}),n]}),(0,z.jsx)(`span`,{children:t})]}),(0,z.jsx)(`div`,{"aria-labelledby":a,className:`personal-task-lane-scroll${l.before?` has-overflow-before`:``}${l.after?` has-overflow-after`:``}`,ref:o,role:`region`,tabIndex:t>0?0:-1,children:e})]})}function ib({historyEnabled:e=!1,goal:t,items:n,onDraftTaskFromMessage:r,onOpenChat:i,onQuickComplete:a,quickCompletingTodoIds:o,onSelect:s,selectedTodoId:c=null,userTodos:l}){let{t:u}=Ji(),[d,f]=(0,R.useState)(!1),[p,m]=(0,R.useState)({goalId:``,laneId:`all`}),h=(0,R.useRef)(null);(0,R.useEffect)(()=>{if(!c)return;let e=window.requestAnimationFrame(()=>h.current?.scrollIntoView({block:`nearest`,inline:`nearest`}));return()=>window.cancelAnimationFrame(e)},[c]);let g=l.filter(e=>e.goalId===t.goalId).map(e=>({...e,goalTitle:t.title})),_=e=>e.priority===`P0`?0:e.priority===`P1`?1:e.priority===`P2`?2:3,v=(0,R.useMemo)(()=>{let e=new Map((t.agentLanes??[]).map(e=>[e.agentId,e]));for(let n of t.agentTodos)n.claimedBy&&!e.has(n.claimedBy)&&e.set(n.claimedBy,{agentId:n.claimedBy,label:n.claimedBy});return[...e.values()]},[t.agentLanes,t.agentTodos]),y=p.goalId===t.goalId&&v.some(e=>e.agentId===p.laneId)?p.laneId:`all`,b=e=>y===`all`||e===y,x=t.agentTodos.filter(e=>e.taskClass!==`continuous_monitor`&&!e.done).filter(e=>b(e.claimedBy)).sort((e,t)=>_(e)-_(t)),S=t.agentTodos.filter(e=>e.taskClass!==`continuous_monitor`&&e.done).filter(e=>b(e.claimedBy)),C=n.filter(e=>e.kind===`schedule`&&b(e.schedule.agentId)),w=n.filter(e=>e.kind===`run`&&!!e.run.todoId&&b(e.run.agentId)),T=!g.length&&!x.length&&!S.length&&!C.length,E=n.filter(e=>e.kind===`message`&&(e.message.role===`user`||e.message.role===`assistant`)),D=E.reduce((e,t,n)=>t.message.role===`user`?n:e,-1),O=D>=0?E[D]?.message:null,k=D>=0?E.slice(D+1).reverse().find(e=>e.message.role===`assistant`)?.message:null,ee=D>=0&&E.slice(D+1).some(e=>e.message.role===`assistant`&&e.message.pending);return(0,z.jsxs)(`section`,{"aria-label":u(`header.tasks`),className:`personal-task-board${d?` is-list-view`:``}`,children:[(0,z.jsxs)(`header`,{className:`personal-task-view-toolbar`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:u(`header.tasks`)}),(0,z.jsx)(`span`,{children:u(`tasks.viewDescription`)})]}),(0,z.jsxs)(`div`,{className:`personal-task-view-switch`,role:`group`,"aria-label":u(`tasks.viewLabel`),children:[(0,z.jsx)(`button`,{type:`button`,"aria-pressed":d,onClick:()=>f(!0),children:u(`tasks.listView`)}),(0,z.jsx)(`button`,{type:`button`,"aria-pressed":!d,onClick:()=>f(!1),children:u(`tasks.boardView`)})]})]}),v.length>1?(0,z.jsxs)(`section`,{"aria-label":u(`tasks.agentLaneFilter`),className:`personal-task-lane-filter`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(Up,{size:15}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:u(`tasks.agentLane`)}),(0,z.jsx)(`small`,{children:u(`tasks.agentLaneDescription`)})]})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{className:`sr-only`,children:u(`tasks.agentLaneFilter`)}),(0,z.jsxs)(`select`,{"aria-label":u(`tasks.agentLaneFilter`),onChange:e=>m({goalId:t.goalId,laneId:e.target.value}),value:y,children:[(0,z.jsx)(`option`,{value:`all`,children:u(`tasks.allAgentLanes`,{count:v.length})}),v.map(e=>(0,z.jsx)(`option`,{value:e.agentId,children:e.label},e.agentId))]}),(0,z.jsx)(qp,{"aria-hidden":!0,size:14})]})]}):null,O?(0,z.jsxs)(`section`,{"aria-label":u(`tasks.chatRecent`),className:`personal-task-chat-receipt`,children:[(0,z.jsx)(`span`,{className:`personal-task-chat-icon`,children:(0,z.jsx)(ym,{size:18})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:u(ee?`tasks.chatPending`:k?`tasks.chatAgentReplied`:`tasks.chatRecent`)}),(0,z.jsx)(`small`,{children:t.agentLabel??t.agentId})]}),(0,z.jsxs)(`p`,{className:`is-user`,children:[(0,z.jsx)(`b`,{children:u(`common.you`)}),O.text]}),k&&!k.pending?(0,z.jsxs)(`p`,{className:`is-assistant`,children:[(0,z.jsx)(`b`,{children:u(`common.agent`)}),k.text]}):null,(0,z.jsx)(`small`,{children:u(ee?`tasks.chatPendingDescription`:`tasks.chatUnchangedDescription`)})]}),(0,z.jsxs)(`footer`,{children:[(0,z.jsxs)(`button`,{onClick:i,type:`button`,children:[(0,z.jsx)(ym,{size:14}),u(`tasks.chatViewReply`)]}),k&&!ee&&r?(0,z.jsxs)(`button`,{onClick:()=>r(k.text),type:`button`,children:[(0,z.jsx)(mm,{size:14}),u(`tasks.convertToTask`)]}):null]})]}):null,(0,z.jsxs)(`div`,{className:d?`personal-task-grouped-list`:`personal-task-kanban`,children:[(0,z.jsxs)(rb,{listView:d,count:g.length,label:u(`timeline.waitingConfirmation`),tone:`attention`,children:[g.map(e=>{let t=Zi(e.updatedAt,u);return(0,z.jsxs)(`button`,{onClick:()=>s({item:e,kind:`attention`}),type:`button`,children:[(0,z.jsx)(`span`,{"aria-hidden":`true`,className:`is-attention`,children:`!`}),(0,z.jsx)(`strong`,{children:e.text}),(0,z.jsxs)(`small`,{children:[(0,z.jsx)(`span`,{className:`personal-row-status ${e.blocking?`is-blocking`:`is-pending`}`,children:e.blocking?u(`tasks.blocked`):u(`tasks.pending`)}),t?(0,z.jsx)(`span`,{className:`personal-task-age`,children:u(`tasks.waitingAge`,{age:t})}):null]})]},e.todoId)}),g.length?null:(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyConfirm`)})]}),(0,z.jsxs)(rb,{listView:d,count:x.length,label:u(`tasks.pendingAndRunning`),tone:`progress`,children:[x.map(e=>{let n={...e,goalId:t.goalId,goalTitle:t.title,ownerLabel:e.claimedBy??t.agentLabel??t.agentId},r=w.find(t=>t.run.todoId===e.todoId)?.run;return(0,z.jsxs)(`div`,{className:`personal-task-card${r?` has-session`:``}${c===e.todoId?` is-selected`:``}`,ref:c===e.todoId?e=>{h.current=e}:void 0,children:[(0,z.jsxs)(`button`,{"aria-pressed":c===e.todoId,onClick:()=>s({item:n,kind:`todo`}),type:`button`,children:[(0,z.jsx)(`span`,{children:`○`}),(0,z.jsx)(`strong`,{children:e.text}),(0,z.jsxs)(`small`,{children:[e.priority?(0,z.jsx)(`span`,{className:`personal-priority-badge is-${e.priority.toLowerCase()}`,children:e.priority}):null,e.status===`blocked`?(0,z.jsx)(`span`,{className:`personal-priority-badge is-blocked`,children:u(`tasks.blocked`)}):null,r?(0,z.jsx)(`span`,{className:`personal-task-session-status`,children:r.status===`running`||r.status===`queued`?u(`runs.running`):r.status===`failed`?u(`tasks.sessionError`):u(`common.waiting`)}):null,e.status===`deferred`?(0,z.jsx)(`span`,{className:`personal-task-session-status`,children:u(`drawer.taskStatusDeferred`)}):r?null:(0,z.jsx)(`span`,{className:`personal-task-session-status`,children:u(`tasks.waiting`)}),e.claimedBy??t.agentLabel??t.agentId]})]}),(0,z.jsxs)(`div`,{className:`personal-task-card-actions`,children:[r?(0,z.jsxs)(`button`,{className:`personal-task-session-link`,"aria-label":u(`tasks.openExecution`,{name:e.text}),onClick:()=>s({item:r,kind:`run`}),title:r.status===`completed`?u(`tasks.viewResult`):u(`tasks.viewExecution`),type:`button`,children:[(0,z.jsx)(im,{size:14}),(0,z.jsx)(`span`,{children:r.status===`completed`?u(`tasks.viewResult`):u(`tasks.viewExecution`)})]}):null,a?(0,z.jsx)(`button`,{"aria-busy":o?.has(e.todoId)||void 0,"aria-label":u(`tasks.markComplete`,{name:e.text}),disabled:o?.has(e.todoId),onClick:()=>void a(n),title:u(`tasks.completed`),type:`button`,children:o?.has(e.todoId)?(0,z.jsx)(hm,{className:`personal-spin`,size:14}):(0,z.jsx)(Kp,{size:14})}):null,(0,z.jsx)(`button`,{"aria-label":u(`tasks.moreActions`,{name:e.text}),onClick:()=>s({item:n,kind:`todo`}),title:u(`common.actions`),type:`button`,children:(0,z.jsx)(rm,{size:14})})]})]},e.todoId)}),x.length?null:(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyRunning`)})]}),(0,z.jsxs)(rb,{listView:d,count:C.length,label:u(`tasks.scheduled`),tone:`schedule`,children:[C.map(e=>(0,z.jsxs)(`button`,{onClick:()=>s({item:e.schedule,kind:`schedule`}),type:`button`,children:[(0,z.jsx)(`span`,{children:`◷`}),(0,z.jsx)(`strong`,{children:e.schedule.label}),(0,z.jsx)(`small`,{children:e.schedule.status===`paused`?u(`schedule.paused`):u(`schedule.active`)})]},e.id)),C.length?null:(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptySchedules`)})]}),(0,z.jsx)(nb,{goal:t,agentId:y,seed:S,enabled:e,listView:d,onSelect:s},`${t.goalId}:${y}:${e}`)]}),T?(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyGoal`)}):null]})}function ab(e,t){return{live_steering:{label:t(`lark.ingressSteering`),detail:t(`lark.ingressSteeringDescription`)},session_queue:{label:t(`lark.ingressQueue`),detail:t(`lark.ingressQueueDescription`)},async_inbox:{label:t(`lark.ingressAsync`),detail:t(`lark.ingressAsyncDescription`)},direct_session:{label:t(`lark.ingressLegacy`),detail:t(`lark.ingressLegacyDescription`)}}[e]}function ob(e,t){return e.listener_status===`starting`?{label:t(`lark.health.starting`),detail:t(`lark.health.startingDetail`),ready:!1}:e.listener_status===`retrying`?{label:t(`lark.health.retrying`),detail:t(`lark.health.retryingDetail`),ready:!1}:e.listener_status===`stopped`||e.listener_status===null?{label:t(`lark.health.notStarted`),detail:t(`lark.health.notStartedDetail`),ready:!1}:e.last_event_status===`message_context_permission_required`?{label:t(`lark.health.messageContextPermission`),detail:t(`lark.health.messageContextPermissionDetail`),ready:!1}:e.last_event_status===`processing_failed`?{label:t(`lark.health.processingFailed`),detail:t(`lark.health.processingFailedDetail`),ready:!1}:e.health_error_code===`invalid_routing_state`?{label:t(`lark.health.invalidRouting`),detail:t(`lark.health.invalidRoutingDetail`),ready:!1}:e.last_event_status===`queued_for_agent`?{label:t(`lark.health.queued`),detail:t(`lark.health.queuedDetail`,{agent:e.agent_id??t(`lark.targetAgent`)}),ready:!0}:e.last_event_status===`ignored`&&e.last_event_reason===`not_addressed`?{label:t(`lark.health.notAddressed`),detail:t(`lark.health.notAddressedDetail`),ready:!0}:e.last_event_status===`ignored`&&e.last_event_reason===`self_message`?{label:t(`lark.health.listening`),detail:t(`lark.health.ignoredSelf`),ready:!0}:e.health_error_code===`lark_event_route_mismatch`||[`chat_mismatch`,`topic_mismatch`,`route_ambiguous`].includes(e.last_event_reason??``)?{label:e.last_event_reason===`route_ambiguous`?t(`lark.health.routeAmbiguous`):t(`lark.health.routeMismatch`),detail:e.last_event_reason===`route_ambiguous`?t(`lark.health.routeAmbiguousDetail`):t(`lark.health.routeMismatchDetail`),ready:!1}:[`invalid_event`,`binding_unavailable`].includes(e.last_event_reason??``)?{label:t(`lark.health.routeUnavailable`),detail:t(`lark.health.routeUnavailableDetail`),ready:!1}:e.last_event_status===`replied_and_acknowledged`?{label:t(`lark.health.listening`),detail:t(`lark.health.eventProcessed`,{events:e.event_count,replies:e.replied_count}),ready:!0}:e.health_error_code===`lark_event_delivery_unverified`||e.event_count===0?{label:t(`lark.health.eventUnverified`),detail:t(`lark.health.eventUnverifiedDetail`),ready:!1}:{label:e.reply_ready?t(`lark.health.listening`):t(`lark.health.unavailable`),detail:t(`lark.health.lastStatus`,{status:e.last_event_status??t(`lark.health.waiting`)}),ready:e.reply_ready}}function sb(e){return e.history_permission_guidance?.api_document_url??null}function cb(e,t,n){if(e instanceof _h){let t=String(e.payload.error_code??``);return{lark_cli_not_installed:n(`lark.error.cliMissing`),lark_cli_not_executable:n(`lark.error.cliExecutable`),lark_cli_start_failed:n(`lark.error.cliStart`),lark_message_permissions_required:n(`lark.error.messagePermissions`),lark_app_required:n(`lark.error.appRequired`),invalid_lark_app:n(`lark.error.invalidApp`),lark_group_lookup_failed:n(`lark.error.groupLookup`),provider_api_failed:n(`lark.error.provider`)}[t]??e.message}return e instanceof Error?e.message:t}function lb({embedded:e=!1,focusGoalConnection:t=!1,goals:n,initialGoalId:r,onChanged:i,onClose:a}){let{t:o}=Ji(),[s,c]=(0,R.useState)(`connections`),[l,u]=(0,R.useState)([]),[d,f]=(0,R.useState)([]),[p,m]=(0,R.useState)(!0),[h,g]=(0,R.useState)(null),[_,v]=(0,R.useState)(``),[y,b]=(0,R.useState)(t),[x,S]=(0,R.useState)(``),[C,w]=(0,R.useState)(r??n[0]?.goalId??``),[T,E]=(0,R.useState)(``),[D,O]=(0,R.useState)([]),[k,ee]=(0,R.useState)(``),[A,j]=(0,R.useState)(!1),[te,ne]=(0,R.useState)(null),[re,M]=(0,R.useState)(`addressed_only`),[N,ie]=(0,R.useState)(`async_inbox`),[ae,oe]=(0,R.useState)(`topic_reply`),[P,F]=(0,R.useState)(``),[I,se]=(0,R.useState)(!1),[ce,le]=(0,R.useState)({}),[ue,de]=(0,R.useState)(!1),[fe,pe]=(0,R.useState)(null),[me,he]=(0,R.useState)(null),[ge,_e]=(0,R.useState)(null),[ve,ye]=(0,R.useState)(!1),[be,xe]=(0,R.useState)(`loopx-workspace-bot`),[Se,Ce]=(0,R.useState)(`feishu`),[we,Te]=(0,R.useState)(null),[Ee,De]=(0,R.useState)(!1),[L,Oe]=(0,R.useState)(null),ke=(0,R.useRef)(null),Ae=(0,R.useRef)(null),je=(0,R.useRef)(!1);async function Me(){m(!0),g(null);try{let[e,t]=await Promise.all([Og(),Lg()]);u(e),f(t),S(t=>t||e.find(e=>e.reply_ready)?.app_ref||e.find(e=>e.ready)?.app_ref||e[0]?.app_ref||``)}catch(e){g(cb(e,o(`lark.error.configuration`),o))}finally{m(!1)}}(0,R.useEffect)(()=>{Me()},[]),(0,R.useEffect)(()=>{if(!t||p||je.current||!r)return;je.current=!0;let e=d.find(e=>e.goal_id===r);e?Ue(e):He(n.find(e=>e.goalId===r))},[d,t,n,r,p]),(0,R.useEffect)(()=>{if(!y||!x){O([]),ee(``),j(!1),ne(null);return}let e=!1;j(!0),ne(null);let t=window.setTimeout(()=>{Fg(x,T).then(t=>{e||(O(t),ee(e=>t.some(t=>t.chat_id===e)?e:t[0]?.chat_id??``))}).catch(t=>{e||(O([]),ee(``),ne(cb(t,o(`lark.error.groupLoad`),o)))}).finally(()=>{e||j(!1)})},180);return()=>{e=!0,window.clearTimeout(t)}},[x,T,y]),(0,R.useEffect)(()=>{if(!ve||!we||[`ready`,`failed`,`cancelled`].includes(we.status))return;let e=!1,t=window.setTimeout(()=>{jg(we.setup_id).then(async t=>{e||(Te(t),t.verification_url&&Ae.current!==t.verification_url&&(Ae.current=t.verification_url,ke.current&&!ke.current.closed&&(ke.current.location.href=t.verification_url)),t.status===`ready`&&(await Me(),S(t.app_ref),le({}),ye(!1)),t.status===`failed`&&Oe(t.error??o(`lark.error.appCreate`)))}).catch(t=>{e||Oe(cb(t,o(`lark.error.setupPoll`),o))})},650);return()=>{e=!0,window.clearTimeout(t)}},[ve,we]);let Ne=n.find(e=>e.goalId===C),Pe=Ne?.agentId?[{agentId:Ne.agentId,label:Ne.agentLabel??Ne.agentId}]:[],Fe=Ne?.agentLanes?.length?Ne.agentLanes:Pe,Ie=Fe.some(e=>e.agentId===P),B=[];I?B=Fe.map(e=>({agentId:e.agentId,appRef:ce[e.agentId]??x})):Ie&&(B=[{agentId:P,appRef:x}]);let Le=B.map(e=>e.agentId),Re=B.length>0&&B.every(e=>l.some(t=>t.app_ref===e.appRef&&t.reply_ready)),V=o(`lark.connect`);me?V=o(`lark.saveConnection`):I&&(V=o(`lark.connectAllAgentsAction`,{count:Le.length}));let ze=l.find(e=>e.app_ref===x),Be=D.find(e=>e.chat_id===k),Ve=(0,R.useMemo)(()=>{let e=_.trim().toLocaleLowerCase();return e?d.filter(t=>[t.app_label,t.chat_name,t.goal_title,t.topic_name].some(t=>t.toLocaleLowerCase().includes(e))):d},[d,_]);function He(e){let t=e??n.find(e=>e.goalId===r)??n[0];he(null),w(t?.goalId??``),F(t?.agentId??``),se(!1),le({}),M(`addressed_only`),ie(`async_inbox`),oe(`topic_reply`),E(``),pe(null),b(!0)}function Ue(e){he(e.goal_id),S(e.app_ref),w(e.goal_id),F(e.agent_id??n.find(t=>t.goalId===e.goal_id)?.agentId??``),se(!1),le({}),M(e.capture_scope),ie(e.ingress_mode===`direct_session`?`session_queue`:e.ingress_mode),oe(e.reply_mode),E(e.chat_name),pe(null),b(!0)}function We(){Te(null),Oe(null),Ae.current=null,ye(!0)}async function Ge(){if(!(Ee||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(be))){De(!0),Oe(null),Ae.current=null,ke.current=window.open(window.location.href,`_blank`);try{let e=await Ag({appRef:be,brand:Se});Te(e)}catch(e){ke.current?.close(),Oe(cb(e,o(`lark.error.setupStart`),o))}finally{De(!1)}}}async function Ke(){let e=we;if(ye(!1),ke.current?.close(),e&&![`ready`,`failed`,`cancelled`].includes(e.status))try{await Mg(e.setup_id)}catch{}}async function qe(){if(!(!x||!C||!Be||Le.length===0||ue)){de(!0),pe(null);try{let e={agentBindings:B,captureScope:re,chatId:Be.chat_id,chatName:Be.chat_name,goalId:C,incomingMode:re===`configured_chat_all`?`all`:`mentions`,ingressMode:N,replyMode:ae},t=await Rg({...e,execute:!1});if(!t.ok)throw new _h(t.public_summary??t.blocker??o(`lark.error.bindPreview`),{error_code:t.blocker??`provider_api_failed`});let n=await Rg({...e,execute:!0});if(!n.ok)throw new _h(n.public_summary??n.blocker??o(`lark.error.bind`),{error_code:n.blocker??`provider_api_failed`});b(!1),await Me(),i?.()}catch(e){pe(cb(e,o(`lark.error.bind`),o))}finally{de(!1)}}}async function Je(e,t){if(ge!==t){_e(t);return}try{await zg(e,t),_e(null),await Me(),i?.()}catch(e){g(cb(e,o(`lark.error.disconnect`),o))}}return(0,z.jsxs)(`section`,{className:`personal-lark-settings${e?` is-embedded`:``}`,"aria-label":o(`lark.configuration`),children:[e?null:(0,z.jsxs)(`header`,{className:`personal-lark-header`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:o(`settings.goalConnections`)}),(0,z.jsx)(`h1`,{children:`Lark`}),(0,z.jsx)(`p`,{children:o(`lark.description`)})]}),(0,z.jsx)(`button`,{"aria-label":o(`lark.closeSettings`),className:`personal-icon-button`,onClick:a,type:`button`,children:(0,z.jsx)(Gm,{size:18})})]}),(0,z.jsxs)(`nav`,{className:`personal-lark-tabs`,"aria-label":o(`lark.management`),children:[(0,z.jsxs)(`button`,{"aria-current":s===`apps`?`page`:void 0,onClick:()=>c(`apps`),type:`button`,children:[o(`lark.apps`),` `,(0,z.jsx)(`span`,{children:p?`…`:l.length})]}),(0,z.jsxs)(`button`,{"aria-current":s===`connections`?`page`:void 0,onClick:()=>c(`connections`),type:`button`,children:[o(`lark.connections`),` `,(0,z.jsx)(`span`,{children:p?`…`:d.length})]})]}),h?(0,z.jsx)(`p`,{className:`personal-notification-error`,children:h}):null,p?(0,z.jsxs)(`div`,{className:`personal-lark-loading`,children:[(0,z.jsx)(hm,{className:`is-spinning`,size:18}),o(`lark.loading`)]}):null,!p&&s===`apps`?(0,z.jsxs)(`div`,{className:`personal-lark-apps`,children:[(0,z.jsxs)(`div`,{className:`personal-lark-app-toolbar`,children:[(0,z.jsx)(`span`,{children:o(`lark.reusableApps`,{count:l.length})}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:We,type:`button`,children:[(0,z.jsx)(Em,{size:16}),o(`lark.newApp`)]})]}),(0,z.jsxs)(`div`,{className:`personal-lark-app-grid`,children:[l.map(e=>(0,z.jsxs)(`article`,{className:`personal-lark-app-card`,children:[(0,z.jsx)(`span`,{className:`personal-lark-app-avatar`,children:(0,z.jsx)(Up,{size:19})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsxs)(`small`,{children:[e.brand,` · lark-cli profile`]})]}),(0,z.jsx)(`em`,{className:e.reply_ready?`is-ready`:`is-off`,children:e.reply_ready?o(`lark.autoReplyReady`):e.ready?o(`lark.needsMessagePermissions`):o(`lark.needsSetup`)}),(0,z.jsxs)(`p`,{children:[o(`lark.goalConnections`,{count:d.filter(t=>t.app_ref===e.app_ref).length}),e.ready&&!e.reply_ready?` · ${o(`lark.autoReplyUnavailable`)}`:``]})]},e.app_ref)),l.length===0?(0,z.jsx)(`p`,{className:`personal-lark-empty`,children:o(`lark.noProfiles`)}):null]})]}):null,!p&&s===`connections`?(0,z.jsxs)(`div`,{className:`personal-lark-connections`,children:[(0,z.jsxs)(`div`,{className:`personal-lark-toolbar`,children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(jm,{size:16}),(0,z.jsx)(`input`,{"aria-label":o(`lark.searchConnections`),onChange:e=>v(e.target.value),placeholder:o(`lark.searchPlaceholder`),type:`search`,value:_})]}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:l.length===0||n.length===0,onClick:()=>He(),type:`button`,children:[(0,z.jsx)(Em,{size:16}),o(`lark.connectApp`)]})]}),(0,z.jsxs)(`div`,{className:`personal-lark-table`,role:`table`,"aria-label":o(`lark.goalTopicConnections`),children:[(0,z.jsxs)(`div`,{className:`personal-lark-table-head`,role:`row`,children:[(0,z.jsx)(`span`,{children:o(`lark.connection`)}),(0,z.jsx)(`span`,{children:o(`common.goal`)}),(0,z.jsx)(`span`,{children:o(`lark.capture`)}),(0,z.jsx)(`span`,{children:o(`lark.processing`)}),(0,z.jsx)(`span`,{children:o(`common.actions`)})]}),Ve.map(e=>(0,z.jsxs)(`div`,{className:`personal-lark-table-row`,role:`row`,children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.chat_name}),(0,z.jsxs)(`small`,{children:[e.app_label,` · `,ob(e,o).label]}),(0,z.jsx)(`small`,{children:ob(e,o).detail}),e.health_error_code===`lark_event_delivery_unverified`?(0,z.jsxs)(`a`,{href:`https://open.feishu.cn/document/server-docs/im-v1/message/events/receive?lang=zh-CN`,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(im,{size:12}),o(`lark.openEventSettings`)]}):null,sb(e)?(0,z.jsxs)(`a`,{href:sb(e)??void 0,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(im,{size:12}),o(`lark.historyPermission`)]}):null]}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.goal_title}),(0,z.jsxs)(`small`,{children:[`# `,e.topic_name]})]}),(0,z.jsx)(`span`,{children:e.capture_scope===`addressed_only`?o(`lark.mentionsOnly`):o(`lark.allTopicMessages`)}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:ab(e.ingress_mode,o).label}),(0,z.jsx)(`small`,{children:e.agent_id??ab(e.ingress_mode,o).detail})]}),(0,z.jsxs)(`span`,{className:`personal-lark-row-actions`,children:[(0,z.jsx)(`button`,{"aria-label":o(`lark.settingsConfigure`,{goal:e.goal_title}),onClick:()=>Ue(e),type:`button`,children:(0,z.jsx)(Fm,{size:15})}),(0,z.jsxs)(`button`,{"aria-label":o(`lark.settingsDisconnect`,{goal:e.goal_title}),className:ge===e.connection_id?`is-confirm`:``,onClick:()=>void Je(e.goal_id,e.connection_id),type:`button`,children:[(0,z.jsx)(Wm,{size:15}),ge===e.connection_id?o(`common.confirm`):null]})]})]},e.connection_id)),Ve.length===0?(0,z.jsx)(`p`,{className:`personal-lark-empty`,children:o(`lark.noConnections`)}):null]})]}):null,y?(0,z.jsx)(`div`,{className:`personal-lark-modal-backdrop`,role:`presentation`,children:(0,z.jsxs)(`section`,{"aria-labelledby":`connect-lark-title`,"aria-modal":`true`,className:`personal-lark-modal`,role:`dialog`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:`Goal Topic connection`}),(0,z.jsx)(`h2`,{id:`connect-lark-title`,children:o(me?`lark.editConnection`:`lark.connectApp`)})]}),(0,z.jsx)(`button`,{"aria-label":o(`lark.closeConnection`),onClick:()=>b(!1),type:`button`,children:(0,z.jsx)(Gm,{size:18})})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.appProfile`)}),(0,z.jsx)(`select`,{"aria-label":o(`lark.appProfile`),disabled:p,onChange:e=>{e.target.value===`__register__`?We():(S(e.target.value),le({}))},value:x,children:p?(0,z.jsx)(`option`,{value:``,children:o(`lark.appLoading`)}):(0,z.jsxs)(z.Fragment,{children:[l.map(e=>(0,z.jsxs)(`option`,{disabled:!e.ready,value:e.app_ref,children:[e.label,e.reply_ready?``:e.ready?` · ${o(`lark.needsMessagePermissions`)}`:` · ${o(`lark.needsSetup`)}`]},e.app_ref)),(0,z.jsx)(`option`,{value:`__register__`,children:o(`lark.registerAnother`)})]})}),(0,z.jsx)(`small`,{children:o(`lark.defaultAgentAppDescription`)})]}),ze?.ready&&!ze.reply_ready?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:o(`lark.appPermissions`)}):null,(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.groupChat`)}),(0,z.jsx)(`input`,{"aria-label":o(`lark.groupSearch`),onChange:e=>E(e.target.value),placeholder:o(`lark.groupSearch`),type:`search`,value:T}),A?(0,z.jsxs)(`div`,{className:`personal-lark-group-state`,role:`status`,children:[(0,z.jsx)(hm,{className:`is-spinning`,size:15}),o(`lark.groupLoading`)]}):null,!A&&te?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:te}):null,!A&&!te&&D.length===0?(0,z.jsx)(`div`,{className:`personal-lark-group-state`,role:`status`,children:o(`lark.groupEmpty`)}):null,!A&&!te&&D.length>0?(0,z.jsx)(`select`,{"aria-label":o(`lark.groupChat`),onChange:e=>ee(e.target.value),value:k,children:D.map(e=>(0,z.jsx)(`option`,{value:e.chat_id,children:e.chat_name},e.chat_id))}):null]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.bindGoal`)}),(0,z.jsx)(`select`,{"aria-label":o(`lark.bindGoal`),onChange:e=>{let t=e.target.value;w(t),F(n.find(e=>e.goalId===t)?.agentId??``),le({})},value:C,children:n.map(e=>(0,z.jsx)(`option`,{value:e.goalId,children:e.title},e.goalId))})]}),(0,z.jsxs)(`label`,{className:`personal-lark-check`,children:[(0,z.jsx)(`input`,{checked:!0,readOnly:!0,type:`checkbox`}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:o(`lark.createAutomatically`)}),(0,z.jsx)(`small`,{children:o(`lark.createAutomaticallyDescription`)})]})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.topicPreview`)}),(0,z.jsxs)(`div`,{className:`personal-lark-topic-preview`,children:[(0,z.jsx)(ym,{size:15}),`# `,Ne?.title??Ne?.goalId??`Goal`]})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.captureScope`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.captureScope`),onChange:e=>M(e.target.value),value:re,children:[(0,z.jsx)(`option`,{value:`addressed_only`,children:o(`lark.captureAddressed`)}),(0,z.jsx)(`option`,{value:`configured_chat_all`,children:o(`lark.captureAll`)})]}),(0,z.jsx)(`small`,{children:o(`lark.captureScopeDescription`)})]}),(0,z.jsxs)(`fieldset`,{"aria-label":o(`lark.agentIngress`),className:`personal-lark-ingress`,children:[(0,z.jsx)(`legend`,{children:o(`lark.agentIngress`)}),(0,z.jsx)(`div`,{children:[`live_steering`,`session_queue`,`async_inbox`].map(e=>{let t=ab(e,o);return(0,z.jsxs)(`label`,{className:N===e?`is-active`:``,children:[(0,z.jsx)(`input`,{"aria-label":t.label,checked:N===e,name:`lark-agent-ingress`,onChange:()=>ie(e),type:`radio`,value:e}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:t.label}),(0,z.jsx)(`small`,{children:t.detail})]})]},e)})})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.targetAgent`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.targetAgent`),onChange:e=>F(e.target.value),value:P,children:[Ie?null:(0,z.jsx)(`option`,{disabled:!0,value:P,children:P?o(`lark.agentUnavailable`,{agent:P}):o(`lark.noAgentConfigured`)}),Fe.map(e=>(0,z.jsx)(`option`,{value:e.agentId,children:e.label===e.agentId?e.agentId:`${e.label} · ${e.agentId}`},e.agentId))]}),(0,z.jsx)(`small`,{children:o(`lark.targetAgentDescription`)})]}),!me&&Fe.length>1?(0,z.jsxs)(`label`,{"aria-label":o(`lark.connectAllAgents`),className:`personal-lark-check`,children:[(0,z.jsx)(`input`,{checked:I,onChange:e=>se(e.target.checked),type:`checkbox`}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:o(`lark.connectAllAgents`)}),(0,z.jsx)(`small`,{children:o(`lark.connectAllAgentsDescription`,{count:Fe.length})})]})]}):null,!me&&I&&Fe.length>1?(0,z.jsxs)(`fieldset`,{"aria-label":o(`lark.agentApps`),className:`personal-lark-agent-apps`,children:[(0,z.jsx)(`legend`,{children:o(`lark.agentApps`)}),(0,z.jsx)(`small`,{children:o(`lark.agentAppsDescription`)}),(0,z.jsx)(`div`,{children:Fe.map(e=>(0,z.jsxs)(`label`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.agentId})]}),(0,z.jsx)(`select`,{"aria-label":o(`lark.agentAppSelection`,{agent:e.label}),onChange:t=>le(n=>({...n,[e.agentId]:t.target.value})),value:ce[e.agentId]??x,children:l.map(e=>(0,z.jsxs)(`option`,{disabled:!e.ready,value:e.app_ref,children:[e.label,e.reply_ready?``:e.ready?` · ${o(`lark.needsMessagePermissions`)}`:` · ${o(`lark.needsSetup`)}`]},e.app_ref))})]},e.agentId))})]}):null,I&&B.length>0&&!Re?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:o(`lark.agentAppPermissions`)}):null,Le.length===0?(0,z.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:o(`lark.selectRegisteredAgent`)}):null,(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.replyMode`)}),(0,z.jsx)(`select`,{"aria-label":o(`lark.replyMode`),onChange:e=>oe(e.target.value),value:ae,children:(0,z.jsx)(`option`,{value:`topic_reply`,children:o(`lark.topicReply`)})}),(0,z.jsx)(`small`,{children:o(`lark.replyModeDescription`)})]}),(0,z.jsxs)(`p`,{className:`personal-lark-cardinality`,children:[(0,z.jsx)(Kp,{size:15}),o(`lark.cardinality`)]}),fe?(0,z.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:fe}):null,(0,z.jsxs)(`footer`,{children:[(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>b(!1),type:`button`,children:o(`lark.cancel`)}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:p||!x||!ze?.reply_ready||!Re||!C||!k||Le.length===0||ue,onClick:()=>void qe(),type:`button`,children:[ue?(0,z.jsx)(hm,{className:`is-spinning`,size:15}):null,V]})]})]})}):null,ve?(0,z.jsx)(`div`,{className:`personal-lark-modal-backdrop is-setup`,role:`presentation`,children:(0,z.jsxs)(`section`,{"aria-labelledby":`new-lark-app-title`,"aria-modal":`true`,className:`personal-lark-modal personal-lark-setup-modal`,role:`dialog`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:o(`lark.reusableWorkspaceApp`)}),(0,z.jsx)(`h2`,{id:`new-lark-app-title`,children:o(`lark.newApp`)})]}),(0,z.jsx)(`button`,{"aria-label":o(`lark.closeCreate`),onClick:()=>void Ke(),type:`button`,children:(0,z.jsx)(Gm,{size:18})})]}),we?(0,z.jsxs)(`div`,{className:`personal-lark-setup-progress`,children:[(0,z.jsx)(`span`,{className:`personal-lark-setup-icon is-${we.status}`,children:we.status===`ready`?(0,z.jsx)(Kp,{size:22}):(0,z.jsx)(hm,{className:we.status===`failed`?``:`is-spinning`,size:22})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:we.status===`ready`?o(`lark.appCreated`):we.status===`failed`?o(`lark.appCreateFailed`):o(`lark.waitingFeishu`)}),(0,z.jsx)(`p`,{children:we.status===`waiting_for_feishu`?o(`lark.waitingFeishuDescription`):we.status===`starting`?o(`lark.waitingLink`):we.error})]}),we.verification_url?(0,z.jsxs)(`a`,{href:we.verification_url,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(im,{size:15}),o(`lark.reopenFeishu`)]}):null]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{className:`personal-lark-setup-copy`,children:o(`lark.setupCopy`)}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.profileName`)}),(0,z.jsx)(`input`,{"aria-label":o(`lark.profileName`),autoComplete:`off`,onChange:e=>xe(e.target.value),placeholder:`loopx-workspace-bot`,value:be})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.region`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.region`),onChange:e=>Ce(e.target.value),value:Se,children:[(0,z.jsx)(`option`,{value:`feishu`,children:`Feishu`}),(0,z.jsx)(`option`,{value:`lark`,children:`Lark`})]})]}),be&&!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(be)?(0,z.jsx)(`p`,{className:`personal-notification-error`,children:o(`lark.profileValidation`)}):null]}),L?(0,z.jsx)(`p`,{className:`personal-notification-error`,children:L}):null,(0,z.jsxs)(`footer`,{children:[(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void Ke(),type:`button`,children:o(`lark.cancel`)}),we?null:(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:Ee||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(be),onClick:()=>void Ge(),type:`button`,children:[Ee?(0,z.jsx)(hm,{className:`is-spinning`,size:15}):(0,z.jsx)(im,{size:15}),o(`lark.continueFeishu`)]})]})]})}):null]})}function ub(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function db(e,t,n){let r=ub(t),i=ub(n);return Object.fromEntries(e.fields.flatMap(({key:e})=>{let t=r[e],n=i[e];return Object.hasOwn(r,e)&&t!=null?[[e,t]]:Object.hasOwn(i,e)&&n!=null?[[e,n]]:[]}))}function fb({children:e}){return e?(0,z.jsx)(`small`,{children:e}):null}function pb({copy:e,field:t,id:n,onChange:r,value:i}){let a=e[t.key]?.label??t.label,o=e[t.key]?.description??t.description,s=!r;if(t.input_kind===`boolean`)return(0,z.jsxs)(`label`,{className:`is-boolean`,htmlFor:n,children:[(0,z.jsx)(`span`,{children:a}),(0,z.jsx)(`input`,{checked:i===!0,id:n,onChange:r?e=>r(t.key,e.target.checked):void 0,readOnly:s,type:`checkbox`}),(0,z.jsx)(fb,{children:o})]});if(t.input_kind===`select`)return(0,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:a}),(0,z.jsxs)(`select`,{id:n,onChange:r?e=>r(t.key,e.target.value):void 0,value:typeof i==`string`?i:``,children:[(0,z.jsx)(`option`,{value:``}),(t.options??[]).map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]}),(0,z.jsx)(fb,{children:o})]});if(t.input_kind===`string_list`)return(0,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:a}),(0,z.jsx)(`textarea`,{id:n,onChange:r?e=>r(t.key,e.target.value.split(/\r?\n/u).filter(Boolean)):void 0,readOnly:s,rows:4,value:Array.isArray(i)?i.join(` +`):``}),(0,z.jsx)(fb,{children:o})]});let c=t.input_kind===`number`;return(0,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:a}),(0,z.jsx)(`input`,{id:n,max:t.maximum,min:t.minimum,onChange:r?e=>r(t.key,c?Number(e.target.value):e.target.value):void 0,readOnly:s,required:t.required,type:c?`number`:`text`,value:typeof i==`number`||typeof i==`string`?i:``}),(0,z.jsx)(fb,{children:o})]})}function mb({copy:e={},disabled:t=!1,editor:n,omitKeys:r=[],onChange:i,value:a}){let o=(0,R.useId)(),s=new Set(r);return(0,z.jsx)(`fieldset`,{className:`personal-capability-fields`,disabled:t,children:n.fields.filter(e=>!s.has(e.key)).map(t=>(0,z.jsx)(pb,{copy:e,field:t,id:`${o}-${t.key.replace(/[^a-z0-9_-]/gi,`-`)}`,onChange:i,value:a[t.key]},t.key))})}var hb={en:{change_quality_qualification:{displayName:`Change quality qualification`,description:`Prepares a provider-neutral review packet, allows at most one policy-authorized safe-fix pass, and can require an exact-diff receipt.`},explore_graph:{displayName:`Explore Graph`,description:`Organizes bounded exploration as a typed evidence graph so branches, findings, and synthesis remain inspectable.`},explore_harness:{displayName:`Explore Harness`,description:`Selects a capability-owned planning and research harness profile for bounded multi-step exploration.`},lark_event_inbox:{displayName:`Lark event inbox`,description:`Receives provider events through a local-private inbox binding before LoopX projects them into governed work.`,readOnlyReason:`This capability requires a local-private inbox binding. Manage it in Lark settings or through the capability CLI.`},lark_kanban_heartbeat_sync:{displayName:`Lark Kanban heartbeat sync`,description:`Synchronizes accepted LoopX work state to the configured Lark Kanban heartbeat surface.`},local_authority_shadow:{displayName:`Local authority shadow`,description:`Observes post-commit Todo and task-lease state through the shared authority contract without taking write authority.`},multi_subagent:{displayName:`Adaptive child capacity`,description:`Sets bounded child-agent capacity and the public-safe responsibility domains in which parallel work may be delegated.`},peer_task_coordination:{displayName:`Registered-peer task coordination`,description:`Routes explicitly scoped peer-owned work to one registered coordinator without granting cross-owner mutation authority.`},periodic_report:{displayName:`Periodic reports`,description:`Turns validated Goal stage progress into a frozen report and automatically delivers it through the configured Goal Channel with exact readback.`},reward_memory:{displayName:`Reward Memory experiment`,description:`Runs an opt-in, provider-bound retrieval experiment over an explicitly allowlisted memory corpus.`,readOnlyReason:`This capability requires a reviewed local-private provider binding and an explicit Agent allowlist. Configure it through the capability CLI.`}},"zh-CN":{change_quality_qualification:{displayName:`变更质量验证`,description:`生成与 Provider 无关的审阅包,最多允许一次策略授权的安全修复,并可要求精确 diff 回执。`},explore_graph:{displayName:`探索图谱`,description:`把有界探索组织为 typed 证据图,让探索分支、发现与综合结论都可检查、可追溯。`},explore_harness:{displayName:`探索 Harness`,description:`为有界的多步探索选择由能力负责的规划与研究 Harness profile。`},lark_event_inbox:{displayName:`飞书事件收件箱`,description:`通过本机私有收件箱接收 Provider 事件,再由 LoopX 将其投影为受治理的工作。`,readOnlyReason:`此能力依赖本机私有的收件箱绑定,请在飞书设置或 capability CLI 中管理。`},lark_kanban_heartbeat_sync:{displayName:`飞书看板心跳同步`,description:`把 LoopX 已接受的工作状态同步到配置好的飞书看板心跳界面。`},local_authority_shadow:{displayName:`本地 Authority 影子观测`,description:`通过共享 Authority contract 观测提交后的 Todo 与 task lease 状态,但不取得写入权。`},multi_subagent:{displayName:`自适应子 Agent 容量`,description:`限定子 Agent 容量与可公开的职责域,只有落在这些边界内的工作才能并行委派。`},peer_task_coordination:{displayName:`已注册 Peer 任务协调`,description:`把明确限定的 Peer 工作路由给一个已注册协调者,不授予跨 Owner 修改权限。`},periodic_report:{displayName:`周期报告`,description:`把经过验证的 Goal 阶段进展整理为冻结报告,并通过配置的 Goal Channel 自动发送和精确回读。`},reward_memory:{displayName:`Reward Memory 实验`,description:`在明确 allowlist 的记忆语料上运行可选、Provider 绑定的检索实验。`,readOnlyReason:`此能力依赖经过审阅的本机私有 Provider 绑定和明确的 Agent allowlist,请通过 capability CLI 配置。`}}},gb={en:{allowed_domains:{label:`Allowed responsibility domains`,description:`Enter one bounded, public-safe domain per line.`},coordinator_agent_id:{label:`Coordinator Agent`,description:`Use an already registered Agent id; leave blank to disable coordination.`},enabled:{label:`Enabled`},max_children:{label:`Maximum children`,description:`Hard upper bound for concurrently delegated child work.`},profile:{label:`Planner profile`,description:`Select one registered Explore Harness profile.`},profile_preset:{label:`Report profile`,description:`Capability-owned report profile, such as weekly-progress.`},route_ref:{label:`Goal Channel route`,description:`Public route alias only; credentials and provider identifiers stay outside this form.`},safe_fix:{label:`Allow one bounded safe-fix pass`},strict_receipt:{label:`Require an exact-diff receipt`},timezone:{label:`Timezone`,description:`Use an IANA timezone, for example Asia/Shanghai.`}},"zh-CN":{allowed_domains:{label:`允许的职责域`,description:`每行填写一个有边界、可公开的职责域。`},coordinator_agent_id:{label:`协调 Agent`,description:`填写一个已经注册的 Agent ID;留空表示关闭协调。`},enabled:{label:`启用`},max_children:{label:`最大子 Agent 数`,description:`可同时委派的子任务硬上限。`},profile:{label:`规划 Profile`,description:`选择一个已注册的 Explore Harness profile。`},profile_preset:{label:`报告 Profile`,description:`由该能力管理的报告 profile,例如 weekly-progress。`},route_ref:{label:`Goal Channel 路由`,description:`只填写公开 route alias;凭据与 Provider 标识不会进入此表单。`},safe_fix:{label:`允许一次有界安全修复`},strict_receipt:{label:`要求精确 diff 回执`},timezone:{label:`时区`,description:`使用 IANA 时区,例如 Asia/Shanghai。`}}};function _b(e,t){let n=hb[t][e.capability_id];return n?{...e,display_name:n.displayName,description:n.description,configuration_editor:{...e.configuration_editor,...n.readOnlyReason?{read_only_reason:n.readOnlyReason}:{}}}:e}function vb(e){return gb[e]}Object.freeze(Object.keys(hb.en).sort());function yb(e,t){return e.available_scopes.includes(t)&&(t!==`machine`||!!e.machine_namespace)&&e.configuration_editor.editable&&e.configuration_editor.writable_scopes.includes(t)}function bb({values:e,t}){return(0,z.jsxs)(`details`,{className:`personal-capability-raw-values`,children:[(0,z.jsx)(`summary`,{children:t(`capabilities.rawJson`)}),(0,z.jsx)(`div`,{className:`personal-capability-value-grid`,children:e.map(({label:e,value:t})=>(0,z.jsxs)(`section`,{children:[(0,z.jsx)(`strong`,{children:e}),(0,z.jsx)(`pre`,{children:t?JSON.stringify(t,null,2):`—`})]},e))})]})}function xb({source:e,t}){return e?(0,z.jsxs)(`p`,{className:`personal-capability-effective-source`,children:[(0,z.jsx)(Im,{"aria-hidden":!0,size:15}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:t(`capabilities.effectiveSource`)}),t(`capabilities.source.${e}`)]})]}):null}function Sb({available:e,description:t,t:n}){return e?null:(0,z.jsxs)(`section`,{className:`personal-capability-editor-status is-read-only`,children:[(0,z.jsx)(Um,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:n(`capabilities.readOnly`)}),(0,z.jsx)(`p`,{children:t})]})]})}function Cb(e){return e.availability?.includes(`experimental`)?4:e.capability_id===`multi_subagent`?3:e.configuration_editor.writable_scopes.length===0||e.availability===`supported_explicit_opt_in`?2:e.availability===`supported_explicit_override`?0:1}function wb(e,t){return[...e].sort((e,n)=>{let r=Cb(e)-Cb(n);if(r!==0)return r;let i=_b(e,t),a=_b(n,t);return i.display_name.localeCompare(a.display_name,t)||e.capability_id.localeCompare(n.capability_id)})}function Tb({capabilities:e,locale:t,onSelect:n,scope:r,selectedCapabilityId:i,t:a}){return(0,z.jsx)(`nav`,{"aria-label":a(r===`goal`?`capabilities.catalog`:`machine.capabilityCatalog`),className:`personal-capability-list`,children:wb(e,t).map(e=>{let o=_b(e,t);return(0,z.jsxs)(`button`,{"aria-current":i===o.capability_id?`page`:void 0,onClick:()=>n(o.capability_id),type:`button`,children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:o.display_name}),(0,z.jsx)(`small`,{children:o.capability_id})]}),(0,z.jsx)(`em`,{children:a(o.available_scopes.includes(r)?r===`goal`?`capabilities.goalScope`:`capabilities.machineScope`:r===`machine`?`capabilities.goalScope`:`capabilities.machineScope`)})]},o.capability_id)})})}function Eb({capability:e,locale:t}){let n=_b(e,t);return(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`span`,{className:`personal-settings-icon`,children:(0,z.jsx)(Lm,{"aria-hidden":!0,size:18})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:n.capability_id}),(0,z.jsx)(`h2`,{children:n.display_name}),(0,z.jsx)(`p`,{children:n.description})]})]})}function Db({goalId:e,onApplied:t,selected:n,t:r}){let[i,a]=(0,R.useState)({busy:null,draft:{},partialWrite:null,preview:null}),[o,s]=(0,R.useState)(null);(0,R.useEffect)(()=>{a({busy:null,draft:db(n?.configuration_editor??{fields:[]},n?.current??n?.effective_configuration?.configuration??n?.default,n?.default),partialWrite:null,preview:null}),s(null)},[n]);async function c(t){if(!(!n||i.busy)){a(e=>({...e,busy:`preview`,partialWrite:null})),s(null);try{let r=await _g(e,n.capability_id,t);a(e=>({...e,preview:r}))}catch(e){s(e instanceof Error?e.message:r(`capabilities.previewFailed`))}finally{a(e=>({...e,busy:null}))}}}async function l(){if(!(!n||!i.preview||i.busy)){a(e=>({...e,busy:`apply`})),s(null);try{let r=db(n.configuration_editor,i.draft,n.default),o=await vg(e,n.capability_id,i.preview.action===`delete`?null:r,i.preview.plan_revision);a(e=>({...e,partialWrite:o.status===`partial_write`?o:null,preview:null})),o.status!==`partial_write`&&t()}catch(e){a(e=>({...e,preview:null})),s(e instanceof Error?e.message:r(`capabilities.applyFailed`))}finally{a(e=>({...e,busy:null}))}}}function u(e,t){a(n=>({...n,draft:{...n.draft,[e]:t},preview:null})),s(null)}return{apply:l,changeDraft:u,error:o,mutation:i,preview:c}}function Ob({mutationError:e,onApplied:t,partialWrite:n,preview:r}){let{t:i}=Ji();return(0,z.jsxs)(z.Fragment,{children:[e?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:e}):null,n?(0,z.jsxs)(`section`,{"aria-live":`polite`,className:`personal-capability-recovery`,children:[(0,z.jsx)(Um,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:i(`capabilities.partialWrite`)}),(0,z.jsx)(`p`,{children:i(`capabilities.partialWriteDescription`)}),(0,z.jsx)(`small`,{children:n.recommended_action})]}),(0,z.jsxs)(`button`,{onClick:t,type:`button`,children:[(0,z.jsx)(Om,{"aria-hidden":!0,size:15}),i(`capabilities.refreshSource`)]})]}):null,r?(0,z.jsxs)(`section`,{className:`personal-capability-preview`,"aria-label":i(`capabilities.preview`),children:[(0,z.jsx)(`strong`,{children:i(`capabilities.preview`)}),(0,z.jsx)(`span`,{children:i(`machine.action.${r.action}`)}),(0,z.jsx)(`small`,{children:i(`capabilities.previewLocked`)})]}):null]})}function kb({catalog:e,goalId:t,onApplied:n}){let{locale:r,t:i}=Ji(),[a,o]=(0,R.useState)(e.capabilities[0]?.capability_id??``),s=(0,R.useMemo)(()=>e.capabilities.find(e=>e.capability_id===a)??e.capabilities[0],[e.capabilities,a]),c=(0,R.useMemo)(()=>s?_b(s,r):void 0,[r,s]),{apply:l,changeDraft:u,error:d,mutation:f,preview:p}=Db({goalId:t,onApplied:n,selected:c,t:i}),{busy:m,draft:h,partialWrite:g,preview:_}=f;if(!s||!c)return(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:i(`capabilities.empty`)});let v=c.available_scopes.includes(`goal`),y=yb(c,`goal`),b=c.configuration_editor.read_only_reason??i(v?`capabilities.previewOnly`:`capabilities.machineOnly`);async function x(){if(!c||!y||m)return;let e=db(c.configuration_editor,h,c.default);await p(e)}async function S(){!y||m||await p(null)}return(0,z.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,z.jsx)(Tb,{capabilities:e.capabilities,locale:r,onSelect:o,scope:`goal`,selectedCapabilityId:c.capability_id,t:i}),(0,z.jsxs)(`article`,{className:`personal-capability-detail`,children:[(0,z.jsx)(Eb,{capability:s,locale:r}),(0,z.jsx)(xb,{source:c.effective_configuration?.source,t:i}),(0,z.jsx)(Sb,{available:y,t:i,description:b}),y?(0,z.jsxs)(`section`,{className:`personal-capability-field-summary`,children:[(0,z.jsx)(`strong`,{children:i(`capabilities.fields`)}),(0,z.jsx)(mb,{disabled:!!m,copy:vb(r),editor:c.configuration_editor,onChange:u,value:h})]}):null,(0,z.jsx)(Ob,{mutationError:d,onApplied:n,partialWrite:g,preview:_}),y?(0,z.jsxs)(`footer`,{className:`personal-capability-actions`,children:[c.current&&c.available_scopes.includes(`machine`)?(0,z.jsx)(`button`,{disabled:!!m,onClick:()=>void S(),type:`button`,children:i(`capabilities.restoreInheritance`)}):null,(0,z.jsx)(`button`,{disabled:!!m,onClick:()=>void x(),type:`button`,children:i(m===`preview`?`common.loading`:`capabilities.previewChanges`)}),(0,z.jsx)(`button`,{className:`is-primary`,disabled:!!m||!_,onClick:()=>void l(),type:`button`,children:i(m===`apply`?`common.loading`:`capabilities.applyPreview`)})]}):null,(0,z.jsx)(bb,{values:[{label:i(`capabilities.goalValue`),value:c.current},{label:i(c.machine_current?`capabilities.machineValue`:`capabilities.defaultValue`),value:c.machine_current??c.default}],t:i},s.capability_id)]})]})}function Ab({goalId:e}){let{t}=Ji(),[n,r]=(0,R.useState)(null),[i,a]=(0,R.useState)(null),[o,s]=(0,R.useState)(!1);function c(){e&&(s(!0),a(null),gg(e).then(r).catch(e=>a(e instanceof Error?e.message:t(`capabilities.loadFailed`))).finally(()=>s(!1)))}return(0,R.useEffect)(c,[e]),e?o&&!n?(0,z.jsxs)(`p`,{"aria-live":`polite`,className:`personal-capability-empty`,children:[(0,z.jsx)(hm,{className:`personal-spin`,size:18}),t(`capabilities.loading`)]}):i?(0,z.jsxs)(`section`,{className:`personal-capability-error`,role:`alert`,children:[(0,z.jsx)(Um,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:t(`capabilities.loadFailed`)}),(0,z.jsx)(`small`,{children:i})]}),(0,z.jsxs)(`button`,{onClick:c,type:`button`,children:[(0,z.jsx)(Om,{"aria-hidden":!0,size:15}),t(`capabilities.retry`)]})]}):n?(0,z.jsxs)(`section`,{className:`personal-capability-settings`,"data-revision":n.revision,children:[(0,z.jsxs)(`div`,{className:`personal-capability-scope-note`,children:[(0,z.jsx)(Im,{"aria-hidden":!0,size:17}),(0,z.jsxs)(`p`,{children:[(0,z.jsx)(`strong`,{children:t(`capabilities.atomicOverride`)}),t(`capabilities.atomicOverrideDescription`)]})]}),(0,z.jsx)(kb,{catalog:n.capability_catalog,goalId:e,onApplied:c})]}):null:(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:t(`capabilities.chooseGoal`)})}function jb(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function Mb(e,t){let n=t?.machine_namespace;return n?e?.machine_configuration?.namespaces[n]:void 0}function Nb(e,t,n){return{...jb(e.default),...jb(t),...n}}function Pb(e,t){for(let n of e.configuration_editor.fields){let e=t[n.key];if(n.required&&(e==null||e===``))return!1}return e.capability_id===`periodic_report`&&t.enabled===!0?!!(String(t.profile_preset??``).trim()&&String(t.route_ref??``).trim()&&String(t.timezone??``).trim()):!0}function Fb(e){try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}function Ib(e){return e?e===`absent`?e:e.replace(/^sha256:/,``).slice(0,12):`—`}function Lb(){let{locale:e,t}=Ji(),[n,r]=(0,R.useState)(null),[i,a]=(0,R.useState)(``),[o,s]=(0,R.useState)({}),[c,l]=(0,R.useState)(`{}`),[u,d]=(0,R.useState)(`guided`),[f,p]=(0,R.useState)(null),[m,h]=(0,R.useState)(`upsert`),[g,_]=(0,R.useState)(null),[v,y]=(0,R.useState)(null),[b,x]=(0,R.useState)(`load`),[S,C]=(0,R.useState)(null),[w,T]=(0,R.useState)(null),E=n?.capability_catalog.capabilities??[],D=E.find(e=>e.capability_id===i)??E[0],O=D?_b(D,e):void 0,k=Mb(n,O),ee=!!(O?.machine_namespace&&k),A=!!(O&&yb(O,`machine`)),j=(0,R.useMemo)(()=>Fb(c),[c]),te=O?u===`json`?j:Nb(O,k,o):null,ne=!!(O&&(u===`json`?j:Pb(O,te??{})));async function re(){r(await hg())}(0,R.useEffect)(()=>{let e=!0;return hg().then(t=>{e&&(r(t),a(t.capability_catalog.capabilities.find(e=>e.available_scopes.includes(`machine`))?.capability_id??``))}).catch(n=>{e&&C(n instanceof Error?n.message:t(`machine.loadError`))}).finally(()=>{e&&x(null)}),()=>{e=!1}},[t]),(0,R.useEffect)(()=>{if(!O)return;let e=Mb(n,O),t=db(O.configuration_editor,e??O.default,O.default),r=Nb(O,e,t);s(t),l(JSON.stringify(r,null,2)),d(A?`guided`:`json`),p(null),h(`upsert`),y(null)},[n,i,e]);function M(e,t){s(n=>({...n,[e]:t})),p(null),h(`upsert`),C(null),T(null)}function N(e){if(O){if(e===`json`)l(JSON.stringify(Nb(O,k,o),null,2));else if(j)s(db(O.configuration_editor,j,O.default));else{C(t(`machine.jsonInvalid`));return}d(e),p(null),h(`upsert`),C(null)}}async function ie(){if(!(!A||!O?.machine_namespace||!te||!ne||b)){x(`preview`),C(null),T(null);try{h(`upsert`),p(await yg(O.machine_namespace,te))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function ae(){if(!(!A||!O?.machine_namespace||!ee||b)){x(`preview`),C(null),T(null);try{h(`remove`),p(await xg(O.machine_namespace))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function oe(){if(!A||!O?.machine_namespace||!f||b||m===`upsert`&&!te)return;x(`apply`),C(null);let e=m;try{let n=e===`remove`?await Sg(O.machine_namespace,f.plan_revision):await bg(O.machine_namespace,te,f.plan_revision);_(n),p(null),h(`upsert`),y(null),await re(),T(n.status===`applied`?t(e===`remove`?`machine.removed`:`machine.applied`):t(`machine.unchanged`))}catch(e){p(null),h(`upsert`),C(e instanceof Error?e.message:t(`machine.applyError`))}finally{x(null)}}async function P(){if(!(!g?.transaction_id||b)){x(`rollback-preview`),C(null);try{y(await Cg(g.transaction_id))}catch(e){C(e instanceof Error?e.message:t(`machine.rollbackError`))}finally{x(null)}}}async function F(){if(!(!g?.transaction_id||!v||b)){x(`rollback`),C(null);try{await wg(g.transaction_id,v.plan_revision),_(null),y(null),p(null),await re(),T(t(`machine.rolledBack`))}catch(e){y(null),C(e instanceof Error?e.message:t(`machine.rollbackError`))}finally{x(null)}}}return b===`load`?(0,z.jsx)(`div`,{className:`personal-machine-loading`,role:`status`,children:t(`common.loading`)}):O?(0,z.jsxs)(`section`,{className:`personal-capability-settings`,"data-revision":n?.revision,children:[(0,z.jsxs)(`div`,{className:`personal-capability-scope-note`,children:[(0,z.jsx)(Im,{"aria-hidden":!0,size:17}),(0,z.jsxs)(`p`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.liveDefault`)}),t(`machine.liveDefaultDescription`)]})]}),(0,z.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,z.jsx)(Tb,{capabilities:E,locale:e,onSelect:a,scope:`machine`,selectedCapabilityId:O.capability_id,t}),(0,z.jsxs)(`article`,{className:`personal-capability-detail`,children:[(0,z.jsx)(Eb,{capability:D,locale:e}),O.available_scopes.includes(`machine`)?(0,z.jsx)(xb,{source:ee?`machine_default`:`capability_default`,t}):null,(0,z.jsx)(Sb,{available:A,t,description:O.available_scopes.includes(`machine`)?t(`machine.editorUnavailableDescription`):t(`machine.goalOnly`)}),O.capability_id===`periodic_report`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(Im,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.periodicReportActivation`)}),(0,z.jsx)(`p`,{children:t(`machine.periodicReportActivationDescription`)})]})]}):null,A?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{className:`personal-capability-editor-mode`,children:[(0,z.jsx)(`span`,{children:t(`machine.editorMode`)}),(0,z.jsxs)(`div`,{role:`group`,"aria-label":t(`machine.editorMode`),children:[(0,z.jsx)(`button`,{"aria-pressed":u===`guided`,disabled:!A,onClick:()=>N(`guided`),type:`button`,children:t(`machine.visualEditor`)}),(0,z.jsxs)(`button`,{"aria-pressed":u===`json`,onClick:()=>N(`json`),type:`button`,children:[(0,z.jsx)($p,{"aria-hidden":!0,size:14}),t(`machine.jsonEditor`)]})]})]}),u===`guided`?(0,z.jsxs)(`section`,{className:`personal-capability-field-summary`,children:[(0,z.jsx)(`strong`,{children:t(`capabilities.fields`)}),(0,z.jsx)(mb,{copy:vb(e),disabled:!!b,editor:O.configuration_editor,onChange:M,value:o}),ne?null:(0,z.jsx)(`p`,{className:`personal-machine-validation`,role:`alert`,children:t(`machine.requiredFields`)})]}):(0,z.jsxs)(`label`,{className:`personal-capability-json-editor`,htmlFor:`machine-configuration-json`,children:[(0,z.jsx)(`span`,{children:t(`machine.jsonConfiguration`)}),(0,z.jsx)(`textarea`,{"aria-describedby":`machine-configuration-json-help`,disabled:!!b,id:`machine-configuration-json`,onChange:e=>{l(e.target.value),p(null),C(null)},rows:12,spellCheck:!1,value:c}),(0,z.jsx)(`small`,{id:`machine-configuration-json-help`,children:t(`machine.jsonConfigurationHelp`)}),j?null:(0,z.jsx)(`span`,{className:`personal-machine-validation`,role:`alert`,children:t(`machine.jsonInvalid`)})]})]}):null,S?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:S}):null,w?(0,z.jsxs)(`p`,{className:`personal-machine-notice`,role:`status`,"aria-live":`polite`,children:[(0,z.jsx)(Kp,{"aria-hidden":!0,size:16}),w]}):null,f?(0,z.jsxs)(`section`,{"aria-label":t(`machine.preview`),className:`personal-machine-preview`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.preview`)}),(0,z.jsx)(`span`,{children:t(`machine.action.${f.action}`)})]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`machine.currentRevision`)}),(0,z.jsx)(`dd`,{title:f.current_revision,children:Ib(f.current_revision)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`machine.desiredRevision`)}),(0,z.jsx)(`dd`,{title:f.desired_revision,children:Ib(f.desired_revision)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`machine.changedNamespaces`)}),(0,z.jsx)(`dd`,{children:f.changed_namespaces.join(`, `)||t(`common.none`)})]})]}),(0,z.jsx)(`p`,{children:t(`machine.previewLocked`)})]}):null,g?.rollback_available&&g.transaction_id?(0,z.jsxs)(`section`,{className:`personal-machine-rollback`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.rollbackAvailable`)}),(0,z.jsx)(`p`,{children:t(v?`machine.rollbackPreviewDescription`:`machine.rollbackDescription`)})]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,disabled:!!b||!!(v&&!v.rollback_allowed),onClick:()=>void(v?F():P()),type:`button`,children:[(0,z.jsx)(km,{"aria-hidden":!0,size:15}),t(b===`rollback`||b===`rollback-preview`?`common.loading`:v?`machine.confirmRollback`:`machine.previewRollback`)]})]}):null,A?(0,z.jsxs)(`footer`,{className:`personal-capability-actions`,children:[ee?(0,z.jsxs)(`button`,{className:`is-danger`,disabled:!!b,onClick:()=>void ae(),type:`button`,children:[(0,z.jsx)(Hm,{"aria-hidden":!0,size:15}),t(`machine.previewRemoval`)]}):null,(0,z.jsx)(`button`,{disabled:!!b||!ne,onClick:()=>void ie(),type:`button`,children:t(b===`preview`?`common.loading`:`machine.previewChanges`)}),(0,z.jsx)(`button`,{className:`is-primary`,disabled:!!b||!f,onClick:()=>void oe(),type:`button`,children:t(b===`apply`?`common.loading`:`machine.applyPreview`)})]}):null,O.available_scopes.includes(`machine`)?(0,z.jsx)(bb,{values:[{label:t(`machine.currentValue`),value:k},{label:t(`capabilities.defaultValue`),value:O.default}],t},O.capability_id):null]})]})]}):(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:t(`machine.capabilityEmpty`)})}var Rb={appearance:Sm,capabilities:Lm,language:fm,lark:Fm,machine:Nm};function zb({focusGoalConnection:e=!1,goals:t,initialGoalId:n,initialTab:r=`lark`,onChanged:i,onClose:a,onThemeChange:o,theme:s}){let{locale:c,setLocale:l,t:u}=Ji(),[d,f]=(0,R.useState)(r),p=[...n?[{description:u(`settings.capabilitiesTabDescription`),key:`capabilities`,label:u(`capabilities.title`)}]:[],{description:u(`settings.machineTabDescription`),key:`machine`,label:u(`machine.title`)},{description:u(`settings.larkTabDescription`),key:`lark`,label:`Lark`},{description:u(`settings.appearanceTabDescription`),key:`appearance`,label:u(`settings.appearance`)},{description:u(`settings.languageTabDescription`),key:`language`,label:u(`settings.language`)}],m=[{description:u(`settings.languageEnglishDescription`),label:u(`settings.languageEnglish`),value:`en`},{description:u(`settings.languageSimplifiedChineseDescription`),label:u(`settings.languageSimplifiedChinese`),value:`zh-CN`}],h={appearance:{description:u(`settings.appearanceDescription`),eyebrow:u(`settings.workspaceDisplay`),title:u(`settings.appearance`)},capabilities:{description:u(`capabilities.description`),eyebrow:u(`capabilities.goalPolicy`),title:u(`capabilities.title`)},language:{description:u(`settings.languageDescription`),eyebrow:u(`settings.workspaceDisplay`),title:u(`settings.language`)},lark:{description:u(`lark.description`),eyebrow:u(`settings.goalConnections`),title:`Lark`},machine:{description:u(`machine.description`),eyebrow:u(`machine.machinePolicy`),title:u(`machine.title`)}}[d];return(0,z.jsxs)(`section`,{"aria-label":u(`settings.title`),className:`personal-settings-page`,"data-pw-theme":s,children:[(0,z.jsxs)(`aside`,{className:`personal-settings-sidebar`,children:[(0,z.jsxs)(`button`,{className:`personal-settings-back`,onClick:a,type:`button`,children:[(0,z.jsx)(Lp,{size:17}),(0,z.jsx)(`span`,{children:u(`settings.back`)})]}),(0,z.jsxs)(`div`,{className:`personal-settings-title`,children:[(0,z.jsx)(`small`,{children:u(`settings.eyebrow`)}),(0,z.jsx)(`strong`,{children:u(`settings.title`)})]}),(0,z.jsx)(`nav`,{"aria-label":u(`settings.categories`),className:`personal-settings-tabs`,children:p.map(e=>{let t=Rb[e.key];return(0,z.jsxs)(`button`,{"aria-current":d===e.key?`page`:void 0,onClick:()=>f(e.key),type:`button`,children:[(0,z.jsx)(t,{size:17}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.description})]})]},e.key)})})]}),(0,z.jsxs)(`main`,{className:`personal-settings-body`,children:[(0,z.jsx)(`header`,{className:`personal-settings-header`,children:(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:h.eyebrow}),(0,z.jsx)(`h1`,{children:h.title}),(0,z.jsx)(`p`,{children:h.description})]})}),d===`lark`?(0,z.jsx)(lb,{embedded:!0,focusGoalConnection:e,goals:t,initialGoalId:n,onChanged:i,onClose:a}):null,d===`machine`?(0,z.jsx)(Lb,{}):null,d===`capabilities`?(0,z.jsx)(Ab,{goalId:n}):null,d===`appearance`?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-appearance-settings`,children:[(0,z.jsx)(`small`,{children:u(`settings.workspaceDisplay`)}),(0,z.jsx)(`h3`,{children:u(`settings.appearance`)}),(0,z.jsx)(`p`,{children:u(`settings.themeDescription`)}),(0,z.jsxs)(`div`,{className:`personal-settings-choice-group`,role:`radiogroup`,"aria-label":u(`settings.workspaceTheme`),children:[(0,z.jsxs)(`button`,{"aria-checked":s===`loopx`,onClick:()=>o(`loopx`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-loopx`}),(0,z.jsx)(`strong`,{children:u(`settings.themeLoopx`)}),(0,z.jsx)(`small`,{children:u(`settings.themeLoopxDescription`)})]}),(0,z.jsxs)(`button`,{"aria-checked":s===`paper`,onClick:()=>o(`paper`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-paper`}),(0,z.jsx)(`strong`,{children:u(`settings.themeDefault`)}),(0,z.jsx)(`small`,{children:u(`settings.themeDefaultDescription`)})]}),(0,z.jsxs)(`button`,{"aria-checked":s===`brutal`,onClick:()=>o(`brutal`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-brutal`}),(0,z.jsx)(`strong`,{children:u(`settings.themeHighContrast`)}),(0,z.jsx)(`small`,{children:u(`settings.themeHighContrastDescription`)})]})]})]}):null,d===`language`?(0,z.jsxs)(`section`,{className:`personal-settings-card`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`span`,{className:`personal-settings-icon`,children:(0,z.jsx)(fm,{size:18})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h2`,{children:u(`settings.language`)}),(0,z.jsx)(`p`,{children:u(`settings.languageDescription`)})]})]}),(0,z.jsx)(`div`,{"aria-label":u(`settings.language`),className:`personal-language-options`,role:`radiogroup`,children:m.map(e=>(0,z.jsxs)(`button`,{"aria-checked":c===e.value,className:c===e.value?`is-selected`:``,onClick:()=>l(e.value),role:`radio`,type:`button`,children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.description})]}),c===e.value?(0,z.jsx)(Kp,{"aria-hidden":!0,size:17}):null]},e.value))}),(0,z.jsx)(`footer`,{children:u(`settings.languageStoredLocally`)})]}):null]})]})}var Bb=`loopx-pw-theme`,Vb=`loopx`;function Hb(){try{let e=window.localStorage.getItem(Bb);return e===`loopx`||e===`paper`||e===`brutal`?e:Vb}catch{return Vb}}function Ub(e){try{window.localStorage.setItem(Bb,e)}catch{}}function Wb({drawer:e,drawerMode:t=`panel`,drawerOpen:n,main:r,mobileSidebarOpen:i=!1,onCloseMobileSidebar:a,sidebar:o,theme:s=`loopx`}){let{t:c}=Ji(),l=(0,R.useRef)(null),u=(0,R.useRef)(null);return(0,R.useEffect)(()=>{if(!i)return;u.current=document.activeElement instanceof HTMLElement?document.activeElement:null;let e=l.current?.querySelectorAll(`button:not([disabled]), a[href], select:not([disabled]), textarea:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])`);e?.[0]?.focus();function t(t){if(t.key!==`Tab`||!e?.length)return;let n=e[0],r=e[e.length-1];t.shiftKey&&document.activeElement===n?(t.preventDefault(),r.focus()):!t.shiftKey&&document.activeElement===r&&(t.preventDefault(),n.focus())}return document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`keydown`,t),u.current?.focus(),u.current=null}},[i]),(0,z.jsxs)(`section`,{className:`personal-workspace-shell${n?` has-drawer`:``}${n&&t.startsWith(`inspector`)?` has-task-inspector`:``}${t===`inspector-full`?` is-task-inspector-full`:``}${i?` mobile-sidebar-open`:``}`,"data-pw-theme":s,children:[i?(0,z.jsx)(`button`,{"aria-hidden":!0,className:`personal-sidebar-backdrop`,onClick:a,tabIndex:-1,type:`button`}):null,(0,z.jsx)(`aside`,{"aria-label":i?c(`header.goalNavigation`):void 0,"aria-modal":i?!0:void 0,className:`personal-workspace-sidebar`,"data-workspace-sidebar":!0,ref:l,role:i?`dialog`:void 0,children:(0,z.jsxs)(`div`,{className:`personal-workspace-sidebar-inner`,children:[i?(0,z.jsxs)(`button`,{className:`personal-sr-only`,onClick:a,type:`button`,children:[c(`common.close`),` `,c(`header.goalNavigation`)]}):null,o]})}),(0,z.jsx)(`main`,{"aria-hidden":i||void 0,className:`personal-workspace-main`,inert:i||void 0,children:r}),n?(0,z.jsx)(`aside`,{className:`personal-workspace-drawer`,"data-context-drawer":!0,"data-drawer-mode":t,children:e}):null]})}function Gb(e){let t=e.match(/(?:下一步|建议|行动项|待办)[::\s]*([^\n]+)/u),n=t?t[1]:e;n=n.replace(/```[\s\S]*?```/g,``).replace(/`([^`]+)`/g,`$1`).replace(/\[([^\]]+)\]\([^)]+\)/g,`$1`).replace(/[#*~_>]/g,``).replace(/^[-*•\d+.\s]+/u,``).replace(/^(好的|没问题|收到|建议如下|任务如下|分析如下|结论[::])[\s,,::]*/u,``);let r=(n.split(/\r?\n/).map(e=>e.trim()).filter(Boolean)[0]||n).replace(/\s+/gu,` `).trim();return Array.from(r).slice(0,120).join(``)}function Kb(e){let t=new Map;return e.forEach(e=>{let n=e.fields.find(e=>e.key===`todo_id`)?.value??``,r=[e.actionKind,e.goalId??``,n,e.title].join(`:`);t.set(r,e)}),[...t.values()]}function qb(e,t,n){if(!e)return n(`home.noFirstActivity`);let r=new Date(e);if(Number.isNaN(r.getTime()))return e;let i=new Date,a=new Intl.DateTimeFormat(t,{hour:`2-digit`,minute:`2-digit`,hour12:!1}).format(r);return r.toDateString()===i.toDateString()?n(`home.todayAt`,{time:a}):new Intl.DateTimeFormat(t,{month:`numeric`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,hour12:!1}).format(r)}function Jb({goals:e,onSelectGoal:t,onRetry:n,systemHealth:r}){let{locale:i,t:a}=Ji(),o=e.filter(e=>e.activationState===`active`),s=o.filter(e=>e.loadState===`error`).length,c=[{description:a(`home.lane.needsYouDescription`),key:`needs_you`,label:a(`home.lane.needsYou`)},{description:a(`home.lane.runningDescription`),key:`running`,label:a(`home.lane.running`)},{description:a(`home.lane.observingDescription`),key:`observing`,label:a(`home.lane.observing`)},{description:a(`home.lane.scheduledDescription`),key:`scheduled`,label:a(`home.lane.scheduled`)}],l=Object.fromEntries(c.map(e=>[e.key,[]])),u=[],d=[];e.filter(e=>!e.loadState).forEach(e=>{let t=ty(e);t===`history`?u.push(e):t===`stopped`?d.push(e):l[t].push(e)});let f=e=>(0,z.jsxs)(`button`,{className:`personal-home-goal-card`,"data-goal-state":e.loadState??e.state,"data-load-error":e.loadError,onClick:()=>t(e.goalId),type:`button`,children:[(0,z.jsxs)(`span`,{className:`personal-home-goal-meta`,children:[(0,z.jsx)(`i`,{}),e.agentLaneCount&&e.agentLaneCount>1?a(`header.workAgentCount`,{count:e.agentLaneCount}):e.agentLabel??e.agentId]}),(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`p`,{children:e.loadError?a(`startup.error.${e.loadError}`):e.needsYou??e.nextSentence}),(0,z.jsxs)(`footer`,{children:[(0,z.jsx)(`span`,{children:e.loadState?a(e.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(e.state,i)}),(0,z.jsx)(`small`,{title:e.latestActivity,children:e.loadState?``:e.latestActivity?qb(e.latestActivity,i,a):e.agentTodos.length?a(`home.taskCount`,{count:e.agentTodos.length}):a(`home.noActivity`)})]})]},e.goalId);return(0,z.jsxs)(`section`,{"aria-label":a(`home.workspace`),className:`personal-home-board`,children:[r&&(!r.ok||r.issues.length>0||r.freshnessWarning)?(0,z.jsxs)(`div`,{className:`personal-system-health-banner`,role:`alert`,children:[(0,z.jsxs)(`div`,{className:`personal-system-health-header`,children:[(0,z.jsx)(Xp,{size:15}),(0,z.jsx)(`strong`,{children:a(`home.systemHealth`,{summary:r.summary})}),r.freshnessWarning?(0,z.jsxs)(`small`,{children:[`(`,r.freshnessWarning,`)`]}):null]}),r.issues.length>0?(0,z.jsx)(`ul`,{className:`personal-system-health-issues`,children:r.issues.map((e,t)=>(0,z.jsx)(`li`,{children:e},t))}):null]}):null,o.some(e=>e.loadState)?(0,z.jsxs)(`section`,{className:`personal-home-lane`,"aria-live":`polite`,children:[(0,z.jsx)(`header`,{children:a(`startup.progress`,{loaded:o.filter(e=>!e.loadState).length,total:o.length})}),s?(0,z.jsxs)(`div`,{className:`personal-stopped-goal-error`,role:`status`,children:[(0,z.jsx)(`span`,{children:a(`startup.failedCount`,{count:s})}),(0,z.jsx)(`button`,{className:`min-h-11 rounded-md border px-3 py-2 text-sm`,onClick:n,type:`button`,children:a(`startup.retryFailed`)})]}):null,o.filter(e=>e.loadState).map(f)]}):null,(0,z.jsx)(`div`,{className:`personal-home-lanes`,children:c.map(e=>(0,z.jsxs)(`section`,{className:`personal-home-lane is-${e.key}`,"data-testid":`personal-home-lane-${e.key}`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`i`,{}),e.label]}),(0,z.jsx)(`b`,{children:l[e.key].length})]}),(0,z.jsx)(`p`,{children:e.description}),(0,z.jsx)(`div`,{className:`personal-home-lane-list`,children:l[e.key].length?l[e.key].map(f):(0,z.jsx)(`span`,{className:`personal-home-empty`,children:a(`home.empty`)})})]},e.key))}),(0,z.jsxs)(`details`,{className:`personal-home-history`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(`span`,{children:a(`home.history`)}),(0,z.jsx)(`b`,{children:u.length}),(0,z.jsx)(`small`,{children:a(`home.completedGoals`)})]}),(0,z.jsx)(`div`,{children:u.length?u.map(f):(0,z.jsx)(`span`,{className:`personal-home-empty`,children:a(`home.noCompletedGoals`)})})]}),d.length?(0,z.jsxs)(`details`,{className:`personal-home-history is-stopped`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(`span`,{children:a(`home.stopped`)}),(0,z.jsx)(`b`,{children:d.length}),(0,z.jsx)(`small`,{children:a(`home.preservedState`)})]}),(0,z.jsx)(`div`,{children:d.map(f)})]}):null]})}function Yb({items:e,onSelect:t,reportState:n}){let{locale:r,t:i}=Ji();return(0,z.jsxs)(`section`,{className:`personal-object-list personal-files-list`,"data-testid":`personal-goal-outputs`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:i(`files.title`)}),(0,z.jsx)(`span`,{children:e.length})]}),n?.loading?(0,z.jsxs)(`p`,{className:`personal-object-list-state`,role:`status`,children:[(0,z.jsx)(Om,{className:`is-spinning`,size:14}),i(`files.loadingReports`)]}):null,n?.error?(0,z.jsxs)(`p`,{className:`personal-object-list-state is-error`,role:`alert`,children:[(0,z.jsx)(Xp,{size:14}),i(`files.reportLoadFailed`),`: `,n.error]}):null,!n?.loading&&!n?.error&&e.length===0?(0,z.jsxs)(`p`,{className:`personal-object-list-state`,children:[(0,z.jsx)(cm,{size:14}),i(`files.empty`)]}):null,e.map(e=>(0,z.jsxs)(`button`,{"data-output-kind":e.output.kind,onClick:()=>t({item:e.output,kind:`output`}),type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-file-icon`,children:(0,z.jsx)(cm,{size:16})}),(0,z.jsx)(`strong`,{children:e.output.title}),e.output.report?(0,z.jsx)(`em`,{children:i(`files.reportDelta`,{added:e.output.report.addedCount,changed:e.output.report.changedCount})}):null,(0,z.jsx)(`p`,{children:e.output.summary??e.output.safePreview??e.output.kind??i(`files.emptySummary`)}),(0,z.jsx)(`small`,{title:e.output.createdAt,children:[e.output.goalTitle,e.output.kind===`report`?i(`files.verifiedReport`):null,e.output.todoId?`${i(`common.task`)} ${e.output.todoId}`:null,qb(e.output.createdAt,r,i)].filter(Boolean).join(` · `)})]},e.id))]})}function Xb({agentLabel:e,messages:t,onClose:n,onDraftTask:r,onOpenConversation:i,title:a}){let{t:o}=Ji(),s=t.reduce((e,t,n)=>t.role===`user`?n:e,0),c=t.slice(Math.max(0,s)).slice(-3),l=c.filter(e=>e.role===`assistant`&&!e.pending).at(-1);return(0,R.useEffect)(()=>{if(!n)return;let e=e=>{e.key===`Escape`&&n()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n]),(0,z.jsxs)(`aside`,{"aria-label":o(`conversation.receipt`),className:`personal-manager-conversation-tray`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(Up,{size:16}),(0,z.jsx)(`strong`,{children:a??o(`conversation.title`)}),(0,z.jsx)(`small`,{children:t.at(-1)?.pending?o(`conversation.replying`):o(`common.recently`)})]}),(0,z.jsxs)(`div`,{className:`personal-manager-conversation-actions`,children:[r&&l?(0,z.jsxs)(`button`,{className:`personal-manager-conversation-btn`,onClick:()=>r(l.text),title:o(`conversation.convertHint`),type:`button`,children:[(0,z.jsx)(mm,{size:13}),(0,z.jsx)(`span`,{children:o(`conversation.toTask`)})]}):null,(0,z.jsx)(`button`,{className:`personal-manager-conversation-link`,onClick:i,type:`button`,children:o(`conversation.full`)}),n?(0,z.jsx)(`button`,{"aria-label":o(`conversation.close`),className:`personal-manager-conversation-close`,onClick:n,title:o(`conversation.close`),type:`button`,children:(0,z.jsx)(Gm,{size:14})}):null]})]}),(0,z.jsx)(`div`,{"aria-live":`polite`,className:`personal-manager-conversation-messages`,children:c.map(t=>(0,z.jsxs)(`article`,{className:`is-${t.role}`,children:[(0,z.jsx)(`strong`,{children:t.role===`user`?o(`common.you`):t.agentLabel??e??o(`header.manager`)}),(0,z.jsxs)(`div`,{className:`personal-manager-conversation-bubble`,children:[t.role===`user`?(0,z.jsx)(`p`,{children:t.text}):(0,z.jsx)(gy,{text:t.text}),t.pending?(0,z.jsx)(`small`,{children:o(`conversation.agentPending`)}):null]})]},t.id))})]})}function Zb({onClose:e,onOpenDetails:t,run:n}){let{t:r}=Ji();return(0,z.jsxs)(`section`,{"aria-label":r(`session.record`),className:`personal-session-record`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(Up,{size:17}),r(`session.record`)]}),(0,z.jsx)(`button`,{"aria-label":r(`session.closeRecord`),onClick:e,type:`button`,children:(0,z.jsx)(Gm,{size:15})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:n.title}),(0,z.jsx)(`p`,{children:r(`session.recordDescription`)})]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Agent`}),(0,z.jsx)(`dd`,{children:n.agentLabel})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`common.status`)}),(0,z.jsx)(`dd`,{children:Xi(n.sessionStatus??n.status,r)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Session`}),(0,z.jsx)(`dd`,{title:n.sessionId,children:n.sessionId})]})]}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:t,type:`button`,children:r(`session.details`)})]})}function Qb(e,t,n){let r=[];if(t===null)return e.userTodos.slice(0,4).forEach(t=>r.push({attention:{...t,goalTitle:t.goalTitle??ey(e,t.goalId)},id:`attention:${t.todoId}`,kind:`attention`})),e.goals.filter(e=>ty(e)===`running`).slice(0,4).forEach(e=>r.push({id:`run:${e.goalId}`,kind:`run`,run:{agentId:e.agentId,agentLabel:e.agentLabel??e.agentId,completedSteps:e.doneTodoCount??e.agentTodos.filter(e=>e.done).length,goalId:e.goalId,goalTitle:e.title,latestActivity:e.agentSentence,runId:`goal:${e.goalId}`,status:`running`,title:e.nextSentence,totalSteps:Math.max((e.doneTodoCount??0)+e.agentTodos.filter(e=>!e.done).length,1)}})),r;let i=e.goals.find(e=>e.goalId===t);if(!i)return r;i.needsYou&&r.push({attention:{blocking:i.needsYouBlocking??!1,goalId:i.goalId,goalTitle:i.title,text:i.needsYou,todoId:`${i.goalId}:attention`},id:`attention:${i.goalId}`,kind:`attention`}),r.push({id:`run:${i.goalId}`,kind:`run`,run:{agentId:i.agentId,agentLabel:i.agentLabel??i.agentId,completedSteps:i.doneTodoCount??i.agentTodos.filter(e=>e.done).length,goalId:i.goalId,goalTitle:i.title,latestActivity:i.agentSentence,runId:`goal:${i.goalId}`,status:i.state===`推进中`?`running`:i.state===`需修复`?`failed`:`waiting`,title:i.nextSentence,totalSteps:Math.max((i.doneTodoCount??0)+i.agentTodos.filter(e=>!e.done).length,1)}}),i.agentTodos.filter(e=>e.taskClass===`continuous_monitor`).forEach(t=>{let a=e.timeline?.find(e=>e.kind===`run`&&e.run.goalId===i.goalId&&e.run.todoId===t.todoId&&!!e.run.sessionId);r.push({id:`schedule:${i.goalId}:${t.todoId}`,kind:`schedule`,schedule:{agentId:i.agentId,executionHistory:a?[{label:a.run.latestActivity||a.run.title,runId:a.run.runId,status:a.run.status===`waiting`||a.run.status===`queued`?`running`:a.run.status,timestamp:i.latestActivity||n(`common.recently`)}]:[],goalId:i.goalId,label:t.text,schedule:t.evidence??n(`schedule.summary`),scheduleId:t.todoId,scheduleKind:`monitor`,sessionId:a?.run.sessionId,status:t.done||t.status===`paused`?`paused`:`active`,stopCondition:n(`drawer.scheduleDefaultStop`),target:t.text,timezone:`Asia/Shanghai`}})});let a=e.timeline?.find(e=>e.kind===`proposal`&&e.proposal.actionKind===`heartbeat.bind`&&e.proposal.goalId===i.goalId);if(a){let e=e=>a.proposal.fields.find(t=>t.key===e)?.value;r.push({id:`schedule:${i.goalId}:heartbeat`,kind:`schedule`,schedule:{agentId:i.agentId,executionHistory:[],goalId:i.goalId,label:`${n(`schedule.heartbeat`)} · ${i.title}`,nextRunAt:n(`drawer.schedulePending`),notificationRule:n(`drawer.scheduleDefaultNotification`),schedule:e(`cadence`)??n(`schedule.summary`),scheduleId:`${i.goalId}:heartbeat`,scheduleKind:`heartbeat`,status:a.proposal.status===`applied`?`active`:`draft`,stopCondition:e(`stop_condition`)??n(`drawer.scheduleDefaultStop`),timezone:e(`timezone`)??`Asia/Shanghai`}})}return r}function $b(e){return e===`preview_ready`?`ready`:e===`cancelled`?`draft`:e===`failed`?`error`:e}function ex(e,t){let n={agent_id:t(`proposal.field.agentId`),cadence:t(`proposal.field.cadence`),completion_criteria:t(`proposal.field.completionCriteria`),execution_boundary:t(`proposal.field.executionBoundary`),goal_id:t(`proposal.field.goalId`),heartbeat:t(`proposal.field.heartbeat`),initial_todos:t(`proposal.field.initialTodos`),objective:t(`proposal.field.objective`),operation:t(`proposal.field.operation`),permission:t(`proposal.field.permission`),reason:t(`proposal.field.reason`),stop_condition:t(`proposal.field.stopCondition`),target:t(`proposal.field.target`),timezone:t(`proposal.field.timezone`),title:t(`proposal.field.title`),workspace_ref:t(`proposal.field.workspace`)},r=[`title`,`objective`,`completion_criteria`,`execution_boundary`,`permission`,`agent_id`,`workspace_ref`,`initial_todos`,`heartbeat`,`stop_condition`,`goal_id`];return Object.entries(e).sort(([e],[t])=>{let n=r.indexOf(e),i=r.indexOf(t);return(n<0?r.length:n)-(i<0?r.length:i)}).slice(0,10).map(([e,r])=>({key:e,label:n[e]??e.replaceAll(`_`,` `),value:e===`workspace_ref`?r===`current`?t(`proposal.workspace.current`):t(`proposal.workspace.named`,{workspace:String(r??`current`)}):Array.isArray(r)?r.join(` · `):typeof r==`object`&&r?JSON.stringify(r):String(r??`—`)}))}function tx(e){if(e.action_kind!==`goal.lifecycle`)return;let t=e.normalized_parameters.operation;return t===`stop`||t===`resume`||t===`delete`?t:void 0}function nx(e,t){let n=tx(e),r=typeof e.normalized_parameters.title==`string`?e.normalized_parameters.title:typeof e.normalized_parameters.goal_id==`string`?e.normalized_parameters.goal_id:``,i=typeof e.normalized_parameters.target==`string`?e.normalized_parameters.target:``,a=e.action_kind===`goal.create`?t(`proposal.summary.goalCreate`,{title:r}):e.action_kind===`heartbeat.bind`?t(`proposal.summary.heartbeat`):e.action_kind===`monitor.create`?t(`proposal.summary.monitor`,{target:i}):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.summary.lifecycleStop`,{title:r}):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.summary.lifecycleDelete`,{title:r}):e.action_kind===`goal.lifecycle`?t(`proposal.summary.lifecycleResume`,{title:r}):e.summary;return{actionKind:e.action_kind,fields:ex(e.normalized_parameters,t),goalId:typeof e.normalized_parameters.goal_id==`string`?e.normalized_parameters.goal_id:void 0,impact:e.action_kind===`goal.create`?t(`proposal.impact.goalCreate`):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.impact.lifecycleStop`):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.impact.lifecycleDelete`):e.action_kind===`goal.lifecycle`?t(`proposal.impact.lifecycleResume`):e.permission_classification===`protected`?t(`proposal.impact.protected`):t(`proposal.impact.default`),previewId:e.proposal_id,lifecycleOperation:n,gate:e.gate?{kind:String(e.gate.kind??`protected_action`),nextAction:typeof e.gate.next_action==`string`?e.gate.next_action:void 0,summary:String(e.gate.summary??t(`proposal.gate.default`))}:void 0,primaryLabel:e.action_kind===`goal.create`?t(`proposal.primary.goalCreate`):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.primary.lifecycleStop`):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.primary.lifecycleDelete`):e.action_kind===`goal.lifecycle`?t(`proposal.primary.lifecycleResume`):e.action_kind===`todo.create`&&e.normalized_parameters.start_execution===!0?t(`proposal.primary.todoStart`):t(`proposal.primary.apply`),status:$b(e.status),title:a}}function rx(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,42);if(t)return t;let n=2166136261;for(let t of e)n^=t.codePointAt(0)??0,n=Math.imul(n,16777619);return`goal-${(n>>>0).toString(36)}`}function ix(e,t){let n=e.match(/[「“"]([^」”"]{2,80})[」”"]/u)?.[1];return n?n.trim():e.replace(/^(请|帮我|我想|给我|创建|新建|设置|please|i want to|create|set up)+/iu,``).replace(/(一个|新的)?\s*(goal|目标)/giu,``).replace(/[,。!?].*$/u,``).trim().slice(0,80)||t(`goal.defaultTitle`)}function ax(e,t){for(let n of e.split(/\r?\n/u)){let e=n.trim();for(let n of t){let t=e.match(RegExp(`^${n.replace(/[.*+?^${}()|[\]\\]/gu,`\\$&`)}\\s*[::]\\s*(.*)$`,`iu`));if(t?.[1]?.trim())return t[1].trim()}}return``}function ox(e,t){let n=ax(e,[`目标`,`Objective`]),r=ax(e,[`完成标准`,`Completion criteria`]),i=ax(e,[`执行边界(可选)`,`执行边界`,`边界`,`Execution boundary (optional)`,`Execution boundary`,`Boundary`]),a=(n||ix(e,t)).split(/[。;;\n]/u)[0].trim().slice(0,80)||t(`goal.defaultTitle`),o=[n||a,r?t(`goal.objectiveCompletion`,{criteria:r}):``,i?t(`goal.objectiveBoundary`,{boundary:i}):``].filter(Boolean).join(` +`),s=/(只读|不调用外部工具|不修改(?:仓库|代码|状态)|read.?only|do not (?:call|use) external tools|do not modify (?:repositories|repository|code|state))/iu.test(i||e);return{completionCriteria:r,executionBoundary:i,initialTodos:r?[t(`goal.initialTodo`,{criteria:r})]:[],objective:o,permission:s?`read_only`:`workspace_write_on_confirmation`,title:a}}function sx(e){let t=e.match(/(?:每|every)\s*(\d{1,3})\s*(?:分钟|minutes?)/iu)?.[1];if(t)return`${t}m`;let n=e.match(/(?:每|every)\s*(\d{1,2})\s*(?:小时|hours?)/iu)?.[1];return n?`${n}h`:/每小时|every hour|hourly/iu.test(e)?`1h`:(/每天|每日|早上|上午|daily|every day/iu.test(e),`1d`)}function cx(e,t){return/(每周|星期|周[一二三四五六日天]|weekly|every\s+(?:mon|tues|wednes|thurs|fri|satur|sun)day|\d{1,2}\s*[::]\s*\d{2})/iu.test(e)?t(`schedule.unsupportedCalendar`):null}function lx(e,t){return ax(e,[`检查内容`,`监控内容`,`目标`,`Check target`,`Monitor target`,`Target`])||e.replace(/^(?:为当前 Goal |for the current Goal )?(?:添加|配置|创建|add|configure|create)?\s*(?:定时检查|监控|scheduled check|monitor)[::]?/iu,``).split(/\r?\n/u)[0].trim()||t(`schedule.defaultTarget`)}function ux(e){return/(mr|pr).{0,8}(合并|merge)/iu.test(e)?`pr_merged`:/发布完成|上线完成|release (?:is )?complete|deployment (?:is )?complete/iu.test(e)?`release_complete`:`goal_complete`}function dx(e,t){let n=e.toLowerCase();return t.find(e=>n.includes(e.agentId.toLowerCase())||n.includes(e.label.toLowerCase()))}function fx(e){let t=ax(e,[`标题`,`任务标题`,`Todo 标题`]),n=ax(e,[`内容`,`任务内容`,`Todo 内容`]);if(t)return[t,n].filter(Boolean).join(`:`).slice(0,400);let r=e.match(/[「“"]([^」”"]{2,200})[」”"]/u)?.[1];return r?r.trim():e.replace(/^(请|帮我|给我|为当前 Goal |新增|新建|创建|添加|加上|加一个|记一个)+/u,``).replace(/^(一个\s*)?(普通\s*)?(todo|待办|任务)(?:\s*到\s*Tasks?)?[::\s]*/iu,``).replace(/[。;;,,]\s*(?:不要|不需要|无需|禁止|别|暂不).{0,80}(?:heartbeat|心跳|定时|监控|执行).*$/iu,``).replace(/[,,]\s*(并且|然后|再)?\s*(交给|分配给|让).+$/u,``).replace(/\s*(交给|分配给|让)\s+.+$/u,``).trim().slice(0,400)||`推进当前 Goal 的下一项工作`}var px=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]),mx=5242880,hx=4;function gx(e,t){return new Promise((n,r)=>{let i=new FileReader;i.onerror=()=>r(Error(t(`composer.imageReadError`,{name:e.name}))),i.onload=()=>n({dataUrl:String(i.result??``),id:crypto.randomUUID(),mimeType:e.type,name:e.name,size:e.size}),i.readAsDataURL(e)})}function _x({agents:e=[{agentId:`codex`,available:!0,capability:`代码与项目执行`,label:`Codex`}],callbacks:t={},goalArchiveLoadState:n={error:null,phase:`ready`},model:r,readOnly:i=!1,selectedAgentId:a,selectedGoalId:o,statusSourceControl:s}){let{locale:c,t:l}=Ji(),[u,d]=(0,R.useState)(o??null),[f,p]=(0,R.useState)(a??e.find(e=>e.available)?.agentId??`codex`),[m,h]=(0,R.useState)(null),[g,_]=(0,R.useState)(!1),[v,y]=(0,R.useState)(null),[b,x]=(0,R.useState)({}),[S,C]=(0,R.useState)(`chat`),[w,T]=(0,R.useState)(!1),[E,D]=(0,R.useState)(!1),[O,k]=(0,R.useState)(!1),[ee,A]=(0,R.useState)(()=>{try{let e=window.sessionStorage.getItem(`loopx-pw-composer-drafts`),t=e?JSON.parse(e):{};return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}),[j,te]=(0,R.useState)(!1),[ne,re]=(0,R.useState)([]),[M,N]=(0,R.useState)(null),[ie,ae]=(0,R.useState)(null),[oe,P]=(0,R.useState)(()=>new Set),[F,I]=(0,R.useState)(()=>new Set),[se,ce]=(0,R.useState)(`idle`),[le,ue]=(0,R.useState)([]),[de,fe]=(0,R.useState)(!1),[pe,me]=(0,R.useState)(Hb),[he,ge]=(0,R.useState)({}),[_e,ve]=(0,R.useState)([]),ye=(0,R.useRef)(!1),be=(0,R.useRef)(NaN),xe=(0,R.useRef)(null),Se=(0,R.useRef)(null),Ce=(0,R.useRef)(null),we=(0,R.useRef)(new Set),Te=(0,R.useRef)(new Set),[Ee,De]=(0,R.useState)(null),L=o===void 0?u:o,Oe=a??f,ke=`${L??`manager`}:${Oe}`,Ae=ee[ke]??``;(0,R.useEffect)(()=>{re([]),N(null)},[ke]);function je(e,t){A(n=>{let r={...n};t?r[e]=t:delete r[e];try{window.sessionStorage.setItem(`loopx-pw-composer-drafts`,JSON.stringify(r))}catch{}return r})}function Me(e){je(ke,e)}function Ne(e){let t=ee[ke]?.trimEnd();Me(t?`${t}\n${e}`:e),window.requestAnimationFrame(()=>xe.current?.focus())}(0,R.useEffect)(()=>{let e=xe.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,120)}px`)},[Ae]);let Pe=(0,R.useMemo)(()=>r.goals.map(e=>{let t=he[e.goalId];return t?{...e,repository:{branch:t.branch,identity:t.identity,label:t.label,readOnly:!0}}:e}),[he,r.goals]),Fe=(0,R.useMemo)(()=>Pe.filter(e=>ty(e)===`needs_you`).length,[Pe]),Ie=(0,R.useMemo)(()=>Pe.filter(e=>ty(e)===`needs_you`&&(e.needsYouBlocking||e.state===`等你`)).length,[Pe]),B=Pe.find(e=>e.goalId===L)??null,Le=m?.kind===`settings`,Re=L,V=(0,R.useMemo)(()=>{let e=Object.values(b).filter(e=>e.actionKind===`heartbeat.bind`&&e.goalId&&e.status===`applied`).map(e=>({id:`schedule:${e.goalId}:heartbeat`,kind:`schedule`,schedule:{agentId:Oe,executionHistory:[],goalId:e.goalId,label:e.title,nextRunAt:l(`drawer.schedulePending`),notificationRule:l(`drawer.scheduleDefaultNotification`),schedule:e.fields.find(e=>e.key===`cadence`)?.value??l(`schedule.summary`),scheduleId:`${e.goalId}:heartbeat`,scheduleKind:`heartbeat`,status:e.status===`applied`?`active`:`draft`,stopCondition:e.fields.find(e=>e.key===`stop_condition`)?.value??l(`drawer.scheduleDefaultStop`),timezone:e.fields.find(e=>e.key===`timezone`)?.value??`Asia/Shanghai`}})),t=[...Qb(r,Re,l),...r.timeline??[],...e,...Kb(Object.values(b)).filter(e=>e.actionKind!==`heartbeat.bind`||e.status!==`applied`).map(e=>({id:`proposal:${e.previewId}`,kind:`proposal`,proposal:e}))];return[...new Map(t.map(e=>[e.id,e])).values()].filter(e=>e.kind!==`proposal`||![`stale`,`error`].includes(e.proposal.status)||le.includes(e.proposal.previewId)).filter(e=>!L||e.kind===`message`?!0:e.kind===`proposal`?!e.proposal.goalId||e.proposal.goalId===L:e.kind===`attention`?e.attention.goalId===L:e.kind===`run`?e.run.goalId===L:e.kind===`schedule`?e.schedule.goalId===L:e.output.goalId===L)},[Re,r,b,Oe,L,le,l]),ze=(0,R.useMemo)(()=>v?V.filter(e=>e.kind===`message`?!0:e.kind===`run`?e.run.runId===v.runId:e.kind===`output`&&e.output.runId===v.runId):V,[v,V]);(0,R.useEffect)(()=>{if(!v)return;let e=V.find(e=>e.kind===`run`&&e.run.runId===v.runId);!e||e.kind!==`run`||JSON.stringify({completedSteps:v.completedSteps,latestActivity:v.latestActivity,messages:v.sessionMessages,sessionStatus:v.sessionStatus,status:v.status,totalSteps:v.totalSteps})!==JSON.stringify({completedSteps:e.run.completedSteps,latestActivity:e.run.latestActivity,messages:e.run.sessionMessages,sessionStatus:e.run.sessionStatus,status:e.run.status,totalSteps:e.run.totalSteps})&&y(e.run)},[v,V]);let Be=(0,R.useMemo)(()=>V.flatMap(e=>e.kind===`message`?[e.message]:[]),[V]),Ve=(0,R.useMemo)(()=>B?V.flatMap(e=>e.kind===`message`?[e.message]:[]):[],[V,B]);(0,R.useEffect)(()=>{B||w||Be.some(e=>e.pending)&&D(!0)},[w,Be,B]),(0,R.useEffect)(()=>{!B||S===`chat`||Ve.some(e=>e.pending)&&k(!0)},[Ve,B,S]);let He=(0,R.useMemo)(()=>V.filter(e=>e.kind===`message`||e.kind===`proposal`&&le.includes(e.proposal.previewId)),[V,le]),Ue=He[He.length-1],We=Ue?.kind===`message`?Ue.message.text.length:0;(0,R.useEffect)(()=>{if(!w||!Se.current)return;let e=window.requestAnimationFrame(()=>{Se.current&&(Se.current.scrollTop=Se.current.scrollHeight)});return()=>window.cancelAnimationFrame(e)},[He.length,w,We]);let Ge=(0,R.useMemo)(()=>{if(m?.kind===`settings`)return null;if(m?.kind===`goal`){let e=Pe.find(e=>e.goalId===m.item.goalId);return e?{item:e,kind:`goal`}:m}if(m?.kind!==`run`)return m;let e=V.find(e=>e.kind===`run`&&e.run.runId===m.item.runId);return e?{item:e.run,kind:`run`}:m},[V,m,Pe]);(0,R.useEffect)(()=>{if(i){ge({}),ve([]);return}let e=!1;return Promise.all([Eg(),Lg()]).then(([t,n])=>{e||(ge(Object.fromEntries(t.map(e=>[e.goal_id,e.repository]))),ve(n))}).catch(()=>{}),()=>{e=!0}},[i]),(0,R.useEffect)(()=>{if(!de)return;function e(e){e.key===`Escape`&&fe(!1)}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[de]),(0,R.useEffect)(()=>{if(L||!V.length)return;if(!ye.current){ye.current=!0;try{be.current=Date.parse(window.localStorage.getItem(`loopx-pw-last-visit`)??``),window.localStorage.setItem(`loopx-pw-last-visit`,new Date().toISOString())}catch{be.current=NaN}}let e=be.current,t=V.filter(e=>e.kind===`run`).map(e=>e.run),n=t=>{let n=Date.parse(t??``);return!Number.isNaN(e)&&!Number.isNaN(n)&&n>e},r={attention:Fe,done:t.filter(e=>e.status===`completed`&&n(e.latestActivity)).length,failed:t.filter(e=>(e.status===`failed`||e.status===`interrupted`)&&n(e.latestActivity)).length};De(e=>e?.attention===r.attention&&e.done===r.done&&e.failed===r.failed?e:r)},[V,Fe,L]),(0,R.useEffect)(()=>{if(i){x({});return}let e=!1;return Ch(L?{goalId:L}:{contextKind:`manager`}).then(t=>{if(e)return;let n=Object.fromEntries(t.filter(e=>[`ready`,`gated`,`deferred`,`applying`].includes(e.status)).map(e=>{let t=nx(e,l);return[t.previewId,t]}));x(e=>({...e,...n}))}).catch(()=>{}),()=>{e=!0}},[i,L,l]);async function Ke(e,n={}){if(i)throw Error(l(`source.readOnlyWriteError`));let r;try{r=t.onPreviewAction?await t.onPreviewAction(e):nx(await xh(e),l)}catch(t){if(!(t instanceof _h)||t.payload.error_code!==`action_preview_gate`)throw t;let n=t.payload.gate&&typeof t.payload.gate==`object`?t.payload.gate:{},i=(Array.isArray(n.candidates)?n.candidates:[]).flatMap(e=>{if(!e||typeof e!=`object`)return[];let t=e;return typeof t.workspace_ref==`string`&&typeof t.label==`string`?[{label:t.label,workspaceRef:t.workspace_ref}]:[]}),a=String(n.kind??`workspace_selection_required`),o=a===`agent_binding_required`||a===`agent_identity_selection_required`;r={actionKind:e.actionKind,fields:i.map(e=>({key:`workspace_ref:${e.workspaceRef}`,label:e.label,value:e.workspaceRef})),gate:{kind:a,nextAction:typeof n.next_action==`string`?n.next_action:void 0,summary:String(n.summary??l(`proposal.workspaceGate.defaultSummary`))},impact:l(o?`proposal.workspaceGate.agentImpact`:`proposal.workspaceGate.selectionImpact`),previewId:`workspace-choice-${Date.now().toString(36)}`,sourceRequest:e,status:`gated`,title:l(o?`proposal.workspaceGate.agentTitle`:`proposal.workspaceGate.selectionTitle`),workspaceCandidates:i}}return ue(e=>e.includes(r.previewId)?e:[...e,r.previewId]),x(e=>({...e,[r.previewId]:r})),n.select!==!1&&h({item:r,kind:`proposal`}),r}function qe(){tt(null),je(`manager:${Oe}`,l(`composer.createGoalTemplate`)),window.requestAnimationFrame(()=>xe.current?.focus())}async function Je(e,n){let r={delete:`Deleted from the owner workspace`,resume:`Resumed from the owner workspace`,stop:`Stopped from the owner workspace`},i={delete:l(`proposal.summary.lifecycleDelete`,{title:e.title}),resume:l(`proposal.summary.lifecycleResume`,{title:e.title}),stop:l(`proposal.summary.lifecycleStop`,{title:e.title})},a=null,o=!1;try{if(n===`stop`){if(we.current.has(e.goalId))return;we.current.add(e.goalId),P(new Set(we.current)),h(null),a={goalId:e.goalId,next:`stopped`,optimisticApplied:!0,previous:e.activationState},ae(l(`feedback.applying`,{title:i.stop})),t.onGoalActivationStateChange?.(e.goalId,`stopped`)}let s=await Ke({actionKind:`goal.lifecycle`,context:{kind:`goal_directory`,goal_id:e.goalId},idempotencyKey:`workspace-goal-${n}-${e.goalId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,operation:n,reason:r[n]},summary:i[n]},{select:n!==`stop`});n===`stop`&&(s.status===`ready`?(o=!0,await Qe(s,{lifecycleProjection:a??void 0,presentation:`feedback`})):(a&&t.onGoalActivationStateChange?.(a.goalId,a.previous),ae(s.gate?l(`feedback.gateRequired`,{summary:s.gate.summary}):l(`feedback.notCompleted`,{status:s.status})),h({item:s,kind:`proposal`})))}catch(e){a&&!o&&t.onGoalActivationStateChange?.(a.goalId,a.previous),ae(l(`feedback.executionFailed`,{error:e instanceof Error?e.message:String(e)}))}finally{n===`stop`&&(we.current.delete(e.goalId),P(new Set(we.current)))}}function Ye(e,t){Me(l(t?e===`heartbeat`?`composer.heartbeatTemplate`:`composer.monitorTemplate`:e===`heartbeat`?`composer.heartbeatTemplateWithoutGoal`:`composer.monitorTemplateWithoutGoal`)),h(null),window.requestAnimationFrame(()=>xe.current?.focus())}async function Xe(e,n,r=``){let i=await t.onRequestScheduleConfig?.(e,n);if(i){ue(e=>e.includes(i.previewId)?e:[...e,i.previewId]),x(e=>({...e,[i.previewId]:i})),h({item:i,kind:`proposal`});return}if(!n){Me(l(e===`heartbeat`?`composer.heartbeatGoalQuestion`:`composer.monitorGoalQuestion`));return}let a=Date.now().toString(36);await Ke({actionKind:e===`heartbeat`?`heartbeat.bind`:`monitor.create`,context:{kind:`schedule`,goal_id:n},idempotencyKey:`workspace-${e}-${n}-${a}`,normalizedParameters:e===`heartbeat`?{agent_id:Oe,cadence:sx(r),goal_id:n,stop_condition:ux(r),timezone:`Asia/Shanghai`}:{agent_id:Oe,cadence:sx(r),goal_id:n,stop_condition:ux(r),target:lx(r,l),target_key:`goal-${n}`,timezone:`Asia/Shanghai`},summary:e===`heartbeat`?l(`proposal.summary.heartbeat`):l(`proposal.summary.monitor`,{target:lx(r,l)})})}async function Ze(e){if(!Te.current.has(e.todoId)){Te.current.add(e.todoId),I(new Set(Te.current)),ae(l(`feedback.preparingPreview`,{title:e.text}));try{await Ke({actionKind:`todo.update`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-${e.todoId}-complete-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,operation:`complete`,todo_id:e.todoId},summary:l(`tasks.markComplete`,{name:e.text})}),ae(null)}catch(e){ae(l(`feedback.previewFailed`,{error:e instanceof Error?e.message:String(e)}))}finally{Te.current.delete(e.todoId),I(new Set(Te.current))}}}async function Qe(e,n={}){let i=n.presentation!==`feedback`,a=e.actionKind===`goal.lifecycle`&&e.goalId&&(e.lifecycleOperation===`stop`||e.lifecycleOperation===`resume`)?{goalId:e.goalId,next:e.lifecycleOperation===`stop`?`stopped`:`active`,optimisticApplied:!1,previous:r.goals.find(t=>t.goalId===e.goalId)?.activationState??(e.lifecycleOperation===`stop`?`active`:`stopped`)}:null,o=n.lifecycleProjection??a;ae(l(`feedback.applying`,{title:e.title}));let s={...e,status:`applying`};x(t=>({...t,[e.previewId]:s})),i&&h({item:s,kind:`proposal`}),o&&!o.optimisticApplied&&t.onGoalActivationStateChange?.(o.goalId,o.next);try{if(t.onApplyProposal){await t.onApplyProposal(e);let n={...e,status:`applied`};if(x(t=>({...t,[e.previewId]:n})),i&&h({item:n,kind:`proposal`}),ae(l(`feedback.completed`,{title:e.title})),e.actionKind===`goal.lifecycle`){(e.lifecycleOperation===`stop`||e.lifecycleOperation===`delete`)&&tt(null),e.lifecycleOperation===`delete`&&e.goalId&&t.onGoalDeleted?.(e.goalId);let n=t.onReconcileStatus??t.onRefresh;Promise.resolve().then(()=>n?.()).catch(()=>void 0)}return}let n=await wh(e.previewId),r=nx(n.proposal,l);if(x(t=>({...t,[e.previewId]:r})),i&&h({item:r,kind:`proposal`}),n.proposal.status!==`applied`||n.proposal.receipt?.projection_verified!==!0){o&&t.onGoalActivationStateChange?.(o.goalId,o.previous),ae(n.proposal.status===`stale`?l(`feedback.stale`):l(`feedback.notCompleted`,{status:n.proposal.status}));return}if(ae(l(`feedback.completed`,{title:r.title})),r.actionKind===`todo.create`&&await t.onRefresh?.(),r.actionKind===`goal.lifecycle`&&(r.lifecycleOperation===`stop`||r.lifecycleOperation===`delete`)&&tt(null),r.actionKind===`goal.lifecycle`&&r.lifecycleOperation===`delete`&&r.goalId&&t.onGoalDeleted?.(r.goalId),r.actionKind===`goal.lifecycle`){let e=t.onReconcileStatus??t.onRefresh;Promise.resolve().then(()=>e?.()).catch(()=>void 0)}}catch(n){if(o&&t.onGoalActivationStateChange?.(o.goalId,o.previous),n instanceof _h&&n.payload.error_code===`protected_action`){let r=n.payload.gate,i=r&&typeof r==`object`?r:{},a={...e,gate:{kind:String(i.kind??`protected_action`),nextAction:typeof i.next_action==`string`?i.next_action:void 0,summary:String(i.summary??n.message)},status:`gated`};x(t=>({...t,[e.previewId]:a})),h({item:a,kind:`proposal`}),ae(l(`feedback.gateRequired`,{summary:a.gate.summary})),e.actionKind===`goal.create`&&e.goalId&&(t.onRefresh?.(),tt(e.goalId));return}let r=n instanceof Error&&/stale|状态.*变化|conflict/i.test(n.message),a={...e,errorMessage:n instanceof Error?n.message:String(n),status:r?`stale`:`error`};x(t=>({...t,[e.previewId]:a})),i&&h({item:a,kind:`proposal`}),ae(l(`feedback.executionFailed`,{error:a.errorMessage}))}}let $e={...t,onOpenRunSession:async e=>{e.goalId!==L&&tt(e.goalId),C(`chat`),await t.onOpenRunSession?.(e),y(e),h(null)},onOpenGoal:e=>{tt(e);let n=t.onReconcileStatus??t.onRefresh;Promise.resolve().then(()=>n?.()).catch(()=>{ae(l(`feedback.goalRefreshFailed`))})},onOpenGoalView:e=>{C(e),e===`chat`&&y(null),h(null)},onOpenOutput:e=>{e.goalId!==L&&tt(e.goalId),C(`files`),t.onOpenOutput?.(e)},onApplyProposal:Qe,onCancelProposal:async e=>{h(null),x(t=>{let n={...t};return delete n[e.previewId],n});try{t.onCancelProposal?.(e),t.onCancelProposal||await Th(e.previewId)}catch(t){x(t=>({...t,[e.previewId]:e})),ae(l(`feedback.cancelFailed`,{error:t instanceof Error?t.message:String(t)}))}},onTransitionProposal:async(e,t)=>{let n=nx(await Eh(e.previewId,t),l);ue(e=>e.includes(n.previewId)?e:[...e,n.previewId]),x(r=>{let i={...r};return t===`regenerate`&&delete i[e.previewId],i[n.previewId]=n,i}),h({item:n,kind:`proposal`})},onSelectWorkspaceCandidate:async(e,t)=>{e.sourceRequest&&(x(t=>{let n={...t};return delete n[e.previewId],n}),await Ke({...e.sourceRequest,idempotencyKey:`${e.sourceRequest.idempotencyKey}-${t}`,normalizedParameters:{...e.sourceRequest.normalizedParameters,workspace_ref:t}}))},onPreviewAction:Ke,onRequestScheduleConfig:(e,t)=>Ye(e,t),onOpenNotificationSettings:e=>h({goalId:e,kind:`settings`,tab:`lark`}),onFetchNotificationTargets:()=>Yh(),onSetupGoalChannel:e=>Zh(e),onToggleGoalAutoNotify:e=>Qh(e),onUpdateSchedule:async(e,t)=>{let n=Date.now().toString(36),r=e.scheduleKind===`heartbeat`;await Ke({actionKind:r?`heartbeat.bind`:`monitor.update`,context:{kind:`schedule`,goal_id:e.goalId},idempotencyKey:`workspace-monitor-${e.scheduleId}-${t}-${n}`,normalizedParameters:{agent_id:e.agentId??Oe,...!r&&t===`run_now`?{endpoint_id:Oe}:{},...t===`edit`?{cadence:`2h`,...r?{timezone:e.timezone??`Asia/Shanghai`}:{}}:{},goal_id:e.goalId,operation:t,...!r&&t===`run_now`&&e.sessionId?{session_id:e.sessionId}:{},...r?{}:{todo_id:e.scheduleId}},summary:t===`pause`?`暂停自动运行:${e.label}`:t===`resume`?`恢复自动运行:${e.label}`:t===`run_now`?`立即运行:${e.label}`:t===`stop`?`停止自动运行:${e.label}`:`编辑自动运行生命周期:${e.label}`})}},et=i?{onOpenGoal:$e.onOpenGoal,onOpenGoalView:$e.onOpenGoalView,onOpenOutput:$e.onOpenOutput}:$e;function tt(e){d(e),T(!1),D(!1),k(!1),y(null),h(null),C(`tasks`),fe(!1),t.onSelectGoal?.(e)}function nt(e){p(e),t.onSelectAgent?.(e)}function rt(e){me(e),Ub(e)}async function it(n){let r=n?[]:ne,i=(n??Ae).trim()||(r.length?l(`composer.imageAnalysisPrompt`):``);if(!(!i||j)){n||(Me(``),re([])),N(null),te(!0);try{if(r.length){L?S!==`chat`&&k(!0):D(!0);let e=await t.onSendMessage?.(i,Oe,L,r);e&&await Ke(e);return}let n=Dy(i,{agents:e.map(e=>({agentId:e.agentId,label:e.label})),goalId:L,todos:(B?.agentTodos??[]).map(e=>({text:e.text,todoId:e.todoId}))});if(n.route===`clarify`){Me(i);let e=l(`composer.clarifySingleAction`);n.missingFields.includes(`resume_when`)&&(e=l(`composer.clarifyDefer`)),ae(e);return}if(n.actionKind===`goal.create`){let e=ox(i,l),t=rx(e.title);await Ke({actionKind:`goal.create`,context:{kind:`manager`,goal_id:null,natural_language:i},idempotencyKey:`workspace-goal-intent-${t}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:Oe,completion_criteria:e.completionCriteria,execution_boundary:e.executionBoundary,goal_id:t,heartbeat:{cadence:sx(i),enabled:n.normalizedParameters.heartbeat_enabled===!0,timezone:`Asia/Shanghai`},initial_todos:e.initialTodos,objective:e.objective,permission:e.permission,stop_condition:ux(i),title:e.title,workspace_ref:`current`},summary:l(`proposal.summary.goalCreate`,{title:e.title})});return}if(L&&n.actionKind===`heartbeat.bind`){await Xe(`heartbeat`,L,i);return}if(L&&n.actionKind===`monitor.create`){let e=cx(i,l);if(e){Me(i),ae(e);return}await Xe(`monitor`,L,i);return}let a=dx(i,e);if(L&&a&&n.actionKind===`agent.bind`){await Ke({actionKind:`agent.bind`,context:{kind:`goal`,goal_id:L,natural_language:i},idempotencyKey:`workspace-agent-bind-${L}-${a.agentId}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:a.agentId,goal_id:L},summary:`将 ${a.label} 绑定到 ${B?.title??L}`});return}if(L&&n.actionKind===`todo.create`){if(n.normalizedParameters.start_execution===!0){await Ke({actionKind:`todo.create`,context:{kind:`goal`,goal_id:L,natural_language:i},idempotencyKey:`workspace-task-start-${L}-${Date.now().toString(36)}`,normalizedParameters:{endpoint_id:a?.agentId??Oe,goal_id:L,start_execution:!0,text:i},summary:`交给 Agent 执行:${i.slice(0,120)}`});return}let e=a?.agentId??(/(交给|分配给|让).{0,24}(agent|codex|claude|kiro|kimi)/iu.test(i)?Oe:null);await Ke({actionKind:`todo.create`,context:{kind:`goal`,goal_id:L,natural_language:i},idempotencyKey:`workspace-todo-create-${L}-${Date.now().toString(36)}`,normalizedParameters:{...e?{endpoint_id:e}:{},goal_id:L,text:fx(i)},summary:`创建 Todo:${fx(i)}`});return}let o=B?.agentTodos.find(e=>i.includes(e.todoId)||i.includes(e.text)),s=typeof n.normalizedParameters.operation==`string`?n.normalizedParameters.operation:null;if(L&&o&&n.actionKind===`todo.update`&&s){await Ke({actionKind:`todo.update`,context:{kind:`todo`,goal_id:L,todo_id:o.todoId,natural_language:i},idempotencyKey:`workspace-todo-update-${o.todoId}-${s}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:Oe,...s===`reassign`&&a?{endpoint_id:a.agentId}:{},...s===`block`?{note:i}:{},...s===`defer`&&typeof n.normalizedParameters.resume_when==`string`?{resume_when:n.normalizedParameters.resume_when}:{},goal_id:L,operation:s,todo_id:o.todoId},summary:`更新 Todo:${o.text}`});return}L?S!==`chat`&&k(!0):D(!0);let c=await t.onSendMessage?.(i,Oe,L);c&&await Ke(c)}catch(e){n||(Me(i),re(r));let t=e instanceof Error?e.message:l(`feedback.sendGenericError`);ae(l(`feedback.sendFailed`,{error:t}))}finally{te(!1)}}}let at=e.find(e=>e.agentId===Oe)?.label??Oe,ot=!B&&Ae.startsWith(l(`composer.createGoalDraftLead`)),st=V.filter(e=>e.kind===`run`&&!!e.run.sessionId&&!!e.run.canInterrupt&&(e.run.status===`running`||e.run.status===`queued`)).length;async function ct(e){if(!e?.length)return;let t=hx-ne.length,n=Array.from(e).slice(0,Math.max(0,t)),r=n.find(e=>!px.has(e.type)),i=n.find(e=>e.size>mx);if(t<=0){N(l(`composer.imageCountError`,{count:hx}));return}if(r){N(l(`composer.imageTypeError`));return}if(i){N(l(`composer.imageSizeError`,{size:mx/1024/1024}));return}try{let t=await Promise.all(n.map(e=>gx(e,l)));re(e=>[...e,...t].slice(0,hx)),N(e.length>n.length?l(`composer.imageCountError`,{count:hx}):null)}catch(e){N(e instanceof Error?e.message:l(`composer.imageReadGenericError`))}finally{Ce.current&&(Ce.current.value=``)}}function lt(e){let t=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&e.type.startsWith(`image/`)).flatMap(e=>{let t=e.getAsFile();return t?[t]:[]});t.length&&(e.preventDefault(),ct(t))}async function ut(){let e=await Lg();ve(e)}async function dt(){await Promise.all([ut(),t.onRefresh?.()])}async function ft(){if(!(!t.onRefresh||se===`loading`)){ce(`loading`);try{await t.onRefresh(),ce(`done`)}catch{ce(`error`)}window.setTimeout(()=>ce(`idle`),1800)}}return Le?(0,z.jsx)(zb,{focusGoalConnection:!!(m?.kind===`settings`&&m.goalId),goals:Pe,initialGoalId:m?.kind===`settings`?m.goalId??L:L,initialTab:m?.kind===`settings`?m.tab??`lark`:`lark`,onChanged:()=>void dt(),onClose:()=>h(null),onThemeChange:rt,theme:pe}):(0,z.jsx)(Wb,{drawer:Ge?(0,z.jsx)(Fy,{agents:e,callbacks:et,goalNotifications:r.goalNotifications??[],goals:Pe,inspectorExpanded:g,larkConnections:i?[]:_e,onClose:()=>{Ge.kind===`proposal`&&[`applied`,`rejected`].includes(Ge.item.status)&&(Ge.item.actionKind!==`heartbeat.bind`||Ge.item.status!==`applied`)&&x(e=>{let t={...e};return delete t[Ge.item.previewId],t}),_(!1),h(null)},onToggleInspectorSize:()=>_(e=>!e),readOnly:i,runs:V.flatMap(e=>e.kind===`run`?[e.run]:[]),selection:Ge}):null,drawerMode:Ge?.kind===`todo`?g?`inspector-full`:`inspector`:`panel`,drawerOpen:Ge!==null,mobileSidebarOpen:de,onCloseMobileSidebar:()=>fe(!1),theme:pe,main:(0,z.jsxs)(`div`,{className:`personal-channel`,children:[(0,z.jsx)(ly,{agents:e,managerChatOpen:w,mobileNavigationOpen:de,onOpenGoalCapabilities:B?()=>h({goalId:B.goalId,kind:`settings`,tab:`capabilities`}):void 0,onOpenGoalDetail:B&&!B.loadState?()=>h({item:B,kind:`goal`}):void 0,onRefresh:t.onRefresh?()=>void ft():void 0,onOpenNavigation:()=>fe(!0),onOpenManagerChat:()=>{D(!1),T(!0)},onSelectGoalTab:e=>{C(e),e===`chat`&&(y(null),k(!1))},onSelectAgent:nt,onReturnManagerHome:()=>{T(!1),D(!1),window.requestAnimationFrame(()=>Se.current?.scrollTo({behavior:`smooth`,top:0}))},selectedAgentId:Oe,refreshState:se,readOnlySourceLabel:i?s?.activeSource.label:void 0,selectedGoal:B,selectedGoalTab:S}),(0,z.jsxs)(`div`,{className:`personal-channel-scroll`,ref:Se,children:[!B&&!w&&Ee&&Ee.done+Ee.failed+Ee.attention>0?(0,z.jsxs)(`section`,{className:`personal-digest-card`,"aria-label":l(`digest.away`),children:[(0,z.jsx)(`strong`,{children:l(`digest.away`)}),(0,z.jsxs)(`div`,{className:`personal-digest-stats`,children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Ee.done}),l(`digest.completed`)]}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Ee.failed}),l(`digest.failed`)]}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Ee.attention}),l(`digest.needsYou`)]})]})]}):null,!B&&!w?(0,z.jsxs)(`section`,{className:`personal-manager-greeting`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(Up,{size:20})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:l(`home.greeting`)}),(0,z.jsx)(`p`,{children:r.goals.some(e=>e.activationState===`active`&&e.loadState)?l(`startup.partial`):(0,z.jsxs)(z.Fragment,{children:[l(`home.waitingCount`,{count:Fe}),` `,l(`home.blockingSummary`,{count:Ie})]})})]})]}):null,B?.loadState?(0,z.jsx)(`section`,{className:`personal-manager-greeting`,role:`status`,"data-testid":`goal-status-loading`,children:(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:l(B.loadState===`error`?`startup.goalError`:`startup.goalLoading`)}),(0,z.jsx)(`p`,{children:l(B.loadError?`startup.error.${B.loadError}`:`startup.independent`)}),B.loadState===`error`?(0,z.jsx)(`button`,{className:`min-h-11 rounded-md border px-3 py-2 text-sm`,type:`button`,onClick:()=>void t.onRefresh?.(),children:l(`startup.retry`)}):null]})}):B&&S===`tasks`?(0,z.jsx)(ib,{historyEnabled:!i,goal:B,items:V,onDraftTaskFromMessage:i?void 0:e=>{Me(`创建一个 Task:${Gb(e)}`),ae(l(`feedback.taskDraftCreated`)),window.requestAnimationFrame(()=>xe.current?.focus())},onOpenChat:()=>C(`chat`),onQuickComplete:i?void 0:Ze,onSelect:h,quickCompletingTodoIds:F,selectedTodoId:Ge?.kind===`todo`?Ge.item.todoId:null,userTodos:r.userTodos}):B&&S===`files`?(0,z.jsx)(Yb,{items:V.filter(e=>e.kind===`output`),onSelect:h,reportState:r.periodicReports}):!B&&!w?(0,z.jsx)(Jb,{goals:Pe,onRetry:()=>void t.onRefresh?.(),onSelectGoal:tt,systemHealth:r.systemHealth}):B?(0,z.jsxs)(z.Fragment,{children:[B&&v?.goalId===B.goalId?(0,z.jsx)(Zb,{onClose:()=>y(null),onOpenDetails:()=>h({item:v,kind:`run`}),run:v}):null,(0,z.jsx)(xy,{items:ze,onSelect:h,selectedGoal:B})]}):(0,z.jsx)(xy,{items:He,onSelect:h,selectedGoal:null})]}),(0,z.jsx)(`div`,{className:`personal-composer-wrap`,children:i?(0,z.jsxs)(`div`,{className:`personal-read-only-notice`,children:[(0,z.jsx)(`strong`,{children:l(`source.readOnlyNoticeTitle`)}),(0,z.jsx)(`span`,{children:l(`source.readOnlyNoticeDescription`)})]}):(0,z.jsxs)(z.Fragment,{children:[!B&&!w&&E&&Be.length?(0,z.jsx)(Xb,{messages:Be,onClose:()=>D(!1),onOpenConversation:()=>{D(!1),T(!0)}}):null,B&&S!==`chat`&&O&&Ve.length?(0,z.jsx)(Xb,{agentLabel:at,messages:Ve,onClose:()=>k(!1),onDraftTask:S===`tasks`?e=>{Me(`创建一个 Task:${Gb(e)}`),ae(l(`feedback.taskDraftCreated`)),window.requestAnimationFrame(()=>xe.current?.focus())}:void 0,onOpenConversation:()=>{k(!1),C(`chat`)},title:`${B.title} · ${at}`}):null,ie?(0,z.jsxs)(`div`,{className:`personal-action-feedback`,role:`status`,children:[(0,z.jsx)(`span`,{children:ie}),(0,z.jsx)(`button`,{"aria-label":l(`common.closeActionReceipt`),onClick:()=>ae(null),type:`button`,children:(0,z.jsx)(Gm,{size:14})})]}):null,(0,z.jsx)(`p`,{className:`personal-composer-hint`,children:B?st>0?l(`composer.goalRunningHint`,{agent:at,count:st}):l(`composer.goalMessageHint`,{agent:at}):l(`composer.managerMessageHint`)}),B?(0,z.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,z.jsxs)(`button`,{"aria-label":l(`composer.nextAction`),className:`is-draft`,onClick:()=>Ne(l(`composer.nextActionPrompt`)),title:l(`composer.prepareDraft`),type:`button`,children:[(0,z.jsx)(vm,{size:13}),(0,z.jsx)(`span`,{children:l(`composer.nextAction`)}),(0,z.jsx)(`small`,{className:`personal-prompt-subtle`,children:l(`composer.draft`)})]}),(0,z.jsxs)(`button`,{className:`is-immediate`,disabled:j,onClick:()=>void it(l(`composer.agentProgressPrompt`)),title:l(`composer.immediate`),type:`button`,children:[(0,z.jsx)(Mm,{size:13}),(0,z.jsx)(`span`,{children:l(`composer.agentProgress`)}),(0,z.jsx)(`em`,{className:`personal-prompt-badge`,children:l(`composer.immediate`)})]}),(0,z.jsxs)(`button`,{"aria-label":l(`composer.monitor`),className:`is-draft`,onClick:()=>Ye(`monitor`,L),title:l(`composer.monitorHint`),type:`button`,children:[(0,z.jsx)(Gp,{size:13}),(0,z.jsx)(`span`,{children:l(`composer.monitor`)}),(0,z.jsx)(`small`,{className:`personal-prompt-subtle`,children:l(`composer.draft`)})]})]}):(0,z.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,z.jsxs)(`button`,{"aria-label":l(`composer.globalTasks`),className:`is-draft`,onClick:()=>Ne(l(`composer.globalTasksPrompt`)),title:l(`composer.prepareDraft`),type:`button`,children:[(0,z.jsx)(vm,{size:13}),(0,z.jsx)(`span`,{children:l(`composer.globalTasks`)}),(0,z.jsx)(`small`,{className:`personal-prompt-subtle`,children:l(`composer.draft`)})]}),(0,z.jsxs)(`button`,{className:`is-immediate`,disabled:j,onClick:()=>void it(l(`composer.globalProgressPrompt`)),title:l(`composer.immediate`),type:`button`,children:[(0,z.jsx)(Mm,{size:13}),(0,z.jsx)(`span`,{children:l(`composer.globalProgress`)}),(0,z.jsx)(`em`,{className:`personal-prompt-badge`,children:l(`composer.immediate`)})]}),(0,z.jsxs)(`button`,{"aria-label":l(`composer.createGoal`),className:`is-draft`,onClick:qe,title:l(`composer.createGoalHint`),type:`button`,children:[(0,z.jsx)(Em,{size:13}),(0,z.jsx)(`span`,{children:l(`composer.createGoal`)}),(0,z.jsx)(`small`,{className:`personal-prompt-subtle`,children:l(`composer.draft`)})]})]}),ot?(0,z.jsxs)(`div`,{className:`personal-goal-draft-status`,role:`status`,children:[(0,z.jsx)(`strong`,{children:l(`composer.createGoalDraft`)}),(0,z.jsx)(`span`,{children:l(`composer.createGoalDraftDescription`)})]}):null,ne.length?(0,z.jsx)(`div`,{className:`personal-composer-images`,"aria-label":l(`composer.imagesPending`),children:ne.map(e=>(0,z.jsxs)(`figure`,{children:[(0,z.jsx)(`img`,{alt:e.name,src:e.dataUrl}),(0,z.jsx)(`button`,{"aria-label":l(`composer.sentImageAlt`,{name:e.name}),onClick:()=>re(t=>t.filter(t=>t.id!==e.id)),type:`button`,children:(0,z.jsx)(Gm,{size:13})})]},e.id))}):null,M?(0,z.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:M}):null,(0,z.jsxs)(`div`,{className:`personal-channel-composer`,onDragOver:e=>{[...e.dataTransfer.items].some(e=>e.kind===`file`&&e.type.startsWith(`image/`))&&e.preventDefault()},onDrop:e=>{let t=[...e.dataTransfer.files].filter(e=>e.type.startsWith(`image/`));t.length&&(e.preventDefault(),ct(t))},children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(Up,{size:17}),e.find(e=>e.agentId===Oe)?.label??Oe]}),(0,z.jsx)(`button`,{"aria-label":l(`composer.addImage`),className:`personal-composer-attach`,disabled:j||ne.length>=hx,onClick:()=>Ce.current?.click(),title:l(`composer.attachImageHint`),type:`button`,children:(0,z.jsx)(Cm,{size:17})}),(0,z.jsx)(`input`,{accept:`image/png,image/jpeg,image/webp,image/gif`,"aria-label":l(`composer.imagePicker`),className:`personal-composer-file-input`,disabled:j||ne.length>=hx,multiple:!0,onChange:e=>void ct(e.target.files),ref:Ce,type:`file`}),(0,z.jsx)(`textarea`,{"aria-label":l(`composer.sendMessage`),onChange:e=>Me(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),it())},onPaste:lt,placeholder:B?l(`composer.goalPlaceholder`,{goal:B.title}):l(`composer.managerPlaceholder`),ref:xe,rows:1,value:Ae}),(0,z.jsx)(`button`,{"aria-label":l(ot?`composer.createGoal`:`composer.send`),disabled:!Ae.trim()&&ne.length===0||j,onClick:()=>void it(),title:l(ot?`composer.createGoalHint`:`composer.sendMessageHint`),type:`button`,children:(0,z.jsx)(Mm,{size:18})})]})]})})]}),sidebar:(0,z.jsx)(eb,{attentionCount:Fe,goals:Pe,goalArchiveLoadState:n,lifecycleBusyGoalIds:oe,onRequestGoalCreate:i?void 0:qe,onRequestGoalLifecycle:i?void 0:(e,t)=>void Je(e,t),onRetryGoalArchive:t.onRetryGoalArchive||t.onRefresh?()=>void(t.onRetryGoalArchive??t.onRefresh)?.():void 0,onOpenSettings:i?void 0:()=>h({kind:`settings`}),onSelectGoal:tt,selectedGoalId:L,statusSourceControl:s},s?.activeSource.statusUrl??`/status.json`)})}function vx(e){return(e??``).replace(/\s+/gu,` `).trim()}function yx(e,t=120){let n=Array.from(e);return n.length<=t?e:`${n.slice(0,t-1).join(``)}…`}function bx(e,t,n){let r=vx(e);return!r||r===`暂无`?n?t(n):``:/refresh-state|latest_run|latest run-derived/iu.test(r)?t(`projection.refreshState`):/first read-only adapter tick|read-only adapter/iu.test(r)?t(`projection.firstReadOnlyAdapterCheck`):/todo update recorded for/iu.test(r)?t(`projection.todoStatusUpdated`):/^(loopx|python3|npm|git|run)\s|\s--[a-z0-9-]+|\b[a-z]+_[a-z_]+\b/iu.test(r)?t(n??`projection.agentPreparingNextStep`):yx(r)}function xx(e,t){return t({advancing:`projection.agentAdvancingGoal`,idle:`projection.agentIdle`,needs_you:`projection.agentNeedsDecision`,stopped:`projection.agentStopped`,waiting_external:`projection.agentWaitingExternal`}[e])}function Sx({eventCount:e,hasArtifact:t,hasLatestValidation:n},r){return{label:r(n?`projection.latestValidation`:`projection.latestRun`),metadata:e>0?r(`projection.events24h`,{count:e}):r(t?`projection.runEvidenceAvailable`:`projection.publicSafeProjection`)}}var Cx=`/status.json`,wx=`loopx-status-source-catalog-v1`,Tx={id:`local`,kind:`local`,label:`本机`,readOnly:!1,statusUrl:Cx};function Ex(e,t){let n=Xm(e,t).source;if(!n||!n.isLoopback||n.isRelative)return{error:`SSH 隧道来源必须使用显式的 localhost、127.0.0.1 或 ::1 URL。`};let r=new URL(n.url,t);return[`http:`,`https:`].includes(r.protocol)?{url:r.toString()}:{error:`状态来源只支持 HTTP 或 HTTPS。`}}function Dx(e){let t=2166136261;for(let n of e)t^=n.codePointAt(0)??0,t=Math.imul(t,16777619);return`ssh-${(t>>>0).toString(36)}`}function Ox(e,t){if(!e||typeof e!=`object`||Array.isArray(e))return null;let n=e;if(n.kind!==`ssh_tunnel`||typeof n.label!=`string`||typeof n.statusUrl!=`string`)return null;let r=n.label.trim(),i=Ex(n.statusUrl,t);return!r||r.length>48||!(`url`in i)?null:{id:Dx(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url}}function kx(){return{schemaVersion:1,sources:[Tx]}}function Ax(e,t){try{let n=e.getItem(wx);if(!n)return kx();let r=JSON.parse(n);if(r.schemaVersion!==1||!Array.isArray(r.sources))return kx();let i=new Set([Tx.statusUrl]);return{schemaVersion:1,sources:[Tx,...r.sources.flatMap(e=>{let n=Ox(e,t);return!n||i.has(n.statusUrl)?[]:(i.add(n.statusUrl),[n])})]}}catch{return kx()}}function jx(e,t){e.setItem(wx,JSON.stringify({schemaVersion:1,sources:t.sources.filter(e=>e.kind===`ssh_tunnel`)}))}function Mx(e,t,n){let r=t.label.trim();if(!r)return{error:`请填写来源名称。`};if(r.length>48)return{error:`来源名称不能超过 48 个字符。`};let i=Ex(t.statusUrl,n);if(!(`url`in i))return i;if(e.sources.some(e=>e.statusUrl===i.url))return{error:`这个状态 URL 已经在来源目录中。`};let a={id:Dx(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url};return{catalog:{...e,sources:[...e.sources,a]},source:a}}function Nx(e,t){return{...e,sources:e.sources.filter(e=>e.kind===`local`||e.id!==t)}}function Px(e,t,n){if(!t.trim()||Xm(t,n).source?.isRelative)return Tx;let r=t.trim();try{r=new URL(r,n).toString()}catch{return null}return e.sources.find(e=>e.statusUrl===r)??null}function Fx(e,t,n){return Px(e,t,n)||(Xm(t,n).source?.isRelative?Tx:{id:`temporary`,kind:`ssh_tunnel`,label:`临时来源`,readOnly:!0,statusUrl:t.trim()})}function Ix(e,t,n,r){return Fx(e,t??n,r)}var Lx={delete:`删除`,deploy:`部署`,merge:`合并`,payment:`付款`,release:`发布`};function Rx(e,t,n){let r=t.replace(/\s+/gu,` `).trim().toLowerCase(),i=n.target.replace(/\s+/gu,` `).trim().toLowerCase();return!i||!r.includes(i)?null:{actionKind:`goal.update`,context:{goal_id:e,kind:`goal`,natural_language:t,semantic_proposal:{operation:n.operation,target:n.target}},idempotencyKey:`workspace-semantic-protected-${e}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e,status:`operator_gate_requested`},summary:`请求受保护操作:${Lx[n.operation]} · ${n.target}`}}var zx=Cx;async function Bx(e){let t=await fetch(e,{cache:`no-store`,signal:AbortSignal.timeout(3e4)});if(!t.ok)throw Error(`HTTP ${t.status} while loading ${e}`);return vp(await t.json())}function Vx(e,t){if(t?.controller_readiness?.decision_advisor_ready||t?.controller_readiness?.write_controller_ready)return`controller_ready`;if(t?.controller_readiness)return`controller_gated`;if(t?.human_reward)return`reward_judged`;if(t?.operator_gate?.decision===`approve`)return`operator_approved`;if(t?.operator_gate)return`operator_gated`;let n=e||t?.classification||``;return n===`connected_without_run`?`connected`:n===`read_only_project_map`||t?.project_map?`mapped`:n===`state_refreshed`?`refreshed`:n&&n!==`no_status`?`adapter_inspected`:`registered`}function Hx(e,t){let n=new Map(t.map(e=>[e.goal_id,e])),r=new Set,i=e.map(e=>{r.add(e.id);let t=n.get(e.id),i=e.latest_runs[0],a=t?.lifecycle_phase??e.lifecycle_phase??i?.lifecycle_phase??Vx(t?.status??i?.classification??e.status,i),o=t?.lifecycle_flags?.length?t.lifecycle_flags:e.lifecycle_flags?.length?e.lifecycle_flags:i?.lifecycle_flags?.length?i.lifecycle_flags:[a];return{goal:e,queueItem:t,latestRun:i,status:t?.status??i?.classification??e.status??`no_status`,waitingOn:t?.waiting_on??`clear`,severity:t?.severity??`clear`,lifecyclePhase:a,lifecycleFlags:o}});for(let e of t)r.has(e.goal_id)||i.push({goal:{activation_state:e.activation_state,id:e.goal_id,status:e.status,display_name:e.goal_id,latest_runs:[],lifecycle_flags:[e.lifecycle_phase??`registered`],registry_member:!0,legacy_runtime_goal:!1,index_exists:!1,raw_index_records:0,unique_runs:0},queueItem:e,status:e.status,waitingOn:e.waiting_on,severity:e.severity,lifecyclePhase:e.lifecycle_phase??`registered`,lifecycleFlags:e.lifecycle_flags??[`registered`]});return i}function Ux(e){return(e??``).replace(/\s+/g,` `).trim()}function Wx(e,t=132){let n=Ux(e);return n.length<=t?n:`${n.slice(0,Math.max(0,t-1))}…`}function Gx(e){let t=new Map;for(let n of e?.goals??[])t.set(n.goal_id,n);return t}function Kx(e,t){return e===void 0||t===void 0?void 0:e+t}function qx(e,t){if(!e)return null;let n=t===`user`?e.queueItem?.project_asset?.user_todos:e.queueItem?.project_asset?.agent_todos;if(n?.items?.length)return{done_count:n.done??n.items.filter(e=>e.done).length,items:n.items,open_count:n.open??n.items.filter(e=>!e.done).length,total_count:n.total??n.items.length};let r=t===`user`?e.queueItem?.user_todos:e.queueItem?.agent_todos;return r?.items?.length?r:null}function Jx(e){return e?.items.find(e=>!e.done)}function Yx(e,t,n=`todos`){return e?.items?.length?{advancement_done_count:e.advancement_done_count??t?.advancement_done_count,done_count:e.done??e.items.filter(e=>e.done).length,items:e.items,open_count:e.open??e.items.filter(e=>!e.done).length,total_count:e.total??e.items.length}:t??null}function Xx(e){return e?.queueItem?.project_asset?.quota?.state??e?.queueItem?.quota?.state??e?.goal.quota?.state??`waiting`}function Zx(e,t,n){let r=[];for(let t of e){let e=qx(t,`agent`);for(let n of e?.items??[])r.push({goalId:t.goal.id,role:`agent`,todo:n})}let i=new Map;for(let e of r){let t=e.todo.claimed_by||`codex`,n=i.get(t)??[];n.push(e),i.set(t,n)}let a=new Map((n?.agents??[]).map(e=>[e.agent_id,e]));return Array.from(new Set([...i.keys(),...a.keys()])).map(e=>{let t=i.get(e)??[],n=a.get(e),r=Array.from(new Set([...t.map(e=>e.goalId),n?.current_todo?.goal_id,...n?.goal_ids??[]].filter(Boolean))),o=(t.filter(e=>!e.todo.done)[0]??t[0])?.goalId??n?.current_todo?.goal_id??r[0]??``,s=n?.last_activity_at??null;return{agentId:e,claimedTodos:t,currentTodo:n?.current_todo??null,evidenceRefs:[],goalIds:r,handoffNote:null,lastActivity:s,nextSafeAction:n?.next_action?.trim()||`Inspect status projection before taking work`,primaryGoalId:o,quotaHints:[],staleClaimHint:null,status:{label:`可用`,summary:`正常运行`,variant:`success`},workspaceRef:null}})}function Qx(e){return e?.map(e=>({dataUrl:e.data_url,id:e.id,mimeType:e.mime_type,name:e.name,size:e.size}))}var $x=`loopx.personal-agent-selection.v1`;function eS(){if(typeof window>`u`)return{};try{let e=JSON.parse(window.localStorage.getItem($x)??`{}`);return!e||typeof e!=`object`||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[0]==`string`&&typeof e[1]==`string`))}catch{return{}}}var tS={需修复:`danger`,等你:`warning`,等待条件:`info`,推进中:`success`,安静运行:`neutral`,已停止:`neutral`,已完成:`neutral`};function nS(e,t){return Ux(t)||e.replace(/^loopx[-_]/i,`LoopX `).split(/[-_]+/).filter(Boolean).map((e,t)=>t===0?`${e.slice(0,1).toUpperCase()}${e.slice(1)}`:e).join(` `)}function rS(e){return e.split(/\r?\n/u).filter(e=>!/^\s*GOAL_(STATUS|PROGRESS)\s*:/u.test(e)).map(e=>/^\s*GOAL_EVIDENCE\s*:/u.test(e)?e.replace(/^\s*GOAL_EVIDENCE\s*:/u,`验证依据:`):/^\s*NEXT_ACTION\s*:/u.test(e)?e.replace(/^\s*NEXT_ACTION\s*:/u,`下一步:`):e).join(` +`).trim()}function iS(e,t){return[`agent`,`assistant`].includes(e.trim().toLowerCase())&&t.trim().length>0}var aS=`已发现的项目 Agent`;function oS(e){switch(Zv(e)){case`codex`:return`Codex`;case`claude`:return`Claude Code`;case`kiro`:return`Kiro CLI`;case`trae`:return`Trae CLI Agent`;case`coco`:return`Coco Agent`;default:return nS(e)}}function sS(e,t){switch(Qv(e,t)){case`codex`:return`代码与项目执行`;case`claude`:return`复杂分析与长任务`;case`openai`:case`anthropic`:return`管家问答 · 无工具`;case`kiro`:return`终端编码 · 原生 /goal 循环`;case`trae`:return`前端与交互实现`;case`coco`:return`通用任务`;default:return aS}}function cS(e,t){let n=e.project_asset;return t===`user`?Yx(n?.user_todos,e.user_todos,`project_asset.user_todos`):Yx(n?.agent_todos,e.agent_todos,`project_asset.agent_todos`)}function lS(e){return Wx(e.title??e.text,112)}function uS(e,t){return{resumeWhen:e.resume_when??null,claimedBy:e.claimed_by??null,done:e.status!==`deferred`&&e.done,evidence:e.evidence?Wx(e.evidence,96):null,index:e.index,priority:e.priority??null,status:e.status??null,taskClass:e.task_class??null,taskDomain:e.task_domain??null,text:lS(e),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.index}`}}function dS(e){let t=e.queueItem?.agent_todos,n=t?.items??e.queueItem?.project_asset?.agent_todos?.items??[],r=new Map(n.map(t=>[t.todo_id?.trim()||`${e.goal.id}:agent:${t.index}`,t]));for(let n of t?.deferred_items??[]){let t=n.todo_id?.trim()||`${e.goal.id}:agent:${n.index}`;r.has(t)||r.set(t,n)}return[...r.values()]}function fS(e){return dS(e).map(t=>uS(t,e))}function pS(e,t,n){let r=new Map;for(let n of e.todo_index?.items??[]){if(n.goal_id!==t.goal.id||n.role!==`agent`)continue;let e=uS(n,t);r.set(e.todoId,e)}for(let e of n)r.has(e.todoId)||r.set(e.todoId,e);let i=new Map;for(let e of r.values()){if(e.done||e.taskClass!==`advancement_task`)continue;let t=e.taskDomain?.trim();t&&i.set(t,(i.get(t)??0)+1)}return[...i].map(([e,t])=>({domain:e,matchingTodoCount:t}))}function mS(e,t){return{claimedBy:e.claimed_by??null,done:e.status===`done`||e.status===`completed`,index:-1,priority:e.priority??null,status:e.status??null,taskClass:e.task_class??null,text:Wx(e.title,112),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.claimed_by??`unknown`}:current`}}function hS(e,t,n){let r=new Map(e.map(e=>[e.todoId,e]));for(let e of t){let t=e.currentTodo;if(!t||t.goal_id!==n.goal.id)continue;let i=mS(t,n);r.has(i.todoId)||r.set(i.todoId,i)}return[...r.values()]}function gS(e){let t=e.queueItem?.project_asset?.agent_todos,n=e.queueItem?.agent_todos,r=dS(e),i=t?.advancement_done_count??n?.advancement_done_count??t?.done??n?.done_count??null,a=r.filter(e=>e.done&&e.status!==`deferred`).length,o=Math.max(i??0,a),s=new Set(r.map(e=>e.todo_id?.trim()).filter(e=>!!e)),c=(t?.recent_completed_advancement_items??[]).filter(e=>!e.todo_id?.trim()||!s.has(e.todo_id.trim())).map(t=>uS(t,e)),l=r.find(e=>!e.done);return{doneTodoCount:o,nextTodoText:Ux(t?.next??``)||(l?Ux(l.title??``)||Ux(l.text??``):``)||null,recentCompleted:c}}function _S(e,t){let n=Ux(e);return n?/\b(state_file|registry_goal|authority_sources|source_registry)\b|\b[a-z_]+\s+\d+\/\d+/i.test(n)?t(`projection.goalVerified`):bx(n,t,`projection.validationRecorded`):``}function vS(e,t=4){if(e.length<=t)return e;let n=e.findIndex(e=>!e.done);if(n<0)return e.slice(-t);let r=Math.max(0,Math.min(n-2,e.length-t));return e.slice(r,r+t)}function yS(e,t,n){let r=t.queueItem?.project_asset?.latest_validation,i=t.latestRun,a=e.event_ledger_summary?.goals.find(e=>e.goal_id===t.goal.id);if(!r&&!i&&!a)return null;let o=[_S(r?.summary,n),bx(i?.health_check,n),bx(i?.recommended_action,n)].find(e=>e!==``&&e!==`暂无`)??n(`projection.runRecorded`),s=Sx({eventCount:a?.events_24h??0,hasArtifact:!!(i?.json_exists||i?.markdown_exists),hasLatestValidation:!!r},n);return{generatedAt:r?.generated_at??i?.generated_at??a?.latest_event_at??``,label:s.label,metadata:s.metadata,runId:i?`${t.goal.id}:${i.generated_at}`:null,safePreview:[o,s.metadata].filter(Boolean).join(` +`),summary:o,todoId:t.queueItem?.project_asset?.agent_todos?.items.find(e=>!e.done)?.todo_id??null}}function bS(e){return[e.status,e.goal.status,e.latestRun?.classification,e.lifecyclePhase].filter(Boolean).some(e=>/(^|[_\s-])(done|complete|completed|finished|terminal|closed|success)([_\s-]|$)/i.test(e??``))}function xS(e,t){return e.global_registry?.findings?.find(e=>e.severity===`high`&&(e.goal_id===t.goal.id||e.goal_ids.includes(t.goal.id)))}function SS(e){return[e.status,e.goal.status,e.latestRun?.classification,e.lifecyclePhase].filter(Boolean).some(e=>/(^|[_\s-])(failure|failed|error|broken|unhealthy|blocked[_\s-]?health|health[_\s-]?blocked)([_\s-]|$)/i.test(e??``))}function CS(e,t){let n=t.queueItem?.stale_latest_run_warning;return t.severity===`high`||!!xS(e,t)||!!(n?.requires_refresh_state||n?.severity===`high`)||SS(t)}function wS(e,t){let n=xS(e,t);return t.queueItem?.stale_latest_run_warning?.recommended_action??t.queueItem?.stale_latest_run_warning?.reason??n?.recommended_action??n?.message??t.queueItem?.recommended_action??t.latestRun?.recommended_action??null}function TS(e){let t=e.latestRun?.operator_gate,n=t?.decision?.trim().toLowerCase()??``,r=new Set([`approve`,`approved`,`reject`,`rejected`,`defer`,`deferred`,`cancel`,`cancelled`]),i=[e.queueItem?.recommended_action,e.latestRun?.recommended_action].filter(Boolean).join(` `),a=/(?:等待|需要)(?:用户|你|owner).{0,24}(?:批准|确认|授权|补充|选择|决定)|(?:批准|确认|授权).{0,16}(?:后|才能|方可)/i.test(i);return!!(t&&!r.has(n))||e.lifecyclePhase===`operator_gated`&&!r.has(n)||a}function ES(e,t){let n=e.latestRun?.operator_gate;return bx(n?.operator_question??n?.reason_summary??n?.follow_up??e.queueItem?.recommended_action??e.latestRun?.recommended_action,t,`projection.confirmAgentDecision`)}function DS(e,t){if(t.goal.activation_state===`stopped`)return`已停止`;let n=qx(t,`user`),r=qx(t,`agent`),i=!!Jx(n),a=!!Jx(r);return[`user_or_controller`,`controller`].includes(t.waitingOn)||i||TS(t)?`等你`:CS(e,t)?`需修复`:t.waitingOn===`external_evidence`?`等待条件`:Xx(t)===`eligible`||a?`推进中`:bS(t)?`已完成`:`安静运行`}function OS(e,t,n,r){if(n===`已停止`)return xx(`stopped`,r);if(n===`需修复`)return bx(wS(e,t),r,`projection.statusRefreshNeeded`);if(n===`等你`)return xx(`needs_you`,r);if(n===`推进中`){let e=[(qx(t,`agent`)?.items??[]).filter(e=>!e.done).flatMap(e=>[e.title,e.text]).map(e=>Ux(e)).find(e=>e!==``&&e!==`暂无`),t.queueItem?.recommended_action,t.latestRun?.recommended_action].map(e=>Ux(e)).find(e=>e!==``&&e!==`暂无`);return e?bx(e,r,`projection.agentAdvancingGoal`):xx(`advancing`,r)}return xx(n===`等待条件`?`waiting_external`:`idle`,r)}function kS(e,t){return t.some(t=>e.includes(t))}function AS(e){return kS(e,[`我现在该做什么`,`该做什么`,`下一步`,`哪些 Goal 在等我`,`哪些 Goal 正在等我`,`等我`,`优先处理`,`全局待办`,`Agent 在做什么`,`哪些 Goal 需要我`])}function jS(e,t,n){if(t.goals.some(e=>e.activationState===`active`&&e.loadState))return{text:`Goal 状态尚未全部加载,暂不能给出完整统计。可先打开已加载的 Goal,失败项可重试。`,lines:[]};if(kS(n,[`Agent`,`agent`,`推进`,`在做`])){let e=t.goals.filter(e=>![`安静运行`,`已完成`,`已停止`].includes(e.state)),n=(e.length>0?e:t.goals).slice(0,3);return n.length===0?{text:`当前状态里还没有 Goal 可供汇总。`,lines:[]}:{text:e.length>0?`Agent 当前关注这些 Goal:`:`当前 Goal 都比较安静:`,lines:n.map(e=>`${e.title} · ${e.state} · ${e.agentSentence}`)}}if(kS(n,[`现在`,`下一步`,`我该`,`该做什么`,`优先处理`])){let e=t.userTodos[0];if(e)return{text:e.blocking?`先处理「${nS(e.goalId)}」:${e.text}`:`当前最先处理「${nS(e.goalId)}」:${e.text}`,lines:[]};let n=t.goals.find(e=>e.state===`需修复`);if(n)return{text:`没有待办,但这个 Goal 需要先修复。`,lines:[`${n.title} · ${n.agentSentence}`]};let r=t.goals.find(e=>e.state===`推进中`);return r?{text:`目前不需要你介入,Agent 正在推进。`,lines:[`${r.title} · ${r.agentSentence}`]}:{text:`当前系统很安静,没有需要你立即处理的事项。`,lines:[]}}if(kS(n,[`等我`,`阻塞`,`需要我`,`全局待办`]))return t.userTodos.length===0?{text:`目前没有 Goal 在等你,开放用户待办为 0。`,lines:[]}:{text:`有 ${t.userTodos.length} 项开放用户待办,阻塞项优先:`,lines:t.userTodos.slice(0,3).map(e=>`${nS(e.goalId)} · ${e.blocking?`阻塞`:`待处理`} · ${e.text}`)};if(kS(n,[`状态`,`异常`,`修复`,`健康`])){let n=t.systemHealth?!t.systemHealth.ok:!e.ok||!e.contract?.ok||!e.global_registry?.ok||(e.global_registry?.summary?.high??0)>0,r=t.goals.filter(e=>e.state===`需修复`),i=r.slice(0,n?2:3).map(e=>`${e.title} · ${e.agentSentence}`);return n&&i.push(`全局状态、契约或注册表健康检查未通过,请进入管理页检查。`),i.length===0?{text:`当前没有发现 Goal 级或全局健康异常。`,lines:[]}:{text:r.length>0?`当前需要关注这些健康问题:`:`Goal 状态正常,但全局健康需要检查:`,lines:i}}return{text:`当前管家支持三类问题:下一步、等待你的事项、Agent 与健康状态。`,lines:[`问“我现在该做什么?”`,`问“哪些 Goal 在等我?”`,`问“Agent 在做什么?”或当前健康状态`]}}function MS(e,t,n,r=!1){let i=new Map(t.map(e=>[e.goal.id,e])),a=new Set(e.run_history.goals.filter(e=>e.activation_state===`stopped`).map(e=>e.id)),o=Gx(e.usage_summary),s=Zx(t,e.todo_index,e.agent_management_projection),c=e.attention_queue.items.flatMap((e,t)=>{if(a.has(e.goal_id))return[];let n=[`user_or_controller`,`controller`].includes(e.waiting_on);return(cS(e,`user`)?.items??[]).filter(e=>!e.done).map((r,i)=>({actionKind:r.action_kind??null,blocking:n,goalId:e.goal_id,sourceOrder:t,taskClass:r.task_class??null,text:lS(r),todoId:r.todo_id?.trim()||`${e.goal_id}:user:${r.index}`,todoOrder:i,updatedAt:r.updated_at??null}))}),l=new Set(c.map(e=>e.goalId)),u=t.flatMap((t,r)=>a.has(t.goal.id)||l.has(t.goal.id)||!TS(t)?[]:[{actionKind:`gate.resolve`,blocking:!0,goalId:t.goal.id,sourceOrder:e.attention_queue.items.length+r,taskClass:`user_gate`,text:ES(t,n),todoId:`${t.goal.id}:operator-gate`,todoOrder:0,updatedAt:t.latestRun?.operator_gate?.recorded_at??t.latestRun?.generated_at??null}]),d=[...c,...u].sort((e,t)=>Number(t.blocking)-Number(e.blocking)||e.sourceOrder-t.sourceOrder||e.todoOrder-t.todoOrder),f=e.run_history.goals.flatMap(t=>{if(t.registry_member===!1)return[];let a=i.get(t.id);if(!a)return[];let c=DS(e,a),l=d.find(e=>e.goalId===t.id),u=l?.text??null,f=gS(a),p=t.coordination?.registered_agents??[],m=new Set(p),h=[...s.filter(e=>e.goalIds.includes(t.id)&&!/unassigned|unknown/i.test(e.agentId)&&(m.size===0||m.has(e.agentId))&&(e.currentTodo?.goal_id===t.id||e.claimedTodos.some(e=>e.goalId===t.id)))].sort((e,t)=>(t.lastActivity??``).localeCompare(e.lastActivity??``)),g=new Set(h.map(e=>e.agentId)),_=[...h.map(e=>({agentId:e.agentId,label:e.agentId,lastActivityAt:e.lastActivity,state:e.status.label})),...p.filter(e=>!g.has(e)).map(e=>({agentId:e,label:e,lastActivityAt:null,state:`registered`}))],v=h[0],y=hS(fS(a),h,a),b=[f.nextTodoText,a.queueItem?.recommended_action,a.latestRun?.recommended_action,OS(e,a,c,n)].map(e=>bx(e,n)).find(e=>e!==``&&e!==`暂无`)??n(`projection.nextUpdatePending`);return[{activationState:t.activation_state,agentId:v?.agentId??p[0]??`codex`,agentLaneCount:_.length,agentLanes:_,agentLabel:v?.agentId,agentSentence:OS(e,a,c,n),agentTodos:[...y,...f.recentCompleted],doneTodoCount:f.doneTodoCount,goalId:t.id,latestActivity:a.latestRun?.generated_at??``,needsYou:u,needsYouActionKind:l?.actionKind??null,needsYouBlocking:l?.blocking??!1,needsYouTaskClass:l?.taskClass??null,needsYouTodoId:l?.todoId??null,nextSentence:b,runEvidence:yS(e,a,n),state:c,...r?{subagentExecution:{allowedDomains:t.spawn_policy?.allowed_domains??[],domainCandidates:pS(e,a,y),enabled:t.spawn_policy?.mode===`multi_subagent`&&t.spawn_policy.spawn_allowed===!0&&t.spawn_policy.max_children>0,maxChildren:t.spawn_policy?.max_children??0}}:{},title:nS(t.id,t.display_name),usage:(()=>{let e=o.get(t.id);return e?{costUsd24h:e.cost_usd_24h,costUsd7d:e.cost_usd_7d,durationMs24h:e.duration_ms_24h,durationMs7d:e.duration_ms_7d,tokens24h:Kx(e.input_tokens_24h,e.output_tokens_24h),tokens7d:Kx(e.input_tokens_7d,e.output_tokens_7d)}:null})()}]}),p=[];if(e.ok||p.push(`状态载荷未标记为正常 (payload.ok === false)`),e.contract&&!e.contract.ok){let t=e.contract.summary,n=t?`${t.errors} 项错误 / ${t.warnings} 项警告`:e.contract.errors?.[0]||`请检查控制面契约`;p.push(`契约检查未通过: ${n}`)}if(e.global_registry){e.global_registry.ok||p.push(`注册表状态异常: ${e.global_registry.summary.high} 项高危`);for(let t of e.global_registry.findings||[])t.severity===`high`&&p.push(`[${t.kind}] ${t.message}`)}let m=e.decision_freshness_summary?.summary?.stale_count?`${e.decision_freshness_summary.summary.stale_count} 项决策状态已过期`:null,h=p.length===0&&!m,g={ok:h,summary:h?`所有控制面契约与注册表检查均正常`:`发现 ${p.length+ +!!m} 项系统健康关注点`,issues:p,freshnessWarning:m};return{blockingTodoCount:d.filter(e=>e.blocking).length,goalNotifications:(e.goal_channel_notification_projection?.goals??[]).map(e=>({goalId:e.goal_id,configured:e.configured,enabled:e.enabled,humanGateAutoNotifyEnabled:e.human_gate_auto_notify_enabled,lastNotifiedAt:e.last_notified_at??null,receiptCount:e.receipt_count,targetRef:e.target_ref??null})),goals:f,openUserTodoCount:d.length,systemHealth:g,userTodos:d,visibleUserTodos:d.slice(0,5),workers:(e.agent_management_projection?.agents??[]).map(e=>({agentId:e.agent_id,currentTodoGoalId:e.current_todo?.goal_id??null,currentTodoText:e.current_todo?.title?Wx(e.current_todo.title,96):null,lastActivityAt:e.last_activity_at??null,state:e.state??null}))}}function NS({goalArchiveLoadState:e,isLoading:t,onGoalActivationStateChange:n,onGoalDeleted:r,onSelectGoal:i,onReconcileStatus:a,onRefresh:o,onRetryGoalArchive:s,payload:c,progress:l,rows:u,selectedGoalId:d,statusSourceControl:f,theme:p,toggleTheme:m}){let h=f.activeSource.readOnly,{t:g}=Ji(),[_,v]=(0,R.useState)([]),[y,b]=(0,R.useState)(!1),x=(0,R.useMemo)(()=>{let e=MS(c,u,g,y);if(!l)return e;let t=Object.values(l.snapshots).map(e=>MS(e,Hx(e.run_history.goals,e.attention_queue.items),g,y)),n=new Map(t.flatMap(e=>e.goals).map(e=>[e.goalId,e])),r=e.goals.map(e=>n.get(e.goalId)??{...e,loadError:l.errors[e.goalId],loadState:l.errors[e.goalId]?`error`:`loading`,agentId:``,agentSentence:``,nextSentence:``,subagentExecution:void 0}),i=t.flatMap(e=>e.userTodos),a=r.some(e=>e.activationState===`active`&&e.loadState),o=[...new Set(t.flatMap(e=>e.systemHealth?.issues??[]))];return{...e,goals:r,userTodos:i,visibleUserTodos:i.slice(0,5),openUserTodoCount:i.length,blockingTodoCount:i.filter(e=>e.blocking).length,workers:[...new Map(t.flatMap(e=>e.workers??[]).map(e=>[e.agentId,e])).values()],goalNotifications:t.flatMap(e=>e.goalNotifications??[]),systemHealth:a||t.length===0?void 0:{ok:t.every(e=>e.systemHealth?.ok),issues:o,summary:o.length?`发现 ${o.length} 项系统健康关注点`:`状态检查已完成`,freshnessWarning:t.map(e=>e.systemHealth?.freshnessWarning).filter(Boolean).join(`;`)||null}}},[c,u,l,y,g]),S=x.goals.find(e=>e.goalId===d)??null,C=l?.snapshots[d]??c,[w,T]=(0,R.useState)(null),[E,D]=(0,R.useState)(null),[O,k]=(0,R.useState)(!1),ee=x.goals.some(e=>e.activationState===`active`&&e.loadState===`loading`)?`loading`:x.goals.map(e=>`${e.goalId}:${e.agentId}`).join(`|`),A=S?.goalId??`manager`;x.goals.some(e=>e.activationState===`active`&&e.loadState)||(x.systemHealth?!x.systemHealth.ok:!c.ok)||x.openUserTodoCount>0&&`${x.openUserTodoCount}${x.blockingTodoCount}`;let j=_.length>0?_.map(e=>({agentId:e.agent_id,adapterKind:e.adapter_kind,available:e.available,capability:sS(e.agent_id,e.adapter_kind),interrupt:e.interrupt,label:e.display_name,location:e.location,resume:e.resume,source:e.source,statusLabel:e.available?`可用`:`需要配置`,streaming:e.streaming,toolCalls:e.tool_calls,trustScope:e.trust_scope})):[{agentId:`codex`,available:!0,capability:sS(`codex`),label:`Codex`,statusLabel:`正在检测`}],te=[...j,{agentId:`status-only`,available:!0,capability:`不调用模型`,adapterKind:`status_projection`,interrupt:!1,label:`仅查状态`,resume:!0,statusLabel:`只读`,streaming:!1,toolCalls:!1,trustScope:`read_only`}],ne=j.find(e=>e.label===`Codex`&&e.available)?.agentId??j.find(e=>e.available)?.agentId??`status-only`,[re,M]=(0,R.useState)(eS),N=nh(te,re[A]??ne,ne),[ie,ae]=(0,R.useState)(!1),[oe,P]=(0,R.useState)(!1),[F,I]=(0,R.useState)(`chat`),[se,ce]=(0,R.useState)(``),[le,ue]=(0,R.useState)({}),[de,fe]=(0,R.useState)({}),[pe,me]=(0,R.useState)(null),[he,ge]=(0,R.useState)({}),[_e,ve]=(0,R.useState)([]),[ye,be]=(0,R.useState)(null),[xe,Se]=(0,R.useState)({}),Ce=(0,R.useRef)(1),we=(0,R.useRef)(1),Te=(0,R.useRef)(new Map),Ee=(0,R.useRef)(new Set),De=(0,R.useRef)(new Map),L=(0,R.useRef)(new Map),Oe=(0,R.useRef)(new Set),ke=(0,R.useRef)(new Set),Ae=(0,R.useRef)(null),je=(0,R.useRef)(null),Me=(0,R.useRef)(null),Ne=(0,R.useRef)(null);(0,R.useRef)(null);let Pe=le[A]??[];de[A];let Fe=S?x.userTodos.filter(e=>e.goalId===S.goalId):x.userTodos,Ie=S?.agentTodos??[];vS(Ie,S?.needsYou?3:4);let B=Ie.filter(e=>e.done).length,Le=Ie.length>0?`${B}/${Ie.length}`:`暂无计划`,Re=S?{...x,blockingTodoCount:Fe.filter(e=>e.blocking).length,goals:[S],openUserTodoCount:Fe.length,userTodos:Fe,visibleUserTodos:Fe}:x;(0,R.useEffect)(()=>{let e=Ym(f.activeSource.statusUrl,window.location.href),t=e.source?$m(C,e.source):null;if(!S||!t?.indexUrl||!t.detailUrl){T(null),D(null),k(!1);return}let{detailUrl:n,indexUrl:r}=t,i=!1;return T(null),D(null),k(!0),eh(r,S.goalId).then(async e=>{let t=e.items[0]?.detail_ref;return t?th(n,t):null}).then(e=>{i||T(e)}).catch(e=>{i||D(yp(e))}).finally(()=>{i||k(!1)}),()=>{i=!0}},[C,S?.goalId,f.activeSource.statusUrl]);function V(e,t){ge(n=>{if(t===null){let t={...n};return delete t[e],t}return{...n,[e]:t}})}(0,R.useEffect)(()=>{if(h){v([]),b(!1);return}let e=!1;return Oh().then(t=>{e||(v(t.adapters??[]),b(t.goal_subagent_configuration===`preview_locked`))}).catch(()=>{e||b(!1)}),()=>{e=!0}},[h]),(0,R.useEffect)(()=>{try{window.localStorage.setItem($x,JSON.stringify(re))}catch{}},[re]),(0,R.useEffect)(()=>{if(h||!N.available)return;let e=A,t=`${e}:${N.agentId}`,n=S?`goal`:`manager`,r=S?`goal.${S.goalId}`:`manager`,i=S?.goalId??x.goals[0]?.goalId??``,a=!1,o=null,s=null;return(async()=>{try{let c=await Ph({agentId:N.agentId,channelId:r,goalId:S?.goalId});if(a||(ue(t=>(t[e]?.length??0)>0?t:{...t,[e]:c.messages.map(e=>({agentLabel:e.role===`user`?void 0:N.label,attachments:Qx(e.attachments),id:Ce.current++,lines:[],role:e.role===`user`?`user`:`assistant`,sourceLabel:e.role===`user`?void 0:e.role===`error`?`本地会话记录`:`恢复的 ${N.label} 会话`,text:e.role===`user`?e.text:rS(e.text)}))}),N.agentId===`status-only`))return;let l=c.sessions[0];if(s=l?.session_id??null,l&&!l.resumable){Ee.current.add(t),V(e,{agentId:N.agentId,resumable:!1,sessionId:l.session_id,status:`resume_failed`});return}let u=l?.goal_id??i;if(!u)return;let d=await Ah(u,N.agentId,`resume_latest`,n);if(a)return;Te.current.set(t,d.session_id);let f=c.snapshots.find(e=>e.session.session_id===d.session_id),p=f?.session.active_turn_id??``;if(V(e,{agentId:N.agentId,resumable:!0,sessionId:d.session_id,status:p?`running`:`ready`,turnId:p||void 0}),Ee.current.delete(t),!p)return;let m=`${d.session_id}:${p}`;if(ke.current.has(m))return;ke.current.add(m),De.current.set(e,p),V(e,{agentId:N.agentId,resumable:!0,sessionId:d.session_id,status:`running`,turnId:p}),me(e),o=new AbortController,L.current.set(e,o);let h=``,g=ze(e,{activity:[`正在恢复进行中的 Agent 回合`],agentLabel:N.label,lines:[],pending:!0,sourceLabel:`恢复的 ${N.label} 会话`,text:``});try{let t=await Vh(d.session_id,p,{signal:o.signal,onDelta:t=>{h+=t,Be(e,g,{text:h})},onActivity:t=>{ue(n=>({...n,[e]:(n[e]??[]).map(e=>e.id===g?{...e,activity:[...new Set([...e.activity??[],t])].slice(-6)}:e)}))}});if(a)return;Be(e,g,{lines:t.response.gate?[t.response.gate.summary,t.response.gate.next_action].filter(Boolean).slice(0,2):[],pending:!1,text:t.response.message||h.trim()||`${N.label} 已完成分析。`});let n=x.goals.find(e=>e.goalId===f?.session.goal_id)??S??x.goals[0]??null;if(n&&t.response.proposals.length>0){let r=t.response.proposals.map(e=>({goalId:n.goalId,id:we.current++,previewId:null,proposal:e,receiptLabel:null,state:`candidate`,statusMessage:null}));fe(t=>({...t,[e]:[...t[e]??[],...r]}))}}catch(t){if(a)return;Be(e,g,{activity:[],lines:[],pending:!1,reconnect:t instanceof _h&&t.payload.reconnectable===!0,sourceLabel:`LoopX Chat 本地后端`,text:t instanceof Error?t.message:`无法恢复进行中的 Agent 回合。`})}finally{ke.current.delete(m),De.current.get(e)===p&&De.current.delete(e),V(e,{agentId:N.agentId,resumable:!0,sessionId:d.session_id,status:`ready`}),L.current.get(e)===o&&L.current.delete(e),a||me(t=>t===e?null:t)}}catch(n){if(a)return;n instanceof _h&&n.payload.error_code===`resume_failed`&&(Ee.current.add(t),s&&V(e,{agentId:N.agentId,resumable:!1,sessionId:s,status:`resume_failed`}))}})(),()=>{a=!0,o?.abort()}},[A,x.goals[0]?.goalId,h,S?.goalId,N.agentId,N.available,N.label]),(0,R.useEffect)(()=>{if(h||S||x.goals.length===0||ee===`loading`)return;let e=!1;return Promise.all(x.goals.filter(e=>!e.loadState).map(async e=>{let t=await Mh({agentId:e.agentId,channelId:`goal.${e.goalId}`,goalId:e.goalId});return{goalId:e.goalId,session:t.sessions[0]??null}})).then(t=>{e||ge(e=>{let n={...e};for(let e of t)e.session&&(n[e.goalId]={agentId:e.session.agent_id,resumable:e.session.resumable,sessionId:e.session.session_id,status:e.session.active_turn_id?`running`:e.session.status,turnId:e.session.active_turn_id??void 0});return n})}).catch(()=>{}),()=>{e=!0}},[h,ee,S?.goalId]),(0,R.useEffect)(()=>{if(be(null),h){ve([]),Se({});return}if(!S){ve([]),Se({});return}let e=!1,t=0,n=0;ve([]),Se({});let r=async()=>{if(!e){if(document.hidden){t=window.setTimeout(()=>void r(),1e4);return}try{let t=await Mh({goalId:S.goalId});if(!e){let r=t.sessions.filter(e=>e.channel_id?.startsWith(`task.`));ve(r);let i=await Promise.allSettled(r.map(e=>jh(e.session_id)));if(!e){let e=i.some(e=>e.status===`rejected`);n=e?n+1:0,be(e?`partial`:null),Se(Object.fromEntries(i.flatMap((e,t)=>e.status===`fulfilled`?[[r[t].session_id,e.value]]:[])))}}}catch{n+=1,e||be(`offline`)}e||(t=window.setTimeout(()=>void r(),Math.min(3e4,2e3*2**Math.min(n,4))))}};return r(),()=>{e=!0,window.clearTimeout(t)}},[h,S?.goalId]),(0,R.useEffect)(()=>{if(!ie)return;let e=window.requestAnimationFrame(()=>{Ae.current?.querySelector(`[role="menuitem"]:not(:disabled)`)?.focus()});return()=>{window.cancelAnimationFrame(e),je.current?.focus()}},[ie]),(0,R.useEffect)(()=>{if(!oe)return;let e=window.requestAnimationFrame(()=>Me.current?.focus());return()=>{window.cancelAnimationFrame(e),Ne.current?.focus()}},[oe]),(0,R.useEffect)(()=>{if(!ie&&!oe)return;let e=e=>{e.key===`Escape`&&(ae(!1),P(!1))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[ie,oe]);function ze(e,t){let n=Ce.current++;return ue(r=>({...r,[e]:[...r[e]??[],{...t,id:n,role:`assistant`}]})),n}function Be(e,t,n){ue(r=>({...r,[e]:(r[e]??[]).map(e=>e.id===t?{...e,...n}:e)}))}async function Ve(e,t){let n=e.trim();if(!n)return;let r=t&&`goalId`in t?t.goalId??`manager`:A,i=r===`manager`?Re.goals[0]??x.goals[0]??null:x.goals.find(e=>e.goalId===r)??null,a=t?.agentId?nh(te,t.agentId,ne):N,o=r===`manager`?x:i?{...x,blockingTodoCount:x.userTodos.filter(e=>e.goalId===i.goalId&&e.blocking).length,goals:[i],openUserTodoCount:x.userTodos.filter(e=>e.goalId===i.goalId).length,userTodos:x.userTodos.filter(e=>e.goalId===i.goalId),visibleUserTodos:x.userTodos.filter(e=>e.goalId===i.goalId)}:x,s=Ce.current++;if(ue(e=>({...e,[r]:[...e[r]??[],{attachments:t?.attachments,id:s,lines:[],role:`user`,text:n}]})),ce(``),me(r),r===`manager`&&AS(n)||a.agentId===`status-only`||!i){let e=jS(C,o,n),t=a.agentId===`status-only`;ze(r,{agentLabel:t?`仅查状态`:`LoopX 管家`,lines:e.lines.slice(0,3),sourceLabel:t?`LoopX 状态投影 · 仅查状态`:`LoopX 状态投影`,text:e.text}),kh({answer:[e.text,...e.lines.slice(0,3)].filter(Boolean).join(` +`),contextKind:r===`manager`?`manager`:`goal`,goalId:r===`manager`?void 0:r,question:n}).catch(()=>{}),me(null);return}let c=`${r}:${a.agentId}`,l=null;try{let e=Te.current.get(c);if(!e){let t=Ee.current.has(c)?`new`:`resume_latest`;e=(await Ah(i.goalId,a.agentId,t,r===`manager`?`manager`:`goal`)).session_id,Te.current.set(c,e),V(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`ready`}),Ee.current.delete(c)}let o=``;l=ze(r,{activity:[`正在连接 Agent`],agentLabel:a.label,lines:[],pending:!0,sourceLabel:r===`manager`?`${a.label} 管家 · 跨 Goal`:`${a.label} Agent · ${nS(i.goalId)}`,text:``});let s=(await zh(e,n,{attachments:t?.attachments,signal:(()=>{let e=new AbortController;return L.current.set(r,e),e.signal})(),onDelta:e=>{o+=e,l!==null&&Be(r,l,{text:o})},onActivity:e=>{l!==null&&ue(t=>({...t,[r]:(t[r]??[]).map(t=>t.id===l?{...t,activity:[...new Set([...t.activity??[],e])].slice(-6)}:t)}))},onPhase:(t,n)=>{De.current.set(r,n),V(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`running`,turnId:n})}})).response;if(Be(r,l,{lines:s.gate?[s.gate.summary,s.gate.next_action].filter(Boolean).slice(0,2):[],pending:!1,text:rS(s.message||o.trim())||`${a.label} 已完成分析。`}),s.proposals.length>0){let e=s.proposals.map(e=>({goalId:i.goalId,id:we.current++,previewId:null,proposal:e,receiptLabel:null,state:`candidate`,statusMessage:null}));fe(t=>({...t,[r]:[...t[r]??[],...e]}))}if(r!==`manager`&&s.protected_action){let e=Rx(r,n,s.protected_action);if(e)return e}}catch(e){if(Oe.current.delete(r)){let e={agentLabel:a.label,lines:[],pending:!1,sourceLabel:`${a.label} 会话`,text:`已中断。你可以在当前会话继续发送消息。`};l===null?ze(r,e):Be(r,l,e);return}let t=e instanceof _h?e.payload:null;t&&rh(t)&&Te.current.delete(c),t?.error_code===`resume_failed`&&(Te.current.delete(c),Ee.current.add(c),V(r,{agentId:a.agentId,resumable:!1,sessionId:he[r]?.sessionId??`resume-failed`,status:`resume_failed`}));let n=t?.gate,i=n&&typeof n==`object`?String(n.summary??``):``,o={agentLabel:a.label,lines:i?[i]:[],pending:!1,reconnect:t?.reconnectable===!0,sourceLabel:`LoopX Chat 本地后端`,text:t?.error_code===`resume_failed`?`原 ${a.label} 会话无法恢复。本地历史已经保留,请在运行详情里选择“重试恢复”或“开始新 Session”。`:e instanceof Error?e.message:`${a.label} 会话暂时不可用。`};l===null?ze(r,o):Be(r,l,o)}finally{De.current.delete(r),L.current.delete(r);let e=Te.current.get(c);e&&V(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`ready`}),me(e=>e===r?null:e)}}async function He(e){let t=e?.goalId??A,n=he[t],r=e?.agentId??n?.agentId??N.agentId,i=`${t}:${r}`,a=e?.sessionId??n?.sessionId??Te.current.get(i),o=e?.turnId??n?.turnId??De.current.get(t);if(!(!a||!o))try{Oe.current.add(t),await Rh(a,o),L.current.get(t)?.abort()}catch(e){throw Oe.current.delete(t),e}finally{De.current.delete(t),V(t,{agentId:r,resumable:!0,sessionId:a,status:`ready`}),L.current.delete(t),me(e=>e===t?null:e)}}async function Ue(e){let t=e.goalId,n=`${t}:${e.agentId}`,r=e.sessionId??he[t]?.sessionId??Te.current.get(n);if(r)try{let i=await Uh(r);Te.current.set(n,r),Ee.current.delete(n),V(t,{agentId:e.agentId,resumable:i.session.resumable,sessionId:r,status:i.session.status})}catch{V(t,{agentId:e.agentId,resumable:!1,sessionId:r,status:`resume_failed`})}}function We(e){let t=`${e.goalId}:${e.agentId}`;Te.current.delete(t),Ee.current.add(t),V(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:`new-session-pending`,status:`ready`})}async function Ge(e){let t=`${e.goalId}:${e.agentId}`,n=e.sessionId??he[e.goalId]?.sessionId??Te.current.get(t);n&&n!==`new-session-pending`&&await Hh(n),Te.current.delete(t),Ee.current.add(t),V(e.goalId,null)}function Ke(e){te.some(t=>t.agentId===e&&t.available)&&(M(t=>({...t,[A]:e})),ae(!1))}function qe(){i(``),I(`chat`)}function Je(e){i(e),I(`chat`)}S&&tS[S.state],S&&(`${N.label}${S.state}`,Ie.length>0&&`${Le}`,Fe.length>0&&`${Fe.length}`),S?.state===`需修复`||!S&&!c.ok?(S&&oS(S.agentId),S?.nextSentence,S?.agentSentence):S?.state===`等你`?(S.needsYouBlocking,S.needsYouBlocking,S.needsYou??S.nextSentence,S.needsYou):(S&&oS(S.agentId),S?.nextSentence);let Ye=[...!S&&he.manager?.status===`resume_failed`?[{id:`run:manager:resume-failed`,kind:`run`,run:{agentId:he.manager.agentId,agentLabel:oS(he.manager.agentId),canInterrupt:!1,completedSteps:0,goalId:`manager`,goalTitle:`LoopX 管家`,latestActivity:`本地聊天记录已保留,点我查看恢复方式。`,resumable:!1,runId:`manager:resume-failed`,sessionId:he.manager.sessionId,sessionStatus:`resume_failed`,status:`failed`,title:`上次会话需要恢复`,totalSteps:1,outputs:[]}}]:[],...S?_e.map(e=>{let t=e.channel_id?.startsWith(`task.`)?e.channel_id.slice(5):void 0,n=S.agentTodos.find(e=>e.todoId===t),r=!!e.active_turn_id,i=xe[e.session_id],a=i?.messages.some(e=>iS(e.role,e.text))===!0;return{id:`run:task:${e.session_id}`,kind:`run`,run:{agentId:e.agent_id,agentLabel:oS(e.agent_id),canInterrupt:r,completedSteps:n?.done||a?1:0,goalId:S.goalId,goalTitle:S.title,latestActivity:r?`Agent 正在执行,可进入 Session 查看过程或发送纠偏。`:a?`Agent 已返回结果,点击查看结果与完整运行记录。`:`执行 Session 已保留,可继续纠偏或恢复。`,resumable:e.resumable,runId:e.session_id,sessionId:e.session_id,sessionMessages:i?.messages.map(e=>({createdAt:e.created_at,messageId:e.message_id,role:e.role===`user`?`user`:iS(e.role,e.text)?`assistant`:`error`,text:e.role===`user`?e.text:rS(e.text)})),sessionStatus:a?`completed`:e.status,status:n?.done||a?`completed`:r?`running`:e.status===`resume_failed`?`failed`:`waiting`,title:n?.text??`Agent 执行任务`,todoId:t,totalSteps:1,turnId:e.active_turn_id??void 0}}}):[],...S?[{id:`run:${S.goalId}`,kind:`run`,run:{agentId:he[S.goalId]?.agentId??S.agentId,agentLabel:oS(he[S.goalId]?.agentId??S.agentId),canInterrupt:!!he[S.goalId]?.turnId,completedSteps:S.agentTodos.filter(e=>e.done).length,goalId:S.goalId,goalTitle:S.title,latestActivity:S.agentSentence,resumable:he[S.goalId]?.resumable??!0,runId:`goal:${S.goalId}`,sessionId:he[S.goalId]?.sessionId,sessionStatus:he[S.goalId]?.status,status:he[S.goalId]?.turnId?`running`:S.state===`需修复`?`failed`:`waiting`,title:S.nextSentence,totalSteps:S.agentTodos.length||1,turnId:he[S.goalId]?.turnId,outputs:S.runEvidence?[{createdAt:S.runEvidence.generatedAt,kind:`evidence`,outputId:`${S.goalId}:latest-evidence`,title:S.runEvidence.label}]:[]}}]:[],...Pe.map(e=>({id:`message:${e.id}`,kind:`message`,message:{agentLabel:e.agentLabel,attachments:e.attachments,id:String(e.id),pending:e.pending,role:e.role,text:e.text||(e.pending?`Agent 正在处理…`:e.lines.join(` +`))}})),...(S?[S]:x.goals).flatMap(e=>e.runEvidence?[{id:`output:${e.goalId}:${e.runEvidence.generatedAt||`latest`}`,kind:`output`,output:{agentLabel:oS(e.agentId),createdAt:e.runEvidence.generatedAt,goalId:e.goalId,goalTitle:e.title,kind:`evidence`,outputId:`${e.goalId}:latest-evidence`,runId:e.runEvidence.runId??void 0,safePreview:e.runEvidence.safePreview,summary:e.runEvidence.summary,title:e.runEvidence.label,todoId:e.runEvidence.todoId??void 0}}]:[]),...S&&w?[{id:`output:${S.goalId}:report:${w.publication.publication_id}`,kind:`output`,output:{agentId:w.agent_id,agentLabel:oS(w.agent_id),createdAt:w.publication.delivered_at,goalId:S.goalId,goalTitle:S.title,kind:`report`,outputId:w.publication.publication_id,report:{addedCount:w.delta.added_count,changedCount:w.delta.changed_count,deliveredAt:w.publication.delivered_at,generationId:w.generation_id,items:w.delta.items.map(e=>({changeKind:e.change_kind,previousStatus:e.previous_status,sourceRef:e.source_ref,status:e.status,summary:e.summary,title:e.title})),periodEndAt:w.period_window.end_at,periodStartAt:w.period_window.start_at,predecessorPublicationId:w.publication.predecessor_publication_id,publicationId:w.publication.publication_id},safePreview:w.delta.items.map(e=>`${e.change_kind===`added`?`+`:`~`} ${e.title}\n${e.summary}`).join(` + +`),summary:w.summary,title:w.title}}]:[]],Xe={...$v(x),periodicReports:{error:E,loading:O},timeline:Ye};return(0,z.jsxs)(`div`,{className:p===`dark`?`dark`:``,"data-testid":`personal-goal-home`,children:[ye?(0,z.jsx)(`p`,{role:`status`,className:`m-0 bg-amber-50 px-4 py-2 text-sm text-amber-900`,children:g(ye===`partial`?`runs.discoveryPartial`:`runs.discoveryOffline`)}):null,(0,z.jsx)(_x,{agents:te.map(e=>({adapterKind:e.adapterKind,agentId:e.agentId,available:e.available,capability:e.capability,interrupt:e.interrupt,label:e.label,location:e.location,resume:e.resume,source:e.source,streaming:e.streaming,toolCalls:e.toolCalls,trustScope:e.trustScope,workspaceCompatibility:e.available?`当前 Goal 写入前验证`:`不可用,需先修复 Endpoint`})),callbacks:{onApplyAttention:e=>Je(e.goalId),onCorrectRun:async(e,t)=>{if(!e.sessionId)throw Error(`这个 Run 还没有可纠偏的执行 Session。`);let n=await wh((await xh({actionKind:`run.correct`,context:{kind:`run`,goal_id:e.goalId,todo_id:e.todoId},idempotencyKey:`workspace-run-correct-${e.sessionId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,message:t,session_id:e.sessionId},summary:`纠偏执行任务:${e.title}`})).proposal_id),r=typeof n.turn?.turn_id==`string`?n.turn.turn_id:void 0;if(V(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:e.sessionId,status:r?`running`:`ready`,turnId:r}),r){De.current.set(e.goalId,r);let t=new AbortController;L.current.set(e.goalId,t);let n=``,i=ze(e.goalId,{activity:[`正在把纠偏送入原执行 Session`],agentLabel:e.agentLabel,lines:[],pending:!0,sourceLabel:`${e.agentLabel} · 执行 Session`,text:``});try{let a=await Vh(e.sessionId,r,{signal:t.signal,onDelta:t=>{n+=t,Be(e.goalId,i,{text:n})}});Be(e.goalId,i,{activity:[],pending:!1,text:rS(a.response.message||n.trim())||`${e.agentLabel} 已完成纠偏。`})}catch(t){let n=Oe.current.delete(e.goalId);Be(e.goalId,i,{activity:[],pending:!1,text:n?`已中断。你可以在当前会话继续发送消息。`:t instanceof Error?t.message:`纠偏回合失败。`})}finally{De.current.delete(e.goalId),L.current.delete(e.goalId),V(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:e.sessionId,status:`ready`})}}},onCloseRunSession:Ge,onInterruptRun:async e=>He(e),onOpenGoal:Je,onOpenRunSession:async e=>{if(!e.sessionId)return;let t=e.sessionId,n=await jh(t);Se(e=>({...e,[t]:n})),Je(e.goalId),ue(t=>({...t,[e.goalId]:n.messages.map(t=>({agentLabel:t.role===`user`?void 0:e.agentLabel,attachments:Qx(t.attachments),id:Ce.current++,lines:[],role:t.role===`user`?`user`:`assistant`,sourceLabel:t.role===`user`?void 0:`${e.agentLabel} · 执行 Session`,text:t.role===`user`?t.text:rS(t.text)}))})),V(e.goalId,{agentId:e.agentId,resumable:n.session.resumable,sessionId:t,status:n.session.active_turn_id?`running`:n.session.status,turnId:n.session.active_turn_id??void 0})},onOpenOutput:e=>Je(e.goalId),...y?{onPreviewGoalSubagentConfiguration:async e=>{let t=await Kh(e);return{changed:t.changed,configuration:{allowedDomains:t.after.orchestration.allowed_domains,enabled:t.feature_summary.multi_subagent===`enabled`,maxChildren:t.after.orchestration.max_children},previewId:t.preview_id}},onApplyGoalSubagentConfiguration:async({previewId:e,...t})=>{let n=await qh(t,e);return{allowedDomains:n.after.orchestration.allowed_domains,enabled:n.feature_summary.multi_subagent===`enabled`,maxChildren:n.after.orchestration.max_children}}}:{},onGoalActivationStateChange:n,onGoalDeleted:r,onReconcileStatus:a,onRetryGoalArchive:s,onExportOutput:async e=>{let t=[`# ${e.title}`,``,e.summary??``,``,e.safePreview??`此产出没有可用的公开安全预览。`,``,`Goal: ${e.goalId}`,`Todo: ${e.todoId??`unlinked`}`,`Run: ${e.runId??`unlinked`}`].join(` +`),n=URL.createObjectURL(new Blob([t],{type:`text/markdown;charset=utf-8`})),r=document.createElement(`a`);r.href=n,r.download=`${e.outputId.replace(/[^a-z0-9._-]+/gi,`-`)}.md`,r.click(),URL.revokeObjectURL(n)},onRefresh:o,onRetryResumeRun:Ue,onSelectAgent:Ke,onSelectGoal:e=>e?Je(e):qe(),onSendMessage:async(e,t,n,r)=>Ve(e,{agentId:t,goalId:n,attachments:r}),onStartNewRunSession:We},goalArchiveLoadState:e,model:Xe,readOnly:h,selectedAgentId:N.agentId,selectedGoalId:S?.goalId??null,statusSourceControl:f})]})}function PS({error:e,isLoading:t,onRetry:n,requestedUrl:r,theme:i,toggleTheme:a}){let o=!!(e&&/failed to fetch|networkerror|load failed/i.test(e)&&r.includes(`status.json`));return(0,z.jsx)(`div`,{className:i===`dark`?`dark`:``,children:(0,z.jsxs)(`main`,{className:`min-h-screen bg-[#f6f7f9] text-slate-950 dark:bg-[#09090b] dark:text-zinc-50`,children:[(0,z.jsxs)(`header`,{className:`flex min-h-16 flex-wrap items-center justify-between gap-3 border-b border-slate-200 bg-white px-4 py-3 dark:border-zinc-800 dark:bg-zinc-950 sm:px-6`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h1`,{className:`text-xl font-semibold`,children:`LoopX Workspace`}),(0,z.jsx)(`p`,{className:`mt-1 break-all text-sm text-slate-500 dark:text-zinc-400`,children:`Personal Workspace`})]}),(0,z.jsx)(qv,{"aria-label":`切换主题`,onClick:a,size:`icon`,variant:`secondary`,children:i===`dark`?(0,z.jsx)(Bm,{className:`h-4 w-4`}):(0,z.jsx)(xm,{className:`h-4 w-4`})})]}),(0,z.jsxs)(`div`,{className:`grid min-h-[calc(100vh-80px)] sm:grid-cols-[240px_1fr]`,children:[(0,z.jsxs)(`aside`,{className:`hidden border-r border-slate-200 p-6 dark:border-zinc-800 sm:block`,"aria-label":`Workspace`,children:[(0,z.jsx)(`strong`,{children:`LoopX`}),(0,z.jsx)(`p`,{className:`mt-6 text-sm`,children:`Workspace`}),(0,z.jsx)(`p`,{className:`mt-8 text-xs text-slate-500`,children:`Goals`}),[1,2,3].map(e=>(0,z.jsx)(`div`,{className:`mt-4 h-8 rounded bg-slate-100 dark:bg-zinc-900`},e))]}),(0,z.jsx)(`div`,{className:`p-4 sm:p-8`,children:(0,z.jsx)(Jv,{"data-testid":`initial-status-state`,children:(0,z.jsx)(Yv,{className:`flex min-h-64 items-center justify-center p-6`,children:(0,z.jsxs)(`div`,{className:`max-w-xl text-center`,children:[e?(0,z.jsx)(Xp,{className:`mx-auto h-6 w-6 text-rose-600 dark:text-rose-300`}):(0,z.jsx)(Om,{className:`mx-auto h-6 w-6 animate-spin text-slate-500 dark:text-zinc-400`}),(0,z.jsx)(`p`,{className:`mt-3 text-sm font-medium`,children:e?`无法加载实时状态`:`正在加载实时状态`}),e?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{className:`mt-2 break-words text-sm leading-6 text-slate-500 dark:text-zinc-400`,children:o?`本地状态服务暂时未连接。升级或启动期间可能短暂断开,请重试;仍失败时重新打开 LoopX App,或运行 loopx doctor。`:e}),o?(0,z.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-slate-400 dark:text-zinc-500`,children:`重新加载不会执行任务,也不会改变 Goal 配置。`}):null,(0,z.jsx)(`div`,{className:`mt-4 flex flex-wrap justify-center gap-2`,children:(0,z.jsxs)(qv,{disabled:t,onClick:n,children:[(0,z.jsx)(Om,{className:`h-4 w-4`}),`重试`]})})]}):(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-500 dark:text-zinc-400`,role:`status`,children:`正在连接 Workspace,Goal 列表将先出现,详细状态会逐个补齐。 / Connecting to your Workspace. Goals load independently.`})]})})})})]})]})})}function FS(){let e=MC.useSearch(),t=MC.useNavigate(),[n,r]=(0,R.useState)(`light`),[i,a]=(0,R.useState)(null),o=(0,R.useRef)(null),s=(0,R.useRef)(e.goalId);s.current=e.goalId;let[c,l]=(0,R.useState)(bp),[u,d]=(0,R.useState)({kind:`example`,label:`bundled example`}),[f,p]=(0,R.useState)(()=>Ax(window.localStorage,window.location.href)),[m,h]=(0,R.useState)(e.statusUrl),[g,_]=(0,R.useState)(null),[v,y]=(0,R.useState)(!1),[b,x]=(0,R.useState)({error:null,phase:`idle`}),[S,C]=(0,R.useState)(e.statusUrl.trim()||null),[w,T]=(0,R.useState)(!1),E=(0,R.useRef)(null),D=(0,R.useRef)(Bg(e.statusUrl.trim()||null)),O=!w&&u.kind===`example`?e.statusUrl.trim():``,k=S??O,ee=u.kind===`url`?u.label:zx,A=!!(g&&S),j=Ix(f,S,ee,window.location.href),te=u.kind===`example`&&!w,ne=c.attention_queue,re=c.run_history,M=(0,R.useMemo)(()=>Hx(re.goals,ne.items),[re.goals,ne.items]);function N(e,t,n=0){x({error:null,phase:`loading`}),Bx(Zm(e,`stopped`,window.location.href)).then(r=>{if(!Wg(D.current,t))return;let i=r.goal_projection?.registry_revision??null,a=t.registryRevision!==null&&t.registryRevision!==void 0&&i!==null&&t.registryRevision!==i;if(l(e=>p_(e,r)),a&&n<1){oe(e,{background:!0,resyncAttempt:n+1});return}x(a?{error:`Goal 状态在加载历史时发生变化,请重试。`,phase:`error`}:{error:null,phase:`ready`})}).catch(e=>{Wg(D.current,t)&&x({error:yp(e),phase:`error`})})}function ie(){let e=u.kind===`url`?u.label:m||zx,t=Hg(D.current,e,{background:!0});if(i){oe(e);return}t&&N(e,t)}async function ae(e,n,r){if(r.background)return l(e=>p_(e,n)),!0;let i={kind:`url`,label:e};return D.current.loadedUrl=e,l(n),d(i),h(e),await t({search:t=>({...t,statusUrl:e})}),Ug(D.current,r)?(D.current.requestedUrl=null,C(null),!0):!1}async function oe(e,t={}){let n=e.trim(),r=t.background===!0;if(!n){r||_(`状态地址不能为空`);return}let c=Hg(D.current,n,{background:r,selectionRevision:t.selectionRevision});if(!c)return;o.current?.abort();let d=new AbortController;o.current=d,r||(E.current=null,T(!1),C(n),y(!0),_(null),x({error:null,phase:`idle`}));try{let e=await Cp(n,window.location.href).catch(()=>null);if(!Wg(D.current,c))return;if(e){let o=t.retryOnly&&u.kind===`url`&&u.label===n&&i?.directory.registry_revision===e.registry_revision?i.snapshots:{};a({directory:e,snapshots:o,errors:{}});let f={...e,goals:e.goals.filter(e=>!o[e.id])},p=!1,m=wp(e);if(r)l(m);else if(!await ae(n,m,c))return;if(x({error:null,phase:`loading`}),await Tp(n,window.location.href,f,(e,t,n)=>{n===`revision`&&(p=!0),a(r=>r&&{...r,snapshots:t?{...r.snapshots,[e]:t}:r.snapshots,errors:n?{...r.errors,[e]:n}:r.errors})},()=>Wg(D.current,c),()=>s.current,d.signal),p&&(t.resyncAttempt??0)<1&&Wg(D.current,c)){await oe(n,{resyncAttempt:1});return}Wg(D.current,c)&&x({error:null,phase:`ready`});return}let o=await Bx(Zm(n,`active`,window.location.href));if(!Wg(D.current,c)||(a(null),c.registryRevision=o.goal_projection?.registry_revision??null,!await ae(n,o,c)))return;if(o.goal_projection?.scope!==`active`||o.goal_projection.complete){x({error:null,phase:`ready`});return}N(n,c,t.resyncAttempt??0)}catch(e){if(!Ug(D.current,c))return;r||_(yp(e))}finally{!r&&Ug(D.current,c)&&y(!1)}}function P(e,t={}){o.current?.abort();let n=Vg(D.current,e.statusUrl);E.current=null,T(!1),C(e.statusUrl),y(!0),_(null),(async()=>{if(t.ensureTunnel&&e.kind===`ssh_tunnel`){let t=new URL(e.statusUrl,window.location.href).port;if(t)try{await Zy(e.label,t)}catch{}}D.current.selectionRevision===n&&await oe(e.statusUrl,{selectionRevision:n})})()}function F(e){p(e);try{jx(window.localStorage,e)}catch{}}let I={activeSource:j,connectionState:v?`loading`:A?`error`:`connected`,errorMessage:A?`未切换到 ${S??`所选来源`}:${g}`:null,onAdd:e=>{let t=Mx(f,e,window.location.href);return`error`in t?{error:t.error}:(F(t.catalog),P(t.source,{ensureTunnel:e.ensureTunnel}),{})},onRemove:e=>{F(Nx(f,e)),j.id===e&&P(Tx)},onSelect:e=>{let t=f.sources.find(t=>t.id===e);t&&P(t,{ensureTunnel:t.kind===`ssh_tunnel`})},sources:j.id===`temporary`?[...f.sources,j]:f.sources};(0,R.useEffect)(()=>{let t=e.statusUrl.trim();if(t){if(E.current===t||S&&S!==t)return;(u.kind!==`url`||u.label!==t)&&oe(t);return}E.current=null,!w&&(S||u.kind===`example`&&oe(zx))},[w,S,e.statusUrl,u.kind,u.label]),(0,R.useEffect)(()=>{if(e.statusUrl&&u.kind===`example`)return;let n=new Set(M.map(e=>e.goal.id));if(M.length===0){e.goalId&&t({search:e=>({...e,goalId:``})});return}e.goalId&&!n.has(e.goalId)&&b.phase!==`loading`&&t({search:e=>({...e,goalId:``})})},[b.phase,M,t,e.goalId,e.statusUrl,u.kind]),(0,R.useEffect)(()=>{if(!i||v||!e.goalId||u.kind!==`url`)return;let t=i.directory.goals.find(t=>t.id===e.goalId);t?.activation_state===`stopped`&&!i.snapshots[t.id]&&!i.errors[t.id]&&oe(u.label,{retryOnly:!0})},[e.goalId,v,i,u]);function se(e){t({search:t=>({...t,goalId:e})})}return te?(0,z.jsx)(PS,{error:g,isLoading:v,onRetry:()=>void oe(k||zx),requestedUrl:k||zx,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)}):(0,z.jsx)(NS,{goalArchiveLoadState:b,isLoading:v,onGoalActivationStateChange:(e,t)=>{D.current.projectionRevision+=1,l(n=>gp(n,e,t)),a(n=>n&&{...n,snapshots:Object.fromEntries(Object.entries(n.snapshots).map(([n,r])=>[n,gp(r,e,t)]))})},onGoalDeleted:e=>{D.current.projectionRevision+=1,l(t=>_p(t,e)),a(t=>t&&{...t,snapshots:Object.fromEntries(Object.entries(t.snapshots).filter(([t])=>t!==e))})},onSelectGoal:se,onReconcileStatus:()=>oe(u.kind===`url`?u.label:m||zx,{background:!0}),onRetryGoalArchive:ie,onRefresh:()=>oe(u.kind===`url`?u.label:m||zx,{retryOnly:!!(i&&Object.keys(i.errors).length)}),payload:c,progress:i,rows:M,selectedGoalId:e.goalId,statusSourceControl:I,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)})}var IS=v_(`inline-flex items-center gap-1 rounded-md border px-2 py-0.5 text-xs font-medium`,{variants:{variant:{neutral:`border-slate-200 bg-white text-slate-700 dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-300`,success:`border-emerald-200 bg-emerald-50 text-emerald-800 dark:border-emerald-900 dark:bg-emerald-950 dark:text-emerald-200`,warning:`border-amber-200 bg-amber-50 text-amber-800 dark:border-amber-900 dark:bg-amber-950 dark:text-amber-200`,info:`border-sky-200 bg-sky-50 text-sky-800 dark:border-sky-900 dark:bg-sky-950 dark:text-sky-200`,danger:`border-rose-200 bg-rose-50 text-rose-800 dark:border-rose-900 dark:bg-rose-950 dark:text-rose-200`}},defaultVariants:{variant:`neutral`}});function LS({className:e,variant:t,...n}){return(0,z.jsx)(`span`,{className:Gv(IS({variant:t}),e),...n})}var RS=[{label:`status payload`,source:`apps/presentation/dashboard/src/data/status.ts`,detail:`status_contract, attention_queue, local_dashboard_api, run_history`},{label:`channel projection`,source:`apps/presentation/dashboard/src/data/goal-channel-frontstage.ts`,detail:`decision_frame, todos, gates, leases, artifacts, truth_contract`},{label:`public showcase catalog`,source:`docs/showcases/showcase-catalog.json`,detail:`case metadata, visual hints, evidence boundaries, story beats`},{label:`route smoke`,source:`apps/presentation/dashboard/smoke/frontstage-route-smoke.ts`,detail:`static route contract, source guards, component expectations`}],zS=[{axis:`schema`,current:`goal_channel_projection_v0`,proposed:`new optional projection field`,gate:`parser default plus route smoke assertion`},{axis:`truth`,current:`event ledger and active state remain source of truth`,proposed:`derived UI state only`,gate:`truth_contract must stay read-only`},{axis:`privacy`,current:`compact source refs and warnings`,proposed:`public-safe fixture field`,gate:`loopx check and browser fake-private fixture`},{axis:`interaction`,current:`render, filter, select, inspect`,proposed:`no browser write by default`,gate:`write affordance requires explicit loopback capability`}],BS=[{title:`Fixture sources`,body:`Use examples/status.example.json, browser-smoke fixtures, and docs/showcases/showcase-catalog.json.`},{title:`Required proof`,body:`Every projection addition needs parser coverage, route smoke assertions, and one browser or bundle check when UI output changes.`},{title:`Never include`,body:`Raw task text, trajectories, transcripts, local paths, private registry state, credentials, or internal document links.`}],VS=[`npm --prefix apps/presentation/dashboard run smoke:frontstage-route`,`npm --prefix apps/presentation/dashboard run smoke:frontstage-browser`,`npm --prefix apps/presentation/dashboard run smoke:frontstage-share-bundle`,`npm --prefix apps/presentation/dashboard run build`,`loopx check --scan-path apps/presentation/dashboard --scan-path docs/status-data-contract.md`],HS=[{name:`Projection lane`,badges:[`read-only`,`schema v0`],body:`Summarizes one compact projection lane without mutating the underlying LoopX state.`},{name:`Capability badge`,badges:[`loopback`,`dry-run`],body:`Shows an advertised local capability only after the status feed declares it.`},{name:`Boundary warning`,badges:[`public-safe`,`omitted`],body:`Names omitted private material and points contributors back to compact source references.`}];function US({children:e,icon:t,title:n}){return(0,z.jsxs)(`section`,{className:`rounded-lg border border-slate-200 bg-white shadow-sm`,children:[(0,z.jsx)(`div`,{className:`flex items-center justify-between gap-3 border-b border-slate-200 px-4 py-3`,children:(0,z.jsxs)(`h2`,{className:`flex items-center gap-2 text-sm font-semibold text-slate-950`,children:[(0,z.jsx)(t,{className:`h-4 w-4 text-slate-500`}),n]})}),e]})}function WS(){return(0,z.jsx)(US,{icon:Wp,title:`Status Contract Explorer`,children:(0,z.jsx)(`div`,{className:`grid gap-3 p-4 lg:grid-cols-2`,"data-testid":`developer-contract-explorer`,children:RS.map(e=>(0,z.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-3`,children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,z.jsx)(LS,{variant:`info`,children:e.label}),(0,z.jsx)(LS,{variant:`neutral`,children:`public contract`})]}),(0,z.jsx)(`div`,{className:`mt-2 break-words font-mono text-xs text-slate-700`,children:e.source}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.detail})]},e.label))})})}function GS(){return(0,z.jsx)(US,{icon:um,title:`Projection Diffing`,children:(0,z.jsx)(`div`,{className:`overflow-x-auto`,"data-testid":`developer-projection-diffing`,children:(0,z.jsxs)(`table`,{className:`min-w-full border-separate border-spacing-0 text-left text-sm`,children:[(0,z.jsx)(`thead`,{children:(0,z.jsxs)(`tr`,{className:`bg-slate-50 text-xs uppercase tracking-normal text-slate-500`,children:[(0,z.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Axis`}),(0,z.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Current`}),(0,z.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Proposed`}),(0,z.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Gate`})]})}),(0,z.jsx)(`tbody`,{children:zS.map(e=>(0,z.jsxs)(`tr`,{className:`align-top`,children:[(0,z.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 font-semibold text-slate-950`,children:e.axis}),(0,z.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.current}),(0,z.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.proposed}),(0,z.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.gate})]},e.axis))})]})})})}function KS(){return(0,z.jsx)(US,{icon:om,title:`Fixture Generation`,children:(0,z.jsx)(`div`,{className:`grid gap-3 p-4 md:grid-cols-3`,"data-testid":`developer-fixture-generation`,children:BS.map(e=>(0,z.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-3`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:e.title}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.body})]},e.title))})})}function qS(){return(0,z.jsx)(US,{icon:Qp,title:`Smoke Checklist`,children:(0,z.jsx)(`div`,{className:`space-y-2 p-4`,"data-testid":`developer-smoke-checklist`,children:VS.map(e=>(0,z.jsxs)(`div`,{className:`flex items-start gap-3 rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,z.jsx)(Vp,{className:`mt-0.5 h-4 w-4 shrink-0 text-emerald-600`}),(0,z.jsx)(`code`,{className:`break-all text-xs font-semibold leading-5 text-slate-700`,children:e})]},e))})})}function JS(){return(0,z.jsx)(US,{icon:$p,title:`Component Examples`,children:(0,z.jsx)(`div`,{className:`grid gap-3 p-4 lg:grid-cols-3`,"data-testid":`developer-component-examples`,children:HS.map(e=>(0,z.jsxs)(`article`,{className:`rounded-md border border-slate-200 bg-slate-50 p-3`,children:[(0,z.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.badges.map(e=>(0,z.jsx)(LS,{variant:e===`read-only`||e===`public-safe`?`success`:`neutral`,children:e},e))}),(0,z.jsx)(`h3`,{className:`mt-3 text-sm font-semibold leading-6 text-slate-950`,children:e.name}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.body})]},e.name))})})}function YS(){return(0,z.jsx)(`main`,{className:`min-h-screen bg-[#f7f7f4] px-4 py-4 text-slate-950 sm:px-5`,"data-testid":`frontstage-developer-cockpit`,children:(0,z.jsxs)(`div`,{className:`mx-auto grid max-w-[1500px] gap-4 xl:grid-cols-[260px_minmax(0,1fr)]`,children:[(0,z.jsxs)(`aside`,{className:`rounded-lg border border-slate-200 bg-white p-4 shadow-sm xl:sticky xl:top-4 xl:self-start`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`div`,{className:`flex h-9 w-9 items-center justify-center rounded-md border border-slate-200 bg-slate-950 text-white`,children:(0,z.jsx)(Vm,{className:`h-4 w-4`})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold`,children:`Developer Cockpit`}),(0,z.jsx)(`div`,{className:`text-xs text-slate-500`,children:`Projection extension`})]})]}),(0,z.jsxs)(`div`,{className:`mt-4 grid gap-2`,children:[(0,z.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md border border-slate-200 px-3 py-2 text-sm font-medium`,href:`https://huangruiteng.github.io/loopx/`,children:[(0,z.jsx)(pm,{className:`h-4 w-4`}),`LoopX home`]}),(0,z.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md border border-slate-200 px-3 py-2 text-sm font-medium`,href:`https://huangruiteng.github.io/loopx/docs/showcases/index.en.html`,children:[(0,z.jsx)(im,{className:`h-4 w-4`}),`Public cases`]}),(0,z.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md bg-slate-950 px-3 py-2 text-sm font-medium text-white`,href:`/chat/developers/projections/`,children:[(0,z.jsx)($p,{className:`h-4 w-4`}),`Developer cockpit`]})]}),(0,z.jsxs)(`div`,{className:`mt-5 space-y-2 rounded-md border border-emerald-200 bg-emerald-50 p-3 text-xs leading-5 text-emerald-950`,children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,z.jsx)(LS,{variant:`success`,children:`read-only`}),(0,z.jsx)(LS,{variant:`neutral`,children:`public fixtures`})]}),(0,z.jsx)(`p`,{children:`This route uses static public contracts only; live status feeds, registry files, and browser write APIs stay outside the cockpit.`})]})]}),(0,z.jsxs)(`section`,{className:`space-y-4`,children:[(0,z.jsx)(`div`,{className:`rounded-lg border border-slate-200 bg-white px-5 py-5 shadow-sm`,children:(0,z.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-4`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,z.jsx)(LS,{variant:`info`,children:`developers/projections`}),(0,z.jsx)(LS,{variant:`success`,children:`public-safe`}),(0,z.jsx)(LS,{variant:`neutral`,children:`no browser writes`})]}),(0,z.jsx)(`h1`,{className:`mt-3 text-3xl font-semibold tracking-normal text-slate-950`,children:`LoopX Projection Developer Cockpit`}),(0,z.jsx)(`p`,{className:`mt-2 max-w-3xl text-sm leading-6 text-slate-600`,children:`A read-only contributor workbench for adding dashboard/frontstage projections without reverse-engineering the large operator page.`})]}),(0,z.jsxs)(`div`,{className:`grid min-w-[260px] gap-2 text-sm`,children:[(0,z.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,z.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-normal text-slate-500`,children:`Source of truth`}),(0,z.jsx)(`div`,{className:`mt-1 font-semibold text-slate-950`,children:`status contract + compact fixtures`})]}),(0,z.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,z.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-normal text-slate-500`,children:`Boundary`}),(0,z.jsx)(`div`,{className:`mt-1 font-semibold text-slate-950`,children:`read-only extension surface`})]})]})]})}),(0,z.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,z.jsx)(WS,{}),(0,z.jsx)(GS,{})]}),(0,z.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(0,1fr)_420px]`,children:[(0,z.jsx)(KS,{}),(0,z.jsx)(qS,{})]}),(0,z.jsx)(JS,{}),(0,z.jsx)(US,{icon:Im,title:`Extension Boundary`,children:(0,z.jsxs)(`div`,{className:`grid gap-3 p-4 md:grid-cols-3`,"data-testid":`developer-extension-boundary`,children:[(0,z.jsxs)(`div`,{className:`rounded-md border border-emerald-200 bg-emerald-50 px-3 py-3`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Allowed`}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`Versioned parser defaults, public fixtures, read-only route panels, and focused smoke assertions.`})]}),(0,z.jsxs)(`div`,{className:`rounded-md border border-amber-200 bg-amber-50 px-3 py-3`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Review`}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`New dashboard dependencies, status contract fields, loopback capability display, and browser-visible workflows.`})]}),(0,z.jsxs)(`div`,{className:`rounded-md border border-rose-200 bg-rose-50 px-3 py-3`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Stop`}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`Credentials, private registry material, raw logs, transcripts, production actions, or default browser write authority.`})]})]})})]})]})})}var XS=J({value:G().finite(),total:G().finite().positive().optional(),unit:W().optional(),higher_is_better:K()}).passthrough(),ZS=gd(W(),G().finite()).default({}),QS=J({outcome_status:W().optional(),failure_class:W(),causal_summary:W(),expectedness:W(),implication:W(),next_probe:W(),confidence:W(),evidence_refs:q(W()).optional()}).passthrough(),$S=J({arm_id:W(),selected_run_id:W().nullable(),score_countable:K(),metrics:gd(W(),XS),effort:ZS,insight:QS.nullable().optional()}),eC=J({run_id:W(),case_id:W(),arm_id:W(),arm_role:W(),status:W(),protocol_id:W(),runner_revision:W().optional(),observed_at:W(),metrics:gd(W(),XS),countability:J({integrity_qualified:K(),official_result_present:K(),score_countable:K()}).passthrough(),treatment_fidelity:W(),effort:ZS,redacted_insight:QS.nullable().optional(),upload_provenance:J({producer_id:W(),producer_version:W(),observed_at:W(),source_revision:W()}).passthrough()}).passthrough(),tC=J({case_denominator:G().int().nonnegative(),value_sum:G().finite(),value_mean:G().finite().nullable(),value_median:G().finite().nullable(),value_min:G().finite().nullable(),value_max:G().finite().nullable(),case_macro_rate:G().finite().optional(),suite_micro_rate:G().finite().optional(),suite_micro_numerator:G().finite().optional(),suite_micro_denominator:G().finite().positive().optional()}).passthrough(),nC=J({arm_id:W(),arm_role:W(),factor_assignments:gd(W(),W()),protocol_counts:gd(W(),G().int().nonnegative()).default({}),runner_revision_counts:gd(W(),G().int().nonnegative()).default({}),orchestrator_runtime_counts:gd(W(),G().int().nonnegative()).default({}),intended_case_count:G().int().positive(),run_count:G().int().nonnegative(),terminal_run_count:G().int().nonnegative(),selected_score_countable_case_count:G().int().nonnegative(),coverage_rate:G().finite().min(0).max(1),metrics:gd(W(),tC),binary_outcomes:gd(W(),J({success_count:G().int().nonnegative(),case_denominator:G().int().nonnegative(),success_rate:G().finite().min(0).max(1).nullable()})),effort:gd(W(),J({denominator:G().int().nonnegative(),mean:G().finite().nullable(),median:G().finite().nullable()})),failure_class_counts:gd(W(),G().int().nonnegative())}).passthrough(),rC=J({baseline_value:G().finite(),candidate_value:G().finite(),delta:G().finite(),direction:Y([`improved`,`flat`,`regressed`]).optional()}).passthrough(),iC=J({comparison_id:W(),comparison_anchor_run_id:W(),candidate_run_id:W(),candidate_arm_id:W(),primary_metric:W(),matched_pair_countable:X(!0),metric_deltas:gd(W(),rC)}).passthrough(),aC=J({ok:X(!0),schema_version:X(`benchmark_study_dashboard_v0`),benchmark_id:W(),study_id:W(),status:Y([`complete`,`provisional`]),design:J({protocol_id:W(),comparison_protocol_id:W(),baseline_arm_id:W(),case_set:J({case_set_id:W(),case_ids:q(W())}),metric_catalog:q(J({metric_name:W(),role:Y([`primary`,`guardrail`,`supporting`]),unit:W().optional(),higher_is_better:K(),binary:K()})),labels:gd(W(),W())}).passthrough(),campaign:J({intended_case_count:G().int().positive(),intended_arm_count:G().int().positive(),intended_cell_denominator:G().int().positive(),selected_score_countable_cell_count:G().int().nonnegative(),selected_score_countable_coverage_rate:G().finite().min(0).max(1),complete_declared_design_case_count:G().int().nonnegative(),ambiguous_score_countable_cell_count:G().int().nonnegative(),in_flight_run_count:G().int().nonnegative(),matched_pair_countable_count:G().int().nonnegative(),factorial_contrast_count:G().int().nonnegative(),factorial_contrast_countable_count:G().int().nonnegative(),runtime_observation_count:G().int().nonnegative(),runtime_classification_counts:gd(W(),G().int().nonnegative())}),arms:q(nC),contrasts:gd(W(),J({matched_pair_denominator:G().int().nonnegative(),primary_metric_directions:J({improved:G().int().nonnegative(),flat:G().int().nonnegative(),regressed:G().int().nonnegative()}),binary_metric_transitions:gd(W(),J({"0_to_1":G().int().nonnegative(),"1_to_0":G().int().nonnegative(),same:G().int().nonnegative()}))})),cases:q(J({case_id:W(),complete_declared_design:K(),arms:q($S),eligible_comparisons:q(iC),largest_eligible_primary_contrast:iC.nullable()})),runs:q(eC),authority:J({score_source:W(),matched_comparison_source:W(),factorial_comparison_source:W().nullable(),manifest_changes_scores:X(!1),dashboard_is_execution_authority:X(!1)}),public_boundary:J({raw_task_recorded:X(!1),raw_trajectory_recorded:X(!1),hidden_evaluation_recorded:X(!1),raw_verifier_output_recorded:X(!1),credentials_recorded:X(!1),local_paths_recorded:X(!1)}),write_performed:X(!1),network_access_performed:X(!1)});function oC(e){return aC.parse(e)}function sC(e,t){let n=new URL(t),r=new URL(e||`/benchmark-study.example.json`,n);if(!new Set([`http:`,`https:`]).has(r.protocol))throw Error(`Benchmark dashboard source must use HTTP or HTTPS`);if(r.origin!==n.origin)throw Error(`Benchmark dashboard source must use same-origin local readback`);return r.toString()}var cC=[{id:`campaign`,label:`Campaign`},{id:`arms`,label:`Arms`},{id:`cases`,label:`Cases`},{id:`runs`,label:`Runs`}];function lC(e){return e==null?`—`:`${(e*100).toFixed(e>=.995?0:1)}%`}function uC(e){return e==null?`—`:new Intl.NumberFormat(`en`,{maximumFractionDigits:2,notation:`compact`}).format(e)}function dC(e){if(e==null)return`—`;let t=e/6e4;return t>=120?`${(t/60).toFixed(1)} h`:`${uC(t)} min`}function fC(e){let t=Object.entries(e);return t.length?t.map(([e,t])=>`${e} (${t})`).join(`, `):`—`}function pC(e){if(!e)return`—`;let t=e.total==null?uC(e.value):`${uC(e.value)}/${uC(e.total)}`;return e.unit?`${t} ${e.unit}`:t}function mC(e,t){let n=e.metrics[t];return!n||n.case_denominator===0?`—`:n.suite_micro_rate==null?`${uC(n.value_mean)} mean`:`${lC(n.suite_micro_rate)} · ${uC(n.suite_micro_numerator)}/${uC(n.suite_micro_denominator)}`}function hC(e,t){let n=e.largest_eligible_primary_contrast,r=n?.metric_deltas[t];if(!n||!r)return null;let i=r.delta>0?`+`:``;return{direction:r.direction,text:`${n.candidate_arm_id}: ${i}${uC(r.delta)}`}}function gC({children:e,tone:t=`neutral`}){return(0,z.jsx)(`span`,{className:`benchmark-state benchmark-state-${t}`,children:e})}function _C({packet:e,primaryMetric:t}){return(0,z.jsxs)(`div`,{className:`benchmark-view-stack`,children:[(0,z.jsxs)(`section`,{"aria-labelledby":`arm-summary-title`,children:[(0,z.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`p`,{className:`benchmark-kicker`,children:`ARM SUMMARY`}),(0,z.jsx)(`h2`,{id:`arm-summary-title`,children:`Comparable outcomes, denominator first`})]}),(0,z.jsx)(`p`,{children:`Only one score-countable run per declared case × arm cell is selected.`})]}),(0,z.jsx)(`div`,{className:`benchmark-arm-grid`,children:e.arms.map(e=>{let n=Object.values(e.binary_outcomes)[0];return(0,z.jsxs)(`article`,{className:`benchmark-arm-card`,children:[(0,z.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{className:`benchmark-mono`,children:e.arm_role}),(0,z.jsx)(`h3`,{children:e.arm_id})]}),(0,z.jsx)(gC,{tone:e.coverage_rate===1?`success`:`warning`,children:e.coverage_rate===1?`Complete`:`Provisional`})]}),(0,z.jsxs)(`dl`,{className:`benchmark-stat-list`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`dt`,{children:[`Primary · `,t]}),(0,z.jsx)(`dd`,{children:mC(e,t)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Score-countable coverage`}),(0,z.jsxs)(`dd`,{children:[e.selected_score_countable_case_count,`/`,e.intended_case_count]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Binary success`}),(0,z.jsx)(`dd`,{children:n?`${n.success_count}/${n.case_denominator}`:`Not declared`})]})]})]},e.arm_id)})})]}),(0,z.jsxs)(`section`,{"aria-labelledby":`contrast-title`,children:[(0,z.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`p`,{className:`benchmark-kicker`,children:`MATCHED CONTRASTS`}),(0,z.jsx)(`h2`,{id:`contrast-title`,children:`Direction counts on eligible pairs`})]}),(0,z.jsx)(`p`,{children:`Raw run volume is never used as a comparison denominator.`})]}),(0,z.jsx)(`div`,{className:`benchmark-table-shell`,children:(0,z.jsxs)(`table`,{children:[(0,z.jsx)(`thead`,{children:(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`th`,{children:`Candidate arm`}),(0,z.jsx)(`th`,{children:`Matched denominator`}),(0,z.jsx)(`th`,{children:`Improved`}),(0,z.jsx)(`th`,{children:`Flat`}),(0,z.jsx)(`th`,{children:`Regressed`}),(0,z.jsx)(`th`,{children:`Binary transitions`})]})}),(0,z.jsxs)(`tbody`,{children:[Object.entries(e.contrasts).map(([e,t])=>(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`td`,{children:(0,z.jsx)(`strong`,{children:e})}),(0,z.jsx)(`td`,{children:t.matched_pair_denominator}),(0,z.jsx)(`td`,{className:`benchmark-positive`,children:t.primary_metric_directions.improved}),(0,z.jsx)(`td`,{children:t.primary_metric_directions.flat}),(0,z.jsx)(`td`,{className:`benchmark-negative`,children:t.primary_metric_directions.regressed}),(0,z.jsx)(`td`,{children:Object.entries(t.binary_metric_transitions).map(([e,t])=>`${e}: 0→1 ${t[`0_to_1`]}, 1→0 ${t[`1_to_0`]}, same ${t.same}`).join(` · `)||`—`})]},e)),Object.keys(e.contrasts).length===0&&(0,z.jsx)(`tr`,{children:(0,z.jsx)(`td`,{colSpan:6,children:`No matched comparisons are countable yet.`})})]})]})})]}),(0,z.jsxs)(`section`,{"aria-labelledby":`runtime-health-title`,children:[(0,z.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`p`,{className:`benchmark-kicker`,children:`RUNTIME HEALTH`}),(0,z.jsx)(`h2`,{id:`runtime-health-title`,children:`Qualified observations, without execution authority`})]}),(0,z.jsxs)(`p`,{children:[e.campaign.runtime_observation_count,` public-safe runtime observations.`]})]}),(0,z.jsxs)(`div`,{className:`benchmark-runtime-list`,children:[Object.entries(e.campaign.runtime_classification_counts).map(([e,t])=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{children:e}),(0,z.jsx)(`strong`,{children:t})]},e)),e.campaign.runtime_observation_count===0&&(0,z.jsx)(`p`,{className:`benchmark-muted`,children:`No runtime observations uploaded.`})]})]})]})}function vC({packet:e}){return(0,z.jsx)(`div`,{className:`benchmark-detail-grid`,children:e.arms.map(t=>(0,z.jsxs)(`article`,{className:`benchmark-detail-card`,children:[(0,z.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{className:`benchmark-mono`,children:t.arm_role}),(0,z.jsx)(`h2`,{children:t.arm_id})]}),(0,z.jsxs)(gC,{tone:t.coverage_rate===1?`success`:`warning`,children:[t.selected_score_countable_case_count,`/`,t.intended_case_count,` countable`]})]}),(0,z.jsx)(`div`,{className:`benchmark-factor-row`,children:Object.entries(t.factor_assignments).map(([e,t])=>(0,z.jsxs)(`span`,{children:[e,`: `,(0,z.jsx)(`strong`,{children:t})]},e))}),(0,z.jsxs)(`dl`,{className:`benchmark-stat-list`,children:[e.design.metric_catalog.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`dt`,{children:[e.role,` · `,e.metric_name]}),(0,z.jsx)(`dd`,{children:mC(t,e.metric_name)})]},e.metric_name)),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Runs terminal / observed`}),(0,z.jsxs)(`dd`,{children:[t.terminal_run_count,`/`,t.run_count]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Median duration`}),(0,z.jsx)(`dd`,{children:dC(t.effort.duration_ms?.median)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Protocols`}),(0,z.jsx)(`dd`,{children:fC(t.protocol_counts)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Runner revisions`}),(0,z.jsx)(`dd`,{children:fC(t.runner_revision_counts)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Orchestrator runtimes`}),(0,z.jsxs)(`dd`,{children:[Object.keys(t.orchestrator_runtime_counts).length||0,` distinct`]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Failure classes`}),(0,z.jsx)(`dd`,{children:fC(t.failure_class_counts)})]})]})]},t.arm_id))})}function yC({packet:e,primaryMetric:t,onOpenRun:n}){return(0,z.jsx)(`div`,{className:`benchmark-table-shell benchmark-wide-table`,children:(0,z.jsxs)(`table`,{children:[(0,z.jsx)(`thead`,{children:(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`th`,{children:`Case`}),(0,z.jsx)(`th`,{children:`Design status`}),(0,z.jsx)(`th`,{children:`Largest eligible delta`}),e.arms.map(e=>(0,z.jsx)(`th`,{children:e.arm_id},e.arm_id))]})}),(0,z.jsx)(`tbody`,{children:e.cases.map(r=>{let i=hC(r,t);return(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`td`,{children:(0,z.jsx)(`strong`,{children:r.case_id})}),(0,z.jsx)(`td`,{children:(0,z.jsx)(gC,{tone:r.complete_declared_design?`success`:`warning`,children:r.complete_declared_design?`Complete`:`Provisional`})}),(0,z.jsx)(`td`,{className:i?.direction===`improved`?`benchmark-positive`:i?.direction===`regressed`?`benchmark-negative`:void 0,children:i?.text??`—`}),r.arms.map(r=>(0,z.jsx)(`td`,{children:r.selected_run_id&&r.score_countable?(0,z.jsxs)(`button`,{className:`benchmark-cell-link`,onClick:()=>n(r.selected_run_id),type:`button`,children:[(0,z.jsxs)(`span`,{children:[t,`: `,pC(r.metrics[t])]}),e.design.metric_catalog.filter(e=>e.metric_name!==t).map(e=>(0,z.jsxs)(`small`,{className:`benchmark-cell-metric`,children:[e.metric_name,`: `,pC(r.metrics[e.metric_name])]},e.metric_name)),(0,z.jsxs)(`small`,{children:[`Countable · `,dC(r.effort.duration_ms),` `,(0,z.jsx)(Rp,{"aria-hidden":`true`,size:12})]}),r.insight&&(0,z.jsxs)(`small`,{children:[r.insight.failure_class,` · `,r.insight.confidence]})]}):(0,z.jsx)(`span`,{className:`benchmark-muted`,children:`Not countable`})},r.arm_id))]},r.case_id)})})]})})}function bC({run:e,packet:t}){return(0,z.jsxs)(`aside`,{"aria-label":`Run detail for ${e.run_id}`,className:`benchmark-run-detail`,children:[(0,z.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{className:`benchmark-mono`,children:`RUN DETAIL`}),(0,z.jsx)(`h2`,{children:e.run_id})]}),(0,z.jsx)(gC,{tone:e.countability.score_countable?`success`:`warning`,children:e.countability.score_countable?`Score-countable`:`Diagnostic only`})]}),(0,z.jsxs)(`dl`,{className:`benchmark-stat-list benchmark-run-facts`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Case / arm`}),(0,z.jsxs)(`dd`,{children:[e.case_id,` · `,e.arm_id]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Lifecycle`}),(0,z.jsxs)(`dd`,{children:[e.status,` · `,e.observed_at]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Protocol`}),(0,z.jsx)(`dd`,{children:e.protocol_id})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Qualification`}),(0,z.jsxs)(`dd`,{children:[`Integrity `,e.countability.integrity_qualified?`qualified`:`not qualified`,` · result `,e.countability.official_result_present?`present`:`missing`]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Treatment fidelity`}),(0,z.jsx)(`dd`,{children:e.treatment_fidelity})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Effort`}),(0,z.jsxs)(`dd`,{children:[dC(e.effort.duration_ms),` · `,uC(e.effort.agent_steps),` steps · `,uC(e.effort.token_count),` tokens`]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Runner revision`}),(0,z.jsx)(`dd`,{children:e.runner_revision??`—`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Upload provenance`}),(0,z.jsxs)(`dd`,{children:[e.upload_provenance.producer_id,` · `,e.upload_provenance.source_revision]})]})]}),(0,z.jsx)(`div`,{className:`benchmark-run-metrics`,children:t.design.metric_catalog.map(t=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{children:t.metric_name}),(0,z.jsx)(`strong`,{children:pC(e.metrics[t.metric_name])})]},t.metric_name))}),e.redacted_insight&&(0,z.jsxs)(`div`,{className:`benchmark-insight`,children:[(0,z.jsxs)(`span`,{className:`benchmark-mono`,children:[`REDACTED CASE INSIGHT · `,e.redacted_insight.confidence]}),(0,z.jsx)(`p`,{children:e.redacted_insight.causal_summary}),(0,z.jsxs)(`small`,{children:[`Implication: `,e.redacted_insight.implication]}),(0,z.jsx)(`br`,{}),(0,z.jsxs)(`small`,{children:[`Next probe: `,e.redacted_insight.next_probe]}),!!e.redacted_insight.evidence_refs?.length&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`br`,{}),(0,z.jsxs)(`small`,{children:[`Evidence: `,e.redacted_insight.evidence_refs.join(`, `)]})]})]})]})}function xC({packet:e,selectedRunId:t,onSelectRun:n}){let r=e.runs.find(e=>e.run_id===t)??e.runs[0];return(0,z.jsxs)(`div`,{className:`benchmark-runs-layout`,children:[(0,z.jsx)(`div`,{className:`benchmark-table-shell`,children:(0,z.jsxs)(`table`,{children:[(0,z.jsx)(`thead`,{children:(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`th`,{children:`Run`}),(0,z.jsx)(`th`,{children:`Case`}),(0,z.jsx)(`th`,{children:`Arm`}),(0,z.jsx)(`th`,{children:`Status`}),(0,z.jsx)(`th`,{children:`Countability`})]})}),(0,z.jsx)(`tbody`,{children:e.runs.map(e=>(0,z.jsxs)(`tr`,{"aria-selected":e.run_id===r?.run_id,children:[(0,z.jsx)(`td`,{children:(0,z.jsx)(`button`,{className:`benchmark-run-link`,onClick:()=>n(e.run_id),type:`button`,children:e.run_id})}),(0,z.jsx)(`td`,{children:e.case_id}),(0,z.jsx)(`td`,{children:e.arm_id}),(0,z.jsx)(`td`,{children:e.status}),(0,z.jsx)(`td`,{children:e.countability.score_countable?`Score-countable`:`Diagnostic only`})]},e.run_id))})]})}),r&&(0,z.jsx)(bC,{packet:e,run:r})]})}function SC(){let e=LC.useSearch(),t=LC.useNavigate(),[n,r]=(0,R.useState)(null),[i,a]=(0,R.useState)(null),[o,s]=(0,R.useState)(0),c=(0,R.useMemo)(()=>{let t=e.dashboardUrl||`/chat/benchmark-study.example.json`;try{return{url:sC(t,window.location.href),error:null}}catch(e){return{url:``,error:e instanceof Error?e.message:`Invalid dashboard source`}}},[e.dashboardUrl]);if((0,R.useEffect)(()=>{let e=!0;return r(null),a(null),c.error?(a(c.error),()=>{e=!1}):(fetch(c.url,{cache:`no-store`}).then(async e=>{if(!e.ok)throw Error(`HTTP ${e.status} while loading the dashboard packet`);return oC(await e.json())}).then(t=>{e&&r(t)}).catch(t=>{e&&a(t instanceof Error?t.message:`Unable to load dashboard packet`)}),()=>{e=!1})},[o,c]),(0,R.useEffect)(()=>{n&&(document.title=`${n.design.labels.title??n.study_id} · LoopX Benchmark`)},[n]),i)return(0,z.jsxs)(`main`,{className:`benchmark-page benchmark-loading`,children:[(0,z.jsx)(Xp,{"aria-hidden":`true`}),(0,z.jsx)(`h1`,{children:`Dashboard packet unavailable`}),(0,z.jsx)(`p`,{children:i}),(0,z.jsxs)(`button`,{onClick:()=>s(e=>e+1),type:`button`,children:[(0,z.jsx)(Om,{"aria-hidden":`true`,size:16}),` Retry readback`]})]});if(!n)return(0,z.jsxs)(`main`,{"aria-busy":`true`,className:`benchmark-page benchmark-loading`,children:[(0,z.jsx)(Fp,{"aria-hidden":`true`}),(0,z.jsx)(`h1`,{children:`Reading benchmark study`}),(0,z.jsx)(`p`,{children:`Validating the public-safe dashboard packet…`})]});let l=n.design.metric_catalog.find(e=>e.role===`primary`)?.metric_name??`primary`,u=(n,r=e.runId)=>t({search:e=>({...e,view:n,runId:r})}),d=new URL(c.url).pathname;return(0,z.jsxs)(`main`,{className:`benchmark-page`,children:[(0,z.jsxs)(`header`,{className:`benchmark-hero`,children:[(0,z.jsxs)(`div`,{className:`benchmark-hero-topline`,children:[(0,z.jsx)(`a`,{className:`benchmark-wordmark`,href:`/chat/`,children:`LoopX`}),(0,z.jsxs)(`div`,{className:`benchmark-readonly`,children:[(0,z.jsx)(Im,{"aria-hidden":`true`,size:15}),` Derived read-only projection`]})]}),(0,z.jsxs)(`div`,{className:`benchmark-hero-grid`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`p`,{className:`benchmark-kicker`,children:[`BENCHMARK STUDY / `,n.benchmark_id]}),(0,z.jsxs)(`div`,{className:`benchmark-title-row`,children:[(0,z.jsx)(`h1`,{children:n.design.labels.title??n.study_id}),(0,z.jsx)(gC,{tone:n.status===`complete`?`success`:`warning`,children:n.status})]}),(0,z.jsx)(`p`,{className:`benchmark-lead`,children:`One declared study, explicit denominators, and the same countability rules from campaign summary to exact run.`})]}),(0,z.jsxs)(`dl`,{className:`benchmark-identity`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Study`}),(0,z.jsx)(`dd`,{children:n.study_id})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Protocol`}),(0,z.jsx)(`dd`,{children:n.design.protocol_id})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Case set`}),(0,z.jsx)(`dd`,{children:n.design.case_set.case_set_id})]})]})]}),(0,z.jsxs)(`div`,{className:`benchmark-kpi-grid`,children:[(0,z.jsxs)(`article`,{children:[(0,z.jsx)(tm,{"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:`Score-countable cells`}),(0,z.jsxs)(`strong`,{children:[n.campaign.selected_score_countable_cell_count,(0,z.jsxs)(`small`,{children:[` / `,n.campaign.intended_cell_denominator]})]}),(0,z.jsxs)(`p`,{children:[lC(n.campaign.selected_score_countable_coverage_rate),` declared coverage`]})]}),(0,z.jsxs)(`article`,{children:[(0,z.jsx)(Zp,{"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:`Complete designs`}),(0,z.jsxs)(`strong`,{children:[n.campaign.complete_declared_design_case_count,(0,z.jsxs)(`small`,{children:[` / `,n.campaign.intended_case_count]})]}),(0,z.jsx)(`p`,{children:`Cases with every declared arm`})]}),(0,z.jsxs)(`article`,{children:[(0,z.jsx)(Rp,{"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:`Matched comparisons`}),(0,z.jsx)(`strong`,{children:n.campaign.matched_pair_countable_count}),(0,z.jsx)(`p`,{children:`Eligible pairs only`})]}),(0,z.jsxs)(`article`,{children:[(0,z.jsx)(Fp,{"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:`In flight`}),(0,z.jsx)(`strong`,{children:n.campaign.in_flight_run_count}),(0,z.jsx)(`p`,{children:n.status===`provisional`?`Coverage remains provisional`:`Declared coverage complete`})]})]})]}),(0,z.jsxs)(`nav`,{"aria-label":`Benchmark dashboard views`,className:`benchmark-tabs`,children:[cC.map(t=>(0,z.jsx)(`button`,{"aria-current":e.view===t.id?`page`:void 0,onClick:()=>u(t.id),type:`button`,children:t.label},t.id)),(0,z.jsxs)(`button`,{className:`benchmark-refresh`,onClick:()=>s(e=>e+1),type:`button`,children:[(0,z.jsx)(Om,{"aria-hidden":`true`,size:14}),` Refresh local readback`]})]}),(0,z.jsxs)(`div`,{className:`benchmark-content`,children:[e.view===`campaign`&&(0,z.jsx)(_C,{packet:n,primaryMetric:l}),e.view===`arms`&&(0,z.jsx)(vC,{packet:n}),e.view===`cases`&&(0,z.jsx)(yC,{onOpenRun:e=>u(`runs`,e),packet:n,primaryMetric:l}),e.view===`runs`&&(0,z.jsx)(xC,{onSelectRun:e=>u(`runs`,e),packet:n,selectedRunId:e.runId})]}),(0,z.jsxs)(`footer`,{className:`benchmark-footer`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(Im,{"aria-hidden":`true`,size:16}),(0,z.jsxs)(`span`,{children:[`Scores: `,n.authority.score_source]}),(0,z.jsx)(`span`,{children:`Dashboard cannot launch, grade, or mutate runs.`})]}),(0,z.jsxs)(`code`,{title:d,children:[`local`,d]})]})]})}var CC=J({goalId:W().optional().default(``),statusUrl:W().optional().default(``)}),wC=J({goalId:W().optional().default(``),mode:Y([`showcase`,`developer`,`ops`]).optional().default(`showcase`),statusUrl:W().optional().default(``),todoLane:Y([`all`,`user`,`agent`]).optional().default(`all`),todoQuery:W().optional().default(``)}),TC=wC.omit({mode:!0}),EC=J({dashboardUrl:W().optional().default(``),view:Y([`campaign`,`arms`,`cases`,`runs`]).optional().default(`campaign`),runId:W().optional().default(``)});function DC(){let e=`https://huangruiteng.github.io/loopx/docs/showcases/index.en.html`;return(0,R.useEffect)(()=>{window.location.replace(e)},[]),(0,z.jsx)(`a`,{href:e,children:`Open LoopX cases / 浏览案例`})}function OC({goalId:e,statusUrl:t}){let n=t?Ym(t,window.location.href):null;return n?.error?(0,z.jsx)(`main`,{role:`alert`,children:n.error}):(0,z.jsx)(ii,{replace:!0,to:`/`,search:{goalId:e,statusUrl:t}})}function kC(){let e=NC.useSearch();return e.mode===`ops`?(0,z.jsx)(OC,{...e}):e.mode===`developer`?(0,z.jsx)(ii,{replace:!0,to:`/developers/projections`}):(0,z.jsx)(DC,{})}function AC(){return(0,z.jsx)(OC,{...PC.useSearch()})}var jC=Ci({component:()=>(0,z.jsx)(Mi,{}),errorComponent:()=>(0,z.jsxs)(`main`,{role:`alert`,className:`p-8`,children:[(0,z.jsx)(`h1`,{children:`页面暂时无法显示 / Page unavailable`}),(0,z.jsx)(`p`,{children:`请重新加载页面;这不会执行任务。 / Reloading does not execute tasks.`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>window.location.reload(),children:`重新加载 / Reload`})]})}),MC=xi({getParentRoute:()=>jC,path:`/`,validateSearch:e=>CC.parse(e),component:FS}),NC=xi({getParentRoute:()=>jC,path:`/frontstage`,validateSearch:e=>wC.parse(e),component:kC}),PC=xi({getParentRoute:()=>jC,path:`/deprecated/frontstage/ops`,validateSearch:e=>TC.parse(e),component:AC}),FC=xi({getParentRoute:()=>jC,path:`/frontstage/developer`,component:()=>(0,z.jsx)(ii,{replace:!0,to:`/developers/projections`})}),IC=xi({getParentRoute:()=>jC,path:`/developers/projections`,component:YS}),LC=xi({getParentRoute:()=>jC,path:`/benchmarks/study`,validateSearch:e=>EC.parse(e),component:SC}),RC=jC.addChildren([MC,NC,PC,FC,IC,LC]);function zC(e){return!e||e===`/`||e===`./`?`/`:(e.startsWith(`/`)?e:`/${e}`).replace(/\/+$/,``)||`/`}var BC=Li({routeTree:RC,basepath:zC(`/chat/`),trailingSlash:`preserve`}),VC=document.getElementById(`root`);if(!VC)throw Error(`Root element not found`);var HC=new je({defaultOptions:{queries:{refetchOnWindowFocus:!1,retry:1,staleTime:1e4}}});(0,Vi.createRoot)(VC).render((0,z.jsx)(Fe,{client:HC,children:(0,z.jsx)(qi,{children:(0,z.jsx)(Bi,{router:BC})})})); \ No newline at end of file diff --git a/loopx/web/chat/index.html b/loopx/web/chat/index.html index a9a238c053..9673e6304f 100644 --- a/loopx/web/chat/index.html +++ b/loopx/web/chat/index.html @@ -18,8 +18,8 @@ content="LoopX 个人 Agent 工作区:在同一个频道里查看、纠偏并推进 Goal。" /> LoopX 个人 Agent 工作区 - - + +
From 9e7599b0b5811c89495c24a963b0452384f67c5e Mon Sep 17 00:00:00 2001 From: Green hats <183933879+Green-hats@users.noreply.github.com> Date: Thu, 10 Sep 2026 11:24:26 +0800 Subject: [PATCH 02/76] fix(dashboard): survive unavailable browser storage Signed-off-by: Green hats <183933879+Green-hats@users.noreply.github.com> --- .../dashboard/src/views/dashboard-page.tsx | 12 +- .../status-source-switch-browser-smoke.mjs | 40 ++++++ loopx/web/chat/assets/index-D8I1vMCP.js | 129 ++++++++++++++++++ loopx/web/chat/index.html | 2 +- 4 files changed, 179 insertions(+), 4 deletions(-) create mode 100644 loopx/web/chat/assets/index-D8I1vMCP.js diff --git a/apps/presentation/dashboard/src/views/dashboard-page.tsx b/apps/presentation/dashboard/src/views/dashboard-page.tsx index 20486fd1cd..5284a9e30a 100644 --- a/apps/presentation/dashboard/src/views/dashboard-page.tsx +++ b/apps/presentation/dashboard/src/views/dashboard-page.tsx @@ -140,6 +140,7 @@ import { ensureSshSource } from "../data/ssh-host-catalog"; import { addSshTunnelStatusSource, defaultLocalStatusSourceUrl, + emptyStatusSourceCatalog, loadStatusSourceCatalog, localStatusSource, activeStatusSourceForUrl, @@ -2823,9 +2824,14 @@ export function DashboardPage() { preferredGoalRef.current = search.goalId; const [payload, setPayload] = useState(exampleStatusPayload); const [source, setSource] = useState({ kind: "example", label: "bundled example" }); - const [statusSourceCatalog, setStatusSourceCatalog] = useState(() => - loadStatusSourceCatalog(window.localStorage, window.location.href) - ); + const [statusSourceCatalog, setStatusSourceCatalog] = useState(() => { + try { + return loadStatusSourceCatalog(window.localStorage, window.location.href); + } catch { + // Browsers may reject access to the storage object itself. + return emptyStatusSourceCatalog(); + } + }); const [statusUrl, setStatusUrl] = useState(search.statusUrl); const [loadError, setLoadError] = useState(null); const [isLoading, setIsLoading] = useState(false); diff --git a/examples/status-source-switch-browser-smoke.mjs b/examples/status-source-switch-browser-smoke.mjs index 7e83a54756..2189fe8c7c 100644 --- a/examples/status-source-switch-browser-smoke.mjs +++ b/examples/status-source-switch-browser-smoke.mjs @@ -71,6 +71,46 @@ async function main() { const appUrl = `http://127.0.0.1:${port}/${packaged ? "chat/" : ""}`; await waitForHttp(appUrl); browser = await launchBrowser(chromium); + for (const storageFailure of ["getter", "methods"]) { + const isolated = await browser.newPage({ viewport: { width: 1512, height: 982 } }); + const errors = []; + isolated.on("pageerror", (error) => errors.push(error.message)); + await isolated.addInitScript((failure) => { + const deny = () => { throw new DOMException("Storage unavailable", "SecurityError"); }; + if (failure === "getter") { + Object.defineProperty(window, "localStorage", { get: deny }); + } else { + Storage.prototype.getItem = deny; + Storage.prototype.setItem = deny; + } + }, storageFailure); + await isolated.route(`http://127.0.0.1:${port}/ssh-hosts`, (route) => route.fulfill({ + json: { ok: true, schema_version: "ssh_host_catalog_v0", hosts: [] }, + })); + await isolated.route(`http://127.0.0.1:${port}/status.json*`, (route) => route.fulfill({ + json: statusPayload("local-goal", "Local Goal Only"), + })); + await isolated.route("http://127.0.0.1:8976/status.json*", (route) => route.fulfill({ + json: statusPayload("remote-b-goal", "Remote B Goal Only"), + })); + await isolated.goto(appUrl, { waitUntil: "networkidle" }); + await isolated.getByText("Local Goal Only", { exact: true }).first().waitFor({ timeout: 10_000 }); + const select = isolated.getByRole("combobox", { name: "选择控制面来源" }); + if (await selectedSourceLabel(select) !== "本机") throw new Error(`${storageFailure}: missing local source fallback`); + await isolated.getByRole("button", { name: "添加 SSH 隧道来源" }).click(); + await isolated.getByRole("tab", { name: "手动 URL" }).click(); + await isolated.getByLabel("名称").fill("Session Remote"); + await isolated.getByLabel("本地转发 URL").fill("http://127.0.0.1:8976/status.json"); + await isolated.getByRole("button", { name: "添加只读来源" }).click(); + await isolated.getByText("Remote B Goal Only", { exact: true }).first().waitFor({ timeout: 10_000 }); + await isolated.locator(".personal-read-only-source", { hasText: "Session Remote" }).waitFor(); + await selectSource(isolated, select, "本机"); + await isolated.getByText("Local Goal Only", { exact: true }).first().waitFor({ timeout: 10_000 }); + await isolated.reload({ waitUntil: "networkidle" }); + await isolated.getByText("Local Goal Only", { exact: true }).first().waitFor({ timeout: 10_000 }); + if (errors.length) throw new Error(`${storageFailure}: uncaught page errors: ${errors.join("; ")}`); + await isolated.close(); + } const page = await browser.newPage({ viewport: { width: 1512, height: 982 } }); const state = { ensureGates: new Map(), diff --git a/loopx/web/chat/assets/index-D8I1vMCP.js b/loopx/web/chat/assets/index-D8I1vMCP.js new file mode 100644 index 0000000000..ed4698b3bc --- /dev/null +++ b/loopx/web/chat/assets/index-D8I1vMCP.js @@ -0,0 +1,129 @@ +var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},c=(n,r,o)=>(o=n==null?{}:e(i(n)),s(r||!n||!n.__esModule||!a.call(n,`default`)?t(o,`default`,{value:n,enumerable:!0}):o,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),t.credentials=e.crossOrigin===`use-credentials`?`include`:e.crossOrigin===`anonymous`?`omit`:`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var l=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m){if(n(c)!==null)m=!0,S||(S=!0,O());else{var t=n(l);t!==null&&A(x,t.startTime-e)}}}var S=!1,C=-1,w=5,T=-1;function E(){return g?!0:!(e.unstable_now()-Tt&&E());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&A(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}}}finally{i?O():S=!1}}}var O;if(typeof y==`function`)O=function(){y(D)};else if(typeof MessageChannel<`u`){var k=new MessageChannel,ee=k.port2;k.port1.onmessage=D,O=function(){ee.postMessage(null)}}else O=function(){_(D,0)};function A(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,A(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,O()))),r},e.unstable_shouldYield=E,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),u=o(((e,t)=>{t.exports=l()})),d=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function D(e,t){return E(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var ee=/\/+/g;function A(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function j(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function te(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,te(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+A(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(ee,`$&/`)+`/`),te(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=D(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(ee,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u{t.exports=d()})),p=o((e=>{var t=f();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=p()})),h=o((e=>{var t=u(),n=f(),r=m();function i(e){var t=`https://react.dev/errors/`+e;if(1oe||(e.current=ae[oe],ae[oe]=null,oe--)}function I(e,t){oe++,ae[oe]=e.current,e.current=t}var se=P(null),ce=P(null),le=P(null),ue=P(null);function de(e,t){switch(I(le,t),I(ce,e),I(se,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Wd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Wd(t),e=Gd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}F(se),I(se,e)}function fe(){F(se),F(ce),F(le)}function pe(e){e.memoizedState!==null&&I(ue,e);var t=se.current,n=Gd(t,e.type);t!==n&&(I(ce,e),I(se,n))}function me(e){ce.current===e&&(F(se),F(ce)),ue.current===e&&(F(ue),tp._currentValue=ie)}var he,ge;function _e(e){if(he===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);he=t&&t[1]||``,ge=-1)`:-1i||c[r]!==l[i]){var u=` +`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{ve=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?_e(n):``}function be(e,t){switch(e.tag){case 26:case 27:case 5:return _e(e.type);case 16:return _e(`Lazy`);case 13:return e.child!==t&&t!==null?_e(`Suspense Fallback`):_e(`Suspense`);case 19:return _e(`SuspenseList`);case 0:case 15:return ye(e.type,!1);case 11:return ye(e.type.render,!1);case 1:return ye(e.type,!0);case 31:return _e(`Activity`);default:return``}}function xe(e){try{var t=``,n=null;do t+=be(e,n),n=e,e=e.return;while(e);return t}catch(e){return` +Error generating stack: `+e.message+` +`+e.stack}}var Se=Object.prototype.hasOwnProperty,Ce=t.unstable_scheduleCallback,we=t.unstable_cancelCallback,Te=t.unstable_shouldYield,Ee=t.unstable_requestPaint,De=t.unstable_now,L=t.unstable_getCurrentPriorityLevel,Oe=t.unstable_ImmediatePriority,ke=t.unstable_UserBlockingPriority,Ae=t.unstable_NormalPriority,je=t.unstable_LowPriority,Me=t.unstable_IdlePriority,Ne=t.log,R=t.unstable_setDisableYieldValue,z=null,Pe=null;function Fe(e){if(typeof Ne==`function`&&R(e),Pe&&typeof Pe.setStrictMode==`function`)try{Pe.setStrictMode(z,e)}catch{}}var Ie=Math.clz32?Math.clz32:Re,B=Math.log,Le=Math.LN2;function Re(e){return e>>>=0,e===0?32:31-(B(e)/Le|0)|0}var V=256,ze=262144,Be=4194304;function Ve(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function He(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=Ve(n))):i=Ve(o):i=Ve(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=Ve(n))):i=Ve(o)):i=Ve(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function Ue(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function We(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function Ge(){var e=Be;return Be<<=1,!(Be&62914560)&&(Be=4194304),e}function Ke(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function qe(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Je(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),sn=!1;if(on)try{var cn={};Object.defineProperty(cn,"passive",{get:function(){sn=!0}}),window.addEventListener(`test`,cn,cn),window.removeEventListener(`test`,cn,cn)}catch{sn=!1}var ln=null,un=null,dn=null;function fn(){if(dn)return dn;var e,t=un,n=t.length,r,i=`value`in ln?ln.value:ln.textContent,a=i.length;for(e=0;e=Wn),qn=` `,Jn=!1;function Yn(e,t){switch(e){case`keyup`:return Hn.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function Xn(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var Zn=!1;function Qn(e,t){switch(e){case`compositionend`:return Xn(t);case`keypress`:return t.which===32?(Jn=!0,qn):null;case`textInput`:return e=t.data,e===qn&&Jn?null:e;default:return null}}function $n(e,t){if(Zn)return e===`compositionend`||!Un&&Yn(e,t)?(e=fn(),dn=un=ln=null,Zn=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=xr(n)}}function Cr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?Cr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function wr(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=Nt(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=Nt(e.document)}return t}function Tr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var Er=on&&`documentMode`in document&&11>=document.documentMode,Dr=null,Or=null,kr=null,Ar=!1;function jr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Ar||Dr==null||Dr!==Nt(r)||(r=Dr,`selectionStart`in r&&Tr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),kr&&br(kr,r)||(kr=r,r=Od(Or,`onSelect`),0>=o,i-=o,Ci=1<<32-Ie(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),Mi&&Ti(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),Mi&&Ti(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return Mi&&Ti(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),Mi&&Ti(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===y&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case _:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===y){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===O&&wa(l)===r.type){n(e,r.sibling),c=a(r,o.props),ja(c,o),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}o.type===y?(c=ui(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=li(o.type,o.key,o.props,null,e.mode,c),ja(c,o),c.return=e,e=c)}return s(e);case v:a:{for(l=o.key;r!==null;){if(r.key===l){if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}n(e,r);break}t(e,r),r=r.sibling}c=pi(o,e.mode,c),c.return=e,e=c}return s(e);case O:return o=wa(o),b(e,r,o,c)}if(re(o))return h(e,r,o,c);if(j(o)){if(l=j(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,Aa(o),c);if(o.$$typeof===C)return b(e,r,$i(e,o),c);Ma(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=di(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{ka=0;var i=b(e,t,n,r);return Oa=null,i}catch(t){if(t===ya||t===xa)throw t;var a=ai(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var Pa=Na(!0),Fa=Na(!1),Ia=!1;function La(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ra(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function za(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Ba(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,Vl&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=ni(e),ti(e,null,n),t}return Qr(e,r,t,n),ni(e)}function Va(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Xe(e,n)}}function Ha(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var Ua=!1;function Wa(){if(Ua){var e=ua;if(e!==null)throw e}}function Ga(e,t,n,r){Ua=!1;var i=e.updateQueue;Ia=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(Wl&f)===f:(r&f)===f){f!==0&&f===la&&(Ua=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var m=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(m=g.payload,typeof m==`function`){d=m.call(_,d,f);break a}d=m;break a;case 3:m.flags=m.flags&-65537|128;case 0:if(m=g.payload,f=typeof m==`function`?m.call(_,d,f):m,f==null)break a;d=h({},d,f);break a;case 2:Ia=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),Ql|=o,e.lanes=o,e.memoizedState=d}}function Ka(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function qa(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=M.T,s={};M.T=s,Ps(e,!1,t,n);try{var c=i(),l=M.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Ns(e,t,pa(c,r),bu(e)):Ns(e,t,r,bu(e))}catch(n){Ns(e,t,{then:function(){},status:`rejected`,reason:n},bu())}finally{N.p=a,o!==null&&s.types!==null&&(o.types=s.types),M.T=o}}function Cs(){}function ws(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=Ts(e).queue;Ss(e,a,t,ie,n===null?Cs:function(){return Es(e),n(r)})}function Ts(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ie,baseState:ie,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Fo,lastRenderedState:ie},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:Fo,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function Es(e){var t=Ts(e);t.next===null&&(t=e.alternate.memoizedState),Ns(e,t.next.queue,{},bu())}function Ds(){return H(tp)}function Os(){return Ao().memoizedState}function ks(){return Ao().memoizedState}function As(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=bu();e=za(n);var r=Ba(t,e,n);r!==null&&(Su(r,t,n),Va(r,t,n)),t={cache:aa()},e.payload=t;return}t=t.return}}function js(e,t,n){var r=bu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},Fs(e)?Is(t,n):(n=$r(e,t,n,r),n!==null&&(Su(n,e,r),Ls(n,t,r)))}function Ms(e,t,n){Ns(e,t,n,bu())}function Ns(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(Fs(e))Is(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,yr(s,o))return Qr(e,t,i,0),Hl===null&&Zr(),!1}catch{}if(n=$r(e,t,i,r),n!==null)return Su(n,e,r),Ls(n,t,r),!0}return!1}function Ps(e,t,n,r){if(r={lane:2,revertLane:md(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},Fs(e)){if(t)throw Error(i(479))}else t=$r(e,n,r,2),t!==null&&Su(t,e,2)}function Fs(e){var t=e.alternate;return e===lo||t!==null&&t===lo}function Is(e,t){mo=po=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function Ls(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,Xe(e,n)}}var Rs={readContext:H,use:No,useCallback:bo,useContext:bo,useEffect:bo,useImperativeHandle:bo,useLayoutEffect:bo,useInsertionEffect:bo,useMemo:bo,useReducer:bo,useRef:bo,useState:bo,useDebugValue:bo,useDeferredValue:bo,useTransition:bo,useSyncExternalStore:bo,useId:bo,useHostTransitionStatus:bo,useFormState:bo,useActionState:bo,useOptimistic:bo,useMemoCache:bo,useCacheRefresh:bo};Rs.useEffectEvent=bo;var zs={readContext:H,use:No,useCallback:function(e,t){return ko().memoizedState=[e,t===void 0?null:t],e},useContext:H,useEffect:ls,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),ss(4194308,4,hs.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ss(4194308,4,e,t)},useInsertionEffect:function(e,t){ss(4,2,e,t)},useMemo:function(e,t){var n=ko();t=t===void 0?null:t;var r=e();if(ho){Fe(!0);try{e()}finally{Fe(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=ko();if(n!==void 0){var i=n(t);if(ho){Fe(!0);try{n(t)}finally{Fe(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=js.bind(null,lo,e),[r.memoizedState,e]},useRef:function(e){var t=ko();return e={current:e},t.memoizedState=e},useState:function(e){e=Go(e);var t=e.queue,n=Ms.bind(null,lo,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:_s,useDeferredValue:function(e,t){return bs(ko(),e,t)},useTransition:function(){var e=Go(!1);return e=Ss.bind(null,lo,e.queue,!0,!1),ko().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=lo,a=ko();if(Mi){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),Hl===null)throw Error(i(349));Wl&127||Bo(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,ls(Ho.bind(null,r,o,e),[e]),r.flags|=2048,as(9,{destroy:void 0},Vo.bind(null,r,o,n,t),null),n},useId:function(){var e=ko(),t=Hl.identifierPrefix;if(Mi){var n=wi,r=Ci;n=(r&~(1<<32-Ie(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=go++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[rt]=t,o[it]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Ld(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Nc(t)}}return Rc(t),Pc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Nc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=le.current,zi(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Ai,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[rt]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Pd(e.nodeValue,n)),e||Ii(t,!0)}else e=Ud(e).createTextNode(r),e[rt]=t,t.stateNode=e}return Rc(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=zi(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[rt]=t}else Bi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Rc(t),e=!1}else n=Vi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(ao(t),t):(ao(t),null);if(t.flags&128)throw Error(i(558))}return Rc(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=zi(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[rt]=t}else Bi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Rc(t),a=!1}else a=Vi(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(ao(t),t):(ao(t),null)}return ao(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Ic(t,t.updateQueue),Rc(t),null);case 4:return fe(),e===null&&wd(t.stateNode.containerInfo),Rc(t),null;case 10:return qi(t.type),Rc(t),null;case 19:if(F(oo),r=t.memoizedState,r===null)return Rc(t),null;if(a=!!(t.flags&128),o=r.rendering,o===null){if(a)Lc(r,!1);else{if(Zl!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=so(e),o!==null){for(t.flags|=128,Lc(r,!1),e=o.updateQueue,t.updateQueue=e,Ic(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)ci(n,e),n=n.sibling;return I(oo,oo.current&1|2),Mi&&Ti(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&De()>cu&&(t.flags|=128,a=!0,Lc(r,!1),t.lanes=4194304)}}else{if(!a){if(e=so(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Ic(t,e),Lc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!Mi)return Rc(t),null}else 2*De()-r.renderingStartTime>cu&&n!==536870912&&(t.flags|=128,a=!0,Lc(r,!1),t.lanes=4194304)}r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(Rc(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=De(),e.sibling=null,n=oo.current,I(oo,a?n&1|2:n&1),Mi&&Ti(t,r.treeForkCount),e);case 22:case 23:return ao(t),Qa(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(Rc(t),t.subtreeFlags&6&&(t.flags|=8192)):Rc(t),n=t.updateQueue,n!==null&&Ic(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&F(ha),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),qi(ia),Rc(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Bc(e,t){switch(Oi(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return qi(ia),fe(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return me(t),null;case 31:if(t.memoizedState!==null){if(ao(t),t.alternate===null)throw Error(i(340));Bi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(ao(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Bi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return F(oo),null;case 4:return fe(),null;case 10:return qi(t.type),null;case 22:case 23:return ao(t),Qa(),e!==null&&F(ha),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return qi(ia),null;case 25:return null;default:return null}}function Vc(e,t){switch(Oi(t),t.tag){case 3:qi(ia),fe();break;case 26:case 27:case 5:me(t);break;case 4:fe();break;case 31:t.memoizedState!==null&&ao(t);break;case 13:ao(t);break;case 19:F(oo);break;case 10:qi(t.type);break;case 22:case 23:ao(t),Qa(),e!==null&&F(ha);break;case 24:qi(ia)}}function Hc(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Zu(t,t.return,e)}}function Uc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Zu(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Zu(t,t.return,e)}}function Wc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{qa(t,n)}catch(t){Zu(e,e.return,t)}}}function Gc(e,t,n){n.props=Ks(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Zu(e,t,n)}}function Kc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Zu(e,t,n)}}function qc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null){if(typeof r==`function`)try{r()}catch(n){Zu(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Zu(e,t,n)}else n.current=null}}function Jc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){Zu(e,e.return,t)}}function Yc(e,t,n){try{var r=e.stateNode;Rd(r,e.type,n,t),r[it]=t}catch(t){Zu(e,e.return,t)}}function Xc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&ef(e.type)||e.tag===4}function Zc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Xc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&ef(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Qc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=Xt));else if(r!==4&&(r===27&&ef(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Qc(e,t,n),e=e.sibling;e!==null;)Qc(e,t,n),e=e.sibling}function $c(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&ef(e.type)&&(n=e.stateNode),e=e.child,e!==null))for($c(e,t,n),e=e.sibling;e!==null;)$c(e,t,n),e=e.sibling}function el(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Ld(t,r,n),t[rt]=e,t[it]=n}catch(t){Zu(e,e.return,t)}}var tl=!1,nl=!1,rl=!1,il=typeof WeakSet==`function`?WeakSet:Set,al=null;function ol(e,t){if(e=e.containerInfo,Vd=up,e=wr(e),Tr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(Hd={focusedElem:e,selectionRange:n},up=!1,al=t;al!==null;)if(t=al,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,al=e;else for(;al!==null;){switch(t=al,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Ld(o,r,n),o[rt]=e,gt(o),r=o;break a;case`link`:var s=Wf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=Sr(s,h),v=Sr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,M.T=null,n=gu,gu=null;var o=fu,s=mu;if(du=0,pu=fu=null,mu=0,Vl&6)throw Error(i(331));var c=Vl;if(Vl|=4,Il(o.current),Ol(o,o.current,s,n),Vl=c,cd(0,!1),Pe&&typeof Pe.onPostCommitFiberRoot==`function`)try{Pe.onPostCommitFiberRoot(z,o)}catch{}return!0}finally{N.p=a,M.T=r,qu(e,t)}}function Xu(e,t,n){t=hi(n,t),t=Qs(e.stateNode,t,2),e=Ba(e,t,2),e!==null&&(qe(e,2),q(e))}function Zu(e,t,n){if(e.tag===3)Xu(e,e,n);else for(;t!==null;){if(t.tag===3){Xu(t,e,n);break}if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(uu===null||!uu.has(r))){e=hi(n,e),n=$s(2),r=Ba(t,n,2),r!==null&&(ec(n,r,t,e),qe(r,2),q(r));break}}t=t.return}}function G(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Bl;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Yl=!0,i.add(n),e=Qu.bind(null,e,t,n),t.then(e,e))}function Qu(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Hl===e&&(Wl&n)===n&&(Zl===4||Zl===3&&(Wl&62914560)===Wl&&300>De()-ou?!(Vl&2)&&ku(e,0):eu|=n,nu===Wl&&(nu=0)),q(e)}function $u(e,t){t===0&&(t=Ge()),e=ei(e,t),e!==null&&(qe(e,t),q(e))}function ed(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),$u(e,n)}function K(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),$u(e,n)}function td(e,t){return Ce(e,t)}var nd=null,rd=null,id=!1,ad=!1,od=!1,sd=0;function q(e){e!==rd&&e.next===null&&(rd===null?nd=rd=e:rd=rd.next=e),ad=!0,id||(id=!0,pd())}function cd(e,t){if(!od&&ad){od=!0;do for(var n=!1,r=nd;r!==null;){if(!t){if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-Ie(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,fd(r,a))}else a=Wl,a=He(r,r===Hl?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||Ue(r,a)||(n=!0,fd(r,a))}r=r.next}while(n);od=!1}}function J(){ld()}function ld(){ad=id=!1;var e=0;sd!==0&&Jd()&&(e=sd);for(var t=De(),n=null,r=nd;r!==null;){var i=r.next,a=ud(r,t);a===0?(r.next=null,n===null?nd=i:n.next=i,i===null&&(rd=n)):(n=r,(e!==0||a&3)&&(ad=!0)),r=i}du!==0&&du!==5||cd(e,!1),sd!==0&&(sd=0)}function ud(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&zd(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function wf(e,t,n){var r=Cf;if(r&&typeof t==`string`&&t){var i=Ft(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),vf.has(i)||(vf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Ld(t,`link`,e),gt(t),r.head.appendChild(t)))}}function Tf(e){bf.D(e),wf(`dns-prefetch`,e,null)}function Ef(e,t){bf.C(e,t),wf(`preconnect`,e,t)}function Df(e,t,n){bf.L(e,t,n);var r=Cf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Ft(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Ft(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Ft(n.imageSizes)+`"]`)):i+=`[href="`+Ft(e)+`"]`;var a=i;switch(t){case`style`:a=Nf(e);break;case`script`:a=Lf(e)}_f.has(a)||(e=h({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),_f.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Pf(a))||t===`script`&&r.querySelector(Rf(a))||(t=r.createElement(`link`),Ld(t,`link`,e),gt(t),r.head.appendChild(t)))}}function Of(e,t){bf.m(e,t);var n=Cf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Ft(r)+`"][href="`+Ft(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Lf(e)}if(!_f.has(a)&&(e=h({rel:`modulepreload`,href:e},t),_f.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(Rf(a)))return}r=n.createElement(`link`),Ld(r,`link`,e),gt(r),n.head.appendChild(r)}}}function kf(e,t,n){bf.S(e,t,n);var r=Cf;if(r&&e){var i=ht(r).hoistableStyles,a=Nf(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Pf(a)))s.loading=5;else{e=h({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=_f.get(a))&&Vf(e,n);var c=o=r.createElement(`link`);gt(c),Ld(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Bf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function Af(e,t){bf.X(e,t);var n=Cf;if(n&&e){var r=ht(n).hoistableScripts,i=Lf(e),a=r.get(i);a||(a=n.querySelector(Rf(i)),a||(e=h({src:e,async:!0},t),(t=_f.get(i))&&Hf(e,t),a=n.createElement(`script`),gt(a),Ld(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function jf(e,t){bf.M(e,t);var n=Cf;if(n&&e){var r=ht(n).hoistableScripts,i=Lf(e),a=r.get(i);a||(a=n.querySelector(Rf(i)),a||(e=h({src:e,async:!0,type:`module`},t),(t=_f.get(i))&&Hf(e,t),a=n.createElement(`script`),gt(a),Ld(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Mf(e,t,n,r){var a=(a=le.current)?yf(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Nf(n.href),n=ht(a).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Nf(n.href);var o=ht(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(Pf(e)))&&!o._p&&(s.instance=o,s.state.loading=5),_f.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},_f.set(e,n),o||If(a,e,n,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Lf(n),n=ht(a).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Nf(e){return`href="`+Ft(e)+`"`}function Pf(e){return`link[rel="stylesheet"][`+e+`]`}function Ff(e){return h({},e,{"data-precedence":e.precedence,precedence:null})}function If(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Ld(t,`link`,n),gt(t),e.head.appendChild(t))}function Lf(e){return`[src="`+Ft(e)+`"]`}function Rf(e){return`script[async]`+e}function zf(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Ft(n.href)+`"]`);if(r)return t.instance=r,gt(r),r;var a=h({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),gt(r),Ld(r,`style`,a),Bf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Nf(n.href);var o=e.querySelector(Pf(a));if(o)return t.state.loading|=4,t.instance=o,gt(o),o;r=Ff(n),(a=_f.get(a))&&Vf(r,a),o=(e.ownerDocument||e).createElement(`link`),gt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Ld(o,`link`,r),t.state.loading|=4,Bf(o,n.precedence,e),t.instance=o;case`script`:return o=Lf(n.src),(a=e.querySelector(Rf(o)))?(t.instance=a,gt(a),a):(r=n,(a=_f.get(o))&&(r=h({},n),Hf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),gt(a),Ld(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Bf(r,n.precedence,e));return t.instance}function Bf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function Kf(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function qf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Jf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Nf(r.href),a=t.querySelector(Pf(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Zf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,gt(a);return}a=t.ownerDocument||t,r=Ff(r),(i=_f.get(i))&&Vf(r,i),a=a.createElement(`link`),gt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Ld(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=Zf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Yf=0;function Xf(e,t){return e.stylesheets&&e.count===0&&$f(e,e.stylesheets),0Yf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Zf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)$f(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var Qf=null;function $f(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,Qf=new Map,t.forEach(ep,e),Qf=null,Zf.call(e))}function ep(e,t){if(!(t.state.loading&4)){var n=Qf.get(e);if(n)var r=n.get(null);else{n=new Map,Qf.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=h()})),_=class{constructor(){this.listeners=new Set,this.subscribe=this.subscribe.bind(this)}subscribe(e){return this.listeners.add(e),this.onSubscribe(),()=>{this.listeners.delete(e),this.onUnsubscribe()}}hasListeners(){return this.listeners.size>0}onSubscribe(){}onUnsubscribe(){}},v=new class extends _{#e;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e();return window.addEventListener(`visibilitychange`,t,!1),()=>{window.removeEventListener(`visibilitychange`,t)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(e=>{typeof e==`boolean`?this.setFocused(e):this.onFocus()})}setFocused(e){this.#e!==e&&(this.#e=e,this.onFocus())}onFocus(){let e=this.isFocused();this.listeners.forEach(t=>{t(e)})}isFocused(){return typeof this.#e==`boolean`?this.#e:globalThis.document?.visibilityState!==`hidden`}},y={setTimeout:(e,t)=>setTimeout(e,t),clearTimeout:e=>clearTimeout(e),setInterval:(e,t)=>setInterval(e,t),clearInterval:e=>clearInterval(e)},b=new class{#e=y;setTimeoutProvider(e){this.#e=e}setTimeout(e,t){return this.#e.setTimeout(e,t)}clearTimeout(e){this.#e.clearTimeout(e)}setInterval(e,t){return this.#e.setInterval(e,t)}clearInterval(e){this.#e.clearInterval(e)}};function x(e){setTimeout(e,0)}var S=typeof window>`u`||`Deno`in globalThis;function C(){}function w(e,t){return typeof e==`function`?e(t):e}function T(e){return typeof e==`number`&&e>=0&&e!==1/0}function E(e,t){return Math.max(e+(t||0)-Date.now(),0)}function D(e,t){return typeof e==`function`?e(t):e}function O(e,t){return typeof e==`function`?e(t):e}function k(e,t){let{type:n=`all`,exact:r,fetchStatus:i,predicate:a,queryKey:o,stale:s}=e;if(o){if(r){if(t.queryHash!==A(o,t.options))return!1}else if(!te(t.queryKey,o))return!1}if(n!==`all`){let e=t.isActive();if(n===`active`&&!e||n===`inactive`&&e)return!1}return!(typeof s==`boolean`&&t.isStale()!==s||i&&i!==t.state.fetchStatus||a&&!a(t))}function ee(e,t){let{exact:n,status:r,predicate:i,mutationKey:a}=e;if(a){if(!t.options.mutationKey)return!1;if(n){if(j(t.options.mutationKey)!==j(a))return!1}else if(!te(t.options.mutationKey,a))return!1}return!(r&&t.state.status!==r||i&&!i(t))}function A(e,t){return(t?.queryKeyHashFn||j)(e)}function j(e){return JSON.stringify(e,(e,t)=>N(t)?Object.keys(t).sort().reduce((e,n)=>(e[n]=t[n],e),{}):t)}function te(e,t){return e===t?!0:typeof e==typeof t&&e&&t&&typeof e==`object`&&typeof t==`object`?Object.keys(t).every(n=>te(e[n],t[n])):!1}var ne=Object.prototype.hasOwnProperty;function re(e,t,n=0){if(e===t)return e;if(n>500)return t;let r=M(e)&&M(t);if(!r&&!(N(e)&&N(t)))return t;let i=(r?e:Object.keys(e)).length,a=r?t:Object.keys(t),o=a.length,s=r?Array(o):{},c=0;for(let l=0;l{b.setTimeout(t,e)})}function oe(e,t,n){return typeof n.structuralSharing==`function`?n.structuralSharing(e,t):n.structuralSharing===!1?t:re(e,t)}function P(e,t,n=0){let r=[...e,t];return n&&r.length>n?r.slice(1):r}function F(e,t,n=0){let r=[t,...e];return n&&r.length>n?r.slice(0,-1):r}var I=Symbol();function se(e,t){return!e.queryFn&&t?.initialPromise?()=>t.initialPromise:!e.queryFn||e.queryFn===I?()=>Promise.reject(Error(`Missing queryFn: '${e.queryHash}'`)):e.queryFn}function ce(e,t,n){let r=!1,i;return Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(i??=t(),r?i:(r=!0,i.aborted?n():i.addEventListener(`abort`,n,{once:!0}),i))}),e}var le=(()=>{let e=()=>S;return{isServer(){return e()},setIsServer(t){e=t}}})();function ue(){let e,t,n=new Promise((n,r)=>{e=n,t=r});n.status=`pending`,n.catch(()=>{});function r(e){Object.assign(n,e),delete n.resolve,delete n.reject}return n.resolve=t=>{r({status:`fulfilled`,value:t}),e(t)},n.reject=e=>{r({status:`rejected`,reason:e}),t(e)},n}var de=x;function fe(){let e=[],t=0,n=e=>{e()},r=e=>{e()},i=de,a=r=>{t?e.push(r):i(()=>{n(r)})},o=()=>{let t=e;e=[],t.length&&i(()=>{r(()=>{t.forEach(e=>{n(e)})})})};return{batch:e=>{let n;t++;try{n=e()}finally{t--,t||o()}return n},batchCalls:e=>(...t)=>{a(()=>{e(...t)})},schedule:a,setNotifyFunction:e=>{n=e},setBatchNotifyFunction:e=>{r=e},setScheduler:e=>{i=e}}}var pe=fe(),me=new class extends _{#e=!0;#t;#n;constructor(){super(),this.#n=e=>{if(typeof window<`u`&&window.addEventListener){let t=()=>e(!0),n=()=>e(!1);return window.addEventListener(`online`,t,!1),window.addEventListener(`offline`,n,!1),()=>{window.removeEventListener(`online`,t),window.removeEventListener(`offline`,n)}}}}onSubscribe(){this.#t||this.setEventListener(this.#n)}onUnsubscribe(){this.hasListeners()||(this.#t?.(),this.#t=void 0)}setEventListener(e){this.#n=e,this.#t?.(),this.#t=e(this.setOnline.bind(this))}setOnline(e){this.#e!==e&&(this.#e=e,this.listeners.forEach(t=>{t(e)}))}isOnline(){return this.#e}};function he(e){return Math.min(1e3*2**e,3e4)}function ge(e){return(e??`online`)!==`online`||me.isOnline()}var _e=class extends Error{constructor(e){super(`CancelledError`),this.revert=e?.revert,this.silent=e?.silent}};function ve(e){let t=!1,n=0,r,i=ue(),a=()=>i.status!==`pending`,o=t=>{if(!a()){let n=new _e(t);f(n),e.onCancel?.(n)}},s=()=>{t=!0},c=()=>{t=!1},l=()=>v.isFocused()&&(e.networkMode===`always`||me.isOnline())&&e.canRun(),u=()=>ge(e.networkMode)&&e.canRun(),d=e=>{a()||(r?.(),i.resolve(e))},f=e=>{a()||(r?.(),i.reject(e))},p=()=>new Promise(t=>{r=e=>{(a()||l())&&t(e)},e.onPause?.()}).then(()=>{r=void 0,a()||e.onContinue?.()}),m=()=>{if(a())return;let r,i=n===0?e.initialPromise:void 0;try{r=i??e.fn()}catch(e){r=Promise.reject(e)}Promise.resolve(r).then(d).catch(r=>{if(a())return;let i=e.retry??(le.isServer()?0:3),o=e.retryDelay??he,s=typeof o==`function`?o(n,r):o,c=i===!0||typeof i==`number`&&nl()?void 0:p()).then(()=>{t?f(r):m()})})};return{promise:i,status:()=>i.status,cancel:o,continue:()=>(r?.(),i),cancelRetry:s,continueRetry:c,canStart:u,start:()=>(u()?m():p().then(m),i)}}var ye=class{#e;destroy(){this.clearGcTimeout()}scheduleGc(){this.clearGcTimeout(),T(this.gcTime)&&(this.#e=b.setTimeout(()=>{this.optionalRemove()},this.gcTime))}updateGcTime(e){this.gcTime=Math.max(this.gcTime||0,e??(le.isServer()?1/0:3e5))}clearGcTimeout(){this.#e!==void 0&&(b.clearTimeout(this.#e),this.#e=void 0)}};function be(e){return{onFetch:(t,n)=>{let r=t.options,i=t.fetchOptions?.meta?.fetchMore?.direction,a=t.state.data?.pages||[],o=t.state.data?.pageParams||[],s={pages:[],pageParams:[]},c=0,l=async()=>{let n=!1,l=e=>{ce(e,()=>t.signal,()=>n=!0)},u=se(t.options,t.fetchOptions),d=async(e,r,i)=>{if(n)return Promise.reject(t.signal.reason);if(r==null&&e.pages.length)return Promise.resolve(e);let a=(()=>{let e={client:t.client,queryKey:t.queryKey,pageParam:r,direction:i?`backward`:`forward`,meta:t.options.meta};return l(e),e})(),o=await u(a),{maxPages:s}=t.options,c=i?F:P;return{pages:c(e.pages,o,s),pageParams:c(e.pageParams,r,s)}};if(i&&a.length){let e=i===`backward`,t=e?Se:xe,n={pages:a,pageParams:o};s=await d(n,t(r,n),e)}else{let t=e??a.length;do{let e=c===0?o[0]??r.initialPageParam:xe(r,s);if(c>0&&e==null)break;s=await d(s,e),c++}while(ct.options.persister?.(l,{client:t.client,queryKey:t.queryKey,meta:t.options.meta,signal:t.signal},n):l}}}function xe(e,{pages:t,pageParams:n}){let r=t.length-1;return t.length>0?e.getNextPageParam(t[r],t,n[r],n):void 0}function Se(e,{pages:t,pageParams:n}){return t.length>0?e.getPreviousPageParam?.(t[0],t,n[0],n):void 0}var Ce=class extends ye{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e){super(),this.#s=!1,this.#o=e.defaultOptions,this.setOptions(e.options),this.observers=[],this.#i=e.client,this.#r=this.#i.getQueryCache(),this.queryKey=e.queryKey,this.queryHash=e.queryHash,this.#t=Ee(this.options),this.state=e.state??this.#t,this.scheduleGc()}get meta(){return this.options.meta}get queryType(){return this.#e}get promise(){return this.#a?.promise}setOptions(e){if(this.options={...this.#o,...e},e?._type&&(this.#e=e._type),this.updateGcTime(this.options.gcTime),this.state&&this.state.data===void 0){let e=Ee(this.options);e.data!==void 0&&(this.setState(Te(e.data,e.dataUpdatedAt)),this.#t=e)}}optionalRemove(){!this.observers.length&&this.state.fetchStatus===`idle`&&this.#r.remove(this)}setData(e,t){let n=oe(this.state.data,e,this.options);return this.#l({data:n,type:`success`,dataUpdatedAt:t?.updatedAt,manual:t?.manual}),n}setState(e){this.#l({type:`setState`,state:e})}cancel(e){let t=this.#a?.promise;return this.#a?.cancel(e),t?t.then(C).catch(C):Promise.resolve()}destroy(){super.destroy(),this.cancel({silent:!0})}get resetState(){return this.#t}reset(){this.destroy(),this.setState(this.resetState)}isActive(){return this.observers.some(e=>O(e.options.enabled,this)!==!1)}isDisabled(){return this.getObserversCount()>0?!this.isActive():this.options.queryFn===I||!this.isFetched()}isFetched(){return this.state.dataUpdateCount+this.state.errorUpdateCount>0}isStatic(){return this.getObserversCount()>0&&this.observers.some(e=>D(e.options.staleTime,this)===`static`)}isStale(){return this.getObserversCount()>0?this.observers.some(e=>e.getCurrentResult().isStale):this.state.data===void 0||this.state.isInvalidated}isStaleByTime(e=0){return this.state.data===void 0?!0:e===`static`?!1:this.state.isInvalidated?!0:!E(this.state.dataUpdatedAt,e)}onFocus(){this.observers.find(e=>e.shouldFetchOnWindowFocus())?.refetch({cancelRefetch:!1}),this.#a?.continue()}onOnline(){this.observers.find(e=>e.shouldFetchOnReconnect())?.refetch({cancelRefetch:!1}),this.#a?.continue()}addObserver(e){this.observers.includes(e)||(this.observers.push(e),this.clearGcTimeout(),this.#r.notify({type:`observerAdded`,query:this,observer:e}))}removeObserver(e){this.observers.includes(e)&&(this.observers=this.observers.filter(t=>t!==e),this.observers.length||(this.#a&&(this.#s||this.#c()?this.#a.cancel({revert:!0}):this.#a.cancelRetry()),this.scheduleGc()),this.#r.notify({type:`observerRemoved`,query:this,observer:e}))}getObserversCount(){return this.observers.length}#c(){return this.state.fetchStatus===`paused`&&this.state.status===`pending`}invalidate(){this.state.isInvalidated||this.#l({type:`invalidate`})}async fetch(e,t){if(this.state.fetchStatus!==`idle`&&this.#a?.status()!==`rejected`){if(this.state.data!==void 0&&t?.cancelRefetch)this.cancel({silent:!0});else if(this.#a)return this.#a.continueRetry(),this.#a.promise}if(e&&this.setOptions(e),!this.options.queryFn){let e=this.observers.find(e=>e.options.queryFn);e&&this.setOptions(e.options)}let n=new AbortController,r=e=>{Object.defineProperty(e,"signal",{enumerable:!0,get:()=>(this.#s=!0,n.signal)})},i=()=>{let e=se(this.options,t),n=(()=>{let e={client:this.#i,queryKey:this.queryKey,meta:this.meta};return r(e),e})();return this.#s=!1,this.options.persister?this.options.persister(e,n,this):e(n)},a=(()=>{let e={fetchOptions:t,options:this.options,queryKey:this.queryKey,client:this.#i,state:this.state,fetchFn:i};return r(e),e})();(this.#e===`infinite`?be(this.options.pages):this.options.behavior)?.onFetch(a,this),this.#n=this.state,(this.state.fetchStatus===`idle`||this.state.fetchMeta!==a.fetchOptions?.meta)&&this.#l({type:`fetch`,meta:a.fetchOptions?.meta}),this.#a=ve({initialPromise:t?.initialPromise,fn:a.fetchFn,onCancel:e=>{e instanceof _e&&e.revert&&this.setState({...this.#n,fetchStatus:`idle`}),n.abort()},onFail:(e,t)=>{this.#l({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#l({type:`pause`})},onContinue:()=>{this.#l({type:`continue`})},retry:a.options.retry,retryDelay:a.options.retryDelay,networkMode:a.options.networkMode,canRun:()=>!0});try{let e=await this.#a.start();if(e===void 0)throw Error(`${this.queryHash} data is undefined`);return this.setData(e),this.#r.config.onSuccess?.(e,this),this.#r.config.onSettled?.(e,this.state.error,this),e}catch(e){if(e instanceof _e){if(e.silent)return this.#a.promise;if(e.revert){if(this.state.data===void 0)throw e;return this.state.data}}throw this.#l({type:`error`,error:e}),this.#r.config.onError?.(e,this),this.#r.config.onSettled?.(this.state.data,e,this),e}finally{this.scheduleGc()}}#l(e){let t=t=>{switch(e.type){case`failed`:return{...t,fetchFailureCount:e.failureCount,fetchFailureReason:e.error};case`pause`:return{...t,fetchStatus:`paused`};case`continue`:return{...t,fetchStatus:`fetching`};case`fetch`:return{...t,...we(t.data,this.options),fetchMeta:e.meta??null};case`success`:let n={...t,...Te(e.data,e.dataUpdatedAt),dataUpdateCount:t.dataUpdateCount+1,...!e.manual&&{fetchStatus:`idle`,fetchFailureCount:0,fetchFailureReason:null}};return this.#n=e.manual?n:void 0,n;case`error`:let r=e.error;return{...t,error:r,errorUpdateCount:t.errorUpdateCount+1,errorUpdatedAt:Date.now(),fetchFailureCount:t.fetchFailureCount+1,fetchFailureReason:r,fetchStatus:`idle`,status:`error`,isInvalidated:!0};case`invalidate`:return{...t,isInvalidated:!0};case`setState`:return{...t,...e.state}}};this.state=t(this.state),pe.batch(()=>{this.observers.forEach(e=>{e.onQueryUpdate()}),this.#r.notify({query:this,type:`updated`,action:e})})}};function we(e,t){return{fetchFailureCount:0,fetchFailureReason:null,fetchStatus:ge(t.networkMode)?`fetching`:`paused`,...e===void 0&&{error:null,status:`pending`}}}function Te(e,t){return{data:e,dataUpdatedAt:t??Date.now(),error:null,isInvalidated:!1,status:`success`}}function Ee(e){let t=typeof e.initialData==`function`?e.initialData():e.initialData,n=t!==void 0,r=n?typeof e.initialDataUpdatedAt==`function`?e.initialDataUpdatedAt():e.initialDataUpdatedAt:0;return{data:t,dataUpdateCount:0,dataUpdatedAt:n?r??Date.now():0,error:null,errorUpdateCount:0,errorUpdatedAt:0,fetchFailureCount:0,fetchFailureReason:null,fetchMeta:null,isInvalidated:!1,status:n?`success`:`pending`,fetchStatus:`idle`}}var De=class extends ye{#e;#t;#n;#r;constructor(e){super(),this.#e=e.client,this.mutationId=e.mutationId,this.#n=e.mutationCache,this.#t=[],this.state=e.state||L(),this.setOptions(e.options),this.scheduleGc()}setOptions(e){this.options=e,this.updateGcTime(this.options.gcTime)}get meta(){return this.options.meta}addObserver(e){this.#t.includes(e)||(this.#t.push(e),this.clearGcTimeout(),this.#n.notify({type:`observerAdded`,mutation:this,observer:e}))}removeObserver(e){this.#t=this.#t.filter(t=>t!==e),this.scheduleGc(),this.#n.notify({type:`observerRemoved`,mutation:this,observer:e})}optionalRemove(){this.#t.length||(this.state.status===`pending`?this.scheduleGc():this.#n.remove(this))}continue(){return this.#r?.continue()??this.execute(this.state.variables)}async execute(e){let t=()=>{this.#i({type:`continue`})},n={client:this.#e,meta:this.options.meta,mutationKey:this.options.mutationKey};this.#r=ve({fn:()=>this.options.mutationFn?this.options.mutationFn(e,n):Promise.reject(Error(`No mutationFn found`)),onFail:(e,t)=>{this.#i({type:`failed`,failureCount:e,error:t})},onPause:()=>{this.#i({type:`pause`})},onContinue:t,retry:this.options.retry??0,retryDelay:this.options.retryDelay,networkMode:this.options.networkMode,canRun:()=>this.#n.canRun(this)});let r=this.state.status===`pending`,i=!this.#r.canStart();try{if(r)t();else{this.#i({type:`pending`,variables:e,isPaused:i}),this.#n.config.onMutate&&await this.#n.config.onMutate(e,this,n);let t=await this.options.onMutate?.(e,n);t!==this.state.context&&this.#i({type:`pending`,context:t,variables:e,isPaused:i})}let a=await this.#r.start();return await this.#n.config.onSuccess?.(a,e,this.state.context,this,n),await this.options.onSuccess?.(a,e,this.state.context,n),await this.#n.config.onSettled?.(a,null,this.state.variables,this.state.context,this,n),await this.options.onSettled?.(a,null,e,this.state.context,n),this.#i({type:`success`,data:a}),a}catch(t){try{await this.#n.config.onError?.(t,e,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onError?.(t,e,this.state.context,n)}catch(e){Promise.reject(e)}try{await this.#n.config.onSettled?.(void 0,t,this.state.variables,this.state.context,this,n)}catch(e){Promise.reject(e)}try{await this.options.onSettled?.(void 0,t,e,this.state.context,n)}catch(e){Promise.reject(e)}throw this.#i({type:`error`,error:t}),t}finally{this.#n.runNext(this)}}#i(e){let t=t=>{switch(e.type){case`failed`:return{...t,failureCount:e.failureCount,failureReason:e.error};case`pause`:return{...t,isPaused:!0};case`continue`:return{...t,isPaused:!1};case`pending`:return{...t,context:e.context,data:void 0,failureCount:0,failureReason:null,error:null,isPaused:e.isPaused,status:`pending`,variables:e.variables,submittedAt:Date.now()};case`success`:return{...t,data:e.data,failureCount:0,failureReason:null,error:null,status:`success`,isPaused:!1};case`error`:return{...t,data:void 0,error:e.error,failureCount:t.failureCount+1,failureReason:e.error,isPaused:!1,status:`error`}}};this.state=t(this.state),pe.batch(()=>{this.#t.forEach(t=>{t.onMutationUpdate(e)}),this.#n.notify({mutation:this,type:`updated`,action:e})})}};function L(){return{context:void 0,data:void 0,error:null,failureCount:0,failureReason:null,isPaused:!1,status:`idle`,variables:void 0,submittedAt:0}}var Oe=class extends _{constructor(e={}){super(),this.config=e,this.#e=new Set,this.#t=new Map,this.#n=0}#e;#t;#n;build(e,t,n){let r=new De({client:e,mutationCache:this,mutationId:++this.#n,options:e.defaultMutationOptions(t),state:n});return this.add(r),r}add(e){this.#e.add(e);let t=ke(e);if(typeof t==`string`){let n=this.#t.get(t);n?n.push(e):this.#t.set(t,[e])}this.notify({type:`added`,mutation:e})}remove(e){if(this.#e.delete(e)){let t=ke(e);if(typeof t==`string`){let n=this.#t.get(t);if(n){if(n.length>1){let t=n.indexOf(e);t!==-1&&n.splice(t,1)}else n[0]===e&&this.#t.delete(t)}}}this.notify({type:`removed`,mutation:e})}canRun(e){let t=ke(e);if(typeof t==`string`){let n=this.#t.get(t)?.find(e=>e.state.status===`pending`);return!n||n===e}return!0}runNext(e){let t=ke(e);return typeof t==`string`?(this.#t.get(t)?.find(t=>t!==e&&t.state.isPaused))?.continue()??Promise.resolve():Promise.resolve()}clear(){pe.batch(()=>{this.#e.forEach(e=>{this.notify({type:`removed`,mutation:e})}),this.#e.clear(),this.#t.clear()})}getAll(){return Array.from(this.#e)}find(e){let t={exact:!0,...e};return this.getAll().find(e=>ee(t,e))}findAll(e={}){return this.getAll().filter(t=>ee(e,t))}notify(e){pe.batch(()=>{this.listeners.forEach(t=>{t(e)})})}resumePausedMutations(){let e=this.getAll().filter(e=>e.state.isPaused);return pe.batch(()=>Promise.all(e.map(e=>e.continue().catch(C))))}};function ke(e){return e.options.scope?.id}var Ae=class extends _{constructor(e={}){super(),this.config=e,this.#e=new Map}#e;build(e,t,n){let r=t.queryKey,i=t.queryHash??A(r,t),a=this.get(i);return a||(a=new Ce({client:e,queryKey:r,queryHash:i,options:e.defaultQueryOptions(t),state:n,defaultOptions:e.getQueryDefaults(r)}),this.add(a)),a}add(e){this.#e.has(e.queryHash)||(this.#e.set(e.queryHash,e),this.notify({type:`added`,query:e}))}remove(e){let t=this.#e.get(e.queryHash);t&&(e.destroy(),t===e&&this.#e.delete(e.queryHash),this.notify({type:`removed`,query:e}))}clear(){pe.batch(()=>{this.getAll().forEach(e=>{this.remove(e)})})}get(e){return this.#e.get(e)}getAll(){return[...this.#e.values()]}find(e){let t={exact:!0,...e};return this.getAll().find(e=>k(t,e))}findAll(e={}){let t=this.getAll();return Object.keys(e).length>0?t.filter(t=>k(e,t)):t}notify(e){pe.batch(()=>{this.listeners.forEach(t=>{t(e)})})}onFocus(){pe.batch(()=>{this.getAll().forEach(e=>{e.onFocus()})})}onOnline(){pe.batch(()=>{this.getAll().forEach(e=>{e.onOnline()})})}},je=class{#e;#t;#n;#r;#i;#a;#o;#s;constructor(e={}){this.#e=e.queryCache||new Ae,this.#t=e.mutationCache||new Oe,this.#n=e.defaultOptions||{},this.#r=new Map,this.#i=new Map,this.#a=0}mount(){this.#a++,this.#a===1&&(this.#o=v.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onFocus())}),this.#s=me.subscribe(async e=>{e&&(await this.resumePausedMutations(),this.#e.onOnline())}))}unmount(){this.#a--,this.#a===0&&(this.#o?.(),this.#o=void 0,this.#s?.(),this.#s=void 0)}isFetching(e){return this.#e.findAll({...e,fetchStatus:`fetching`}).length}isMutating(e){return this.#t.findAll({...e,status:`pending`}).length}getQueryData(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state.data}ensureQueryData(e){let t=this.defaultQueryOptions(e),n=this.#e.build(this,t),r=n.state.data;return r===void 0?this.fetchQuery(e):(e.revalidateIfStale&&n.isStaleByTime(D(t.staleTime,n))&&this.prefetchQuery(t),Promise.resolve(r))}getQueriesData(e){return this.#e.findAll(e).map(({queryKey:e,state:t})=>[e,t.data])}setQueryData(e,t,n){let r=this.defaultQueryOptions({queryKey:e}),i=this.#e.get(r.queryHash)?.state.data,a=w(t,i);if(a!==void 0)return this.#e.build(this,r).setData(a,{...n,manual:!0})}setQueriesData(e,t,n){return pe.batch(()=>this.#e.findAll(e).map(({queryKey:e})=>[e,this.setQueryData(e,t,n)]))}getQueryState(e){let t=this.defaultQueryOptions({queryKey:e});return this.#e.get(t.queryHash)?.state}removeQueries(e){let t=this.#e;pe.batch(()=>{t.findAll(e).forEach(e=>{t.remove(e)})})}resetQueries(e,t){let n=this.#e;return pe.batch(()=>(n.findAll(e).forEach(e=>{e.reset()}),this.refetchQueries({type:`active`,...e},t)))}cancelQueries(e,t={}){let n={revert:!0,...t},r=pe.batch(()=>this.#e.findAll(e).map(e=>e.cancel(n)));return Promise.all(r).then(C).catch(C)}invalidateQueries(e,t={}){return pe.batch(()=>(this.#e.findAll(e).forEach(e=>{e.invalidate()}),e?.refetchType===`none`?Promise.resolve():this.refetchQueries({...e,type:e?.refetchType??e?.type??`active`},t)))}refetchQueries(e,t={}){let n={...t,cancelRefetch:t.cancelRefetch??!0},r=pe.batch(()=>this.#e.findAll(e).filter(e=>!e.isDisabled()&&!e.isStatic()).map(e=>{let t=e.fetch(void 0,n);return n.throwOnError||(t=t.catch(C)),e.state.fetchStatus===`paused`?Promise.resolve():t}));return Promise.all(r).then(C)}fetchQuery(e){let t=this.defaultQueryOptions(e);t.retry===void 0&&(t.retry=!1);let n=this.#e.build(this,t);return n.isStaleByTime(D(t.staleTime,n))?n.fetch(t):Promise.resolve(n.state.data)}prefetchQuery(e){return this.fetchQuery(e).then(C).catch(C)}fetchInfiniteQuery(e){return e._type=`infinite`,this.fetchQuery(e)}prefetchInfiniteQuery(e){return this.fetchInfiniteQuery(e).then(C).catch(C)}ensureInfiniteQueryData(e){return e._type=`infinite`,this.ensureQueryData(e)}resumePausedMutations(){return me.isOnline()?this.#t.resumePausedMutations():Promise.resolve()}getQueryCache(){return this.#e}getMutationCache(){return this.#t}getDefaultOptions(){return this.#n}setDefaultOptions(e){this.#n=e}setQueryDefaults(e,t){this.#r.set(j(e),{queryKey:e,defaultOptions:t})}getQueryDefaults(e){let t=[...this.#r.values()],n={};return t.forEach(t=>{te(e,t.queryKey)&&Object.assign(n,t.defaultOptions)}),n}setMutationDefaults(e,t){this.#i.set(j(e),{mutationKey:e,defaultOptions:t})}getMutationDefaults(e){let t=[...this.#i.values()],n={};return t.forEach(t=>{te(e,t.mutationKey)&&Object.assign(n,t.defaultOptions)}),n}defaultQueryOptions(e){if(e._defaulted)return e;let t={...this.#n.queries,...this.getQueryDefaults(e.queryKey),...e,_defaulted:!0};return t.queryHash||=A(t.queryKey,t),t.refetchOnReconnect===void 0&&(t.refetchOnReconnect=t.networkMode!==`always`),t.throwOnError===void 0&&(t.throwOnError=!!t.suspense),!t.networkMode&&t.persister&&(t.networkMode=`offlineFirst`),t.queryFn===I&&(t.enabled=!1),t}defaultMutationOptions(e){return e?._defaulted?e:{...this.#n.mutations,...e?.mutationKey&&this.getMutationDefaults(e.mutationKey),...e,_defaulted:!0}}clear(){this.#e.clear(),this.#t.clear()}},Me=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),Ne=o(((e,t)=>{t.exports=Me()})),R=c(f(),1),z=Ne(),Pe=R.createContext(void 0),Fe=({client:e,children:t})=>(R.useEffect(()=>(e.mount(),()=>{e.unmount()}),[e]),(0,z.jsx)(Pe.Provider,{value:e,children:t})),Ie=typeof window<`u`?R.useLayoutEffect:R.useEffect;function B(e){let t=R.useRef({value:e,prev:null}),n=t.current.value;return e!==n&&(t.current={value:e,prev:n}),t.current.prev}function Le(e,t,n={},r={}){R.useEffect(()=>{if(!e.current||r.disabled||typeof IntersectionObserver!=`function`)return;let i=new IntersectionObserver(([e])=>{t(e)},n);return i.observe(e.current),()=>{i.disconnect()}},[t,n,r.disabled,e])}function Re(e){let t=R.useRef(null);return R.useImperativeHandle(e,()=>t.current,[]),t}function V(e){return e[e.length-1]}function ze(e){return typeof e==`function`}function Be(e,t){return ze(e)?e(t):e}var Ve=Object.prototype.hasOwnProperty,He=Object.prototype.propertyIsEnumerable;function Ue(e){for(let t in e)if(Ve.call(e,t))return!0;return!1}var We=()=>Object.create(null),Ge=(e,t)=>Ke(e,t,We);function Ke(e,t,n=()=>({}),r=0){if(e===t)return e;if(r>500)return t;let i=t,a=Xe(e)&&Xe(i);if(!a&&!(Je(e)&&Je(i)))return i;let o=a?e:qe(e);if(!o)return i;let s=a?i:qe(i);if(!s)return i;let c=o.length,l=s.length,u=a?Array(l):n(),d=0;for(let t=0;ti||!Ze(e[o],t[o],n)))return!1;return i===a}return!1}function Qe(e){let t,n,r=new Promise((e,r)=>{t=e,n=r});return r.status=`pending`,r.resolve=n=>{r.status=`resolved`,r.value=n,t(n),e?.(n)},r.reject=e=>{r.status=`rejected`,n(e)},r}function $e(e){return!!(e&&typeof e==`object`&&typeof e.then==`function`)}function et(e){return e.replace(/[\x00-\x1f\x7f]/g,``)}function tt(e){let t;try{t=decodeURI(e)}catch{t=e.replaceAll(/%[0-9A-F]{2}/gi,e=>{try{return decodeURI(e)}catch{return e}})}return et(t)}var nt=[`http:`,`https:`,`mailto:`,`tel:`];function rt(e,t){if(!e)return!1;try{let n=new URL(e);return!t.has(n.protocol)}catch{return!1}}function it(e){if(!e||!/[%\\\x00-\x1f\x7f]/.test(e)&&!e.startsWith(`//`))return{path:e,handledProtocolRelativeURL:!1};let t=/%25|%5C/gi,n=0,r=``,i;for(;(i=t.exec(e))!==null;)r+=tt(e.slice(n,i.index))+i[0],n=t.lastIndex;r+=tt(n?e.slice(n):e);let a=!1;return r.startsWith(`//`)&&(a=!0,r=`/`+r.replace(/^\/+/,``)),{path:r,handledProtocolRelativeURL:a}}function at(e){return/\s|[^\u0000-\u007F]/.test(e)?e.replace(/\s|[^\u0000-\u007F]/gu,encodeURIComponent):e}function ot(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n{e.next&&(e.prev?(e.prev.next=e.next,e.next.prev=e.prev,e.next=void 0,r&&(r.next=e,e.prev=r)):(e.next.prev=void 0,n=e.next,e.next=void 0,r&&(e.prev=r,r.next=e)),r=e)};return{get(e){let n=t.get(e);if(n)return i(n),n.value},set(a,o){if(t.size>=e&&n){let e=n;t.delete(e.key),e.next&&(n=e.next,e.next.prev=void 0),e===r&&(r=void 0)}let s=t.get(a);if(s)s.value=o,i(s);else{let e={key:a,value:o,prev:r};r&&(r.next=e),r=e,n||=e,t.set(a,e)}},clear(){t.clear(),n=void 0,r=void 0}}}var lt=4,ut=5;function dt(e){let t=e.indexOf(`{`);if(t===-1)return null;let n=e.indexOf(`}`,t);return n===-1||t+1>=e.length?null:[t,n]}function ft(e,t,n=new Uint16Array(6)){let r=e.indexOf(`/`,t),i=r===-1?e.length:r,a=e.substring(t,i);if(!a||!a.includes(`$`))return n[0]=0,n[1]=t,n[2]=t,n[3]=i,n[4]=i,n[5]=i,n;if(a===`$`){let r=e.length;return n[0]=2,n[1]=t,n[2]=t,n[3]=r,n[4]=r,n[5]=r,n}if(a.charCodeAt(0)===36)return n[0]=1,n[1]=t,n[2]=t+1,n[3]=i,n[4]=i,n[5]=i,n;let o=dt(a);if(o){let[r,s]=o,c=a.charCodeAt(r+1);if(c===45){if(r+2!e.parse&&e.caseSensitive===f&&e.prefix===p&&e.suffix===m);if(h)o=h;else{let e=_t(1,n.fullPath??n.from,f,p,m);o=e,e.depth=a,e.parent=i,i.dynamic??=[],i.dynamic.push(e)}break}case 3:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),f=c&&!!(t||s),p=t?f?t:t.toLowerCase():void 0,m=s?f?s:s.toLowerCase():void 0,h=!l&&i.optional?.find(e=>!e.parse&&e.caseSensitive===f&&e.prefix===p&&e.suffix===m);if(h)o=h;else{let e=_t(3,n.fullPath??n.from,f,p,m);o=e,e.parent=i,e.depth=a,i.optional??=[],i.optional.push(e)}break}case 2:{let t=r.substring(u,e[1]),s=r.substring(e[4],d),l=c&&!!(t||s),f=t?l?t:t.toLowerCase():void 0,p=s?l?s:s.toLowerCase():void 0,m=_t(2,n.fullPath??n.from,l,f,p);o=m,m.parent=i,m.depth=a,i.wildcard??=[],i.wildcard.push(m)}}i=o}if(l&&n.children&&!n.isRoot&&n.id&&n.id.charCodeAt(n.id.lastIndexOf(`/`)+1)===95){let e=gt(n.fullPath??n.from);e.kind=ut,e.parent=i,a++,e.depth=a,i.pathless??=[],i.pathless.push(e),i=e}let u=(n.path||!n.children)&&!n.isRoot;if(u&&r.endsWith(`/`)){let e=gt(n.fullPath??n.from);e.kind=lt,e.parent=i,a++,e.depth=a,i.index=e,i=e}i.parse=l??null,i.priority=n.options?.params?.priority??0,u&&!i.route&&(i.route=n,i.fullPath=n.fullPath??n.from)}if(n.children)for(let r of n.children)pt(e,t,r,s,i,a,o)}function mt(e,t){if(e.parse&&!t.parse)return-1;if(!e.parse&&t.parse)return 1;if(e.parse&&t.parse&&(e.priority||t.priority))return t.priority-e.priority;if(e.prefix&&t.prefix&&e.prefix!==t.prefix){if(e.prefix.startsWith(t.prefix))return-1;if(t.prefix.startsWith(e.prefix))return 1}if(e.suffix&&t.suffix&&e.suffix!==t.suffix){if(e.suffix.endsWith(t.suffix))return-1;if(t.suffix.endsWith(e.suffix))return 1}return e.prefix&&!t.prefix?-1:!e.prefix&&t.prefix?1:e.suffix&&!t.suffix?-1:!e.suffix&&t.suffix?1:e.caseSensitive&&!t.caseSensitive?-1:!e.caseSensitive&&t.caseSensitive?1:0}function ht(e){if(e.pathless)for(let t of e.pathless)ht(t);if(e.static)for(let t of e.static.values())ht(t);if(e.staticInsensitive)for(let t of e.staticInsensitive.values())ht(t);if(e.dynamic?.length){e.dynamic.sort(mt);for(let t of e.dynamic)ht(t)}if(e.optional?.length){e.optional.sort(mt);for(let t of e.optional)ht(t)}if(e.wildcard?.length){e.wildcard.sort(mt);for(let t of e.wildcard)ht(t)}}function gt(e){return{kind:0,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:e,parent:null,parse:null,priority:0}}function _t(e,t,n,r,i){return{kind:e,depth:0,pathless:null,index:null,static:null,staticInsensitive:null,dynamic:null,optional:null,wildcard:null,route:null,fullPath:t,parent:null,parse:null,priority:0,caseSensitive:n,prefix:r,suffix:i}}function vt(e,t){let n=gt(`/`),r=new Uint16Array(6);for(let t of e)pt(!1,r,t,1,n,0);ht(n),t.masksTree=n,t.flatCache=ct(1e3)}function yt(e,t){e||=`/`;let n=t.flatCache.get(e);if(n)return n;let r=wt(e,t.masksTree);return t.flatCache.set(e,r),r}function bt(e,t,n,r,i){e||=`/`,r||=`/`;let a=t?`case\0${e}`:e,o=i.singleCache.get(a);return o||(o=gt(`/`),pt(t,new Uint16Array(6),{from:e},1,o,0),i.singleCache.set(a,o)),wt(r,o,n)}function xt(e,t,n=!1){let r=n?e:`nofuzz\0${e}`,i=t.matchCache.get(r);if(i!==void 0)return i;e||=`/`;let a;try{a=wt(e,t.segmentTree,n)}catch(e){if(e instanceof URIError)a=null;else throw e}return a&&(a.branch=Et(a.route)),t.matchCache.set(r,a),a}function St(e){return e===`/`?e:e.replace(/\/{1,}$/,``)}function Ct(e,t=!1,n){let r=gt(e.fullPath),i=new Uint16Array(6),a={},o={},s=0;return pt(t,i,e,1,r,0,e=>{if(n?.(e,s),e.id in a&&st(),a[e.id]=e,s!==0&&e.path){let t=St(e.fullPath);(!o[t]||e.fullPath.endsWith(`/`))&&(o[t]=e)}s++}),ht(r),{processedTree:{segmentTree:r,singleCache:ct(1e3),matchCache:ct(1e3),flatCache:null,masksTree:null},routesById:a,routesByPath:o}}function wt(e,t,n=!1){let r=e.split(`/`),i=Ot(e,r,t,n);if(!i)return null;let[a]=Tt(e,r,i);return{route:i.node.route,rawParams:a}}function Tt(e,t,n){let r=Dt(n.node),i=null,a=Object.create(null),o=n.extract?.part??0,s=n.extract?.node??0,c=n.extract?.path??0,l=n.extract?.segment??0;for(;s=0;e--){let n=i.wildcard[e],{prefix:r,suffix:a}=n;if(!(r&&(v||!(n.caseSensitive?y:b??=y.toLowerCase()).startsWith(r)))){if(a){if(v)continue;let e=t.slice(u).join(`/`).slice(-a.length);if((n.caseSensitive?e:e.toLowerCase())!==a)continue}s.push({node:n,index:o,skipped:d,depth:f+1,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}}if(i.optional){let e=d|1<=0;n--){let r=i.optional[n];s.push({node:r,index:u,skipped:e,depth:t,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}if(!v)for(let e=i.optional.length-1;e>=0;e--){let n=i.optional[e],{prefix:r,suffix:a}=n;if(r||a){let e=n.caseSensitive?y:b??=y.toLowerCase();if(r&&!e.startsWith(r)||a&&!e.endsWith(a))continue}s.push({node:n,index:u+1,skipped:d,depth:t,statics:p,dynamics:m,optionals:h+kt(o,u),extract:g,rawParams:_})}}if(!v&&i.dynamic&&y)for(let e=i.dynamic.length-1;e>=0;e--){let t=i.dynamic[e],{prefix:n,suffix:r}=t;if(n||r){let e=t.caseSensitive?y:b??=y.toLowerCase();if(n&&!e.startsWith(n)||r&&!e.endsWith(r))continue}s.push({node:t,index:u+1,skipped:d,depth:f+1,statics:p,dynamics:m+kt(o,u),optionals:h,extract:g,rawParams:_})}if(!v&&i.staticInsensitive){let e=i.staticInsensitive.get(b??=y.toLowerCase());e&&s.push({node:e,index:u+1,skipped:d,depth:f+1,statics:p+kt(o,u),dynamics:m,optionals:h,extract:g,rawParams:_})}if(!v&&i.static){let e=i.static.get(y);e&&s.push({node:e,index:u+1,skipped:d,depth:f+1,statics:p+kt(o,u),dynamics:m,optionals:h,extract:g,rawParams:_})}if(i.pathless){let e=f+1;for(let t=i.pathless.length-1;t>=0;t--){let n=i.pathless[t];s.push({node:n,index:u,skipped:d,depth:e,statics:p,dynamics:m,optionals:h,extract:g,rawParams:_})}}}if(l)return l;if(r&&c){let n=c.index;for(let e=0;ee.statics||t.statics===e.statics&&(t.dynamics>e.dynamics||t.dynamics===e.dynamics&&(t.optionals>e.optionals||t.optionals===e.optionals&&((t.node.kind===lt)>(e.node.kind===lt)||t.node.kind===lt==(e.node.kind===lt)&&t.depth>e.depth)))}function Nt(e){return Pt(e.filter(e=>e!==void 0).join(`/`))}function Pt(e){return e.replace(/\/{2,}/g,`/`)}function Ft(e){return e===`/`?e:e.replace(/^\/{1,}/,``)}function It(e){let t=e.length;return t>1&&e[t-1]===`/`?e.replace(/\/{1,}$/,``):e}function Lt(e){return It(Ft(e))}function Rt(e,t){return e?.endsWith(`/`)&&e!==`/`&&e!==`${t}/`?e.slice(0,-1):e}function zt(e,t,n){return Rt(e,n)===Rt(t,n)}function Bt({base:e,to:t,trailingSlash:n=`never`,cache:r}){let i=t.startsWith(`/`),a=!i&&t===`.`,o;if(r){o=i?t:a?e:e+`\0`+t;let n=r.get(o);if(n)return n}let s;if(a)s=e.split(`/`);else if(i)s=t.split(`/`);else{for(s=e.split(`/`);s.length>1&&V(s)===``;)s.pop();let n=t.split(`/`);for(let e=0,t=n.length;e1&&(V(s)===``?n===`never`&&s.pop():n===`always`&&s.push(``));let c=Pt(s.join(`/`))||`/`;return o&&r&&r.set(o,c),c}function Vt(e){let t=new Map(e.map(e=>[encodeURIComponent(e),e])),n=Array.from(t.keys()).map(e=>e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)).join(`|`),r=new RegExp(n,`g`);return e=>e.replace(r,e=>t.get(e)??e)}function Ht(e,t,n){let r=t[e];return typeof r==`string`?e===`_splat`?/^[a-zA-Z0-9\-._~!/]*$/.test(r)?r:r.split(`/`).map(e=>Wt(e,n)).join(`/`):Wt(r,n):r}function Ut({path:e,params:t,decoder:n,...r}){let i=!1,a=Object.create(null);if(!e||e===`/`)return{interpolatedPath:`/`,usedParams:a,isMissingParams:i};if(!e.includes(`$`))return{interpolatedPath:e,usedParams:a,isMissingParams:i};let o=e.length,s=0,c,l=``;for(;s{t[0]===`?`&&(t=t.substring(1));let n=Jt(t);for(let t in n){let r=n[t];if(typeof r==`string`)try{n[t]=e(r)}catch{}}return n}}function Qt(e,t){let n=typeof t==`function`;function r(r){if(typeof r==`object`&&r)try{return e(r)}catch{}else if(n&&typeof r==`string`)try{return t(r),e(r)}catch{}return r}return e=>{let t=Kt(e,r);return t?`?${t}`:``}}var $t=`__root__`;function en(e){if(e.statusCode=e.statusCode||e.code||307,!e._builtLocation&&!e.reloadDocument&&typeof e.href==`string`)try{new URL(e.href),e.reloadDocument=!0}catch{}let t=new Headers(e.headers);e.href&&t.get(`Location`)===null&&t.set(`Location`,e.href);let n=new Response(null,{status:e.statusCode,headers:t});if(n.options=e,e.throw)throw n;return n}function tn(e){return e instanceof Response&&!!e.options}var nn=e=>{if(!e.rendered)return e.rendered=!0,e.onReady?.()},rn=e=>e.stores.matchesId.get().some(t=>e.stores.matchStores.get(t)?.get()._forcePending),an=(e,t)=>!!(e.preload&&!e.router.stores.matchStores.has(t)),on=(e,t,n=!0)=>{let r={...e.router.options.context??{}},i=n?t:t-1;for(let t=0;t<=i;t++){let n=e.matches[t];if(!n)continue;let i=e.router.getMatch(n.id);i&&Object.assign(r,i.__routeContext,i.__beforeLoadContext)}return r},sn=(e,t)=>{if(!e.matches.length)return;let n=t.routeId,r=e.matches.findIndex(t=>t.routeId===e.router.routeTree.id),i=r>=0?r:0,a=n?e.matches.findIndex(e=>e.routeId===n):e.firstBadMatchIndex??e.matches.length-1;a<0&&(a=i);for(let t=a;t>=0;t--){let n=e.matches[t];if(e.router.looseRoutesById[n.routeId].options.notFoundComponent)return t}return n?a:i},cn=(e,t,n)=>{if(!(!tn(n)&&!Gt(n)))throw tn(n)&&n.redirectHandled&&!n.options.reloadDocument?n:(t&&(t._nonReactive.beforeLoadPromise?.resolve(),t._nonReactive.loaderPromise?.resolve(),t._nonReactive.beforeLoadPromise=void 0,t._nonReactive.loaderPromise=void 0,t._nonReactive.error=n,e.updateMatch(t.id,r=>({...r,status:tn(n)?`redirected`:Gt(n)?`notFound`:r.status===`pending`?`success`:r.status,context:on(e,t.index),isFetching:!1,error:n})),Gt(n)&&!n.routeId&&(n.routeId=t.routeId),t._nonReactive.loadPromise?.resolve()),tn(n)&&(e.rendered=!0,n.options._fromLocation=e.location,n.redirectHandled=!0,n=e.router.resolveRedirect(n)),n)},ln=(e,t)=>{let n=e.router.getMatch(t);return!!(!n||n._nonReactive.dehydrated)},un=(e,t,n)=>{let r=on(e,n);e.updateMatch(t,e=>({...e,context:r}))},dn=(e,t,n)=>{let{id:r,routeId:i}=e.matches[t],a=e.router.looseRoutesById[i];if(n instanceof Promise)throw n;e.firstBadMatchIndex??=t,cn(e,e.router.getMatch(r),n);try{a.options.onError?.(n)}catch(t){n=t,cn(e,e.router.getMatch(r),n)}e.updateMatch(r,e=>(e._nonReactive.beforeLoadPromise?.resolve(),e._nonReactive.beforeLoadPromise=void 0,e._nonReactive.loadPromise?.resolve(),{...e,error:n,status:`error`,isFetching:!1,updatedAt:Date.now(),abortController:new AbortController})),!e.preload&&!tn(n)&&!Gt(n)&&(e.serialError??=n)},fn=(e,t,n,r)=>{if(r._nonReactive.pendingTimeout!==void 0)return;let i=n.options.pendingMs??e.router.options.defaultPendingMs;if(e.onReady&&!an(e,t)&&(n.options.loader||n.options.beforeLoad||Cn(n))&&typeof i==`number`&&i!==1/0&&(n.options.pendingComponent??e.router.options?.defaultPendingComponent)){let t=setTimeout(()=>{nn(e)},i);r._nonReactive.pendingTimeout=t}},pn=(e,t,n)=>{let r=e.router.getMatch(t);if(!r._nonReactive.beforeLoadPromise&&!r._nonReactive.loaderPromise)return;fn(e,t,n,r);let i=()=>{let n=e.router.getMatch(t);n.preload&&(n.status===`redirected`||n.status===`notFound`)&&cn(e,n,n.error)};return r._nonReactive.beforeLoadPromise?r._nonReactive.beforeLoadPromise.then(i):i()},mn=(e,t,n,r)=>{let i=e.router.getMatch(t),a=i._nonReactive.loadPromise;i._nonReactive.loadPromise=Qe(()=>{a?.resolve(),a=void 0});let{paramsError:o,searchError:s}=i;o&&dn(e,n,o),s&&dn(e,n,s),fn(e,t,r,i);let c=new AbortController,l=!1,u=()=>{l||(l=!0,e.updateMatch(t,e=>({...e,isFetching:`beforeLoad`,fetchCount:e.fetchCount+1,abortController:c})))},d=()=>{i._nonReactive.beforeLoadPromise?.resolve(),i._nonReactive.beforeLoadPromise=void 0,e.updateMatch(t,e=>({...e,isFetching:!1}))};if(!r.options.beforeLoad){e.router.batch(()=>{u(),d()});return}i._nonReactive.beforeLoadPromise=Qe();let f={...on(e,n,!1),...i.__routeContext},{search:p,params:m,cause:h}=i,g=an(e,t),_={search:p,abortController:c,params:m,preload:g,context:f,location:e.location,navigate:t=>e.router.navigate({...t,_fromLocation:e.location}),buildLocation:e.router.buildLocation,cause:g?`preload`:h,matches:e.matches,routeId:r.id,...e.router.options.additionalContext},v=r=>{if(r===void 0){e.router.batch(()=>{u(),d()});return}(tn(r)||Gt(r))&&(u(),dn(e,n,r)),e.router.batch(()=>{u(),e.updateMatch(t,e=>({...e,__beforeLoadContext:r})),d()})},y;try{if(y=r.options.beforeLoad(_),$e(y))return u(),y.catch(t=>{dn(e,n,t)}).then(v)}catch(t){u(),dn(e,n,t)}v(y)},hn=(e,t)=>{let{id:n,routeId:r}=e.matches[t],i=e.router.looseRoutesById[r],a=()=>s(),o=()=>mn(e,n,t,i),s=()=>{if(ln(e,n))return;let t=pn(e,n,i);return $e(t)?t.then(o):o()};return a()},gn=(e,t,n)=>{let r=e.router.getMatch(t);if(!r||!n.options.head&&!n.options.scripts&&!n.options.headers)return;let i={ssr:e.router.options.ssr,matches:e.matches,match:r,params:r.params,loaderData:r.loaderData};return Promise.all([n.options.head?.(i),n.options.scripts?.(i),n.options.headers?.(i)]).then(([e,t,n])=>({meta:e?.meta,links:e?.links,headScripts:e?.scripts,headers:n,scripts:t,styles:e?.styles}))},_n=(e,t,n,r,i)=>{let a=t[r-1],{params:o,loaderDeps:s,abortController:c,cause:l}=e.router.getMatch(n),u=on(e,r),d=an(e,n);return{params:o,deps:s,preload:!!d,parentMatchPromise:a,abortController:c,context:u,location:e.location,navigate:t=>e.router.navigate({...t,_fromLocation:e.location}),cause:d?`preload`:l,route:i,...e.router.options.additionalContext}},vn=async(e,t,n,r,i)=>{try{let a=e.router.getMatch(n);try{Sn(i);let o=i.options.loader,s=typeof o==`function`?o:o?.handler,c=s?.(_n(e,t,n,r,i)),l=!!s&&$e(c);if((l||i._lazyPromise||i._componentsPromise||i.options.head||i.options.scripts||i.options.headers||a._nonReactive.minPendingPromise)&&e.updateMatch(n,e=>({...e,isFetching:`loader`})),s){let t=l?await c:c;cn(e,e.router.getMatch(n),t),t!==void 0&&e.updateMatch(n,e=>({...e,loaderData:t}))}i._lazyPromise&&await i._lazyPromise;let u=a._nonReactive.minPendingPromise;u&&await u,i._componentsPromise&&await i._componentsPromise,e.updateMatch(n,t=>({...t,error:void 0,context:on(e,r),status:`success`,isFetching:!1,updatedAt:Date.now()}))}catch(t){let o=t;if(o?.name===`AbortError`){if(a.abortController.signal.aborted){a._nonReactive.loaderPromise?.resolve(),a._nonReactive.loaderPromise=void 0;return}e.updateMatch(n,t=>({...t,status:t.status===`pending`?`success`:t.status,isFetching:!1,context:on(e,r)}));return}let s=a._nonReactive.minPendingPromise;s&&await s,Gt(t)&&await i.options.notFoundComponent?.preload?.(),cn(e,e.router.getMatch(n),t);try{i.options.onError?.(t)}catch(t){o=t,cn(e,e.router.getMatch(n),t)}!tn(o)&&!Gt(o)&&await Sn(i,[`errorComponent`]),e.updateMatch(n,t=>({...t,error:o,context:on(e,r),status:`error`,isFetching:!1}))}}catch(t){let r=e.router.getMatch(n);r&&(r._nonReactive.loaderPromise=void 0),cn(e,r,t)}},yn=async(e,t,n)=>{async function r(r,a,c,l,d){let f=Date.now()-a.updatedAt,p=r?d.options.preloadStaleTime??e.router.options.defaultPreloadStaleTime??3e4:d.options.staleTime??e.router.options.defaultStaleTime??0,m=d.options.shouldReload,h=typeof m==`function`?m(_n(e,t,i,n,d)):m,{status:g,invalid:_}=l,v=f>=p&&(!!e.forceStaleReload||l.cause===`enter`||c!==void 0&&c!==l.id);o=g===`success`&&(_||(h??v)),r&&d.options.preload===!1||(o&&!e.sync&&u?(s=!0,(async()=>{try{await vn(e,t,i,n,d);let r=e.router.getMatch(i);r._nonReactive.loaderPromise?.resolve(),r._nonReactive.loadPromise?.resolve(),r._nonReactive.loaderPromise=void 0,r._nonReactive.loadPromise=void 0}catch(t){tn(t)&&await e.router.navigate(t.options)}})()):g!==`success`||o?await vn(e,t,i,n,d):un(e,i,n))}let{id:i,routeId:a}=e.matches[n],o=!1,s=!1,c=e.router.looseRoutesById[a],l=c.options.loader,u=((typeof l==`function`?void 0:l?.staleReloadMode)??e.router.options.defaultStaleReloadMode)!==`blocking`;if(ln(e,i)){if(!e.router.getMatch(i))return e.matches[n];un(e,i,n)}else{let t=e.router.getMatch(i),o=e.router.stores.matchesId.get()[n],s=(o&&e.router.stores.matchStores.get(o)||null)?.routeId===a?o:e.router.stores.matches.get().find(e=>e.routeId===a)?.id,l=an(e,i);if(t._nonReactive.loaderPromise){if(t.status===`success`&&!e.sync&&!t.preload&&u)return t;await t._nonReactive.loaderPromise;let n=e.router.getMatch(i),a=n._nonReactive.error||n.error;a&&cn(e,n,a),n.status===`pending`&&await r(l,t,s,n,c)}else{let n=l&&!e.router.stores.matchStores.has(i),a=e.router.getMatch(i);a._nonReactive.loaderPromise=Qe(),n!==a.preload&&e.updateMatch(i,e=>({...e,preload:n})),await r(l,t,s,a,c)}}let d=e.router.getMatch(i);s||(d._nonReactive.loaderPromise?.resolve(),d._nonReactive.loadPromise?.resolve(),d._nonReactive.loadPromise=void 0),clearTimeout(d._nonReactive.pendingTimeout),d._nonReactive.pendingTimeout=void 0,s||(d._nonReactive.loaderPromise=void 0),d._nonReactive.dehydrated=void 0;let f=s?d.isFetching:!1;return f!==d.isFetching||d.invalid!==!1?(e.updateMatch(i,e=>({...e,isFetching:f,invalid:!1})),e.router.getMatch(i)):d};async function bn(e){let t=e,n=[];rn(t.router)&&nn(t);let r;for(let e=0;e({...e,...a?{status:`success`,globalNotFound:!0,error:void 0}:{status:`notFound`,error:l},isFetching:!1})),u=e,await Sn(r,[`notFoundComponent`])}else if(!t.preload){let e=t.matches[0];e.globalNotFound||t.router.getMatch(e.id)?.globalNotFound&&t.updateMatch(e.id,e=>({...e,globalNotFound:!1,error:void 0}))}if(t.serialError&&t.firstBadMatchIndex!==void 0){let e=t.router.looseRoutesById[t.matches[t.firstBadMatchIndex].routeId];await Sn(e,[`errorComponent`])}for(let e=0;e<=u;e++){let{id:n,routeId:r}=t.matches[e],i=t.router.looseRoutesById[r];try{let e=gn(t,n,i);if(e){let r=await e;t.updateMatch(n,e=>({...e,...r}))}}catch(e){console.error(`Error executing head for route ${r}:`,e)}}let d=nn(t);if($e(d)&&await d,l)throw l;if(t.serialError&&!t.preload&&!t.onReady)throw t.serialError;return t.matches}function xn(e,t){let n=t.map(t=>e.options[t]?.preload?.()).filter(Boolean);if(n.length!==0)return Promise.all(n)}function Sn(e,t=wn){!e._lazyLoaded&&e._lazyPromise===void 0&&(e.lazyFn?e._lazyPromise=e.lazyFn().then(t=>{let{id:n,...r}=t.options;Object.assign(e.options,r),e._lazyLoaded=!0,e._lazyPromise=void 0}):e._lazyLoaded=!0);let n=()=>e._componentsLoaded?void 0:t===wn?(()=>{if(e._componentsPromise===void 0){let t=xn(e,wn);t?e._componentsPromise=t.then(()=>{e._componentsLoaded=!0,e._componentsPromise=void 0}):e._componentsLoaded=!0}return e._componentsPromise})():xn(e,t);return e._lazyPromise?e._lazyPromise.then(n):n()}function Cn(e){for(let t of wn)if(e.options[t]?.preload)return!0;return!1}var wn=[`component`,`errorComponent`,`pendingComponent`,`notFoundComponent`];function Tn(e){return{input:({url:t})=>{for(let n of e)t=Dn(n,t);return t},output:({url:t})=>{for(let n=e.length-1;n>=0;n--)t=On(e[n],t);return t}}}function En(e){let t=Lt(e.basepath),n=`/${t}`,r=e.caseSensitive?n:n.toLowerCase(),i=`${r}/`;return{input:({url:t})=>{let a=e.caseSensitive?t.pathname:t.pathname.toLowerCase();return a===r?t.pathname=`/`:a.startsWith(i)&&(t.pathname=t.pathname.slice(n.length)),t},output:({url:e})=>(e.pathname=Nt([`/`,t,e.pathname]),e)}}function Dn(e,t){let n=e?.input?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function On(e,t){let n=e?.output?.({url:t});if(n){if(typeof n==`string`)return new URL(n);if(n instanceof URL)return n}return t}function kn(e,t){let{createMutableStore:n,createReadonlyStore:r,batch:i,init:a}=t,o=new Map,s=new Map,c=new Map,l=n(e.status),u=n(e.loadedAt),d=n(e.isLoading),f=n(e.isTransitioning),p=n(e.location),m=n(e.resolvedLocation),h=n(e.statusCode),g=n(e.redirect),_=n([]),v=n([]),y=n([]),b=r(()=>An(o,_.get())),x=r(()=>An(s,v.get())),S=r(()=>An(c,y.get())),C=r(()=>_.get()[0]),w=r(()=>_.get().some(e=>o.get(e)?.get().status===`pending`)),T=r(()=>({locationHref:p.get().href,resolvedLocationHref:m.get()?.href,status:l.get()})),E=r(()=>({status:l.get(),loadedAt:u.get(),isLoading:d.get(),isTransitioning:f.get(),matches:b.get(),location:p.get(),resolvedLocation:m.get(),statusCode:h.get(),redirect:g.get()})),D=ct(64);function O(e){let t=D.get(e);return t||(t=r(()=>{let t=_.get();for(let n of t){let t=o.get(n);if(t&&t.routeId===e)return t.get()}}),D.set(e,t)),t}let k={status:l,loadedAt:u,isLoading:d,isTransitioning:f,location:p,resolvedLocation:m,statusCode:h,redirect:g,matchesId:_,pendingIds:v,cachedIds:y,matches:b,pendingMatches:x,cachedMatches:S,firstId:C,hasPending:w,matchRouteDeps:T,matchStores:o,pendingMatchStores:s,cachedMatchStores:c,__store:E,getRouteMatchStore:O,setMatches:ee,setPending:A,setCached:j};ee(e.matches),a?.(k);function ee(e){jn(e,o,_,n,i)}function A(e){jn(e,s,v,n,i)}function j(e){jn(e,c,y,n,i)}return k}function An(e,t){let n=[];for(let r of t){let t=e.get(r);t&&n.push(t.get())}return n}function jn(e,t,n,r,i){let a=e.map(e=>e.id),o=new Set(a);i(()=>{for(let e of t.keys())o.has(e)||t.delete(e);for(let n of e){let e=t.get(n.id);if(!e){let e=r(n);e.routeId=n.routeId,t.set(n.id,e);continue}e.routeId=n.routeId,e.get()!==n&&e.set(n)}ot(n.get(),a)||n.set(a)})}var Mn=`__TSR_index`,Nn=`popstate`,Pn=`beforeunload`;function Fn(e){let t=e.getLocation(),n=new Set,r=r=>{t=e.getLocation(),n.forEach(e=>e({location:t,action:r}))},i=n=>{e.notifyOnIndexChange??!0?r(n):t=e.getLocation()},a=async({task:n,navigateOpts:r,...i})=>{if(r?.ignoreBlocker??!1){n();return}let a=e.getBlockers?.()??[],o=i.type===`PUSH`||i.type===`REPLACE`;if(typeof document<`u`&&a.length&&o)for(let n of a){let r=zn(i.path,i.state);if(await n.blockerFn({currentLocation:t,nextLocation:r,action:i.type})){e.onBlocked?.();return}}n()};return{get location(){return t},get length(){return e.getLength()},subscribers:n,subscribe:e=>(n.add(e),()=>{n.delete(e)}),push:(n,i,o)=>{let s=t.state[Mn];i=In(s+1,i),a({task:()=>{e.pushState(n,i),r({type:`PUSH`})},navigateOpts:o,type:`PUSH`,path:n,state:i})},replace:(n,i,o)=>{let s=t.state[Mn];i=In(s,i),a({task:()=>{e.replaceState(n,i),r({type:`REPLACE`})},navigateOpts:o,type:`REPLACE`,path:n,state:i})},go:(t,n)=>{a({task:()=>{e.go(t),i({type:`GO`,index:t})},navigateOpts:n,type:`GO`})},back:t=>{a({task:()=>{e.back(t?.ignoreBlocker??!1),i({type:`BACK`})},navigateOpts:t,type:`BACK`})},forward:t=>{a({task:()=>{e.forward(t?.ignoreBlocker??!1),i({type:`FORWARD`})},navigateOpts:t,type:`FORWARD`})},canGoBack:()=>t.state[Mn]!==0,createHref:t=>e.createHref(t),block:t=>{if(!e.setBlockers)return()=>{};let n=e.getBlockers?.()??[];return e.setBlockers([...n,t]),()=>{let n=e.getBlockers?.()??[];e.setBlockers?.(n.filter(e=>e!==t))}},flush:()=>e.flush?.(),destroy:()=>e.destroy?.(),notify:r}}function In(e,t){t||={};let n=Bn();return{...t,key:n,__TSR_key:n,[Mn]:e}}function Ln(e){let t=e?.window??(typeof document<`u`?window:void 0),n=t.history.pushState,r=t.history.replaceState,i=[],a=()=>i,o=e=>i=e,s=e?.createHref??(e=>e),c=e?.parseLocation??(()=>zn(`${t.location.pathname}${t.location.search}${t.location.hash}`,t.history.state));if(!t.history.state?.__TSR_key&&!t.history.state?.key){let e=Bn();t.history.replaceState({[Mn]:0,key:e,__TSR_key:e},``)}let l=c(),u,d=!1,f=!1,p=!1,m=!1,h=()=>l,g,_,v=()=>{g&&(C._ignoreSubscribers=!0,(g.isPush?t.history.pushState:t.history.replaceState)(g.state,``,g.href),C._ignoreSubscribers=!1,g=void 0,_=void 0,u=void 0)},y=(e,t,n)=>{let r=s(t);_||(u=l),l=zn(t,n),g={href:r,state:n,isPush:g?.isPush||e===`push`},_||=Promise.resolve().then(()=>v())},b=e=>{l=c(),C.notify({type:e})},x=async()=>{if(f){f=!1;return}let e=c(),n=e.state[Mn]-l.state[Mn],r=n===1,i=n===-1,o=!r&&!i||d;d=!1;let s=o?`GO`:i?`BACK`:`FORWARD`,u=o?{type:`GO`,index:n}:{type:i?`BACK`:`FORWARD`};if(p)p=!1;else{let n=a();if(typeof document<`u`&&n.length){for(let r of n)if(await r.blockerFn({currentLocation:l,nextLocation:e,action:s})){f=!0,t.history.go(1),C.notify(u);return}}}l=c(),C.notify(u)},S=e=>{if(m){m=!1;return}let t=!1,n=a();if(typeof document<`u`&&n.length)for(let e of n){let n=e.enableBeforeUnload??!0;if(n===!0){t=!0;break}if(typeof n==`function`&&n()===!0){t=!0;break}}if(t)return e.preventDefault(),e.returnValue=``},C=Fn({getLocation:h,getLength:()=>t.history.length,pushState:(e,t)=>y(`push`,e,t),replaceState:(e,t)=>y(`replace`,e,t),back:e=>(e&&(p=!0),m=!0,t.history.back()),forward:e=>{e&&(p=!0),m=!0,t.history.forward()},go:e=>{d=!0,t.history.go(e)},createHref:e=>s(e),flush:v,destroy:()=>{t.history.pushState=n,t.history.replaceState=r,t.removeEventListener(Pn,S,{capture:!0}),t.removeEventListener(Nn,x)},onBlocked:()=>{u&&l!==u&&(l=u)},getBlockers:a,setBlockers:o,notifyOnIndexChange:!1});return t.addEventListener(Pn,S,{capture:!0}),t.addEventListener(Nn,x),t.history.pushState=function(...e){let r=n.apply(t.history,e);return C._ignoreSubscribers||b(`PUSH`),r},t.history.replaceState=function(...e){let n=r.apply(t.history,e);return C._ignoreSubscribers||b(`REPLACE`),n},C}function Rn(e){let t=e.replace(/[\x00-\x1f\x7f]/g,``);return t.startsWith(`//`)&&(t=`/`+t.replace(/^\/+/,``)),t}function zn(e,t){let n=Rn(e),r=n.indexOf(`#`),i=n.indexOf(`?`),a=Bn();return{href:n,pathname:n.substring(0,r>0?i>0?Math.min(r,i):r:i>0?i:n.length),hash:r>-1?n.substring(r):``,search:i>-1?n.slice(i,r===-1?void 0:r):``,state:t||{[Mn]:0,key:a,__TSR_key:a}}}function Bn(){return(Math.random()+1).toString(36).substring(7)}function Vn(e,t){let n=t,r=e;return{fromLocation:n,toLocation:r,pathChanged:n?.pathname!==r.pathname,hrefChanged:n?.href!==r.href,hashChanged:n?.hash!==r.hash}}var Hn=new WeakMap,Un=class{constructor(e,t){this.tempLocationKey=`${Math.round(Math.random()*1e7)}`,this.resetNextScroll=!0,this.shouldViewTransition=void 0,this.isViewTransitionTypesSupported=void 0,this.subscribers=new Set,this.isScrollRestoring=!1,this.isScrollRestorationSetup=!1,this.routeBranchCache=new WeakMap,this.startTransition=e=>e(),this.update=e=>{let t=this.options,n=this.basepath??t?.basepath??`/`,r=this.basepath===void 0,i=t?.rewrite;if(this.options={...t,...e},this.isServer=this.options.isServer??typeof document>`u`,this.protocolAllowlist=new Set(this.options.protocolAllowlist),this.options.pathParamsAllowedCharacters&&(this.pathParamsDecoder=Vt(this.options.pathParamsAllowedCharacters)),(!this.history||this.options.history&&this.options.history!==this.history)&&(this.history=this.options.history?this.options.history:Ln()),this.origin=this.options.origin,this.origin||=window?.origin&&window.origin!==`null`?window.origin:`http://localhost`,this.history&&this.updateLatestLocation(),this.options.routeTree!==this.routeTree){this.routeTree=this.options.routeTree;let e;this.resolvePathCache=ct(1e3),e=this.buildRouteTree(),this.setRoutes(e)}if(!this.stores&&this.latestLocation){let e=this.getStoreConfig(this);this.batch=e.batch,this.stores=kn(Kn(this.latestLocation),e),fr(this)}let a=!1,o=this.options.basepath??`/`,s=this.options.rewrite;if(r||n!==o||i!==s){this.basepath=o;let e=[],t=Lt(o);t&&t!==`/`&&e.push(En({basepath:o})),s&&e.push(s),this.rewrite=e.length===0?void 0:e.length===1?e[0]:Tn(e),this.history&&this.updateLatestLocation(),a=!0}a&&this.stores&&this.stores.location.set(this.latestLocation),typeof window<`u`&&`CSS`in window&&typeof window.CSS?.supports==`function`&&(this.isViewTransitionTypesSupported=window.CSS.supports(`selector(:active-view-transition-type(a))`))},this.updateLatestLocation=()=>{this.latestLocation=this.parseLocation(this.history.location,this.latestLocation)},this.buildRouteTree=()=>{let e=Ct(this.routeTree,this.options.caseSensitive,(e,t)=>{e.init({originalIndex:t})});return this.options.routeMasks&&vt(this.options.routeMasks,e.processedTree),e},this.subscribe=(e,t)=>{let n={eventType:e,fn:t};return this.subscribers.add(n),()=>{this.subscribers.delete(n)}},this.emit=e=>{this.subscribers.forEach(t=>{t.eventType===e.type&&t.fn(e)})},this.parseLocation=(e,t)=>{let n=({pathname:e,search:n,hash:r,href:i,state:a})=>{if(!this.rewrite&&!/[ \x00-\x1f\x7f\u0080-\uffff]/.test(e)){let i=this.options.parseSearch(n),o=this.options.stringifySearch(i);return{href:e+o+r,publicHref:e+o+r,pathname:it(e).path,external:!1,searchStr:o,search:Ge(t?.search,i),hash:it(r.slice(1)).path,state:Ke(t?.state,a)}}let o=new URL(i,this.origin),s=Dn(this.rewrite,o),c=this.options.parseSearch(s.search),l=this.options.stringifySearch(c);return s.search=l,{href:s.href.replace(s.origin,``),publicHref:i,pathname:it(s.pathname).path,external:!!this.rewrite&&s.origin!==this.origin,searchStr:l,search:Ge(t?.search,c),hash:it(s.hash.slice(1)).path,state:Ke(t?.state,a)}},r=n(e),{__tempLocation:i,__tempKey:a}=r.state;if(i&&(!a||a===this.tempLocationKey)){let e=n(i);return e.state.key=r.state.key,e.state.__TSR_key=r.state.__TSR_key,delete e.state.__tempLocation,{...e,maskedLocation:r}}return r},this.resolvePathWithBase=(e,t)=>Bt({base:e,to:t.includes(`//`)?Pt(t):t,trailingSlash:this.options.trailingSlash,cache:this.resolvePathCache}),this.matchRoutes=(e,t,n)=>typeof e==`string`?this.matchRoutesInternal({pathname:e,search:t},n):this.matchRoutesInternal(e,t),this.getMatchedRoutes=e=>Jn({pathname:e,routesById:this.routesById,processedTree:this.processedTree}),this.cancelMatch=e=>{let t=this.getMatch(e);t&&(t.abortController.abort(),clearTimeout(t._nonReactive.pendingTimeout),t._nonReactive.pendingTimeout=void 0)},this.cancelMatches=()=>{this.stores.pendingIds.get().forEach(e=>{this.cancelMatch(e)}),this.stores.matchesId.get().forEach(e=>{if(this.stores.pendingMatchStores.has(e))return;let t=this.stores.matchStores.get(e)?.get();t&&(t.status===`pending`||t.isFetching===`loader`)&&this.cancelMatch(e)})},this.buildLocation=e=>{let t=(t={})=>{let n=t._fromLocation||this.pendingBuiltLocation||this.latestLocation,r=this.matchRoutesLightweight(n);t.from;let i=t.unsafeRelative===`path`?n.pathname:t.from??r.fullPath,a=t.to?`${t.to}`:void 0,o=r.search,s=Object.assign(Object.create(null),r.params),c=a?.charCodeAt(0)===47?`/`:this.resolvePathWithBase(i,`.`),l=a?this.resolvePathWithBase(c,a):c,u=t.params===!1||t.params===null?Object.create(null):(t.params??!0)===!0?s:Object.assign(s,Be(t.params,s)),d=this.routesByPath[It(l)],f;if(d)f=this.getRouteBranch(d);else if(l.includes(`$`))f=[];else{let e=this.getMatchedRoutes(l);f=e.matchedRoutes,this.options.notFoundRoute&&(!e.foundRoute||e.foundRoute.path!==`/`&&e.routeParams[`**`])&&(f=[...f,this.options.notFoundRoute])}if(f.length&&Ue(u))for(let e of f){let t=e.options.params?.stringify??e.options.stringifyParams;if(t)try{Object.assign(u,t(u))}catch{}}let p=e.leaveParams?l:it(Ut({path:l,params:u,decoder:this.pathParamsDecoder,server:this.isServer}).interpolatedPath).path,m=o;if(e._includeValidateSearch&&this.options.search?.strict){let e={};f.forEach(t=>{if(t.options.validateSearch)try{Object.assign(e,qn(t.options.validateSearch,{...e,...m}))}catch{}}),m=e}m=Yn({search:m,dest:t,destRoutes:f,_includeValidateSearch:e._includeValidateSearch}),m=Ge(o,m);let h=this.options.stringifySearch(m),g=t.hash===!0?n.hash:t.hash?Be(t.hash,n.hash):void 0,_=g?`#${g}`:``,v=t.state===!0?n.state:t.state?Be(t.state,n.state):{};v=Ke(n.state,v);let y=`${p}${h}${_}`,b,x,S=!1;if(this.rewrite){let e=new URL(y,this.origin),t=On(this.rewrite,e);b=e.href.replace(e.origin,``),t.origin===this.origin?x=t.pathname+t.search+t.hash:(x=t.href,S=!0)}else b=at(y),x=b;return{publicHref:x,href:b,pathname:p,search:m,searchStr:h,state:v,hash:g??``,external:S,unmaskOnReload:t.unmaskOnReload}},n=(n={},r)=>{let i=t(n),a=r?t(r):void 0;if(!a){let n=Object.create(null);if(this.options.routeMasks){let o=yt(i.pathname,this.processedTree);if(o){Object.assign(n,o.rawParams);let{from:i,params:s,...c}=o.route,l=s===!1||s===null?Object.create(null):(s??!0)===!0?n:Object.assign(n,Be(s,n));r={from:e.from,...c,params:l},a=t(r)}}}return a&&(i.maskedLocation=a),i};return e.mask?n(e,{from:e.from,...e.mask}):n(e)},this.commitLocation=async({viewTransition:e,ignoreBlocker:t,...n})=>{let r,i=()=>{let e=[`key`,`__TSR_key`,`__TSR_index`,`__hashScrollIntoViewOptions`];e.forEach(e=>{n.state[e]=this.latestLocation.state[e]});let t=Ze(n.state,this.latestLocation.state);return e.forEach(e=>{delete n.state[e]}),t},a=It(this.latestLocation.href)===It(n.href),o=this.commitLocationPromise;if(this.commitLocationPromise=Qe(()=>{o?.resolve(),o=void 0}),a&&i())this.load();else{let{maskedLocation:i,hashScrollIntoView:a,...o}=n;i&&(o={...i,state:{...i.state,__tempKey:void 0,__tempLocation:{...o,search:o.searchStr,state:{...o.state,__tempKey:void 0,__tempLocation:void 0,__TSR_key:void 0,key:void 0}}}},(o.unmaskOnReload??this.options.unmaskOnReload??!1)&&(o.state.__tempKey=this.tempLocationKey)),o.state.__hashScrollIntoViewOptions=a??this.options.defaultHashScrollIntoView??!0,this.shouldViewTransition=e,r=n.replace?`REPLACE`:`PUSH`,this.history[r===`REPLACE`?`replace`:`push`](o.publicHref,o.state,{ignoreBlocker:t})}return this.resetNextScroll=n.resetScroll??!0,this.history.subscribers.size||this.load(r?{action:{type:r}}:void 0),this.commitLocationPromise},this.buildAndCommitLocation=({replace:e,resetScroll:t,hashScrollIntoView:n,viewTransition:r,ignoreBlocker:i,href:a,...o}={})=>{if(a){let t=this.history.location.state.__TSR_index,n=zn(a,{__TSR_index:e?t:t+1}),r=new URL(n.pathname,this.origin);o.to=Dn(this.rewrite,r).pathname,o.search=this.options.parseSearch(n.search),o.hash=n.hash.slice(1)}let s=this.buildLocation({...o,_includeValidateSearch:!0});this.pendingBuiltLocation=s;let c=this.commitLocation({...s,viewTransition:r,replace:e,resetScroll:t,hashScrollIntoView:n,ignoreBlocker:i});return Promise.resolve().then(()=>{this.pendingBuiltLocation===s&&(this.pendingBuiltLocation=void 0)}),c},this.navigate=async({to:e,reloadDocument:t,href:n,publicHref:r,...i})=>{let a=!1;if(n)try{new URL(`${n}`),a=!0}catch{}if(a&&!t&&(t=!0),t){if(e!==void 0||!n){let t=this.buildLocation({to:e,...i});n??=t.publicHref,r??=t.publicHref}let t=!a&&r?r:n;if(rt(t,this.protocolAllowlist))return Promise.resolve();if(!i.ignoreBlocker){let e=this.history.getBlockers?.()??[];for(let t of e)if(t?.blockerFn&&await t.blockerFn({currentLocation:this.latestLocation,nextLocation:this.latestLocation,action:`PUSH`}))return Promise.resolve()}return i.replace?window.location.replace(t):window.location.href=t,Promise.resolve()}return this.buildAndCommitLocation({...i,href:n,to:e,_isNavigate:!0})},this.beforeLoad=()=>{this.cancelMatches(),this.updateLatestLocation();let e=this.matchRoutes(this.latestLocation),t=this.stores.cachedMatches.get().filter(t=>!e.some(e=>e.id===t.id));this.batch(()=>{this.stores.status.set(`pending`),this.stores.statusCode.set(200),this.stores.isLoading.set(!0),this.stores.location.set(this.latestLocation),this.stores.setPending(e),this.stores.setCached(t)})},this.load=async e=>{let t=e?.action?.type,n,r,i,a=this.stores.resolvedLocation.get()??this.stores.location.get();for(i=new Promise(o=>{this.startTransition(async()=>{try{this.beforeLoad(),t?Hn.set(this.latestLocation,t):Hn.delete(this.latestLocation);let n=this.latestLocation,r=Vn(n,this.stores.resolvedLocation.get());this.stores.redirect.get()||this.emit({type:`onBeforeNavigate`,...r}),this.emit({type:`onBeforeLoad`,...r}),await bn({router:this,sync:e?.sync,forceStaleReload:a.href===n.href,matches:this.stores.pendingMatches.get(),location:n,updateMatch:this.updateMatch,onReady:async()=>{this.startTransition(()=>{this.startViewTransition(async()=>{let e=null,t=null,n=null,r=null;this.batch(()=>{let i=this.stores.pendingMatches.get(),a=i.length,o=this.stores.matches.get();e=a?o.filter(e=>!this.stores.pendingMatchStores.has(e.id)):null;let s=new Set;for(let e of this.stores.pendingMatchStores.values())e.routeId&&s.add(e.routeId);let c=new Set;for(let e of this.stores.matchStores.values())e.routeId&&c.add(e.routeId);t=a?o.filter(e=>!s.has(e.routeId)):null,n=a?i.filter(e=>!c.has(e.routeId)):null,r=a?i.filter(e=>c.has(e.routeId)):o,this.stores.isLoading.set(!1),this.stores.loadedAt.set(Date.now()),a&&(this.stores.setMatches(i),this.stores.setPending([]),this.stores.setCached([...this.stores.cachedMatches.get(),...e.filter(e=>e.status!==`error`&&e.status!==`notFound`&&e.status!==`redirected`)]),this.clearExpiredCache())});for(let[e,i]of[[t,`onLeave`],[n,`onEnter`],[r,`onStay`]])if(e)for(let t of e)this.looseRoutesById[t.routeId].options[i]?.(t)})})}})}catch(e){tn(e)?(n=e,this.navigate({...n.options,replace:!0,ignoreBlocker:!0})):Gt(e)&&(r=e);let t=n?n.status:r?404:this.stores.matches.get().some(e=>e.status===`error`)?500:200;this.batch(()=>{this.stores.statusCode.set(t),this.stores.redirect.set(n)})}this.latestLoadPromise===i&&(this.commitLocationPromise?.resolve(),this.latestLoadPromise=void 0,this.commitLocationPromise=void 0),o()})}),this.latestLoadPromise=i,await i;this.latestLoadPromise&&i!==this.latestLoadPromise;)await this.latestLoadPromise;let o;this.hasNotFoundMatch()?o=404:this.stores.matches.get().some(e=>e.status===`error`)&&(o=500),o!==void 0&&this.stores.statusCode.set(o)},this.startViewTransition=e=>{let t=this.shouldViewTransition??this.options.defaultViewTransition;if(this.shouldViewTransition=void 0,t&&typeof document<`u`&&`startViewTransition`in document&&typeof document.startViewTransition==`function`){let n;if(typeof t==`object`&&this.isViewTransitionTypesSupported){let r=this.latestLocation,i=this.stores.resolvedLocation.get(),a=typeof t.types==`function`?t.types(Vn(r,i)):t.types;if(a===!1){e();return}n={update:e,types:a}}else n=e;document.startViewTransition(n)}else e()},this.updateMatch=(e,t)=>{this.startTransition(()=>{let n=this.stores.pendingMatchStores.get(e);if(n){n.set(t);return}let r=this.stores.matchStores.get(e);if(r){r.set(t);return}let i=this.stores.cachedMatchStores.get(e);if(i){let n=t(i.get());n.status===`redirected`?this.stores.cachedMatchStores.delete(e)&&this.stores.cachedIds.set(t=>t.filter(t=>t!==e)):i.set(n)}})},this.getMatch=e=>this.stores.cachedMatchStores.get(e)?.get()??this.stores.pendingMatchStores.get(e)?.get()??this.stores.matchStores.get(e)?.get(),this.invalidate=e=>{let t=t=>e?.filter?.(t)??!0?{...t,invalid:!0,...e?.forcePending||t.status===`error`||t.status===`notFound`?{status:`pending`,error:void 0}:void 0}:t;return this.batch(()=>{this.stores.setMatches(this.stores.matches.get().map(t)),this.stores.setCached(this.stores.cachedMatches.get().map(t)),this.stores.setPending(this.stores.pendingMatches.get().map(t))}),this.shouldViewTransition=!1,this.load({sync:e?.sync})},this.getParsedLocationHref=e=>e.publicHref||`/`,this.resolveRedirect=e=>{let t=e.headers.get(`Location`);if(!e.options.href||e.options._builtLocation){let t=e.options._builtLocation??this.buildLocation(e.options),n=this.getParsedLocationHref(t);e.options.href=n,e.headers.set(`Location`,n)}else if(t)try{let n=new URL(t);if(this.origin&&n.origin===this.origin){let t=n.pathname+n.search+n.hash;e.options.href=t,e.headers.set(`Location`,t)}}catch{}if(e.options.href&&!e.options._builtLocation&&rt(e.options.href,this.protocolAllowlist))throw Error(`Redirect blocked: unsafe protocol`);return e.headers.get(`Location`)||e.headers.set(`Location`,e.options.href),e},this.clearCache=e=>{let t=e?.filter;t===void 0?this.stores.setCached([]):this.stores.setCached(this.stores.cachedMatches.get().filter(e=>!t(e)))},this.clearExpiredCache=()=>{let e=Date.now();this.clearCache({filter:t=>{let n=this.looseRoutesById[t.routeId];if(!n.options.loader)return!0;let r=(t.preload?n.options.preloadGcTime??this.options.defaultPreloadGcTime:n.options.gcTime??this.options.defaultGcTime)??3e5;return t.status===`error`||e-t.updatedAt>=r}})},this.loadRouteChunk=Sn,this.preloadRoute=async e=>{let t=e._builtLocation??this.buildLocation(e),n=this.matchRoutes(t,{throwOnError:!0,preload:!0,dest:e}),r=new Set([...this.stores.matchesId.get(),...this.stores.pendingIds.get()]),i=new Set([...r,...this.stores.cachedIds.get()]),a=n.filter(e=>!i.has(e.id));if(a.length){let e=this.stores.cachedMatches.get();this.stores.setCached([...e,...a])}try{return n=await bn({router:this,matches:n,location:t,preload:!0,updateMatch:(e,t)=>{r.has(e)?n=n.map(n=>n.id===e?t(n):n):this.updateMatch(e,t)}}),n}catch(e){if(tn(e))return e.options.reloadDocument?void 0:await this.preloadRoute({...e.options,_fromLocation:t});Gt(e)||console.error(e);return}},this.matchRoute=(e,t)=>{let n={...e,to:e.to?this.resolvePathWithBase(e.from||``,e.to):void 0,params:e.params||{},leaveParams:!0},r=this.buildLocation(n);if(t?.pending&&this.stores.status.get()!==`pending`)return!1;let i=(t?.pending===void 0?!this.stores.isLoading.get():t.pending)?this.latestLocation:this.stores.resolvedLocation.get()||this.stores.location.get(),a=bt(r.pathname,t?.caseSensitive??!1,t?.fuzzy??!1,i.pathname,this.processedTree);return!a||e.params&&!Ze(a.rawParams,e.params,{partial:!0})?!1:t?.includeSearch??!0?Ze(i.search,r.search,{partial:!0})?a.rawParams:!1:a.rawParams},this.hasNotFoundMatch=()=>this.stores.matches.get().some(e=>e.status===`notFound`||e.globalNotFound),this.getStoreConfig=t,this.update({defaultPreloadDelay:50,defaultPendingMs:1e3,defaultPendingMinMs:500,context:void 0,...e,caseSensitive:e.caseSensitive??!1,notFoundMode:e.notFoundMode??`fuzzy`,stringifySearch:e.stringifySearch??Xt,parseSearch:e.parseSearch??Yt,protocolAllowlist:e.protocolAllowlist??nt}),typeof document<`u`&&(self.__TSR_ROUTER__=this)}isShell(){return!!this.options.isShell}isPrerendering(){return!!this.options.isPrerendering}get state(){return this.stores.__store.get()}setRoutes({routesById:e,routesByPath:t,processedTree:n}){this.routesById=e,this.routesByPath=t,this.processedTree=n;let r=this.options.notFoundRoute;r&&(r.init({originalIndex:99999999999}),this.routesById[r.id]=r)}getRouteBranch(e){let t=this.routeBranchCache.get(e);return t||(t=Et(e),this.routeBranchCache.set(e,t)),t}get looseRoutesById(){return this.routesById}getParentContext(e){return e?.id?e.context??this.options.context??void 0:this.options.context??void 0}matchRoutesInternal(e,t){let n=this.getMatchedRoutes(e.pathname),{foundRoute:r,routeParams:i}=n,{matchedRoutes:a}=n,o=!1;(r?r.path!==`/`&&i[`**`]:It(e.pathname))&&(this.options.notFoundRoute?a=[...a,this.options.notFoundRoute]:o=!0);let s=o?Zn(this.options.notFoundMode,a):void 0,c=Array(a.length),l=new Map;for(let e of this.stores.matchStores.values())e.routeId&&l.set(e.routeId,e.get());for(let n=0;nthis.navigate({...t,_fromLocation:e}),buildLocation:this.buildLocation,cause:n.cause,abortController:n.abortController,preload:!!n.preload,matches:c,routeId:r.id};n.__routeContext=r.options.context(t)??void 0}n.context={...a,...n.__routeContext,...n.__beforeLoadContext}}}return c}matchRoutesLightweight(e){let{matchedRoutes:t,routeParams:n}=this.getMatchedRoutes(e.pathname),r=V(t),i={...e.search};for(let e of t)try{Object.assign(i,qn(e.options.validateSearch,i))}catch{}let a=V(this.stores.matchesId.get()),o=a&&this.stores.matchStores.get(a)?.get(),s=o&&o.routeId===r.id&&o.pathname===e.pathname,c;if(s)c=o.params;else{let e=Object.assign(Object.create(null),n);for(let n of t)try{Qn(n,e)}catch{}c=e}return{matchedRoutes:t,fullPath:r.fullPath,search:i,params:c}}},Wn=class extends Error{},Gn=class extends Error{};function Kn(e){return{loadedAt:0,isLoading:!1,isTransitioning:!1,status:`idle`,resolvedLocation:void 0,location:e,matches:[],statusCode:200}}function qn(e,t){if(e==null)return{};if(`~standard`in e){let n=e[`~standard`].validate(t);if(n instanceof Promise)throw new Wn(`Async validation not supported`);if(n.issues)throw new Wn(JSON.stringify(n.issues,void 0,2),{cause:n});return n.value}return`parse`in e?e.parse(t):typeof e==`function`?e(t):{}}function Jn({pathname:e,routesById:t,processedTree:n}){let r=Object.create(null),i=It(e),a,o=xt(i,n,!0);return o&&(a=o.route,Object.assign(r,o.rawParams)),{matchedRoutes:o?.branch||[t.__root__],routeParams:r,foundRoute:a}}function Yn({search:e,dest:t,destRoutes:n,_includeValidateSearch:r}){return Xn(n)(e,t,r??!1)}function Xn(e){let t={dest:null,_includeValidateSearch:!1,middlewares:[]};for(let n of e)`search`in n.options?n.options.search?.middlewares&&t.middlewares.push(...n.options.search.middlewares):(n.options.preSearchFilters||n.options.postSearchFilters)&&t.middlewares.push(({search:e,next:t})=>{let r=e;`preSearchFilters`in n.options&&n.options.preSearchFilters&&(r=n.options.preSearchFilters.reduce((e,t)=>t(e),e));let i=t(r);return`postSearchFilters`in n.options&&n.options.postSearchFilters?n.options.postSearchFilters.reduce((e,t)=>t(e),i):i}),n.options.validateSearch&&t.middlewares.push(({search:e,next:r})=>{let i=r(e);if(!t._includeValidateSearch)return i;try{return{...i,...qn(n.options.validateSearch,i)??void 0}}catch{return i}});t.middlewares.push(({search:e})=>{let n=t.dest;return n.search?n.search===!0?e:Be(n.search,e):{}});let n=(e,t,r)=>{if(e>=r.length)return t;let i=r[e];return i({search:t,next:t=>n(e+1,t,r)})};return function(e,r,i){return t.dest=r,t._includeValidateSearch=i,n(0,e,t.middlewares)}}function Zn(e,t){if(e!==`root`)for(let e=t.length-1;e>=0;e--){let n=t[e];if(n.children)return n.id}return $t}function Qn(e,t){let n=e.options.params?.parse??e.options.parseParams;if(n){let e=n(t);if(e===!1)throw Error(`Route params.parse returned false for a matched route`);Object.assign(t,e)}}function $n(){try{return sessionStorage}catch{return}}var er=`tsr-scroll-restoration-v1_3`,tr=$n();function nr(){try{return JSON.parse(tr?.getItem(`tsr-scroll-restoration-v1_3`)||`{}`)}catch{return{}}}function rr(){try{tr?.setItem(er,JSON.stringify(ir))}catch{}}var ir=nr(),ar=`data-scroll-restoration-id`,or=e=>e.state.__TSR_key||e.href;function sr(e){let t=e.getAttribute(ar);if(t)return`[${ar}="${t}"]`;let n=``,r=e,i;for(;i=r.parentNode;){let e=1,t=r;for(;t=t.previousElementSibling;)e++;let a=`${r.localName}:nth-child(${e})`;n=n?`${a} > ${n}`:a,r=i}return n}var cr=!1,lr=`window`;function ur(e){try{return typeof e==`function`?e():document.querySelector(e)}catch{}}function dr(e){let t=[];for(let n of e){if(n===lr)continue;let e=ur(n);e&&t.push(e)}return t}function fr(e,t){if((t??e.options.scrollRestoration)&&(e.isScrollRestoring=!0),e.isScrollRestorationSetup)return;e.isScrollRestorationSetup=!0,cr=!1;let n=e.options.getScrollRestorationKey||or,r=new Map,i=(e,t,n)=>{let i=r.get(e)||{};i.scrollX=t,i.scrollY=n,r.set(e,i)};history.scrollRestoration=`manual`;let a=t=>{if(!(cr||!e.isScrollRestoring)){if(t.target===document)i(lr,scrollX,scrollY);else{let e=t.target;i(e,e.scrollLeft,e.scrollTop)}}},o=t=>{if(!e.isScrollRestoring)return;let n=ir[t]||={};for(let[e,t]of r)e===lr?n[lr]=t:e.isConnected&&(n[sr(e)]=t)};document.addEventListener(`scroll`,a,!0),e.subscribe(`onBeforeLoad`,e=>{e.fromLocation&&o(n(e.fromLocation)),r.clear()}),addEventListener(`pagehide`,()=>{o(n(e.stores.resolvedLocation.get()??e.stores.location.get())),rr()}),e.subscribe(`onRendered`,t=>{let i=e.options.scrollRestorationBehavior,a=e.options.scrollToTopSelectors,o=e.resetNextScroll,s;if(r.clear(),o||(e.resetNextScroll=!0),typeof e.options.scrollRestoration==`function`&&!e.options.scrollRestoration({location:e.latestLocation}))return;let c=n(t.toLocation),l=t.fromLocation&&n(t.fromLocation);if(e.isScrollRestoring&&l&&l!==c){let e=ir[l];if(e){let t=ir[c];for(let n in e){if(n===lr){if(o)continue}else{let e=ur(n);if(!e||o&&a&&(s??=dr(a),s.includes(e)))continue}t||=ir[c]={},t[n]??=e[n]}}}cr=!0;try{let n=t.toLocation.hash,r=t.toLocation.state.__hashScrollIntoViewOptions??!0,l=!1;if(o){let o=Hn.get(t.toLocation),u=n&&r&&(o===`PUSH`||o===`REPLACE`),d=e.isScrollRestoring?ir[c]:void 0;if(d)for(let e in d){let{scrollX:t,scrollY:n}=d[e];if(e===lr){if(u)continue;scrollTo({top:n,left:t,behavior:i}),l=!0}else{let r=ur(e);r&&(r.scrollLeft=t,r.scrollTop=n)}}if(!l&&!n){let e={top:0,left:0,behavior:i};if(scrollTo(e),a){s??=dr(a);for(let t of s)t.scrollTo(e)}}}!l&&n&&r&&document.getElementById(n)?.scrollIntoView(r)}finally{cr=!1}})}var pr=`Error preloading route! ☝️`,mr=class{get to(){return this._to}get id(){return this._id}get path(){return this._path}get fullPath(){return this._fullPath}constructor(e){if(this.init=e=>{this.originalIndex=e.originalIndex;let t=this.options,n=!t?.path&&!t?.id;this.parentRoute=this.options.getParentRoute?.(),n?this._path=$t:this.parentRoute||st();let r=n?$t:t?.path;r&&r!==`/`&&(r=Ft(r));let i=t?.id||r,a=n?$t:Nt([this.parentRoute.id===`__root__`?``:this.parentRoute.id,i]);r===`__root__`&&(r=`/`),a!==`__root__`&&(a=Nt([`/`,a]));let o=a===`__root__`?`/`:Nt([this.parentRoute.fullPath,r]);this._path=r,this._id=a,this._fullPath=o,this._to=It(o)},this.addChildren=e=>this._addFileChildren(e),this._addFileChildren=e=>(Array.isArray(e)&&(this.children=e),typeof e==`object`&&e&&(this.children=Object.values(e)),this),this._addFileTypes=()=>this,this.updateLoader=e=>(Object.assign(this.options,e),this),this.update=e=>(Object.assign(this.options,e),this),this.lazy=e=>(this.lazyFn=e,this),this.redirect=e=>en({from:this.fullPath,...e}),this.options=e||{},this.isRoot=!e?.getParentRoute,e?.id&&e?.path)throw Error(`Route cannot have both an 'id' and a 'path' option.`)}},hr=class extends mr{constructor(e){super(e)}};function gr(e){let t=e.errorComponent??vr;return(0,z.jsx)(_r,{getResetKey:e.getResetKey,onCatch:e.onCatch,children:({error:n,reset:r})=>n?R.createElement(t,{error:n,reset:r}):e.children})}var _r=class extends R.Component{constructor(...e){super(...e),this.state={error:null}}static getDerivedStateFromProps(e,t){let n=e.getResetKey();return t.error&&t.resetKey!==n?{resetKey:n,error:null}:{resetKey:n}}static getDerivedStateFromError(e){return{error:e}}reset(){this.setState({error:null})}componentDidCatch(e,t){this.props.onCatch&&this.props.onCatch(e,t)}render(){return this.props.children({error:this.state.error,reset:()=>{this.reset()}})}};function vr({error:e}){let[t,n]=R.useState(!1);return(0,z.jsxs)(`div`,{style:{padding:`.5rem`,maxWidth:`100%`},children:[(0,z.jsxs)(`div`,{style:{display:`flex`,alignItems:`center`,gap:`.5rem`},children:[(0,z.jsx)(`strong`,{style:{fontSize:`1rem`},children:`Something went wrong!`}),(0,z.jsx)(`button`,{style:{appearance:`none`,fontSize:`.6em`,border:`1px solid currentColor`,padding:`.1rem .2rem`,fontWeight:`bold`,borderRadius:`.25rem`},onClick:()=>n(e=>!e),children:t?`Hide Error`:`Show Error`})]}),(0,z.jsx)(`div`,{style:{height:`.25rem`}}),t?(0,z.jsx)(`div`,{children:(0,z.jsx)(`pre`,{style:{fontSize:`.7em`,border:`1px solid red`,borderRadius:`.25rem`,padding:`.3rem`,color:`red`,overflow:`auto`},children:e.message?(0,z.jsx)(`code`,{children:e.message}):null})}):null]})}function yr({children:e,fallback:t=null}){return br()?(0,z.jsx)(R.Fragment,{children:e}):(0,z.jsx)(R.Fragment,{children:t})}function br(){return R.useSyncExternalStore(xr,()=>!0,()=>!1)}function xr(){return()=>{}}var Sr=R.createContext(null);function Cr(e){return R.useContext(Sr)}var wr=R.createContext(void 0),Tr=R.createContext(void 0),Er=(e=>(e[e.None=0]=`None`,e[e.Mutable=1]=`Mutable`,e[e.Watching=2]=`Watching`,e[e.RecursedCheck=4]=`RecursedCheck`,e[e.Recursed=8]=`Recursed`,e[e.Dirty=16]=`Dirty`,e[e.Pending=32]=`Pending`,e))(Er||{});function Dr({update:e,notify:t,unwatched:n}){return{link:r,unlink:i,propagate:a,checkDirty:o,shallowPropagate:s};function r(e,t,n){let r=t.depsTail;if(r!==void 0&&r.dep===e)return;let i=r===void 0?t.deps:r.nextDep;if(i!==void 0&&i.dep===e){i.version=n,t.depsTail=i;return}let a=e.subsTail;if(a!==void 0&&a.version===n&&a.sub===t)return;let o=t.depsTail=e.subsTail={version:n,dep:e,sub:t,prevDep:r,nextDep:i,prevSub:a,nextSub:void 0};i!==void 0&&(i.prevDep=o),r===void 0?t.deps=o:r.nextDep=o,a===void 0?e.subs=o:a.nextSub=o}function i(e,t=e.sub){let r=e.dep,i=e.prevDep,a=e.nextDep,o=e.nextSub,s=e.prevSub;return a===void 0?t.depsTail=i:a.prevDep=i,i===void 0?t.deps=a:i.nextDep=a,o===void 0?r.subsTail=s:o.prevSub=s,s===void 0?(r.subs=o)===void 0&&n(r):s.nextSub=o,a}function a(e){let n=e.nextSub,r;top:do{let i=e.sub,a=i.flags;if(a&60?a&12?a&4?!(a&48)&&c(e,i)?(i.flags=a|40,a&=1):a=0:i.flags=a&-9|32:a=0:i.flags=a|32,a&2&&t(i),a&1){let t=i.subs;if(t!==void 0){let i=(e=t).nextSub;i!==void 0&&(r={value:n,prev:r},n=i);continue}}if((e=n)!==void 0){n=e.nextSub;continue}for(;r!==void 0;)if(e=r.value,r=r.prev,e!==void 0){n=e.nextSub;continue top}break}while(!0)}function o(t,n){let r,i=0,a=!1;top:do{let o=t.dep,c=o.flags;if(n.flags&16)a=!0;else if((c&17)==17){if(e(o)){let e=o.subs;e.nextSub!==void 0&&s(e),a=!0}}else if((c&33)==33){(t.nextSub!==void 0||t.prevSub!==void 0)&&(r={value:t,prev:r}),t=o.deps,n=o,++i;continue}if(!a){let e=t.nextDep;if(e!==void 0){t=e;continue}}for(;i--;){let i=n.subs,o=i.nextSub!==void 0;if(o?(t=r.value,r=r.prev):t=i,a){if(e(n)){o&&s(i),n=t.sub;continue}a=!1}else n.flags&=-33;n=t.sub;let c=t.nextDep;if(c!==void 0){t=c;continue top}}return a}while(!0)}function s(e){do{let n=e.sub,r=n.flags;(r&48)==32&&(n.flags=r|16,(r&6)==2&&t(n))}while((e=e.nextSub)!==void 0)}function c(e,t){let n=t.depsTail;for(;n!==void 0;){if(n===e)return!0;n=n.prevDep}return!1}}function Or(e,t,n){let r=typeof e==`object`,i=r?e:void 0;return{next:(r?e.next:e)?.bind(i),error:(r?e.error:t)?.bind(i),complete:(r?e.complete:n)?.bind(i)}}var kr=[],Ar=0,{link:jr,unlink:Mr,propagate:Nr,checkDirty:Pr,shallowPropagate:Fr}=Dr({update(e){return e._update()},notify(e){kr[Lr++]=e,e.flags&=~Er.Watching},unwatched(e){e.depsTail!==void 0&&(e.depsTail=void 0,e.flags=Er.Mutable|Er.Dirty,Vr(e))}}),Ir=0,Lr=0,Rr,zr=0;function Br(e){try{++zr,e()}finally{--zr||Hr()}}function Vr(e){let t=e.depsTail,n=t===void 0?e.deps:t.nextDep;for(;n!==void 0;)n=Mr(n,e)}function Hr(){if(!(zr>0)){for(;Ir{i.get(),n.current?t.next?.(i._snapshot):n.current=!0});return{unsubscribe:()=>{r.stop()}}},_update(e){let a=Rr,o=t?.compare??Object.is;if(n)Rr=i,++Ar,i.depsTail=void 0;else if(e===void 0)return!1;n&&(i.flags=Er.Mutable|Er.RecursedCheck);try{let t=i._snapshot,a=typeof e==`function`?e(t):e===void 0&&n?r(t):e;return t===void 0||!o(t,a)?(i._snapshot=a,!0):!1}finally{Rr=a,n&&(i.flags&=~Er.RecursedCheck),Vr(i)}}};return n?(i.flags=Er.Mutable|Er.Dirty,i.get=function(){let e=i.flags;if(e&Er.Dirty||e&Er.Pending&&Pr(i.deps,i)){if(i._update()){let e=i.subs;e!==void 0&&Fr(e)}}else e&Er.Pending&&(i.flags=e&~Er.Pending);return Rr!==void 0&&jr(i,Rr,Ar),i._snapshot}):i.set=function(e){if(i._update(e)){let e=i.subs;e!==void 0&&(Nr(e),Fr(e),Hr())}},i}function Wr(e){let t=()=>{let t=Rr;Rr=n,++Ar,n.depsTail=void 0,n.flags=Er.Watching|Er.RecursedCheck;try{return e()}finally{Rr=t,n.flags&=~Er.RecursedCheck,Vr(n)}},n={deps:void 0,depsTail:void 0,subs:void 0,subsTail:void 0,flags:Er.Watching|Er.RecursedCheck,notify(){let e=this.flags;e&Er.Dirty||e&Er.Pending&&Pr(this.deps,this)?t():this.flags=Er.Watching},stop(){this.flags=Er.None,this.depsTail=void 0,Vr(this)}};return t(),n}var Gr=o((e=>{var t=f();function n(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var r=typeof Object.is==`function`?Object.is:n,i=t.useState,a=t.useEffect,o=t.useLayoutEffect,s=t.useDebugValue;function c(e,t){var n=t(),r=i({inst:{value:n,getSnapshot:t}}),c=r[0].inst,u=r[1];return o(function(){c.value=n,c.getSnapshot=t,l(c)&&u({inst:c})},[e,n,t]),a(function(){return l(c)&&u({inst:c}),e(function(){l(c)&&u({inst:c})})},[e]),s(n),n}function l(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch{return!0}}function u(e,t){return t()}var d=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?u:c;e.useSyncExternalStore=t.useSyncExternalStore===void 0?d:t.useSyncExternalStore})),Kr=o(((e,t)=>{t.exports=Gr()})),qr=o((e=>{var t=f(),n=Kr();function r(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var i=typeof Object.is==`function`?Object.is:r,a=n.useSyncExternalStore,o=t.useRef,s=t.useEffect,c=t.useMemo,l=t.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,u){var d=o(null);if(d.current===null){var f={hasValue:!1,value:null};d.current=f}else f=d.current;d=c(function(){function e(e){if(!a){if(a=!0,o=e,e=r(e),u!==void 0&&f.hasValue){var t=f.value;if(u(t,e))return s=t}return s=e}if(t=s,i(o,e))return t;var n=r(e);return u!==void 0&&u(t,n)?(o=e,t):(o=e,s=n)}var a=!1,o,s,c=n===void 0?null:n;return[function(){return e(t())},c===null?void 0:function(){return e(c())}]},[t,n,r,u]);var p=a(e,d[0],d[1]);return s(function(){f.hasValue=!0,f.value=p},[p]),l(p),p}})),Jr=o(((e,t)=>{t.exports=qr()}))();function Yr(e,t){return e===t}function Xr(e,t,n=Yr){let r=(0,R.useCallback)(t=>{if(!e)return()=>{};let{unsubscribe:n}=e.subscribe(t);return n},[e]),i=(0,R.useCallback)(()=>e?.get(),[e]);return(0,Jr.useSyncExternalStoreWithSelector)(r,i,i,t,n)}var Zr={get:()=>void 0,subscribe:()=>({unsubscribe:()=>{}})};function Qr(e){let t=Cr(),n=R.useContext(e.from?Tr:wr),r=e.from??n,i=r?e.from?t.stores.getRouteMatchStore(r):t.stores.matchStores.get(r):void 0,a=R.useRef(void 0);return Xr(i??Zr,n=>{if((e.shouldThrow??!0)&&!n&&st(),n===void 0)return;let r=e.select?e.select(n):n;if(e.structuralSharing??t.options.defaultStructuralSharing){let e=Ke(a.current,r);return a.current=e,e}return r})}function $r(e){return Qr({from:e.from,strict:e.strict,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.loaderData):t.loaderData})}function ei(e){let{select:t,...n}=e;return Qr({...n,select:e=>t?t(e.loaderDeps):e.loaderDeps})}function ti(e){return Qr({from:e.from,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,strict:e.strict,select:t=>{let n=e.strict===!1?t.params:t._strictParams;return e.select?e.select(n):n}})}function ni(e){return Qr({from:e.from,strict:e.strict,shouldThrow:e.shouldThrow,structuralSharing:e.structuralSharing,select:t=>e.select?e.select(t.search):t.search})}function ri(e){let t=Cr();return R.useCallback(n=>t.navigate({...n,from:n.from??e?.from}),[e?.from,t])}function ii(e){let t=Cr(),n=ri(),r=R.useRef(null);return Ie(()=>{r.current!==e&&(n(e),r.current=e)},[t,e,n]),null}function ai(e){return Qr({...e,select:t=>e.select?e.select(t.context):t.context})}var oi=m();function si(e,t){let n=Cr(),r=Re(t),{activeProps:i,inactiveProps:a,activeOptions:o,to:s,preload:c,preloadDelay:l,preloadIntentProximity:u,hashScrollIntoView:d,replace:f,startTransition:p,resetScroll:m,viewTransition:h,children:g,target:_,disabled:v,style:y,className:b,onClick:x,onBlur:S,onFocus:C,onMouseEnter:w,onMouseLeave:T,onTouchStart:E,ignoreBlocker:D,params:O,search:k,hash:ee,state:A,mask:j,reloadDocument:te,unsafeRelative:ne,from:re,_fromLocation:M,...N}=e,ie=br(),ae=R.useMemo(()=>e,[n,e.from,e._fromLocation,e.hash,e.to,e.search,e.params,e.state,e.mask,e.unsafeRelative]),oe=Xr(n.stores.location,e=>e,(e,t)=>e.href===t.href),P=R.useMemo(()=>{let e={_fromLocation:oe,...ae};return n.buildLocation(e)},[n,oe,ae]),F=P.maskedLocation?P.maskedLocation.publicHref:P.publicHref,I=P.maskedLocation?P.maskedLocation.external:P.external,se=R.useMemo(()=>gi(F,I,n.history,v),[v,I,F,n.history]),ce=R.useMemo(()=>{if(se?.external)return rt(se.href,n.protocolAllowlist)?void 0:se.href;if(!_i(s)&&typeof s==`string`&&s.indexOf(`:`)!==-1)try{return new URL(s),rt(s,n.protocolAllowlist)?void 0:s}catch{}},[s,se,n.protocolAllowlist]),le=R.useMemo(()=>{if(ce)return!1;if(o?.exact){if(!zt(oe.pathname,P.pathname,n.basepath))return!1}else{let e=Rt(oe.pathname,n.basepath),t=Rt(P.pathname,n.basepath);if(!(e.startsWith(t)&&(e.length===t.length||e[t.length]===`/`)))return!1}return(o?.includeSearch??!0)&&!Ze(oe.search,P.search,{partial:!o?.exact,ignoreUndefined:!o?.explicitUndefined})?!1:!o?.includeHash||ie&&oe.hash===P.hash},[o?.exact,o?.explicitUndefined,o?.includeHash,o?.includeSearch,oe,ce,ie,P.hash,P.pathname,P.search,n.basepath]),ue=le?Be(i,{})??li:ci,de=le?ci:Be(a,{})??ci,fe=[b,ue.className,de.className].filter(Boolean).join(` `),pe=(y||ue.style||de.style)&&{...y,...ue.style,...de.style},[me,he]=R.useState(!1),ge=R.useRef(!1),_e=e.reloadDocument||ce?!1:c??n.options.defaultPreload,ve=l??n.options.defaultPreloadDelay??0,ye=R.useCallback(()=>{n.preloadRoute({...ae,_builtLocation:P}).catch(e=>{console.warn(e),console.warn(pr)})},[n,ae,P]);Le(r,R.useCallback(e=>{e?.isIntersecting&&ye()},[ye]),mi,{disabled:!!v||_e!==`viewport`}),R.useEffect(()=>{ge.current||!v&&_e===`render`&&(ye(),ge.current=!0)},[v,ye,_e]);let be=e=>{let t=e.currentTarget.getAttribute(`target`),r=_===void 0?t:_;if(!v&&!yi(e)&&!e.defaultPrevented&&(!r||r===`_self`)&&e.button===0){e.preventDefault(),(0,oi.flushSync)(()=>{he(!0)});let t=n.subscribe(`onResolved`,()=>{t(),he(!1)});n.navigate({...ae,replace:f,resetScroll:m,hashScrollIntoView:d,startTransition:p,viewTransition:h,ignoreBlocker:D})}};if(ce)return{...N,ref:r,href:ce,...g&&{children:g},..._&&{target:_},...v&&{disabled:v},...y&&{style:y},...b&&{className:b},...x&&{onClick:x},...S&&{onBlur:S},...C&&{onFocus:C},...w&&{onMouseEnter:w},...T&&{onMouseLeave:T},...E&&{onTouchStart:E}};let xe=e=>{if(v||_e!==`intent`)return;if(!ve){ye();return}let t=e.currentTarget;if(pi.has(t))return;let n=setTimeout(()=>{pi.delete(t),ye()},ve);pi.set(t,n)},Se=e=>{v||_e!==`intent`||ye()},Ce=e=>{if(v||!_e||!ve)return;let t=e.currentTarget,n=pi.get(t);n&&(clearTimeout(n),pi.delete(t))};return{...N,...ue,...de,href:se?.href,ref:r,onClick:hi([x,be]),onBlur:hi([S,Ce]),onFocus:hi([C,xe]),onMouseEnter:hi([w,xe]),onMouseLeave:hi([T,Ce]),onTouchStart:hi([E,Se]),disabled:!!v,target:_,...pe&&{style:pe},...fe&&{className:fe},...v&&ui,...le&&di,...ie&&me&&fi}}var ci={},li={className:`active`},ui={role:`link`,"aria-disabled":!0},di={"data-status":`active`,"aria-current":`page`},fi={"data-transitioning":`transitioning`},pi=new WeakMap,mi={rootMargin:`100px`},hi=e=>t=>{for(let n of e)if(n){if(t.defaultPrevented)return;n(t)}};function gi(e,t,n,r){if(!r)return t?{href:e,external:!0}:{href:n.createHref(e)||`/`,external:!1}}function _i(e){if(typeof e!=`string`)return!1;let t=e.charCodeAt(0);return t===47?e.charCodeAt(1)!==47:t===46}var vi=R.forwardRef((e,t)=>{let{_asChild:n,...r}=e,{type:i,...a}=si(r,t),o=typeof r.children==`function`?r.children({isActive:a[`data-status`]===`active`}):r.children;if(!n){let{disabled:e,...t}=a;return R.createElement(`a`,t,o)}return R.createElement(n,a,o)});function yi(e){return!!(e.metaKey||e.altKey||e.ctrlKey||e.shiftKey)}var bi=class extends mr{constructor(e){super(e),this.useMatch=e=>Qr({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>ai({...e,from:this.id}),this.useSearch=e=>ni({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>ti({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>ei({...e,from:this.id}),this.useLoaderData=e=>$r({...e,from:this.id}),this.useNavigate=()=>ri({from:this.fullPath}),this.Link=R.forwardRef((e,t)=>(0,z.jsx)(vi,{ref:t,from:this.fullPath,...e}))}};function xi(e){return new bi(e)}var Si=class extends hr{constructor(e){super(e),this.useMatch=e=>Qr({select:e?.select,from:this.id,structuralSharing:e?.structuralSharing}),this.useRouteContext=e=>ai({...e,from:this.id}),this.useSearch=e=>ni({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useParams=e=>ti({select:e?.select,structuralSharing:e?.structuralSharing,from:this.id}),this.useLoaderDeps=e=>ei({...e,from:this.id}),this.useLoaderData=e=>$r({...e,from:this.id}),this.useNavigate=()=>ri({from:this.fullPath}),this.Link=R.forwardRef((e,t)=>(0,z.jsx)(vi,{ref:t,from:this.fullPath,...e}))}};function Ci(e){return new Si(e)}function wi(e){let t=Cr(),n=`not-found-${Xr(t.stores.location,e=>e.pathname)}-${Xr(t.stores.status,e=>e)}`;return(0,z.jsx)(gr,{getResetKey:()=>n,onCatch:(t,n)=>{if(Gt(t))e.onCatch?.(t,n);else throw t},errorComponent:({error:t})=>{if(Gt(t))return e.fallback?.(t);throw t},children:e.children})}function Ti(){return(0,z.jsx)(`p`,{children:`Not Found`})}function Ei(e){return(0,z.jsx)(z.Fragment,{children:e.children})}function Di(e,t,n){return t.options.notFoundComponent?(0,z.jsx)(t.options.notFoundComponent,{...n}):e.options.defaultNotFoundComponent?(0,z.jsx)(e.options.defaultNotFoundComponent,{...n}):(0,z.jsx)(Ti,{})}var Oi=R.memo(function({matchId:e}){let t=Cr(),n=t.stores.matchStores.get(e);n||st();let r=Xr(t.stores.loadedAt,e=>e),i=Xr(n,e=>e);return(0,z.jsx)(ki,{router:t,matchId:e,resetKey:r,matchState:R.useMemo(()=>{let e=i.routeId,n=t.routesById[e].parentRoute?.id;return{routeId:e,ssr:i.ssr,_displayPending:i._displayPending,parentRouteId:n}},[i._displayPending,i.routeId,i.ssr,t.routesById])})});function ki({router:e,matchId:t,resetKey:n,matchState:r}){let i=e.routesById[r.routeId],a=i.options.pendingComponent??e.options.defaultPendingComponent,o=a?(0,z.jsx)(a,{}):null,s=i.options.errorComponent??e.options.defaultErrorComponent,c=i.options.onCatch??e.options.defaultOnCatch,l=i.isRoot?i.options.notFoundComponent??e.options.notFoundRoute?.options.component:i.options.notFoundComponent,u=r.ssr===!1||r.ssr===`data-only`,d=(!i.isRoot||i.options.wrapInSuspense||u)&&(i.options.wrapInSuspense??a??(i.options.errorComponent?.preload||u))?R.Suspense:Ei,f=s?gr:Ei,p=l?wi:Ei;return(0,z.jsxs)(i.isRoot?i.options.shellComponent??Ei:Ei,{children:[(0,z.jsx)(wr.Provider,{value:t,children:(0,z.jsx)(d,{fallback:o,children:(0,z.jsx)(f,{getResetKey:()=>n,errorComponent:s||vr,onCatch:(e,t)=>{if(Gt(e))throw e.routeId??=r.routeId,e;c?.(e,t)},children:(0,z.jsx)(p,{fallback:e=>{if(e.routeId??=r.routeId,!l||e.routeId&&e.routeId!==r.routeId||!e.routeId&&!i.isRoot)throw e;return R.createElement(l,e)},children:u||r._displayPending?(0,z.jsx)(yr,{fallback:o,children:(0,z.jsx)(ji,{matchId:t})}):(0,z.jsx)(ji,{matchId:t})})})})}),r.parentRouteId===`__root__`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(Ai,{resetKey:n}),(e.options.scrollRestoration,null)]}):null]})}function Ai({resetKey:e}){let t=Cr(),n=R.useRef(void 0);return Ie(()=>{let e=t.latestLocation.href;(n.current===void 0||n.current!==e)&&(t.emit({type:`onRendered`,...Vn(t.stores.location.get(),t.stores.resolvedLocation.get())}),n.current=e)},[t.latestLocation.state.__TSR_key,e,t]),null}var ji=R.memo(function({matchId:e}){let t=Cr(),n=(e,n)=>t.getMatch(e.id)?._nonReactive[n]??e._nonReactive[n],r=t.stores.matchStores.get(e);r||st();let i=Xr(r,e=>e),a=i.routeId,o=t.routesById[a],s=R.useMemo(()=>{let e=(t.routesById[a].options.remountDeps??t.options.defaultRemountDeps)?.({routeId:a,loaderDeps:i.loaderDeps,params:i._strictParams,search:i._strictSearch});return e?JSON.stringify(e):void 0},[a,i.loaderDeps,i._strictParams,i._strictSearch,t.options.defaultRemountDeps,t.routesById]),c=R.useMemo(()=>{let e=o.options.component??t.options.defaultComponent;return e?(0,z.jsx)(e,{},s):(0,z.jsx)(Mi,{})},[s,o.options.component,t.options.defaultComponent]);if(i._displayPending)throw n(i,`displayPendingPromise`);if(i._forcePending)throw n(i,`minPendingPromise`);if(i.status===`pending`){let e=o.options.pendingMinMs??t.options.defaultPendingMinMs;if(e){let n=t.getMatch(i.id);if(n&&!n._nonReactive.minPendingPromise){let t=Qe();n._nonReactive.minPendingPromise=t,setTimeout(()=>{t.resolve(),n._nonReactive.minPendingPromise=void 0},e)}}throw n(i,`loadPromise`)}if(i.status===`notFound`)return Gt(i.error)||st(),Di(t,o,i.error);if(i.status===`redirected`)throw tn(i.error)||st(),n(i,`loadPromise`);if(i.status===`error`)throw i.error;return c}),Mi=R.memo(function(){let e=Cr(),t=R.useContext(wr),n,r=!1,i;{let a=t?e.stores.matchStores.get(t):void 0;[n,r]=Xr(a,e=>[e?.routeId,e?.globalNotFound??!1]),i=Xr(e.stores.matchesId,e=>e[e.findIndex(e=>e===t)+1])}let a=n?e.routesById[n]:void 0,o=e.options.defaultPendingComponent?(0,z.jsx)(e.options.defaultPendingComponent,{}):null;if(r)return a||st(),Di(e,a,void 0);if(!i)return null;let s=(0,z.jsx)(Oi,{matchId:i});return n===`__root__`?(0,z.jsx)(R.Suspense,{fallback:o,children:s}):s});function Ni(){let e=Cr(),t=R.useRef({router:e,mounted:!1}),[n,r]=R.useState(!1),i=Xr(e.stores.isLoading,e=>e),a=Xr(e.stores.hasPending,e=>e),o=B(i),s=i||n||a,c=B(s),l=i||a,u=B(l);return e.startTransition=e=>{r(!0),R.startTransition(()=>{e(),r(!1)})},R.useEffect(()=>{let t=e.history.subscribe(e.load),n=e.buildLocation({to:e.latestLocation.pathname,search:!0,params:!0,hash:!0,state:!0,_includeValidateSearch:!0});return It(e.latestLocation.publicHref)!==It(n.publicHref)&&e.commitLocation({...n,replace:!0}),()=>{t()}},[e,e.history]),Ie(()=>{typeof window<`u`&&e.ssr||t.current.router===e&&t.current.mounted||(t.current={router:e,mounted:!0},(async()=>{try{await e.load()}catch(e){console.error(e)}})())},[e]),Ie(()=>{o&&!i&&e.emit({type:`onLoad`,...Vn(e.stores.location.get(),e.stores.resolvedLocation.get())})},[o,e,i]),Ie(()=>{u&&!l&&e.emit({type:`onBeforeRouteMount`,...Vn(e.stores.location.get(),e.stores.resolvedLocation.get())})},[l,u,e]),Ie(()=>{if(c&&!s){let t=Vn(e.stores.location.get(),e.stores.resolvedLocation.get());e.emit({type:`onResolved`,...t}),Br(()=>{e.stores.status.set(`idle`),e.stores.resolvedLocation.set(e.stores.location.get())})}},[s,c,e]),null}function Pi(){let e=Cr(),t=e.routesById.__root__.options.pendingComponent??e.options.defaultPendingComponent,n=t?(0,z.jsx)(t,{}):null,r=(0,z.jsxs)(typeof document<`u`&&e.ssr?Ei:R.Suspense,{fallback:n,children:[(0,z.jsx)(Ni,{}),(0,z.jsx)(Fi,{})]});return e.options.InnerWrap?(0,z.jsx)(e.options.InnerWrap,{children:r}):r}function Fi(){let e=Cr(),t=Xr(e.stores.firstId,e=>e),n=Xr(e.stores.loadedAt,e=>e),r=t?(0,z.jsx)(Oi,{matchId:t}):null;return(0,z.jsx)(wr.Provider,{value:t,children:e.options.disableGlobalCatchBoundary?r:(0,z.jsx)(gr,{getResetKey:()=>n,errorComponent:vr,onCatch:void 0,children:r})})}var Ii=e=>({createMutableStore:Ur,createReadonlyStore:Ur,batch:Br}),Li=e=>new Ri(e),Ri=class extends Un{constructor(e){super(e,Ii)}};function zi({router:e,children:t,...n}){Ue(n)&&e.update({...e.options,...n,context:{...e.options.context,...n.context}});let r=(0,z.jsx)(Sr.Provider,{value:e,children:t});return e.options.Wrap?(0,z.jsx)(e.options.Wrap,{children:r}):r}function Bi({router:e,...t}){return(0,z.jsx)(zi,{router:e,...t,children:(0,z.jsx)(Pi,{})})}var Vi=g(),Hi=(0,R.createContext)(null),Ui=`loopx-pw-locale`,Wi={en:{"common.actions":`Actions`,"common.agent":`Agent`,"common.allMessages":`All messages`,"common.cancel":`Cancel`,"common.close":`Close`,"common.closeActionReceipt":`Close action receipt`,"common.confirm":`Confirm`,"common.export":`Export`,"common.failed":`Failed`,"common.goal":`Goal`,"common.loading":`Loading…`,"common.none":`None`,"common.off":`Off`,"common.on":`On`,"common.open":`Open`,"common.owner":`Owner`,"common.readOnly":`Read only`,"common.recently":`Just now`,"common.status":`Status`,"common.task":`Task`,"common.you":`You`,"common.waiting":`Waiting`,"composer.addImage":`Add image`,"composer.agentProgress":`Ask Agent for a progress report`,"composer.agentProgressPrompt":`Give me a progress report for this Goal: completed, running, blocked, and next steps.`,"composer.attachImageHint":`Choose, paste, or drag an image`,"composer.clarifyDefer":`Deferring a Todo requires a deterministic resume condition. Add todo_done:, pr_merged:[owner/repo]#, or capacity_available:.`,"composer.clarifySingleAction":`This message contains multiple operations that may change state. Describe one operation at a time so each confirmation preview can be reviewed separately.`,"composer.createGoal":`Create Goal`,"composer.createGoalDraft":`Goal draft`,"composer.createGoalDraftDescription":`Complete the draft and send it. LoopX will show a confirmation preview first.`,"composer.createGoalDraftLead":`Create a long-term Goal:`,"composer.createGoalTemplate":`Create a long-term Goal: +Objective: +Completion criteria: +Execution boundary (optional): +Related repository (optional): +Notification method (optional):`,"composer.createGoalHint":`Insert a Goal template to review before creation`,"composer.draft":`Draft`,"composer.globalProgress":`Summarize all Goal progress`,"composer.globalProgressPrompt":`Summarize the latest progress and blockers for all active Goals.`,"composer.globalTasks":`Ask about global priorities`,"composer.globalTasksPrompt":`Which Goals need me, and what should I handle first?`,"composer.goalMessageHint":`Your message is delivered to {agent} in this Goal session.`,"composer.goalRunningHint":`{agent} is running {count} tasks · your message enters this session as guidance without interrupting it`,"composer.goalPlaceholder":`Ask or guide {goal}…`,"composer.imageAnalysisPrompt":`Analyze these images in the context of the current Goal and tell me the next step.`,"composer.imageCountError":`You can add up to {count} images.`,"composer.imagePicker":`Image file picker`,"composer.imageReadError":`Could not read image {name}.`,"composer.imageReadGenericError":`Could not read the image.`,"composer.imageSizeError":`Each image must be {size} MB or smaller.`,"composer.imageTypeError":`PNG, JPEG, WebP, and GIF images are supported.`,"composer.imagesPending":`Images to send`,"composer.immediate":`Send now`,"composer.managerMessageHint":`Your message goes to the LoopX Manager across Goals for global questions or Goal creation.`,"composer.managerPlaceholder":`Ask the LoopX Manager, or describe a new Goal…`,"composer.monitor":`Configure scheduled check`,"composer.monitorGoalQuestion":`Which Goal should receive the scheduled check?`,"composer.monitorTemplate":`Add a scheduled check for the current Goal: +Check target: +Frequency (supports 30 minutes / 2 hours / daily): Every 2 hours +Stop condition: Goal completes`,"composer.monitorTemplateWithoutGoal":`Configure a scheduled check: +Goal: +Check target: +Frequency: Every 2 hours +Stop condition: Goal completes`,"composer.monitorHint":`Fill in what to check, frequency, and stop condition before creation`,"composer.heartbeatGoalQuestion":`Which Goal should receive the Heartbeat?`,"composer.heartbeatTemplate":`Set a Heartbeat for the current Goal: +Frequency: Daily +Stop condition: Goal completes +Notification: Only notify me when needed`,"composer.heartbeatTemplateWithoutGoal":`Set up a Heartbeat: +Goal: +Frequency: Daily +Stop condition: Goal completes +Notification: Only notify me when needed`,"composer.nextAction":`Ask what’s next`,"composer.nextActionPrompt":`What should I do next?`,"composer.prepareDraft":`Insert a draft and review before sending`,"composer.send":`Send`,"composer.sendMessage":`Send a message to LoopX`,"composer.sendMessageHint":`Send message`,"composer.sentImageAlt":`Remove image {name}`,"conversation.agentPending":`Working…`,"conversation.close":`Close conversation receipt`,"conversation.convertHint":`Turn the Agent’s latest reply into a Task draft`,"conversation.full":`View full conversation`,"conversation.receipt":`Conversation receipt`,"conversation.replying":`Replying`,"conversation.title":`Manager conversation`,"conversation.toTask":`Convert to Task`,"digest.away":`Runs since your previous visit`,"digest.completed":`new completions`,"digest.failed":`new failed/interrupted runs`,"digest.needsYou":`currently need confirmation`,"feedback.applying":`Running: {title}`,"feedback.cancelFailed":`Cancel failed: {error}`,"feedback.completed":`Completed: {title}`,"feedback.executionFailed":`Execution failed: {error}`,"feedback.gateRequired":`Your confirmation is required: {summary}`,"feedback.notCompleted":`Not completed: {status}`,"feedback.goalRefreshFailed":`The Goal opened, but its latest state could not be refreshed. Use Refresh to try again.`,"feedback.preparingPreview":`Preparing confirmation preview: {title}`,"feedback.previewFailed":`Could not prepare the confirmation preview: {error}`,"feedback.sendFailed":`Send failed: {error}`,"feedback.sendGenericError":`Could not send the message. Try again later.`,"feedback.stale":`State changed, so nothing was applied. Generate a new confirmation preview.`,"feedback.taskDraftCreated":`Created a Task draft from the reply. Edit and send it to review the confirmation preview.`,"goal.defaultTitle":`New personal Goal`,"goal.initialTodo":`Work toward the completion criteria: {criteria}`,"goal.objectiveBoundary":`Execution boundary: {boundary}`,"goal.objectiveCompletion":`Completion criteria: {criteria}`,"drawer.advancedDiagnostics":`Advanced diagnostics`,"drawer.agentWorking":`Agent is continuing; the record updates automatically.`,"drawer.analysis":`Analyzing`,"drawer.apply":`Confirm and apply`,"drawer.applying":`Applying…`,"drawer.attentionBlocking":`Blocking an Agent`,"drawer.attentionWaiting":`Waiting for your decision`,"drawer.autoNotify":`Human-gate auto notifications`,"drawer.branch":`Branch`,"drawer.closeDetail":`Close details and return to {context}`,"drawer.connected":`Connected`,"drawer.correctionDescription":`The message keeps the current Goal, Todo, and Agent Session context.`,"drawer.correctionLabel":`Guide {agent}`,"drawer.correctionPlaceholder":`For example: focus on permission risks first and do not commit yet…`,"drawer.correctionSend":`Send guidance`,"drawer.correctionTextarea":`Enter guidance for Goal {goal}, Agent {agent}, Run {run}`,"drawer.copyRepository":`Copy repository identity`,"drawer.copyRepositoryDone":`Repository identity copied`,"drawer.copyRepositoryError":`Copy failed. Check browser clipboard permission.`,"drawer.copyRepositorySuccess":`Copied. You can paste it into another tool.`,"drawer.cost":`Cost 24h / 7d`,"drawer.costShort":`Cost`,"drawer.durationShort":`Duration`,"drawer.period24h":`24h`,"drawer.period7d":`7d`,"drawer.tokens":`Tokens 24h / 7d`,"drawer.tokensShort":`tokens`,"drawer.usageNotMeasured":`Not measured`,"drawer.currentGoal":`Current Goal`,"drawer.decisionDefaultEvidence":`No additional public-safe evidence is attached. The next step will still show a Preview first.`,"drawer.decisionDefaultReason":`This decision affects the next step of the current Todo.`,"drawer.decisionDefer":`Decide later`,"drawer.decisionMore":`More decisions`,"drawer.decisionReject":`Reject`,"drawer.decisionReview":`Review impact and decide`,"drawer.dependencies":`Dependencies`,"drawer.detailsAndActions":`Details & actions`,"drawer.duration":`Duration 24h / 7d`,"drawer.evidence":`Evidence`,"drawer.executionHistory":`Execution history`,"drawer.executionRecord":`Run record`,"drawer.executionRecordAndResult":`Execution & result`,"drawer.explainDecision":`Explain this decision`,"drawer.gateApproveHint":`Run one command in the terminal to complete approval:`,"drawer.gateRejectHint":`Replace approve with reject at the end to decline. This notice disappears after the command runs.`,"drawer.gateRequiresHost":`Host confirmation required`,"drawer.gateRequiresHostDescription":`This page cannot approve this protected permission change. Nothing was written by your click.`,"drawer.goalAutoRun":`Automatic runs for this Goal`,"drawer.goalChanges":`Pending changes for this Goal`,"drawer.goalDetails":`Goal details`,"drawer.group":`Group`,"drawer.inspectorFull":`Switch to full screen`,"drawer.inspectorFullView":`Full-screen view`,"drawer.inspectorHalf":`Switch to half screen`,"drawer.inspectorHalfView":`Half-screen view`,"drawer.lastNotification":`Latest notification`,"drawer.larkConfigure":`Configure Lark connection`,"drawer.larkConnect":`Connect Lark App`,"drawer.larkConnection":`Lark connection`,"drawer.larkNotConfigured":`Not configured`,"drawer.larkNotConfiguredDescription":`After setup, LoopX sends a Feishu notification when this Goal needs your confirmation.`,"drawer.managerChanges":`Pending Manager changes`,"drawer.moreActions":`More actions`,"drawer.moreRunActions":`More run actions`,"drawer.nextTransition":`Next transition`,"drawer.noExecutionHistory":`No execution history yet.`,"drawer.noRun":`Execution Session has not started`,"drawer.noRunDescription":`Run records will appear here after an Agent starts execution.`,"drawer.notAssigned":`Unassigned`,"drawer.notLinked":`Not linked`,"drawer.notSet":`Not set`,"drawer.outputDetails":`Output details`,"drawer.outputRecorded":`This output is recorded on the current Goal.`,"drawer.outputSafePreview":`Public-safe output preview`,"drawer.outputRun":`Run`,"drawer.outputTodo":`Todo`,"drawer.outputs":`Outputs from this run`,"drawer.previewUnavailable":`No public-safe inline preview is available for this output.`,"drawer.priority":`Priority`,"drawer.progress":`Progress`,"drawer.proposalApplied":`Applied. LoopX state will refresh.`,"drawer.proposalApplyFailed":`Apply failed. No changes were written.`,"drawer.proposalApplyFailedHint":`Refresh the Goal state and regenerate. If it still fails, keep this page open and inspect advanced diagnostics.`,"drawer.proposalClose":`Close`,"drawer.proposalDefer":`Later`,"drawer.proposalDeferred":`Deferred. You can apply it later or regenerate it.`,"drawer.proposalEnterGoal":`Open new Goal`,"drawer.proposalExplainer":`After confirmation, LoopX applies this change and shows the write result. Closing or canceling changes nothing.`,"drawer.proposalRecheck":`Recheck against latest state`,"drawer.proposalRegenerate":`Retry with latest state`,"drawer.proposalRejected":`Rejected. This change will not be written.`,"drawer.proposalStale":`Source state changed. Recheck against the latest state.`,"drawer.proposalViewGoal":`View updated Goal`,"drawer.reassign":`Reassign to`,"drawer.reassignSummary":`Reassign: {task}`,"drawer.reason":`Reason`,"drawer.recoveryDescription":`Local history is preserved. Choose a recovery path.`,"drawer.recoveryFailed":`Upstream Session recovery failed`,"drawer.recoveryNewSession":`Start a new Session with context`,"drawer.recoveryRetry":`Retry recovery`,"drawer.repositoryRole":`Execution workspace`,"drawer.repository":`Repository`,"drawer.replyMode":`Reply mode`,"drawer.subagentApplied":`Applied and verified against the shared Goal state.`,"drawer.subagentAppliedRefreshFailed":`Applied and verified. The status view could not refresh; retry the page refresh later.`,"drawer.subagentApplying":`Applying and verifying shared-state readback…`,"drawer.subagentApplyFailed":`Could not apply the sub-agent setting.`,"drawer.subagentChildLimit":`Current limit`,"drawer.subagentConfirmDisable":`Confirm turning off sub-agent execution`,"drawer.subagentConfirmEnable":`Confirm turning on sub-agent execution`,"drawer.subagentCurrentBoundary":`Current task-domain restriction`,"drawer.subagentDescription":`Allows the runtime to create temporary child agents for independent tasks only after Todo, quota, capability, and write-scope gates pass. It does not force parallel work or grant durable authority.`,"drawer.subagentDisable":`Preview turning off sub-agent execution`,"drawer.subagentDisableSummary":`New child-agent execution will be disabled for this Goal. Existing Todo ownership and execution records stay unchanged.`,"drawer.subagentDomainInvalid":`The selected task-domain restriction is invalid.`,"drawer.subagentDomainTodoCount":`{count} matching open Todos`,"drawer.subagentDomains":`Task-domain restriction (optional)`,"drawer.subagentDomainsEmpty":`No open advancement Todo declares task_domain. Leave this empty to keep child execution unrestricted by task domain.`,"drawer.subagentDomainsHint":`Leave every option clear to apply no task-domain filter. Selecting domains admits only matching typed Todos; all other execution gates still apply.`,"drawer.subagentDomainsUnrestricted":`No task-domain restriction`,"drawer.subagentEnable":`Preview turning on sub-agent execution`,"drawer.subagentLabel":`Per-Goal execution boundary`,"drawer.subagentMaxChildren":`Maximum child agents`,"drawer.subagentNoChange":`The current Goal already matches this setting; nothing was written.`,"drawer.subagentPending":`Pending confirmation`,"drawer.subagentPreviewBoundary":`Preview boundary update`,"drawer.subagentPreviewFailed":`Could not create the sub-agent setting preview.`,"drawer.subagentPreviewing":`Checking the latest Goal state…`,"drawer.subagentPreviewReady":`Preview locked. Confirm to apply this Goal setting.`,"drawer.subagentPreviewSummary":`Allow up to {count} child agents. Task-domain restriction: {domains}.`,"drawer.subagentRemoteReadOnly":`This source is read only. Open the Goal on its host to change the setting.`,"drawer.subagentTitle":`Adaptive sub-agent execution`,"drawer.remoteDetailsDescription":`SSH sources expose public-safe status only and do not read connection settings from the source host.`,"drawer.remoteDetailsUnavailable":`Remote details are not projected`,"drawer.resumeNo":`No`,"drawer.resumeYes":`Yes`,"drawer.runDetails":`Execution Session`,"drawer.runInterrupt":`Interrupt this run`,"drawer.runLatest":`View latest execution`,"drawer.runNewSession":`Start new Session`,"drawer.runCloseSession":`Close Session`,"drawer.runRecordEmpty":`No run record yet. The Agent has not started this execution. Check waiting conditions or resume the Session under Details & actions.`,"drawer.runRecordProjected":`No step-by-step record is available. LoopX read {completed}/{total} projected steps{outputs}; inspect the Session under Details & actions.`,"drawer.runRecordProjectedOutputs":` and {count} outputs`,"drawer.runRoleAssistant":`Completed`,"drawer.runRoleSystem":`Needs review`,"drawer.runRoleUser":`Task received`,"drawer.runView":`Session views`,"drawer.scheduleAdd":`Add scheduled check`,"drawer.scheduleDefaultNotification":`Notify only when you are needed`,"drawer.scheduleDefaultStop":`Goal completes or owner stops it`,"drawer.scheduleDefaultTarget":`Wake according to this Goal’s LoopX schedule.`,"drawer.scheduleEdit":`Change to every 2 hours`,"drawer.scheduleLast":`Last run`,"drawer.scheduleLocalTimezone":`Local timezone`,"drawer.scheduleNext":`Next run`,"drawer.scheduleNeverRun":`Not run yet`,"drawer.scheduleNotification":`Notification`,"drawer.schedulePause":`Pause`,"drawer.schedulePending":`Waiting for schedule`,"drawer.scheduleResume":`Resume`,"drawer.scheduleRunNow":`Run now`,"drawer.scheduleStop":`Stop {kind}`,"drawer.scheduleStopCondition":`Stop condition`,"drawer.scheduleTimezone":`Timezone`,"drawer.sessionRecoverable":`Resumable`,"drawer.sessionStatus":`Session status`,"drawer.setupHeartbeat":`Set up Heartbeat`,"drawer.taskActions":`Pending Todo actions`,"drawer.taskAdvancement":`Advancement task`,"drawer.taskBlock":`Mark blocked`,"drawer.taskComplete":`Mark complete`,"drawer.taskCompletedNote":`This task is retained as a read-only record.`,"drawer.taskCompletedTitle":`Task completed`,"drawer.taskDefer":`Defer`,"drawer.taskDeferCondition":`Todo defer resume condition`,"drawer.taskDeferInvalid":`Unsupported condition format; use one of the three deterministic conditions below.`,"drawer.taskDeferPlaceholder":`For example, pr_merged:owner/repo#123`,"drawer.taskDeferReview":`Review defer`,"drawer.taskDeferSupported":`Supports todo_done, pr_merged, and capacity_available conditions.`,"drawer.taskDeferUntil":`Defer until`,"drawer.taskDetails":`Todo details`,"drawer.taskInfo":`Task information`,"drawer.taskManage":`Manage task`,"drawer.taskNextCompleted":`Create a follow-up task`,"drawer.taskNextOpen":`Advance or update status`,"drawer.taskOrdinary":`Task`,"drawer.taskStatusBlocked":`Blocked`,"drawer.taskStatusDeferred":`Deferred`,"drawer.resumeWhen":`Resume condition`,"drawer.taskNextDeferred":`Wait for the resume condition, then reassess`,"drawer.taskStatusCompleted":`Completed`,"drawer.taskStatusOpen":`Ready`,"drawer.taskSuccessor":`Create follow-up Todo`,"drawer.taskSuccessorNote":`Owner marked this blocked while waiting for more context.`,"drawer.taskSuccessorSummary":`Create follow-up Todo: {task}`,"drawer.taskSuccessorText":`Follow-up work for {task}`,"drawer.taskType":`Task type`,"drawer.topic":`Topic`,"drawer.trigger":`Trigger`,"drawer.titleAttention":`Needs you`,"drawer.titleOutput":`Output details`,"drawer.titleProposalApplied":`Execution result`,"drawer.titleProposalConfirm":`Confirm execution`,"drawer.titleSchedule":`Scheduled check`,"drawer.unconfigured":`Not configured`,"drawer.workspaceCandidates":`Available workspaces`,"files.emptySummary":`Public-safe output`,"files.empty":`No files, outputs, or verified reports yet.`,"files.loadingReports":`Loading verified milestone reports…`,"files.reportDelta":`+{added} added · {changed} changed`,"files.reportAdded":`added`,"files.reportChanged":`changed`,"files.reportGeneration":`Generation`,"files.reportLoadFailed":`Could not load verified reports`,"files.reportPublication":`Publication`,"files.title":`Files & Outputs`,"files.verifiedReport":`Verified milestone report`,"header.agentUnavailable":`Unavailable`,"header.chatRuntime":`Chat`,"header.workAgentCount":`{count} work Agents`,"header.chat":`Chat`,"header.files":`Files`,"header.goalCapabilities":`Capability settings`,"header.goalCapabilitiesDescription":`Manage overrides and inherited machine defaults.`,"header.goalDetails":`Goal details`,"header.goalDetailsDescription":`Review status, usage, repository, notifications, and sessions.`,"header.goalSettings":`Goal settings`,"header.goalSettingsDescription":`Open Goal details or capability settings`,"header.goalNavigation":`Goal navigation`,"header.goalView":`Goal view`,"header.live":`Live`,"header.manager":`LoopX Manager`,"header.managerDescription":`Your personal workspace across Goals`,"header.managerOverview":`Overview`,"header.managerView":`Manager view`,"header.openGoalNavigation":`Open Goal navigation`,"header.readOnlySourceDescription":`{source} is displayed read-only through an SSH tunnel`,"header.refresh":`Refresh status`,"header.refreshDone":`Updated just now`,"header.refreshFailed":`Refresh failed`,"header.refreshing":`Refreshing`,"header.selectAgent":`Select Agent`,"header.selectChatRuntime":`Select chat runtime`,"header.tasks":`Tasks`,"header.themeBrutal":`Switch to brutal theme`,"header.themePaper":`Switch to default theme`,"home.blockingSummary":`{count} are blocking an Agent.`,"home.completedGoals":`Completed Goals`,"home.empty":`Nothing here`,"startup.goalLoading":`Loading status…`,"startup.goalError":`Could not load status`,"startup.progress":`{loaded} of {total} active Goals loaded`,"startup.partial":`Goal states are updating. Counts are incomplete.`,"startup.independent":`Other Goals remain available while this Goal loads.`,"startup.error.timeout":`The request timed out. Retry when the local service is ready.`,"startup.error.network":`The connection was interrupted. Retry to reconnect.`,"startup.error.service":`The local service is temporarily unavailable. Retry to continue.`,"startup.error.revision":`The Goal directory changed during loading. Refresh to synchronize.`,"startup.error.scope":`This Goal is no longer available in the selected source. Refresh the directory.`,"startup.error.invalid":`The status response could not be read. Refresh or check for a LoopX update.`,"startup.retry":`Retry`,"startup.retryFailed":`Retry failed Goals`,"startup.failedCount":`{count} Goals could not be loaded. Ready Goals remain available.`,"home.greeting":`Hi, I’m your LoopX Manager`,"home.history":`History`,"home.lane.needsYou":`Needs you`,"home.lane.needsYouDescription":`Waiting for your decision, authorization, or context`,"home.lane.observing":`Observing`,"home.lane.observingDescription":`Monitoring continuously and notifying you when something changes`,"home.lane.running":`Running`,"home.lane.runningDescription":`Agents are making progress and reporting back`,"home.lane.scheduled":`Scheduled`,"home.lane.scheduledDescription":`Queued until its time or prerequisite arrives`,"home.noActivity":`No activity yet`,"home.noFirstActivity":`Waiting for first activity`,"home.noCompletedGoals":`No completed Goals yet`,"home.preservedState":`State is preserved and can be resumed`,"home.stopped":`Stopped`,"home.systemHealth":`System health: {summary}`,"home.taskCount":`{count} Tasks`,"home.todayAt":`Today {time}`,"home.waitingCount":`You have {count} items to handle.`,"home.workspace":`Goal workspace`,"lark.allMessages":`All messages in this topic`,"lark.allTopicMessages":`All topic messages`,"lark.agentIngress":`Agent ingress`,"lark.agentAppPermissions":`Every selected Agent needs a Lark App that is ready for group mentions and replies.`,"lark.agentApps":`Lark App per Agent`,"lark.agentAppsDescription":`The default App is preselected. Assign a different compatible App when an Agent needs its own bot identity.`,"lark.agentAppSelection":`Lark App for {agent}`,"lark.appCreated":`App created`,"lark.appCreateFailed":`Creation failed`,"lark.appLoading":`Loading available Lark Apps…`,"lark.appPermissions":`This App can send connection messages, but lacks the bot permissions required to receive group mentions or reply automatically. Enable im:message.group_at_msg:readonly, im:message.send_as_bot, and the im.message.receive_v1 event, publish a new version, then refresh.`,"lark.appProfile":`Lark App`,"lark.apps":`Lark Apps`,"lark.autoReplyUnavailable":`Auto reply unavailable`,"lark.autoReplyReady":`Auto reply ready`,"lark.bindGoal":`Bind to Goal`,"lark.cancel":`Cancel`,"lark.cardinality":`One Lark App · many Goals · one isolated route per Agent`,"lark.capture":`Capture`,"lark.captureAddressed":`Only messages that mention or reply to the App`,"lark.captureAll":`All messages in this Goal topic`,"lark.captureScope":`Capture scope`,"lark.captureScopeDescription":`Controls which Topic messages enter LoopX without expanding Agent permissions.`,"lark.closeConnection":`Close connection dialog`,"lark.closeCreate":`Close create dialog`,"lark.closeSettings":`Close Lark settings`,"lark.connect":`Connect`,"lark.connectAllAgents":`Connect every registered Agent`,"lark.connectAllAgentsAction":`Connect {count} Agents`,"lark.connectAllAgentsDescription":`Create {count} isolated Agent Topics in one guided action. Send requests inside the matching Topic; each Agent keeps its own route and inbox.`,"lark.connectApp":`Connect Lark App`,"lark.connection":`Connection`,"lark.connections":`Connections`,"lark.configuration":`Lark configuration`,"lark.continueFeishu":`Continue in Feishu`,"lark.createAutomatically":`Create Goal topic automatically`,"lark.createAutomaticallyDescription":`A dedicated, Agent-labelled Topic will be created for every selected Agent.`,"lark.defaultAgentAppDescription":`Used to find the target group and as the default for every selected Agent. Per-Agent choices below override it.`,"lark.description":`Manage reusable Lark Apps and connect group chats to Goals through dedicated topics.`,"lark.editConnection":`Edit Lark Connection`,"lark.goalConnections":`{count} Goal connections`,"lark.goalTopicConnections":`Lark Goal Topic connections`,"lark.groupChat":`Group chat`,"lark.groupEmpty":`This bot has not joined a group that can be connected. Add it to a Feishu group first, then return to refresh or search.`,"lark.groupLoading":`Reading groups joined by this bot…`,"lark.groupSearch":`Search groups joined by this bot`,"lark.historyPermission":`Group-history permission (separate capability)`,"lark.health.eventProcessed":`{events} events processed, {replies} replies sent.`,"lark.health.eventUnverified":`Event subscription needs verification`,"lark.health.eventUnverifiedDetail":`The provider listener is ready, but no event has arrived. Enable im.message.receive_v1 and group mention permissions, publish a new version, then send a new @ mention inside this Agent Topic. Group-level messages fail closed when multiple Agent routes exist.`,"lark.health.ignoredSelf":`The bot’s own message was ignored to prevent duplicate replies.`,"lark.health.invalidRouting":`Invalid routing configuration`,"lark.health.invalidRoutingDetail":`The connection was safely disabled. Select a processing mode again and save.`,"lark.health.lastStatus":`Latest event status: {status}`,"lark.health.listening":`Listening`,"lark.health.messageContextPermission":`Message permission required`,"lark.health.messageContextPermissionDetail":`A message event arrived, but group context could not be read. Publish and authorize group message read access for this App.`,"lark.health.notAddressed":`Latest message did not directly @ the bot`,"lark.health.notAddressedDetail":`Listening is healthy. This connection only responds to direct @ mentions or replies to the bot.`,"lark.health.notStarted":`Listener not started`,"lark.health.notStartedDetail":`Refresh the connection or restart LoopX, then try again.`,"lark.health.processingFailed":`Message processing failed`,"lark.health.processingFailedDetail":`The message event arrived, but Agent processing failed. Review local diagnostics and retry.`,"lark.health.queued":`Queued in the Agent inbox`,"lark.health.queuedDetail":`The message will be processed asynchronously by {agent} without starting a general Chat Session.`,"lark.health.retrying":`Retrying listener`,"lark.health.retryingDetail":`Event listening was interrupted and LoopX is retrying automatically.`,"lark.health.routeAmbiguous":`Message matches multiple Goals`,"lark.health.routeAmbiguousDetail":`The same bot and group have multiple full-group capture connections. Use a separate bot for each Agent or keep only one full-group connection.`,"lark.health.routeMismatch":`Message did not match this Goal Topic`,"lark.health.routeMismatchDetail":`The event came from another group or Topic. Reconnect this Goal to the correct group, then send a new @ mention.`,"lark.health.routeUnavailable":`Message cannot be routed to the Goal`,"lark.health.routeUnavailableDetail":`Connection data is incomplete. Reconnect this Goal, then send a new @ mention.`,"lark.health.starting":`Starting`,"lark.health.startingDetail":`LoopX is starting message event listening for this App.`,"lark.health.unavailable":`Auto reply unavailable`,"lark.health.waiting":`Waiting`,"lark.incomingMessages":`Incoming messages`,"lark.ingressAsync":`Async inbox`,"lark.ingressAsyncDescription":`Write to the Agent private inbox for a later explicit drain.`,"lark.ingressLegacy":`Legacy direct`,"lark.ingressLegacyDescription":`Compatibility mode for old connections; choose one of the three current ingress modes when saving.`,"lark.ingressQueue":`Queuing`,"lark.ingressQueueDescription":`Enter the same Agent Session's bounded FIFO queue and run after the current Turn.`,"lark.ingressSteering":`Steering`,"lark.ingressSteeringDescription":`Deliver to the active Turn and reject safely when no exact active Turn exists.`,"lark.loading":`Loading Lark configuration…`,"lark.management":`Lark management`,"lark.openEventSettings":`Open Feishu event settings`,"lark.mentions":`Mentions`,"lark.mentionsOnly":`Mentions only`,"lark.needsMessagePermissions":`Needs message permissions`,"lark.needsSetup":`Needs setup`,"lark.newApp":`New Lark App`,"lark.noAgentConfigured":`No Agent configured`,"lark.noConnections":`No matching connections.`,"lark.noProfiles":`No lark-cli App profiles are available yet.`,"lark.profileName":`Profile name`,"lark.profileValidation":`Profile can contain only letters, numbers, periods, underscores, and hyphens.`,"lark.processing":`Processing`,"lark.region":`Region`,"lark.registerAnother":`+ Register another Lark App — Create through Feishu`,"lark.reopenFeishu":`Reopen Feishu`,"lark.settingsConfigure":`Configure {goal}`,"lark.settingsDisconnect":`Disconnect {goal}`,"lark.replyMode":`Reply mode`,"lark.replyModeDescription":`Replies are limited to the source Topic to prevent cross-group or cross-Goal delivery.`,"lark.reusableApps":`{count} reusable Apps`,"lark.reusableWorkspaceApp":`Reusable workspace App`,"lark.saveConnection":`Save connection`,"lark.searchConnections":`Search Lark connections`,"lark.searchPlaceholder":`Search Apps, groups, Goals, or topics`,"lark.setupCopy":`LoopX opens the official Feishu creation page through lark-cli. App credentials stay in the system Keychain; LoopX stores only the profile reference.`,"lark.someoneMentions":`Someone mentions the Agent`,"lark.targetAgent":`Target Agent`,"lark.targetAgentDescription":`Choose a registered Agent in this Goal. This connection delivers to one Agent; it does not broadcast or grant permissions. Steering and Queuing require that Agent's exact active Session.`,"lark.agentUnavailable":`{agent} · no longer available`,"lark.selectRegisteredAgent":`Select an available registered Agent before connecting. The previous Agent will not be replaced automatically.`,"lark.topicPreview":`Topic preview`,"lark.topicReply":`Topic reply`,"lark.trigger":`Trigger`,"lark.waitingFeishu":`Waiting for Feishu`,"lark.waitingFeishuDescription":`Complete Feishu authorization in the new window. This page updates automatically when it is ready.`,"lark.waitingLink":`Generating the official Feishu creation link…`,"lark.error.appCreate":`Lark App creation failed`,"lark.error.appRequired":`Select a Lark App profile.`,"lark.error.bind":`Connection failed`,"lark.error.bindPreview":`Connection preview failed`,"lark.error.configuration":`Could not load Lark configuration`,"lark.error.groupLookup":`Could not read groups joined by this bot. Check the bot status and try again.`,"lark.error.groupLoad":`Could not load group chats`,"lark.error.invalidApp":`The Lark App profile is unavailable or has not completed authorization.`,"lark.error.messagePermissions":`This App lacks the bot permissions required for automatic replies. Enable im:message.group_at_msg:readonly and im:message:send_as_bot, publish a new version, then refresh.`,"lark.error.provider":`The Feishu API call failed without a verified receipt. Try again later.`,"lark.error.setupPoll":`Could not read creation status`,"lark.error.setupStart":`Could not start Lark App creation`,"lark.error.cliExecutable":`The configured lark-cli was found but cannot run. Check the installation or launch arguments.`,"lark.error.cliMissing":`lark-cli was not found. Install lark-cli and restart LoopX.`,"lark.error.cliStart":`lark-cli failed to start. Check the installation and restart LoopX.`,"lark.error.disconnect":`Disconnect failed`,"notifications.autoNotify":`Send automatically when your confirmation is required`,"notifications.bind":`Bind notification group`,"notifications.bindConfirm":`Bind “{goal}” to “{target}”. LoopX will verify that the bot is in the group and send a confirmation message.`,"notifications.bindFailed":`Binding failed`,"notifications.bound":`Bound`,"notifications.confirmBind":`Confirm binding`,"notifications.description":`Send Goal changes that need your confirmation to a Feishu group. Bindings and automatic delivery use the existing channel.`,"notifications.disabled":`Disabled`,"notifications.group":`Notification group: {target}`,"notifications.loadFailed":`Could not load notification groups`,"notifications.noTargets":`No notification groups are available. Group delivery uses a private bot identity; configure one from the terminal first:`,"notifications.notBound":`Not bound`,"notifications.recent":`Latest {time}`,"notifications.sentCount":`{count} sent`,"notifications.settings":`Goal notification bindings`,"notifications.setupFailed":`Could not update settings`,"notifications.title":`Feishu group notifications`,"proposal.field.agentId":`Agent`,"proposal.field.cadence":`Frequency`,"proposal.field.completionCriteria":`Completion criteria`,"proposal.field.executionBoundary":`Execution boundary`,"proposal.field.goalId":`Goal ID`,"proposal.field.heartbeat":`Heartbeat`,"proposal.field.initialTodos":`Initial tasks`,"proposal.field.objective":`Objective`,"proposal.field.operation":`Operation`,"proposal.field.permission":`Permission`,"proposal.field.reason":`Reason`,"proposal.field.stopCondition":`Stop condition`,"proposal.field.target":`Check target`,"proposal.field.timezone":`Timezone`,"proposal.field.title":`Title`,"proposal.field.workspace":`Execution workspace`,"proposal.gate.default":`Host confirmation required`,"proposal.impact.default":`After confirmation, the canonical LoopX service will write the state change.`,"proposal.impact.goalCreate":`After confirmation, LoopX will create the Goal and its initial Todo, then let the selected Agent start the first run.`,"proposal.impact.lifecycleDelete":`After confirmation, this stopped Goal is removed from the source and global registries. Project files, history state, and backups are preserved.`,"proposal.impact.lifecycleResume":`After confirmation, the Goal becomes eligible for automatic scheduling and returns to Active Goals. Actual execution still follows quota, Gate, and Todo constraints.`,"proposal.impact.lifecycleStop":`After confirmation, automatic progress stops and the Goal moves to the collapsed Stopped list. History, Todos, and evidence remain available for resuming.`,"proposal.impact.protected":`This action must be completed through the protected LoopX write service.`,"proposal.primary.apply":`Confirm and apply`,"proposal.primary.goalCreate":`Create Goal and start first run`,"proposal.primary.lifecycleDelete":`Delete Goal`,"proposal.primary.lifecycleResume":`Resume Goal`,"proposal.primary.lifecycleStop":`Stop Goal`,"proposal.primary.todoStart":`Create task and start execution`,"proposal.summary.goalCreate":`Create Goal: {title}`,"proposal.summary.heartbeat":`Set a Heartbeat for the current Goal`,"proposal.summary.lifecycleDelete":`Delete Goal: {title}`,"proposal.summary.lifecycleResume":`Resume Goal: {title}`,"proposal.summary.lifecycleStop":`Stop Goal: {title}`,"proposal.summary.monitor":`Create a scheduled check for the current Goal: {target}`,"proposal.workspace.current":`Current local workspace (no Repository bound)`,"proposal.workspace.named":`{workspace} (execution environment only; does not bind a repository)`,"proposal.workspaceGate.agentImpact":`Bind an Agent identity, then recheck the original action. No Goal has been written.`,"proposal.workspaceGate.agentTitle":`Bind an Agent first`,"proposal.workspaceGate.defaultSummary":`Select the Goal workspace.`,"proposal.workspaceGate.selectionImpact":`After selecting a workspace, LoopX will show the confirmation preview again. The selection itself does not write state.`,"proposal.workspaceGate.selectionTitle":`Select Goal workspace`,"projection.agentAdvancingGoal":`Agent is advancing the current Goal`,"projection.agentIdle":`Nothing needs your attention`,"projection.agentNeedsDecision":`Agent is waiting for your decision`,"projection.agentPreparingNextStep":`Agent is preparing the next step`,"projection.agentStopped":`Stopped by you; history, Todos, and evidence are preserved`,"projection.agentWaitingExternal":`Waiting for an external condition`,"projection.confirmAgentDecision":`Confirm the permission or decision the Agent needs next`,"projection.events24h":`{count} events in the last 24 hours`,"projection.firstReadOnlyAdapterCheck":`Run the first read-only adapter check and save progress`,"projection.goalVerified":`Goal state, Todos, and registration information verified`,"projection.latestRun":`Latest run`,"projection.latestValidation":`Latest validation`,"projection.nextUpdatePending":`Waiting for LoopX to update the next step`,"projection.publicSafeProjection":`Public-safe status projection`,"projection.refreshState":`Refresh LoopX status and confirm the current progress is still valid`,"projection.runEvidenceAvailable":`Run evidence is available`,"projection.runRecorded":`The latest LoopX run is recorded`,"projection.statusRefreshNeeded":`LoopX status needs to be refreshed`,"projection.todoStatusUpdated":`Todo status updated; confirming the next step`,"projection.validationRecorded":`The latest validation is recorded`,"runs.completed":`Completed`,"runs.failed":`Needs review`,"runs.interrupted":`Interrupted`,"runs.queued":`Scheduled`,"runs.ready":`Ready`,"runs.resumeFailed":`Recovery failed`,"runs.running":`Running`,"runs.unknown":`Unknown`,"runs.waiting":`Waiting`,"schedule.active":`Running`,"schedule.heartbeat":`Goal Heartbeat`,"schedule.monitor":`Scheduled & continuous task`,"schedule.paused":`Paused`,"schedule.summary":`Continuously checked under LoopX scheduling constraints`,"schedule.defaultTarget":`Check the current Goal for blockers, progress, and new outputs`,"schedule.unsupportedCalendar":`Scheduled checks do not currently support an exact weekday or time. Use a fixed interval such as “Every 30 minutes,” “Every 2 hours,” or “Daily.” The draft was preserved and no confirmation preview was created.`,"source.add":`Add source`,"source.addConfigured":`Add read-only source`,"source.addMethod":`Source setup method`,"source.addSsh":`Add SSH source`,"source.closeForm":`Close source form`,"source.configured":`Configured SSH`,"source.configuredCount":`Local SSH Hosts · {count}`,"source.configuredGroup":`Configured SSH Hosts · {count} (select to add)`,"source.connected":`Connected`,"source.connecting":`Connecting`,"source.controlPlane":`Control plane source`,"source.copy":`Copy`,"source.copyCommand":`Copy SSH tunnel command`,"source.copyError":`Could not copy the command. Copy it manually below.`,"source.copied":`Copied`,"source.description":`All explicit Hosts are loaded, including Include files. Wildcards are not listed. Run the command first; LoopX never reads SSH keys or configuration details.`,"source.host":`Local SSH Host`,"source.hostEmpty":`No explicit SSH Hosts are available in ~/.ssh/config.`,"source.hostLoadError":`Could not read local SSH Hosts.`,"source.hostPlaceholder":`Enter or search for a Host`,"source.invalid":`The SSH source settings are invalid.`,"source.loadingHosts":`Loading…`,"source.localInteractive":`Local interactive`,"source.localPort":`Local port`,"source.manual":`Manual URL`,"source.manualDescription":`Remote sources always remain read-only projections and never inherit local write permissions.`,"source.name":`Name`,"source.namePlaceholder":`Remote development machine`,"source.notAvailable":`Unavailable`,"source.readOnly":`SSH tunnel · read only`,"source.readOnlyNoticeDescription":`You can view Goals, Tasks, evidence, and run status. Writes, guidance, and Agent sessions remain on the source host.`,"source.readOnlyNoticeTitle":`Remote read-only projection`,"source.readOnlyWriteError":`Remote SSH tunnel sources are read-only projections and cannot perform control-plane writes.`,"source.refreshHosts":`Reload SSH Hosts`,"source.remove":`Remove source {source}`,"source.removeCurrent":`Remove current source`,"source.select":`Select control plane source`,"source.selectHost":`Select a configured SSH Host.`,"source.statusUrl":`Local forwarded URL`,"source.tunnelCommandPending":`Select a Host to generate the tunnel command`,"machine.absent":`Not configured`,"machine.action.create":`Create machine policy`,"machine.action.delete":`Remove machine policy`,"machine.action.unchanged":`No write required`,"machine.action.update":`Update machine policy`,"machine.applied":`Machine policy applied and read back successfully.`,"machine.applyError":`Machine policy could not be applied.`,"machine.applyPreview":`Apply reviewed preview`,"machine.changedNamespaces":`Changed namespaces`,"machine.capabilityCatalog":`Machine capability catalog`,"machine.capabilityEmpty":`No machine-configurable capabilities are registered.`,"machine.configured":`Configured`,"machine.confirmRollback":`Confirm rollback`,"machine.currentRevision":`Current revision`,"machine.currentValue":`Current machine value`,"machine.description":`Browse the same capability catalog as Goal settings. Configure supported machine defaults here; Goal-only capabilities are labeled explicitly.`,"capabilities.rawJson":`Advanced: raw JSON`,"machine.goalOnly":`This capability currently supports Goal configuration only. Open a Goal’s capability settings to configure it; no machine-wide default is applied.`,"machine.desiredRevision":`Desired revision`,"machine.editorUnavailable":`No editor is installed for this namespace`,"machine.editorUnavailableDescription":`The namespace remains visible in the registry. Install or upgrade its Dashboard editor before changing it.`,"machine.editorMode":`Editor mode`,"machine.liveDefault":`Live default; Goal override wins`,"machine.liveDefaultDescription":`Goals without an explicit periodic-report override read this machine policy on every plan. Changes and removal affect those existing Goals immediately; an explicit Goal override stays pinned.`,"machine.genericNamespaceDescription":`Edit this registered namespace as JSON. LoopX validates it with the capability-owned schema before previewing any write.`,"machine.jsonConfiguration":`Namespace configuration (JSON)`,"machine.jsonConfigurationHelp":`Only this namespace is updated. Other machine configuration is preserved, and Apply remains locked to the reviewed preview revision.`,"machine.jsonEditor":`JSON`,"machine.jsonInvalid":`Enter one valid JSON object before previewing changes.`,"machine.loadError":`Machine configuration could not be loaded.`,"machine.machinePolicy":`Machine policy`,"machine.namespaceCount":`Registered namespaces`,"machine.namespaces":`Configuration namespaces`,"machine.periodicReport":`Periodic reports`,"machine.periodicReportDescription":`Default report policy for every Goal without an explicit override. Goal scheduling and delivery consume the effective configuration.`,"machine.periodicReportActivation":`Enabled means automatic delivery at validated stage boundaries`,"machine.periodicReportActivationDescription":`This is not a weekly timer. When LoopX validates a Goal stage completion, an Agent prepares and freezes the report, then automatically delivers it through the configured Goal Channel. The enabled subscription is standing delivery authority; failures and route drift stop closed for repair.`,"machine.preview":`Review exact machine change`,"machine.previewChanges":`Preview changes`,"machine.previewError":`A machine-policy preview could not be created.`,"machine.previewLocked":`Apply is locked to this exact revision. If machine state changes, LoopX requires a new preview.`,"machine.previewRollback":`Preview rollback`,"machine.previewRemoval":`Preview removal`,"machine.profilePreset":`Profile preset`,"machine.profilePresetHelp":`A capability-owned preset, such as weekly-progress.`,"machine.registry":`Typed registry`,"machine.requiredFields":`Enable requires a profile preset, Goal Channel route, and valid timezone.`,"machine.revision":`Machine revision`,"machine.revisionLockedReady":`All changes require a preview and apply only while that exact machine revision remains current.`,"machine.rollbackAvailable":`Rollback is available for the last apply`,"machine.rollbackDescription":`Preview the stored prior revision before restoring it.`,"machine.rollbackError":`The rollback could not be completed.`,"machine.rollbackPreviewDescription":`The prior revision is ready to restore. Confirm to apply this rollback.`,"machine.rolledBack":`The prior machine policy was restored and verified.`,"machine.removed":`Machine policy removed and the resulting configuration read back successfully.`,"machine.routeRef":`Goal Channel route`,"machine.routeRefHelp":`Use a public route alias; credentials and provider identifiers never enter this form.`,"machine.timezone":`Timezone`,"machine.timezoneHelp":`Use an IANA timezone, for example Asia/Shanghai.`,"machine.title":`Machine configuration`,"machine.unchanged":`Machine policy already matches this preview; nothing was written.`,"machine.visualEditor":`Guided`,"capabilities.atomicOverride":`Goal override is atomic`,"capabilities.atomicOverrideDescription":`A complete Goal value wins over the machine default. LoopX never mixes individual fields across scopes.`,"capabilities.applyFailed":`Goal capability changes were not applied.`,"capabilities.applyPreview":`Apply preview`,"capabilities.catalog":`Goal capability catalog`,"capabilities.chooseGoal":`Choose a Goal before inspecting its capabilities.`,"capabilities.defaultValue":`Declared default`,"capabilities.description":`Inspect the capabilities available to this Goal and the exact scope of each setting.`,"capabilities.editorPrepared":`Typed editor contract available`,"capabilities.effectiveSource":`Effective source`,"capabilities.empty":`No capability descriptors are available for this Goal.`,"capabilities.fields":`Registered fields`,"capabilities.goalPolicy":`Goal capability policy`,"capabilities.goalScope":`Goal`,"capabilities.goalValue":`Current Goal value`,"capabilities.loadFailed":`Could not load Goal capabilities`,"capabilities.loading":`Loading Goal capabilities…`,"capabilities.machineOnly":`This capability is configured only at machine scope.`,"capabilities.machineValue":`Live machine default`,"capabilities.machineScope":`Machine`,"capabilities.previewOnly":`Inspection is live. Goal writes remain unavailable until the revision-locked preview and apply path is connected.`,"capabilities.preview":`Revision-locked preview`,"capabilities.previewChanges":`Preview changes`,"capabilities.restoreInheritance":`Restore machine-default inheritance`,"capabilities.previewFailed":`Could not preview Goal capability changes.`,"capabilities.previewLocked":`Apply will re-check this exact plan revision and reject stale changes.`,"capabilities.partialWrite":`Goal value saved; shared projection needs reconciliation`,"capabilities.partialWriteDescription":`The source Goal configuration was written and read back. Its shared runtime projection did not synchronize, so do not submit the change again.`,"capabilities.refreshSource":`Refresh source value`,"capabilities.readOnly":`Read-only capability`,"capabilities.revisionLockedReady":`Changes require a preview and are applied only when its exact revision is still current.`,"capabilities.retry":`Retry`,"capabilities.source.capability_default":`Capability default`,"capabilities.source.goal_override":`Goal override`,"capabilities.source.machine_default":`Live machine default`,"capabilities.source.not_configured":`Not configured`,"capabilities.title":`Goal capabilities`,"settings.close":`Close settings`,"settings.appearance":`Appearance`,"settings.appearanceDescription":`Manage workspace display preferences in this browser.`,"settings.appearanceTabDescription":`Theme and display preferences`,"settings.capabilitiesTabDescription":`Capability overrides for this Goal`,"settings.back":`Back to workspace`,"settings.categories":`Settings categories`,"settings.description":`Manage workspace preferences and integrations.`,"settings.eyebrow":`Workspace preferences`,"settings.general":`General`,"settings.goalConnections":`Goal connections`,"settings.language":`Language`,"settings.languageDescription":`Choose the language used by the LoopX desktop workspace.`,"settings.languageEnglishDescription":`Use English for navigation, settings, and workspace controls.`,"settings.languageEnglish":`English`,"settings.languageSimplifiedChineseDescription":`Use Simplified Chinese for navigation, settings, and workspace controls.`,"settings.languageSimplifiedChinese":`Simplified Chinese`,"settings.languageStoredLocally":`This preference is stored only on this device.`,"settings.languageTabDescription":`Interface language for this device`,"settings.larkTabDescription":`Apps, group chats, and Goal Topic connections`,"settings.machineTabDescription":`Typed defaults shared by capabilities on this machine`,"settings.notifications":`Notifications`,"settings.open":`Settings`,"settings.themeDefault":`Paper`,"settings.themeDefaultDescription":`Calm and lightweight for long-running work.`,"settings.themeDescription":`Choose the workspace visual style. This preference is stored in the current browser.`,"settings.themeHighContrast":`High contrast`,"settings.themeHighContrastDescription":`Stronger borders and more prominent state blocks.`,"settings.themeLoopx":`LoopX standard`,"settings.themeLoopxDescription":`Precise monochrome surfaces, Geist type, and quiet hairline structure.`,"settings.title":`Settings`,"settings.workspaceDisplay":`Workspace display`,"settings.workspaceTheme":`Workspace theme`,"session.closeRecord":`Exit run record`,"session.details":`Session details`,"session.record":`Execution Session · Run record`,"session.recordDescription":`The timeline now shows messages and Turn records from this Session.`,"sidebar.createGoal":`Create Goal`,"sidebar.delete":`Delete`,"sidebar.deleteGoal":`Delete Goal`,"sidebar.manager":`LoopX Manager`,"sidebar.notifications":`Settings`,"sidebar.owner":`Personal workspace`,"sidebar.product":`Personal Agent workspace`,"sidebar.resume":`Resume`,"sidebar.resumeGoal":`Resume Goal`,"sidebar.stop":`Stop`,"tasks.historyLoading":`Loading history…`,"tasks.historyError":`History could not be loaded.`,"tasks.historyExpired":`History snapshot expired. Reload to continue.`,"tasks.historyRetry":`Reload`,"tasks.historyEnd":`End of completed history`,"tasks.historyMore":`Load more`,"tasks.historyLocalOnly":`Open this machine’s Dashboard to browse full history.`,"sidebar.sortGoals":`Reorder Goals`,"sidebar.dragGoal":`Drag to reorder, or use Reorder Goals`,"sidebar.moveUp":`Move {goal} up`,"sidebar.moveDown":`Move {goal} down`,"sidebar.goalMoved":`{goal} moved to position {position}`,"sidebar.orderNotSaved":`Order changed for this visit; browser storage is unavailable.`,"sidebar.stopGoal":`Stop Goal`,"sidebar.stopped":`Stopped`,"sidebar.stoppedLoading":`Loading stopped Goals`,"sidebar.stoppedLoadFailed":`Stopped Goals could not be loaded. Active Goals remain available.`,"sidebar.retryStopped":`Retry`,"state.completed":`Completed`,"state.needsRepair":`Needs repair`,"state.needsYou":`Needs you`,"state.quiet":`Quiet`,"state.running":`Running`,"state.stopped":`Stopped`,"state.waiting":`Waiting`,"tasks.blocked":`Blocked`,"tasks.agentLane":`Work Agent`,"tasks.agentLaneDescription":`Filter this Goal's projected work lanes`,"tasks.agentLaneFilter":`Filter by work Agent`,"tasks.allAgentLanes":`All Agents ({count})`,"tasks.chatAgentReplied":`Agent replied`,"tasks.chatPending":`Sent to Agent`,"tasks.chatPendingDescription":`Processing. Tasks update only after a task operation is confirmed.`,"tasks.chatRecent":`Recent conversation`,"tasks.chatUnchangedDescription":`This conversation did not directly change Tasks. Convert the reply to a Task draft and confirm it when execution is needed.`,"tasks.chatViewReply":`View reply`,"tasks.convertToTask":`Convert to Task`,"tasks.completed":`Completed`,"runs.discoveryPartial":`Some execution details are unavailable. Reconnecting; task summaries are not live execution status.`,"runs.discoveryOffline":`Execution service unavailable. Reconnecting; retained task summaries may be stale.`,"files.openConversation":`Go to conversation`,"files.exportSummary":`Export summary`,"tasks.viewDescription":`Decisions first, then work and recent completions`,"tasks.viewLabel":`Task view`,"tasks.listView":`List`,"tasks.boardView":`Board`,"tasks.completedSummary":`{count} tasks completed. Recent details are projected by the control plane when needed.`,"tasks.emptyCompleted":`No completed tasks yet.`,"tasks.emptyConfirm":`No tasks waiting for confirmation.`,"tasks.emptyRunning":`No queued or running tasks.`,"tasks.emptySchedules":`No scheduled tasks.`,"tasks.emptyGoal":`This Goal has no tasks yet. Describe the next step below and LoopX will show a confirmation preview first.`,"tasks.markComplete":`Mark complete: {name}`,"tasks.moreActions":`More actions: {name}`,"tasks.openExecution":`View execution: {name}`,"tasks.pending":`Pending`,"tasks.pendingAndRunning":`Queued / Running`,"tasks.scheduled":`Scheduled & continuous`,"tasks.sessionError":`Session issue`,"tasks.waiting":`Queued`,"tasks.waitingAge":`Waiting {age}`,"tasks.viewExecution":`View execution`,"tasks.viewResult":`View result`,"time.days":`{count} days`,"time.hours":`{count} hours`,"timeline.emptyGoal":`This Goal has no new activity`,"timeline.emptyGoalDescription":`Ask for progress or send new guidance.`,"timeline.emptyWorkspace":`Your workspace is quiet today`,"timeline.emptyWorkspaceDescription":`Describe a Goal to the LoopX Manager, or ask what deserves attention today.`,"timeline.gateHistory":`{count} historical Gates`,"timeline.pending":`Working…`,"timeline.runCompleted":`{run}: completed`,"timeline.review":`Review`,"timeline.reviewAndConfirm":`Review and confirm`,"timeline.waitingConfirmation":`Needs your confirmation`},"zh-CN":{"common.actions":`操作`,"common.agent":`Agent`,"common.allMessages":`所有消息`,"common.cancel":`取消`,"common.close":`关闭`,"common.closeActionReceipt":`关闭操作回执`,"common.confirm":`确认`,"common.export":`导出`,"common.failed":`失败`,"common.goal":`Goal`,"common.loading":`加载中…`,"common.none":`无`,"common.off":`关闭`,"common.on":`开启`,"common.open":`打开`,"common.owner":`Owner`,"common.readOnly":`只读`,"common.recently":`刚刚`,"common.status":`状态`,"common.task":`Task`,"common.you":`你`,"common.waiting":`等待中`,"composer.addImage":`添加图片`,"composer.agentProgress":`向 Agent 获取进度报告`,"composer.agentProgressPrompt":`请给我一份当前 Goal 的进度报告:已完成、执行中、阻塞和下一步。`,"composer.attachImageHint":`选择、粘贴或拖入图片`,"composer.clarifyDefer":`暂缓 Todo 需要可自动判断的恢复条件。请补充 todo_done:、pr_merged:[owner/repo]# 或 capacity_available:。`,"composer.clarifySingleAction":`这句话包含多个可能修改状态的操作。请一次描述一项操作,我会逐项展示确认预览。`,"composer.createGoal":`创建新 Goal`,"composer.createGoalDraft":`Goal 草稿`,"composer.createGoalDraftDescription":`补充内容后发送,LoopX 会先展示待确认操作。`,"composer.createGoalDraftLead":`我想创建一个长期 Goal:`,"composer.createGoalTemplate":`我想创建一个长期 Goal: +目标: +完成标准: +执行边界(可选): +关联仓库(可选): +通知方式(可选):`,"composer.createGoalHint":`填入 Goal 模板草稿,检查后再创建`,"composer.draft":`草稿`,"composer.globalProgress":`汇总所有 Goal 进展`,"composer.globalProgressPrompt":`请帮我汇总所有活跃 Goal 的最新进展与阻塞。`,"composer.globalTasks":`询问全局待办`,"composer.globalTasksPrompt":`有哪些 Goal 正在等我?我现在该优先处理什么?`,"composer.goalMessageHint":`你的消息由 {agent} 在本 Goal 的会话中接收`,"composer.goalRunningHint":`{agent} 正在执行 {count} 个任务 · 你的消息作为纠偏进入本会话,不会打断执行`,"composer.goalPlaceholder":`询问或纠偏 {goal}…`,"composer.imageAnalysisPrompt":`请结合这些图片分析当前 Goal,并告诉我下一步。`,"composer.imageCountError":`最多添加 {count} 张图片。`,"composer.imagePicker":`图片文件选择器`,"composer.imageReadError":`无法读取图片 {name}`,"composer.imageReadGenericError":`图片读取失败。`,"composer.imageSizeError":`单张图片不能超过 {size}MB。`,"composer.imageTypeError":`支持 PNG、JPEG、WebP 和 GIF 图片。`,"composer.imagesPending":`待发送图片`,"composer.immediate":`立即发送`,"composer.managerMessageHint":`你的消息由 LoopX 管家跨 Goal 接收,支持全局询问与创建 Goal`,"composer.managerPlaceholder":`问问 LoopX 管家,或描述一个新 Goal…`,"composer.monitor":`配置定时检查`,"composer.monitorGoalQuestion":`为哪个 Goal 添加定时检查?`,"composer.monitorTemplate":`为当前 Goal 添加定时检查: +检查内容: +频率(支持 30 分钟 / 2 小时 / 每天):每 2 小时 +停止条件:Goal 完成`,"composer.monitorTemplateWithoutGoal":`配置定时检查: +Goal: +检查内容: +频率:每 2 小时 +停止条件:Goal 完成`,"composer.monitorHint":`先填写检查内容、频率和停止条件,不会立即创建`,"composer.heartbeatGoalQuestion":`为哪个 Goal 设置 Heartbeat?`,"composer.heartbeatTemplate":`为当前 Goal 设置 Heartbeat: +频率:每天 +停止条件:Goal 完成 +通知:仅在需要我时`,"composer.heartbeatTemplateWithoutGoal":`设置 Heartbeat: +Goal: +频率:每天 +停止条件:Goal 完成 +通知:仅在需要我时`,"composer.nextAction":`询问下一步`,"composer.nextActionPrompt":`我现在该做什么?`,"composer.prepareDraft":`填入编辑框,确认后再发送`,"composer.send":`发送`,"composer.sendMessage":`向 LoopX 发送消息`,"composer.sendMessageHint":`发送消息`,"composer.sentImageAlt":`移除图片 {name}`,"conversation.agentPending":`正在整理…`,"conversation.close":`关闭对话回执`,"conversation.convertHint":`将 Agent 最新回复转为 Task 草稿`,"conversation.full":`查看完整对话`,"conversation.receipt":`对话回执`,"conversation.replying":`正在回复`,"conversation.title":`管家对话`,"conversation.toTask":`转为 Task`,"digest.away":`自上次访问以来的运行记录`,"digest.completed":`新增完成运行`,"digest.failed":`新增失败或中断`,"digest.needsYou":`当前待确认`,"feedback.applying":`正在执行:{title}`,"feedback.cancelFailed":`取消失败:{error}`,"feedback.completed":`已完成:{title}`,"feedback.executionFailed":`执行失败:{error}`,"feedback.gateRequired":`需要你确认:{summary}`,"feedback.notCompleted":`操作未完成:{status}`,"feedback.goalRefreshFailed":`已打开 Goal,但暂时无法刷新最新状态。请点击刷新重试。`,"feedback.preparingPreview":`正在准备确认预览:{title}`,"feedback.previewFailed":`无法准备确认预览:{error}`,"feedback.sendFailed":`发送失败:{error}`,"feedback.sendGenericError":`消息发送失败,请稍后重试。`,"feedback.stale":`状态已变化,操作未执行,请重新生成确认预览。`,"feedback.taskDraftCreated":`已根据回复生成 Task 草稿。编辑后发送,LoopX 会先展示确认预览。`,"goal.defaultTitle":`新的个人 Goal`,"goal.initialTodo":`按完成标准推进:{criteria}`,"goal.objectiveBoundary":`执行边界:{boundary}`,"goal.objectiveCompletion":`完成标准:{criteria}`,"drawer.advancedDiagnostics":`高级诊断`,"drawer.agentWorking":`Agent 正在继续执行,记录会自动更新。`,"drawer.analysis":`正在分析`,"drawer.apply":`确认并应用`,"drawer.applying":`正在应用…`,"drawer.attentionBlocking":`正在阻塞 Agent`,"drawer.attentionWaiting":`等待你的决定`,"drawer.autoNotify":`Human-gate 自动通知`,"drawer.branch":`分支`,"drawer.closeDetail":`关闭详情:返回{context}`,"drawer.connected":`已连接`,"drawer.correctionDescription":`消息会沿用当前 Goal、Todo 与 Agent Session 上下文。`,"drawer.correctionLabel":`与 {agent} 纠偏`,"drawer.correctionPlaceholder":`例如:先关注权限风险,暂时不要提交…`,"drawer.correctionSend":`发送纠偏`,"drawer.correctionTextarea":`输入纠偏信息:Goal {goal},Agent {agent},Run {run}`,"drawer.copyRepository":`复制仓库标识`,"drawer.copyRepositoryDone":`已复制仓库标识`,"drawer.copyRepositoryError":`复制失败,请检查浏览器剪贴板权限。`,"drawer.copyRepositorySuccess":`已复制,可粘贴到其他工具。`,"drawer.cost":`成本 24h / 7d`,"drawer.costShort":`成本`,"drawer.durationShort":`时长`,"drawer.period24h":`24 小时`,"drawer.period7d":`7 天`,"drawer.tokens":`Token 24 小时 / 7 天`,"drawer.tokensShort":`Token`,"drawer.usageNotMeasured":`未采集`,"drawer.currentGoal":`当前 Goal`,"drawer.decisionDefaultEvidence":`当前状态没有附加公开安全证据;下一步仍会先展示 Preview。`,"drawer.decisionDefaultReason":`该决定会影响当前 Todo 的下一步执行。`,"drawer.decisionDefer":`稍后决定`,"drawer.decisionMore":`更多决定`,"drawer.decisionReject":`拒绝`,"drawer.decisionReview":`查看影响并决定`,"drawer.dependencies":`依赖`,"drawer.detailsAndActions":`详情与操作`,"drawer.duration":`运行时长 24h / 7d`,"drawer.evidence":`证据`,"drawer.executionHistory":`执行历史`,"drawer.executionRecord":`运行记录`,"drawer.executionRecordAndResult":`执行过程与结果`,"drawer.explainDecision":`解释此决定`,"drawer.gateApproveHint":`在终端执行一条命令即可完成审批:`,"drawer.gateRejectHint":`不同意就把末尾的 approve 换成 reject。执行后这条提醒会自动消失。`,"drawer.gateRequiresHost":`需要宿主确认`,"drawer.gateRequiresHostDescription":`页面无权直接批准这类权限变更,你的点击没有写入任何内容。`,"drawer.goalAutoRun":`当前 Goal 的自动运行`,"drawer.goalChanges":`当前 Goal 的待确认变更`,"drawer.goalDetails":`Goal 详情`,"drawer.group":`群聊`,"drawer.inspectorFull":`切换到全屏`,"drawer.inspectorFullView":`全屏查看`,"drawer.inspectorHalf":`切换到半屏`,"drawer.inspectorHalfView":`半屏查看`,"drawer.lastNotification":`最近通知`,"drawer.larkConfigure":`管理 Lark connection`,"drawer.larkConnect":`连接 Lark App`,"drawer.larkConnection":`Lark connection`,"drawer.larkNotConfigured":`未配置`,"drawer.larkNotConfiguredDescription":`配置后,当这个 Goal 出现需要你确认的变更时,会自动发飞书通知。`,"drawer.managerChanges":`管家待确认变更`,"drawer.moreActions":`更多操作`,"drawer.moreRunActions":`更多运行操作`,"drawer.nextTransition":`下一转换`,"drawer.noExecutionHistory":`暂无执行记录。`,"drawer.noRun":`尚未启动执行 Session`,"drawer.noRunDescription":`Agent 开始执行后,运行记录会稳定显示在这里。`,"drawer.notAssigned":`未分配`,"drawer.notLinked":`未关联`,"drawer.notSet":`未设置`,"drawer.outputDetails":`产出详情`,"drawer.outputRecorded":`该产出已记录到当前 Goal。`,"drawer.outputSafePreview":`公开安全产出预览`,"drawer.outputRun":`Run`,"drawer.outputTodo":`Todo`,"drawer.outputs":`本次运行产出`,"drawer.previewUnavailable":`此产出没有可用的公开安全内联预览。`,"drawer.priority":`优先级`,"drawer.progress":`进度`,"drawer.proposalApplied":`已应用,LoopX 状态将刷新。`,"drawer.proposalApplyFailed":`应用失败,没有写入任何变更。`,"drawer.proposalApplyFailedHint":`请刷新 Goal 状态后重新生成;若仍失败,可保留此页并查看高级诊断。`,"drawer.proposalClose":`关闭`,"drawer.proposalDefer":`稍后`,"drawer.proposalDeferred":`已暂缓,可稍后继续应用或重新生成。`,"drawer.proposalEnterGoal":`进入新 Goal`,"drawer.proposalExplainer":`确认后,LoopX 会执行这项变更并显示写入结果。关闭或取消不会修改任何状态。`,"drawer.proposalRecheck":`按最新状态重新检查`,"drawer.proposalRegenerate":`基于最新状态重试`,"drawer.proposalRejected":`已拒绝,这项变更不会写入。`,"drawer.proposalStale":`来源状态已变化,请按最新状态重新检查。`,"drawer.proposalViewGoal":`查看更新后的 Goal`,"drawer.reassign":`改派给`,"drawer.reassignSummary":`重新分配:{task}`,"drawer.reason":`原因`,"drawer.recoveryDescription":`本地历史已经保留,请选择恢复路径。`,"drawer.recoveryFailed":`上游 Session 恢复失败`,"drawer.recoveryNewSession":`携带上下文开始新 Session`,"drawer.recoveryRetry":`重试恢复`,"drawer.repositoryRole":`执行工作区`,"drawer.repository":`仓库`,"drawer.replyMode":`回复方式`,"drawer.subagentApplied":`已写入,并通过共享 Goal 状态读回校验。`,"drawer.subagentAppliedRefreshFailed":`已写入并通过共享 Goal 状态读回;状态投影刷新失败,可稍后手动刷新。`,"drawer.subagentApplying":`正在写入并校验共享状态读回…`,"drawer.subagentApplyFailed":`子代理设置写入失败。`,"drawer.subagentChildLimit":`当前上限`,"drawer.subagentConfirmDisable":`确认关闭子代理执行`,"drawer.subagentConfirmEnable":`确认开启子代理执行`,"drawer.subagentCurrentBoundary":`当前任务领域限制`,"drawer.subagentDescription":`仅在 Todo、配额、能力和写入范围门禁全部通过后,允许运行时为相互独立的任务临时创建子代理;不会强制并行,也不会授予持久权限。`,"drawer.subagentDisable":`预览关闭子代理执行`,"drawer.subagentDisableSummary":`这个 Goal 将不再创建新的子代理;现有 Todo 归属和执行记录不受影响。`,"drawer.subagentDomainInvalid":`所选任务领域限制无效。`,"drawer.subagentDomainTodoCount":`匹配 {count} 个开放 Todo`,"drawer.subagentDomains":`任务领域限制(可选)`,"drawer.subagentDomainsEmpty":`当前没有开放的 advancement Todo 声明 task_domain;保持为空即可不按任务领域限制子代理执行。`,"drawer.subagentDomainsHint":`全部不选表示不按任务领域过滤;选择后只放行匹配且已声明领域的 Todo,其他执行门禁始终生效。`,"drawer.subagentDomainsUnrestricted":`不限制任务领域`,"drawer.subagentEnable":`预览开启子代理执行`,"drawer.subagentLabel":`Per-Goal 执行边界`,"drawer.subagentMaxChildren":`最多子代理数`,"drawer.subagentNoChange":`当前 Goal 已是这个设置,没有写入任何内容。`,"drawer.subagentPending":`待确认`,"drawer.subagentPreviewBoundary":`预览边界调整`,"drawer.subagentPreviewFailed":`无法生成子代理设置预览。`,"drawer.subagentPreviewing":`正在核对最新 Goal 状态…`,"drawer.subagentPreviewReady":`预览已锁定,确认后才会写入这个 Goal。`,"drawer.subagentPreviewSummary":`最多允许创建 {count} 个子代理;任务领域限制:{domains}。`,"drawer.subagentRemoteReadOnly":`当前来源只读,请在 Goal 所在主机上修改。`,"drawer.subagentTitle":`自适应子代理执行`,"drawer.remoteDetailsDescription":`SSH 来源只展示公开安全状态,不读取来源主机上的连接配置。`,"drawer.remoteDetailsUnavailable":`远端详情未投影`,"drawer.resumeNo":`否`,"drawer.resumeYes":`是`,"drawer.runDetails":`执行 Session`,"drawer.runInterrupt":`中断本次运行`,"drawer.runLatest":`查看最近执行过程`,"drawer.runNewSession":`开始新 Session`,"drawer.runCloseSession":`关闭 Session`,"drawer.runRecordEmpty":`还没有运行记录。Agent 尚未开始这次执行;请在“详情与操作”查看等待条件或恢复 Session。`,"drawer.runRecordProjected":`当前没有可展示的逐步运行记录。LoopX 已读取到 {completed}/{total} 的投影进度{outputs};请在“详情与操作”检查 Session 状态。`,"drawer.runRecordProjectedOutputs":`和 {count} 项产出`,"drawer.runRoleAssistant":`已完成`,"drawer.runRoleSystem":`需检查`,"drawer.runRoleUser":`收到任务`,"drawer.runView":`Session 视图`,"drawer.scheduleAdd":`添加定时检查`,"drawer.scheduleDefaultNotification":`仅在需要你时通知`,"drawer.scheduleDefaultStop":`Goal 完成或 owner 停止`,"drawer.scheduleDefaultTarget":`由 LoopX 调度器按 Goal 配置唤醒。`,"drawer.scheduleEdit":`改为每 2 小时`,"drawer.scheduleLast":`上次执行`,"drawer.scheduleLocalTimezone":`本地时区`,"drawer.scheduleNext":`下次执行`,"drawer.scheduleNeverRun":`尚未执行`,"drawer.scheduleNotification":`通知`,"drawer.schedulePause":`暂停`,"drawer.schedulePending":`等待调度`,"drawer.scheduleResume":`恢复`,"drawer.scheduleRunNow":`立即运行`,"drawer.scheduleStop":`停止{kind}`,"drawer.scheduleStopCondition":`停止条件`,"drawer.scheduleTimezone":`时区`,"drawer.sessionRecoverable":`可恢复`,"drawer.sessionStatus":`会话状态`,"drawer.setupHeartbeat":`设置 Heartbeat`,"drawer.taskActions":`Todo 待确认操作`,"drawer.taskAdvancement":`推进任务`,"drawer.taskBlock":`标记阻塞`,"drawer.taskComplete":`标记完成`,"drawer.taskCompletedNote":`该任务保留为只读记录。`,"drawer.taskCompletedTitle":`任务已完成`,"drawer.taskDefer":`暂缓`,"drawer.taskDeferCondition":`Todo 暂缓恢复条件`,"drawer.taskDeferInvalid":`条件格式不受支持;请使用下列三种可判定条件。`,"drawer.taskDeferPlaceholder":`例如 pr_merged:owner/repo#123`,"drawer.taskDeferReview":`检查暂缓`,"drawer.taskDeferSupported":`支持 todo_done、pr_merged、capacity_available 条件。`,"drawer.taskDeferUntil":`暂缓至`,"drawer.taskDetails":`Todo 详情`,"drawer.taskInfo":`任务信息`,"drawer.taskManage":`管理任务`,"drawer.taskNextCompleted":`可创建后续任务`,"drawer.taskNextOpen":`推进或更新状态`,"drawer.taskOrdinary":`普通任务`,"drawer.taskStatusBlocked":`受阻`,"drawer.taskStatusDeferred":`已延期`,"drawer.resumeWhen":`恢复条件`,"drawer.taskNextDeferred":`等待恢复条件满足后重新评估`,"drawer.taskStatusCompleted":`已完成`,"drawer.taskStatusOpen":`待执行`,"drawer.taskSuccessor":`创建后续 Todo`,"drawer.taskSuccessorNote":`Owner 标记为阻塞,等待补充上下文。`,"drawer.taskSuccessorSummary":`创建后续 Todo:{task}`,"drawer.taskSuccessorText":`{task} 的后续工作`,"drawer.taskType":`任务类型`,"drawer.topic":`Topic`,"drawer.trigger":`触发方式`,"drawer.titleAttention":`需要你`,"drawer.titleOutput":`产出详情`,"drawer.titleProposalApplied":`执行结果`,"drawer.titleProposalConfirm":`确认执行`,"drawer.titleSchedule":`定时检查`,"drawer.unconfigured":`未配置`,"drawer.workspaceCandidates":`可选择的工作区`,"files.emptySummary":`公开安全产出`,"files.empty":`还没有文件、产出或已验证的阶段周报。`,"files.loadingReports":`正在加载已验证的阶段周报…`,"files.reportDelta":`+{added} 新增 · {changed} 变化`,"files.reportAdded":`新增`,"files.reportChanged":`变化`,"files.reportGeneration":`生成批次`,"files.reportLoadFailed":`无法加载已验证周报`,"files.reportPublication":`发布批次`,"files.title":`Files & Outputs`,"files.verifiedReport":`已验证阶段周报`,"header.agentUnavailable":`不可用`,"header.chatRuntime":`Chat`,"header.workAgentCount":`{count} 个工作 Agent`,"header.chat":`Chat`,"header.files":`Files`,"header.goalCapabilities":`能力配置`,"header.goalCapabilitiesDescription":`管理 Goal override 与继承的本机默认值。`,"header.goalDetails":`Goal 详情`,"header.goalDetailsDescription":`查看状态、用量、仓库、通知与 Session。`,"header.goalSettings":`Goal 设置`,"header.goalSettingsDescription":`打开 Goal 详情或能力配置`,"header.goalNavigation":`Goal 导航`,"header.goalView":`Goal 视图`,"header.live":`实时`,"header.manager":`LoopX 管家`,"header.managerDescription":`跨 Goal 的个人工作入口`,"header.managerOverview":`总览`,"header.managerView":`管家视图`,"header.openGoalNavigation":`打开 Goal 导航`,"header.readOnlySourceDescription":`{source} 通过 SSH 隧道只读展示`,"header.refresh":`刷新状态`,"header.refreshDone":`刚刚更新`,"header.refreshFailed":`刷新失败`,"header.refreshing":`刷新中`,"header.selectAgent":`选择 Agent`,"header.selectChatRuntime":`选择聊天 Runtime`,"header.tasks":`Tasks`,"header.themeBrutal":`切换到野兽主题`,"header.themePaper":`切换到默认主题`,"home.blockingSummary":`其中 {count} 项正在阻塞 Agent。`,"home.completedGoals":`已完成的 Goal`,"home.empty":`当前没有`,"startup.goalLoading":`正在加载状态…`,"startup.goalError":`状态加载失败`,"startup.progress":`已加载 {loaded} / {total} 个活跃 Goal`,"startup.partial":`Goal 状态正在逐个更新,当前统计尚不完整。`,"startup.independent":`此 Goal 的加载不会阻塞其他 Goal,你可以先查看已加载的内容。`,"startup.error.timeout":`读取超时,可在本地服务就绪后重试。`,"startup.error.network":`连接中断,请重试以重新连接。`,"startup.error.service":`本地服务暂时不可用,请重试继续加载。`,"startup.error.revision":`加载期间 Goal 目录发生变化,请刷新以同步。`,"startup.error.scope":`该 Goal 已不在当前来源中,请刷新目录。`,"startup.error.invalid":`无法解析状态响应,请刷新或检查 LoopX 更新。`,"startup.retry":`重试`,"startup.retryFailed":`重试失败的 Goal`,"startup.failedCount":`{count} 个 Goal 加载失败,已加载的 Goal 可继续使用。`,"home.greeting":`你好,我是 LoopX 管家`,"home.history":`历史`,"home.lane.needsYou":`需要你`,"home.lane.needsYouDescription":`等待你的决定、授权或补充信息`,"home.lane.observing":`观察中`,"home.lane.observingDescription":`持续监控,出现变化时再提醒你`,"home.lane.running":`执行中`,"home.lane.runningDescription":`Agent 正在推进并持续回传进展`,"home.lane.scheduled":`已安排`,"home.lane.scheduledDescription":`已经安排,等待时间或前置条件`,"home.noActivity":`尚无活动`,"home.noFirstActivity":`等待首次活动`,"home.noCompletedGoals":`还没有已完成的 Goal`,"home.preservedState":`保留状态,可随时恢复`,"home.stopped":`已停止`,"home.systemHealth":`系统健康:{summary}`,"home.taskCount":`{count} 个 Task`,"home.todayAt":`今天 {time}`,"home.waitingCount":`你有 {count} 项需要处理。`,"home.workspace":`Goal 工作区`,"lark.allMessages":`此 Topic 中的所有消息`,"lark.allTopicMessages":`所有 Topic 消息`,"lark.agentIngress":`Agent 入站方式`,"lark.agentAppPermissions":`每个选中的 Agent 都需要一个已具备群聊提及和回复能力的 Lark App。`,"lark.agentApps":`每个 Agent 的 Lark App`,"lark.agentAppsDescription":`默认使用上方 App;需要独立机器人身份时,可为 Agent 选择另一个兼容 App。`,"lark.agentAppSelection":`{agent} 的 Lark App`,"lark.appCreated":`App 已创建`,"lark.appCreateFailed":`创建失败`,"lark.appLoading":`正在加载可用的 Lark Apps…`,"lark.appPermissions":`该 App 能发送建联消息,但缺少接收群聊 @ 消息或自动回复所需的机器人权限。请开启 im:message.group_at_msg:readonly、im:message.send_as_bot 和事件 im.message.receive_v1,发布新版后刷新。`,"lark.appProfile":`Lark App`,"lark.apps":`Lark Apps`,"lark.autoReplyUnavailable":`自动回复暂不可用`,"lark.autoReplyReady":`自动回复可用`,"lark.bindGoal":`绑定到 Goal`,"lark.cancel":`取消`,"lark.cardinality":`一个 Lark App · 多个 Goal · 每个 Agent 一条隔离路由`,"lark.capture":`接收范围`,"lark.captureAddressed":`仅接收提及 App 或回复 App 的消息`,"lark.captureAll":`接收此 Goal Topic 中的所有消息`,"lark.captureScope":`接收范围`,"lark.captureScopeDescription":`决定哪些 Topic 消息会进入 LoopX;不会扩大 Agent 权限。`,"lark.closeConnection":`关闭连接弹窗`,"lark.closeCreate":`关闭创建弹窗`,"lark.closeSettings":`关闭 Lark 设置`,"lark.connect":`连接`,"lark.connectAllAgents":`连接全部已注册 Agent`,"lark.connectAllAgentsAction":`一键连接 {count} 个 Agent`,"lark.connectAllAgentsDescription":`一次引导创建 {count} 个隔离的 Agent Topic;请在对应 Topic 内发送请求,每个 Agent 保留独立路由和收件箱。`,"lark.connectApp":`连接 Lark App`,"lark.connection":`连接`,"lark.connections":`连接`,"lark.configuration":`Lark 配置`,"lark.continueFeishu":`在飞书中继续`,"lark.createAutomatically":`自动创建 Goal Topic`,"lark.createAutomaticallyDescription":`将为每个选中的 Agent 创建带 Agent 标识的专属 Topic。`,"lark.defaultAgentAppDescription":`用于查找目标群聊,并作为所有选中 Agent 的默认 App;下方的逐 Agent 选择可覆盖它。`,"lark.description":`管理可复用的 Lark App,并用独立 Topic 将群聊连接到 Goal。`,"lark.editConnection":`编辑 Lark 连接`,"lark.goalConnections":`{count} 个 Goal 连接`,"lark.goalTopicConnections":`Lark Goal Topic 连接`,"lark.groupChat":`群聊`,"lark.groupEmpty":`该机器人尚未加入可连接的群。请先在飞书群设置中添加这个机器人,再回来刷新或搜索。`,"lark.groupLoading":`正在读取该机器人已加入的群…`,"lark.groupSearch":`搜索该机器人已加入的群`,"lark.historyPermission":`历史补读权限(独立能力)`,"lark.health.eventProcessed":`已处理 {events} 条事件,成功回复 {replies} 条。`,"lark.health.eventUnverified":`事件订阅待验证`,"lark.health.eventUnverifiedDetail":`Provider listener 已就绪,但尚未收到消息事件。请启用 im.message.receive_v1、开通群聊 @ 消息权限并发布新版,然后在这个 Agent Topic 内发送新的 @ 消息;存在多条 Agent 路由时,群顶层消息会 fail closed。`,"lark.health.ignoredSelf":`已忽略机器人自身发送的消息,避免重复回复。`,"lark.health.invalidRouting":`路由配置无效`,"lark.health.invalidRoutingDetail":`连接已安全停用,请重新选择处理方式并保存。`,"lark.health.lastStatus":`最近事件状态:{status}`,"lark.health.listening":`监听中`,"lark.health.messageContextPermission":`消息权限不足`,"lark.health.messageContextPermissionDetail":`已收到消息事件,但无法读取群消息上下文。请发布并授权该 App 的群消息读取权限。`,"lark.health.notAddressed":`最近消息未直接 @ 机器人`,"lark.health.notAddressedDetail":`监听正常;当前连接只响应直接 @ 机器人或对机器人的回复。`,"lark.health.notStarted":`监听未启动`,"lark.health.notStartedDetail":`请刷新连接或重新启动 LoopX 后再试。`,"lark.health.processingFailed":`消息处理失败`,"lark.health.processingFailedDetail":`已收到消息事件,但 Agent 处理失败。请查看本地诊断后重试。`,"lark.health.queued":`已进入 Agent 收件箱`,"lark.health.queuedDetail":`消息由 {agent} 异步处理,不会启动通用 Chat Session。`,"lark.health.retrying":`监听重试中`,"lark.health.retryingDetail":`事件监听暂时中断,LoopX 正在自动重试。`,"lark.health.routeAmbiguous":`消息匹配多个 Goal`,"lark.health.routeAmbiguousDetail":`同一 Bot 和群聊存在多个完整群捕获连接。请让每个 Agent 使用独立 Bot,或只保留一个完整群连接。`,"lark.health.routeMismatch":`消息未匹配当前 Goal Topic`,"lark.health.routeMismatchDetail":`事件来自其他群聊或 Topic。请重新选择群聊并连接该 Goal,然后发送一条新的 @ 消息。`,"lark.health.routeUnavailable":`消息无法路由到 Goal`,"lark.health.routeUnavailableDetail":`当前连接信息不完整。请重新连接该 Goal 后再发送一条新的 @ 消息。`,"lark.health.starting":`正在启动`,"lark.health.startingDetail":`LoopX 正在启动该 App 的消息事件监听。`,"lark.health.unavailable":`自动回复不可用`,"lark.health.waiting":`等待处理`,"lark.incomingMessages":`接收消息`,"lark.ingressAsync":`异步收件箱`,"lark.ingressAsyncDescription":`写入 Agent 私有收件箱,等待后续显式处理。`,"lark.ingressLegacy":`旧版直连`,"lark.ingressLegacyDescription":`旧连接兼容模式;保存时请选择新的三种入站模式之一。`,"lark.ingressQueue":`排队`,"lark.ingressQueueDescription":`进入同一 Agent Session 的有界 FIFO 队列,当前 Turn 完成后处理。`,"lark.ingressSteering":`实时引导`,"lark.ingressSteeringDescription":`投到当前活跃 Turn;没有精确活跃 Turn 时安全拒绝。`,"lark.loading":`加载 Lark 配置…`,"lark.management":`Lark 管理`,"lark.openEventSettings":`查看飞书事件配置`,"lark.mentions":`提及机器人`,"lark.mentionsOnly":`仅提及消息`,"lark.needsMessagePermissions":`需要消息权限`,"lark.needsSetup":`需要设置`,"lark.newApp":`新建 Lark App`,"lark.noAgentConfigured":`未配置 Agent`,"lark.noConnections":`暂无匹配的连接。`,"lark.noProfiles":`还没有可用的 lark-cli App profile。`,"lark.profileName":`Profile 名称`,"lark.profileValidation":`Profile 只能包含字母、数字、点、下划线和连字符。`,"lark.processing":`处理方式`,"lark.region":`区域`,"lark.registerAnother":`+ 注册另一个 Lark App — 通过飞书创建`,"lark.reopenFeishu":`重新打开飞书`,"lark.settingsConfigure":`配置 {goal}`,"lark.settingsDisconnect":`解绑 {goal}`,"lark.replyMode":`回复方式`,"lark.replyModeDescription":`当前只支持在来源 Topic 内回复,避免跨群或跨 Goal 投递。`,"lark.reusableApps":`{count} 个可复用 App`,"lark.reusableWorkspaceApp":`可复用工作区 App`,"lark.saveConnection":`保存连接`,"lark.searchConnections":`搜索 Lark 连接`,"lark.searchPlaceholder":`搜索 App、群、Goal 或 Topic`,"lark.setupCopy":`LoopX 将通过 lark-cli 打开飞书官方创建页面。应用凭证保存在系统 Keychain,LoopX 只保留 profile 引用。`,"lark.someoneMentions":`有人提及 Agent`,"lark.targetAgent":`目标 Agent`,"lark.targetAgentDescription":`选择该 Goal 内已注册的 Agent。此连接只投递给一个 Agent,不广播、不授予新权限。实时引导与排队需要该 Agent 的精确活跃 Session。`,"lark.agentUnavailable":`{agent} · 已不可用`,"lark.selectRegisteredAgent":`请先选择可用的已注册 Agent;不会自动替换原先的接收者。`,"lark.topicPreview":`Topic 预览`,"lark.topicReply":`Topic 回复`,"lark.trigger":`触发方式`,"lark.waitingFeishu":`等待飞书完成创建`,"lark.waitingFeishuDescription":`请在新窗口中完成飞书授权,完成后会自动回到这里。`,"lark.waitingLink":`正在生成飞书官方创建链接…`,"lark.error.appCreate":`Lark App 创建失败`,"lark.error.appRequired":`请选择一个 Lark App profile。`,"lark.error.bind":`绑定失败`,"lark.error.bindPreview":`绑定预览失败`,"lark.error.configuration":`Lark 配置加载失败`,"lark.error.groupLookup":`无法读取该机器人已加入的群。请检查机器人状态后重试。`,"lark.error.groupLoad":`群聊加载失败`,"lark.error.invalidApp":`Lark App profile 不可用或尚未完成授权。`,"lark.error.messagePermissions":`该 App 缺少自动回复所需的机器人权限。请开启 im:message.group_at_msg:readonly 和 im:message:send_as_bot,发布新版后回来刷新重试。`,"lark.error.provider":`飞书 API 调用失败,且没有生成已验证回执。请稍后重试。`,"lark.error.setupPoll":`创建状态查询失败`,"lark.error.setupStart":`无法启动 Lark App 创建流程`,"lark.error.cliExecutable":`已找到配置的 lark-cli,但当前无法执行。请检查安装或启动参数。`,"lark.error.cliMissing":`未发现 lark-cli。请先安装 lark-cli,然后重新启动 LoopX。`,"lark.error.cliStart":`lark-cli 启动失败。请检查安装状态,然后重新启动 LoopX。`,"lark.error.disconnect":`解绑失败`,"notifications.autoNotify":`需要你确认时自动推送到群里`,"notifications.bind":`绑定到通知群`,"notifications.bindConfirm":`将把「{goal}」绑定到通知群「{target}」,绑定时会验证机器人在群内并发送一条确认消息。`,"notifications.bindFailed":`绑定失败`,"notifications.bound":`已绑定`,"notifications.confirmBind":`确认绑定`,"notifications.description":`把 Goal 里需要你确认的变更推送到飞书群。绑定和开关在这里完成,推送逻辑沿用现有通道。`,"notifications.disabled":`已停用`,"notifications.group":`通知群:{target}`,"notifications.loadFailed":`通知群列表加载失败`,"notifications.noTargets":`还没有可用的通知群。通知群涉及机器人私有身份,请先在终端配置一次:`,"notifications.notBound":`未绑定`,"notifications.recent":`最近 {time}`,"notifications.sentCount":`已发送 {count} 条`,"notifications.settings":`Goal 通知绑定`,"notifications.setupFailed":`设置失败`,"notifications.title":`飞书群通知`,"proposal.field.agentId":`Agent`,"proposal.field.cadence":`频率`,"proposal.field.completionCriteria":`完成标准`,"proposal.field.executionBoundary":`执行边界`,"proposal.field.goalId":`Goal ID`,"proposal.field.heartbeat":`Heartbeat`,"proposal.field.initialTodos":`首个任务`,"proposal.field.objective":`目标`,"proposal.field.operation":`操作`,"proposal.field.permission":`权限`,"proposal.field.reason":`原因`,"proposal.field.stopCondition":`停止条件`,"proposal.field.target":`检查内容`,"proposal.field.timezone":`时区`,"proposal.field.title":`标题`,"proposal.field.workspace":`执行工作区`,"proposal.gate.default":`需要宿主确认`,"proposal.impact.default":`确认后会调用规范 LoopX 服务写入状态。`,"proposal.impact.goalCreate":`确认后会创建 Goal 和首个 Todo,并让选定 Agent 开始首轮推进。`,"proposal.impact.lifecycleDelete":`确认后会从 source registry 和 global registry 移除这个已停止 Goal;项目文件、历史状态文件和备份不会被删除。`,"proposal.impact.lifecycleResume":`确认后会恢复 Goal 的自动调度资格并移回 Active Goals;实际执行仍受 quota、Gate 和 Todo 约束。`,"proposal.impact.lifecycleStop":`确认后会停止自动推进,并将 Goal 移入折叠的「已停止」列表;历史、Todo 和证据都会保留,可随时恢复。`,"proposal.impact.protected":`该操作需要通过受保护的 LoopX 写入服务完成。`,"proposal.primary.apply":`确认并应用`,"proposal.primary.goalCreate":`创建 Goal 并开始首轮`,"proposal.primary.lifecycleDelete":`删除 Goal`,"proposal.primary.lifecycleResume":`恢复 Goal`,"proposal.primary.lifecycleStop":`停止 Goal`,"proposal.primary.todoStart":`创建任务并开始执行`,"proposal.summary.goalCreate":`创建 Goal:{title}`,"proposal.summary.heartbeat":`为当前 Goal 设置 Heartbeat`,"proposal.summary.lifecycleDelete":`删除 Goal:{title}`,"proposal.summary.lifecycleResume":`恢复 Goal:{title}`,"proposal.summary.lifecycleStop":`停止 Goal:{title}`,"proposal.summary.monitor":`为当前 Goal 创建定时检查:{target}`,"proposal.workspace.current":`当前本地工作区(未绑定 Repository)`,"proposal.workspace.named":`{workspace}(仅提供执行环境,不会自动关联仓库)`,"proposal.workspaceGate.agentImpact":`先完成 Agent 身份绑定,再重新检查原操作;当前没有写入 Goal。`,"proposal.workspaceGate.agentTitle":`先绑定 Agent`,"proposal.workspaceGate.defaultSummary":`请选择 Goal 所属工作区。`,"proposal.workspaceGate.selectionImpact":`选择工作区后会重新展示待确认操作,选择本身不会写入状态。`,"proposal.workspaceGate.selectionTitle":`选择 Goal 工作区`,"projection.agentAdvancingGoal":`Agent 正在推进当前 Goal`,"projection.agentIdle":`暂无需要你处理`,"projection.agentNeedsDecision":`Agent 等待你的决定`,"projection.agentPreparingNextStep":`Agent 正在整理下一步`,"projection.agentStopped":`已由你停止;历史、Todo 和证据仍保留`,"projection.agentWaitingExternal":`正在等待外部条件`,"projection.confirmAgentDecision":`请确认 Agent 下一步需要的权限或决策`,"projection.events24h":`24 小时内 {count} 个事件`,"projection.firstReadOnlyAdapterCheck":`执行首次只读适配检查并保存进度`,"projection.goalVerified":`Goal 状态、Todo 与注册信息已验证`,"projection.latestRun":`最近运行`,"projection.latestValidation":`最近验证`,"projection.nextUpdatePending":`等待 LoopX 更新下一步`,"projection.publicSafeProjection":`公开安全状态投影`,"projection.refreshState":`刷新 LoopX 状态,确认当前进度仍然有效`,"projection.runEvidenceAvailable":`存在可查看的运行证据`,"projection.runRecorded":`最近一次 LoopX 运行已经记录`,"projection.statusRefreshNeeded":`LoopX 状态需要刷新`,"projection.todoStatusUpdated":`Todo 状态已经更新,正在确认下一步`,"projection.validationRecorded":`最近验证已经记录`,"runs.completed":`已完成`,"runs.failed":`需检查`,"runs.interrupted":`已中断`,"runs.queued":`已安排`,"runs.ready":`可继续`,"runs.resumeFailed":`恢复失败`,"runs.running":`执行中`,"runs.unknown":`状态未知`,"runs.waiting":`等待条件`,"schedule.active":`执行中`,"schedule.heartbeat":`Goal Heartbeat`,"schedule.monitor":`定时与持续任务`,"schedule.paused":`已暂停`,"schedule.summary":`按 LoopX 调度约束持续检查`,"schedule.defaultTarget":`检查当前 Goal 的阻塞、进度与新产出`,"schedule.unsupportedCalendar":`当前定时检查不支持精确到星期或时刻的日历计划。请改用固定间隔,例如“每 30 分钟”“每 2 小时”或“每天”;草稿已保留,没有生成待确认操作。`,"source.add":`添加来源`,"source.addConfigured":`添加只读来源`,"source.addMethod":`来源添加方式`,"source.addSsh":`添加 SSH 隧道来源`,"source.closeForm":`关闭来源表单`,"source.configured":`已配置 SSH`,"source.configuredCount":`本机 SSH Host · {count} 个`,"source.configuredGroup":`已配置 SSH Host · {count}(点击快速添加)`,"source.connected":`已连接`,"source.connecting":`连接中`,"source.controlPlane":`控制面来源`,"source.copy":`复制`,"source.copyCommand":`复制 SSH 隧道命令`,"source.copyError":`无法复制命令,请手动复制下方命令。`,"source.copied":`已复制`,"source.description":`已读取全部显式 Host(含 Include);通配规则不会作为具体来源。先运行命令,LoopX 不读取密钥或配置细节。`,"source.host":`本机 SSH Host`,"source.hostEmpty":`~/.ssh/config 中没有可直接选择的显式 Host。`,"source.hostLoadError":`无法读取本机 SSH Host。`,"source.hostPlaceholder":`输入或搜索 Host`,"source.invalid":`SSH 来源参数无效。`,"source.loadingHosts":`正在读取…`,"source.localInteractive":`本机交互`,"source.localPort":`本地端口`,"source.manual":`手动 URL`,"source.manualDescription":`远端来源始终按只读投影处理,不继承本机写权限。`,"source.name":`名称`,"source.namePlaceholder":`远程开发机`,"source.notAvailable":`不可用`,"source.readOnly":`SSH 隧道 · 只读`,"source.readOnlyNoticeDescription":`你可以查看 Goal、Task、证据与运行状态;写入、纠偏和 Agent 会话仍留在来源主机。`,"source.readOnlyNoticeTitle":`远端只读投影`,"source.readOnlyWriteError":`远端 SSH 隧道来源是只读投影,不能执行控制面写入。`,"source.refreshHosts":`重新读取 SSH Host`,"source.remove":`移除来源 {source}`,"source.removeCurrent":`移除当前来源`,"source.select":`选择控制面来源`,"source.selectHost":`请选择已配置的 SSH Host。`,"source.statusUrl":`本地转发 URL`,"source.tunnelCommandPending":`选择 Host 后生成隧道命令`,"machine.absent":`尚未配置`,"machine.action.create":`创建机器策略`,"machine.action.delete":`移除机器策略`,"machine.action.unchanged":`无需写入`,"machine.action.update":`更新机器策略`,"machine.applied":`机器策略已应用,并通过回读校验。`,"machine.applyError":`无法应用机器策略。`,"machine.applyPreview":`应用已审阅预览`,"machine.changedNamespaces":`变更的 Namespace`,"machine.capabilityCatalog":`机器能力目录`,"machine.capabilityEmpty":`当前没有注册可在机器作用域配置的能力。`,"machine.configured":`已配置`,"machine.confirmRollback":`确认回滚`,"machine.currentRevision":`当前 Revision`,"machine.currentValue":`当前机器值`,"machine.description":`与 Goal 设置共用能力目录。在这里管理受支持的机器默认值;仅支持 Goal 配置的能力会明确标注。`,"capabilities.rawJson":`高级:原始 JSON`,"machine.goalOnly":`此能力目前仅支持 Goal 级配置。请打开具体 Goal 的能力设置进行配置;这里不会设置机器级默认值。`,"machine.desiredRevision":`目标 Revision`,"machine.editorUnavailable":`当前版本未安装此 Namespace 的编辑器`,"machine.editorUnavailableDescription":`它仍会显示在 Registry 中;安装或升级对应的 Dashboard 编辑器后才能修改。`,"machine.editorMode":`编辑模式`,"machine.liveDefault":`实时默认值;Goal 显式覆盖优先`,"machine.liveDefaultDescription":`没有显式周期报告覆盖的 Goal 会在每次规划时读取当前机器策略。修改或移除策略会立即影响这些已有 Goal;显式 Goal 覆盖保持固定。`,"machine.genericNamespaceDescription":`使用 JSON 编辑这个已注册 Namespace。LoopX 会先按 capability 自己拥有的 schema 校验,再允许预览写入。`,"machine.jsonConfiguration":`Namespace 配置(JSON)`,"machine.jsonConfigurationHelp":`只更新当前 Namespace;其他机器配置会保留,Apply 仍锁定到已审阅的 Preview Revision。`,"machine.jsonEditor":`JSON`,"machine.jsonInvalid":`请先填写一个合法的 JSON object,再预览变更。`,"machine.loadError":`无法读取机器配置。`,"machine.machinePolicy":`机器策略`,"machine.namespaceCount":`已注册 Namespace`,"machine.namespaces":`配置 Namespace`,"machine.periodicReport":`周期报告`,"machine.periodicReportDescription":`为所有未显式覆盖的 Goal 提供默认报告策略;Goal 调度与发送消费解析后的有效配置。`,"machine.periodicReportActivation":`开启后将在已验证的阶段节点自动投递`,"machine.periodicReportActivationDescription":`这不是每周定时器。当 LoopX 验证 Goal 已完成一个阶段时,Agent 会生成并冻结报告,随后通过配置的 Goal Channel 自动发送。启用此订阅即授予持续投递权;发送失败或路由漂移会 fail closed 并进入修复。`,"machine.preview":`审阅机器配置变更`,"machine.previewChanges":`预览变更`,"machine.previewError":`无法生成机器策略预览。`,"machine.previewLocked":`应用操作锁定到当前 Revision;若机器状态变化,LoopX 会要求重新预览。`,"machine.previewRollback":`预览回滚`,"machine.previewRemoval":`预览移除`,"machine.profilePreset":`Profile preset`,"machine.profilePresetHelp":`由 capability 管理的 preset,例如 weekly-progress。`,"machine.registry":`Typed Registry`,"machine.requiredFields":`开启后必须填写 profile preset、Goal Channel route 与有效时区。`,"machine.revision":`机器 Revision`,"machine.revisionLockedReady":`所有变更必须先预览;只有对应的机器 Revision 仍然有效时才会应用。`,"machine.rollbackAvailable":`可回滚上一次应用`,"machine.rollbackDescription":`先预览已保存的前一 Revision,再决定是否恢复。`,"machine.rollbackError":`无法完成回滚。`,"machine.rollbackPreviewDescription":`前一 Revision 已准备恢复,请确认执行本次回滚。`,"machine.rolledBack":`已恢复前一版机器策略,并通过校验。`,"machine.removed":`机器策略已移除,并通过回读校验。`,"machine.routeRef":`Goal Channel route`,"machine.routeRefHelp":`只填写公开 route alias;凭据与 provider identifier 不会进入此表单。`,"machine.timezone":`时区`,"machine.timezoneHelp":`填写 IANA 时区,例如 Asia/Shanghai。`,"machine.title":`机器配置`,"machine.unchanged":`机器策略已与预览一致,本次没有写入。`,"machine.visualEditor":`引导式`,"capabilities.atomicOverride":`Goal override 按完整配置生效`,"capabilities.atomicOverrideDescription":`Goal 的完整配置优先于机器默认值;LoopX 不会在两个作用域之间逐字段拼接。`,"capabilities.applyFailed":`Goal 能力变更未写入。`,"capabilities.applyPreview":`应用此预览`,"capabilities.catalog":`Goal 能力目录`,"capabilities.chooseGoal":`请先选择一个 Goal,再查看它的能力配置。`,"capabilities.defaultValue":`声明的默认值`,"capabilities.description":`查看当前 Goal 可用的能力,以及每项配置的准确作用域。`,"capabilities.editorPrepared":`已注册 typed editor contract`,"capabilities.effectiveSource":`当前生效来源`,"capabilities.empty":`当前 Goal 没有可用的能力描述。`,"capabilities.fields":`已注册字段`,"capabilities.goalPolicy":`Goal 能力策略`,"capabilities.goalScope":`Goal`,"capabilities.goalValue":`当前 Goal 值`,"capabilities.loadFailed":`无法加载 Goal 能力`,"capabilities.loading":`正在加载 Goal 能力…`,"capabilities.machineOnly":`此能力只能在机器作用域配置。`,"capabilities.machineValue":`实时机器默认值`,"capabilities.machineScope":`机器`,"capabilities.previewOnly":`当前读取结果来自真实配置;在 revision-locked preview/apply 路径接通前,Dashboard 不会提供 Goal 写入控件。`,"capabilities.preview":`锁定 revision 的变更预览`,"capabilities.previewChanges":`预览变更`,"capabilities.restoreInheritance":`恢复继承机器默认值`,"capabilities.previewFailed":`无法预览 Goal 能力变更。`,"capabilities.previewLocked":`应用时会重新校验这一个 plan revision;过期变更将被拒绝。`,"capabilities.partialWrite":`Goal 值已保存;共享投影仍需修复`,"capabilities.partialWriteDescription":`源 Goal 配置已经写入并回读,但共享 runtime 投影尚未同步;请勿重复提交本次变更。`,"capabilities.refreshSource":`刷新源配置`,"capabilities.readOnly":`只读能力`,"capabilities.revisionLockedReady":`所有变更必须先预览;只有对应的精确 revision 仍然有效时才会写入。`,"capabilities.retry":`重试`,"capabilities.source.capability_default":`能力默认值`,"capabilities.source.goal_override":`Goal override`,"capabilities.source.machine_default":`实时机器默认值`,"capabilities.source.not_configured":`未配置`,"capabilities.title":`Goal 能力`,"settings.close":`关闭设置`,"settings.appearance":`外观`,"settings.appearanceDescription":`管理当前浏览器里的工作区显示偏好。`,"settings.appearanceTabDescription":`主题和显示偏好`,"settings.capabilitiesTabDescription":`当前 Goal 的能力覆盖配置`,"settings.back":`返回工作区`,"settings.categories":`设置分类`,"settings.description":`管理工作区偏好与集成。`,"settings.eyebrow":`工作区偏好`,"settings.general":`通用`,"settings.goalConnections":`Goal 连接`,"settings.language":`语言`,"settings.languageDescription":`选择 LoopX Desktop 工作区使用的界面语言。`,"settings.languageEnglishDescription":`使用英文显示导航、设置和工作区控件。`,"settings.languageEnglish":`English`,"settings.languageSimplifiedChineseDescription":`使用简体中文显示导航、设置和工作区控件。`,"settings.languageSimplifiedChinese":`简体中文`,"settings.languageStoredLocally":`此偏好仅保存在当前设备。`,"settings.languageTabDescription":`当前设备的界面语言`,"settings.larkTabDescription":`App、群聊和 Goal Topic 连接`,"settings.machineTabDescription":`本机各 Capability 共享的 typed defaults`,"settings.notifications":`通知`,"settings.open":`设置`,"settings.themeDefault":`纸张`,"settings.themeDefaultDescription":`安静、轻量,适合长期查看。`,"settings.themeDescription":`选择工作区的视觉风格。设置会保存在当前浏览器本地。`,"settings.themeHighContrast":`高对比`,"settings.themeHighContrastDescription":`更强边框和更醒目的状态块。`,"settings.themeLoopx":`LoopX 标准`,"settings.themeLoopxDescription":`精确的黑白界面、Geist 字体与安静的细线结构。`,"settings.title":`设置`,"settings.workspaceDisplay":`工作区显示`,"settings.workspaceTheme":`工作区主题`,"session.closeRecord":`退出运行记录`,"session.details":`Session 详情`,"session.record":`执行 Session · 运行记录`,"session.recordDescription":`当前时间线已切换到这次 Session 的消息与 Turn 记录。`,"sidebar.createGoal":`创建 Goal`,"sidebar.delete":`删除`,"sidebar.deleteGoal":`删除 Goal`,"sidebar.manager":`LoopX 管家`,"sidebar.notifications":`设置`,"sidebar.owner":`个人工作区`,"sidebar.product":`个人 Agent 工作区`,"sidebar.resume":`恢复`,"sidebar.resumeGoal":`恢复 Goal`,"sidebar.stop":`停止`,"tasks.historyLoading":`正在加载历史…`,"tasks.historyError":`历史加载失败,已显示的内容仍可查看。`,"tasks.historyExpired":`历史快照已过期,重新加载后可继续查看。`,"tasks.historyRetry":`重新加载`,"tasks.historyEnd":`已显示全部完成记录`,"tasks.historyMore":`加载更多`,"tasks.historyLocalOnly":`请打开这台机器的 Dashboard 查看完整历史。`,"sidebar.sortGoals":`调整 Goal 顺序`,"sidebar.dragGoal":`拖拽调整顺序,或使用列表排序按钮`,"sidebar.moveUp":`上移 {goal}`,"sidebar.moveDown":`下移 {goal}`,"sidebar.goalMoved":`{goal} 已移至第 {position} 位`,"sidebar.orderNotSaved":`顺序已在本次页面生效;浏览器存储不可用,无法保存。`,"sidebar.stopGoal":`停止 Goal`,"sidebar.stopped":`已停止`,"sidebar.stoppedLoading":`正在加载已停止 Goal`,"sidebar.stoppedLoadFailed":`已停止 Goal 加载失败,其他 Goal 仍可使用。`,"sidebar.retryStopped":`重试`,"state.completed":`已完成`,"state.needsRepair":`需修复`,"state.needsYou":`等你`,"state.quiet":`安静运行`,"state.running":`推进中`,"state.stopped":`已停止`,"state.waiting":`等待条件`,"tasks.blocked":`受阻`,"tasks.agentLane":`工作 Agent`,"tasks.agentLaneDescription":`筛选这个 Goal 下的工作泳道`,"tasks.agentLaneFilter":`按工作 Agent 筛选`,"tasks.allAgentLanes":`全部 Agent({count})`,"tasks.chatAgentReplied":`Agent 已回复`,"tasks.chatPending":`已发送给 Agent`,"tasks.chatPendingDescription":`正在处理;只有经过确认的任务操作才会更新 Tasks。`,"tasks.chatRecent":`最近对话`,"tasks.chatUnchangedDescription":`本次对话没有直接修改 Tasks。需要执行时,可先转成 Task 草稿并确认。`,"tasks.chatViewReply":`查看回复`,"tasks.convertToTask":`转为 Task`,"tasks.completed":`已完成`,"runs.discoveryPartial":`部分执行详情暂不可用,正在重连;任务摘要不代表实时执行状态。`,"runs.discoveryOffline":`执行服务暂不可用,正在重连;保留的任务摘要可能已过时。`,"files.openConversation":`前往会话`,"files.exportSummary":`导出摘要`,"tasks.viewDescription":`先处理待确认,再查看工作与完成记录`,"tasks.viewLabel":`任务视图`,"tasks.listView":`列表`,"tasks.boardView":`看板`,"tasks.completedSummary":`已完成 {count} 项,近期完成明细由控制面按需投影。`,"tasks.emptyCompleted":`还没有完成的任务。`,"tasks.emptyConfirm":`没有待确认的任务。`,"tasks.emptyRunning":`没有待执行或进行中的任务。`,"tasks.emptySchedules":`没有定时任务。`,"tasks.emptyGoal":`这个 Goal 还没有任务。用下面的输入框描述下一步,LoopX 会先展示待确认操作。`,"tasks.markComplete":`标记完成:{name}`,"tasks.moreActions":`更多操作:{name}`,"tasks.openExecution":`查看执行过程:{name}`,"tasks.pending":`待处理`,"tasks.pendingAndRunning":`待执行 / 进行中`,"tasks.scheduled":`定时与持续`,"tasks.sessionError":`Session 异常`,"tasks.waiting":`待执行`,"tasks.waitingAge":`已等待 {age}`,"tasks.viewExecution":`查看执行过程`,"tasks.viewResult":`查看结果`,"time.days":`{count} 天`,"time.hours":`{count} 小时`,"timeline.emptyGoal":`这个 Goal 还没有新动态`,"timeline.emptyGoalDescription":`你可以直接询问进度或下发新的纠偏信息。`,"timeline.emptyWorkspace":`今天的工作区很安静`,"timeline.emptyWorkspaceDescription":`向 LoopX 管家描述一个 Goal,或询问今天最值得关注的事情。`,"timeline.gateHistory":`{count} 项历史 Gate`,"timeline.pending":`正在整理…`,"timeline.runCompleted":`{run}:已完成`,"timeline.review":`查看处理方式`,"timeline.reviewAndConfirm":`查看并确认`,"timeline.waitingConfirmation":`待你确认`}};function Gi(e,t){return t?Object.entries(t).reduce((e,[t,n])=>e.replaceAll(`{${t}}`,String(n)),e):e}function Ki(){try{return window.localStorage.getItem(`loopx-pw-locale`)===`en`?`en`:`zh-CN`}catch{return`zh-CN`}}function qi({children:e}){let[t,n]=(0,R.useState)(Ki);function r(e){n(e);try{window.localStorage.setItem(Ui,e)}catch{}}(0,R.useEffect)(()=>{document.documentElement.lang=t},[t]);let i=(0,R.useMemo)(()=>({locale:t,setLocale:r,t:(e,n)=>Gi(Wi[t][e],n)}),[t]);return(0,z.jsx)(Hi.Provider,{value:i,children:e})}function Ji(){let e=(0,R.useContext)(Hi);if(!e)throw Error(`useWorkspaceI18n must be used within WorkspaceI18nProvider`);return e}function Yi(e,t){let n={安静运行:`state.quiet`,等你:`state.needsYou`,等待条件:`state.waiting`,推进中:`state.running`,需修复:`state.needsRepair`,已完成:`state.completed`,已停止:`state.stopped`}[e];return n?Wi[t][n]:e}function Xi(e,t){let n={busy:`runs.running`,completed:`runs.completed`,failed:`runs.failed`,queued:`runs.queued`,ready:`runs.ready`,resume_failed:`runs.resumeFailed`,running:`runs.running`,waiting:`runs.waiting`};return e?n[e]?t(n[e]):e:t(`runs.unknown`)}function Zi(e,t){if(!e)return null;let n=new Date(e).getTime();if(Number.isNaN(n))return null;let r=Date.now()-n;if(r<36e5)return null;let i=Math.floor(r/864e5);return i>=1?t(`time.days`,{count:i}):t(`time.hours`,{count:Math.floor(r/36e5)})}var Qi;function H(e,t,n){function r(n,r){if(n._zod||Object.defineProperty(n,"_zod",{value:{def:r,constr:o,traits:new Set},enumerable:!1}),n._zod.traits.has(e))return;n._zod.traits.add(e),t(n,r);let i=o.prototype,a=Object.keys(i);for(let e=0;en?.Parent&&t instanceof n.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(o,"name",{value:e}),o}var $i=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},ea=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(Qi=globalThis).__zod_globalConfig??(Qi.__zod_globalConfig={});var ta=globalThis.__zod_globalConfig;function na(e){return e&&Object.assign(ta,e),ta}function ra(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function ia(e,t){return typeof t==`bigint`?t.toString():t}function aa(e){return{get value(){{let t=e();return Object.defineProperty(this,"value",{value:t}),t}}}}function oa(e){return e==null}function sa(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function ca(e,t){let n=e/t,r=Math.round(n),i=2**-52*Math.max(Math.abs(n),1);return Math.abs(n-r){};function ga(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var _a=aa(()=>{if(ta.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function va(e){if(ga(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return ga(n)!==!1&&Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)!==!1}function ya(e){return va(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var ba=new Set([`string`,`number`,`symbol`]);function xa(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Sa(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function U(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function Ca(e){return Object.keys(e).filter(t=>e[t]._zod.optin===`optional`&&e[t]._zod.optout===`optional`)}var wa={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function Ta(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);return Sa(e,fa(e._zod.def,{get shape(){let e={};for(let r in t){if(!(r in n.shape))throw Error(`Unrecognized key: "${r}"`);t[r]&&(e[r]=n.shape[r])}return da(this,`shape`,e),e},checks:[]}))}function Ea(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);return Sa(e,fa(e._zod.def,{get shape(){let r={...e._zod.def.shape};for(let e in t){if(!(e in n.shape))throw Error(`Unrecognized key: "${e}"`);t[e]&&delete r[e]}return da(this,`shape`,r),r},checks:[]}))}function Da(e,t){if(!va(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=e._zod.def.shape;for(let e in t)if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return da(this,`shape`,n),n}}))}function Oa(e,t){if(!va(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return da(this,`shape`,n),n}}))}function ka(e,t){if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t._zod.def.shape};return da(this,`shape`,n),n},get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function Aa(e,t,n){let r=t._zod.def.checks;if(r&&r.length>0)throw Error(`.partial() cannot be used on object schemas containing refinements`);return Sa(t,fa(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in r))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t])}else for(let t in r)i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t];return da(this,`shape`,i),i},checks:[]}))}function ja(e,t,n){return Sa(t,fa(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in i))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=new e({type:`nonoptional`,innerType:r[t]}))}else for(let t in r)i[t]=new e({type:`nonoptional`,innerType:r[t]});return da(this,`shape`,i),i}}))}function Ma(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function Fa(e){return typeof e==`string`?e:e?.message}function Ia(e,t,n){let r=e.message?e.message:Fa(e.inst?._zod.def?.error?.(e))??Fa(t?.error?.(e))??Fa(n.customError?.(e))??Fa(n.localeError?.(e))??`Invalid input`,{inst:i,continue:a,input:o,...s}=e;return s.path??=[],s.message=r,t?.reportInput&&(s.input=o),s}function La(e){return Array.isArray(e)?`array`:typeof e==`string`?`string`:`unknown`}function Ra(...e){let[t,n,r]=e;return typeof t==`string`?{message:t,code:`custom`,input:n,inst:r}:{...t}}var za=(e,t)=>{e.name=`$ZodError`,Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),e.message=JSON.stringify(t,ia,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},Ba=H(`$ZodError`,za),Va=H(`$ZodError`,za,{Parent:Error});function Ha(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}function Ua(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i(t,n,r,i)=>{let a=r?{...r,async:!1}:{async:!1},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise)throw new $i;if(o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>Ia(e,a,na())));throw ha(t,i?.callee),t}return o.value},Ga=e=>async(t,n,r,i)=>{let a=r?{...r,async:!0}:{async:!0},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise&&(o=await o),o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>Ia(e,a,na())));throw ha(t,i?.callee),t}return o.value},Ka=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new $i;return a.issues.length?{success:!1,error:new(e??Ba)(a.issues.map(e=>Ia(e,i,na())))}:{success:!0,data:a.value}},qa=Ka(Va),Ja=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?{success:!1,error:new e(a.issues.map(e=>Ia(e,i,na())))}:{success:!0,data:a.value}},Ya=Ja(Va),Xa=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Wa(e)(t,n,i)},Za=e=>(t,n,r)=>Wa(e)(t,n,r),Qa=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ga(e)(t,n,i)},$a=e=>async(t,n,r)=>Ga(e)(t,n,r),eo=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ka(e)(t,n,i)},to=e=>(t,n,r)=>Ka(e)(t,n,r),no=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ja(e)(t,n,i)},ro=e=>async(t,n,r)=>Ja(e)(t,n,r),io=/^[cC][0-9a-z]{6,}$/,ao=/^[0-9a-z]+$/,oo=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,so=/^[0-9a-vA-V]{20}$/,co=/^[A-Za-z0-9]{27}$/,lo=/^[a-zA-Z0-9_-]{21}$/,uo=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,fo=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,po=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,mo=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,ho=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;function go(){return new RegExp(ho,`u`)}var _o=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,vo=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,yo=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,bo=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,xo=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,So=/^[A-Za-z0-9_-]*$/,Co=/^https?$/,wo=/^\+[1-9]\d{6,14}$/,To=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`,Eo=RegExp(`^${To}$`);function Do(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Oo(e){return RegExp(`^${Do(e)}$`)}function ko(e){let t=Do({precision:e.precision}),n=[`Z`];e.local&&n.push(``),e.offset&&n.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let r=`${t}(?:${n.join(`|`)})`;return RegExp(`^${To}T(?:${r})$`)}var Ao=e=>{let t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??``}}`:`[\\s\\S]*`;return RegExp(`^${t}$`)},jo=/^-?\d+$/,Mo=/^-?\d+(?:\.\d+)?$/,No=/^(?:true|false)$/i,Po=/^null$/i,Fo=/^[^A-Z]*$/,Io=/^[^a-z]*$/,Lo=H(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),Ro={number:`number`,bigint:`bigint`,object:`date`},zo=H(`$ZodCheckLessThan`,(e,t)=>{Lo.init(e,t);let n=Ro[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.maximum:n.exclusiveMaximum)??1/0;t.value{(t.inclusive?r.value<=t.value:r.value{Lo.init(e,t);let n=Ro[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.minimum:n.exclusiveMinimum)??-1/0;t.value>r&&(t.inclusive?n.minimum=t.value:n.exclusiveMinimum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Vo=H(`$ZodCheckMultipleOf`,(e,t)=>{Lo.init(e,t),e._zod.onattach.push(e=>{var n;(n=e._zod.bag).multipleOf??(n.multipleOf=t.value)}),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?n.value%t.value===BigInt(0):ca(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),Ho=H(`$ZodCheckNumberFormat`,(e,t)=>{Lo.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=wa[t.format];e._zod.onattach.push(e=>{let r=e._zod.bag;r.format=t.format,r.minimum=i,r.maximum=a,n&&(r.pattern=jo)}),e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}sa&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),Uo=H(`$ZodCheckMaxLength`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.maximum??1/0;t.maximum{let r=n.value;if(r.length<=t.maximum)return;let i=La(r);n.issues.push({origin:i,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Wo=H(`$ZodCheckMinLength`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.minimum??-1/0;t.minimum>n&&(e._zod.bag.minimum=t.minimum)}),e._zod.check=n=>{let r=n.value;if(r.length>=t.minimum)return;let i=La(r);n.issues.push({origin:i,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Go=H(`$ZodCheckLengthEquals`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag;n.minimum=t.length,n.maximum=t.length,n.length=t.length}),e._zod.check=n=>{let r=n.value,i=r.length;if(i===t.length)return;let a=La(r),o=i>t.length;n.issues.push({origin:a,...o?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),Ko=H(`$ZodCheckStringFormat`,(e,t)=>{var n,r;Lo.init(e,t),e._zod.onattach.push(e=>{let n=e._zod.bag;n.format=t.format,t.pattern&&(n.patterns??=new Set,n.patterns.add(t.pattern))}),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),qo=H(`$ZodCheckRegex`,(e,t)=>{Ko.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),Jo=H(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=Fo,Ko.init(e,t)}),Yo=H(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=Io,Ko.init(e,t)}),Xo=H(`$ZodCheckIncludes`,(e,t)=>{Lo.init(e,t);let n=xa(t.includes),r=new RegExp(typeof t.position==`number`?`^.{${t.position}}${n}`:n);t.pattern=r,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(r)}),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),Zo=H(`$ZodCheckStartsWith`,(e,t)=>{Lo.init(e,t);let n=RegExp(`^${xa(t.prefix)}.*`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),Qo=H(`$ZodCheckEndsWith`,(e,t)=>{Lo.init(e,t);let n=RegExp(`.*${xa(t.suffix)}$`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),$o=H(`$ZodCheckOverwrite`,(e,t)=>{Lo.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),es=class{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),--this.indent}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(` +`).filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>` `.repeat(this.indent*2)+e);for(let e of r)this.content.push(e)}compile(){let e=Function,t=this?.args,n=[...(this?.content??[``]).map(e=>` ${e}`)];return new e(...t,n.join(` +`))}},ts={major:4,minor:4,patch:3},ns=H(`$ZodType`,(e,t)=>{var n;e??={},e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=ts;let r=[...e._zod.def.checks??[]];e._zod.traits.has(`$ZodCheck`)&&r.unshift(e);for(let t of r)for(let n of t._zod.onattach)n(e);if(r.length===0)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let t=(e,t,n)=>{let r=Ma(e),i;for(let a of t){if(a._zod.def.when){if(Na(e)||!a._zod.def.when(e))continue}else if(r)continue;let t=e.issues.length,o=a._zod.check(e);if(o instanceof Promise&&n?.async===!1)throw new $i;if(i||o instanceof Promise)i=(i??Promise.resolve()).then(async()=>{await o,e.issues.length!==t&&(r||=Ma(e,t))});else{if(e.issues.length===t)continue;r||=Ma(e,t)}}return i?i.then(()=>e):e},n=(n,i,a)=>{if(Ma(n))return n.aborted=!0,n;let o=t(i,r,a);if(o instanceof Promise){if(a.async===!1)throw new $i;return o.then(t=>e._zod.parse(t,a))}return e._zod.parse(o,a)};e._zod.run=(i,a)=>{if(a.skipChecks)return e._zod.parse(i,a);if(a.direction===`backward`){let t=e._zod.parse({value:i.value,issues:[]},{...a,skipChecks:!0});return t instanceof Promise?t.then(e=>n(e,i,a)):n(t,i,a)}let o=e._zod.parse(i,a);if(o instanceof Promise){if(a.async===!1)throw new $i;return o.then(e=>t(e,r,a))}return t(o,r,a)}}ua(e,`~standard`,()=>({validate:t=>{try{let n=qa(e,t);return n.success?{value:n.data}:{issues:n.error?.issues}}catch{return Ya(e,t).then(e=>e.success?{value:e.data}:{issues:e.error?.issues})}},vendor:`zod`,version:1}))}),rs=H(`$ZodString`,(e,t)=>{ns.init(e,t),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??Ao(e._zod.bag),e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch{}return typeof n.value==`string`||n.issues.push({expected:`string`,code:`invalid_type`,input:n.value,inst:e}),n}}),is=H(`$ZodStringFormat`,(e,t)=>{Ko.init(e,t),rs.init(e,t)}),as=H(`$ZodGUID`,(e,t)=>{t.pattern??=fo,is.init(e,t)}),os=H(`$ZodUUID`,(e,t)=>{if(t.version){let e={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(e===void 0)throw Error(`Invalid UUID version: "${t.version}"`);t.pattern??=po(e)}else t.pattern??=po();is.init(e,t)}),ss=H(`$ZodEmail`,(e,t)=>{t.pattern??=mo,is.init(e,t)}),cs=H(`$ZodURL`,(e,t)=>{is.init(e,t),e._zod.check=n=>{try{let r=n.value.trim();if(!t.normalize&&t.protocol?.source===Co.source&&!/^https?:\/\//i.test(r)){n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid URL format`,input:n.value,inst:e,continue:!t.abort});return}let i=new URL(r);t.hostname&&(t.hostname.lastIndex=0,t.hostname.test(i.hostname)||n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid hostname`,pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort})),t.protocol&&(t.protocol.lastIndex=0,t.protocol.test(i.protocol.endsWith(`:`)?i.protocol.slice(0,-1):i.protocol)||n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid protocol`,pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort})),n.value=t.normalize?i.href:r;return}catch{n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort})}}}),ls=H(`$ZodEmoji`,(e,t)=>{t.pattern??=go(),is.init(e,t)}),us=H(`$ZodNanoID`,(e,t)=>{t.pattern??=lo,is.init(e,t)}),ds=H(`$ZodCUID`,(e,t)=>{t.pattern??=io,is.init(e,t)}),fs=H(`$ZodCUID2`,(e,t)=>{t.pattern??=ao,is.init(e,t)}),ps=H(`$ZodULID`,(e,t)=>{t.pattern??=oo,is.init(e,t)}),ms=H(`$ZodXID`,(e,t)=>{t.pattern??=so,is.init(e,t)}),hs=H(`$ZodKSUID`,(e,t)=>{t.pattern??=co,is.init(e,t)}),gs=H(`$ZodISODateTime`,(e,t)=>{t.pattern??=ko(t),is.init(e,t)}),_s=H(`$ZodISODate`,(e,t)=>{t.pattern??=Eo,is.init(e,t)}),vs=H(`$ZodISOTime`,(e,t)=>{t.pattern??=Oo(t),is.init(e,t)}),ys=H(`$ZodISODuration`,(e,t)=>{t.pattern??=uo,is.init(e,t)}),bs=H(`$ZodIPv4`,(e,t)=>{t.pattern??=_o,is.init(e,t),e._zod.bag.format=`ipv4`}),xs=H(`$ZodIPv6`,(e,t)=>{t.pattern??=vo,is.init(e,t),e._zod.bag.format=`ipv6`,e._zod.check=n=>{try{new URL(`http://[${n.value}]`)}catch{n.issues.push({code:`invalid_format`,format:`ipv6`,input:n.value,inst:e,continue:!t.abort})}}}),Ss=H(`$ZodCIDRv4`,(e,t)=>{t.pattern??=yo,is.init(e,t)}),Cs=H(`$ZodCIDRv6`,(e,t)=>{t.pattern??=bo,is.init(e,t),e._zod.check=n=>{let r=n.value.split(`/`);try{if(r.length!==2)throw Error();let[e,t]=r;if(!t)throw Error();let n=Number(t);if(`${n}`!==t||n<0||n>128)throw Error();new URL(`http://[${e}]`)}catch{n.issues.push({code:`invalid_format`,format:`cidrv6`,input:n.value,inst:e,continue:!t.abort})}}});function ws(e){if(e===``)return!0;if(/\s/.test(e)||e.length%4!=0)return!1;try{return atob(e),!0}catch{return!1}}var Ts=H(`$ZodBase64`,(e,t)=>{t.pattern??=xo,is.init(e,t),e._zod.bag.contentEncoding=`base64`,e._zod.check=n=>{ws(n.value)||n.issues.push({code:`invalid_format`,format:`base64`,input:n.value,inst:e,continue:!t.abort})}});function Es(e){if(!So.test(e))return!1;let t=e.replace(/[-_]/g,e=>e===`-`?`+`:`/`);return ws(t.padEnd(Math.ceil(t.length/4)*4,`=`))}var Ds=H(`$ZodBase64URL`,(e,t)=>{t.pattern??=So,is.init(e,t),e._zod.bag.contentEncoding=`base64url`,e._zod.check=n=>{Es(n.value)||n.issues.push({code:`invalid_format`,format:`base64url`,input:n.value,inst:e,continue:!t.abort})}}),Os=H(`$ZodE164`,(e,t)=>{t.pattern??=wo,is.init(e,t)});function ks(e,t=null){try{let n=e.split(`.`);if(n.length!==3)return!1;let[r]=n;if(!r)return!1;let i=JSON.parse(atob(r));return!(`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&(!(`alg`in i)||i.alg!==t))}catch{return!1}}var As=H(`$ZodJWT`,(e,t)=>{is.init(e,t),e._zod.check=n=>{ks(n.value,t.alg)||n.issues.push({code:`invalid_format`,format:`jwt`,input:n.value,inst:e,continue:!t.abort})}}),js=H(`$ZodNumber`,(e,t)=>{ns.init(e,t),e._zod.pattern=e._zod.bag.pattern??Mo,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=Number(n.value)}catch{}let i=n.value;if(typeof i==`number`&&!Number.isNaN(i)&&Number.isFinite(i))return n;let a=typeof i==`number`?Number.isNaN(i)?`NaN`:Number.isFinite(i)?void 0:`Infinity`:void 0;return n.issues.push({expected:`number`,code:`invalid_type`,input:i,inst:e,...a?{received:a}:{}}),n}}),Ms=H(`$ZodNumberFormat`,(e,t)=>{Ho.init(e,t),js.init(e,t)}),Ns=H(`$ZodBoolean`,(e,t)=>{ns.init(e,t),e._zod.pattern=No,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=!!n.value}catch{}let i=n.value;return typeof i==`boolean`||n.issues.push({expected:`boolean`,code:`invalid_type`,input:i,inst:e}),n}}),Ps=H(`$ZodNull`,(e,t)=>{ns.init(e,t),e._zod.pattern=Po,e._zod.values=new Set([null]),e._zod.parse=(t,n)=>{let r=t.value;return r===null||t.issues.push({expected:`null`,code:`invalid_type`,input:r,inst:e}),t}}),Fs=H(`$ZodUnknown`,(e,t)=>{ns.init(e,t),e._zod.parse=e=>e}),Is=H(`$ZodNever`,(e,t)=>{ns.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({expected:`never`,code:`invalid_type`,input:t.value,inst:e}),t)});function Ls(e,t,n){e.issues.length&&t.issues.push(...Pa(n,e.issues)),t.value[n]=e.value}var Rs=H(`$ZodArray`,(e,t)=>{ns.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!Array.isArray(i))return n.issues.push({expected:`array`,code:`invalid_type`,input:i,inst:e}),n;n.value=Array(i.length);let a=[];for(let e=0;eLs(t,n,e))):Ls(s,n,e)}return a.length?Promise.all(a).then(()=>n):n}});function zs(e,t,n,r,i,a){let o=n in r;if(e.issues.length){if(i&&a&&!o)return;t.issues.push(...Pa(n,e.issues))}if(!o&&!i){e.issues.length||t.issues.push({code:`invalid_type`,expected:`nonoptional`,input:void 0,path:[n]});return}e.value===void 0?o&&(t.value[n]=void 0):t.value[n]=e.value}function Bs(e){let t=Object.keys(e.shape);for(let n of t)if(!e.shape?.[n]?._zod?.traits?.has(`$ZodType`))throw Error(`Invalid element at key "${n}": expected a Zod schema`);let n=Ca(e.shape);return{...e,keys:t,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(n)}}function Vs(e,t,n,r,i,a){let o=[],s=i.keySet,c=i.catchall._zod,l=c.def.type,u=c.optin===`optional`,d=c.optout===`optional`;for(let i in t){if(i===`__proto__`||s.has(i))continue;if(l===`never`){o.push(i);continue}let a=c.run({value:t[i],issues:[]},r);a instanceof Promise?e.push(a.then(e=>zs(e,n,i,t,u,d))):zs(a,n,i,t,u,d)}return o.length&&n.issues.push({code:`unrecognized_keys`,keys:o,input:t,inst:a}),e.length?Promise.all(e).then(()=>n):n}var Hs=H(`$ZodObject`,(e,t)=>{if(ns.init(e,t),!Object.getOwnPropertyDescriptor(t,`shape`)?.get){let e=t.shape;Object.defineProperty(t,"shape",{get:()=>{let n={...e};return Object.defineProperty(t,"shape",{value:n}),n}})}let n=aa(()=>Bs(t));ua(e._zod,`propValues`,()=>{let e=t.shape,n={};for(let t in e){let r=e[t]._zod;if(r.values){n[t]??(n[t]=new Set);for(let e of r.values)n[t].add(e)}}return n});let r=ga,i=t.catchall,a;e._zod.parse=(t,o)=>{a??=n.value;let s=t.value;if(!r(s))return t.issues.push({expected:`object`,code:`invalid_type`,input:s,inst:e}),t;t.value={};let c=[],l=a.shape;for(let e of a.keys){let n=l[e],r=n._zod.optin===`optional`,i=n._zod.optout===`optional`,a=n._zod.run({value:s[e],issues:[]},o);a instanceof Promise?c.push(a.then(n=>zs(n,t,e,s,r,i))):zs(a,t,e,s,r,i)}return i?Vs(c,s,t,o,n.value,e):c.length?Promise.all(c).then(()=>t):t}}),Us=H(`$ZodObjectJIT`,(e,t)=>{Hs.init(e,t);let n=e._zod.parse,r=aa(()=>Bs(t)),i=e=>{let t=new es([`shape`,`payload`,`ctx`]),n=r.value,i=e=>{let t=pa(e);return`shape[${t}]._zod.run({ value: input[${t}], issues: [] }, ctx)`};t.write(`const input = payload.value;`);let a=Object.create(null),o=0;for(let e of n.keys)a[e]=`key_${o++}`;t.write(`const newResult = {};`);for(let r of n.keys){let n=a[r],o=pa(r),s=e[r],c=s?._zod?.optin===`optional`,l=s?._zod?.optout===`optional`;t.write(`const ${n} = ${i(r)};`),c&&l?t.write(` + if (${n}.issues.length) { + if (${o} in input) { + payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${o}, ...iss.path] : [${o}] + }))); + } + } + + if (${n}.value === undefined) { + if (${o} in input) { + newResult[${o}] = undefined; + } + } else { + newResult[${o}] = ${n}.value; + } + + `):c?t.write(` + if (${n}.issues.length) { + payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${o}, ...iss.path] : [${o}] + }))); + } + + if (${n}.value === undefined) { + if (${o} in input) { + newResult[${o}] = undefined; + } + } else { + newResult[${o}] = ${n}.value; + } + + `):t.write(` + const ${n}_present = ${o} in input; + if (${n}.issues.length) { + payload.issues = payload.issues.concat(${n}.issues.map(iss => ({ + ...iss, + path: iss.path ? [${o}, ...iss.path] : [${o}] + }))); + } + if (!${n}_present && !${n}.issues.length) { + payload.issues.push({ + code: "invalid_type", + expected: "nonoptional", + input: undefined, + path: [${o}] + }); + } + + if (${n}_present) { + if (${n}.value === undefined) { + newResult[${o}] = undefined; + } else { + newResult[${o}] = ${n}.value; + } + } + + `)}t.write(`payload.value = newResult;`),t.write(`return payload;`);let s=t.compile();return(t,n)=>s(e,t,n)},a,o=ga,s=!ta.jitless,c=s&&_a.value,l=t.catchall,u;e._zod.parse=(d,f)=>{u??=r.value;let p=d.value;return o(p)?s&&c&&f?.async===!1&&f.jitless!==!0?(a||=i(t.shape),d=a(d,f),l?Vs([],p,d,f,u,e):d):n(d,f):(d.issues.push({expected:`object`,code:`invalid_type`,input:p,inst:e}),d)}});function Ws(e,t,n,r){for(let n of e)if(n.issues.length===0)return t.value=n.value,t;let i=e.filter(e=>!Ma(e));return i.length===1?(t.value=i[0].value,i[0]):(t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>Ia(e,r,na())))}),t)}var Gs=H(`$ZodUnion`,(e,t)=>{ns.init(e,t),ua(e._zod,`optin`,()=>t.options.some(e=>e._zod.optin===`optional`)?`optional`:void 0),ua(e._zod,`optout`,()=>t.options.some(e=>e._zod.optout===`optional`)?`optional`:void 0),ua(e._zod,`values`,()=>{if(t.options.every(e=>e._zod.values))return new Set(t.options.flatMap(e=>Array.from(e._zod.values)))}),ua(e._zod,`pattern`,()=>{if(t.options.every(e=>e._zod.pattern)){let e=t.options.map(e=>e._zod.pattern);return RegExp(`^(${e.map(e=>sa(e.source)).join(`|`)})$`)}});let n=t.options.length===1?t.options[0]._zod.run:null;e._zod.parse=(r,i)=>{if(n)return n(r,i);let a=!1,o=[];for(let e of t.options){let t=e._zod.run({value:r.value,issues:[]},i);if(t instanceof Promise)o.push(t),a=!0;else{if(t.issues.length===0)return t;o.push(t)}}return a?Promise.all(o).then(t=>Ws(t,r,e,i)):Ws(o,r,e,i)}}),Ks=H(`$ZodIntersection`,(e,t)=>{ns.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),a=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||a instanceof Promise?Promise.all([i,a]).then(([t,n])=>Js(e,t,n)):Js(e,i,a)}});function qs(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(va(e)&&va(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=qs(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;re.l&&e.r).map(([e])=>e);if(a.length&&i&&e.issues.push({...i,keys:a}),Ma(e))return e;let o=qs(t.value,n.value);if(!o.valid)throw Error(`Unmergable intersection. Error path: ${JSON.stringify(o.mergeErrorPath)}`);return e.value=o.data,e}var Ys=H(`$ZodTuple`,(e,t)=>{ns.init(e,t);let n=t.items;e._zod.parse=(r,i)=>{let a=r.value;if(!Array.isArray(a))return r.issues.push({input:a,inst:e,expected:`tuple`,code:`invalid_type`}),r;r.value=[];let o=[],s=Xs(n,`optin`),c=Xs(n,`optout`);if(!t.rest){if(a.lengthn.length&&r.issues.push({code:`too_big`,maximum:n.length,inclusive:!0,input:a,inst:e,origin:`array`})}let l=Array(n.length);for(let e=0;e{l[e]=t})):l[e]=t}if(t.rest){let e=n.length-1,s=a.slice(n.length);for(let n of s){e++;let a=t.rest._zod.run({value:n,issues:[]},i);a instanceof Promise?o.push(a.then(t=>Zs(t,r,e))):Zs(a,r,e)}}return o.length?Promise.all(o).then(()=>Qs(l,r,n,a,c)):Qs(l,r,n,a,c)}});function Xs(e,t){for(let n=e.length-1;n>=0;n--)if(e[n]._zod[t]!==`optional`)return n+1;return 0}function Zs(e,t,n){e.issues.length&&t.issues.push(...Pa(n,e.issues)),t.value[n]=e.value}function Qs(e,t,n,r,i){for(let a=0;a=i){t.value.length=a;break}t.issues.push(...Pa(a,n.issues))}t.value[a]=n.value}for(let e=t.value.length-1;e>=r.length&&n[e]._zod.optout===`optional`&&t.value[e]===void 0;e--)t.value.length=e;return t}var $s=H(`$ZodRecord`,(e,t)=>{ns.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!va(i))return n.issues.push({expected:`record`,code:`invalid_type`,input:i,inst:e}),n;let a=[],o=t.keyType._zod.values;if(o){n.value={};let s=new Set;for(let c of o)if(typeof c==`string`||typeof c==`number`||typeof c==`symbol`){s.add(typeof c==`number`?c.toString():c);let o=t.keyType._zod.run({value:c,issues:[]},r);if(o instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(o.issues.length){n.issues.push({code:`invalid_key`,origin:`record`,issues:o.issues.map(e=>Ia(e,r,na())),input:c,path:[c],inst:e});continue}let l=o.value,u=t.valueType._zod.run({value:i[c],issues:[]},r);u instanceof Promise?a.push(u.then(e=>{e.issues.length&&n.issues.push(...Pa(c,e.issues)),n.value[l]=e.value})):(u.issues.length&&n.issues.push(...Pa(c,u.issues)),n.value[l]=u.value)}let c;for(let e in i)s.has(e)||(c??=[],c.push(e));c&&c.length>0&&n.issues.push({code:`unrecognized_keys`,input:i,inst:e,keys:c})}else{n.value={};for(let o of Reflect.ownKeys(i)){if(o===`__proto__`||!Object.prototype.propertyIsEnumerable.call(i,o))continue;let s=t.keyType._zod.run({value:o,issues:[]},r);if(s instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(typeof o==`string`&&Mo.test(o)&&s.issues.length){let e=t.keyType._zod.run({value:Number(o),issues:[]},r);if(e instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);e.issues.length===0&&(s=e)}if(s.issues.length){t.mode===`loose`?n.value[o]=i[o]:n.issues.push({code:`invalid_key`,origin:`record`,issues:s.issues.map(e=>Ia(e,r,na())),input:o,path:[o],inst:e});continue}let c=t.valueType._zod.run({value:i[o],issues:[]},r);c instanceof Promise?a.push(c.then(e=>{e.issues.length&&n.issues.push(...Pa(o,e.issues)),n.value[s.value]=e.value})):(c.issues.length&&n.issues.push(...Pa(o,c.issues)),n.value[s.value]=c.value)}}return a.length?Promise.all(a).then(()=>n):n}}),ec=H(`$ZodEnum`,(e,t)=>{ns.init(e,t);let n=ra(t.entries),r=new Set(n);e._zod.values=r,e._zod.pattern=RegExp(`^(${n.filter(e=>ba.has(typeof e)).map(e=>typeof e==`string`?xa(e):e.toString()).join(`|`)})$`),e._zod.parse=(t,i)=>{let a=t.value;return r.has(a)||t.issues.push({code:`invalid_value`,values:n,input:a,inst:e}),t}}),tc=H(`$ZodLiteral`,(e,t)=>{if(ns.init(e,t),t.values.length===0)throw Error(`Cannot create literal schema with no valid values`);let n=new Set(t.values);e._zod.values=n,e._zod.pattern=RegExp(`^(${t.values.map(e=>typeof e==`string`?xa(e):e?xa(e.toString()):String(e)).join(`|`)})$`),e._zod.parse=(r,i)=>{let a=r.value;return n.has(a)||r.issues.push({code:`invalid_value`,values:t.values,input:a,inst:e}),r}}),nc=H(`$ZodTransform`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new ea(e.constructor.name);let i=t.transform(n.value,n);if(r.async)return(i instanceof Promise?i:Promise.resolve(i)).then(e=>(n.value=e,n.fallback=!0,n));if(i instanceof Promise)throw new $i;return n.value=i,n.fallback=!0,n}});function rc(e,t){return t===void 0&&(e.issues.length||e.fallback)?{issues:[],value:void 0}:e}var ic=H(`$ZodOptional`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,e._zod.optout=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0),ua(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${sa(e.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if(t.innerType._zod.optin===`optional`){let r=e.value,i=t.innerType._zod.run(e,n);return i instanceof Promise?i.then(e=>rc(e,r)):rc(i,r)}return e.value===void 0?e:t.innerType._zod.run(e,n)}}),ac=H(`$ZodExactOptional`,(e,t)=>{ic.init(e,t),ua(e._zod,`values`,()=>t.innerType._zod.values),ua(e._zod,`pattern`,()=>t.innerType._zod.pattern),e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)}),oc=H(`$ZodNullable`,(e,t)=>{ns.init(e,t),ua(e._zod,`optin`,()=>t.innerType._zod.optin),ua(e._zod,`optout`,()=>t.innerType._zod.optout),ua(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${sa(e.source)}|null)$`):void 0}),ua(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>e.value===null?e:t.innerType._zod.run(e,n)}),sc=H(`$ZodDefault`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);if(e.value===void 0)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>cc(e,t)):cc(r,t)}});function cc(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}var lc=H(`$ZodPrefault`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>(n.direction===`backward`||e.value===void 0&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),uc=H(`$ZodNonOptional`,(e,t)=>{ns.init(e,t),ua(e._zod,`values`,()=>{let e=t.innerType._zod.values;return e?new Set([...e].filter(e=>e!==void 0)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>dc(t,e)):dc(i,e)}});function dc(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:`invalid_type`,expected:`nonoptional`,input:e.value,inst:t}),e}var fc=H(`$ZodCatch`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`optout`,()=>t.innerType._zod.optout),ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(r=>(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>Ia(e,n,na()))},input:e.value}),e.issues=[],e.fallback=!0),e)):(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>Ia(e,n,na()))},input:e.value}),e.issues=[],e.fallback=!0),e)}}),pc=H(`$ZodPipe`,(e,t)=>{ns.init(e,t),ua(e._zod,`values`,()=>t.in._zod.values),ua(e._zod,`optin`,()=>t.in._zod.optin),ua(e._zod,`optout`,()=>t.out._zod.optout),ua(e._zod,`propValues`,()=>t.in._zod.propValues),e._zod.parse=(e,n)=>{if(n.direction===`backward`){let r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>mc(e,t.in,n)):mc(r,t.in,n)}let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>mc(e,t.out,n)):mc(r,t.out,n)}});function mc(e,t,n){return e.issues.length?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues,fallback:e.fallback},n)}var hc=H(`$ZodReadonly`,(e,t)=>{ns.init(e,t),ua(e._zod,`propValues`,()=>t.innerType._zod.propValues),ua(e._zod,`values`,()=>t.innerType._zod.values),ua(e._zod,`optin`,()=>t.innerType?._zod?.optin),ua(e._zod,`optout`,()=>t.innerType?._zod?.optout),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(gc):gc(r)}});function gc(e){return e.value=Object.freeze(e.value),e}var _c=H(`$ZodCustom`,(e,t)=>{Lo.init(e,t),ns.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>vc(t,n,r,e));vc(i,n,r,e)}});function vc(e,t,n,r){if(!e){let e={code:`custom`,input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(Ra(e))}}var yc,bc=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let n=t[0];return this._map.set(e,n),n&&typeof n==`object`&&`id`in n&&this._idmap.set(n.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t==`object`&&`id`in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function xc(){return new bc}(yc=globalThis).__zod_globalRegistry??(yc.__zod_globalRegistry=xc());var Sc=globalThis.__zod_globalRegistry;function Cc(e,t){return new e({type:`string`,...U(t)})}function wc(e,t){return new e({type:`string`,format:`email`,check:`string_format`,abort:!1,...U(t)})}function Tc(e,t){return new e({type:`string`,format:`guid`,check:`string_format`,abort:!1,...U(t)})}function Ec(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,...U(t)})}function Dc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v4`,...U(t)})}function Oc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v6`,...U(t)})}function kc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v7`,...U(t)})}function Ac(e,t){return new e({type:`string`,format:`url`,check:`string_format`,abort:!1,...U(t)})}function jc(e,t){return new e({type:`string`,format:`emoji`,check:`string_format`,abort:!1,...U(t)})}function Mc(e,t){return new e({type:`string`,format:`nanoid`,check:`string_format`,abort:!1,...U(t)})}function Nc(e,t){return new e({type:`string`,format:`cuid`,check:`string_format`,abort:!1,...U(t)})}function Pc(e,t){return new e({type:`string`,format:`cuid2`,check:`string_format`,abort:!1,...U(t)})}function Fc(e,t){return new e({type:`string`,format:`ulid`,check:`string_format`,abort:!1,...U(t)})}function Ic(e,t){return new e({type:`string`,format:`xid`,check:`string_format`,abort:!1,...U(t)})}function Lc(e,t){return new e({type:`string`,format:`ksuid`,check:`string_format`,abort:!1,...U(t)})}function Rc(e,t){return new e({type:`string`,format:`ipv4`,check:`string_format`,abort:!1,...U(t)})}function zc(e,t){return new e({type:`string`,format:`ipv6`,check:`string_format`,abort:!1,...U(t)})}function Bc(e,t){return new e({type:`string`,format:`cidrv4`,check:`string_format`,abort:!1,...U(t)})}function Vc(e,t){return new e({type:`string`,format:`cidrv6`,check:`string_format`,abort:!1,...U(t)})}function Hc(e,t){return new e({type:`string`,format:`base64`,check:`string_format`,abort:!1,...U(t)})}function Uc(e,t){return new e({type:`string`,format:`base64url`,check:`string_format`,abort:!1,...U(t)})}function Wc(e,t){return new e({type:`string`,format:`e164`,check:`string_format`,abort:!1,...U(t)})}function Gc(e,t){return new e({type:`string`,format:`jwt`,check:`string_format`,abort:!1,...U(t)})}function Kc(e,t){return new e({type:`string`,format:`datetime`,check:`string_format`,offset:!1,local:!1,precision:null,...U(t)})}function qc(e,t){return new e({type:`string`,format:`date`,check:`string_format`,...U(t)})}function Jc(e,t){return new e({type:`string`,format:`time`,check:`string_format`,precision:null,...U(t)})}function Yc(e,t){return new e({type:`string`,format:`duration`,check:`string_format`,...U(t)})}function Xc(e,t){return new e({type:`number`,checks:[],...U(t)})}function Zc(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`safeint`,...U(t)})}function Qc(e,t){return new e({type:`boolean`,...U(t)})}function $c(e,t){return new e({type:`null`,...U(t)})}function el(e){return new e({type:`unknown`})}function tl(e,t){return new e({type:`never`,...U(t)})}function nl(e,t){return new zo({check:`less_than`,...U(t),value:e,inclusive:!1})}function rl(e,t){return new zo({check:`less_than`,...U(t),value:e,inclusive:!0})}function il(e,t){return new Bo({check:`greater_than`,...U(t),value:e,inclusive:!1})}function al(e,t){return new Bo({check:`greater_than`,...U(t),value:e,inclusive:!0})}function ol(e,t){return new Vo({check:`multiple_of`,...U(t),value:e})}function sl(e,t){return new Uo({check:`max_length`,...U(t),maximum:e})}function cl(e,t){return new Wo({check:`min_length`,...U(t),minimum:e})}function ll(e,t){return new Go({check:`length_equals`,...U(t),length:e})}function ul(e,t){return new qo({check:`string_format`,format:`regex`,...U(t),pattern:e})}function dl(e){return new Jo({check:`string_format`,format:`lowercase`,...U(e)})}function fl(e){return new Yo({check:`string_format`,format:`uppercase`,...U(e)})}function pl(e,t){return new Xo({check:`string_format`,format:`includes`,...U(t),includes:e})}function ml(e,t){return new Zo({check:`string_format`,format:`starts_with`,...U(t),prefix:e})}function hl(e,t){return new Qo({check:`string_format`,format:`ends_with`,...U(t),suffix:e})}function gl(e){return new $o({check:`overwrite`,tx:e})}function _l(e){return gl(t=>t.normalize(e))}function vl(){return gl(e=>e.trim())}function yl(){return gl(e=>e.toLowerCase())}function bl(){return gl(e=>e.toUpperCase())}function xl(){return gl(e=>ma(e))}function Sl(e,t,n){return new e({type:`array`,element:t,...U(n)})}function Cl(e,t,n){return new e({type:`custom`,check:`custom`,fn:t,...U(n)})}function wl(e,t){let n=Tl(t=>(t.addIssue=e=>{if(typeof e==`string`)t.issues.push(Ra(e,t.value,n._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??=`custom`,r.input??=t.value,r.inst??=n,r.continue??=!n._zod.def.abort,t.issues.push(Ra(r))}},e(t.value,t)),t);return n}function Tl(e,t){let n=new Lo({check:`custom`,...U(t)});return n._zod.check=e,n}function El(e){let t=e?.target??`draft-2020-12`;return t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),{processors:e.processors??{},metadataRegistry:e?.metadata??Sc,target:t,unrepresentable:e?.unrepresentable??`throw`,override:e?.override??(()=>{}),io:e?.io??`output`,counter:0,seen:new Map,cycles:e?.cycles??`ref`,reused:e?.reused??`inline`,external:e?.external??void 0}}function Dl(e,t,n={path:[],schemaPath:[]}){var r;let i=e._zod.def,a=t.seen.get(e);if(a)return a.count++,n.schemaPath.includes(e)&&(a.cycle=n.path),a.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,o);let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,o.schema,r);else{let n=o.schema,a=t.processors[i.type];if(!a)throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);a(e,t,n,r)}let a=e._zod.parent;a&&(o.ref||=a,Dl(a,t,r),t.seen.get(a).isParent=!0)}let c=t.metadataRegistry.get(e);return c&&Object.assign(o.schema,c),t.io===`input`&&Al(e)&&(delete o.schema.examples,delete o.schema.default),t.io===`input`&&`_prefault`in o.schema&&((r=o.schema).default??(r.default=o.schema._prefault)),delete o.schema._prefault,t.seen.get(e).schema}function Ol(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=new Map;for(let t of e.seen.entries()){let n=e.metadataRegistry.get(t[0])?.id;if(n){let e=r.get(n);if(e&&e!==t[0])throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}let i=t=>{let r=e.target===`draft-2020-12`?`$defs`:`definitions`;if(e.external){let n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};let a=t[1].defId??t[1].schema.id??`schema${e.counter++}`;return t[1].defId=a,{defId:a,ref:`${i(`__shared`)}#/${r}/${a}`}}if(t[1]===n)return{ref:`#`};let i=`#/${r}/`,a=t[1].schema.id??`__schema${e.counter++}`;return{defId:a,ref:i+a}},a=e=>{if(e[1].schema.$ref)return;let t=e[1],{ref:n,defId:r}=i(e);t.def={...t.schema},r&&(t.defId=r);let a=t.schema;for(let e in a)delete a[e];a.$ref=n};if(e.cycles===`throw`)for(let t of e.seen.entries()){let e=t[1];if(e.cycle)throw Error(`Cycle detected: #/${e.cycle?.join(`/`)}/ + +Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}if(r.count>1&&e.reused===`ref`){a(n);continue}}}function kl(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):Object.assign(i,s),Object.assign(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};for(let t of[...e.seen.entries()].reverse())r(t[0]);let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}Object.assign(i,n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,o[e.defId]=e.def)}e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:Ml(t,`input`,e.processors),output:Ml(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function Al(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return Al(r.element,n);if(r.type===`set`)return Al(r.valueType,n);if(r.type===`lazy`)return Al(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`)return Al(r.innerType,n);if(r.type===`intersection`)return Al(r.left,n)||Al(r.right,n);if(r.type===`record`||r.type===`map`)return Al(r.keyType,n)||Al(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:Al(r.in,n)||Al(r.out,n);if(r.type===`object`){for(let e in r.shape)if(Al(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(Al(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(Al(e,n))return!0;return!!(r.rest&&Al(r.rest,n))}return!1}var jl=(e,t={})=>n=>{let r=El({...n,processors:t});return Dl(e,r),Ol(r,e),kl(r,e)},Ml=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=El({...i??{},target:a,io:t,processors:n});return Dl(e,o),Ol(o,e),kl(o,e)},Nl={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},Pl=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l}=e._zod.bag;if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Nl[s]??s,i.format===``&&delete i.format,s===`time`&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c];e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},Fl=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,format:s,multipleOf:c,exclusiveMaximum:l,exclusiveMinimum:u}=e._zod.bag;i.type=typeof s==`string`&&s.includes(`int`)?`integer`:`number`;let d=typeof u==`number`&&u>=(a??-1/0),f=typeof l==`number`&&l<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;d?p?(i.minimum=u,i.exclusiveMinimum=!0):i.exclusiveMinimum=u:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=l,i.exclusiveMaximum=!0):i.exclusiveMaximum=l:typeof o==`number`&&(i.maximum=o),typeof c==`number`&&(i.multipleOf=c)},Il=(e,t,n,r)=>{n.type=`boolean`},Ll=(e,t,n,r)=>{t.target===`openapi-3.0`?(n.type=`string`,n.nullable=!0,n.enum=[null]):n.type=`null`},Rl=(e,t,n,r)=>{n.not={}},zl=(e,t,n,r)=>{let i=e._zod.def,a=ra(i.entries);a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},Bl=(e,t,n,r)=>{let i=e._zod.def,a=[];for(let e of i.values)if(e===void 0){if(t.unrepresentable===`throw`)throw Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof e==`bigint`){if(t.unrepresentable===`throw`)throw Error(`BigInt literals cannot be represented in JSON Schema`);a.push(Number(e))}else a.push(e);if(a.length!==0){if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a}},Vl=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Custom types cannot be represented in JSON Schema`)},Hl=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Transforms cannot be represented in JSON Schema`)},Ul=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=e._zod.bag;typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=Dl(a.element,t,{...r,path:[...r.path,`items`]})},Wl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`,i.properties={};let o=a.shape;for(let e in o)i.properties[e]=Dl(o[e],t,{...r,path:[...r.path,`properties`,e]});let s=new Set(Object.keys(o)),c=new Set([...s].filter(e=>{let n=a.shape[e]._zod;return t.io===`input`?n.optin===void 0:n.optout===void 0}));c.size>0&&(i.required=Array.from(c)),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=Dl(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},Gl=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>Dl(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},Kl=(e,t,n,r)=>{let i=e._zod.def,a=Dl(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=Dl(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1;n.allOf=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]]},ql=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`array`;let o=t.target===`draft-2020-12`?`prefixItems`:`items`,s=t.target===`draft-2020-12`||t.target===`openapi-3.0`?`items`:`additionalItems`,c=a.items.map((e,n)=>Dl(e,t,{...r,path:[...r.path,o,n]})),l=a.rest?Dl(a.rest,t,{...r,path:[...r.path,s,...t.target===`openapi-3.0`?[a.items.length]:[]]}):null;t.target===`draft-2020-12`?(i.prefixItems=c,l&&(i.items=l)):t.target===`openapi-3.0`?(i.items={anyOf:c},l&&i.items.anyOf.push(l),i.minItems=c.length,l||(i.maxItems=c.length)):(i.items=c,l&&(i.additionalItems=l));let{minimum:u,maximum:d}=e._zod.bag;typeof u==`number`&&(i.minItems=u),typeof d==`number`&&(i.maxItems=d)},Jl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=o._zod.bag?.patterns;if(a.mode===`loose`&&s&&s.size>0){let e=Dl(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)i.patternProperties[t.source]=e}else(t.target===`draft-07`||t.target===`draft-2020-12`)&&(i.propertyNames=Dl(a.keyType,t,{...r,path:[...r.path,`propertyNames`]})),i.additionalProperties=Dl(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]});let c=o._zod.values;if(c){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e)}},Yl=(e,t,n,r)=>{let i=e._zod.def,a=Dl(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},Xl=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Zl=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.default=JSON.parse(JSON.stringify(i.defaultValue))},Ql=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,t.io===`input`&&(n._prefault=JSON.parse(JSON.stringify(i.defaultValue)))},$l=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{throw Error(`Dynamic catch values are not supported in JSON Schema`)}n.default=o},eu=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;Dl(o,t,r);let s=t.seen.get(e);s.ref=o},tu=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},nu=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},ru=H(`ZodISODateTime`,(e,t)=>{gs.init(e,t),ju.init(e,t)});function iu(e){return Kc(ru,e)}var au=H(`ZodISODate`,(e,t)=>{_s.init(e,t),ju.init(e,t)});function ou(e){return qc(au,e)}var su=H(`ZodISOTime`,(e,t)=>{vs.init(e,t),ju.init(e,t)});function cu(e){return Jc(su,e)}var lu=H(`ZodISODuration`,(e,t)=>{ys.init(e,t),ju.init(e,t)});function uu(e){return Yc(lu,e)}var du=(e,t)=>{Ba.init(e,t),e.name=`ZodError`,Object.defineProperties(e,{format:{value:t=>Ua(e,t)},flatten:{value:t=>Ha(e,t)},addIssue:{value:t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,ia,2)}},addIssues:{value:t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,ia,2)}},isEmpty:{get(){return e.issues.length===0}}})},fu=H(`ZodError`,du),pu=H(`ZodError`,du,{Parent:Error}),mu=Wa(pu),hu=Ga(pu),gu=Ka(pu),_u=Ja(pu),vu=Xa(pu),yu=Za(pu),bu=Qa(pu),xu=$a(pu),Su=eo(pu),Cu=to(pu),wu=no(pu),Tu=ro(pu),Eu=new WeakMap;function Du(e,t,n){let r=Object.getPrototypeOf(e),i=Eu.get(r);if(i||(i=new Set,Eu.set(r,i)),!i.has(t)){i.add(t);for(let e in n){let t=n[e];Object.defineProperty(r,e,{configurable:!0,enumerable:!1,get(){let n=t.bind(this);return Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:n}),n},set(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:t})}})}}}var Ou=H(`ZodType`,(e,t)=>(ns.init(e,t),Object.assign(e[`~standard`],{jsonSchema:{input:Ml(e,`input`),output:Ml(e,`output`)}}),e.toJSONSchema=jl(e,{}),e.def=t,e.type=t.type,Object.defineProperty(e,"_def",{value:t}),e.parse=(t,n)=>mu(e,t,n,{callee:e.parse}),e.safeParse=(t,n)=>gu(e,t,n),e.parseAsync=async(t,n)=>hu(e,t,n,{callee:e.parseAsync}),e.safeParseAsync=async(t,n)=>_u(e,t,n),e.spa=e.safeParseAsync,e.encode=(t,n)=>vu(e,t,n),e.decode=(t,n)=>yu(e,t,n),e.encodeAsync=async(t,n)=>bu(e,t,n),e.decodeAsync=async(t,n)=>xu(e,t,n),e.safeEncode=(t,n)=>Su(e,t,n),e.safeDecode=(t,n)=>Cu(e,t,n),e.safeEncodeAsync=async(t,n)=>wu(e,t,n),e.safeDecodeAsync=async(t,n)=>Tu(e,t,n),Du(e,`ZodType`,{check(...e){let t=this.def;return this.clone(fa(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return Sa(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(Bd(e,t))},superRefine(e,t){return this.check(Vd(e,t))},overwrite(e){return this.check(gl(e))},optional(){return Sd(this)},exactOptional(){return wd(this)},nullable(){return Ed(this)},nullish(){return Sd(Ed(this))},nonoptional(e){return Md(this,e)},array(){return q(this)},or(e){return ud([this,e])},and(e){return fd(this,e)},transform(e){return Id(this,bd(e))},default(e){return Od(this,e)},prefault(e){return Ad(this,e)},catch(e){return Pd(this,e)},pipe(e){return Id(this,e)},readonly(){return Rd(this)},describe(e){let t=this.clone();return Sc.add(t,{description:e}),t},meta(...e){if(e.length===0)return Sc.get(this);let t=this.clone();return Sc.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e){return e(this)}}),Object.defineProperty(e,"description",{get(){return Sc.get(e)?.description},configurable:!0}),e)),ku=H(`_ZodString`,(e,t)=>{rs.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Pl(e,t,n,r);let n=e._zod.bag;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null,Du(e,`_ZodString`,{regex(...e){return this.check(ul(...e))},includes(...e){return this.check(pl(...e))},startsWith(...e){return this.check(ml(...e))},endsWith(...e){return this.check(hl(...e))},min(...e){return this.check(cl(...e))},max(...e){return this.check(sl(...e))},length(...e){return this.check(ll(...e))},nonempty(...e){return this.check(cl(1,...e))},lowercase(e){return this.check(dl(e))},uppercase(e){return this.check(fl(e))},trim(){return this.check(vl())},normalize(...e){return this.check(_l(...e))},toLowerCase(){return this.check(yl())},toUpperCase(){return this.check(bl())},slugify(){return this.check(xl())}})}),Au=H(`ZodString`,(e,t)=>{rs.init(e,t),ku.init(e,t),e.email=t=>e.check(wc(Mu,t)),e.url=t=>e.check(Ac(Fu,t)),e.jwt=t=>e.check(Gc(Xu,t)),e.emoji=t=>e.check(jc(Iu,t)),e.guid=t=>e.check(Tc(Nu,t)),e.uuid=t=>e.check(Ec(Pu,t)),e.uuidv4=t=>e.check(Dc(Pu,t)),e.uuidv6=t=>e.check(Oc(Pu,t)),e.uuidv7=t=>e.check(kc(Pu,t)),e.nanoid=t=>e.check(Mc(Lu,t)),e.guid=t=>e.check(Tc(Nu,t)),e.cuid=t=>e.check(Nc(Ru,t)),e.cuid2=t=>e.check(Pc(zu,t)),e.ulid=t=>e.check(Fc(Bu,t)),e.base64=t=>e.check(Hc(qu,t)),e.base64url=t=>e.check(Uc(Ju,t)),e.xid=t=>e.check(Ic(Vu,t)),e.ksuid=t=>e.check(Lc(Hu,t)),e.ipv4=t=>e.check(Rc(Uu,t)),e.ipv6=t=>e.check(zc(Wu,t)),e.cidrv4=t=>e.check(Bc(Gu,t)),e.cidrv6=t=>e.check(Vc(Ku,t)),e.e164=t=>e.check(Wc(Yu,t)),e.datetime=t=>e.check(iu(t)),e.date=t=>e.check(ou(t)),e.time=t=>e.check(cu(t)),e.duration=t=>e.check(uu(t))});function W(e){return Cc(Au,e)}var ju=H(`ZodStringFormat`,(e,t)=>{is.init(e,t),ku.init(e,t)}),Mu=H(`ZodEmail`,(e,t)=>{ss.init(e,t),ju.init(e,t)}),Nu=H(`ZodGUID`,(e,t)=>{as.init(e,t),ju.init(e,t)}),Pu=H(`ZodUUID`,(e,t)=>{os.init(e,t),ju.init(e,t)}),Fu=H(`ZodURL`,(e,t)=>{cs.init(e,t),ju.init(e,t)}),Iu=H(`ZodEmoji`,(e,t)=>{ls.init(e,t),ju.init(e,t)}),Lu=H(`ZodNanoID`,(e,t)=>{us.init(e,t),ju.init(e,t)}),Ru=H(`ZodCUID`,(e,t)=>{ds.init(e,t),ju.init(e,t)}),zu=H(`ZodCUID2`,(e,t)=>{fs.init(e,t),ju.init(e,t)}),Bu=H(`ZodULID`,(e,t)=>{ps.init(e,t),ju.init(e,t)}),Vu=H(`ZodXID`,(e,t)=>{ms.init(e,t),ju.init(e,t)}),Hu=H(`ZodKSUID`,(e,t)=>{hs.init(e,t),ju.init(e,t)}),Uu=H(`ZodIPv4`,(e,t)=>{bs.init(e,t),ju.init(e,t)}),Wu=H(`ZodIPv6`,(e,t)=>{xs.init(e,t),ju.init(e,t)}),Gu=H(`ZodCIDRv4`,(e,t)=>{Ss.init(e,t),ju.init(e,t)}),Ku=H(`ZodCIDRv6`,(e,t)=>{Cs.init(e,t),ju.init(e,t)}),qu=H(`ZodBase64`,(e,t)=>{Ts.init(e,t),ju.init(e,t)}),Ju=H(`ZodBase64URL`,(e,t)=>{Ds.init(e,t),ju.init(e,t)}),Yu=H(`ZodE164`,(e,t)=>{Os.init(e,t),ju.init(e,t)}),Xu=H(`ZodJWT`,(e,t)=>{As.init(e,t),ju.init(e,t)}),Zu=H(`ZodNumber`,(e,t)=>{js.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Fl(e,t,n,r),Du(e,`ZodNumber`,{gt(e,t){return this.check(il(e,t))},gte(e,t){return this.check(al(e,t))},min(e,t){return this.check(al(e,t))},lt(e,t){return this.check(nl(e,t))},lte(e,t){return this.check(rl(e,t))},max(e,t){return this.check(rl(e,t))},int(e){return this.check($u(e))},safe(e){return this.check($u(e))},positive(e){return this.check(il(0,e))},nonnegative(e){return this.check(al(0,e))},negative(e){return this.check(nl(0,e))},nonpositive(e){return this.check(rl(0,e))},multipleOf(e,t){return this.check(ol(e,t))},step(e,t){return this.check(ol(e,t))},finite(){return this}});let n=e._zod.bag;e.minValue=Math.max(n.minimum??-1/0,n.exclusiveMinimum??-1/0)??null,e.maxValue=Math.min(n.maximum??1/0,n.exclusiveMaximum??1/0)??null,e.isInt=(n.format??``).includes(`int`)||Number.isSafeInteger(n.multipleOf??.5),e.isFinite=!0,e.format=n.format??null});function G(e){return Xc(Zu,e)}var Qu=H(`ZodNumberFormat`,(e,t)=>{Ms.init(e,t),Zu.init(e,t)});function $u(e){return Zc(Qu,e)}var ed=H(`ZodBoolean`,(e,t)=>{Ns.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Il(e,t,n,r)});function K(e){return Qc(ed,e)}var td=H(`ZodNull`,(e,t)=>{Ps.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ll(e,t,n,r)});function nd(e){return $c(td,e)}var rd=H(`ZodUnknown`,(e,t)=>{Fs.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function id(){return el(rd)}var ad=H(`ZodNever`,(e,t)=>{Is.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Rl(e,t,n,r)});function od(e){return tl(ad,e)}var sd=H(`ZodArray`,(e,t)=>{Rs.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ul(e,t,n,r),e.element=t.element,Du(e,`ZodArray`,{min(e,t){return this.check(cl(e,t))},nonempty(e){return this.check(cl(1,e))},max(e,t){return this.check(sl(e,t))},length(e,t){return this.check(ll(e,t))},unwrap(){return this.element}})});function q(e,t){return Sl(sd,e,t)}var cd=H(`ZodObject`,(e,t)=>{Us.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Wl(e,t,n,r),ua(e,`shape`,()=>t.shape),Du(e,`ZodObject`,{keyof(){return Y(Object.keys(this._zod.def.shape))},catchall(e){return this.clone({...this._zod.def,catchall:e})},passthrough(){return this.clone({...this._zod.def,catchall:id()})},loose(){return this.clone({...this._zod.def,catchall:id()})},strict(){return this.clone({...this._zod.def,catchall:od()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(e){return Da(this,e)},safeExtend(e){return Oa(this,e)},merge(e){return ka(this,e)},pick(e){return Ta(this,e)},omit(e){return Ea(this,e)},partial(...e){return Aa(xd,this,e[0])},required(...e){return ja(jd,this,e[0])}})});function J(e,t){return new cd({type:`object`,shape:e??{},...U(t)})}var ld=H(`ZodUnion`,(e,t)=>{Gs.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Gl(e,t,n,r),e.options=t.options});function ud(e,t){return new ld({type:`union`,options:e,...U(t)})}var dd=H(`ZodIntersection`,(e,t)=>{Ks.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Kl(e,t,n,r)});function fd(e,t){return new dd({type:`intersection`,left:e,right:t})}var pd=H(`ZodTuple`,(e,t)=>{Ys.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ql(e,t,n,r),e.rest=t=>e.clone({...e._zod.def,rest:t})});function md(e,t,n){let r=t instanceof ns;return new pd({type:`tuple`,items:e,rest:r?t:null,...U(r?n:t)})}var hd=H(`ZodRecord`,(e,t)=>{$s.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Jl(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function gd(e,t,n){return!t||!t._zod?new hd({type:`record`,keyType:W(),valueType:e,...U(t)}):new hd({type:`record`,keyType:e,valueType:t,...U(n)})}var _d=H(`ZodEnum`,(e,t)=>{ec.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>zl(e,t,n,r),e.enum=t.entries,e.options=Object.values(t.entries);let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new _d({...t,checks:[],...U(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new _d({...t,checks:[],...U(r),entries:i})}});function Y(e,t){return new _d({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...U(t)})}var vd=H(`ZodLiteral`,(e,t)=>{tc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Bl(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function X(e,t){return new vd({type:`literal`,values:Array.isArray(e)?e:[e],...U(t)})}var yd=H(`ZodTransform`,(e,t)=>{nc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Hl(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new ea(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(Ra(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,t.input??=n.value,t.inst??=e,n.issues.push(Ra(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n.fallback=!0,n)):(n.value=i,n.fallback=!0,n)}});function bd(e){return new yd({type:`transform`,transform:e})}var xd=H(`ZodOptional`,(e,t)=>{ic.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Sd(e){return new xd({type:`optional`,innerType:e})}var Cd=H(`ZodExactOptional`,(e,t)=>{ac.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function wd(e){return new Cd({type:`optional`,innerType:e})}var Td=H(`ZodNullable`,(e,t)=>{oc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Yl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Ed(e){return new Td({type:`nullable`,innerType:e})}var Dd=H(`ZodDefault`,(e,t)=>{sc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Zl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function Od(e,t){return new Dd({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():ya(t)}})}var kd=H(`ZodPrefault`,(e,t)=>{lc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ql(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Ad(e,t){return new kd({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():ya(t)}})}var jd=H(`ZodNonOptional`,(e,t)=>{uc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Xl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Md(e,t){return new jd({type:`nonoptional`,innerType:e,...U(t)})}var Nd=H(`ZodCatch`,(e,t)=>{fc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>$l(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function Pd(e,t){return new Nd({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:()=>t})}var Fd=H(`ZodPipe`,(e,t)=>{pc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>eu(e,t,n,r),e.in=t.in,e.out=t.out});function Id(e,t){return new Fd({type:`pipe`,in:e,out:t})}var Ld=H(`ZodReadonly`,(e,t)=>{hc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>tu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Rd(e){return new Ld({type:`readonly`,innerType:e})}var zd=H(`ZodCustom`,(e,t)=>{_c.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Vl(e,t,n,r)});function Bd(e,t={}){return Cl(zd,e,t)}function Vd(e,t){return wl(e,t)}var Hd={ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,runtime_root:`$HOME/.codex/loopx`,goal_count:1,run_count:8440,status_contract:{schema_version:2,minimum_dashboard_schema_version:2,producer:`loopx status`,reload_hint:`scripts/macos-dashboard-launchagent.sh restart`},usage_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.471166+00:00`,sample_run_count:20,proxy_note:`run-history proxy; excludes token counts and raw thread logs`,totals:{runs_24h:20,runs_7d:20,quota_spend_slots_24h:11,quota_spend_slots_7d:11,automation_run_count_24h:11,automation_run_count_7d:11,progress_signal_run_count_24h:9,progress_signal_run_count_7d:9},goals:[{goal_id:`loopx-meta`,runs_24h:20,runs_7d:20,quota_spend_slots_24h:11,quota_spend_slots_7d:11,automation_run_count_24h:11,automation_run_count_7d:11,progress_signal_run_count_24h:9,progress_signal_run_count_7d:9,project_share_24h:1}]},event_ledger_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.360662+00:00`,sample_run_count:20,proxy_note:`append-only run-history projection; compact event-class counts only`,event_classes:[`accounting`,`decision`,`evidence`,`state`,`work`],totals:{events_24h:20,events_7d:20,by_class_24h:{accounting:11,decision:0,evidence:0,state:0,work:9},by_class_7d:{accounting:11,decision:0,evidence:0,state:0,work:9}},goals:[{goal_id:`loopx-meta`,events_24h:20,events_7d:20,by_class_24h:{accounting:11,decision:0,evidence:0,state:0,work:9},by_class_7d:{accounting:11,decision:0,evidence:0,state:0,work:9},latest_event_class:`accounting`,latest_event_at:`2026-07-06T14:37:32+08:00`}]},promotion_readiness_summary:{available:!0,source:`run_history_full_scan`,goal_id:`loopx-meta`,generated_at:`2026-07-05T20:02:02+08:00`,classification:`canary_promotion_readiness_smoke_group`,delivery_batch_scale:`multi_surface`,delivery_outcome:`primary_goal_outcome`,recommended_action:`Canary promotion-readiness smoke passed; promotion may proceed after doctor/status reports fresh evidence.`,json_exists:!0,markdown_exists:!0,freshness_window_hours:24,freshness_status:`fresh`,is_fresh:!0,requires_readiness_run:!1,age_seconds:67624,age_hours:18.78,freshness_reference_time:`2026-07-06T06:49:06.408527+00:00`,sample_run_count:0,proxy_note:`canary promotion-readiness projection from append-only run history; exact evidence stays in run artifacts`},promotion_gate:{ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,runtime_root:`$HOME/.codex/loopx`,gate:`promotion_readiness`,gate_state:`ready`,can_promote:!0,should_warn:!1,non_blocking:!0,recommended_action:`promotion readiness is fresh`,readiness:{available:!0,goal_id:`loopx-meta`,generated_at:`2026-07-05T20:02:02+08:00`,classification:`canary_promotion_readiness_smoke_group`,delivery_batch_scale:`multi_surface`,delivery_outcome:`primary_goal_outcome`,recommended_action:`Canary promotion-readiness smoke passed; promotion may proceed after doctor/status reports fresh evidence.`,json_exists:!0,markdown_exists:!0,runtime_root:`$HOME/.codex/loopx`,freshness_window_hours:24,freshness_status:`fresh`,is_fresh:!0,requires_readiness_run:!1,age_seconds:67624,age_hours:18.78,freshness_reference_time:`2026-07-06T06:49:06.471087+00:00`}},decision_freshness_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.471133+00:00`,sample_run_count:20,window_days:7,proxy_note:`checkpointed decision freshness projection; rebase old decisions at the decision point before reuse`,summary:{decision_count:0,stale_count:0,rebase_required_count:0,fresh_count:0},items:[]},todo_index:JSON.parse(`{"schema_version":"todo_index_v0","source":"live_loopx_status_public_slice","total_count":12,"current_projected_count":12,"rollout_event_count":94,"item_limit":12,"items":[{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo update recorded for todo_1596c3a678bb","schema_version":"todo_index_item_v0","todo_id":"todo_1596c3a678bb","role":"agent","status":"open","title":"todo update recorded for todo_1596c3a678bb","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:33:32Z","latest_event_status":"open","event_count":7,"event_kinds":["todo_update"]},{"goal_id":"loopx-meta","index":24,"done":false,"text":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","schema_version":"todo_index_item_v0","todo_id":"todo_15bc0926a494","role":"agent","status":"open","priority":"P0-REVENUE MONITOR","title":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"github_public_reply_metadata_monitor","claimed_by":"codex-value-explorer","evidence":"autonomous replan: bounded current value-explorer monitor lane with explicit expires_at.","note":"Set bounded watch expiry for metadata-only public reply monitor; no catch-up after expiry.","updated_at":"2026-07-05T06:27:15+08:00"},{"goal_id":"loopx-meta","index":17,"done":false,"text":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","schema_version":"todo_index_item_v0","todo_id":"todo_2bf560b48a0c","role":"agent","status":"open","priority":"P0","title":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"legacy_open_pr_rename_blocker","claimed_by":"codex-main-control"},{"goal_id":"loopx-meta","index":23,"done":false,"text":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","schema_version":"todo_index_item_v0","todo_id":"todo_3ed1c4a69164","role":"agent","status":"open","priority":"P0","title":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"skillsbench_local_verifier_reward_collection","claimed_by":"codex-main-control","required_capabilities":["benchmark_runner"]},{"goal_id":"loopx-meta","index":32,"done":false,"text":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","schema_version":"todo_index_item_v0","todo_id":"todo_44907a5f355d","role":"agent","status":"blocked","priority":"P0","title":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_raw_new_rerun","claimed_by":"codex-main-control","evidence":"Public-safe redacted live LoopX text; inspect local status for the full row.","note":"Do not spend a full citation-check loopx rerun yet: #865 fixed scored output paths and #874 added bootstrap preflight attribution, but citation-check itself still preflights as apt+verifier bootstrap risk on ECS.","updated_at":"2026-06-29T00:49:36+08:00"},{"goal_id":"loopx-meta","index":39,"done":false,"text":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","schema_version":"todo_index_item_v0","todo_id":"todo_4762c790e583","role":"agent","status":"blocked","priority":"P0","title":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_remote_rerun","claimed_by":"codex-main-control","evidence":"A prior benchmark adapter change was validated before the legacy surface was archived. Current research uses the RFC-linked benchmark workspace and toolkit boundary smokes.","note":"2026-06-29: fixed host-local ACP idle/no-output root cause in PR #894. ACP protocol tool_call_count=0 is now distinguished from reverse-channel task-facing bridge activity; repeated codex_exec_bridge_idle_timeout withou…","updated_at":"2026-06-29T19:40:32+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_584f55f8f3b4","schema_version":"todo_index_item_v0","todo_id":"todo_584f55f8f3b4","role":"agent","status":"open","title":"todo add recorded for todo_584f55f8f3b4","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:48:49Z","latest_event_status":"open","event_count":3,"event_kinds":["todo_add","todo_update"]},{"goal_id":"loopx-meta","index":40,"done":false,"text":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","schema_version":"todo_index_item_v0","todo_id":"todo_62debf065fec","role":"agent","status":"blocked","priority":"P0 MONITOR","title":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"monitor_skillsbench_batch","claimed_by":"codex-main-control","evidence":"Observed 2026-06-30T02:52+08: active-state target_key=skillsbench-goal-baseline-30case-20260629T1826Z-r10; local ps/tmux/recent artifact search found no r10 batch process or compact artifact; no raw task/log/trajectory …","updated_at":"2026-06-30T02:54:54+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_93bc6439c521","schema_version":"todo_index_item_v0","todo_id":"todo_93bc6439c521","role":"agent","status":"open","title":"todo add recorded for todo_93bc6439c521","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_claim","latest_event_at":"2026-07-06T06:32:52Z","latest_event_status":"open","event_count":2,"event_kinds":["todo_add","todo_claim"]},{"goal_id":"loopx-meta","index":27,"done":false,"text":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","schema_version":"todo_index_item_v0","todo_id":"todo_aad7e9716927","role":"agent","status":"blocked","priority":"P0","title":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"run_goal_start_product_mode_matrix","claimed_by":"codex-main-control","evidence":"driver.status shows DONE raw then RUN loopx-goal-start with no running driver; raw benchmark_run.compact first_blocker=skillsbench_codex_acp_provider_zero_activity; source guard requires --host-local-acp-launch for Loop…","note":"Remote run group skillsbench-raw-new-goal-start-20260627T0420Z produced a material closeout for citation-check raw only; raw compact attribution is skillsbench_codex_acp_provider_zero_activity with official score missin…","updated_at":"2026-06-27T13:05:47+08:00"},{"goal_id":"loopx-meta","index":21,"done":false,"text":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","schema_version":"todo_index_item_v0","todo_id":"todo_aec1873c7f28","role":"agent","status":"open","priority":"P0 MONITOR","title":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","claimed_by":"codex-main-control","note":"2026-06-23 projection fix: this is monitor context for the powerlifting run, not an advancement next action; current executable path is SkillsBench build cache/prewarm repair.","updated_at":"2026-06-23T10:37:43+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_c02cb7d19607","schema_version":"todo_index_item_v0","todo_id":"todo_c02cb7d19607","role":"agent","status":"open","title":"todo add recorded for todo_c02cb7d19607","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_add","latest_event_at":"2026-07-06T03:47:54Z","latest_event_status":"open","event_count":1,"event_kinds":["todo_add"]}]}`),agent_management_projection:{schema_version:`agent_management_projection_v0`,mode:`read_only`,goal_id:`loopx-meta`,generated_at:`2026-07-06T06:49:06Z`,style_hint:null,truth_contract:{todo_is_runtime_work_item:!0,projection_is_writable:!1,introduces_task_runtime:!1,write_api:!1},source_summary:{registered_agent_count:4,projected_agent_count:4,todo_source:`live_loopx_status_public_slice`,public_safe_export:!0},agents:[{agent_id:`codex-main-control`,agent_model:`peer_v1`,profile_role:`release-validation`,state:`blocked`,next_action:`Continue projected todo todo_2bf560b48a0c.`,last_activity_at:`2026-06-29T00:49:36+08:00`,evidence_refs:[`todo:todo_e72afc24f04a:evidence`],goal_ids:[`loopx-meta`],stale_claim_hint:{state:`activity_missing`,claimed_by:`codex-main-control`,reason:`claimed open todo has no projected activity timestamp`,recommended_operator_action:`inspect evidence before considering reassignment`},current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_2bf560b48a0c`,goal_id:`loopx-meta`,role:`agent`,status:`open`,priority:`P0`,title:`Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harn…`,task_class:`blocker`,action_kind:`legacy_open_pr_rename_blocker`,claimed_by:`codex-main-control`}},{agent_id:`codex-product-capability`,agent_model:`peer_v1`,profile_role:`product-validation`,state:`monitoring`,next_action:`Continue projected todo todo_ded745761822.`,last_activity_at:`2026-07-06T06:29:53Z`,evidence_refs:[`todo:todo_ded745761822:evidence`],goal_ids:[`loopx-meta`],current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_ded745761822`,goal_id:`loopx-meta`,role:`agent`,status:`open`,priority:`P0-LOCAL`,title:`Public-safe redacted live LoopX text; inspect local status for the full row.`,task_class:`continuous_monitor`,action_kind:`Public-safe redacted live LoopX text; inspect local status for the full row.`,claimed_by:`codex-product-capability`,updated_at:`2026-07-04T20:22:45+08:00`}},{agent_id:`codex-side-bypass`,agent_model:`peer_v1`,profile_role:`implementation-validation`,state:`waiting`,next_action:`Inspect status projection before taking work.`,last_activity_at:`2026-07-06T06:32:16Z`,evidence_refs:[`rollout_event:todo_complete:todo_22c946938115`],goal_ids:[`loopx-meta`]},{agent_id:`codex-value-explorer`,agent_model:`peer_v1`,profile_role:`value-exploration`,state:`monitoring`,next_action:`Continue projected todo todo_584f55f8f3b4.`,last_activity_at:`2026-07-06T09:39:59+08:00`,evidence_refs:[`rollout_event:todo_update:todo_584f55f8f3b4`],goal_ids:[`loopx-meta`],current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_584f55f8f3b4`,goal_id:`loopx-meta`,role:`agent`,status:`open`,title:`todo add recorded for todo_584f55f8f3b4`}}]},contract:{ok:!0,summary:{errors:0,warnings:1,checks:6},errors:[],warnings:["loopx-meta: duplicate index rows raw=8444 unique=8440 unexpected=3 artifact_identity_collisions=2 artifact_collision_rows=3 reward_overlays=1; inspect with `loopx history --goal-id loopx-meta inspect-index-duplicates`; artifact identity collisions need review…"],checks:[`registry goals checked: 12`,`registry boundary: shared_local_registry push_allowed=False tracked=False ignored=False`,`user-gate scopes checked: 6 open multi-agent gates`,`runtime root resolved: $HOME/.codex/loopx`,`run-history goals=28 runs=10210`,`public boundary scan clean: 1218 files`]},global_registry:{available:!0,ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,current_registry:`$HOME/.codex/loopx/registry.global.json`,current_registry_is_global:!0,global_goal_count:12,current_goal_count:12,source_registry_count:7,summary:{high:0,action:8,info:0,checks:2,findings:8},findings:[{kind:`source_registry_missing`,severity:`action`,message:"`cc-test` source registry is missing",recommended_action:"reconnect `cc-test` from its project or archive it if the project is obsolete",goal_id:`cc-test`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-test` active state file is missing",recommended_action:"repair `cc-test` state_file or reconnect the project",goal_id:`cc-test`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`cc-tmp` source registry is missing",recommended_action:"reconnect `cc-tmp` from its project or archive it if the project is obsolete",goal_id:`cc-tmp`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-tmp` active state file is missing",recommended_action:"repair `cc-tmp` state_file or reconnect the project",goal_id:`cc-tmp`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`cc-tmp-xdrchpuaul` source registry is missing",recommended_action:"reconnect `cc-tmp-xdrchpuaul` from its project or archive it if the project is obsolete",goal_id:`cc-tmp-xdrchpuaul`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-tmp-xdrchpuaul` active state file is missing",recommended_action:"repair `cc-tmp-xdrchpuaul` state_file or reconnect the project",goal_id:`cc-tmp-xdrchpuaul`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`loopx-auto-research-e2e-probe-20260628-2225-goal` source registry is missing",recommended_action:"reconnect `loopx-auto-research-e2e-probe-20260628-2225-goal` from its project or archive it if the project is obsolete",goal_id:`loopx-auto-research-e2e-probe-20260628-2225-goal`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`loopx-auto-research-e2e-probe-20260628-2225-goal` active state file is missing",recommended_action:"repair `loopx-auto-research-e2e-probe-20260628-2225-goal` state_file or reconnect the project",goal_id:`loopx-auto-research-e2e-probe-20260628-2225-goal`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`}],checks:[`global registry goals checked: 12`,`global source registries checked: 7`]},attention_queue:JSON.parse(`{"available":true,"item_count":1,"needs_user_or_controller":0,"needs_controller":0,"needs_codex":1,"watching_external_evidence":0,"items":[{"goal_id":"loopx-meta","status":"skillsbench_codex_cli_goal_tail4_keepalive_relaunched","lifecycle_phase":"adapter_inspected","lifecycle_flags":["adapter_inspected"],"waiting_on":"codex","severity":"action","recommended_action":"Monitor run_group skillsbench-codex-cli-goal-xhigh-tail4-keepalive-20260706T143132CST using public compact/public artifacts only; once benchmark_run.compact.json lands for each case, classify launcher/case/solver/verifi…","source":"latest_run","quota":{"compute":1.0,"window_hours":24,"slot_minutes":1,"allowed_slots":1440,"spent_slots":97,"state":"eligible","reason":"1 compute quota; eligible for the next automatic agent turn"},"agent_todos":{"source_section":"Agent Todo","total_count":12,"open_count":12,"done_count":0,"items":[{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo update recorded for todo_1596c3a678bb","schema_version":"todo_index_item_v0","todo_id":"todo_1596c3a678bb","role":"agent","status":"open","title":"todo update recorded for todo_1596c3a678bb","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:33:32Z","latest_event_status":"open","event_count":7,"event_kinds":["todo_update"]},{"goal_id":"loopx-meta","index":24,"done":false,"text":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","schema_version":"todo_index_item_v0","todo_id":"todo_15bc0926a494","role":"agent","status":"open","priority":"P0-REVENUE MONITOR","title":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"github_public_reply_metadata_monitor","claimed_by":"codex-value-explorer","evidence":"autonomous replan: bounded current value-explorer monitor lane with explicit expires_at.","note":"Set bounded watch expiry for metadata-only public reply monitor; no catch-up after expiry.","updated_at":"2026-07-05T06:27:15+08:00"},{"goal_id":"loopx-meta","index":17,"done":false,"text":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","schema_version":"todo_index_item_v0","todo_id":"todo_2bf560b48a0c","role":"agent","status":"open","priority":"P0","title":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"legacy_open_pr_rename_blocker","claimed_by":"codex-main-control"},{"goal_id":"loopx-meta","index":23,"done":false,"text":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","schema_version":"todo_index_item_v0","todo_id":"todo_3ed1c4a69164","role":"agent","status":"open","priority":"P0","title":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"skillsbench_local_verifier_reward_collection","claimed_by":"codex-main-control","required_capabilities":["benchmark_runner"]},{"goal_id":"loopx-meta","index":32,"done":false,"text":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","schema_version":"todo_index_item_v0","todo_id":"todo_44907a5f355d","role":"agent","status":"blocked","priority":"P0","title":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_raw_new_rerun","claimed_by":"codex-main-control","evidence":"Public-safe redacted live LoopX text; inspect local status for the full row.","note":"Do not spend a full citation-check loopx rerun yet: #865 fixed scored output paths and #874 added bootstrap preflight attribution, but citation-check itself still preflights as apt+verifier bootstrap risk on ECS.","updated_at":"2026-06-29T00:49:36+08:00"},{"goal_id":"loopx-meta","index":39,"done":false,"text":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","schema_version":"todo_index_item_v0","todo_id":"todo_4762c790e583","role":"agent","status":"blocked","priority":"P0","title":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_remote_rerun","claimed_by":"codex-main-control","evidence":"A prior benchmark adapter change was validated before the legacy surface was archived. Current research uses the RFC-linked benchmark workspace and toolkit boundary smokes.","note":"2026-06-29: fixed host-local ACP idle/no-output root cause in PR #894. ACP protocol tool_call_count=0 is now distinguished from reverse-channel task-facing bridge activity; repeated codex_exec_bridge_idle_timeout withou…","updated_at":"2026-06-29T19:40:32+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_584f55f8f3b4","schema_version":"todo_index_item_v0","todo_id":"todo_584f55f8f3b4","role":"agent","status":"open","title":"todo add recorded for todo_584f55f8f3b4","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:48:49Z","latest_event_status":"open","event_count":3,"event_kinds":["todo_add","todo_update"]},{"goal_id":"loopx-meta","index":40,"done":false,"text":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","schema_version":"todo_index_item_v0","todo_id":"todo_62debf065fec","role":"agent","status":"blocked","priority":"P0 MONITOR","title":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"monitor_skillsbench_batch","claimed_by":"codex-main-control","evidence":"Observed 2026-06-30T02:52+08: active-state target_key=skillsbench-goal-baseline-30case-20260629T1826Z-r10; local ps/tmux/recent artifact search found no r10 batch process or compact artifact; no raw task/log/trajectory …","updated_at":"2026-06-30T02:54:54+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_93bc6439c521","schema_version":"todo_index_item_v0","todo_id":"todo_93bc6439c521","role":"agent","status":"open","title":"todo add recorded for todo_93bc6439c521","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_claim","latest_event_at":"2026-07-06T06:32:52Z","latest_event_status":"open","event_count":2,"event_kinds":["todo_add","todo_claim"]},{"goal_id":"loopx-meta","index":27,"done":false,"text":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","schema_version":"todo_index_item_v0","todo_id":"todo_aad7e9716927","role":"agent","status":"blocked","priority":"P0","title":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"run_goal_start_product_mode_matrix","claimed_by":"codex-main-control","evidence":"driver.status shows DONE raw then RUN loopx-goal-start with no running driver; raw benchmark_run.compact first_blocker=skillsbench_codex_acp_provider_zero_activity; source guard requires --host-local-acp-launch for Loop…","note":"Remote run group skillsbench-raw-new-goal-start-20260627T0420Z produced a material closeout for citation-check raw only; raw compact attribution is skillsbench_codex_acp_provider_zero_activity with official score missin…","updated_at":"2026-06-27T13:05:47+08:00"},{"goal_id":"loopx-meta","index":21,"done":false,"text":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","schema_version":"todo_index_item_v0","todo_id":"todo_aec1873c7f28","role":"agent","status":"open","priority":"P0 MONITOR","title":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","claimed_by":"codex-main-control","note":"2026-06-23 projection fix: this is monitor context for the powerlifting run, not an advancement next action; current executable path is SkillsBench build cache/prewarm repair.","updated_at":"2026-06-23T10:37:43+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_c02cb7d19607","schema_version":"todo_index_item_v0","todo_id":"todo_c02cb7d19607","role":"agent","status":"open","title":"todo add recorded for todo_c02cb7d19607","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_add","latest_event_at":"2026-07-06T03:47:54Z","latest_event_status":"open","event_count":1,"event_kinds":["todo_add"]}]}}]}`),run_history:{available:!0,goal_count:1,run_count:5,goals:[{id:`loopx-meta`,domain:`loopx-platform`,status:`active-read-only`,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`],registry_member:!0,legacy_runtime_goal:!1,adapter_kind:`harness_self_improvement`,adapter_status:`connected-read-only`,index_exists:!0,raw_index_records:8444,unique_runs:8440,quota:{compute:1,window_hours:24,slot_minutes:1,allowed_slots:1440,spent_slots:97,state:`waiting`,reason:`no active Codex-ready work is currently selected`},latest_runs:[{generated_at:`2026-07-06T14:37:32+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-value-explorer`,recommended_action:`审阅 PR #1524 的 Agent Management 面板视觉方向:workspace hint 与 stale claim hint 是否符合预期;确认后允许 codex-value-explorer 自合并。`,health_check:`quota safe-bypass operator gate; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:55+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-main-control`,recommended_action:`[P1] Repair SkillsBench post-run debug gate consistency for countable codex-cli-goal official-zero runs: when attempt_accounting is countable and case_closeout_complete=true, do not project first_blocker=loopx_closeout_…`,health_check:`quota should-run eligible; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:54+08:00`,goal_id:`loopx-meta`,classification:`skillsbench_codex_cli_goal_tail4_keepalive_relaunched`,agent_id:`codex-main-control`,progress_scope:`goal`,delivery_batch_scale:`single_surface`,delivery_outcome:`outcome_progress`,recommended_action:`Monitor run_group skillsbench-codex-cli-goal-xhigh-tail4-keepalive-20260706T143132CST using public compact/public artifacts only; once benchmark_run.compact.json lands for each case, classify launcher/case/solver/verifi…`,health_check:`state_file 1/1; registry_goal 1/1; authority_sources 10`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:34+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-side-bypass`,recommended_action:`[P0] Rerun real KNN visible auto-research after the successor-link fix and verify evaluator completion projects a second-round hypothesis/frontier or explicit completion gate without manual intervention; keep evidence p…`,health_check:`quota should-run eligible; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:32:57+08:00`,goal_id:`loopx-meta`,classification:`auto_research_successor_link_fix_merged`,agent_id:`codex-side-bypass`,progress_scope:`agent_lane`,delivery_batch_scale:`implementation`,delivery_outcome:`outcome_progress`,recommended_action:`[P0] Rerun real KNN visible auto-research after the successor-link fix and verify evaluator completion projects a second-round hypothesis/frontier or explicit completion gate without manual intervention; keep evidence p…`,health_check:`state_file 1/1; registry_goal 1/1; authority_sources 0`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]}]}]}},Ud=ud([W(),G(),K(),nd()]),Wd=gd(W(),Ud),Gd=J({todo_id:W().optional(),priority:W().optional(),status:W(),title:W(),claimed_by:W().optional(),task_class:W().optional(),action_kind:W().optional()}),Kd=J({gate_id:W(),kind:W(),status:W(),blocks:q(W()).optional()}),qd=J({todo_id:W().optional(),owner_agent:W().optional(),status:W().optional(),lease_until:W().optional(),write_scope:q(W()).optional()}),Jd=J({generated_at:W().optional(),classification:W().optional(),summary:W().optional()}),Yd=J({kind:W().optional().default(`warning`),message:ud([W(),q(W())]).optional().default(`compact source warning`)}).passthrough(),Xd=J({schema_version:X(`goal_channel_projection_v0`),mode:X(`read_only`),goal_id:W(),display_name:W(),generated_at:W().optional().nullable(),latest_status:W(),waiting_on:W(),next_action:W(),source_refs:gd(W(),Ud),decision_frame:J({user_action_required:K(),agent_action_required:K(),quiet_noop_allowed:K()}),quota:Wd,user_todos:q(Gd).default([]),agent_todos:q(Gd).default([]),open_gates:q(Kd).default([]),active_leases:q(qd).default([]),artifacts:q(Wd).default([]),recent_events:q(Jd).default([]),source_warnings:q(Yd).default([]),truth_contract:J({event_ledger_is_source_of_truth:K(),projection_is_writable:K(),recompute_rule:W(),write_authority:W()})}),Zd=J({compute:G().optional().default(1),window_hours:G().optional().default(24),slot_minutes:G().optional().default(1),allowed_slots:G().optional().nullable(),spent_slots:G().optional().default(0),state:W().optional().nullable(),next_eligible_at:W().optional().nullable(),reason:W().optional().nullable(),blocked_action_scope:W().optional().nullable(),focus_wait:K().optional().nullable(),handoff_outcome_floor_block:K().optional().nullable(),safe_bypass_allowed:K().optional().default(!1),safe_bypass_kind:W().optional().nullable(),safe_bypass_policy:W().optional().nullable(),post_handoff_outcome_gap_streak:G().optional().nullable(),outcome_gap_threshold:G().optional().nullable(),must_advance:q(W()).optional().default([]),avoid:q(W()).optional().default([])}).transform(e=>{let t=Math.max(1,e.slot_minutes),n=Math.round(e.window_hours*60*e.compute/t);return{...e,slot_minutes:t,allowed_slots:e.allowed_slots??n}}),Qd=J({self_repair:J({enabled:K().optional().default(!1),allow_health_blocker_repair:K().optional().default(!1),allow_waiting_projection_repair:K().optional().default(!1)}).optional().nullable()}).passthrough(),$d=J({mode:W().optional().default(`default`),orchestration_mode:W().optional().nullable(),spawn_allowed:K().optional().default(!1),allowed:K().optional().nullable(),max_children:G().optional().default(0),allowed_domains:q(W()).optional().default([])}).passthrough(),ef=J({label:W().optional().nullable(),path:W(),anchor:W().optional().nullable(),exists:K().optional().default(!1),resolved_path:W().optional().nullable()}),tf=J({index:G(),done:K(),text:W(),schema_version:W().optional().nullable(),todo_id:W().optional().nullable(),role:W().optional().nullable(),status:W().optional().nullable(),resume_when:W().optional().nullable(),priority:W().optional().nullable(),title:W().optional().nullable(),archive_state:W().optional().nullable(),source_section:W().optional().nullable(),task_class:W().optional().nullable(),task_domain:W().optional().nullable(),action_kind:W().optional().nullable(),claimed_by:W().optional().nullable(),required_capabilities:q(W()).optional(),note:W().optional().nullable(),evidence:W().optional().nullable(),updated_at:W().optional().nullable(),review_materials:q(ef).optional().default([])}).passthrough(),nf=J({source_section:W().optional().nullable(),total_count:G().optional().default(0),open_count:G().optional().default(0),done_count:G().optional().default(0),advancement_done_count:G().optional(),items:q(tf).optional().default([]),deferred_items:q(tf).optional()}),rf=tf.extend({goal_id:W(),source:W().optional().nullable(),event_count:G().optional().default(0),event_kinds:q(W()).optional().default([]),latest_event_kind:W().optional().nullable(),latest_event_at:W().optional().nullable(),latest_event_status:W().optional().nullable(),agent_id:W().optional().nullable()}).passthrough(),af=J({schema_version:W().optional().nullable(),source:W().optional().nullable(),total_count:G().optional().default(0),current_projected_count:G().optional().default(0),rollout_event_count:G().optional().default(0),item_limit:G().optional().nullable(),items:q(rf).optional().default([])}),of=J({kind:W().optional().nullable(),label:W().optional().nullable(),path_safe:K().optional().default(!1),branch:W().optional().nullable(),write_scope:q(W()).optional().default([])}).passthrough(),sf=J({state:W().optional().nullable(),claimed_by:W().optional().nullable(),last_activity_at:W().optional().nullable(),threshold_hours:G().optional().nullable(),reason:W().optional().nullable(),recommended_operator_action:W().optional().nullable()}).passthrough(),cf=J({schema_version:W().optional().nullable(),todo_id:W().optional().nullable(),goal_id:W().optional().nullable(),role:W().optional().nullable(),status:W().optional().nullable(),priority:W().optional().nullable(),title:W().optional().nullable(),task_class:W().optional().nullable(),action_kind:W().optional().nullable(),claimed_by:W().optional().nullable(),required_write_scopes:q(W()).optional().default([]),workspace_ref:of.optional().nullable()}).passthrough(),lf=J({schema_version:W().optional().nullable(),from_agent:W().optional().nullable(),to_agent:W().optional().nullable(),intent:W().optional().nullable(),summary:W().optional().nullable(),blocker:W().optional().nullable(),suggested_next_action:W().optional().nullable(),evidence_refs:q(W()).optional().default([]),updated_at:W().optional().nullable()}).passthrough(),uf=J({agent_id:W(),role:W().optional().nullable(),state:W().optional().nullable(),current_todo:cf.optional().nullable(),next_action:W().optional().nullable(),last_activity_at:W().optional().nullable(),evidence_refs:q(W()).optional().default([]),handoff_refs:q(W()).optional().default([]),handoff_note:lf.optional().nullable(),workspace_ref:of.optional().nullable(),stale_claim_hint:sf.optional().nullable(),blocked_on:cf.optional().nullable(),goal_ids:q(W()).optional().default([])}).passthrough(),df=J({schema_version:W().optional().nullable(),mode:W().optional().nullable(),goal_id:W().optional().nullable(),generated_at:W().optional().nullable(),style_hint:J({preferred:W().optional().nullable(),license_boundary:W().optional().nullable()}).optional().nullable(),truth_contract:J({todo_is_runtime_work_item:K().optional().default(!0),projection_is_writable:K().optional().default(!1),introduces_task_runtime:K().optional().default(!1),write_api:K().optional().default(!1)}).optional().nullable(),source_summary:J({registered_agent_count:G().optional().default(0),projected_agent_count:G().optional().default(0),todo_source:W().optional().nullable()}).optional().nullable(),agents:q(uf).optional().default([])}).passthrough(),ff=J({goal_id:W(),configured:K().optional().default(!1),enabled:K().optional().default(!1),human_gate_auto_notify_enabled:K().optional().default(!1),target_ref:W().optional().nullable(),receipt_count:G().optional().default(0),last_notified_at:W().optional().nullable()}).passthrough(),pf=J({schema_version:W().optional().nullable(),generated_at:W().optional().nullable(),goals:q(ff).optional().default([])}).passthrough(),mf=J({source_section:W().optional().nullable(),open:G().optional().default(0),done:G().optional().default(0),total:G().optional().default(0),advancement_done_count:G().optional(),next:W().optional().nullable(),next_index:G().optional().nullable(),items:q(tf).optional().default([]),recent_completed_advancement_items:q(tf).optional().default([])}),hf=J({goal_id:W(),status:W().optional().nullable(),waiting_on:W().optional().nullable(),severity:W().optional().nullable(),index:G().optional().nullable(),text:W(),source:W().optional().nullable()}),gf=J({source:W().optional().nullable(),open_count:G().optional().default(0),items:q(hf).optional().default([])}),_f=J({goal_id:W(),status:W().optional().nullable(),waiting_on:W().optional().nullable(),quota_state:W().optional().nullable(),priority:W().optional().nullable(),todo_index:G().optional().nullable(),text:W(),source:W().optional().nullable()}),vf=J({source:W().optional().nullable(),open_count:G().optional().default(0),items:q(_f).optional().default([])}),yf=J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),summary:W().optional().nullable()}),bf=J({kind:W().optional().nullable(),source:W().optional().nullable(),severity:W().optional().nullable(),requires_refresh_state:K().optional().default(!1),reason:W().optional().nullable(),active_state_updated_at:W().optional().nullable(),latest_run_generated_at:W().optional().nullable(),latest_run_state_updated_at:W().optional().nullable(),latest_run_classification:W().optional().nullable(),recommended_action:W().optional().nullable()}),xf=J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),delivery_batch_scale:W().optional().nullable(),delivery_outcome:W().optional().nullable(),health_check:W().optional().nullable(),json_exists:K().optional().nullable(),markdown_exists:K().optional().nullable()}),Sf=J({project_asset_backed:K().optional(),same_source_should_run:K().optional(),codex_ready:K().optional(),handoff_has_next_action:K().optional(),handoff_has_stop_condition:K().optional(),handoff_sanitized_surface:K().optional()}).catchall(K()),Cf=J({ready:K().optional().default(!1),codex_ready:K().optional().default(!1),source:W().optional().nullable(),quota_state:W().optional().nullable(),checks:Sf.optional().default({}),handoff_status:W().optional().nullable(),handoff_ready_at:W().optional().nullable(),handoff_ready_classification:W().optional().nullable(),post_handoff_run_seen:K().optional().default(!1),post_handoff_latest_run:xf.optional().nullable(),post_handoff_recent_runs:q(xf).optional().default([]),post_handoff_small_scale_streak:G().int().nonnegative().optional().default(0),post_handoff_outcome_gap_streak:G().int().nonnegative().optional().default(0),next_probe:W().optional().nullable()}),wf=J({schema_version:W().optional().nullable(),kind:W().optional().nullable(),missing_roles:q(W()).optional().default([]),source:W().optional().nullable(),recommended_action:W().optional().nullable()}),Tf=J({owner:W(),gate:W(),next_action:W(),stop_condition:W(),user_todos:mf.optional().nullable(),agent_todos:mf.optional().nullable(),quota:Zd.optional().nullable(),control_plane:Qd.optional().nullable(),orchestration:$d.optional().nullable(),latest_validation:yf.optional().nullable(),stale_latest_run_warning:bf.optional().nullable(),todo_projection_gap:wf.optional().nullable()}),Ef=J({goal_id:W(),activation_state:Y([`active`,`stopped`]).optional().default(`active`),status:W(),waiting_on:W(),severity:W(),recommended_action:W(),project_asset:Tf.optional().nullable(),handoff_readiness:Cf.optional().nullable(),source:W().optional(),operator_question:W().optional().nullable(),agent_command:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),controller_stage:W().optional().nullable(),missing_gates:q(W()).optional().default([]),next_handoff_condition:W().optional().nullable(),quota:Zd.optional().nullable(),control_plane:Qd.optional().nullable(),user_todos:nf.optional().nullable(),agent_todos:nf.optional().nullable(),stale_latest_run_warning:bf.optional().nullable(),dependency_blockers:gf.optional().nullable(),todo_state_file:W().optional().nullable(),goal_channel_projection:Xd.optional().nullable()}),Df=J({recorded_at:W().optional().nullable(),decision:W().optional().nullable(),reward:W().optional().nullable(),reason_summary:W().optional().nullable(),follow_up:W().optional().nullable()}),Of=J({recorded_at:W().optional().nullable(),gate:W().optional().nullable(),decision:W().optional().nullable(),operator_question:W().optional().nullable(),reason_summary:W().optional().nullable(),follow_up:W().optional().nullable(),agent_command:W().optional().nullable()}),kf=J({version:W().optional().nullable(),goal_id:W().optional().nullable(),run_id:W().optional().nullable(),gate_id:W().optional().nullable(),created_state_ref:W().optional().nullable(),created_policy_version:W().optional().nullable(),interrupt_payload:J({question:W().optional().nullable(),choices:q(W()).optional().default([])}).optional().nullable(),allowed_decisions:q(W()).optional().default([]),operator_decision:W().optional().nullable(),latest_state_ref:W().optional().nullable(),freshness_check:W().optional().nullable(),precondition_check:W().optional().nullable(),migration_or_rebase_result:W().optional().nullable(),resulting_action:W().optional().nullable(),validation_after_resume:W().optional().nullable()}),Af=J({id:W().optional().nullable(),ok:K().optional().nullable(),review:W().optional().nullable()}),jf=J({classification:W().optional().nullable(),read_only_observer_ready:K().optional().nullable(),decision_advisor_ready:K().optional().nullable(),write_controller_ready:K().optional().nullable(),missing_gates:q(W()).optional().default([]),review_judgment:W().optional().nullable(),next_handoff_condition:W().optional().nullable(),gates:q(Af).optional().default([])}),Mf=J({declared:K().optional().default(!1),required:K().optional().default(!1),path:W().optional().nullable(),path_exists:K().optional().nullable(),read_status:W().optional().nullable(),default_entry_count:G().optional().default(0),default_entries_checked:G().optional().default(0),default_entries_present:G().optional().default(0),topic_authority_count:G().optional().default(0),project_material_count:G().optional().default(0),project_material_repository_count:G().optional().default(0),project_material_owner_review_required_count:G().optional().default(0),project_material_stale_count:G().optional().default(0),project_material_current_authority_count:G().optional().default(0),deprecated_source_count:G().optional().default(0),conflict_risk:W().optional().nullable()}),Nf=J({adapter_kind:W().optional().nullable(),adapter_status:W().optional().nullable(),authority_source_count:G().optional().nullable(),authority_registry_declared:K().optional().nullable(),authority_registry_path_exists:K().optional().nullable(),authority_registry_default_entry_count:G().optional().nullable(),authority_registry_default_entries_present:G().optional().nullable(),topic_authority_count:G().optional().nullable(),project_material_count:G().optional().nullable(),project_material_repository_count:G().optional().nullable(),project_material_owner_review_required_count:G().optional().nullable(),project_material_stale_count:G().optional().nullable(),project_material_current_authority_count:G().optional().nullable(),authority_registry_conflict_risk:W().optional().nullable(),guard_count:G().optional().nullable(),sections_found:G().optional().nullable(),sections_checked:G().optional().nullable(),files_present:G().optional().nullable(),files_checked:G().optional().nullable()}),Pf=J({generated_at:W(),goal_id:W(),classification:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),recommended_action:W().optional().nullable(),health_check:W().optional().nullable(),active_task_count:G().optional().nullable(),active_priorities:gd(W(),id()).optional().nullable(),cache_check:W().optional().nullable(),json_exists:K().optional().default(!1),markdown_exists:K().optional().default(!1),human_reward:Df.optional().nullable(),operator_gate:Of.optional().nullable(),operator_gate_resume_contract:kf.optional().nullable(),controller_readiness:jf.optional().nullable(),project_map:Nf.optional().nullable()}),Ff=J({id:W(),activation_state:Y([`active`,`stopped`]).optional().default(`active`),display_name:W().optional().nullable(),domain:W().optional().nullable(),status:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),registry_member:K().optional().default(!1),legacy_runtime_goal:K().optional().default(!1),adapter_kind:W().optional().nullable(),adapter_status:W().optional().nullable(),authority_registry:Mf.optional().nullable(),quota:Zd.optional().nullable(),control_plane:Qd.optional().nullable(),spawn_policy:$d.optional().nullable(),orchestration:$d.optional().nullable(),coordination:J({agent_model:W().optional().nullable(),registered_agents:q(W()).optional().default([])}).optional().nullable(),index_exists:K().optional().default(!1),raw_index_records:G().optional().default(0),unique_runs:G().optional().default(0),latest_runs:q(Pf).optional().default([])}),If=J({available:K(),goal_count:G().optional().default(0),run_count:G().optional().default(0),goals:q(Ff).optional().default([]),recent_runs:q(Pf).optional().default([])}),Lf=J({kind:W(),severity:W(),message:W(),recommended_action:W(),goal_id:W().optional().nullable(),path:W().optional().nullable(),goal_ids:q(W()).optional().default([])}),Rf=J({available:K(),ok:K(),registry:W(),current_registry:W().optional().nullable(),current_registry_is_global:K().optional().default(!1),global_goal_count:G().optional().default(0),current_goal_count:G().optional().default(0),source_registry_count:G().optional().default(0),summary:J({high:G().optional().default(0),action:G().optional().default(0),info:G().optional().default(0),checks:G().optional().default(0),findings:G().optional().default(0)}),findings:q(Lf).optional().default([]),checks:q(W()).optional().default([])}),zf=J({runs_24h:G().optional().default(0),runs_7d:G().optional().default(0),quota_spend_slots_24h:G().optional().default(0),quota_spend_slots_7d:G().optional().default(0),automation_run_count_24h:G().optional().default(0),automation_run_count_7d:G().optional().default(0),progress_signal_run_count_24h:G().optional().default(0),progress_signal_run_count_7d:G().optional().default(0),input_tokens_24h:G().optional(),input_tokens_7d:G().optional(),output_tokens_24h:G().optional(),output_tokens_7d:G().optional(),cache_tokens_24h:G().optional(),cache_tokens_7d:G().optional(),cost_usd_24h:G().optional(),cost_usd_7d:G().optional(),duration_ms_24h:G().optional(),duration_ms_7d:G().optional()}),Bf=zf.extend({goal_id:W(),project_share_24h:G().optional().default(0)}),Vf=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),totals:zf.optional().default({runs_24h:0,runs_7d:0,quota_spend_slots_24h:0,quota_spend_slots_7d:0,automation_run_count_24h:0,automation_run_count_7d:0,progress_signal_run_count_24h:0,progress_signal_run_count_7d:0}),goals:q(Bf).optional().default([])}).optional().nullable(),Hf=J({accounting:G().optional().default(0),decision:G().optional().default(0),evidence:G().optional().default(0),state:G().optional().default(0),work:G().optional().default(0)}),Uf={accounting:0,decision:0,evidence:0,state:0,work:0},Wf=J({events_24h:G().optional().default(0),events_7d:G().optional().default(0),by_class_24h:Hf.optional().default(Uf),by_class_7d:Hf.optional().default(Uf)}),Gf=Wf.extend({goal_id:W(),latest_event_class:W().optional().nullable(),latest_event_at:W().optional().nullable()}),Kf={events_24h:0,events_7d:0,by_class_24h:Uf,by_class_7d:Uf},qf=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),event_classes:q(W()).optional().default([`accounting`,`decision`,`evidence`,`state`,`work`]),totals:Wf.optional().default(Kf),goals:q(Gf).optional().default([])}).optional().nullable(),Jf=J({available:K().optional().default(!1),source:W().optional().default(`run_history`),goal_id:W().optional().nullable(),generated_at:W().optional().nullable(),classification:W().optional().nullable(),delivery_batch_scale:W().optional().nullable(),delivery_outcome:W().optional().nullable(),recommended_action:W().optional().nullable(),json_exists:K().optional().default(!1),markdown_exists:K().optional().default(!1),freshness_window_hours:G().optional().default(24),freshness_status:W().optional().nullable(),is_fresh:K().optional().default(!1),requires_readiness_run:K().optional().default(!0),age_seconds:G().optional().nullable(),age_hours:G().optional().nullable(),freshness_reference_time:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),reason:W().optional().nullable()}).optional().nullable(),Yf=J({ok:K().optional().default(!0),registry:W().optional().nullable(),runtime_root:W().optional().nullable(),gate:W().optional().default(`promotion_readiness`),gate_state:W().optional().default(`warning`),can_promote:K().optional().default(!1),should_warn:K().optional().default(!0),non_blocking:K().optional().default(!0),recommended_action:W().optional().nullable(),warning_message:W().optional().nullable(),readiness:Jf.default(null)}).optional().nullable(),Xf=J({decision_count:G().optional().default(0),stale_count:G().optional().default(0),rebase_required_count:G().optional().default(0),fresh_count:G().optional().default(0)}),Zf=J({goal_id:W(),decision_kind:W().optional().nullable(),decision_at:W().optional().nullable(),classification:W().optional().nullable(),age_days:G().optional().nullable(),stale_by_age:K().optional().default(!1),newer_event_count_7d:G().optional().default(0),newer_event_classes_7d:Hf.optional().default(Uf),freshness_state:W().optional().nullable(),requires_decision_point_rebase:K().optional().default(!1),reason:W().optional().nullable()}),Qf=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),window_days:G().optional().default(7),proxy_note:W().optional().nullable(),summary:Xf.optional().default({decision_count:0,stale_count:0,rebase_required_count:0,fresh_count:0}),items:q(Zf).optional().default([])}).optional().nullable(),$f=J({schema_version:G().optional().default(0),minimum_dashboard_schema_version:G().optional().default(2),producer:W().optional().nullable(),reload_hint:W().optional().nullable()}).optional().default({schema_version:0,minimum_dashboard_schema_version:2,producer:null,reload_hint:`scripts/macos-dashboard-launchagent.sh restart`}),ep=J({schema_version:X(`loopx_goal_projection_scope_v0`),scope:Y([`all`,`active`,`stopped`]),complete:K(),projected_goal_count:G().int().nonnegative(),registry_goal_count:G().int().nonnegative(),registry_revision:W().optional().nullable()}),tp=J({source:W().optional().default(`serve-status`),status_url:W().optional().nullable(),health_url:W().optional().nullable(),review_material_url:W().optional().nullable(),presentation_surfaces_url:W().optional().nullable(),presentation_detail_url:W().optional().nullable(),periodic_report_index_url:W().optional().nullable(),periodic_report_detail_url:W().optional().nullable(),ssh_hosts_url:W().optional().nullable(),reward_dry_run_url:W().optional().nullable(),reward_append_url:W().optional().nullable(),reward_write_enabled:K().optional().default(!1),configure_goal_dry_run_url:W().optional().nullable(),configure_goal_apply_url:W().optional().nullable(),control_plane_write_enabled:K().optional().default(!1)}).optional().nullable(),np=J({extension_id:W().min(1),surface_id:W().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/),extension_revision:W().min(1),payload_sha256:W().regex(/^[0-9a-f]{64}$/)}).strict(),rp=J({extension_id:W().min(1),extension_revision:W().min(1),surface_id:W().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/),surface_kind:W().regex(/^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/),title:W().min(1),view_schema:W().regex(/^[a-z][a-z0-9_]*_v\d+$/),visibility:Y([`public-safe`,`owner-only`]),goal_id:W().min(1).nullable(),generated_at:W().min(1).nullable(),review_due_at:W().min(1).nullable(),diagnostic:W().min(1).nullable(),empty_state_title:W().min(1),empty_state_detail:W().min(1)}),ip=ud([rp.extend({state:Y([`ready`,`review_due`]),goal_id:W().min(1),generated_at:W().min(1),detail_ref:np}).strict(),rp.extend({state:X(`empty`),detail_ref:od().optional()}).strict(),rp.extend({state:X(`invalid`),diagnostic:W().min(1),detail_ref:od().optional()}).strict()]),ap=J({schema_version:X(`extension_presentation_surfaces_v0`),count:G().int().nonnegative(),ready_count:G().int().nonnegative(),review_due_count:G().int().nonnegative(),empty_count:G().int().nonnegative(),invalid_count:G().int().nonnegative(),items:q(ip)}).strict(),op={schema_version:`extension_presentation_surfaces_v0`,count:0,ready_count:0,review_due_count:0,empty_count:0,invalid_count:0,items:[]};J({ok:X(!0),presentation_surfaces:ap}).strict();var sp=J({goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),content_sha256:W().regex(/^sha256:[0-9a-f]{64}$/)}).strict(),cp=J({goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),publication_id:W().min(1),delivered_at:W().min(1),predecessor_publication_id:W().min(1).nullable().optional(),detail_ref:sp}).strict(),lp=J({schema_version:X(`periodic_report_workspace_index_v0`),count:G().int().nonnegative(),items:q(cp)}),up=lp.extend({returned_count:G().int().nonnegative(),total_count:G().int().nonnegative(),limit:G().int().nonnegative(),offset:G().int().nonnegative(),truncated:K()}).strict(),dp=lp.strict().transform(e=>({...e,returned_count:e.count,total_count:e.count,limit:e.count,offset:0,truncated:!1})),fp=J({ok:X(!0),periodic_reports:ud([up,dp])}).strict(),pp=J({schema_version:X(`periodic_report_workspace_projection_v0`),goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),generated_at:W().min(1),title:W().min(1),summary:W().min(1),content_sha256:W().regex(/^sha256:[0-9a-f]{64}$/),period_window:J({start_at:W().min(1),end_at:W().min(1)}).strict(),interaction:J({attention_kind:X(`progress`),interaction:X(`inform`),delivery:X(`surface`),form:X(`milestone_report`),writable:X(!1)}).strict(),delta:J({added_count:G().int().nonnegative(),changed_count:G().int().nonnegative(),item_count:G().int().positive(),items:q(J({fact_id:W().min(1),source_ref:W().min(1),title:W().min(1),summary:W().min(1),status:W().min(1),content_kind:W().min(1),change_kind:Y([`added`,`changed`]),previous_status:W().min(1).optional()}).strict())}).strict(),publication:J({publication_id:W().min(1),delivered_at:W().min(1),predecessor_publication_id:W().min(1).nullable().optional(),cursor_id:W().min(1)}).strict(),truth_contract:J({published_cursor_is_source_of_truth:X(!0),generation_receipt_is_delivery_receipt:X(!1),projection_is_writable:X(!1),browser_write_api:X(!1)}).strict()}).strict(),mp=J({ok:X(!0),projection:pp}).strict(),hp=J({ok:K(),registry:W(),runtime_root:W(),goal_count:G(),run_count:G(),status_contract:$f,goal_projection:ep.optional().nullable().default(null),local_dashboard_api:tp,contract:J({ok:K(),summary:J({errors:G(),warnings:G(),checks:G()}),errors:q(W()),warnings:q(W()),checks:q(W()).optional().default([])}),global_registry:Rf.optional().default({available:!1,ok:!0,registry:``,current_registry:null,current_registry_is_global:!1,global_goal_count:0,current_goal_count:0,source_registry_count:0,summary:{high:0,action:0,info:0,checks:0,findings:0},findings:[],checks:[]}),attention_queue:J({available:K(),item_count:G(),needs_user_or_controller:G(),needs_controller:G().optional().default(0),needs_codex:G(),watching_external_evidence:G(),autonomous_backlog_candidates:vf.optional().nullable(),items:q(Ef)}),run_history:If.optional().default({available:!1,goal_count:0,run_count:0,goals:[],recent_runs:[]}),event_ledger_summary:qf.default(null),promotion_readiness_summary:Jf.default(null),promotion_gate:Yf.default(null),decision_freshness_summary:Qf.default(null),usage_summary:Vf.default(null),todo_index:af.optional().nullable().default(null),agent_management_projection:df.optional().nullable().default(null),goal_channel_notification_projection:pf.optional().nullable().default(null),presentation_surfaces:ap.optional().default(op)});J({ok:K(),dry_run:K().optional().default(!0),appended:K().optional().default(!1),goal_id:W().optional().nullable(),raw_index_records_before:G().optional().nullable(),preview_id:W().optional().nullable(),selected_run:J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),recommended_action:W().optional().nullable(),json_exists:K().optional().nullable(),markdown_exists:K().optional().nullable()}).optional().nullable(),human_reward:Df.optional().nullable(),active_state_summary:W().optional().nullable(),project_agent_visibility:J({source_of_truth:W().optional().nullable(),history_command:W().optional().nullable(),active_state_role:W().optional().nullable(),review_packet_role:W().optional().nullable()}).optional().nullable(),error:W().optional().nullable()});function gp(e,t,n){let r=e.run_history.goals.map(e=>e.id===t&&e.activation_state!==n?{...e,activation_state:n}:e),i=e.attention_queue.items.map(e=>e.goal_id===t&&e.activation_state!==n?{...e,activation_state:n}:e),a=r.some((t,n)=>t!==e.run_history.goals[n]),o=i.some((t,n)=>t!==e.attention_queue.items[n]);return!a&&!o?e:{...e,attention_queue:o?{...e.attention_queue,items:i}:e.attention_queue,run_history:a?{...e.run_history,goals:r}:e.run_history}}function _p(e,t){let n=e.run_history.goals.filter(e=>e.id!==t),r=e.attention_queue.items.filter(e=>e.goal_id!==t);return n.length===e.run_history.goals.length&&r.length===e.attention_queue.items.length?e:{...e,attention_queue:{...e.attention_queue,items:r},run_history:{...e.run_history,goals:n}}}function vp(e){return hp.parse(e)}function yp(e){return e instanceof fu?e.issues.map(e=>`${e.path.join(`.`)||`root`}: ${e.message}`).join(`; `):e instanceof Error?e.message:String(e)}var bp=vp(Hd),xp=J({ok:X(!0),schema_version:X(`loopx_workspace_directory_v1`),registry_revision:W(),goals:q(J({id:W(),display_name:W(),activation_state:Y([`active`,`stopped`]),registry_member:X(!0)}))});function Sp(e,t,n){let r=new URL(e,n);r.searchParams.delete(`goal_activation`),r.searchParams.delete(`goal_id`),r.searchParams.delete(`view`);for(let[e,n]of Object.entries(t))r.searchParams.set(e,n);return r.toString()}async function Cp(e,t){let n=await fetch(Sp(e,{view:`workspace-directory`},t),{cache:`no-store`,signal:AbortSignal.timeout(5e3)});if(!n.ok)return null;let r=xp.safeParse(await n.json());return r.success?r.data:null}function wp(e){return vp({ok:!0,registry:``,runtime_root:``,goal_count:e.goals.length,run_count:0,local_dashboard_api:{},contract:{ok:!0,summary:{errors:0,warnings:0,checks:0},errors:[],warnings:[]},attention_queue:{available:!1,item_count:0,needs_user_or_controller:0,needs_codex:0,watching_external_evidence:0,items:[]},run_history:{available:!1,goal_count:e.goals.length,run_count:0,goals:e.goals,recent_runs:[]}})}async function Tp(e,t,n,r,i,a,o){let s=[...n.goals],c=new Map;async function l(){for(;s.length&&i()&&!o?.aborted;){let l=s.findIndex(e=>e.id===a()),u=l>=0?l:s.findIndex(e=>e.activation_state===`active`);if(u<0)return;let d=s.splice(u,1)[0],f=(c.get(d.id)??0)+1;c.set(d.id,f);let p=new AbortController,m=!1,h=()=>p.abort();o?.addEventListener(`abort`,h,{once:!0});let g=setTimeout(()=>{m=!0,p.abort()},3e4),_=null;try{let a=await fetch(Sp(e,{goal_id:d.id},t),{cache:`no-store`,signal:p.signal});if(!a.ok)_=a.status===409?`revision`:a.status>=500?`service`:`scope`;else{let e=await a.json();if(e.workspace_registry_revision!==n.registry_revision)_=`revision`;else{let t=vp(e);!t.run_history.goals.some(e=>e.id===d.id)||t.run_history.goals.some(e=>e.id!==d.id)?_=`scope`:i()&&!o?.aborted&&r(d.id,t,null)}}}catch(e){_=m?`timeout`:e instanceof TypeError?`network`:`invalid`}finally{clearTimeout(g),o?.removeEventListener(`abort`,h)}if(!i()||o?.aborted)return;_&&[`timeout`,`network`,`service`].includes(_)&&f<3?(await new Promise(e=>setTimeout(e,f*1e3)),s.push(d)):_&&r(d.id,null,_)}}await Promise.all([l(),l()])}var Ep=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),Dp=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),Op=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),kp=e=>{let t=Op(e);return t.charAt(0).toUpperCase()+t.slice(1)},Ap={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},jp=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Mp=(0,R.createContext)({}),Np=()=>(0,R.useContext)(Mp),Pp=(0,R.forwardRef)(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>{let{size:l=24,strokeWidth:u=2,absoluteStrokeWidth:d=!1,color:f=`currentColor`,className:p=``}=Np()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return(0,R.createElement)(`svg`,{ref:c,...Ap,width:t??l??Ap.width,height:t??l??Ap.height,stroke:e??f,strokeWidth:m,className:Ep(`lucide`,p,i),...!a&&!jp(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,R.createElement)(e,t)),...Array.isArray(a)?a:[a]])}),Z=(e,t)=>{let n=(0,R.forwardRef)(({className:n,...r},i)=>(0,R.createElement)(Pp,{ref:i,iconNode:t,className:Ep(`lucide-${Dp(kp(e))}`,`lucide-${e}`,n),...r}));return n.displayName=kp(e),n},Fp=Z(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]),Ip=Z(`arrow-down`,[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]),Lp=Z(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),Rp=Z(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),zp=Z(`arrow-up-down`,[[`path`,{d:`m21 16-4 4-4-4`,key:`f6ql7i`}],[`path`,{d:`M17 20V4`,key:`1ejh1v`}],[`path`,{d:`m3 8 4-4 4 4`,key:`11wl7u`}],[`path`,{d:`M7 4v16`,key:`1glfcx`}]]),Bp=Z(`arrow-up`,[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]),Vp=Z(`badge-check`,[[`path`,{d:`M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z`,key:`3c2336`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),Hp=Z(`bell`,[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]]),Up=Z(`bot`,[[`path`,{d:`M12 8V4H8`,key:`hb8ula`}],[`rect`,{width:`16`,height:`12`,x:`4`,y:`8`,rx:`2`,key:`enze0r`}],[`path`,{d:`M2 14h2`,key:`vft8re`}],[`path`,{d:`M20 14h2`,key:`4cs60a`}],[`path`,{d:`M15 13v2`,key:`1xurst`}],[`path`,{d:`M9 13v2`,key:`rq6x2g`}]]),Wp=Z(`braces`,[[`path`,{d:`M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1`,key:`ezmyqa`}],[`path`,{d:`M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1`,key:`e1hn23`}]]),Gp=Z(`calendar-clock`,[[`path`,{d:`M16 14v2.2l1.6 1`,key:`fo4ql5`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`path`,{d:`M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5`,key:`1osxxc`}],[`path`,{d:`M3 10h5`,key:`r794hk`}],[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`circle`,{cx:`16`,cy:`16`,r:`6`,key:`qoo3c4`}]]),Kp=Z(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),qp=Z(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),Jp=Z(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),Yp=Z(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),Xp=Z(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]),Zp=Z(`circle-check`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),Qp=Z(`clipboard-check`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}],[`path`,{d:`m9 14 2 2 4-4`,key:`df797q`}]]),$p=Z(`code-xml`,[[`path`,{d:`m18 16 4-4-4-4`,key:`1inbqp`}],[`path`,{d:`m6 8-4 4 4 4`,key:`15zrgr`}],[`path`,{d:`m14.5 4-5 16`,key:`e7oirm`}]]),em=Z(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),tm=Z(`database`,[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]),nm=Z(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),rm=Z(`ellipsis`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]]),im=Z(`external-link`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]),am=Z(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),om=Z(`file-braces`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1`,key:`1oajmo`}],[`path`,{d:`M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1`,key:`mpwhp6`}]]),sm=Z(`file-check-corner`,[[`path`,{d:`M10.5 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v6`,key:`g5mvt7`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m14 20 2 2 4-4`,key:`15kota`}]]),cm=Z(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]),lm=Z(`git-branch`,[[`path`,{d:`M15 6a9 9 0 0 0-9 9V3`,key:`1cii5b`}],[`circle`,{cx:`18`,cy:`6`,r:`3`,key:`1h7g24`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}]]),um=Z(`git-compare-arrows`,[[`circle`,{cx:`5`,cy:`6`,r:`3`,key:`1qnov2`}],[`path`,{d:`M12 6h5a2 2 0 0 1 2 2v7`,key:`1yj91y`}],[`path`,{d:`m15 9-3-3 3-3`,key:`1lwv8l`}],[`circle`,{cx:`19`,cy:`18`,r:`3`,key:`1qljk2`}],[`path`,{d:`M12 18H7a2 2 0 0 1-2-2V9`,key:`16sdep`}],[`path`,{d:`m9 15 3 3-3 3`,key:`1m3kbl`}]]),dm=Z(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),fm=Z(`languages`,[[`path`,{d:`m5 8 6 6`,key:`1wu5hv`}],[`path`,{d:`m4 14 6-6 2-3`,key:`1k1g8d`}],[`path`,{d:`M2 5h12`,key:`or177f`}],[`path`,{d:`M7 2h1`,key:`1t2jsx`}],[`path`,{d:`m22 22-5-10-5 10`,key:`don7ne`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),pm=Z(`layout-dashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),mm=Z(`list-plus`,[[`path`,{d:`M16 5H3`,key:`m91uny`}],[`path`,{d:`M11 12H3`,key:`51ecnj`}],[`path`,{d:`M16 19H3`,key:`zzsher`}],[`path`,{d:`M18 9v6`,key:`1twb98`}],[`path`,{d:`M21 12h-6`,key:`bt1uis`}]]),hm=Z(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),gm=Z(`maximize-2`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]),_m=Z(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),vm=Z(`message-circle-question-mark`,[[`path`,{d:`M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719`,key:`1sd12s`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),ym=Z(`message-square-text`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}],[`path`,{d:`M7 11h10`,key:`1twpyw`}],[`path`,{d:`M7 15h6`,key:`d9of3u`}],[`path`,{d:`M7 7h8`,key:`af5zfr`}]]),bm=Z(`minimize-2`,[[`path`,{d:`m14 10 7-7`,key:`oa77jy`}],[`path`,{d:`M20 10h-6V4`,key:`mjg0md`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M4 14h6v6`,key:`rmj7iw`}]]),xm=Z(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),Sm=Z(`palette`,[[`path`,{d:`M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z`,key:`e79jfc`}],[`circle`,{cx:`13.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`1okk4w`}],[`circle`,{cx:`17.5`,cy:`10.5`,r:`.5`,fill:`currentColor`,key:`f64h9f`}],[`circle`,{cx:`6.5`,cy:`12.5`,r:`.5`,fill:`currentColor`,key:`qy21gx`}],[`circle`,{cx:`8.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`fotxhn`}]]),Cm=Z(`paperclip`,[[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551`,key:`1miecu`}]]),wm=Z(`pause`,[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]),Tm=Z(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),Em=Z(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),Dm=Z(`radio`,[[`path`,{d:`M16.247 7.761a6 6 0 0 1 0 8.478`,key:`1fwjs5`}],[`path`,{d:`M19.075 4.933a10 10 0 0 1 0 14.134`,key:`ehdyv1`}],[`path`,{d:`M4.925 19.067a10 10 0 0 1 0-14.134`,key:`1q22gi`}],[`path`,{d:`M7.753 16.239a6 6 0 0 1 0-8.478`,key:`r2q7qm`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]),Om=Z(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),km=Z(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),Am=Z(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]),jm=Z(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),Mm=Z(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]),Nm=Z(`server-cog`,[[`path`,{d:`m10.852 14.772-.383.923`,key:`11vil6`}],[`path`,{d:`M13.148 14.772a3 3 0 1 0-2.296-5.544l-.383-.923`,key:`1v3clb`}],[`path`,{d:`m13.148 9.228.383-.923`,key:`t2zzyc`}],[`path`,{d:`m13.53 15.696-.382-.924a3 3 0 1 1-2.296-5.544`,key:`1bxfiv`}],[`path`,{d:`m14.772 10.852.923-.383`,key:`k9m8cz`}],[`path`,{d:`m14.772 13.148.923.383`,key:`1xvhww`}],[`path`,{d:`M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5`,key:`tn8das`}],[`path`,{d:`M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5`,key:`1g2pve`}],[`path`,{d:`M6 18h.01`,key:`uhywen`}],[`path`,{d:`M6 6h.01`,key:`1utrut`}],[`path`,{d:`m9.228 10.852-.923-.383`,key:`1wtb30`}],[`path`,{d:`m9.228 13.148-.923.383`,key:`1a830x`}]]),Pm=Z(`server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]),Fm=Z(`settings-2`,[[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`path`,{d:`M19 7h-9`,key:`6i9tg`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]),Im=Z(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),Lm=Z(`sliders-horizontal`,[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]),Rm=Z(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]),zm=Z(`square`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]),Bm=Z(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),Vm=Z(`test-tube-diagonal`,[[`path`,{d:`M21 7 6.82 21.18a2.83 2.83 0 0 1-3.99-.01a2.83 2.83 0 0 1 0-4L17 3`,key:`1ub6xw`}],[`path`,{d:`m16 2 6 6`,key:`1gw87d`}],[`path`,{d:`M12 16H4`,key:`1cjfip`}]]),Hm=Z(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),Um=Z(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Wm=Z(`unlink`,[[`path`,{d:`m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71`,key:`yqzxt4`}],[`path`,{d:`m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71`,key:`4qinb0`}],[`line`,{x1:`8`,x2:`8`,y1:`2`,y2:`5`,key:`1041cp`}],[`line`,{x1:`2`,x2:`5`,y1:`8`,y2:`8`,key:`14m1p5`}],[`line`,{x1:`16`,x2:`16`,y1:`19`,y2:`22`,key:`rzdirn`}],[`line`,{x1:`19`,x2:`22`,y1:`16`,y2:`16`,key:`ox905f`}]]),Gm=Z(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);function Km(e){return/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(e)||e.startsWith(`//`)}function qm(e){return[`localhost`,`127.0.0.1`,`::1`,`[::1]`].includes(e)}function Jm(e,t,n){let r=e.trim();if(!r)return{error:`status URL is empty`};let i;try{i=new URL(r,t)}catch{return{error:`status URL is invalid`}}let a=!Km(r),o=qm(i.hostname);return!a&&!o?{error:`${n} must be relative or loopback`}:{source:{isLoopback:o,isRelative:a,url:r}}}function Ym(e,t){return Jm(e,t,`statusUrl`)}function Xm(e,t){let n=Jm(e,t,`Ops statusUrl`);return n.error?{error:`${n.error}; use showcase mode for public links.`}:n}function Zm(e,t,n){let r=new URL(e,n);return r.searchParams.set(`goal_activation`,t),r.toString()}function Qm(e,t){if(!t||!e.isLoopback)return null;try{let n=new URL(e.url,window.location.href),r=new URL(t,n.origin);return qm(r.hostname)?r.toString():null}catch{return null}}function $m(e,t){return{detailUrl:Qm(t,e.local_dashboard_api?.periodic_report_detail_url),indexUrl:Qm(t,e.local_dashboard_api?.periodic_report_index_url)}}async function eh(e,t){let n=new URL(e);n.searchParams.set(`goal_id`,t),n.searchParams.set(`limit`,`100`),n.searchParams.set(`offset`,`0`);let r=await fetch(n,{cache:`no-store`});if(!r.ok)throw Error(`HTTP ${r.status} while loading published reports`);return fp.parse(await r.json()).periodic_reports}async function th(e,t){let n=new URL(e);Object.entries(t).forEach(([e,t])=>n.searchParams.set(e,t));let r=await fetch(n,{cache:`no-store`});if(!r.ok)throw Error(`HTTP ${r.status} while loading published report detail`);return mp.parse(await r.json()).projection}function nh(e,t,n){let r=e.find(e=>e.agentId===t&&e.available)??e.find(e=>e.agentId===n&&e.available)??e.find(e=>e.available);if(!r)throw Error(`Chat requires at least one available route`);return r}function rh(e){return!!(e&&typeof e==`object`&&e.session_invalidated===!0)}var ih=``.replace(/\/+$/,``);function ah(e){return!ih||/^https?:\/\//.test(e)?e:new URL(e,`${ih}/`).toString()}var oh=J({todo_id:W().nullable(),role:W().nullable(),status:W(),priority:W().nullable(),text:W(),action_kind:W().nullable(),task_class:W().nullable(),claimed_by:W().nullable(),evidence:W().nullable()}),sh=J({goal_id:W(),title:W(),objective:W(),status:W(),waiting_on:W().nullable(),severity:W().nullable(),gate:W(),next_action:W(),top_todo:oh.nullable(),todos:q(oh),evidence:q(W()),quota:J({state:W().nullable(),spent_slots:G().nullable(),allowed_slots:G().nullable(),reason:W().nullable()})});J({ok:K(),schema_version:X(`loopx_chat_status_v0`),selected_goal_id:W().nullable(),goal_count:G(),goals:q(sh)});var ch=J({ok:X(!0),schema_version:Y([`loopx_chat_capabilities_v0`,`loopx_chat_capabilities_v1`]),agent_backend:W(),sandbox:W(),approval_policy:W(),todo_write:W(),goal_subagent_configuration:W().optional(),goal_id:W().nullable(),streaming:K().optional(),resume:K().optional(),interrupt:K().optional(),typed_actions:K().optional(),action_kinds:q(W()).optional(),adapters:q(J({agent_id:W(),display_name:W(),adapter_kind:W(),available:K(),streaming:K(),resume:K(),interrupt:K(),location:W().optional(),source:W().optional(),tool_calls:K().optional(),trust_scope:W().optional()})).optional(),lark_cli:J({available:K(),source:W(),version:W().nullable(),error_code:W().nullable()}).optional()}),lh=J({kind:X(`todo`),text:W(),priority:Y([`P0`,`P1`,`P2`]),rationale:W()}),uh=J({operation:Y([`merge`,`release`,`deploy`,`delete`,`payment`]),target:W().min(1).max(160),summary:W().max(300)}),dh=J({schema_version:X(`loopx_chat_agent_response_v0`),message:W(),proposals:q(lh),protected_action:uh.nullable().optional().default(null),gate:J({kind:W(),summary:W(),next_action:W()}).nullable()}),fh=J({closed:X(!0),ok:X(!0),session_id:W().min(1)});J({dry_run:X(!0),ok:X(!0),preview_id:W().min(1),todo:J({goal_id:W().min(1),text:W(),todo_id:W().optional()})});var ph=J({schema_version:X(`loopx_chat_todo_receipt_v0`),receipt_id:W().min(1),preview_id:W().min(1),goal_id:W().min(1),todo_id:W().min(1),status:X(`applied`),outcome:Y([`todo_added`,`todo_already_exists`]),already_exists:K(),preview_revision:W().nullable()});J({applied:X(!0),ok:X(!0),receipt:ph,todo:J({text:W(),todo_id:W()})});var mh=J({mode:W(),spawn_allowed:K(),max_children:G().int().nonnegative(),allowed_domains:q(W()).optional().default([])}).passthrough(),hh=J({ok:X(!0),dry_run:K(),execute:K(),written:K(),changed:K(),goal_id:W().min(1),changed_fields:q(W()),before:J({orchestration:mh}).passthrough(),after:J({orchestration:mh}).passthrough(),preview_id:W().min(1),feature_summary:J({multi_subagent:Y([`off`,`enabled`])}).passthrough(),global_sync:J({required:K(),executed:K(),readback:J({status:W(),verified:K()}).passthrough()}).passthrough()}),gh=J({id:W().min(1),outcome:Y([`approved`,`rejected`,`cancelled`]),projectionVerified:K().nullable(),proposal:lh,receipt:ph.nullable()}).superRefine((e,t)=>{e.outcome===`approved`&&!e.receipt&&t.addIssue({code:`custom`,message:`approved decision history requires a Todo receipt`,path:[`receipt`]}),e.outcome!==`approved`&&e.receipt&&t.addIssue({code:`custom`,message:`zero-write decision history must not include a Todo receipt`,path:[`receipt`]})});J({schema_version:X(`loopx_chat_decision_history_v0`),goal_id:W().min(1),decisions:q(gh).max(24)});var _h=class extends Error{payload;constructor(e,t){super(e),this.payload=t}},vh=Y([`goal.create`,`goal.update`,`goal.lifecycle`,`todo.create`,`todo.update`,`agent.bind`,`heartbeat.bind`,`monitor.create`,`monitor.update`,`gate.resolve`,`run.correct`]),yh=J({schema_version:X(`loopx_chat_action_proposal_v1`),proposal_id:W().min(1),action_kind:vh,summary:W().min(1),normalized_parameters:gd(W(),id()),context:gd(W(),id()),expected_state_fingerprint:W().min(1),permission_classification:W().min(1),validation_evidence:q(id()),available_transitions:q(Y([`apply`,`cancel`,`regenerate`,`reject`,`defer`])),status:Y([`preview_ready`,`applying`,`gated`,`failed`,`rejected`,`deferred`,`cancelled`,`stale`,`applied`]),receipt:gd(W(),id()).nullable(),stale:gd(W(),id()).nullable(),gate:gd(W(),id()).nullable().optional(),error:gd(W(),id()).nullable().optional(),checkpoint:gd(W(),id()).nullable().optional(),regenerated_from:W().nullable().optional(),created_at:W(),updated_at:W()}),bh=J({ok:X(!0),proposal:yh});async function xh(e){let t=await Dh(`/api/actions/preview`,{method:`POST`,body:JSON.stringify({action_kind:e.actionKind,context:e.context,idempotency_key:e.idempotencyKey,normalized_parameters:e.normalizedParameters,summary:e.summary})});return bh.parse(t).proposal}var Sh=J({ok:X(!0),schema_version:X(`loopx_chat_action_list_v1`),proposals:q(yh)});async function Ch(e={}){let t=new URLSearchParams;e.contextKind&&t.set(`context_kind`,e.contextKind),e.goalId&&t.set(`goal_id`,e.goalId);let n=t.size>0?`?${t.toString()}`:``;return Sh.parse(await Dh(`/api/actions${n}`)).proposals}async function wh(e){let t=await Dh(`/api/actions/${encodeURIComponent(e)}/apply`,{method:`POST`,body:`{}`});return J({ok:X(!0),proposal:yh,turn:gd(W(),id()).nullable().optional()}).parse(t)}async function Th(e){return bh.parse(await Dh(`/api/actions/${encodeURIComponent(e)}/cancel`,{method:`POST`,body:`{}`})).proposal}async function Eh(e,t){return bh.parse(await Dh(`/api/actions/${encodeURIComponent(e)}/${t}`,{method:`POST`,body:`{}`})).proposal}async function Dh(e,t){let n;try{n=await fetch(ah(e),{cache:`no-store`,...t,headers:{"Content-Type":`application/json`,...t?.headers}})}catch{throw new _h(`无法连接 LoopX Chat 服务。请确认 Dashboard 与 Chat 服务已启动且来自同一版本。`,{error_code:`chat_api_unavailable`})}let r=await n.text(),i=null;if(r.trim())try{i=JSON.parse(r)}catch{i=null}let a=i&&typeof i==`object`&&!Array.isArray(i)?i:{};if(!n.ok){let e=(a.proposal&&typeof a.proposal==`object`?a.proposal:null)?.status===`stale`?`来源状态已变化,请重新生成预览。`:null,t=n.status>=500?`LoopX Chat 服务暂时不可用(HTTP ${n.status})。请确认 Dashboard 与 Chat 服务已启动且来自同一版本。`:`LoopX Chat 请求失败(HTTP ${n.status})。`;throw new _h(e??String(a.error||t),Object.keys(a).length?a:{error_code:`chat_api_unavailable`,http_status:n.status})}if(i===null)throw new _h(`LoopX Chat 服务返回了无法识别的响应(HTTP ${n.status})。请确认 Dashboard 与 Chat 服务来自同一版本。`,{error_code:`invalid_chat_api_response`,http_status:n.status});return i}async function Oh(){return ch.parse(await Dh(`/api/chat/capabilities`))}async function kh(e){return Dh(`/api/chat/projection-messages`,{method:`POST`,body:JSON.stringify({answer:e.answer,context_kind:e.contextKind,goal_id:e.goalId,question:e.question})})}async function Ah(e,t=`codex`,n=`resume_latest`,r=`goal`){return Dh(`/api/chat/sessions`,{method:`POST`,body:JSON.stringify({goal_id:e,agent_id:t,mode:n,context_kind:r})})}async function jh(e){return Dh(`/api/chat/sessions/${e}`)}async function Mh(e){let t=new URLSearchParams;return e.agentId&&t.set(`agent_id`,e.agentId),e.channelId&&t.set(`channel_id`,e.channelId),e.goalId&&t.set(`goal_id`,e.goalId),Dh(`/api/chat/sessions?${t.toString()}`)}function Nh(e){let t=new Map;for(let n of e)for(let e of n.messages)t.set(e.message_id,e);return[...t.values()].sort((e,t)=>e.created_at.localeCompare(t.created_at)||e.message_id.localeCompare(t.message_id))}async function Ph(e){let t=await Mh(e),n=await Promise.all(t.sessions.map(e=>jh(e.session_id)));return{messages:Nh(n),sessions:t.sessions,snapshots:n}}async function Fh(e,t,n,r=[]){return Dh(`/api/chat/sessions/${e}/turns`,{method:`POST`,body:JSON.stringify({message:t,client_turn_id:n,...r.length?{attachments:r.map(e=>({data_url:e.dataUrl,id:e.id,mime_type:e.mimeType,name:e.name,size:e.size}))}:{}})})}function Ih(e){let t=e.split(` +`).filter(e=>e.startsWith(`data:`)).map(e=>e.slice(5).trimStart()).join(` +`);if(!t)return null;try{let e=JSON.parse(t);return!e.kind||!e.payload||typeof e.payload!=`object`?null:{event_id:String(e.event_id??``),sequence:Number(e.sequence??0),kind:String(e.kind),created_at:String(e.created_at??``),payload:e.payload}}catch{return null}}async function Lh(e,t,n){let r=``,i=0,a=!1;for(;!a&&i<4;){let o=typeof window>`u`?`http://127.0.0.1`:window.location.origin,s=new URL(ah(e),o);r&&s.searchParams.set(`after`,r);try{let e=await fetch(s,{cache:`no-store`,headers:{Accept:`text/event-stream`},signal:n});if(!e.ok||!e.body)throw new _h(`SSE HTTP ${e.status}`,{status:e.status});let o=e.body.getReader(),c=new TextDecoder,l=``;for(;;){let{done:e,value:n}=await o.read();l+=c.decode(n,{stream:!e}).replaceAll(`\r +`,` +`);let i=l.indexOf(` + +`);for(;i>=0;){let e=l.slice(0,i);l=l.slice(i+2);let n=Ih(e);n&&(n.event_id&&(r=n.event_id),t(n),a=[`turn.completed`,`turn.interrupted`,`turn.failed`].includes(n.kind)),i=l.indexOf(` + +`)}if(e||a)break}i=a?i:i+1}catch(e){if(n?.aborted||(i+=1,i>=4))throw e;await new Promise(e=>globalThis.setTimeout(e,250*2**(i-1)))}}if(!a)throw new _h(`Agent 事件流连接已断开。`,{reconnect_attempts:i})}async function Rh(e,t){return Dh(`/api/chat/sessions/${e}/turns/${t}/interrupt`,{method:`POST`,body:`{}`})}async function zh(e,t,n={}){let r=await Fh(e,t,n.clientTurnId??crypto.randomUUID(),n.attachments);return n.onPhase?.(`turn.accepted`,r.turn_id),Bh(e,r.turn_id,r.events_url,n)}async function Bh(e,t,n,r={}){let i=null,a={failure:null,interrupted:null};try{await Lh(n,e=>{r.onPhase?.(e.kind,t),(e.kind===`answer.delta`||e.kind===`assistant.delta`)&&r.onDelta?.(String(e.payload.text??``)),e.kind===`agent.phase`&&r.onActivity?.(String(e.payload.label??`Agent 正在处理`)),e.kind===`turn.completed`&&(i=e.payload.response),e.kind===`turn.failed`&&(a.failure=e.payload),e.kind===`turn.interrupted`&&(a.interrupted=e.payload)},r.signal)}catch(i){throw i instanceof _h&&!r.signal?.aborted?new _h(i.message,{...i.payload,events_url:n,reconnectable:!0,session_id:e,turn_id:t}):i}if(a.failure)throw new _h(String(a.failure.message||`Agent 回合失败。`),a.failure);if(a.interrupted)throw new _h(`Agent 回合已中断。`,{...a.interrupted,error_code:`turn_interrupted`,session_id:e,turn_id:t});return{response:dh.parse(i),sessionId:e,turnId:t}}async function Vh(e,t,n={}){return Bh(e,t,`/api/chat/sessions/${e}/turns/${t}/events`,n)}async function Hh(e){let t=fh.parse(await Dh(`/api/chat/sessions/${e}`,{keepalive:!0,method:`DELETE`}));if(t.session_id!==e)throw new _h(`Agent 会话关闭回执与本次请求不一致。`,{session_id:t.session_id});return t}async function Uh(e){return Dh(`/api/chat/sessions/${e}/resume`,{method:`POST`,body:`{}`})}function Wh(e){return{goal_id:e.goalId,enabled:e.enabled,...e.enabled?{max_children:e.maxChildren,allowed_domains:e.allowedDomains}:{}}}function Gh(e,t){let n=e.after.orchestration,r=[...new Set(t.allowedDomains)],i=e.feature_summary.multi_subagent===`enabled`;if(!(e.goal_id===t.goalId&&i===t.enabled&&(t.enabled?n.max_children===t.maxChildren&&JSON.stringify(n.allowed_domains)===JSON.stringify(r):n.spawn_allowed===!1&&n.max_children===0)))throw new _h(`Goal 子代理配置回执与本次请求不一致,界面已停止更新。`,{after:e.after,goal_id:e.goal_id});return e}async function Kh(e){let t=hh.parse(await Dh(`/api/chat/goal-subagents/dry-run`,{method:`POST`,body:JSON.stringify(Wh(e))}));if(!t.dry_run||t.execute||t.written)throw new _h(`Goal 子代理预览返回了非预览回执,已停止进入确认状态。`,{result:t});return Gh(t,e)}async function qh(e,t){let n=hh.parse(await Dh(`/api/chat/goal-subagents/apply`,{method:`POST`,body:JSON.stringify({...Wh(e),preview_id:t})}));if(n.preview_id!==t||n.dry_run||!n.execute)throw new _h(`Goal 子代理写入回执与本次确认不一致,界面已停止更新。`,{result:n});if(n.changed&&(!n.written||!n.global_sync.executed||!n.global_sync.readback.verified))throw new _h(`Goal 子代理设置未通过共享状态读回验证。`,{result:n});return Gh(n,e)}var Jh=J({ok:X(!0),targets:q(J({enabled:K(),provider:W(),target_name:W()}))});async function Yh(){return Jh.parse(await Dh(`/api/chat/goal-channel/targets`)).targets}var Xh=J({ok:K(),blocker:W().optional(),public_summary:W().optional(),status:W().optional()});async function Zh(e){return Xh.parse(await Dh(`/api/chat/goal-channel/setup`,{method:`POST`,body:JSON.stringify({execute:e.execute,goal_id:e.goalId,target:e.target})}))}async function Qh(e){return Xh.parse(await Dh(`/api/chat/goal-channel/configure`,{method:`POST`,body:JSON.stringify({auto_notify_human_gates:e.autoNotify,goal_id:e.goalId})}))}J({schema_version:X(`periodic_report_machine_defaults_v0`),enabled:K(),inheritance:X(`live_machine_default`),profile_preset:W().optional(),route_ref:W().optional(),timezone:W()});var $h=J({schema_version:X(`loopx_machine_configuration_v0`),namespaces:gd(W(),gd(W(),id()))}),eg=J({namespace:W(),title:W(),description:W(),schema_versions:q(W()).min(1),configuration_template:gd(W(),id()),template_status:Y([`ready`,`schema_only`])}),tg=J({schema_version:X(`machine_configuration_catalog_v0`),namespaces:q(eg)}),ng=J({key:W(),label:W(),description:W(),input_kind:Y([`boolean`,`number`,`select`,`string_list`,`text`]),required:K(),minimum:G().int().optional(),maximum:G().int().optional(),options:q(W()).optional()}),rg=J({schema_version:X(`capability_configuration_editor_v0`),editable:K(),supported_scopes:q(Y([`goal`,`machine`])),writable_scopes:q(Y([`goal`,`machine`])),fields:q(ng),read_only_reason:W().optional()}),ig=J({schema_version:X(`capability_configuration_catalog_v0`),capabilities:q(J({capability_id:W(),display_name:W(),description:W(),available_scopes:q(Y([`goal`,`machine`])),machine_namespace:W().optional(),goal_feature_id:W().optional(),effective_value_policy:X(`goal_override_over_live_machine_default`).optional(),availability:W().optional(),default:gd(W(),id()).optional(),current:gd(W(),id()).optional(),machine_current:gd(W(),id()).optional(),effective_configuration:J({schema_version:X(`capability_configuration_resolution_v0`),capability_id:W(),source:Y([`goal_override`,`machine_default`,`capability_default`,`not_configured`]),configuration:gd(W(),id()).nullable(),inherited:K(),goal_override_present:K(),machine_default_present:K(),effective_revision:W()}).optional(),documentation:gd(W(),id()).optional(),configuration_editor:rg}))}),ag=J({ok:X(!0),schema_version:X(`goal_configuration_inspection_v0`),status:X(`configured`),goal_id:W(),revision:W(),available_capabilities:q(W()),capability_catalog:ig}),og=J({ok:X(!0),goal_id:W(),capability_id:W(),changed_fields:q(W()),goal_configuration:gd(W(),id()).nullable(),capability_catalog:ig}),sg=og.extend({schema_version:X(`goal_configuration_update_plan_v0`),status:X(`preview`),action:Y([`create`,`update`,`delete`,`unchanged`]),current_revision:W(),desired_revision:W(),base_revision:W(),plan_revision:W(),writes_required:G().int().nonnegative()}),cg=ud([og.extend({schema_version:X(`goal_configuration_transaction_v0`),status:Y([`applied`,`unchanged`]),plan_revision:W(),applied_revision:W(),readback_verified:X(!0)}),J({ok:X(!1),schema_version:X(`goal_configuration_transaction_v0`),status:X(`partial_write`),goal_id:W(),capability_id:W(),plan_revision:W(),applied_revision:W().nullable(),source_written:X(!0),shared_sync_pending:X(!0),readback_verified:K(),changed_fields:q(W()),goal_configuration:gd(W(),id()).nullable(),capability_catalog:ig,error:W(),recommended_action:W()})]),lg=J({ok:X(!0),available_namespaces:q(W()),namespace_catalog:tg.optional().default({schema_version:`machine_configuration_catalog_v0`,namespaces:[]}),capability_catalog:ig,changed_namespaces:q(W()).optional().default([]),machine_configuration:$h.nullable().optional()}),ug=lg.extend({schema_version:X(`machine_configuration_inspection_v0`),status:Y([`configured`,`absent`]),revision:W()}),dg=lg.extend({schema_version:X(`machine_configuration_update_plan_v0`),status:X(`preview`),action:Y([`create`,`update`,`delete`,`unchanged`]),current_revision:W(),desired_revision:W(),plan_revision:W(),writes_required:G().int().nonnegative(),machine_configuration:$h.nullable()}),fg=lg.extend({schema_version:X(`machine_configuration_transaction_v0`),status:Y([`applied`,`unchanged`]),plan_revision:W(),transaction_id:W().nullable(),readback_verified:X(!0),rollback_available:K(),applied_revision:W().optional(),prior_revision:W().optional()}),pg=lg.extend({schema_version:X(`machine_configuration_rollback_plan_v0`),status:X(`preview`),action:Y([`delete`,`restore`,`unchanged`,`blocked`]),reason:W(),transaction_id:W(),plan_revision:W(),rollback_allowed:K(),writes_required:G().int().nonnegative()}),mg=lg.extend({schema_version:X(`machine_configuration_rollback_receipt_v0`),status:Y([`rolled_back`,`unchanged`]),transaction_id:W(),plan_revision:W(),rollback_id:W().nullable(),readback_verified:X(!0)});async function hg(){return ug.parse(await Dh(`/api/chat/machine-configuration`))}async function gg(e){let t=new URLSearchParams({goal_id:e});return ag.parse(await Dh(`/api/chat/goal-configuration?${t.toString()}`))}async function _g(e,t,n){return sg.parse(await Dh(`/api/chat/goal-configuration/preview`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n})}))}async function vg(e,t,n,r){return cg.parse(await Dh(`/api/chat/goal-configuration/apply`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n,expected_plan_revision:r})}))}async function yg(e,t){return dg.parse(await Dh(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,namespace_configuration:t})}))}async function bg(e,t,n){return fg.parse(await Dh(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:n,namespace:e,namespace_configuration:t})}))}async function xg(e){return dg.parse(await Dh(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,operation:`remove`})}))}async function Sg(e,t){return fg.parse(await Dh(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:t,namespace:e,operation:`remove`})}))}async function Cg(e){return pg.parse(await Dh(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!1,transaction_id:e})}))}async function wg(e,t){return mg.parse(await Dh(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!0,expected_plan_revision:t,transaction_id:e})}))}var Tg=J({ok:X(!0),goals:q(J({goal_id:W(),repository:J({branch:W(),identity:W(),label:W(),read_only:X(!0)})}))});async function Eg(){return Tg.parse(await Dh(`/api/chat/goals/contexts`)).goals}var Dg=J({ok:X(!0),apps:q(J({active:K(),app_ref:W(),brand:W(),health_error_code:W().nullable().default(null),label:W(),ready:K(),reply_ready:K().default(!1)}))});async function Og(){return Dg.parse(await Dh(`/api/chat/lark/apps`)).apps}var kg=J({ok:X(!0),app_ref:W(),error:W().nullable(),setup_id:W(),status:Y([`starting`,`waiting_for_feishu`,`ready`,`failed`,`cancelled`]),verification_url:W().url().nullable()});async function Ag(e){return kg.parse(await Dh(`/api/chat/lark/app-setups`,{method:`POST`,body:JSON.stringify({app_ref:e.appRef,brand:e.brand})}))}async function jg(e){return kg.parse(await Dh(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`))}async function Mg(e){return kg.parse(await Dh(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`,{method:`DELETE`}))}var Ng=[`invalid_event`,`binding_unavailable`,`chat_mismatch`,`topic_mismatch`,`route_ambiguous`,`self_message`,`invalid_routing_state`,`not_addressed`],Pg=J({ok:X(!0),chats:q(J({chat_id:W(),chat_name:W()}))});async function Fg(e,t){let n=new URLSearchParams({app_ref:e});return t&&n.set(`query`,t),Pg.parse(await Dh(`/api/chat/lark/chats?${n.toString()}`)).chats}var Ig=J({ok:X(!0),connections:q(J({agent_id:W().nullable().default(null),connection_id:W(),app_label:W(),app_ref:W(),capture_scope:Y([`addressed_only`,`configured_chat_all`]).default(`addressed_only`),chat_name:W(),enabled:K(),goal_id:W(),goal_title:W(),health_error_code:W().nullable().default(null),history_permission_guidance:J({action:X(`enable_application_scopes_and_publish`),api_document_url:W().url(),capability:X(`group_history_pagination`),identity:X(`bot`),required_scopes:md([X(`im:message.group_msg`),X(`im:message.group_msg.include_bot:read`)]),schema_version:X(`lark_bot_group_history_permission_guidance_v0`)}).nullable().default(null),incoming_mode:Y([`mentions`,`all`]),ingress_mode:Y([`live_steering`,`session_queue`,`async_inbox`,`direct_session`]).default(`async_inbox`),event_count:G().int().nonnegative().default(0),last_event_reason:Y(Ng).nullable().default(null).catch(null),last_event_status:W().nullable().default(null),listener_error_code:W().nullable().default(null),listener_status:Y([`starting`,`listening`,`retrying`,`stopped`]).nullable().default(null),replied_count:G().int().nonnegative().default(0),reply_ready:K().default(!1),reply_mode:X(`topic_reply`),session_bound:K().default(!1),target_ref:W(),topic_name:W(),topic_setup_required:K()}))});async function Lg(){return Ig.parse(await Dh(`/api/chat/lark/connections`)).connections}async function Rg(e){return Xh.parse(await Dh(`/api/chat/lark/connections`,{method:`POST`,body:JSON.stringify({...e.agentBindings?{agent_bindings:e.agentBindings.map(e=>({agent_id:e.agentId,app_ref:e.appRef}))}:{},...e.agentId?{agent_id:e.agentId}:{},...e.appRef?{app_ref:e.appRef}:{},capture_scope:e.captureScope,chat_id:e.chatId,chat_name:e.chatName,execute:e.execute,goal_id:e.goalId,incoming_mode:e.incomingMode,ingress_mode:e.ingressMode,reply_mode:e.replyMode})}))}async function zg(e,t){let n=new URLSearchParams({goal_id:e,connection_id:t});return Xh.parse(await Dh(`/api/chat/lark/connections?${n.toString()}`,{method:`DELETE`}))}function Bg(e){return{loadedUrl:null,projectionRevision:0,requestedUrl:e,selectionRevision:0,requestGeneration:0}}function Vg(e,t){return e.selectionRevision+=1,e.requestedUrl=t,e.selectionRevision}function Hg(e,t,n){if(n.background)return e.requestedUrl!==null||e.loadedUrl!==t?null:(e.requestGeneration+=1,{background:!0,projectionRevision:e.projectionRevision,selectionRevision:e.selectionRevision,url:t,generation:e.requestGeneration});let r=n.selectionRevision??e.selectionRevision+1;return n.selectionRevision!==void 0&&e.selectionRevision!==r?null:(e.selectionRevision=r,e.projectionRevision+=1,e.requestedUrl=t,e.requestGeneration+=1,{background:!1,projectionRevision:e.projectionRevision,selectionRevision:r,url:t,generation:e.requestGeneration})}function Ug(e,t){return t.generation===e.requestGeneration&&e.projectionRevision===t.projectionRevision&&e.selectionRevision===t.selectionRevision}function Wg(e,t){return Ug(e,t)&&(!t.background||e.requestedUrl===null&&e.loadedUrl===t.url)}function Gg(e,t,n){return t.get(e)===n}function Kg(e,t,n,r){return e.filter(e=>Gg(r(e),n,t))}function qg(e,t,n){let r=new Set,i=[];for(let a of[...e,...t]){let e=n(a);e==null||r.has(e)||(r.add(e),i.push(a))}return i}var Jg=[`runs_24h`,`runs_7d`,`quota_spend_slots_24h`,`quota_spend_slots_7d`,`automation_run_count_24h`,`automation_run_count_7d`,`progress_signal_run_count_24h`,`progress_signal_run_count_7d`],Yg=[`input_tokens_24h`,`input_tokens_7d`,`output_tokens_24h`,`output_tokens_7d`,`cache_tokens_24h`,`cache_tokens_7d`,`cost_usd_24h`,`cost_usd_7d`,`duration_ms_24h`,`duration_ms_7d`],Xg=[`accounting`,`decision`,`evidence`,`state`,`work`],Zg={accounting:0,decision:0,evidence:0,state:0,work:0},Qg={runs_24h:0,runs_7d:0,quota_spend_slots_24h:0,quota_spend_slots_7d:0,automation_run_count_24h:0,automation_run_count_7d:0,progress_signal_run_count_24h:0,progress_signal_run_count_7d:0};function $g(e,t){let n={...e};for(let r of Jg)n[r]=(Number(e[r])||0)+(Number(t[r])||0);for(let r of Yg)(e[r]!==void 0||t[r]!==void 0)&&(n[r]=(e[r]??0)+(t[r]??0));return n}function e_(e,t){return!e.length||t<=0?e:e.map(e=>({...e,project_share_24h:Math.round((Number(e.runs_24h)||0)/t*1e3)/1e3}))}function t_(e,t){let n={...e};for(let r of Xg)n[r]=(e[r]??0)+(t[r]??0);return n}function n_(e){let t={events_24h:0,events_7d:0,by_class_24h:{...Zg},by_class_7d:{...Zg}};for(let n of e)t.events_24h+=n.events_24h,t.events_7d+=n.events_7d,t.by_class_24h=t_(t.by_class_24h,n.by_class_24h),t.by_class_7d=t_(t.by_class_7d,n.by_class_7d);return t}function r_(e,t,n){if(!e&&!t)return null;let r=Kg(e?.goals??[],`active`,n,e=>e.goal_id),i=Kg(t?.goals??[],`stopped`,n,e=>e.goal_id),a=qg(r,i,e=>e.goal_id),o=n_(r),s=n_(i),c={events_24h:o.events_24h+s.events_24h,events_7d:o.events_7d+s.events_7d,by_class_24h:t_(o.by_class_24h,s.by_class_24h),by_class_7d:t_(o.by_class_7d,s.by_class_7d)};return{...e??t,goals:a,sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),totals:c}}function i_(e,t,n){if(!e&&!t)return null;let r=qg([...Kg(e?.items??[],`active`,n,e=>e.goal_id),...Kg(t?.items??[],`stopped`,n,e=>e.goal_id)],[],e=>`${e.goal_id}:${e.decision_kind??``}:${e.decision_at??``}`),i={decision_count:(e?.summary.decision_count??0)+(t?.summary.decision_count??0),stale_count:r.filter(e=>e.stale_by_age).length,rebase_required_count:(e?.summary.rebase_required_count??0)+(t?.summary.rebase_required_count??0),fresh_count:(e?.summary.fresh_count??0)+(t?.summary.fresh_count??0)};return{...e??t,items:r,sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),summary:i}}function a_(e,t){return qg([...e,...t].sort((e,t)=>t.generated_at.localeCompare(e.generated_at)),[],e=>`${e.goal_id}:${e.generated_at}:${e.classification??``}`)}function o_(e,t,n){let r=qg(Kg(e.items,`active`,n,e=>e.goal_id),Kg(t.items,`stopped`,n,e=>e.goal_id),e=>e.goal_id);return{...e,item_count:r.length,items:r,needs_controller:r.filter(e=>e.waiting_on===`controller`).length,needs_codex:r.filter(e=>e.waiting_on===`codex`).length,needs_user_or_controller:r.filter(e=>[`user_or_controller`,`controller`].includes(e.waiting_on)).length,watching_external_evidence:r.filter(e=>e.waiting_on===`external_evidence`).length}}function s_(e){let t=e.todo_id?.trim()||``;return t?`${e.goal_id}:${t}`:`${e.goal_id}:synthetic:${e.role??``}:${e.index??``}:${e.text??``}`}function c_(e){let t={...Qg};for(let n of e){for(let e of Jg)t[e]+=Number(n[e])||0;for(let e of Yg)n[e]!==void 0&&(t[e]=(t[e]??0)+n[e])}return t}function l_(e,t,n){if(!e&&!t)return null;let r=Kg(e?.items??[],`active`,n,e=>e.goal_id),i=Kg(t?.items??[],`stopped`,n,e=>e.goal_id),a=qg(r,i,s_);return{...e??t,current_projected_count:r.length+i.length,items:a,rollout_event_count:a.reduce((e,t)=>e+(t.event_count??0),0),total_count:a.length}}function u_(e,t,n){if(!e&&!t)return null;let r=Kg(e?.goals??[],`active`,n,e=>e.goal_id),i=Kg(t?.goals??[],`stopped`,n,e=>e.goal_id),a=qg(r,i,e=>e.goal_id),o=$g(c_(r),c_(i));return{...e??t,goals:e_(a,Number(o.runs_24h)||0),sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),totals:o}}function d_(e,t,n){if(!e&&!t)return null;let r=(e?.agents??[]).filter(e=>e.goal_ids.some(e=>Gg(e,n,`active`))||(e.current_todo?.goal_id?Gg(e.current_todo.goal_id,n,`active`):!1)),i=(t?.agents??[]).filter(e=>e.goal_ids.some(e=>Gg(e,n,`stopped`))||(e.current_todo?.goal_id?Gg(e.current_todo.goal_id,n,`stopped`):!1)),a=qg(r,i,e=>e.agent_id).map(e=>{let t=i.find(t=>t.agent_id===e.agent_id);return t?{...e,goal_ids:Array.from(new Set([...e.goal_ids??[],...t.goal_ids]))}:e});return{...e??t,agents:a,source_summary:(e??t)?.source_summary?{...(e??t).source_summary,projected_agent_count:a.length,registered_agent_count:new Set(a.map(e=>e.agent_id)).size}:(e??t)?.source_summary}}function f_(e,t,n){if(!e&&!t)return null;let r=qg(Kg(e?.goals??[],`active`,n,e=>e.goal_id),Kg(t?.goals??[],`stopped`,n,e=>e.goal_id),e=>e.goal_id);return{...e??t,goals:r}}function p_(e,t){let n=t.goal_projection?.scope;if(n!==`active`&&n!==`stopped`)return t;let r=n,i=t.run_history.goals,a=e.run_history.goals,o=qg(r===`active`?i:a.filter(e=>e.activation_state!==`stopped`),r===`stopped`?i:a.filter(e=>e.activation_state===`stopped`),e=>e.id),s=new Map(o.map(e=>[e.id,e.activation_state])),c=r===`active`?t:e,l=r===`stopped`?t:e,u=e.goal_projection?.registry_revision??null,d=t.goal_projection?.registry_revision??null,f=u===null||d===null||u===d;return{...e,agent_management_projection:d_(c.agent_management_projection,l.agent_management_projection,s),attention_queue:o_(c.attention_queue,l.attention_queue,s),decision_freshness_summary:i_(c.decision_freshness_summary,l.decision_freshness_summary,s),event_ledger_summary:r_(c.event_ledger_summary,l.event_ledger_summary,s),goal_channel_notification_projection:f_(c.goal_channel_notification_projection,l.goal_channel_notification_projection,s),goal_projection:{schema_version:`loopx_goal_projection_scope_v0`,...t.goal_projection,complete:f,projected_goal_count:o.length,registry_goal_count:t.goal_projection?.registry_goal_count??0,scope:`all`},run_history:{...e.run_history,goal_count:o.length,goals:o,recent_runs:a_(c.run_history.recent_runs,l.run_history.recent_runs),run_count:c.run_history.run_count+l.run_history.run_count},todo_index:l_(c.todo_index,l.todo_index,s),usage_summary:u_(c.usage_summary,l.usage_summary,s)}}function m_(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`){if(Array.isArray(e)){var i=e.length;for(t=0;ttypeof e==`boolean`?`${e}`:e===0?`0`:e,__=h_,v_=(e,t)=>n=>{if(t?.variants==null)return __(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=g_(t)||g_(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return __(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)},y_=(e,t)=>{let n=Array(e.length+t.length);for(let t=0;t({classGroupId:e,validator:t}),x_=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),S_=`-`,C_=[],w_=`arbitrary..`,T_=e=>{let t=O_(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:e=>{if(e.startsWith(`[`)&&e.endsWith(`]`))return D_(e);let n=e.split(S_);return E_(n,+(n[0]===``&&n.length>1),t)},getConflictingClassGroupIds:(e,t)=>{if(t){let t=r[e],i=n[e];return t?i?y_(i,t):t:i||C_}return n[e]||C_}}},E_=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;let r=e[t],i=n.nextPart.get(r);if(i){let n=E_(e,t+1,i);if(n)return n}let a=n.validators;if(a===null)return;let o=t===0?e.join(S_):e.slice(t).join(S_),s=a.length;for(let e=0;ee.slice(1,-1).indexOf(`:`)===-1?void 0:(()=>{let t=e.slice(1,-1),n=t.indexOf(`:`),r=t.slice(0,n);return r?w_+r:void 0})(),O_=e=>{let{theme:t,classGroups:n}=e;return k_(n,t)},k_=(e,t)=>{let n=x_();for(let r in e){let i=e[r];A_(i,n,r,t)}return n},A_=(e,t,n,r)=>{let i=e.length;for(let a=0;a{if(typeof e==`string`){M_(e,t,n);return}if(typeof e==`function`){N_(e,t,n,r);return}P_(e,t,n,r)},M_=(e,t,n)=>{let r=e===``?t:F_(t,e);r.classGroupId=n},N_=(e,t,n,r)=>{if(I_(e)){A_(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(b_(n,e))},P_=(e,t,n,r)=>{let i=Object.entries(e),a=i.length;for(let e=0;e{let n=e,r=t.split(S_),i=r.length;for(let e=0;e`isThemeGetter`in e&&e.isThemeGetter===!0,L_=e=>{if(e<1)return{get:()=>void 0,set:()=>{}};let t=0,n=Object.create(null),r=Object.create(null),i=(i,a)=>{n[i]=a,t++,t>e&&(t=0,r=n,n=Object.create(null))};return{get(e){let t=n[e];if(t!==void 0)return t;if((t=r[e])!==void 0)return i(e,t),t},set(e,t){e in n?n[e]=t:i(e,t)}}},R_=`!`,z_=`:`,B_=[],V_=(e,t,n,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:i}),H_=e=>{let{prefix:t,experimentalParseClassName:n}=e,r=e=>{let t=[],n=0,r=0,i=0,a,o=e.length;for(let s=0;si?a-i:void 0;return V_(t,l,c,u)};if(t){let e=t+z_,n=r;r=t=>t.startsWith(e)?n(t.slice(e.length)):V_(B_,!1,t,void 0,!0)}if(n){let e=r;r=t=>n({className:t,parseClassName:e})}return r},U_=e=>{let t=new Map;return e.orderSensitiveModifiers.forEach((e,n)=>{t.set(e,1e6+n)}),e=>{let n=[],r=[];for(let i=0;i0&&(r.sort(),n.push(...r),r=[]),n.push(a)):r.push(a)}return r.length>0&&(r.sort(),n.push(...r)),n}},W_=e=>({cache:L_(e.cacheSize),parseClassName:H_(e),sortModifiers:U_(e),postfixLookupClassGroupIds:G_(e),...T_(e)}),G_=e=>{let t=Object.create(null),n=e.postfixLookupClassGroups;if(n)for(let e=0;e{let{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i,sortModifiers:a,postfixLookupClassGroupIds:o}=t,s=[],c=e.trim().split(K_),l=``;for(let e=c.length-1;e>=0;--e){let t=c[e],{isExternal:u,modifiers:d,hasImportantModifier:f,baseClassName:p,maybePostfixModifierPosition:m}=n(t);if(u){l=t+(l.length>0?` `+l:l);continue}let h=!!m,g;if(h){g=r(p.substring(0,m));let e=g&&o[g]?r(p):void 0;e&&e!==g&&(g=e,h=!1)}else g=r(p);if(!g){if(!h){l=t+(l.length>0?` `+l:l);continue}if(g=r(p),!g){l=t+(l.length>0?` `+l:l);continue}h=!1}let _=d.length===0?``:d.length===1?d[0]:a(d).join(`:`),v=f?_+R_:_,y=v+g;if(s.indexOf(y)>-1)continue;s.push(y);let b=i(g,h);for(let e=0;e0?` `+l:l)}return l},J_=(...e)=>{let t=0,n,r,i=``;for(;t{if(typeof e==`string`)return e;let t,n=``;for(let r=0;r{let n,r,i,a,o=o=>(n=W_(t.reduce((e,t)=>t(e),e())),r=n.cache.get,i=n.cache.set,a=s,s(o)),s=e=>{let t=r(e);if(t)return t;let a=q_(e,n);return i(e,a),a};return a=o,(...e)=>a(J_(...e))},Z_=[],Q_=e=>{let t=t=>t[e]||Z_;return t.isThemeGetter=!0,t},$_=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,ev=/^\((?:(\w[\w-]*):)?(.+)\)$/i,tv=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,nv=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,rv=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,iv=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,av=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,ov=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,sv=e=>tv.test(e),cv=e=>!!e&&!Number.isNaN(Number(e)),lv=e=>!!e&&Number.isInteger(Number(e)),uv=e=>e.endsWith(`%`)&&cv(e.slice(0,-1)),dv=e=>nv.test(e),fv=()=>!0,pv=e=>rv.test(e)&&!iv.test(e),mv=()=>!1,hv=e=>av.test(e),gv=e=>ov.test(e),_v=e=>!Q(e)&&!$(e),vv=e=>e.startsWith(`@container`)&&(e[10]===`/`&&e[11]!==void 0||e[11]===`s`&&e[16]!==void 0&&e.startsWith(`-size/`,10)||e[11]===`n`&&e[18]!==void 0&&e.startsWith(`-normal/`,10)),yv=e=>Pv(e,Rv,mv),Q=e=>$_.test(e),bv=e=>Pv(e,zv,pv),xv=e=>Pv(e,Bv,cv),Sv=e=>Pv(e,Hv,fv),Cv=e=>Pv(e,Vv,mv),wv=e=>Pv(e,Iv,mv),Tv=e=>Pv(e,Lv,gv),Ev=e=>Pv(e,Uv,hv),$=e=>ev.test(e),Dv=e=>Fv(e,zv),Ov=e=>Fv(e,Vv),kv=e=>Fv(e,Iv),Av=e=>Fv(e,Rv),jv=e=>Fv(e,Lv),Mv=e=>Fv(e,Uv,!0),Nv=e=>Fv(e,Hv,!0),Pv=(e,t,n)=>{let r=$_.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},Fv=(e,t,n=!1)=>{let r=ev.exec(e);return r?r[1]?t(r[1]):n:!1},Iv=e=>e===`position`||e===`percentage`,Lv=e=>e===`image`||e===`url`,Rv=e=>e===`length`||e===`size`||e===`bg-size`,zv=e=>e===`length`,Bv=e=>e===`number`,Vv=e=>e===`family-name`,Hv=e=>e===`number`||e===`weight`,Uv=e=>e===`shadow`,Wv=X_(()=>{let e=Q_(`color`),t=Q_(`font`),n=Q_(`text`),r=Q_(`font-weight`),i=Q_(`tracking`),a=Q_(`leading`),o=Q_(`breakpoint`),s=Q_(`container`),c=Q_(`spacing`),l=Q_(`radius`),u=Q_(`shadow`),d=Q_(`inset-shadow`),f=Q_(`text-shadow`),p=Q_(`drop-shadow`),m=Q_(`blur`),h=Q_(`perspective`),g=Q_(`aspect`),_=Q_(`ease`),v=Q_(`animate`),y=()=>[`auto`,`avoid`,`all`,`avoid-page`,`page`,`left`,`right`,`column`],b=()=>[`center`,`top`,`bottom`,`left`,`right`,`top-left`,`left-top`,`top-right`,`right-top`,`bottom-right`,`right-bottom`,`bottom-left`,`left-bottom`],x=()=>[...b(),$,Q],S=()=>[`auto`,`hidden`,`clip`,`visible`,`scroll`],C=()=>[`auto`,`contain`,`none`],w=()=>[$,Q,c],T=()=>[sv,`full`,`auto`,...w()],E=()=>[lv,`none`,`subgrid`,$,Q],D=()=>[`auto`,{span:[`full`,lv,$,Q]},lv,$,Q],O=()=>[lv,`auto`,$,Q],k=()=>[`auto`,`min`,`max`,`fr`,$,Q],ee=()=>[`start`,`end`,`center`,`between`,`around`,`evenly`,`stretch`,`baseline`,`center-safe`,`end-safe`],A=()=>[`start`,`end`,`center`,`stretch`,`center-safe`,`end-safe`],j=()=>[`auto`,...w()],te=()=>[sv,`auto`,`full`,`dvw`,`dvh`,`lvw`,`lvh`,`svw`,`svh`,`min`,`max`,`fit`,...w()],ne=()=>[sv,`screen`,`full`,`dvw`,`lvw`,`svw`,`min`,`max`,`fit`,...w()],re=()=>[sv,`screen`,`full`,`lh`,`dvh`,`lvh`,`svh`,`min`,`max`,`fit`,...w()],M=()=>[e,$,Q],N=()=>[...b(),kv,wv,{position:[$,Q]}],ie=()=>[`no-repeat`,{repeat:[``,`x`,`y`,`space`,`round`]}],ae=()=>[`auto`,`cover`,`contain`,Av,yv,{size:[$,Q]}],oe=()=>[uv,Dv,bv],P=()=>[``,`none`,`full`,l,$,Q],F=()=>[``,cv,Dv,bv],I=()=>[`solid`,`dashed`,`dotted`,`double`],se=()=>[`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`],ce=()=>[cv,uv,kv,wv],le=()=>[``,`none`,m,$,Q],ue=()=>[`none`,cv,$,Q],de=()=>[`none`,cv,$,Q],fe=()=>[cv,$,Q],pe=()=>[sv,`full`,...w()];return{cacheSize:500,theme:{animate:[`spin`,`ping`,`pulse`,`bounce`],aspect:[`video`],blur:[dv],breakpoint:[dv],color:[fv],container:[dv],"drop-shadow":[dv],ease:[`in`,`out`,`in-out`],font:[_v],"font-weight":[`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`],"inset-shadow":[dv],leading:[`none`,`tight`,`snug`,`normal`,`relaxed`,`loose`],perspective:[`dramatic`,`near`,`normal`,`midrange`,`distant`,`none`],radius:[dv],shadow:[dv],spacing:[`px`,cv],text:[dv],"text-shadow":[dv],tracking:[`tighter`,`tight`,`normal`,`wide`,`wider`,`widest`]},classGroups:{aspect:[{aspect:[`auto`,`square`,sv,Q,$,g]}],container:[`container`],"container-type":[{"@container":[``,`normal`,`size`,$,Q]}],"container-named":[vv],columns:[{columns:[cv,Q,$,s]}],"break-after":[{"break-after":y()}],"break-before":[{"break-before":y()}],"break-inside":[{"break-inside":[`auto`,`avoid`,`avoid-page`,`avoid-column`]}],"box-decoration":[{"box-decoration":[`slice`,`clone`]}],box:[{box:[`border`,`content`]}],display:[`block`,`inline-block`,`inline`,`flex`,`inline-flex`,`table`,`inline-table`,`table-caption`,`table-cell`,`table-column`,`table-column-group`,`table-footer-group`,`table-header-group`,`table-row-group`,`table-row`,`flow-root`,`grid`,`inline-grid`,`contents`,`list-item`,`hidden`],sr:[`sr-only`,`not-sr-only`],float:[{float:[`right`,`left`,`none`,`start`,`end`]}],clear:[{clear:[`left`,`right`,`both`,`none`,`start`,`end`]}],isolation:[`isolate`,`isolation-auto`],"object-fit":[{object:[`contain`,`cover`,`fill`,`none`,`scale-down`]}],"object-position":[{object:x()}],overflow:[{overflow:S()}],"overflow-x":[{"overflow-x":S()}],"overflow-y":[{"overflow-y":S()}],overscroll:[{overscroll:C()}],"overscroll-x":[{"overscroll-x":C()}],"overscroll-y":[{"overscroll-y":C()}],position:[`static`,`fixed`,`absolute`,`relative`,`sticky`],inset:[{inset:T()}],"inset-x":[{"inset-x":T()}],"inset-y":[{"inset-y":T()}],start:[{"inset-s":T(),start:T()}],end:[{"inset-e":T(),end:T()}],"inset-bs":[{"inset-bs":T()}],"inset-be":[{"inset-be":T()}],top:[{top:T()}],right:[{right:T()}],bottom:[{bottom:T()}],left:[{left:T()}],visibility:[`visible`,`invisible`,`collapse`],z:[{z:[lv,`auto`,$,Q]}],basis:[{basis:[sv,`full`,`auto`,s,...w()]}],"flex-direction":[{flex:[`row`,`row-reverse`,`col`,`col-reverse`]}],"flex-wrap":[{flex:[`nowrap`,`wrap`,`wrap-reverse`]}],flex:[{flex:[cv,sv,`auto`,`initial`,`none`,Q]}],grow:[{grow:[``,cv,$,Q]}],shrink:[{shrink:[``,cv,$,Q]}],order:[{order:[lv,`first`,`last`,`none`,$,Q]}],"grid-cols":[{"grid-cols":E()}],"col-start-end":[{col:D()}],"col-start":[{"col-start":O()}],"col-end":[{"col-end":O()}],"grid-rows":[{"grid-rows":E()}],"row-start-end":[{row:D()}],"row-start":[{"row-start":O()}],"row-end":[{"row-end":O()}],"grid-flow":[{"grid-flow":[`row`,`col`,`dense`,`row-dense`,`col-dense`]}],"auto-cols":[{"auto-cols":k()}],"auto-rows":[{"auto-rows":k()}],gap:[{gap:w()}],"gap-x":[{"gap-x":w()}],"gap-y":[{"gap-y":w()}],"justify-content":[{justify:[...ee(),`normal`]}],"justify-items":[{"justify-items":[...A(),`normal`]}],"justify-self":[{"justify-self":[`auto`,...A()]}],"align-content":[{content:[`normal`,...ee()]}],"align-items":[{items:[...A(),{baseline:[``,`last`]}]}],"align-self":[{self:[`auto`,...A(),{baseline:[``,`last`]}]}],"place-content":[{"place-content":ee()}],"place-items":[{"place-items":[...A(),`baseline`]}],"place-self":[{"place-self":[`auto`,...A()]}],p:[{p:w()}],px:[{px:w()}],py:[{py:w()}],ps:[{ps:w()}],pe:[{pe:w()}],pbs:[{pbs:w()}],pbe:[{pbe:w()}],pt:[{pt:w()}],pr:[{pr:w()}],pb:[{pb:w()}],pl:[{pl:w()}],m:[{m:j()}],mx:[{mx:j()}],my:[{my:j()}],ms:[{ms:j()}],me:[{me:j()}],mbs:[{mbs:j()}],mbe:[{mbe:j()}],mt:[{mt:j()}],mr:[{mr:j()}],mb:[{mb:j()}],ml:[{ml:j()}],"space-x":[{"space-x":w()}],"space-x-reverse":[`space-x-reverse`],"space-y":[{"space-y":w()}],"space-y-reverse":[`space-y-reverse`],size:[{size:te()}],"inline-size":[{inline:[`auto`,...ne()]}],"min-inline-size":[{"min-inline":[`auto`,...ne()]}],"max-inline-size":[{"max-inline":[`none`,...ne()]}],"block-size":[{block:[`auto`,...re()]}],"min-block-size":[{"min-block":[`auto`,...re()]}],"max-block-size":[{"max-block":[`none`,...re()]}],w:[{w:[s,`screen`,...te()]}],"min-w":[{"min-w":[s,`screen`,`none`,...te()]}],"max-w":[{"max-w":[s,`screen`,`none`,`prose`,{screen:[o]},...te()]}],h:[{h:[`screen`,`lh`,...te()]}],"min-h":[{"min-h":[`screen`,`lh`,`none`,...te()]}],"max-h":[{"max-h":[`screen`,`lh`,...te()]}],"font-size":[{text:[`base`,n,Dv,bv]}],"font-smoothing":[`antialiased`,`subpixel-antialiased`],"font-style":[`italic`,`not-italic`],"font-weight":[{font:[r,Nv,Sv]}],"font-stretch":[{"font-stretch":[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`,uv,Q]}],"font-family":[{font:[Ov,Cv,t]}],"font-features":[{"font-features":[Q]}],"fvn-normal":[`normal-nums`],"fvn-ordinal":[`ordinal`],"fvn-slashed-zero":[`slashed-zero`],"fvn-figure":[`lining-nums`,`oldstyle-nums`],"fvn-spacing":[`proportional-nums`,`tabular-nums`],"fvn-fraction":[`diagonal-fractions`,`stacked-fractions`],tracking:[{tracking:[i,$,Q]}],"line-clamp":[{"line-clamp":[cv,`none`,$,xv]}],leading:[{leading:[a,...w()]}],"list-image":[{"list-image":[`none`,$,Q]}],"list-style-position":[{list:[`inside`,`outside`]}],"list-style-type":[{list:[`disc`,`decimal`,`none`,$,Q]}],"text-alignment":[{text:[`left`,`center`,`right`,`justify`,`start`,`end`]}],"placeholder-color":[{placeholder:M()}],"text-color":[{text:M()}],"text-decoration":[`underline`,`overline`,`line-through`,`no-underline`],"text-decoration-style":[{decoration:[...I(),`wavy`]}],"text-decoration-thickness":[{decoration:[cv,`from-font`,`auto`,$,bv]}],"text-decoration-color":[{decoration:M()}],"underline-offset":[{"underline-offset":[cv,`auto`,$,Q]}],"text-transform":[`uppercase`,`lowercase`,`capitalize`,`normal-case`],"text-overflow":[`truncate`,`text-ellipsis`,`text-clip`],"text-wrap":[{text:[`wrap`,`nowrap`,`balance`,`pretty`]}],indent:[{indent:w()}],"tab-size":[{tab:[lv,$,Q]}],"vertical-align":[{align:[`baseline`,`top`,`middle`,`bottom`,`text-top`,`text-bottom`,`sub`,`super`,$,Q]}],whitespace:[{whitespace:[`normal`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]}],break:[{break:[`normal`,`words`,`all`,`keep`]}],wrap:[{wrap:[`break-word`,`anywhere`,`normal`]}],hyphens:[{hyphens:[`none`,`manual`,`auto`]}],content:[{content:[`none`,$,Q]}],"bg-attachment":[{bg:[`fixed`,`local`,`scroll`]}],"bg-clip":[{"bg-clip":[`border`,`padding`,`content`,`text`]}],"bg-origin":[{"bg-origin":[`border`,`padding`,`content`]}],"bg-position":[{bg:N()}],"bg-repeat":[{bg:ie()}],"bg-size":[{bg:ae()}],"bg-image":[{bg:[`none`,{linear:[{to:[`t`,`tr`,`r`,`br`,`b`,`bl`,`l`,`tl`]},lv,$,Q],radial:[``,$,Q],conic:[lv,$,Q]},jv,Tv]}],"bg-color":[{bg:M()}],"gradient-from-pos":[{from:oe()}],"gradient-via-pos":[{via:oe()}],"gradient-to-pos":[{to:oe()}],"gradient-from":[{from:M()}],"gradient-via":[{via:M()}],"gradient-to":[{to:M()}],rounded:[{rounded:P()}],"rounded-s":[{"rounded-s":P()}],"rounded-e":[{"rounded-e":P()}],"rounded-t":[{"rounded-t":P()}],"rounded-r":[{"rounded-r":P()}],"rounded-b":[{"rounded-b":P()}],"rounded-l":[{"rounded-l":P()}],"rounded-ss":[{"rounded-ss":P()}],"rounded-se":[{"rounded-se":P()}],"rounded-ee":[{"rounded-ee":P()}],"rounded-es":[{"rounded-es":P()}],"rounded-tl":[{"rounded-tl":P()}],"rounded-tr":[{"rounded-tr":P()}],"rounded-br":[{"rounded-br":P()}],"rounded-bl":[{"rounded-bl":P()}],"border-w":[{border:F()}],"border-w-x":[{"border-x":F()}],"border-w-y":[{"border-y":F()}],"border-w-s":[{"border-s":F()}],"border-w-e":[{"border-e":F()}],"border-w-bs":[{"border-bs":F()}],"border-w-be":[{"border-be":F()}],"border-w-t":[{"border-t":F()}],"border-w-r":[{"border-r":F()}],"border-w-b":[{"border-b":F()}],"border-w-l":[{"border-l":F()}],"divide-x":[{"divide-x":F()}],"divide-x-reverse":[`divide-x-reverse`],"divide-y":[{"divide-y":F()}],"divide-y-reverse":[`divide-y-reverse`],"border-style":[{border:[...I(),`hidden`,`none`]}],"divide-style":[{divide:[...I(),`hidden`,`none`]}],"border-color":[{border:M()}],"border-color-x":[{"border-x":M()}],"border-color-y":[{"border-y":M()}],"border-color-s":[{"border-s":M()}],"border-color-e":[{"border-e":M()}],"border-color-bs":[{"border-bs":M()}],"border-color-be":[{"border-be":M()}],"border-color-t":[{"border-t":M()}],"border-color-r":[{"border-r":M()}],"border-color-b":[{"border-b":M()}],"border-color-l":[{"border-l":M()}],"divide-color":[{divide:M()}],"outline-style":[{outline:[...I(),`none`,`hidden`]}],"outline-offset":[{"outline-offset":[cv,$,Q]}],"outline-w":[{outline:[``,cv,Dv,bv]}],"outline-color":[{outline:M()}],shadow:[{shadow:[``,`none`,u,Mv,Ev]}],"shadow-color":[{shadow:M()}],"inset-shadow":[{"inset-shadow":[`none`,d,Mv,Ev]}],"inset-shadow-color":[{"inset-shadow":M()}],"ring-w":[{ring:F()}],"ring-w-inset":[`ring-inset`],"ring-color":[{ring:M()}],"ring-offset-w":[{"ring-offset":[cv,bv]}],"ring-offset-color":[{"ring-offset":M()}],"inset-ring-w":[{"inset-ring":F()}],"inset-ring-color":[{"inset-ring":M()}],"text-shadow":[{"text-shadow":[`none`,f,Mv,Ev]}],"text-shadow-color":[{"text-shadow":M()}],opacity:[{opacity:[cv,$,Q]}],"mix-blend":[{"mix-blend":[...se(),`plus-darker`,`plus-lighter`]}],"bg-blend":[{"bg-blend":se()}],"mask-clip":[{"mask-clip":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]},`mask-no-clip`],"mask-composite":[{mask:[`add`,`subtract`,`intersect`,`exclude`]}],"mask-image-linear-pos":[{"mask-linear":[cv]}],"mask-image-linear-from-pos":[{"mask-linear-from":ce()}],"mask-image-linear-to-pos":[{"mask-linear-to":ce()}],"mask-image-linear-from-color":[{"mask-linear-from":M()}],"mask-image-linear-to-color":[{"mask-linear-to":M()}],"mask-image-t-from-pos":[{"mask-t-from":ce()}],"mask-image-t-to-pos":[{"mask-t-to":ce()}],"mask-image-t-from-color":[{"mask-t-from":M()}],"mask-image-t-to-color":[{"mask-t-to":M()}],"mask-image-r-from-pos":[{"mask-r-from":ce()}],"mask-image-r-to-pos":[{"mask-r-to":ce()}],"mask-image-r-from-color":[{"mask-r-from":M()}],"mask-image-r-to-color":[{"mask-r-to":M()}],"mask-image-b-from-pos":[{"mask-b-from":ce()}],"mask-image-b-to-pos":[{"mask-b-to":ce()}],"mask-image-b-from-color":[{"mask-b-from":M()}],"mask-image-b-to-color":[{"mask-b-to":M()}],"mask-image-l-from-pos":[{"mask-l-from":ce()}],"mask-image-l-to-pos":[{"mask-l-to":ce()}],"mask-image-l-from-color":[{"mask-l-from":M()}],"mask-image-l-to-color":[{"mask-l-to":M()}],"mask-image-x-from-pos":[{"mask-x-from":ce()}],"mask-image-x-to-pos":[{"mask-x-to":ce()}],"mask-image-x-from-color":[{"mask-x-from":M()}],"mask-image-x-to-color":[{"mask-x-to":M()}],"mask-image-y-from-pos":[{"mask-y-from":ce()}],"mask-image-y-to-pos":[{"mask-y-to":ce()}],"mask-image-y-from-color":[{"mask-y-from":M()}],"mask-image-y-to-color":[{"mask-y-to":M()}],"mask-image-radial":[{"mask-radial":[$,Q]}],"mask-image-radial-from-pos":[{"mask-radial-from":ce()}],"mask-image-radial-to-pos":[{"mask-radial-to":ce()}],"mask-image-radial-from-color":[{"mask-radial-from":M()}],"mask-image-radial-to-color":[{"mask-radial-to":M()}],"mask-image-radial-shape":[{"mask-radial":[`circle`,`ellipse`]}],"mask-image-radial-size":[{"mask-radial":[{closest:[`side`,`corner`],farthest:[`side`,`corner`]}]}],"mask-image-radial-pos":[{"mask-radial-at":b()}],"mask-image-conic-pos":[{"mask-conic":[cv]}],"mask-image-conic-from-pos":[{"mask-conic-from":ce()}],"mask-image-conic-to-pos":[{"mask-conic-to":ce()}],"mask-image-conic-from-color":[{"mask-conic-from":M()}],"mask-image-conic-to-color":[{"mask-conic-to":M()}],"mask-mode":[{mask:[`alpha`,`luminance`,`match`]}],"mask-origin":[{"mask-origin":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]}],"mask-position":[{mask:N()}],"mask-repeat":[{mask:ie()}],"mask-size":[{mask:ae()}],"mask-type":[{"mask-type":[`alpha`,`luminance`]}],"mask-image":[{mask:[`none`,$,Q]}],filter:[{filter:[``,`none`,$,Q]}],blur:[{blur:le()}],brightness:[{brightness:[cv,$,Q]}],contrast:[{contrast:[cv,$,Q]}],"drop-shadow":[{"drop-shadow":[``,`none`,p,Mv,Ev]}],"drop-shadow-color":[{"drop-shadow":M()}],grayscale:[{grayscale:[``,cv,$,Q]}],"hue-rotate":[{"hue-rotate":[cv,$,Q]}],invert:[{invert:[``,cv,$,Q]}],saturate:[{saturate:[cv,$,Q]}],sepia:[{sepia:[``,cv,$,Q]}],"backdrop-filter":[{"backdrop-filter":[``,`none`,$,Q]}],"backdrop-blur":[{"backdrop-blur":le()}],"backdrop-brightness":[{"backdrop-brightness":[cv,$,Q]}],"backdrop-contrast":[{"backdrop-contrast":[cv,$,Q]}],"backdrop-grayscale":[{"backdrop-grayscale":[``,cv,$,Q]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[cv,$,Q]}],"backdrop-invert":[{"backdrop-invert":[``,cv,$,Q]}],"backdrop-opacity":[{"backdrop-opacity":[cv,$,Q]}],"backdrop-saturate":[{"backdrop-saturate":[cv,$,Q]}],"backdrop-sepia":[{"backdrop-sepia":[``,cv,$,Q]}],"border-collapse":[{border:[`collapse`,`separate`]}],"border-spacing":[{"border-spacing":w()}],"border-spacing-x":[{"border-spacing-x":w()}],"border-spacing-y":[{"border-spacing-y":w()}],"table-layout":[{table:[`auto`,`fixed`]}],caption:[{caption:[`top`,`bottom`]}],transition:[{transition:[``,`all`,`colors`,`opacity`,`shadow`,`transform`,`none`,$,Q]}],"transition-behavior":[{transition:[`normal`,`discrete`]}],duration:[{duration:[cv,`initial`,$,Q]}],ease:[{ease:[`linear`,`initial`,_,$,Q]}],delay:[{delay:[cv,$,Q]}],animate:[{animate:[`none`,v,$,Q]}],backface:[{backface:[`hidden`,`visible`]}],perspective:[{perspective:[h,$,Q]}],"perspective-origin":[{"perspective-origin":x()}],rotate:[{rotate:ue()}],"rotate-x":[{"rotate-x":ue()}],"rotate-y":[{"rotate-y":ue()}],"rotate-z":[{"rotate-z":ue()}],scale:[{scale:de()}],"scale-x":[{"scale-x":de()}],"scale-y":[{"scale-y":de()}],"scale-z":[{"scale-z":de()}],"scale-3d":[`scale-3d`],skew:[{skew:fe()}],"skew-x":[{"skew-x":fe()}],"skew-y":[{"skew-y":fe()}],transform:[{transform:[$,Q,``,`none`,`gpu`,`cpu`]}],"transform-origin":[{origin:x()}],"transform-style":[{transform:[`3d`,`flat`]}],translate:[{translate:pe()}],"translate-x":[{"translate-x":pe()}],"translate-y":[{"translate-y":pe()}],"translate-z":[{"translate-z":pe()}],"translate-none":[`translate-none`],zoom:[{zoom:[lv,$,Q]}],accent:[{accent:M()}],appearance:[{appearance:[`none`,`auto`]}],"caret-color":[{caret:M()}],"color-scheme":[{scheme:[`normal`,`dark`,`light`,`light-dark`,`only-dark`,`only-light`]}],cursor:[{cursor:[`auto`,`default`,`pointer`,`wait`,`text`,`move`,`help`,`not-allowed`,`none`,`context-menu`,`progress`,`cell`,`crosshair`,`vertical-text`,`alias`,`copy`,`no-drop`,`grab`,`grabbing`,`all-scroll`,`col-resize`,`row-resize`,`n-resize`,`e-resize`,`s-resize`,`w-resize`,`ne-resize`,`nw-resize`,`se-resize`,`sw-resize`,`ew-resize`,`ns-resize`,`nesw-resize`,`nwse-resize`,`zoom-in`,`zoom-out`,$,Q]}],"field-sizing":[{"field-sizing":[`fixed`,`content`]}],"pointer-events":[{"pointer-events":[`auto`,`none`]}],resize:[{resize:[`none`,``,`y`,`x`]}],"scroll-behavior":[{scroll:[`auto`,`smooth`]}],"scrollbar-thumb-color":[{"scrollbar-thumb":M()}],"scrollbar-track-color":[{"scrollbar-track":M()}],"scrollbar-gutter":[{"scrollbar-gutter":[`auto`,`stable`,`both`]}],"scrollbar-w":[{scrollbar:[`auto`,`thin`,`none`]}],"scroll-m":[{"scroll-m":w()}],"scroll-mx":[{"scroll-mx":w()}],"scroll-my":[{"scroll-my":w()}],"scroll-ms":[{"scroll-ms":w()}],"scroll-me":[{"scroll-me":w()}],"scroll-mbs":[{"scroll-mbs":w()}],"scroll-mbe":[{"scroll-mbe":w()}],"scroll-mt":[{"scroll-mt":w()}],"scroll-mr":[{"scroll-mr":w()}],"scroll-mb":[{"scroll-mb":w()}],"scroll-ml":[{"scroll-ml":w()}],"scroll-p":[{"scroll-p":w()}],"scroll-px":[{"scroll-px":w()}],"scroll-py":[{"scroll-py":w()}],"scroll-ps":[{"scroll-ps":w()}],"scroll-pe":[{"scroll-pe":w()}],"scroll-pbs":[{"scroll-pbs":w()}],"scroll-pbe":[{"scroll-pbe":w()}],"scroll-pt":[{"scroll-pt":w()}],"scroll-pr":[{"scroll-pr":w()}],"scroll-pb":[{"scroll-pb":w()}],"scroll-pl":[{"scroll-pl":w()}],"snap-align":[{snap:[`start`,`end`,`center`,`align-none`]}],"snap-stop":[{snap:[`normal`,`always`]}],"snap-type":[{snap:[`none`,`x`,`y`,`both`]}],"snap-strictness":[{snap:[`mandatory`,`proximity`]}],touch:[{touch:[`auto`,`none`,`manipulation`]}],"touch-x":[{"touch-pan":[`x`,`left`,`right`]}],"touch-y":[{"touch-pan":[`y`,`up`,`down`]}],"touch-pz":[`touch-pinch-zoom`],select:[{select:[`none`,`text`,`all`,`auto`]}],"will-change":[{"will-change":[`auto`,`scroll`,`contents`,`transform`,$,Q]}],fill:[{fill:[`none`,...M()]}],"stroke-w":[{stroke:[cv,Dv,bv,xv]}],stroke:[{stroke:[`none`,...M()]}],"forced-color-adjust":[{"forced-color-adjust":[`auto`,`none`]}]},conflictingClassGroups:{"container-named":[`container-type`],overflow:[`overflow-x`,`overflow-y`],overscroll:[`overscroll-x`,`overscroll-y`],inset:[`inset-x`,`inset-y`,`inset-bs`,`inset-be`,`start`,`end`,`top`,`right`,`bottom`,`left`],"inset-x":[`right`,`left`],"inset-y":[`top`,`bottom`],flex:[`basis`,`grow`,`shrink`],gap:[`gap-x`,`gap-y`],p:[`px`,`py`,`ps`,`pe`,`pbs`,`pbe`,`pt`,`pr`,`pb`,`pl`],px:[`pr`,`pl`],py:[`pt`,`pb`],m:[`mx`,`my`,`ms`,`me`,`mbs`,`mbe`,`mt`,`mr`,`mb`,`ml`],mx:[`mr`,`ml`],my:[`mt`,`mb`],size:[`w`,`h`],"font-size":[`leading`],"fvn-normal":[`fvn-ordinal`,`fvn-slashed-zero`,`fvn-figure`,`fvn-spacing`,`fvn-fraction`],"fvn-ordinal":[`fvn-normal`],"fvn-slashed-zero":[`fvn-normal`],"fvn-figure":[`fvn-normal`],"fvn-spacing":[`fvn-normal`],"fvn-fraction":[`fvn-normal`],"line-clamp":[`display`,`overflow`],rounded:[`rounded-s`,`rounded-e`,`rounded-t`,`rounded-r`,`rounded-b`,`rounded-l`,`rounded-ss`,`rounded-se`,`rounded-ee`,`rounded-es`,`rounded-tl`,`rounded-tr`,`rounded-br`,`rounded-bl`],"rounded-s":[`rounded-ss`,`rounded-es`],"rounded-e":[`rounded-se`,`rounded-ee`],"rounded-t":[`rounded-tl`,`rounded-tr`],"rounded-r":[`rounded-tr`,`rounded-br`],"rounded-b":[`rounded-br`,`rounded-bl`],"rounded-l":[`rounded-tl`,`rounded-bl`],"border-spacing":[`border-spacing-x`,`border-spacing-y`],"border-w":[`border-w-x`,`border-w-y`,`border-w-s`,`border-w-e`,`border-w-bs`,`border-w-be`,`border-w-t`,`border-w-r`,`border-w-b`,`border-w-l`],"border-w-x":[`border-w-r`,`border-w-l`],"border-w-y":[`border-w-t`,`border-w-b`],"border-color":[`border-color-x`,`border-color-y`,`border-color-s`,`border-color-e`,`border-color-bs`,`border-color-be`,`border-color-t`,`border-color-r`,`border-color-b`,`border-color-l`],"border-color-x":[`border-color-r`,`border-color-l`],"border-color-y":[`border-color-t`,`border-color-b`],translate:[`translate-x`,`translate-y`,`translate-none`],"translate-none":[`translate`,`translate-x`,`translate-y`,`translate-z`],"scroll-m":[`scroll-mx`,`scroll-my`,`scroll-ms`,`scroll-me`,`scroll-mbs`,`scroll-mbe`,`scroll-mt`,`scroll-mr`,`scroll-mb`,`scroll-ml`],"scroll-mx":[`scroll-mr`,`scroll-ml`],"scroll-my":[`scroll-mt`,`scroll-mb`],"scroll-p":[`scroll-px`,`scroll-py`,`scroll-ps`,`scroll-pe`,`scroll-pbs`,`scroll-pbe`,`scroll-pt`,`scroll-pr`,`scroll-pb`,`scroll-pl`],"scroll-px":[`scroll-pr`,`scroll-pl`],"scroll-py":[`scroll-pt`,`scroll-pb`],touch:[`touch-x`,`touch-y`,`touch-pz`],"touch-x":[`touch`],"touch-y":[`touch`],"touch-pz":[`touch`]},conflictingClassGroupModifiers:{"font-size":[`leading`]},postfixLookupClassGroups:[`container-type`],orderSensitiveModifiers:[`*`,`**`,`after`,`backdrop`,`before`,`details-content`,`file`,`first-letter`,`first-line`,`marker`,`placeholder`,`selection`]}});function Gv(...e){return Wv(h_(e))}var Kv=v_(`inline-flex h-9 shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md border px-3 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 disabled:pointer-events-none disabled:opacity-50 dark:focus-visible:ring-zinc-500`,{variants:{variant:{primary:`border-slate-900 bg-slate-950 text-white hover:bg-slate-800 dark:border-zinc-100 dark:bg-zinc-50 dark:text-zinc-950 dark:hover:bg-zinc-200`,secondary:`border-slate-200 bg-white text-slate-900 hover:bg-slate-50 dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-100 dark:hover:bg-zinc-900`,ghost:`border-transparent bg-transparent text-slate-700 hover:bg-slate-100 dark:text-zinc-300 dark:hover:bg-zinc-900`},size:{sm:`h-8 px-2 text-xs`,md:`h-9 px-3 text-sm`,icon:`h-9 w-9 px-0`}},defaultVariants:{variant:`secondary`,size:`md`}});function qv({className:e,variant:t,size:n,...r}){return(0,z.jsx)(`button`,{className:Gv(Kv({variant:t,size:n}),e),type:`button`,...r})}function Jv({className:e,...t}){return(0,z.jsx)(`section`,{className:Gv(`rounded-lg border border-slate-200/80 bg-white/95 text-slate-950 shadow-[0_1px_2px_rgba(15,23,42,0.04)] dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-50`,e),...t})}function Yv({className:e,...t}){return(0,z.jsx)(`div`,{className:Gv(`p-4 pt-0`,e),...t})}var Xv=[`codex`,`claude`,`kiro`,`trae`,`coco`,`openai`,`anthropic`];function Zv(e){let t=e.trim().toLowerCase().replace(/_/gu,`-`);for(let e of Xv)if(t===e||t.startsWith(`${e}-`))return e;return t}function Qv(e,t){let n=t?.trim().toLowerCase()??``;return n.length>0&&n!==`status_projection`?Zv(n):Zv(e)}function $v(e){return{blockingTodoCount:e.blockingTodoCount,goalNotifications:e.goalNotifications,goals:e.goals,openUserTodoCount:e.openUserTodoCount,systemHealth:e.systemHealth,userTodos:e.userTodos,workers:e.workers}}function ey(e,t){return e.goals.find(e=>e.goalId===t)?.title??t}function ty(e){return e.activationState===`stopped`||e.state===`已停止`?`stopped`:e.state===`已完成`?`history`:e.needsYou||e.state===`等你`?`needs_you`:e.state===`推进中`||e.state===`需修复`?`running`:e.state===`安静运行`?`observing`:`scheduled`}function ny(e){let t=e;return t>=1e6?`${(t/1e6).toFixed(1)}M`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}function ry(e){return`$${e.toFixed(2)}`}function iy(e){let t=e;return t>=36e5?`${(t/36e5).toFixed(1)}h`:t>=6e4?`${(t/6e4).toFixed(1)}m`:t>=1e3?`${Math.round(t/1e3)}s`:`${t}ms`}function ay(e,t,n){return e==null?t:n(e)}function oy(e){return!!(e&&[e.tokens24h,e.tokens7d,e.costUsd24h,e.costUsd7d,e.durationMs24h,e.durationMs7d].some(e=>e!=null))}function sy(e,t){if(!oy(e))return null;let n=(e,n,r,i)=>{let a=[n==null?null:`${ny(n)} ${t.tokens}`,r==null?null:`${t.cost}: ${ry(r)}`,i==null?null:`${t.duration}: ${iy(i)}`].filter(e=>e!==null);return a.length?`${e} ${a.join(` · `)}`:null};return n(t.period7d,e.tokens7d,e.costUsd7d,e.durationMs7d)??n(t.period24h,e.tokens24h,e.costUsd24h,e.durationMs24h)}function cy({ariaLabel:e,className:t,icon:n,onChange:r,options:i,prefixLabel:a,value:o}){let s=(0,R.useId)(),c=(0,R.useRef)(null),l=(0,R.useRef)(null),u=(0,R.useRef)(new Map),[d,f]=(0,R.useState)(!1),[p,m]=(0,R.useState)(o),h=i.find(e=>e.value===o)??i[0],g=i.filter(e=>!e.disabled);(0,R.useEffect)(()=>{if(!d)return;let e=e=>{c.current?.contains(e.target)||f(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[d]),(0,R.useEffect)(()=>{d&&u.current.get(p)?.focus()},[p,d]);function _(e){m(e)}function v(e=`selected`){let t=e===`last`?g.at(-1):g[0],n=e===`selected`&&h&&!h.disabled?h:t;n&&(f(!0),_(n.value))}function y({restoreFocus:e=!1}={}){f(!1),e&&l.current?.focus()}function b(e){e.disabled||(r(e.value),y({restoreFocus:!0}))}function x(e){if(!g.length)return;let t=g.findIndex(e=>e.value===p),n=t<0?0:(t+e+g.length)%g.length;_(g[n].value)}function S(e){e.key===`ArrowDown`||e.key===`Enter`||e.key===` `?(e.preventDefault(),v(`selected`)):e.key===`ArrowUp`&&(e.preventDefault(),v(`last`))}function C(e,t){if(e.key===`ArrowDown`)e.preventDefault(),x(1);else if(e.key===`ArrowUp`)e.preventDefault(),x(-1);else if(e.key===`Home`)e.preventDefault(),g[0]&&_(g[0].value);else if(e.key===`End`){e.preventDefault();let t=g.at(-1);t&&_(t.value)}else e.key===`Enter`||e.key===` `?(e.preventDefault(),b(t)):e.key===`Escape`?(e.preventDefault(),y({restoreFocus:!0})):e.key===`Tab`&&y()}let w;return(0,z.jsxs)(`div`,{className:`personal-select${t?` ${t}`:``}`,ref:c,children:[(0,z.jsxs)(`button`,{"aria-controls":s,"aria-expanded":d,"aria-haspopup":`listbox`,"aria-label":e,className:`personal-select-trigger`,"data-value":o,onClick:()=>d?y():v(),onKeyDown:S,ref:l,role:`combobox`,type:`button`,children:[n?(0,z.jsx)(`span`,{className:`personal-select-icon`,children:n}):null,(0,z.jsxs)(`span`,{className:`personal-select-value`,children:[a?(0,z.jsx)(`small`,{children:a}):null,(0,z.jsx)(`span`,{children:h?.label??o})]}),(0,z.jsx)(qp,{"aria-hidden":!0,className:d?`is-open`:void 0,size:14})]}),d?(0,z.jsx)(`div`,{"aria-label":e,className:`personal-select-listbox`,id:s,role:`listbox`,children:i.map(e=>{let t=e.group&&e.group!==w;return w=e.group,(0,z.jsxs)(`div`,{className:`personal-select-option-wrap`,children:[t?(0,z.jsx)(`div`,{className:`personal-select-group-label`,children:e.group}):null,(0,z.jsxs)(`button`,{"aria-disabled":e.disabled||void 0,"aria-selected":e.value===o,className:`personal-select-option`,disabled:e.disabled,id:`${s}-${e.value.replace(/[^a-z0-9_-]/gi,`-`)}`,onClick:()=>b(e),onFocus:()=>m(e.value),onKeyDown:t=>C(t,e),ref:t=>{t?u.current.set(e.value,t):u.current.delete(e.value)},role:`option`,tabIndex:e.value===p?0:-1,type:`button`,children:[(0,z.jsx)(`span`,{children:e.label}),e.value===o?(0,z.jsx)(Kp,{"aria-hidden":!0,size:15}):null]})]},e.value)})}):null]})}function ly({agents:e,managerChatOpen:t,mobileNavigationOpen:n,onOpenGoalCapabilities:r,onOpenGoalDetail:i,onOpenManagerChat:a,onRefresh:o,onOpenNavigation:s,onSelectGoalTab:c,onSelectAgent:l,onReturnManagerHome:u,refreshState:d,readOnlySourceLabel:f,selectedAgentId:p,selectedGoal:m,selectedGoalTab:h}){let{locale:g,t:_}=Ji(),[v,y]=(0,R.useState)(!1),b=(0,R.useRef)(null),x=(0,R.useRef)(null);(0,R.useEffect)(()=>{if(!v)return;function e(e){x.current?.contains(e.target)||y(!1)}function t(e){e.key===`Escape`&&(y(!1),b.current?.focus())}return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t)}},[v]),(0,R.useEffect)(()=>y(!1),[m?.goalId]);function S(e){y(!1),e?.()}let C=m?sy(m.usage,{cost:_(`drawer.costShort`),duration:_(`drawer.durationShort`),period24h:_(`drawer.period24h`),period7d:_(`drawer.period7d`),tokens:_(`drawer.tokensShort`)}):null;return(0,z.jsxs)(`header`,{className:`personal-channel-header`,children:[(0,z.jsx)(`button`,{"aria-expanded":n??!1,"aria-label":_(`header.openGoalNavigation`),className:`personal-icon-button personal-mobile-menu`,onClick:s,type:`button`,children:(0,z.jsx)(_m,{size:18})}),(0,z.jsxs)(`div`,{className:`personal-channel-title`,children:[(0,z.jsx)(`h1`,{children:m?.title??_(`header.manager`)}),(0,z.jsx)(`p`,{children:m?m.loadState?_(m.loadState===`error`?`startup.goalError`:`startup.goalLoading`):`${m.agentLaneCount&&m.agentLaneCount>1?_(`header.workAgentCount`,{count:m.agentLaneCount}):m.agentLabel??m.agentId} · ${m.loadState?_(m.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(m.state,g)}${C?` · ${C}`:``} · ${m.nextSentence}`:_(`header.managerDescription`)})]}),m?(0,z.jsxs)(`nav`,{"aria-label":_(`header.goalView`),className:`personal-goal-tabs`,children:[(0,z.jsx)(`button`,{"aria-current":h===`chat`?`page`:void 0,onClick:()=>c(`chat`),type:`button`,children:_(`header.chat`)}),(0,z.jsx)(`button`,{"aria-current":h===`tasks`?`page`:void 0,onClick:()=>c(`tasks`),type:`button`,children:_(`header.tasks`)}),(0,z.jsx)(`button`,{"aria-current":h===`files`?`page`:void 0,onClick:()=>c(`files`),type:`button`,children:_(`header.files`)})]}):(0,z.jsxs)(`nav`,{"aria-label":_(`header.managerView`),className:`personal-goal-tabs`,children:[(0,z.jsx)(`button`,{"aria-current":t?void 0:`page`,onClick:u,type:`button`,children:_(`header.managerOverview`)}),(0,z.jsx)(`button`,{"aria-current":t?`page`:void 0,onClick:a,type:`button`,children:_(`header.chat`)})]}),(0,z.jsxs)(`div`,{className:`personal-channel-actions`,children:[m&&i&&r?(0,z.jsxs)(`div`,{className:`personal-goal-tools`,ref:x,children:[(0,z.jsxs)(`button`,{"aria-expanded":v,"aria-haspopup":`menu`,"aria-label":_(`header.goalSettingsDescription`),className:`personal-goal-tools-trigger`,onClick:()=>y(e=>!e),ref:b,title:_(`header.goalSettingsDescription`),type:`button`,children:[(0,z.jsx)(Lm,{"aria-hidden":!0,size:16}),(0,z.jsx)(`span`,{children:_(`header.goalSettings`)}),(0,z.jsx)(qp,{"aria-hidden":!0,size:13})]}),v?(0,z.jsxs)(`fieldset`,{"aria-label":_(`header.goalSettings`),className:`personal-goal-tools-menu`,children:[(0,z.jsxs)(`button`,{onClick:()=>S(i),type:`button`,children:[(0,z.jsx)(dm,{"aria-hidden":!0,size:17}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:_(`header.goalDetails`)}),(0,z.jsx)(`small`,{children:_(`header.goalDetailsDescription`)})]})]}),(0,z.jsxs)(`button`,{onClick:()=>S(r),type:`button`,children:[(0,z.jsx)(Lm,{"aria-hidden":!0,size:17}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:_(`header.goalCapabilities`)}),(0,z.jsx)(`small`,{children:_(`header.goalCapabilitiesDescription`)})]})]})]}):null]}):null,f?(0,z.jsxs)(`span`,{className:`personal-read-only-source`,title:_(`header.readOnlySourceDescription`,{source:f}),children:[(0,z.jsx)(am,{size:15}),f,(0,z.jsx)(`small`,{children:_(`common.readOnly`)})]}):(0,z.jsx)(cy,{ariaLabel:_(`header.selectChatRuntime`),className:`personal-agent-select`,icon:(0,z.jsx)(Up,{size:16}),onChange:l,options:e.map(e=>({disabled:!e.available,label:`${e.label}${e.available?``:` · ${_(`header.agentUnavailable`)}`}`,value:e.agentId})),prefixLabel:_(`header.chatRuntime`),value:p}),(0,z.jsxs)(`span`,{className:`personal-live-indicator`,children:[(0,z.jsx)(`i`,{}),_(`header.live`)]}),o?(0,z.jsxs)(`span`,{className:`personal-refresh-control is-${d??`idle`}`,children:[d===`loading`?(0,z.jsx)(`small`,{children:_(`header.refreshing`)}):d===`done`?(0,z.jsx)(`small`,{children:_(`header.refreshDone`)}):d===`error`?(0,z.jsx)(`small`,{children:_(`header.refreshFailed`)}):null,(0,z.jsx)(`button`,{"aria-label":_(d===`loading`?`header.refreshing`:`header.refresh`),className:`personal-icon-button`,disabled:d===`loading`,onClick:o,type:`button`,children:(0,z.jsx)(Om,{className:d===`loading`?`is-spinning`:void 0,size:17})})]}):null]})]})}function uy({attention:e,onSelect:t}){let{t:n}=Ji(),r=Zi(e.updatedAt,n);return(0,z.jsxs)(`button`,{className:`personal-timeline-row personal-attention-row`,"data-testid":`personal-browse-row`,onClick:t,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-row-icon is-attention`,children:(0,z.jsx)(Xp,{size:18})}),(0,z.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,z.jsxs)(`small`,{children:[e.goalTitle??e.goalId,` · `,n(`home.lane.needsYou`),r?` · ${n(`tasks.waitingAge`,{age:r})}`:``]}),(0,z.jsx)(`strong`,{children:e.text})]}),(0,z.jsx)(`span`,{className:`personal-priority-dot is-${e.priority??(e.blocking?`high`:`medium`)}`}),(0,z.jsx)(`span`,{className:`personal-row-status ${e.blocking?`is-blocking`:`is-pending`}`,children:e.blocking?n(`tasks.blocked`):n(`tasks.pending`)}),(0,z.jsx)(Jp,{size:17})]})}var dy=/(`[^`\n]+`)|(\*\*[^*\n]+(\*[^*\n]*)?\*\*)|(\[[^\]\n]{1,120}\]\(https?:\/\/[^)\s]+\))/g;function fy(e,t){let n=[],r=0,i=0;for(let a of e.matchAll(dy)){let o=a.index??0;o>r&&n.push(e.slice(r,o));let s=a[0],c=`${t}-i${i++}`;if(s.startsWith("`"))n.push((0,z.jsx)(`code`,{className:`personal-md-code`,children:s.slice(1,-1)},c));else if(s.startsWith(`**`))n.push((0,z.jsx)(`strong`,{children:s.slice(2,-2)},c));else{let e=s.indexOf(`](`),t=s.slice(1,e),r=s.slice(e+2,-1);n.push((0,z.jsx)(`a`,{className:`personal-md-link`,href:r,rel:`noreferrer`,target:`_blank`,children:t},c))}r=o+s.length}return r{r.length>0&&(n.push({type:`paragraph`,lines:r}),r=[])},a=0;for(;a{let n=`b${t}`;if(e.type===`code`)return(0,z.jsx)(`pre`,{className:`personal-md-pre`,children:(0,z.jsx)(`code`,{children:e.text})},n);if(e.type===`heading`)return(0,z.jsx)(`p`,{className:`personal-md-heading is-h${e.level}`,children:fy(e.text,n)},n);if(e.type===`list`){let t=e.items.map((e,t)=>(0,z.jsx)(`li`,{children:fy(e,`${n}-${t}`)},`${n}-${t}`));return e.ordered?(0,z.jsx)(`ol`,{className:`personal-md-list`,children:t},n):(0,z.jsx)(`ul`,{className:`personal-md-list`,children:t},n)}return(0,z.jsx)(`p`,{children:e.lines.map((e,t)=>(0,z.jsxs)(R.Fragment,{children:[t>0?(0,z.jsx)(`br`,{}):null,fy(e,`${n}-${t}`)]},`${n}-${t}`))},n)})})}function _y({onSelect:e,output:t}){let{t:n}=Ji(),r=t.kind===`report`?cm:sm;return(0,z.jsxs)(`button`,{className:`personal-timeline-row personal-output-row`,"data-output-kind":t.kind,"data-testid":`personal-browse-row`,onClick:e,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-row-icon is-output`,children:(0,z.jsx)(r,{size:18})}),(0,z.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,z.jsxs)(`small`,{children:[t.goalTitle??t.goalId,` · `,t.agentLabel??`LoopX`]}),(0,z.jsx)(`strong`,{children:t.title}),t.summary?(0,z.jsx)(`span`,{children:t.summary}):null,t.report?(0,z.jsxs)(`small`,{children:[n(`files.reportDelta`,{added:t.report.addedCount,changed:t.report.changedCount}),` · `,n(`files.verifiedReport`)]}):null]}),t.createdAt?(0,z.jsx)(`time`,{children:t.createdAt}):null,(0,z.jsx)(Jp,{size:17})]})}var vy={completed:`runs.completed`,failed:`runs.failed`,interrupted:`runs.interrupted`,queued:`runs.queued`,running:`runs.running`,waiting:`runs.waiting`};function yy({onSelect:e,run:t}){let{t:n}=Ji(),r=t.totalSteps>0?Math.min(100,t.completedSteps/t.totalSteps*100):0;return(0,z.jsxs)(`button`,{"aria-label":`${n(`tasks.viewExecution`)}:${t.title}`,className:`personal-timeline-row personal-run-row`,"data-testid":`personal-browse-row`,onClick:e,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-row-icon is-run`,children:(0,z.jsx)(Up,{size:18})}),(0,z.jsxs)(`span`,{className:`personal-run-identity`,children:[(0,z.jsx)(`small`,{children:t.goalTitle}),(0,z.jsx)(`strong`,{children:t.agentLabel})]}),(0,z.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,z.jsx)(`strong`,{children:t.title}),(0,z.jsx)(`small`,{children:t.latestActivity})]}),(0,z.jsxs)(`span`,{className:`personal-run-progress`,"aria-label":`${t.completedSteps}/${t.totalSteps}`,children:[(0,z.jsxs)(`small`,{children:[t.completedSteps,`/`,t.totalSteps]}),(0,z.jsx)(`i`,{children:(0,z.jsx)(`b`,{style:{width:`${r}%`}})})]}),(0,z.jsxs)(`span`,{className:`personal-row-status is-${t.status}`,children:[t.status===`running`?(0,z.jsx)(hm,{className:`personal-spin`,size:14}):null,n(vy[t.status])]}),t.sessionId?(0,z.jsx)(`span`,{className:`personal-run-open-label`,children:n(`tasks.viewExecution`)}):null,(0,z.jsx)(Jp,{size:17})]})}function by({onSelect:e,schedule:t}){let{t:n}=Ji(),r=t.scheduleKind===`heartbeat`;return(0,z.jsxs)(`button`,{"aria-label":`${r?`Heartbeat`:n(`tasks.scheduled`)}:${t.label};${t.status??`active`}`,className:`personal-schedule-row`,onClick:e,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-schedule-icon`,children:r?(0,z.jsx)(Dm,{size:17}):(0,z.jsx)(Gp,{size:17})}),(0,z.jsxs)(`span`,{className:`personal-schedule-copy`,children:[(0,z.jsx)(`small`,{children:n(r?`schedule.heartbeat`:`schedule.monitor`)}),(0,z.jsx)(`strong`,{children:t.label}),(0,z.jsx)(`p`,{children:t.schedule??n(`schedule.summary`)})]}),(0,z.jsx)(`span`,{className:`personal-schedule-status is-${t.status??`active`}`,children:t.status===`paused`?n(`schedule.paused`):n(`schedule.active`)}),(0,z.jsx)(Jp,{size:16})]})}function xy({items:e,onSelect:t,selectedGoal:n}){let{t:r}=Ji();if(e.length===0)return(0,z.jsxs)(`div`,{className:`personal-timeline-empty`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(Rm,{size:20})}),(0,z.jsx)(`strong`,{children:r(n?`timeline.emptyGoal`:`timeline.emptyWorkspace`)}),(0,z.jsx)(`p`,{children:r(n?`timeline.emptyGoalDescription`:`timeline.emptyWorkspaceDescription`)})]});let i=[...e].reverse().find(e=>e.kind===`message`&&e.message.role!==`user`||e.kind===`proposal`&&[`applied`,`stale`,`error`,`gated`].includes(e.proposal.status)||e.kind===`run`&&e.run.status===`completed`),a=i?.kind===`message`?`${i.message.agentLabel??r(`header.manager`)}:${i.message.pending?r(`timeline.pending`):i.message.text}`:i?.kind===`proposal`?`${i.proposal.title}:${i.proposal.status}`:i?.kind===`run`?r(`timeline.runCompleted`,{run:i.run.title}):``,o=e.filter(e=>e.kind===`proposal`&&e.proposal.status===`gated`),s=e.filter(e=>e.kind!==`proposal`),c=e.filter(e=>e.kind===`proposal`&&e.proposal.status!==`gated`);function l(e){return e.kind===`attention`?(0,z.jsx)(uy,{attention:e.attention,onSelect:()=>t({item:e.attention,kind:`attention`})},e.id):e.kind===`run`?(0,z.jsx)(yy,{onSelect:()=>t({item:e.run,kind:`run`}),run:e.run},e.id):e.kind===`output`?(0,z.jsx)(_y,{onSelect:()=>t({item:e.output,kind:`output`}),output:e.output},e.id):e.kind===`schedule`?(0,z.jsx)(by,{onSelect:()=>t({item:e.schedule,kind:`schedule`}),schedule:e.schedule},e.id):e.kind===`proposal`?(0,z.jsxs)(`button`,{className:`personal-proposal-row is-${e.proposal.status}`,onClick:()=>t({item:e.proposal,kind:`proposal`}),type:`button`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(Rm,{size:17})}),(0,z.jsxs)(`span`,{children:[(0,z.jsxs)(`small`,{children:[e.proposal.actionKind,` · `,e.proposal.status]}),(0,z.jsx)(`strong`,{children:e.proposal.title}),(0,z.jsx)(`p`,{children:e.proposal.impact})]}),(0,z.jsx)(`b`,{children:e.proposal.status===`gated`?r(`timeline.review`):e.proposal.primaryLabel??r(`timeline.reviewAndConfirm`)})]},e.id):(0,z.jsxs)(`article`,{className:`personal-message is-${e.message.role}`,children:[e.message.role===`user`?null:(0,z.jsx)(`span`,{className:`personal-message-avatar`,children:(0,z.jsx)(Up,{size:17})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:e.message.role===`user`?r(`common.you`):e.message.agentLabel??r(`header.manager`)}),e.message.time?(0,z.jsx)(`time`,{children:e.message.time}):null]}),e.message.attachments?.length?(0,z.jsx)(`div`,{className:`personal-message-images`,children:e.message.attachments.map(e=>(0,z.jsx)(`img`,{alt:e.name,src:e.dataUrl},e.id))}):null,e.message.role===`user`?(0,z.jsx)(`p`,{children:e.message.text}):(0,z.jsx)(gy,{text:e.message.text}),e.message.pending?(0,z.jsx)(`span`,{className:`personal-message-pending`,children:r(`timeline.pending`)}):null]})]},e.id)}return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{"aria-atomic":`true`,"aria-live":`polite`,className:`personal-live-region`,role:`status`,children:a}),(0,z.jsxs)(`div`,{className:`personal-channel-timeline`,children:[s.map(l),o.length?(0,z.jsxs)(`details`,{className:`personal-gated-summary`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(Rm,{size:16})}),(0,z.jsx)(`strong`,{children:r(`timeline.waitingConfirmation`)}),(0,z.jsx)(`small`,{children:r(`timeline.gateHistory`,{count:o.length})})]}),(0,z.jsx)(`div`,{children:o.map(l)})]}):null,c.map(l)]})]})}function Sy(e){return e.replace(/\s+/gu,` `).trim()}function Cy(e,t){let n=RegExp(`(?:不要|不需要|无需|禁止|别|暂不|do not\\b|don't\\b|without\\b).{0,10}(?:${t.source})`,`iu`),r=RegExp(`(?:${t.source}).{0,10}(?:不要|不需要|无需|禁止|关闭)`,`iu`),i=RegExp(`disable\\b.{0,10}(?:${t.source})|(?:turn|switch|set)\\b.{0,10}(?:${t.source}).{0,10}\\boff\\b|(?:${t.source})\\s+(?:is\\s+)?disabled\\b`,`iu`);return n.test(e)||r.test(e)||i.test(e)}function wy(e){return/(我现在该做什么|下一步|哪些\s*Goal\s*在等我|需要我|谁在等我|Agent\s*在做什么|当前进度|总结(?:今天)?进展)/iu.test(e)}function Ty(e){let t=/(怎么|如何|为什么|给.*建议|分析一下|解释|只读)/u.test(e),n=/(解决一下|修复一下|处理一下|执行一下|改一下|跑(?:一下)?测试|rebase|push|提交|推送)/iu.test(e);return!t&&n&&/(帮我|请|给我|直接|现在|开始|bytedcli|codebase|git|rebase|push|提交|推送)/iu.test(e)}function Ey(e){return Sy(e).toLowerCase().match(/(?:^|[\s,,;;:((:]|到|至)(?todo_done:todo_[a-z0-9_-]{3,64}|pr_merged:(?:(?:[a-z0-9_.-]{1,80})\/(?:[a-z0-9_.-]{1,100}))?#[1-9][0-9]{0,8}|capacity_available:[a-z][a-z0-9_:-]{0,63})(?=$|[\s,,。;;))])/iu)?.groups?.condition??null}function Dy(e,t){let n=Sy(e),r=[],i=t.agents.find(e=>{let t=n.toLowerCase();return t.includes(e.agentId.toLowerCase())||t.includes(e.label.toLowerCase())}),a=t.todos.find(e=>n.includes(e.todoId)||n.includes(e.text)),o=/(刚刚|已经|已)(?:经)?\s*(新增|创建|添加)(?:的)?\s*(todo|待办|任务)/iu.test(n),s=!!t.goalId&&!Cy(n,/heartbeat|心跳/iu)&&/(heartbeat|心跳|每天推进|持续推进|daily progress)/iu.test(n);if(!t.goalId&&!Cy(n,/goal|目标/iu)&&/(创建|新建|设置|create|start|set up).{0,24}(goal|目标)/iu.test(n)&&r.push({actionKind:`goal.create`,confidence:.97,normalizedParameters:{heartbeat_enabled:!Cy(n,/heartbeat|心跳/iu)&&/(heartbeat|心跳|每天推进|持续推进|daily progress)/iu.test(n)}}),t.goalId&&s&&r.push({actionKind:`heartbeat.bind`,confidence:.96,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&!s&&!Cy(n,/定时|监控|监测|持续观察|scheduled check|monitor/iu)&&/(定时|监控|监测|每.{0,8}(分钟|小时|天)|持续观察|scheduled check|monitor|every.{0,12}(minute|hour|day)|daily)/iu.test(n)&&r.push({actionKind:`monitor.create`,confidence:.94,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&i&&!Cy(n,/绑定|负责|接管|管理/iu)&&/((让|交给).{0,20}(管理|负责|接管).{0,8}(goal|目标)|(绑定).{0,12}(goal|目标)|(goal|目标).{0,12}(交给|绑定|负责|接管))/iu.test(n)&&r.push({actionKind:`agent.bind`,confidence:.96,normalizedParameters:{agent_id:i.agentId,goal_id:t.goalId}}),t.goalId&&!o&&!Cy(n,RegExp(`todo|待办|任务`,`iu`))&&/(创建|新建|新增|添加|加一个|记一个).{0,16}(todo|待办|任务)|(todo|待办|任务).{0,12}(创建|新建|新增|添加)|(?:create|add)(?:\s+(?:a|an|new))?\s+(?:todo|task)|(?:todo|task).{0,12}(?:create|add)/iu.test(n)&&r.push({actionKind:`todo.create`,confidence:.94,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&Ty(n)&&r.push({actionKind:`todo.create`,confidence:.9,normalizedParameters:{goal_id:t.goalId,start_execution:!0}}),t.goalId&&a){let e=!Cy(n,/完成|做完|关闭/u)&&/完成|做完|关闭/u.test(n)?`complete`:!Cy(n,/阻塞|卡住/u)&&/阻塞|卡住/u.test(n)?`block`:!Cy(n,/暂缓|稍后|推迟/u)&&/暂缓|稍后|推迟/u.test(n)?`defer`:i&&!Cy(n,/交给|分配给|改派/u)&&/交给|分配给|改派/u.test(n)?`reassign`:null;if(e){let i=e===`defer`?Ey(n):null;if(e===`defer`&&!i)return{actionKind:`todo.update`,confidence:.97,missingFields:[`resume_when`],normalizedParameters:{goal_id:t.goalId,operation:e,todo_id:a.todoId},route:`clarify`};r.push({actionKind:`todo.update`,confidence:.97,normalizedParameters:{goal_id:t.goalId,operation:e,...i?{resume_when:i}:{},todo_id:a.todoId}})}}let c=[...new Map(r.map(e=>[e.actionKind,e])).values()];return c.length>1?{actionKind:null,confidence:.4,missingFields:[`single_intent`],normalizedParameters:{},route:`clarify`}:c.length===1?{...c[0],missingFields:[],route:`typed_action`}:!t.goalId&&wy(n)?{actionKind:null,confidence:.98,missingFields:[],normalizedParameters:{},route:`projection`}:{actionKind:null,confidence:.75,missingFields:[],normalizedParameters:{},route:`agent_chat`}}var Oy=[`a[href]`,`button:not([disabled])`,`textarea:not([disabled])`,`select:not([disabled])`,`input:not([disabled])`,`[tabindex]:not([tabindex='-1'])`].join(`,`),ky=[{key:`drawer.taskBlock`,operation:`block`},{key:`drawer.taskSuccessor`,operation:`successor_create`}],Ay=[{key:`drawer.decisionReject`,resolution:`reject`},{key:`drawer.decisionDefer`,resolution:`defer`}],jy=Array.from({length:32},(e,t)=>t+1),My=/^[a-z][a-z0-9_.-]{0,63}$/u;function Ny(e){let t=String(e??``).trim().toLowerCase();return My.test(t)?t:null}function Py(e,t){return e.enabled===t.enabled&&e.maxChildren===t.maxChildren&&[...e.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)===[...t.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)}function Fy({agents:e,callbacks:t,goalNotifications:n=[],goals:r=[],inspectorExpanded:i=!1,larkConnections:a=[],onClose:o,onToggleInspectorSize:s,readOnly:c=!1,runs:l=[],selection:u}){let{locale:d,t:f}=Ji(),[p,m]=(0,R.useState)(``),[h,g]=(0,R.useState)(!1),[_,v]=(0,R.useState)(`idle`),[y,b]=(0,R.useState)(`record`),[x,S]=(0,R.useState)([]),[C,w]=(0,R.useState)(null),[T,E]=(0,R.useState)(2),[D,O]=(0,R.useState)(`idle`),[k,ee]=(0,R.useState)(null),[A,j]=(0,R.useState)(null),te=(0,R.useRef)(null),ne=(0,R.useRef)(null),[re,M]=(0,R.useState)(e.find(e=>e.available)?.agentId??`codex`),[N,ie]=(0,R.useState)(``),ae=(0,R.useRef)(null),oe=(0,R.useRef)(null),P=(0,R.useRef)(null),F=(0,R.useRef)(null),I=u.kind===`run`?`run:${u.item.runId}`:u.kind===`proposal`?`proposal:${u.item.previewId}`:u.kind===`todo`?`todo:${u.item.todoId}`:u.kind===`attention`?`attention:${u.item.todoId}`:u.kind===`output`?`output:${u.item.outputId}`:u.kind===`schedule`?`schedule:${u.item.scheduleId}`:`goal:${u.item.goalId}`;(0,R.useEffect)(()=>{v(`idle`),g(!1),b(`record`),ie(``);let e=u.kind===`goal`?u.item.subagentExecution:void 0;S(e?.allowedDomains??[]),E(e?.maxChildren?Math.min(e.maxChildren,32):2),w(null),O(`idle`),ee(null),j(null),te.current=e??null,ne.current=null},[I]);let se=u.kind===`goal`?u.item.subagentExecution:void 0;(0,R.useEffect)(()=>{let e=te.current,t=se?!e||!Py(e,se):e!==null;if(te.current=se??null,!A){t&&se&&(S(se.allowedDomains),E(se.maxChildren||2),w(null),O(`idle`),ee(null));return}let n=ne.current;(!se||Py(A,se)||n&&!Py(n,se))&&(se&&(S(se.allowedDomains),E(se.maxChildren||2)),ne.current=null,j(null))},[se,A]),(0,R.useEffect)(()=>{let e=document.activeElement;e instanceof HTMLElement&&!oe.current?.contains(e)&&(P.current=e);let t=window.requestAnimationFrame(()=>F.current?.focus());return()=>window.cancelAnimationFrame(t)},[I]);let ce=(0,R.useCallback)(()=>{let e=P.current;o(),window.requestAnimationFrame(()=>e?.focus())},[o]);(0,R.useEffect)(()=>{function e(e){if(e.key===`Escape`){e.preventDefault(),ce();return}if(e.key===`Tab`&&u.kind!==`todo`){let t=Array.from(oe.current?.querySelectorAll(Oy)??[]).filter(e=>!e.hasAttribute(`disabled`)&&e.getAttribute(`aria-hidden`)!==`true`);if(t.length===0)return;let n=t[0],r=t[t.length-1];e.shiftKey&&document.activeElement===n?(e.preventDefault(),r.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n.focus())}}return document.addEventListener(`keydown`,e),()=>{document.removeEventListener(`keydown`,e)}},[ce,u.kind]);let le=u.kind===`attention`?f(`drawer.titleAttention`):u.kind===`todo`?f(`drawer.taskDetails`):u.kind===`run`?f(`drawer.runDetails`):u.kind===`output`?f(`drawer.titleOutput`):u.kind===`proposal`?f(u.item.status===`applied`?`drawer.titleProposalApplied`:`drawer.titleProposalConfirm`):u.kind===`schedule`?u.item.scheduleKind===`heartbeat`?`Heartbeat`:f(`drawer.titleSchedule`):f(`drawer.goalDetails`),ue=u.kind===`proposal`?u.item.goalId??`manager`:u.item.goalId,de=u.kind===`attention`?u.item.goalTitle??f(`drawer.currentGoal`):u.kind===`todo`||u.kind===`run`?u.item.goalTitle:u.kind===`output`?u.item.goalTitle??f(`drawer.currentGoal`):u.kind===`goal`?u.item.title:u.kind===`schedule`?f(`drawer.goalAutoRun`):u.item.goalId?f(`drawer.goalChanges`):f(`drawer.managerChanges`),fe=u.kind===`goal`?l.find(e=>e.goalId===u.item.goalId&&!!e.sessionId)??l.find(e=>e.goalId===u.item.goalId):null,pe=u.kind===`run`&&(u.item.completedSteps>0||!!u.item.latestActivity||!!u.item.outputs?.length),me=u.kind===`attention`?Zi(u.item.updatedAt,f):null,he=Ey(N);async function ge(){u.kind!==`run`||!p.trim()||(await t.onCorrectRun?.(u.item,p.trim()),m(``))}async function _e(e,n,r,i){if(n===`successor_create`){await t.onPreviewAction?.({actionKind:`todo.create`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-successor-${e.todoId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,text:f(`drawer.taskSuccessorText`,{task:e.text})},summary:f(`drawer.taskSuccessorSummary`,{task:e.text})});return}await t.onPreviewAction?.({actionKind:`todo.update`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-${e.todoId}-${n}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:e.claimedBy??re,goal_id:e.goalId,operation:n,...n===`block`?{note:f(`drawer.taskSuccessorNote`)}:{},...n===`defer`&&i?{resume_when:i}:{},todo_id:e.todoId},summary:`${r}:${e.text}`})}async function ve(e,n,r){await t.onPreviewAction?.({actionKind:`gate.resolve`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-decision-${e.todoId}-${n}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,decision:n,todo_id:e.todoId},summary:`${r}:${e.text}`})}let ye=u.kind===`goal`?A??u.item.subagentExecution??{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0}:{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0},be=D===`previewing`||D===`applying`,xe=(()=>{if(u.kind!==`goal`)return[];let e=new Map;for(let t of ye.allowedDomains){let n=Ny(t);n&&e.set(n,{matchingTodoCount:0,value:n})}if(ye.domainCandidates)for(let t of ye.domainCandidates){let n=Ny(t.domain);if(!n)continue;let r=e.get(n);e.set(n,{matchingTodoCount:(r?.matchingTodoCount??0)+t.matchingTodoCount,value:n})}else for(let t of u.item.agentTodos){if(t.done||t.taskClass!==`advancement_task`)continue;let n=Ny(t.taskDomain);if(!n)continue;let r=e.get(n);e.set(n,{matchingTodoCount:(r?.matchingTodoCount??0)+1,value:n})}return[...e.values()]})();function Se(){S(ye.allowedDomains),E(ye.maxChildren||2),w(null),O(`idle`),ee(null)}function Ce(){let e=[...new Set(x.map(e=>Ny(e)))];return e.every(e=>!!e)?e:null}function we(e,t){S(n=>t?[...n,e].filter((e,t,n)=>n.indexOf(e)===t):n.filter(t=>t!==e)),ee(null),O(`idle`),w(null)}async function Te(e){if(u.kind!==`goal`||!t.onPreviewGoalSubagentConfiguration)return;let n=e?Ce():[];if(e&&!n){O(`error`),w(f(`drawer.subagentDomainInvalid`)),ee(null);return}let r={allowedDomains:n??[],enabled:e,goalId:u.item.goalId,maxChildren:e?T:0};O(`previewing`),w(f(`drawer.subagentPreviewing`)),ee(null);try{let e=await t.onPreviewGoalSubagentConfiguration(r);if(!e.changed){ne.current=se??null,j({...e.configuration,domainCandidates:ye.domainCandidates}),S(e.configuration.allowedDomains),E(e.configuration.maxChildren||2),O(`success`),w(f(`drawer.subagentNoChange`));return}ee({...r,changed:e.changed,previewId:e.previewId}),O(`ready`),w(f(`drawer.subagentPreviewReady`))}catch(e){O(`error`),w(e instanceof Error?e.message:f(`drawer.subagentPreviewFailed`))}}async function Ee(){if(!(!k||!t.onApplyGoalSubagentConfiguration)){O(`applying`),w(f(`drawer.subagentApplying`));try{let e=await t.onApplyGoalSubagentConfiguration({allowedDomains:k.allowedDomains,enabled:k.enabled,goalId:k.goalId,maxChildren:k.maxChildren,previewId:k.previewId});ne.current=se??null,j({...e,domainCandidates:ye.domainCandidates}),S(e.allowedDomains),E(e.maxChildren||2),O(`success`),w(f(`drawer.subagentApplied`)),ee(null);try{await t.onRefresh?.()}catch{O(`warning`),w(f(`drawer.subagentAppliedRefreshFailed`))}}catch(e){O(`error`),w(e instanceof Error?e.message:f(`drawer.subagentApplyFailed`))}}}return(0,z.jsxs)(`div`,{"aria-labelledby":`personal-drawer-title`,"aria-modal":u.kind===`todo`?void 0:`true`,className:`personal-context-drawer`,"data-context-kind":u.kind,ref:oe,role:`dialog`,children:[(0,z.jsxs)(`header`,{className:`personal-drawer-header${u.kind===`todo`?` is-task-inspector`:``}`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h2`,{id:`personal-drawer-title`,ref:F,tabIndex:-1,children:le}),(0,z.jsx)(`p`,{children:de})]}),(0,z.jsxs)(`div`,{className:`personal-drawer-header-actions`,children:[u.kind===`todo`&&s?(0,z.jsx)(`button`,{"aria-label":f(i?`drawer.inspectorHalf`:`drawer.inspectorFull`),className:`personal-icon-button personal-inspector-size`,onClick:s,title:f(i?`drawer.inspectorHalfView`:`drawer.inspectorFullView`),type:`button`,children:i?(0,z.jsx)(bm,{size:17}):(0,z.jsx)(gm,{size:17})}):null,(0,z.jsxs)(`button`,{"aria-label":f(`drawer.closeDetail`,{context:de}),className:`personal-icon-button personal-drawer-close`,onClick:ce,ref:ae,type:`button`,children:[(0,z.jsx)(Lp,{className:`personal-mobile-back`,size:18}),(0,z.jsx)(Gm,{className:`personal-desktop-close`,size:18})]})]})]}),(0,z.jsxs)(`div`,{className:`personal-drawer-body`,children:[u.kind===`attention`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card is-attention`,children:[(0,z.jsx)(`small`,{children:u.item.blocking?f(`drawer.attentionBlocking`):f(`drawer.attentionWaiting`)}),(0,z.jsx)(`h3`,{children:u.item.text}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:u.item.goalTitle??u.item.goalId})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.priority`)}),(0,z.jsx)(`dd`,{children:u.item.priority??`medium`})]}),me?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`common.waiting`)}),(0,z.jsx)(`dd`,{children:f(`tasks.waitingAge`,{age:me})})]}):null,(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.reason`)}),(0,z.jsx)(`dd`,{children:u.item.explanation??f(`drawer.decisionDefaultReason`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.evidence`)}),(0,z.jsx)(`dd`,{children:u.item.evidence??f(`drawer.decisionDefaultEvidence`)})]})]})]}),c?null:(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void ve(u.item,`approve`,f(`common.confirm`)),type:`button`,children:[(0,z.jsx)(Kp,{size:17}),f(`drawer.decisionReview`)]}),(0,z.jsxs)(`details`,{className:`personal-compact-menu`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(rm,{size:17}),f(`drawer.decisionMore`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`button`,{onClick:()=>void t.onExplainDecision?.(u.item),type:`button`,children:[(0,z.jsx)(vm,{size:16}),f(`drawer.explainDecision`)]}),Ay.map(e=>(0,z.jsx)(`button`,{onClick:()=>void ve(u.item,e.resolution,f(e.key)),type:`button`,children:f(e.key)},e.resolution))]})]})]})]}):null,u.kind===`todo`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-task-inspector-summary`,children:[(0,z.jsxs)(`div`,{className:`personal-task-inspector-status`,children:[(0,z.jsxs)(`span`,{className:u.item.done?`is-done`:u.item.status===`blocked`?`is-blocked`:`is-open`,children:[(0,z.jsx)(`i`,{}),u.item.done?f(`drawer.taskStatusCompleted`):u.item.status===`deferred`?f(`drawer.taskStatusDeferred`):u.item.status===`blocked`?f(`drawer.taskStatusBlocked`):f(`drawer.taskStatusOpen`)]}),u.item.priority?(0,z.jsx)(`span`,{children:u.item.priority}):null,(0,z.jsx)(`span`,{children:u.item.taskClass===`advancement_task`?f(`drawer.taskAdvancement`):u.item.taskClass??f(`drawer.taskOrdinary`)})]}),(0,z.jsx)(`h3`,{children:u.item.text})]}),(0,z.jsxs)(`section`,{"aria-label":f(`drawer.taskInfo`),className:`personal-task-inspector-fields`,children:[(0,z.jsx)(`h4`,{children:f(`drawer.taskInfo`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:u.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`common.owner`)}),(0,z.jsx)(`dd`,{children:u.item.ownerLabel??u.item.claimedBy??f(`drawer.notAssigned`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`common.status`)}),(0,z.jsx)(`dd`,{children:u.item.done?f(`drawer.taskStatusCompleted`):u.item.status===`deferred`?f(`drawer.taskStatusDeferred`):u.item.status===`blocked`?f(`drawer.taskStatusBlocked`):f(`drawer.taskStatusOpen`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.priority`)}),(0,z.jsx)(`dd`,{children:u.item.priority??f(`drawer.notSet`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.dependencies`)}),(0,z.jsx)(`dd`,{children:u.item.dependencies?.join(` · `)||f(`common.none`)})]}),u.item.status===`deferred`?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.resumeWhen`)}),(0,z.jsx)(`dd`,{children:u.item.resumeWhen||f(`drawer.notSet`)})]}):null,(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.nextTransition`)}),(0,z.jsx)(`dd`,{children:u.item.nextTransition??(u.item.done?f(`drawer.taskNextCompleted`):u.item.status===`deferred`?f(`drawer.taskNextDeferred`):f(`drawer.taskNextOpen`))})]})]})]}),!c&&!u.item.done?(0,z.jsxs)(`div`,{className:`personal-task-inspector-actions`,"aria-label":f(`drawer.taskActions`),children:[(0,z.jsxs)(`details`,{className:`personal-task-management`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(rm,{size:16}),f(`drawer.taskManage`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:f(`drawer.reassign`)}),(0,z.jsxs)(`label`,{className:`personal-inline-agent-select`,children:[f(`drawer.reassign`),(0,z.jsx)(`select`,{"aria-label":f(`drawer.reassign`),onChange:e=>M(e.target.value),value:re,children:e.filter(e=>e.available).map(e=>(0,z.jsx)(`option`,{value:e.agentId,children:e.label},e.agentId))}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void t.onPreviewAction?.({actionKind:`todo.update`,context:{goal_id:u.item.goalId,kind:`todo`,todo_id:u.item.todoId},idempotencyKey:`workspace-todo-${u.item.todoId}-reassign-${re}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:re,goal_id:u.item.goalId,operation:`reassign`,todo_id:u.item.todoId},summary:f(`drawer.reassignSummary`,{task:u.item.text})}),type:`button`,children:f(`timeline.review`)})]}),(0,z.jsx)(`strong`,{children:f(`drawer.taskDeferUntil`)}),(0,z.jsxs)(`label`,{className:`personal-inline-agent-select personal-inline-resume-when`,children:[f(`drawer.taskDeferUntil`),(0,z.jsx)(`input`,{"aria-label":f(`drawer.taskDeferCondition`),"aria-invalid":!!N.trim()&&!he,onChange:e=>ie(e.target.value),placeholder:f(`drawer.taskDeferPlaceholder`),value:N}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:!he,onClick:()=>void _e(u.item,`defer`,f(`drawer.taskDefer`),he??void 0),type:`button`,children:f(`drawer.taskDeferReview`)}),(0,z.jsx)(`small`,{children:N.trim()&&!he?f(`drawer.taskDeferInvalid`):f(`drawer.taskDeferSupported`)})]}),(0,z.jsx)(`div`,{className:`personal-task-management-secondary`,children:ky.map(e=>(0,z.jsx)(`button`,{onClick:()=>void _e(u.item,e.operation,f(e.key)),type:`button`,children:f(e.key)},e.operation))})]})]}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void _e(u.item,`complete`,f(`drawer.taskComplete`)),type:`button`,children:[(0,z.jsx)(Kp,{size:17}),f(`drawer.taskComplete`)]})]}):null,u.item.done?(0,z.jsxs)(`div`,{className:`personal-task-completed-note`,children:[(0,z.jsx)(Kp,{size:16}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:f(`drawer.taskCompletedTitle`)}),(0,z.jsx)(`small`,{children:f(`drawer.taskCompletedNote`)})]})]}):null]}):null,u.kind===`goal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsx)(`small`,{children:Yi(u.item.state,d)}),(0,z.jsx)(`h3`,{children:u.item.title}),(0,z.jsx)(`p`,{children:u.item.agentSentence}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.tokens`)}),(0,z.jsxs)(`dd`,{children:[ay(u.item.usage?.tokens24h,f(`drawer.usageNotMeasured`),ny),` / `,ay(u.item.usage?.tokens7d,f(`drawer.usageNotMeasured`),ny)]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.cost`)}),(0,z.jsxs)(`dd`,{children:[ay(u.item.usage?.costUsd24h,f(`drawer.usageNotMeasured`),ry),` / `,ay(u.item.usage?.costUsd7d,f(`drawer.usageNotMeasured`),ry)]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.duration`)}),(0,z.jsxs)(`dd`,{children:[ay(u.item.usage?.durationMs24h,f(`drawer.usageNotMeasured`),iy),` / `,ay(u.item.usage?.durationMs7d,f(`drawer.usageNotMeasured`),iy)]})]})]})]}),(()=>{let e=n.find(e=>e.goalId===u.item.goalId),r=a.find(e=>e.goal_id===u.item.goalId);return(0,z.jsxs)(z.Fragment,{children:[u.item.repository?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-repository`,children:[(0,z.jsxs)(`div`,{className:`personal-detail-card-title`,children:[(0,z.jsx)(`small`,{children:f(`drawer.repository`)}),(0,z.jsx)(`em`,{children:f(`common.readOnly`)})]}),(0,z.jsxs)(`h3`,{children:[(0,z.jsx)(lm,{size:16}),u.item.repository.label]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.branch`)}),(0,z.jsx)(`dd`,{children:u.item.repository.branch||`detached`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Role`}),(0,z.jsx)(`dd`,{children:f(`drawer.repositoryRole`)})]})]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>{let e=navigator.clipboard?.writeText(u.item.repository?.identity??``);if(!e){v(`error`);return}e.then(()=>v(`copied`)).catch(()=>v(`error`))},type:`button`,children:[(0,z.jsx)(em,{size:15}),f(_===`copied`?`drawer.copyRepositoryDone`:`drawer.copyRepository`)]}),_===`error`?(0,z.jsx)(`p`,{className:`personal-copy-feedback is-error`,role:`status`,children:f(`drawer.copyRepositoryError`)}):_===`copied`?(0,z.jsx)(`p`,{className:`personal-copy-feedback`,role:`status`,children:f(`drawer.copyRepositorySuccess`)}):null]}):null,c?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-notification`,children:[(0,z.jsx)(`small`,{children:f(`drawer.larkConnection`)}),(0,z.jsx)(`h3`,{children:f(`drawer.remoteDetailsUnavailable`)}),(0,z.jsx)(`p`,{children:f(`drawer.remoteDetailsDescription`)})]}):(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-notification`,children:[(0,z.jsx)(`small`,{children:f(`drawer.larkConnection`)}),r?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`h3`,{children:[r.app_label,(0,z.jsx)(`span`,{className:`personal-connection-status`,children:f(`drawer.connected`)})]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.group`)}),(0,z.jsx)(`dd`,{children:r.chat_name})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.topic`)}),(0,z.jsxs)(`dd`,{children:[`# `,r.topic_name]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.trigger`)}),(0,z.jsx)(`dd`,{children:r.incoming_mode===`mentions`?f(`lark.someoneMentions`):f(`lark.allMessages`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.replyMode`)}),(0,z.jsx)(`dd`,{children:f(`lark.topicReply`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.autoNotify`)}),(0,z.jsx)(`dd`,{children:e?.humanGateAutoNotifyEnabled?f(`common.on`):f(`common.off`)})]}),e?.lastNotifiedAt?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.lastNotification`)}),(0,z.jsx)(`dd`,{children:e.lastNotifiedAt})]}):null]})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:f(`drawer.larkNotConfigured`)}),(0,z.jsx)(`p`,{children:f(`drawer.larkNotConfiguredDescription`)})]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>t.onOpenNotificationSettings?.(u.item.goalId),type:`button`,children:[(0,z.jsx)(Hp,{size:16}),f(r?`drawer.larkConfigure`:`drawer.larkConnect`)]})]})]})})(),(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-session`,children:[(0,z.jsx)(`small`,{children:f(`drawer.runDetails`)}),fe?.sessionId?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:Xi(fe.sessionStatus??fe.status,f)}),(0,z.jsx)(`p`,{children:fe.title}),t.onOpenRunSession?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void t.onOpenRunSession?.(fe),type:`button`,children:[(0,z.jsx)(Tm,{size:16}),f(`drawer.runLatest`)]}):null]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:f(`drawer.noRun`)}),(0,z.jsx)(`p`,{children:f(`drawer.noRunDescription`)})]})]}),c?null:(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>t.onRequestScheduleConfig?.(`heartbeat`,u.item.goalId),type:`button`,children:[(0,z.jsx)(Dm,{size:16}),f(`drawer.setupHeartbeat`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>t.onRequestScheduleConfig?.(`monitor`,u.item.goalId),type:`button`,children:[(0,z.jsx)(Gp,{size:16}),f(`drawer.scheduleAdd`)]})]}),u.item.subagentExecution?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-subagents`,children:[(0,z.jsxs)(`div`,{className:`personal-subagent-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:f(`drawer.subagentLabel`)}),(0,z.jsxs)(`h3`,{children:[(0,z.jsx)(Up,{size:16}),f(`drawer.subagentTitle`)]})]}),(0,z.jsxs)(`button`,{"aria-checked":ye.enabled,"aria-label":f(k&&D===`ready`?`drawer.subagentPending`:ye.enabled?`drawer.subagentDisable`:`drawer.subagentEnable`),className:`personal-subagent-switch`,"data-pending":k&&D===`ready`?`true`:void 0,disabled:c||be||!!k||!t.onPreviewGoalSubagentConfiguration,onClick:()=>void Te(!ye.enabled),role:`switch`,type:`button`,children:[(0,z.jsx)(`span`,{}),f(k&&D===`ready`?`drawer.subagentPending`:ye.enabled?`common.on`:`common.off`)]})]}),(0,z.jsx)(`p`,{children:f(`drawer.subagentDescription`)}),k&&D===`ready`?(0,z.jsxs)(`div`,{className:`personal-subagent-preview`,children:[(0,z.jsx)(`strong`,{children:f(k.enabled?`drawer.subagentConfirmEnable`:`drawer.subagentConfirmDisable`)}),(0,z.jsx)(`p`,{children:k.enabled?f(`drawer.subagentPreviewSummary`,{count:k.maxChildren,domains:k.allowedDomains.join(` · `)||f(`drawer.subagentDomainsUnrestricted`)}):f(`drawer.subagentDisableSummary`)}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`button`,{className:`personal-primary-action`,onClick:()=>void Ee(),type:`button`,children:f(`common.confirm`)}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:Se,type:`button`,children:f(`common.cancel`)})]})]}):null,C?(0,z.jsxs)(`p`,{className:`personal-subagent-feedback is-${D}`,role:`status`,children:[D===`previewing`||D===`applying`?(0,z.jsx)(km,{className:`personal-spin`,size:13}):null,C]}):null,(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.subagentCurrentBoundary`)}),(0,z.jsx)(`dd`,{children:ye.allowedDomains.join(` · `)||f(`drawer.subagentDomainsUnrestricted`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.subagentChildLimit`)}),(0,z.jsx)(`dd`,{children:ye.maxChildren||0})]})]}),c?(0,z.jsx)(`p`,{className:`personal-subagent-read-only`,children:f(`drawer.subagentRemoteReadOnly`)}):(0,z.jsxs)(`div`,{className:`personal-subagent-fields`,children:[(0,z.jsxs)(`fieldset`,{className:`personal-subagent-domain-picker`,disabled:be,children:[(0,z.jsx)(`legend`,{children:f(`drawer.subagentDomains`)}),xe.length>0?(0,z.jsx)(`div`,{className:`personal-subagent-domain-options`,children:xe.map(e=>{let t=x.includes(e.value);return(0,z.jsxs)(`label`,{className:`personal-subagent-domain-option${t?` is-selected`:``}`,children:[(0,z.jsx)(`input`,{"aria-label":e.value,checked:t,onChange:t=>we(e.value,t.target.checked),type:`checkbox`}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.value}),(0,z.jsx)(`small`,{children:f(`drawer.subagentDomainTodoCount`,{count:e.matchingTodoCount})})]})]},e.value)})}):(0,z.jsx)(`p`,{className:`personal-subagent-domain-empty`,children:f(`drawer.subagentDomainsEmpty`)}),(0,z.jsx)(`small`,{children:f(`drawer.subagentDomainsHint`)})]}),(0,z.jsxs)(`label`,{className:`personal-subagent-limit-field`,children:[(0,z.jsx)(`span`,{children:f(`drawer.subagentMaxChildren`)}),(0,z.jsx)(`select`,{"aria-label":f(`drawer.subagentMaxChildren`),disabled:be,onChange:e=>{E(Number(e.target.value)),ee(null),O(`idle`),w(null)},value:T,children:jy.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))})]}),ye.enabled?(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:be,onClick:()=>void Te(!0),type:`button`,children:f(`drawer.subagentPreviewBoundary`)}):null]})]}):null]}):null,u.kind===`run`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{"aria-label":f(`drawer.runView`),className:`personal-run-drawer-tabs`,role:`tablist`,children:[(0,z.jsx)(`button`,{"aria-selected":y===`record`,onClick:()=>b(`record`),role:`tab`,type:`button`,children:f(`drawer.executionRecordAndResult`)}),(0,z.jsx)(`button`,{"aria-selected":y===`details`,onClick:()=>b(`details`),role:`tab`,type:`button`,children:f(`drawer.detailsAndActions`)})]}),y===`record`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card personal-session-summary`,children:[(0,z.jsxs)(`small`,{children:[u.item.agentLabel,` · `,Xi(u.item.sessionStatus??u.item.status,f)]}),(0,z.jsx)(`h3`,{children:u.item.title}),(0,z.jsx)(`p`,{children:u.item.latestActivity}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:u.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.progress`)}),(0,z.jsxs)(`dd`,{children:[u.item.completedSteps,`/`,u.item.totalSteps]})]})]})]}),(0,z.jsxs)(`section`,{"aria-label":f(`drawer.executionRecord`),className:`personal-session-message-record`,children:[(0,z.jsx)(`h3`,{children:f(`drawer.executionRecord`)}),u.item.sessionMessages?.length?(0,z.jsx)(`ol`,{children:u.item.sessionMessages.map(e=>(0,z.jsxs)(`li`,{className:`is-${e.role}`,children:[(0,z.jsx)(`i`,{}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:e.role===`user`?f(`drawer.runRoleUser`):e.role===`assistant`?f(`drawer.runRoleAssistant`):f(`drawer.runRoleSystem`)}),e.createdAt?(0,z.jsx)(`time`,{children:new Date(e.createdAt).toLocaleTimeString(d,{hour:`2-digit`,minute:`2-digit`,hour12:!1})}):null]}),(0,z.jsx)(`p`,{children:e.text})]})]},e.messageId))}):(0,z.jsx)(`p`,{className:`personal-session-empty`,children:pe?f(`drawer.runRecordProjected`,{completed:u.item.completedSteps,outputs:u.item.outputs?.length?f(`drawer.runRecordProjectedOutputs`,{count:u.item.outputs.length}):``,total:u.item.totalSteps}):f(`drawer.runRecordEmpty`)}),u.item.status===`running`?(0,z.jsxs)(`div`,{className:`personal-session-active-step`,children:[(0,z.jsx)(`i`,{}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:f(`drawer.analysis`)}),(0,z.jsx)(`small`,{children:f(`drawer.agentWorking`)})]})]}):null]}),u.item.outputs?.length?(0,z.jsxs)(`section`,{className:`personal-execution-history`,"aria-labelledby":`personal-run-outputs-title`,children:[(0,z.jsx)(`h3`,{id:`personal-run-outputs-title`,children:f(`drawer.outputs`)}),(0,z.jsx)(`ol`,{children:u.item.outputs.map(e=>(0,z.jsx)(`li`,{children:(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`small`,{children:e.createdAt??e.kind??f(`files.emptySummary`)})]})},e.outputId))})]}):null]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsxs)(`small`,{children:[u.item.agentLabel,` · `,Xi(u.item.status,f)]}),(0,z.jsx)(`h3`,{children:u.item.title}),(0,z.jsx)(`p`,{children:u.item.latestActivity}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:u.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.progress`)}),(0,z.jsxs)(`dd`,{children:[u.item.completedSteps,`/`,u.item.totalSteps]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.sessionStatus`)}),(0,z.jsx)(`dd`,{children:Xi(u.item.sessionStatus??u.item.status,f)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.sessionRecoverable`)}),(0,z.jsx)(`dd`,{children:u.item.resumable===!1?f(`drawer.resumeNo`):f(`drawer.resumeYes`)})]})]})]}),u.item.sessionStatus===`resume_failed`&&!c?(0,z.jsxs)(`section`,{className:`personal-recovery-panel`,"aria-label":f(`drawer.recoveryFailed`),children:[(0,z.jsx)(`strong`,{children:f(`drawer.recoveryFailed`)}),(0,z.jsx)(`p`,{children:f(`drawer.recoveryDescription`)}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void t.onRetryResumeRun?.(u.item),type:`button`,children:[(0,z.jsx)(km,{size:16}),f(`drawer.recoveryRetry`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void t.onStartNewRunSession?.(u.item),type:`button`,children:[(0,z.jsx)(Tm,{size:16}),f(`drawer.recoveryNewSession`)]})]}):null,c?null:(0,z.jsxs)(`section`,{className:`personal-correction-panel`,children:[(0,z.jsx)(`header`,{children:(0,z.jsxs)(`span`,{children:[(0,z.jsx)(Up,{size:16}),f(`drawer.correctionLabel`,{agent:u.item.agentLabel})]})}),(0,z.jsx)(`p`,{children:f(`drawer.correctionDescription`)}),(0,z.jsxs)(`div`,{className:`personal-correction-composer`,children:[(0,z.jsx)(`textarea`,{"aria-label":f(`drawer.correctionTextarea`,{agent:u.item.agentLabel,goal:u.item.goalTitle,run:u.item.title}),onChange:e=>m(e.target.value),placeholder:f(`drawer.correctionPlaceholder`),rows:3,value:p}),(0,z.jsx)(`button`,{"aria-label":f(`drawer.correctionSend`),disabled:!p.trim(),onClick:()=>void ge(),type:`button`,children:(0,z.jsx)(Mm,{size:16})})]})]}),c?null:(0,z.jsxs)(`details`,{className:`personal-compact-menu personal-run-more`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(rm,{size:17}),f(`drawer.moreRunActions`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`button`,{disabled:!u.item.canInterrupt,onClick:()=>void t.onInterruptRun?.(u.item),type:`button`,children:[(0,z.jsx)(wm,{size:16}),f(`drawer.runInterrupt`)]}),(0,z.jsxs)(`button`,{disabled:u.item.resumable===!1,onClick:()=>void t.onRetryResumeRun?.(u.item),type:`button`,children:[(0,z.jsx)(km,{size:16}),f(`drawer.recoveryRetry`)]}),(0,z.jsxs)(`button`,{onClick:()=>void t.onStartNewRunSession?.(u.item),type:`button`,children:[(0,z.jsx)(Tm,{size:16}),f(`drawer.runNewSession`)]}),(0,z.jsxs)(`button`,{onClick:()=>void t.onCloseRunSession?.(u.item),type:`button`,children:[(0,z.jsx)(zm,{size:16}),f(`drawer.runCloseSession`)]})]})]})]})]}):null,u.kind===`output`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsx)(`small`,{children:u.item.kind??`output`}),(0,z.jsx)(`h3`,{children:u.item.title}),(0,z.jsx)(`p`,{children:u.item.summary??f(`drawer.outputRecorded`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:u.item.goalTitle??u.item.goalId})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.outputTodo`)}),(0,z.jsx)(`dd`,{children:u.item.todoId??f(`drawer.notLinked`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.outputRun`)}),(0,z.jsx)(`dd`,{children:u.item.runId??f(`drawer.notLinked`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Agent`}),(0,z.jsx)(`dd`,{children:u.item.agentLabel??u.item.agentId??`LoopX`})]})]})]}),u.item.report?(0,z.jsxs)(`section`,{className:`personal-report-detail`,"data-testid":`personal-periodic-report-detail`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsxs)(`strong`,{children:[`+`,u.item.report.addedCount]}),f(`files.reportAdded`)]}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:u.item.report.changedCount}),f(`files.reportChanged`)]})]}),(0,z.jsxs)(`p`,{children:[u.item.report.periodStartAt,` → `,u.item.report.periodEndAt]}),(0,z.jsx)(`ol`,{children:u.item.report.items.map(e=>(0,z.jsxs)(`li`,{"data-change-kind":e.changeKind,children:[(0,z.jsxs)(`small`,{children:[e.changeKind,` · `,e.status]}),(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`p`,{children:e.summary})]},e.sourceRef))}),(0,z.jsxs)(`footer`,{children:[(0,z.jsxs)(`span`,{children:[f(`files.reportPublication`),`: `,u.item.report.publicationId]}),(0,z.jsxs)(`span`,{children:[f(`files.reportGeneration`),`: `,u.item.report.generationId]})]})]}):null,u.item.safePreview?(0,z.jsx)(`pre`,{"aria-label":f(`drawer.outputSafePreview`),className:`personal-safe-preview`,children:u.item.safePreview}):(0,z.jsx)(`p`,{className:`personal-preview-unavailable`,children:f(`drawer.previewUnavailable`)}),(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:!t.onOpenOutput,onClick:()=>{t.onOpenOutput?.(u.item),o()},type:`button`,children:[(0,z.jsx)(im,{size:16}),f(`files.openConversation`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,disabled:!t.onExportOutput,onClick:()=>void t.onExportOutput?.(u.item),type:`button`,children:[(0,z.jsx)(nm,{size:16}),f(`files.exportSummary`)]})]})]}):null,u.kind===`proposal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-proposal-card`,children:[(0,z.jsxs)(`small`,{children:[u.item.actionKind,` · `,u.item.status]}),(0,z.jsx)(`h3`,{children:u.item.title}),(0,z.jsx)(`p`,{children:u.item.impact}),u.item.status===`ready`?(0,z.jsx)(`p`,{className:`personal-proposal-explainer`,children:f(`drawer.proposalExplainer`)}):null,(0,z.jsx)(`dl`,{children:u.item.fields.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e.label}),(0,z.jsx)(`dd`,{children:e.value})]},e.key))})]}),u.item.status===`applied`?(0,z.jsxs)(`p`,{className:`personal-proposal-state is-applied`,children:[(0,z.jsx)(Kp,{size:16}),f(`drawer.proposalApplied`)]}):null,u.item.status===`applied`&&u.item.goalId?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>{let e=u.item.goalId;o(),t.onOpenGoal?.(e)},type:`button`,children:[(0,z.jsx)(im,{size:16}),u.item.actionKind===`goal.create`?f(`drawer.proposalEnterGoal`):f(`drawer.proposalViewGoal`)]}):null,u.item.status===`stale`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-stale`,children:f(`drawer.proposalStale`)}):null,u.item.status===`error`?(0,z.jsxs)(`div`,{className:`personal-proposal-state is-error`,children:[(0,z.jsx)(`span`,{children:f(`drawer.proposalApplyFailed`)}),u.item.errorMessage?(0,z.jsx)(`small`,{children:u.item.errorMessage}):null,(0,z.jsx)(`small`,{children:f(`drawer.proposalApplyFailedHint`)})]}):null,u.item.status===`rejected`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-error`,children:f(`drawer.proposalRejected`)}):null,u.item.status===`deferred`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-gated`,children:f(`drawer.proposalDeferred`)}):null,u.item.status===`gated`?(0,z.jsxs)(`div`,{className:`personal-proposal-state is-gated`,children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:f(`drawer.gateRequiresHost`)}),f(`drawer.gateRequiresHostDescription`)]}),u.item.gate?.nextAction?(0,z.jsx)(`small`,{children:u.item.gate.nextAction}):null]}):null,u.item.status===`gated`&&u.item.actionKind===`gate.resolve`?(()=>{let e=e=>u.item.fields.find(t=>t.key===e)?.value,t=e(`goal_id`),n=e(`todo_id`);return!t||!n?null:(0,z.jsxs)(`section`,{className:`personal-detail-card personal-gate-cli-hint`,children:[(0,z.jsx)(`small`,{children:f(`drawer.gateApproveHint`)}),(0,z.jsxs)(`code`,{children:[`loopx todo complete --goal-id `,t,` --todo-id `,n,` --decision-outcome approve`]}),(0,z.jsx)(`small`,{children:f(`drawer.gateRejectHint`)})]})})():null,!c&&u.item.workspaceCandidates?.length?(0,z.jsx)(`div`,{className:`personal-workspace-candidates`,"aria-label":f(`drawer.workspaceCandidates`),children:u.item.workspaceCandidates.map(e=>(0,z.jsxs)(`button`,{onClick:()=>void t.onSelectWorkspaceCandidate?.(u.item,e.workspaceRef),type:`button`,children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.workspaceRef})]},e.workspaceRef))}):null,!c&&u.item.status===`error`?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void t.onTransitionProposal?.(u.item,`regenerate`),type:`button`,children:[(0,z.jsx)(km,{size:17}),f(`drawer.proposalRegenerate`)]}):!c&&u.item.status!==`gated`?(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:![`ready`,`deferred`].includes(u.item.status),onClick:()=>void t.onApplyProposal?.(u.item),type:`button`,children:[(0,z.jsx)(Kp,{size:17}),u.item.status===`applying`?f(`drawer.applying`):u.item.primaryLabel??f(`drawer.apply`)]}):null,!c&&[`stale`,`gated`,`rejected`].includes(u.item.status)?(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void t.onTransitionProposal?.(u.item,`regenerate`),type:`button`,children:[(0,z.jsx)(km,{size:16}),f(`drawer.proposalRecheck`)]}):null,!c&&[`ready`,`gated`].includes(u.item.status)?(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void t.onTransitionProposal?.(u.item,`defer`),type:`button`,children:f(`drawer.proposalDefer`)}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void t.onTransitionProposal?.(u.item,`reject`),type:`button`,children:f(`drawer.decisionReject`)})]}):null,[`applied`,`applying`].includes(u.item.status)?null:(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:o,type:`button`,children:f(`drawer.proposalClose`)})]}):null,u.kind===`schedule`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsxs)(`small`,{children:[u.item.scheduleKind===`heartbeat`?`Goal Heartbeat`:`continuous_monitor`,` · `,u.item.status??`active`]}),(0,z.jsx)(`h3`,{children:u.item.label}),(0,z.jsx)(`p`,{children:u.item.target??u.item.schedule??f(`drawer.scheduleDefaultTarget`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.scheduleTimezone`)}),(0,z.jsx)(`dd`,{children:u.item.timezone??f(`drawer.scheduleLocalTimezone`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.scheduleNext`)}),(0,z.jsx)(`dd`,{children:u.item.nextRunAt??f(`drawer.schedulePending`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.scheduleLast`)}),(0,z.jsx)(`dd`,{children:u.item.previousRunAt??f(`drawer.scheduleNeverRun`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.scheduleNotification`)}),(0,z.jsx)(`dd`,{children:u.item.notificationRule??f(`drawer.scheduleDefaultNotification`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:f(`drawer.scheduleStopCondition`)}),(0,z.jsx)(`dd`,{children:u.item.stopCondition??f(`drawer.scheduleDefaultStop`)})]})]})]}),!c&&u.item.scheduleKind===`monitor`?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void t.onUpdateSchedule?.(u.item,`run_now`),type:`button`,children:[(0,z.jsx)(Tm,{size:16}),f(`drawer.scheduleRunNow`)]}):null,c?null:(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void t.onUpdateSchedule?.(u.item,u.item.status===`paused`?`resume`:`pause`),type:`button`,children:[u.item.status===`paused`?(0,z.jsx)(Tm,{size:16}):(0,z.jsx)(wm,{size:16}),u.item.status===`paused`?f(`drawer.scheduleResume`):f(`drawer.schedulePause`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void t.onUpdateSchedule?.(u.item,`edit`),type:`button`,children:[(0,z.jsx)(Gp,{size:16}),f(`drawer.scheduleEdit`)]})]}),c?null:(0,z.jsxs)(`button`,{className:`personal-danger-action`,onClick:()=>void t.onUpdateSchedule?.(u.item,`stop`),type:`button`,children:[(0,z.jsx)(zm,{size:16}),f(`drawer.scheduleStop`,{kind:u.item.scheduleKind===`heartbeat`?` Heartbeat`:f(`drawer.titleSchedule`)})]}),(0,z.jsxs)(`section`,{className:`personal-execution-history`,"aria-labelledby":`personal-execution-history-title`,children:[(0,z.jsx)(`h3`,{id:`personal-execution-history-title`,children:f(`drawer.executionHistory`)}),u.item.executionHistory?.length?(0,z.jsx)(`ol`,{children:u.item.executionHistory.map((e,t)=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.timestamp})]}),(0,z.jsx)(`em`,{className:`is-${e.status}`,children:e.status})]},`${e.timestamp}:${e.runId??t}`))}):(0,z.jsx)(`p`,{children:f(`drawer.noExecutionHistory`)})]})]}):null,u.kind===`run`||u.kind===`proposal`||u.kind===`schedule`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`button`,{"aria-expanded":h,className:`personal-diagnostics-trigger`,onClick:()=>g(e=>!e),type:`button`,children:[(0,z.jsx)(`span`,{children:f(`drawer.advancedDiagnostics`)}),(0,z.jsx)(qp,{className:h?`is-open`:``,size:16})]}),h?(0,z.jsxs)(`div`,{className:`personal-diagnostics`,children:[(0,z.jsxs)(`code`,{children:[`goal_id: `,ue]}),(0,z.jsxs)(`code`,{children:[`kind: `,u.kind]}),u.kind===`run`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`session_id: `,u.item.sessionId??f(`drawer.notLinked`)]}),(0,z.jsxs)(`code`,{children:[`turn_id: `,u.item.turnId??f(`common.none`)]}),(0,z.jsxs)(`code`,{children:[`adapter: `,u.item.agentId]}),(0,z.jsxs)(`code`,{children:[`status: `,u.item.sessionStatus??u.item.status]})]}):u.kind===`proposal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`action: `,u.item.actionKind]}),(0,z.jsxs)(`code`,{children:[`status: `,u.item.status]})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`schedule_id: `,u.item.scheduleId]}),(0,z.jsxs)(`code`,{children:[`status: `,u.item.status??`active`]})]})]}):null]}):null]})]})}var Iy=[`checking`,`connecting`,`downloading`,`installing_app`,`installing_runtime`],Ly={desktop_status_unavailable:[`无法读取 App 更新状态。请重启 App 后再试;若仍失败,请重新安装最新 App。`,`Cannot read the App update status. Restart the App; if this persists, reinstall the latest App.`],update_feed_unavailable:[`此通道的更新源尚未就绪或暂时不可用。可稍后重新检查,当前版本仍可继续使用。`,`This channel's update feed is not ready or temporarily unavailable. Check again later; you can keep using this version.`],update_feed_invalid:[`更新源格式异常。请稍后重新检查。`,`The update feed is invalid. Check again later.`],update_platform_unavailable:[`此通道尚无适用于本机的更新包。`,`This channel has no update package for this platform.`],update_check_timeout:[`检查更新超时。请稍后重试。`,`The update check timed out. Try again later.`],update_network_failed:[`无法连接更新服务器。请检查网络后重试。`,`Cannot reach the update server. Check your connection and retry.`],update_download_or_signature_failed:[`更新包下载或签名校验失败,尚未安装。请重新检查更新。`,`Download or signature verification failed; the update was not installed. Check for updates again.`]};function Ry(e,t=`update_failed`){return{phase:`error`,details:{code:typeof e==`string`&&Object.hasOwn(Ly,e)?e:t}}}function zy(){let{locale:e}=Ji(),t=e===`zh-CN`,[n,r]=(0,R.useState)(!1),i=(0,R.useRef)(null),[a,o]=(0,R.useState)(`stable`),[s,c]=(0,R.useState)({phase:`idle`}),[l,u]=(0,R.useState)(``),[d,f]=(0,R.useState)(!1),p=(0,R.useRef)(!1),m=window.__TAURI__?.core.invoke,h=Iy.includes(s.phase);(0,R.useEffect)(()=>{let e=i.current;if(!e)return;let t=()=>r(e.matches(`:popover-open`));return e.addEventListener(`toggle`,t),()=>e.removeEventListener(`toggle`,t)},[]),(0,R.useEffect)(()=>{if(!m)return;let e=!0;return m(`desktop_update_status`).then(t=>{if(!e)return;u(t.app_version),f(t.rollback_available===!0),t.state?.phase&&c(t.state);let n=t.state?.details?.channel??(t.app_version.includes(`-main.`)?`main`:`stable`);o(n),t.state?.phase||m(`desktop_update`,{action:`check`,channel:n}).then(t=>{e&&c(t)}).catch(t=>{e&&c(Ry(t))})}).catch(()=>{e&&c(Ry(null,`desktop_status_unavailable`))}),()=>{e=!1}},[m]),(0,R.useEffect)(()=>{if(!m||!h)return;let e=window.setInterval(()=>{m(`desktop_update_status`).then(e=>{e.state?.phase&&c(e.state)}).catch(()=>{})},1e3);return()=>window.clearInterval(e)},[m,h]);async function g(e){if(!(!m||p.current)){p.current=!0,c({phase:e===`check`?`checking`:e===`repair`?`installing_runtime`:`downloading`});try{if(!l){let e=await m(`desktop_update_status`);u(e.app_version),f(e.rollback_available===!0)}c(await m(`desktop_update`,{action:e,channel:a}))}catch(e){c(Ry(e,l?`update_failed`:`desktop_status_unavailable`))}finally{p.current=!1}}}let _={service_error:t?`运行时已安装,但服务尚未连接。可重试更新、修复或恢复上版。`:`Runtime installed, but services are unavailable. Retry updates, repair, or restore the previous version.`,idle:t?`App 会检查可用更新,不会自动安装。`:`Updates are checked automatically, never installed without confirmation.`,runtime_required:t?`请完成匹配组件安装,或检查 App 更新。`:`Install matching components or check for an App update.`,connecting:t?`正在连接更新后的服务…`:`Connecting to updated services…`,checking:t?`正在检查更新…`:`Checking for updates…`,available:t?`新版本已就绪,一次更新 App 与匹配的运行时。`:`Update the App and its matching runtime together.`,up_to_date:t?`当前通道暂无更新。`:`No newer update on this channel.`,downloading:t?`正在下载并校验签名…`:`Downloading and verifying signature…`,installing_app:t?`正在安装 App,请保持窗口打开。`:`Installing the App. Keep this window open.`,installing_runtime:t?`正在安装匹配的运行时,请稍候…`:`Installing the matching runtime…`,restart_required:t?`重启后将自动完成运行时安装与服务连接。`:`Restart to finish runtime installation and reconnect services.`,ready:t?`更新完成,服务已就绪。`:`Update completed; services are ready.`,error:Ly[s.details?.code??``]?.[+!t]??(t?`更新未完成。请重试;启动失败可尝试修复当前版本。`:`Update incomplete. Retry; repair this version if startup fails.`)},v=h?t?`正在更新…`:`Updating…`:s.phase===`available`?t?`有可用更新`:`Update available`:s.phase===`restart_required`?t?`重启完成更新`:`Restart to finish`:s.phase===`error`?t?`更新需重试`:`Retry update`:t?`更新 LoopX`:`Update LoopX`;return(0,z.jsxs)(`div`,{className:`personal-desktop-update`,children:[(0,z.jsxs)(`button`,{className:`personal-update-trigger`,type:`button`,"aria-expanded":n,"aria-controls":`desktop-update-panel`,onClick:e=>{i.current?.style.setProperty(`bottom`,`${window.innerHeight-e.currentTarget.getBoundingClientRect().top+8}px`),i.current?.togglePopover()},children:[(0,z.jsx)(nm,{size:16,"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:v}),(0,z.jsx)(Yp,{size:14,"aria-hidden":`true`})]}),(0,z.jsxs)(`section`,{ref:i,popover:`auto`,id:`desktop-update-panel`,className:`personal-update-panel`,"aria-label":t?`LoopX 更新`:`LoopX updates`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:t?`LoopX 更新`:`LoopX updates`}),(0,z.jsx)(`button`,{type:`button`,"aria-label":t?`关闭更新面板`:`Close updates`,onClick:()=>i.current?.hidePopover(),children:(0,z.jsx)(Gm,{size:16,"aria-hidden":`true`})})]}),(0,z.jsxs)(`small`,{children:[l,` · `,a===`main`?t?`main 预览版`:`main preview`:t?`稳定版`:`Stable`]}),s.details?.version?(0,z.jsxs)(`p`,{children:[t?`目标版本:`:`Target: `,s.details.version]}):null,(0,z.jsxs)(`p`,{role:`status`,"aria-live":`polite`,children:[h?(0,z.jsx)(Om,{className:`is-spinning`,size:14,"aria-hidden":`true`}):null,_[s.phase]]}),s.phase===`downloading`&&s.details?.total?(0,z.jsx)(`progress`,{"aria-label":t?`下载进度`:`Download progress`,max:s.details.total,value:s.details.received??0}):null,m?(0,z.jsx)(`div`,{className:`personal-update-actions`,children:s.phase===`restart_required`?(0,z.jsx)(`button`,{type:`button`,onClick:()=>void g(`restart`),children:t?`重启完成更新`:`Restart to finish`}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{type:`button`,disabled:h,onClick:()=>void g(`check`),children:t?`检查更新`:`Check for updates`}),s.phase===`available`?(0,z.jsx)(`button`,{type:`button`,onClick:()=>void g(`apply`),children:t?`更新并准备重启`:`Install update`}):null]})}):(0,z.jsx)(`p`,{children:t?`请在 LoopX App 中更新;浏览器自身无需安装包。`:`Update from the LoopX App; the browser needs no installer.`}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`高级选项`:`Advanced options`}),(0,z.jsxs)(`label`,{children:[t?`更新通道`:`Update channel`,(0,z.jsxs)(`select`,{disabled:h||s.phase===`restart_required`,value:a,onChange:e=>{o(e.target.value),c({phase:`idle`})},children:[(0,z.jsx)(`option`,{value:`stable`,children:t?`稳定版(推荐)`:`Stable (recommended)`}),(0,z.jsx)(`option`,{value:`main`,children:t?`main 预览版`:`main preview`})]})]}),(0,z.jsx)(`p`,{children:t?`App 与匹配的 CLI 一起更新,服务可能短暂断开。不删除 Goal 数据。`:`Updates the App and matching CLI. Services may briefly disconnect. Goal data is not deleted.`}),m?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{children:t?`启动失败时,可重装当前 App 随附的运行时。`:`If startup fails, reinstall this App's bundled runtime.`}),(0,z.jsx)(`button`,{disabled:h||s.phase===`restart_required`,type:`button`,onClick:()=>void g(`repair`),children:t?`修复当前版本`:`Repair this version`})]}):null,m&&d?(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`恢复上个版本`:`Restore previous version`}),(0,z.jsx)(`p`,{children:t?`将恢复已保留的 App 和它的运行时,需要重启。`:`Restore the retained App and its runtime, then restart.`}),(0,z.jsx)(`button`,{disabled:h,type:`button`,onClick:()=>void g(`rollback`),children:t?`确认恢复上版`:`Restore previous version`})]}):null]})]})]})}var By=e=>`loopx-sidebar-goal-order-v1:${encodeURIComponent(e)}`;function Vy(e){try{let t=JSON.parse(e??`null`);return Array.isArray(t)&&t.every(e=>typeof e==`string`)?[...new Set(t)]:[]}catch{return[]}}function Hy(e,t){let n=new Map(t.map((e,t)=>[e,t]));return[...e].sort((e,t)=>(n.get(e.goalId)??1/0)-(n.get(t.goalId)??1/0))}function Uy(e,t,n,r,i){if(n===r||!t.includes(n)||!t.includes(r))return e;let a=[...new Set([...e,...t])].filter(e=>e!==n);return a.splice(a.indexOf(r)+Number(i),0,n),a}function Wy(e,t){let n=By(t),[r,i]=(0,R.useState)(()=>{try{return Vy(localStorage.getItem(n))}catch{return[]}}),[a,o]=(0,R.useState)(!1),[s,c]=(0,R.useState)(null),[l,u]=(0,R.useState)(null),d=(0,R.useRef)(null),f=(0,R.useRef)(!1),p=Hy(e,r),m=p.map(e=>e.goalId);function h(t,a,s){let l=Uy(r,m,t,a,s);if(l===r)return;i(l);let u=Hy(e,l),d=u.findIndex(e=>e.goalId===t),f=u[d];f&&c({title:f.title,position:d+1});try{localStorage.setItem(n,JSON.stringify(l)),o(!1)}catch{o(!0)}}function g(){d.current=null,u(null)}return{sorted:p,target:l,saveFailed:a,lastMoved:s,move:h,moveBy(e,t){let n=p[m.indexOf(e)+t];n&&h(e,n.goalId,t===1)},pointerProps:e=>({onPointerDown(t){f.current=!1,t.pointerType===`mouse`&&t.button===0&&(d.current={id:e,x:t.clientX,y:t.clientY,dragging:!1},t.currentTarget.setPointerCapture(t.pointerId))},onPointerMove(e){let t=d.current;if(!t||!t.dragging&&Math.hypot(e.clientX-t.x,e.clientY-t.y)<6)return;t.dragging=!0,f.current=!0;let n=document.elementFromPoint(e.clientX,e.clientY)?.closest(`[data-reorder-goal]`),r=e.currentTarget.closest(`.personal-goal-list`),i=n?.dataset.reorderGoal;if(!n||!i||!r?.contains(n)||i===t.id){u(null);return}let a=n.getBoundingClientRect();u({id:i,after:e.clientY>a.top+a.height/2})},onPointerUp(){d.current?.dragging&&l&&h(d.current.id,l.id,l.after),g()},onPointerCancel:g,onLostPointerCapture:g,onKeyDown(e){e.key===`Escape`&&g()},onClickCapture(e){f.current&&=(e.preventDefault(),e.stopPropagation(),!1)}})}}var Gy=`/ssh-hosts`,Ky=/^[A-Za-z0-9][A-Za-z0-9._-]{0,254}$/;function qy(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`SSH Host 列表响应无效。`);let t=e;if(t.ok!==!0||t.schema_version!==`ssh_host_catalog_v0`||!Array.isArray(t.hosts))throw Error(`SSH Host 列表协议不兼容,请更新本机 LoopX 服务。`);let n=new Set;return{hosts:t.hosts.flatMap(e=>{if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=String(e.alias??``).trim();return!Ky.test(t)||n.has(t)?[]:(n.add(t),[{alias:t}])}),schemaVersion:`ssh_host_catalog_v0`}}async function Jy(e=fetch,t=Gy){let n=await e(t,{cache:`no-store`});if(!n.ok)throw Error(`无法读取本机 SSH Host(HTTP ${n.status})。`);return qy(await n.json())}function Yy(e,t){let n=e.trim();if(!Ky.test(n))return{error:`请选择有效的 SSH Host。`};let r=Number(t);return!Number.isInteger(r)||r<1024||r>65535?{error:`本地端口必须是 1024–65535 之间的整数。`}:{command:`ssh -N -L ${r}:127.0.0.1:8766 ${n}`,label:n,statusUrl:`http://127.0.0.1:${r}/status.json`}}var Xy=`/api/ssh-source/ensure`;async function Zy(e,t){let n=await fetch(Xy,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({host_alias:e,local_port:Number(t)})}),r=await n.json().catch(()=>null);if(!n.ok)throw Error(r?.error??`无法建立 SSH 隧道来源。`);if(!r?.ok)throw Error(`无法建立 SSH 隧道来源。`);return r}function Qy({activeSource:e,connectionState:t,errorMessage:n,onAdd:r,onRemove:i,onSelect:a,sources:o}){let{t:s}=Ji(),[c,l]=(0,R.useState)(!1),[u,d]=(0,R.useState)(null),[f,p]=(0,R.useState)(`configured`),[m,h]=(0,R.useState)([]),[g,_]=(0,R.useState)(null),[v,y]=(0,R.useState)(!1),[b,x]=(0,R.useState)(!1),[S,C]=(0,R.useState)(``),[w,T]=(0,R.useState)(``),[E,D]=(0,R.useState)(`8876`),[O,k]=(0,R.useState)(``),ee=`configured:`,A=[...o.map(e=>({label:e.label,value:e.id})),...m.filter(e=>!o.some(t=>t.label===e.alias)).map(e=>({group:s(`source.configuredGroup`,{count:m.length}),label:e.alias,value:`${ee}${e.alias}`}))],j=(0,R.useMemo)(()=>m.some(e=>e.alias===S)?Yy(S,E):{error:s(`source.selectHost`)},[m,S,E,s]);(0,R.useEffect)(()=>{te()},[]);async function te(){y(!0),_(null);try{let e=await Jy();h(e.hosts),C(t=>t||e.hosts[0]?.alias||``),e.hosts.length||_(s(`source.hostEmpty`))}catch(e){_(e instanceof Error?e.message:s(`source.hostLoadError`))}finally{y(!1)}}function ne(){l(!0),p(`configured`),d(null),te()}function re(){l(!1),p(`configured`),_(null),x(!1),C(``),d(null),T(``),D(`8876`),k(``)}function M(){let e=r({label:w,statusUrl:O});if(e.error){d(e.error);return}re()}function N(){if(`error`in j){d(j.error??s(`source.invalid`));return}let e=r({ensureTunnel:!0,label:j.label,statusUrl:j.statusUrl});if(e.error){d(e.error);return}re()}function ie(e){let t=new Set;for(let e of o)try{t.add(new URL(e.statusUrl).port)}catch{}let n=`8877`;for(let e=8877;e<9077;e+=1)if(!t.has(String(e))){n=String(e);break}let i=Yy(e,n);if(`error`in i){d(i.error??s(`source.invalid`));return}let a=r({ensureTunnel:!0,label:i.label,statusUrl:i.statusUrl});a.error?d(a.error):d(null),D(n)}async function ae(){if(`error`in j){d(j.error??s(`source.invalid`));return}try{await navigator.clipboard.writeText(j.command),x(!0),d(null)}catch{d(s(`source.copyError`))}}return(0,z.jsxs)(`section`,{"aria-label":s(`source.controlPlane`),className:`personal-status-source`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`span`,{children:`Control plane`}),(0,z.jsx)(`button`,{"aria-label":s(`source.addSsh`),onClick:ne,title:s(`source.add`),type:`button`,children:(0,z.jsx)(Em,{size:14})})]}),(0,z.jsx)(cy,{ariaLabel:s(`source.select`),className:`personal-status-source-select`,icon:(0,z.jsx)(Pm,{size:15}),onChange:e=>{if(e.startsWith(ee)){ie(e.slice(11));return}a(e)},options:A,value:e.id}),(0,z.jsxs)(`div`,{className:`personal-status-source-meta`,children:[(0,z.jsxs)(`span`,{className:`is-${t}`,children:[(0,z.jsx)(`i`,{}),s(t===`loading`?`source.connecting`:t===`error`?`source.notAvailable`:`source.connected`)]}),(0,z.jsx)(`small`,{children:e.readOnly?s(`source.readOnly`):s(`source.localInteractive`)}),e.kind===`ssh_tunnel`?(0,z.jsx)(`button`,{"aria-label":s(`source.remove`,{source:e.label}),onClick:()=>i(e.id),title:s(`source.removeCurrent`),type:`button`,children:(0,z.jsx)(Hm,{size:12})}):null]}),n?(0,z.jsx)(`p`,{className:`personal-status-source-error`,role:`alert`,children:n}):null,c?(0,z.jsxs)(`div`,{className:`personal-status-source-form`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:s(`source.addSsh`)}),(0,z.jsx)(`button`,{"aria-label":s(`source.closeForm`),onClick:re,type:`button`,children:(0,z.jsx)(Gm,{size:13})})]}),(0,z.jsxs)(`div`,{"aria-label":s(`source.addMethod`),className:`personal-status-source-modes`,role:`tablist`,children:[(0,z.jsx)(`button`,{"aria-selected":f===`configured`,onClick:()=>{p(`configured`),d(null)},role:`tab`,type:`button`,children:s(`source.configured`)}),(0,z.jsx)(`button`,{"aria-selected":f===`manual`,onClick:()=>{p(`manual`),d(null)},role:`tab`,type:`button`,children:s(`source.manual`)})]}),f===`configured`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:s(`source.configuredCount`,{count:m.length})}),(0,z.jsxs)(`span`,{className:`personal-status-source-field-row`,children:[(0,z.jsx)(`input`,{"aria-label":s(`source.host`),disabled:v||!m.length,list:`loopx-configured-ssh-hosts`,onChange:e=>{C(e.target.value),x(!1)},placeholder:s(v?`source.loadingHosts`:`source.hostPlaceholder`),value:S}),(0,z.jsx)(`datalist`,{id:`loopx-configured-ssh-hosts`,children:m.map(e=>(0,z.jsx)(`option`,{value:e.alias},e.alias))}),(0,z.jsx)(`button`,{"aria-label":s(`source.refreshHosts`),disabled:v,onClick:()=>void te(),title:s(`source.refreshHosts`),type:`button`,children:(0,z.jsx)(Am,{size:13})})]})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:s(`source.localPort`)}),(0,z.jsx)(`input`,{"aria-label":s(`source.localPort`),inputMode:`numeric`,onChange:e=>{D(e.target.value),x(!1)},value:E})]}),(0,z.jsxs)(`div`,{className:`personal-status-source-command`,children:[(0,z.jsx)(`code`,{children:`error`in j?s(`source.tunnelCommandPending`):j.command}),(0,z.jsxs)(`button`,{"aria-label":s(`source.copyCommand`),disabled:`error`in j,onClick:()=>void ae(),type:`button`,children:[(0,z.jsx)(em,{size:12}),s(b?`source.copied`:`source.copy`)]})]}),g?(0,z.jsx)(`p`,{className:`is-error`,children:g}):null,(0,z.jsx)(`p`,{children:s(`source.description`)}),(0,z.jsx)(`button`,{className:`personal-status-source-add`,disabled:`error`in j,onClick:N,type:`button`,children:s(`source.addConfigured`)})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:s(`source.name`)}),(0,z.jsx)(`input`,{autoFocus:!0,maxLength:48,onChange:e=>T(e.target.value),placeholder:s(`source.namePlaceholder`),value:w})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:s(`source.statusUrl`)}),(0,z.jsx)(`input`,{onChange:e=>k(e.target.value),placeholder:`http://127.0.0.1:8876/status.json`,value:O})]}),(0,z.jsx)(`p`,{children:(0,z.jsx)(`code`,{children:`ssh -N -L 8876:127.0.0.1:8766 `})}),(0,z.jsx)(`p`,{children:s(`source.manualDescription`)}),(0,z.jsx)(`button`,{className:`personal-status-source-add`,onClick:M,type:`button`,children:s(`source.addConfigured`)})]}),u?(0,z.jsx)(`p`,{className:`is-error`,role:`alert`,children:u}):null]}):null]})}var $y={需修复:`is-danger`,等你:`is-warning`,等待条件:`is-info`,推进中:`is-success`,安静运行:`is-quiet`,已完成:`is-quiet`,已停止:`is-stopped`};function eb({attentionCount:e,goals:t,goalArchiveLoadState:n={error:null,phase:`ready`},lifecycleBusyGoalIds:r,onRequestGoalCreate:i,onOpenSettings:a,onRetryGoalArchive:o,onRequestGoalLifecycle:s,onSelectGoal:c,selectedGoalId:l,statusSourceControl:u}){let{locale:d,t:f}=Ji(),[p,m]=(0,R.useState)(!1),h=Wy(t.filter(e=>e.activationState!==`stopped`),u?.activeSource.statusUrl??`/status.json`),g=h.sorted,_=t.filter(e=>e.activationState===`stopped`),v=(e,t)=>(0,z.jsxs)(`div`,{className:`personal-goal-row${h.target?.id===e.goalId?h.target.after?` is-drop-after`:` is-drop-before`:``}`,"data-reorder-goal":t?void 0:e.goalId,"data-load-error":e.loadError,children:[(0,z.jsxs)(`button`,{...t?{}:h.pointerProps(e.goalId),title:t?void 0:f(`sidebar.dragGoal`),"aria-current":l===e.goalId?`page`:void 0,className:`personal-goal-link`,onClick:()=>c(e.goalId),type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-goal-state-dot ${e.loadState?``:$y[e.state]}`}),(0,z.jsxs)(`span`,{className:`personal-goal-link-copy`,children:[(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsxs)(`small`,{children:[e.loadState&&(!t||l===e.goalId)?f(e.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(e.state,d),e.needsYou&&!t?` · ${f(`home.lane.needsYou`)}`:``]})]}),(0,z.jsx)(Jp,{size:15})]}),!t&&p?(0,z.jsxs)(`div`,{className:`personal-goal-move-actions`,children:[(0,z.jsx)(`button`,{type:`button`,"aria-label":f(`sidebar.moveUp`,{goal:e.title}),disabled:g[0]?.goalId===e.goalId,onClick:()=>h.moveBy(e.goalId,-1),children:(0,z.jsx)(Bp,{"aria-hidden":`true`,size:13})}),(0,z.jsx)(`button`,{type:`button`,"aria-label":f(`sidebar.moveDown`,{goal:e.title}),disabled:g.at(-1)?.goalId===e.goalId,onClick:()=>h.moveBy(e.goalId,1),children:(0,z.jsx)(Ip,{"aria-hidden":`true`,size:13})})]}):null,s?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`button`,{"aria-label":`${f(t?`sidebar.resume`:`sidebar.stop`)} ${e.title}`,"aria-busy":r?.has(e.goalId)||void 0,className:`personal-goal-lifecycle${r?.has(e.goalId)?` is-pending`:``}`,disabled:r?.has(e.goalId),onClick:()=>s(e,t?`resume`:`stop`),title:f(t?`sidebar.resumeGoal`:`sidebar.stopGoal`),type:`button`,children:r?.has(e.goalId)?(0,z.jsx)(hm,{size:13}):t?(0,z.jsx)(km,{size:13}):(0,z.jsx)(wm,{size:13})}),t?(0,z.jsx)(`button`,{"aria-label":`${f(`sidebar.delete`)} ${e.title}`,className:`personal-goal-lifecycle personal-goal-delete`,onClick:()=>s(e,`delete`),title:f(`sidebar.deleteGoal`),type:`button`,children:(0,z.jsx)(Hm,{size:13})}):null]}):null]},e.goalId);return(0,z.jsxs)(`div`,{className:`personal-goal-directory`,children:[(0,z.jsxs)(`div`,{className:`personal-sidebar-brand`,children:[(0,z.jsx)(`span`,{className:`personal-brand-mark`,children:(0,z.jsx)(Up,{size:18})}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:`LoopX`}),(0,z.jsx)(`small`,{children:f(`sidebar.product`)})]})]}),u?(0,z.jsx)(Qy,{...u}):null,(0,z.jsxs)(`nav`,{"aria-label":f(`home.workspace`),className:`personal-sidebar-nav`,children:[(0,z.jsxs)(`button`,{"aria-current":l===null?`page`:void 0,className:`personal-manager-link`,onClick:()=>c(null),type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-manager-icon`,children:(0,z.jsx)(Up,{size:17})}),(0,z.jsx)(`span`,{children:f(`sidebar.manager`)}),e>0?(0,z.jsx)(`span`,{className:`personal-sidebar-count`,children:e}):null,(0,z.jsx)(Jp,{size:15})]}),(0,z.jsxs)(`div`,{className:`personal-sidebar-section-title`,children:[(0,z.jsx)(`span`,{children:`Goals`}),(0,z.jsxs)(`span`,{className:`personal-sidebar-title-actions`,children:[(0,z.jsx)(`small`,{children:g.length}),(0,z.jsx)(`button`,{"aria-label":f(`sidebar.sortGoals`),title:f(`sidebar.sortGoals`),"aria-pressed":p,onClick:()=>m(!p),type:`button`,children:(0,z.jsx)(zp,{"aria-hidden":`true`,size:15})}),i?(0,z.jsx)(`button`,{"aria-label":f(`sidebar.createGoal`),onClick:i,type:`button`,children:(0,z.jsx)(Em,{size:15})}):null]})]}),h.saveFailed?(0,z.jsx)(`p`,{role:`status`,children:f(`sidebar.orderNotSaved`)}):null,(0,z.jsx)(`span`,{className:`personal-sr-only`,role:`status`,children:h.lastMoved?f(`sidebar.goalMoved`,{goal:h.lastMoved.title,position:h.lastMoved.position}):``}),(0,z.jsx)(`div`,{className:`personal-goal-list`,children:g.map(e=>v(e,!1))}),_.length||n.phase===`loading`||n.phase===`error`?(0,z.jsxs)(`details`,{className:`personal-stopped-goals`,open:n.phase===`error`||void 0,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(qp,{size:13}),(0,z.jsx)(`span`,{children:f(`sidebar.stopped`)}),n.phase===`loading`?(0,z.jsx)(hm,{"aria-label":f(`sidebar.stoppedLoading`),className:`is-spinning`,size:13}):(0,z.jsx)(`small`,{children:_.length})]}),(0,z.jsxs)(`div`,{className:`personal-goal-list is-stopped`,children:[n.phase===`error`?(0,z.jsxs)(`div`,{className:`personal-stopped-goal-error`,role:`alert`,children:[(0,z.jsx)(`span`,{children:f(`sidebar.stoppedLoadFailed`)}),o?(0,z.jsx)(`button`,{onClick:o,type:`button`,children:f(`sidebar.retryStopped`)}):null]}):null,_.map(e=>v(e,!0))]})]}):null]}),(0,z.jsxs)(`div`,{className:`personal-sidebar-footer`,children:[(0,z.jsx)(zy,{}),a?(0,z.jsxs)(`button`,{"aria-label":f(`settings.open`),className:`personal-sidebar-utility`,onClick:a,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-sidebar-utility-icon`,children:(0,z.jsx)(Fm,{size:17})}),(0,z.jsxs)(`span`,{className:`personal-sidebar-utility-copy`,children:[(0,z.jsx)(`strong`,{children:f(`settings.open`)}),(0,z.jsx)(`small`,{children:f(`settings.eyebrow`)})]}),(0,z.jsx)(Jp,{"aria-hidden":`true`,size:15})]}):null]})]})}var tb=J({ok:X(!0),total:G().int().nonnegative(),next_cursor:W().nullable(),items:q(J({todo_id:W(),text:W(),claimed_by:W().nullable(),evidence:W().nullable(),priority:W().nullable(),task_class:W().nullable()})).max(40)});function nb({goal:e,agentId:t,seed:n,enabled:r,listView:i=!1,onSelect:a}){let{t:o}=Ji(),s=(0,R.useId)(),[c,l]=(0,R.useState)(!1),u=!i||c,d=i?96:148,[f,p]=(0,R.useState)(n),[m,h]=(0,R.useState)(t===`all`?e.doneTodoCount??n.length:n.length),[g,_]=(0,R.useState)(void 0),[v,y]=(0,R.useState)(!1),[b,x]=(0,R.useState)(!1),[S,C]=(0,R.useState)(!1),[w,T]=(0,R.useState)({top:0,height:600}),[E,D]=(0,R.useState)(null),O=(0,R.useRef)(null),k=(0,R.useRef)(null),[ee,A]=(0,R.useState)(0);(0,R.useEffect)(()=>{let e=O.current;if(!e)return;let t=new ResizeObserver(()=>T({top:e.scrollTop,height:e.clientHeight}));return t.observe(e),()=>{t.disconnect(),k.current?.abort()}},[]);let j=g===void 0||w.top+w.height>=f.length*d-d*2;(0,R.useEffect)(()=>{if(!r||!u||!j||g===null||b||k.current)return;let n=new AbortController;k.current=n,y(!0);let i=new URLSearchParams({goal_id:e.goalId});t!==`all`&&i.set(`agent_id`,t),g&&i.set(`cursor`,g),fetch(`/api/chat/completed-todos?${i}`,{signal:n.signal}).then(async e=>{if(e.status===409&&C(!0),!e.ok)throw Error(`history unavailable`);let t=tb.parse(await e.json());if(n.signal.aborted)return;let r=t.items.map(e=>({todoId:e.todo_id,text:e.text,claimedBy:e.claimed_by,evidence:e.evidence,priority:e.priority,taskClass:e.task_class,done:!0,status:`done`}));p(e=>g===void 0?r:[...e,...r.filter(t=>!e.some(e=>e.todoId===t.todoId))]),h(t.total),_(t.next_cursor)}).catch(()=>{n.signal.aborted||x(!0)}).finally(()=>{n.signal.aborted||(k.current=null,y(!1))})},[r,u,j,g,b,ee,e.goalId,t,v]),(0,R.useEffect)(()=>{O.current&&(O.current.scrollTop=0),T({top:0,height:O.current?.clientHeight??600}),D(null)},[i]);let te=Math.max(0,Math.floor(w.top/d)-3),ne=Math.min(f.length,Math.ceil((w.top+w.height)/d)+3),re=Array.from({length:Math.max(0,ne-te)},(e,t)=>te+t);return E!==null&&El(e=>!e),children:[(0,z.jsx)(`span`,{"aria-hidden":`true`,children:c?`▾`:`▸`}),` `,o(`tasks.completed`)]}):(0,z.jsxs)(`strong`,{children:[(0,z.jsx)(`i`,{"aria-hidden":`true`,className:`personal-kanban-dot tone-done`}),o(`tasks.completed`)]}),(0,z.jsx)(`span`,{children:m})]}),(0,z.jsxs)(`div`,{id:s,hidden:!u,"aria-label":o(`tasks.completed`),className:`personal-task-lane-scroll`,ref:O,role:`region`,tabIndex:0,onScroll:e=>T({top:e.currentTarget.scrollTop,height:e.currentTarget.clientHeight}),children:[(0,z.jsx)(`div`,{className:`personal-completed-window`,style:{height:f.length*d},children:re.map(t=>{let n=f[t];return(0,z.jsx)(`div`,{className:`personal-task-card personal-completed-row`,style:{top:t*d,height:d},children:(0,z.jsxs)(`button`,{type:`button`,onFocus:()=>D(t),onBlur:()=>D(null),onClick:()=>a({kind:`todo`,item:{...n,goalId:e.goalId,goalTitle:e.title,ownerLabel:n.claimedBy??e.agentLabel??e.agentId}}),children:[(0,z.jsx)(`span`,{className:`is-done`,children:`✓`}),(0,z.jsx)(`strong`,{children:n.text}),(0,z.jsx)(`small`,{children:n.claimedBy??e.agentLabel??e.agentId})]})},n.todoId)})}),(0,z.jsx)(`div`,{className:`personal-completed-footer`,role:`status`,children:v?o(`tasks.historyLoading`):b?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`span`,{children:o(S?`tasks.historyExpired`:`tasks.historyError`)}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>{S&&(_(void 0),O.current&&(O.current.scrollTop=0)),C(!1),x(!1),A(e=>e+1)},children:o(`tasks.historyRetry`)})]}):r?g===null?o(`tasks.historyEnd`):(0,z.jsx)(`button`,{type:`button`,onClick:()=>{O.current&&(O.current.scrollTop=f.length*d)},children:o(`tasks.historyMore`)}):o(`tasks.historyLocalOnly`)})]})]})}function rb({children:e,count:t,label:n,tone:r,listView:i=!1}){let a=(0,R.useId)(),o=(0,R.useRef)(null),s=(0,R.useRef)([]),c=(0,R.useRef)(null),[l,u]=(0,R.useState)({after:!1,before:!1}),d=(0,R.useCallback)(()=>{let e=o.current;if(!e)return;let t={after:Math.max(0,e.scrollHeight-e.clientHeight)-e.scrollTop>1,before:e.scrollTop>1};u(e=>e.after===t.after&&e.before===t.before?e:t)},[]);return(0,R.useEffect)(()=>{let e=o.current;if(!e)return;let t=new ResizeObserver(d);return c.current=t,t.observe(e),e.addEventListener(`scroll`,d,{passive:!0}),d(),()=>{t.disconnect(),c.current=null,s.current=[],e.removeEventListener(`scroll`,d)}},[i,d]),(0,R.useEffect)(()=>{let e=o.current,t=c.current;if(!e||!t)return;for(let e of s.current)t.unobserve(e);let n=Array.from(e.children).filter(e=>e instanceof HTMLElement);for(let e of n)t.observe(e);s.current=n,d()},[e,t,i,d]),i?!t&&r!==`done`?null:(0,z.jsxs)(`details`,{className:`personal-task-group tone-${r}`,open:!0,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(qp,{size:16}),(0,z.jsx)(`strong`,{children:n}),(0,z.jsx)(`span`,{children:t})]}),(0,z.jsx)(`div`,{className:`personal-task-list-rows`,children:e})]}):(0,z.jsxs)(`section`,{className:`personal-object-list personal-task-lane`,children:[(0,z.jsxs)(`header`,{id:a,children:[(0,z.jsxs)(`strong`,{children:[(0,z.jsx)(`i`,{"aria-hidden":`true`,className:`personal-kanban-dot tone-${r}`}),n]}),(0,z.jsx)(`span`,{children:t})]}),(0,z.jsx)(`div`,{"aria-labelledby":a,className:`personal-task-lane-scroll${l.before?` has-overflow-before`:``}${l.after?` has-overflow-after`:``}`,ref:o,role:`region`,tabIndex:t>0?0:-1,children:e})]})}function ib({historyEnabled:e=!1,goal:t,items:n,onDraftTaskFromMessage:r,onOpenChat:i,onQuickComplete:a,quickCompletingTodoIds:o,onSelect:s,selectedTodoId:c=null,userTodos:l}){let{t:u}=Ji(),[d,f]=(0,R.useState)(!1),[p,m]=(0,R.useState)({goalId:``,laneId:`all`}),h=(0,R.useRef)(null);(0,R.useEffect)(()=>{if(!c)return;let e=window.requestAnimationFrame(()=>h.current?.scrollIntoView({block:`nearest`,inline:`nearest`}));return()=>window.cancelAnimationFrame(e)},[c]);let g=l.filter(e=>e.goalId===t.goalId).map(e=>({...e,goalTitle:t.title})),_=e=>e.priority===`P0`?0:e.priority===`P1`?1:e.priority===`P2`?2:3,v=(0,R.useMemo)(()=>{let e=new Map((t.agentLanes??[]).map(e=>[e.agentId,e]));for(let n of t.agentTodos)n.claimedBy&&!e.has(n.claimedBy)&&e.set(n.claimedBy,{agentId:n.claimedBy,label:n.claimedBy});return[...e.values()]},[t.agentLanes,t.agentTodos]),y=p.goalId===t.goalId&&v.some(e=>e.agentId===p.laneId)?p.laneId:`all`,b=e=>y===`all`||e===y,x=t.agentTodos.filter(e=>e.taskClass!==`continuous_monitor`&&!e.done).filter(e=>b(e.claimedBy)).sort((e,t)=>_(e)-_(t)),S=t.agentTodos.filter(e=>e.taskClass!==`continuous_monitor`&&e.done).filter(e=>b(e.claimedBy)),C=n.filter(e=>e.kind===`schedule`&&b(e.schedule.agentId)),w=n.filter(e=>e.kind===`run`&&!!e.run.todoId&&b(e.run.agentId)),T=!g.length&&!x.length&&!S.length&&!C.length,E=n.filter(e=>e.kind===`message`&&(e.message.role===`user`||e.message.role===`assistant`)),D=E.reduce((e,t,n)=>t.message.role===`user`?n:e,-1),O=D>=0?E[D]?.message:null,k=D>=0?E.slice(D+1).reverse().find(e=>e.message.role===`assistant`)?.message:null,ee=D>=0&&E.slice(D+1).some(e=>e.message.role===`assistant`&&e.message.pending);return(0,z.jsxs)(`section`,{"aria-label":u(`header.tasks`),className:`personal-task-board${d?` is-list-view`:``}`,children:[(0,z.jsxs)(`header`,{className:`personal-task-view-toolbar`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:u(`header.tasks`)}),(0,z.jsx)(`span`,{children:u(`tasks.viewDescription`)})]}),(0,z.jsxs)(`div`,{className:`personal-task-view-switch`,role:`group`,"aria-label":u(`tasks.viewLabel`),children:[(0,z.jsx)(`button`,{type:`button`,"aria-pressed":d,onClick:()=>f(!0),children:u(`tasks.listView`)}),(0,z.jsx)(`button`,{type:`button`,"aria-pressed":!d,onClick:()=>f(!1),children:u(`tasks.boardView`)})]})]}),v.length>1?(0,z.jsxs)(`section`,{"aria-label":u(`tasks.agentLaneFilter`),className:`personal-task-lane-filter`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(Up,{size:15}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:u(`tasks.agentLane`)}),(0,z.jsx)(`small`,{children:u(`tasks.agentLaneDescription`)})]})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{className:`sr-only`,children:u(`tasks.agentLaneFilter`)}),(0,z.jsxs)(`select`,{"aria-label":u(`tasks.agentLaneFilter`),onChange:e=>m({goalId:t.goalId,laneId:e.target.value}),value:y,children:[(0,z.jsx)(`option`,{value:`all`,children:u(`tasks.allAgentLanes`,{count:v.length})}),v.map(e=>(0,z.jsx)(`option`,{value:e.agentId,children:e.label},e.agentId))]}),(0,z.jsx)(qp,{"aria-hidden":!0,size:14})]})]}):null,O?(0,z.jsxs)(`section`,{"aria-label":u(`tasks.chatRecent`),className:`personal-task-chat-receipt`,children:[(0,z.jsx)(`span`,{className:`personal-task-chat-icon`,children:(0,z.jsx)(ym,{size:18})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:u(ee?`tasks.chatPending`:k?`tasks.chatAgentReplied`:`tasks.chatRecent`)}),(0,z.jsx)(`small`,{children:t.agentLabel??t.agentId})]}),(0,z.jsxs)(`p`,{className:`is-user`,children:[(0,z.jsx)(`b`,{children:u(`common.you`)}),O.text]}),k&&!k.pending?(0,z.jsxs)(`p`,{className:`is-assistant`,children:[(0,z.jsx)(`b`,{children:u(`common.agent`)}),k.text]}):null,(0,z.jsx)(`small`,{children:u(ee?`tasks.chatPendingDescription`:`tasks.chatUnchangedDescription`)})]}),(0,z.jsxs)(`footer`,{children:[(0,z.jsxs)(`button`,{onClick:i,type:`button`,children:[(0,z.jsx)(ym,{size:14}),u(`tasks.chatViewReply`)]}),k&&!ee&&r?(0,z.jsxs)(`button`,{onClick:()=>r(k.text),type:`button`,children:[(0,z.jsx)(mm,{size:14}),u(`tasks.convertToTask`)]}):null]})]}):null,(0,z.jsxs)(`div`,{className:d?`personal-task-grouped-list`:`personal-task-kanban`,children:[(0,z.jsxs)(rb,{listView:d,count:g.length,label:u(`timeline.waitingConfirmation`),tone:`attention`,children:[g.map(e=>{let t=Zi(e.updatedAt,u);return(0,z.jsxs)(`button`,{onClick:()=>s({item:e,kind:`attention`}),type:`button`,children:[(0,z.jsx)(`span`,{"aria-hidden":`true`,className:`is-attention`,children:`!`}),(0,z.jsx)(`strong`,{children:e.text}),(0,z.jsxs)(`small`,{children:[(0,z.jsx)(`span`,{className:`personal-row-status ${e.blocking?`is-blocking`:`is-pending`}`,children:e.blocking?u(`tasks.blocked`):u(`tasks.pending`)}),t?(0,z.jsx)(`span`,{className:`personal-task-age`,children:u(`tasks.waitingAge`,{age:t})}):null]})]},e.todoId)}),g.length?null:(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyConfirm`)})]}),(0,z.jsxs)(rb,{listView:d,count:x.length,label:u(`tasks.pendingAndRunning`),tone:`progress`,children:[x.map(e=>{let n={...e,goalId:t.goalId,goalTitle:t.title,ownerLabel:e.claimedBy??t.agentLabel??t.agentId},r=w.find(t=>t.run.todoId===e.todoId)?.run;return(0,z.jsxs)(`div`,{className:`personal-task-card${r?` has-session`:``}${c===e.todoId?` is-selected`:``}`,ref:c===e.todoId?e=>{h.current=e}:void 0,children:[(0,z.jsxs)(`button`,{"aria-pressed":c===e.todoId,onClick:()=>s({item:n,kind:`todo`}),type:`button`,children:[(0,z.jsx)(`span`,{children:`○`}),(0,z.jsx)(`strong`,{children:e.text}),(0,z.jsxs)(`small`,{children:[e.priority?(0,z.jsx)(`span`,{className:`personal-priority-badge is-${e.priority.toLowerCase()}`,children:e.priority}):null,e.status===`blocked`?(0,z.jsx)(`span`,{className:`personal-priority-badge is-blocked`,children:u(`tasks.blocked`)}):null,r?(0,z.jsx)(`span`,{className:`personal-task-session-status`,children:r.status===`running`||r.status===`queued`?u(`runs.running`):r.status===`failed`?u(`tasks.sessionError`):u(`common.waiting`)}):null,e.status===`deferred`?(0,z.jsx)(`span`,{className:`personal-task-session-status`,children:u(`drawer.taskStatusDeferred`)}):r?null:(0,z.jsx)(`span`,{className:`personal-task-session-status`,children:u(`tasks.waiting`)}),e.claimedBy??t.agentLabel??t.agentId]})]}),(0,z.jsxs)(`div`,{className:`personal-task-card-actions`,children:[r?(0,z.jsxs)(`button`,{className:`personal-task-session-link`,"aria-label":u(`tasks.openExecution`,{name:e.text}),onClick:()=>s({item:r,kind:`run`}),title:r.status===`completed`?u(`tasks.viewResult`):u(`tasks.viewExecution`),type:`button`,children:[(0,z.jsx)(im,{size:14}),(0,z.jsx)(`span`,{children:r.status===`completed`?u(`tasks.viewResult`):u(`tasks.viewExecution`)})]}):null,a?(0,z.jsx)(`button`,{"aria-busy":o?.has(e.todoId)||void 0,"aria-label":u(`tasks.markComplete`,{name:e.text}),disabled:o?.has(e.todoId),onClick:()=>void a(n),title:u(`tasks.completed`),type:`button`,children:o?.has(e.todoId)?(0,z.jsx)(hm,{className:`personal-spin`,size:14}):(0,z.jsx)(Kp,{size:14})}):null,(0,z.jsx)(`button`,{"aria-label":u(`tasks.moreActions`,{name:e.text}),onClick:()=>s({item:n,kind:`todo`}),title:u(`common.actions`),type:`button`,children:(0,z.jsx)(rm,{size:14})})]})]},e.todoId)}),x.length?null:(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyRunning`)})]}),(0,z.jsxs)(rb,{listView:d,count:C.length,label:u(`tasks.scheduled`),tone:`schedule`,children:[C.map(e=>(0,z.jsxs)(`button`,{onClick:()=>s({item:e.schedule,kind:`schedule`}),type:`button`,children:[(0,z.jsx)(`span`,{children:`◷`}),(0,z.jsx)(`strong`,{children:e.schedule.label}),(0,z.jsx)(`small`,{children:e.schedule.status===`paused`?u(`schedule.paused`):u(`schedule.active`)})]},e.id)),C.length?null:(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptySchedules`)})]}),(0,z.jsx)(nb,{goal:t,agentId:y,seed:S,enabled:e,listView:d,onSelect:s},`${t.goalId}:${y}:${e}`)]}),T?(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyGoal`)}):null]})}function ab(e,t){return{live_steering:{label:t(`lark.ingressSteering`),detail:t(`lark.ingressSteeringDescription`)},session_queue:{label:t(`lark.ingressQueue`),detail:t(`lark.ingressQueueDescription`)},async_inbox:{label:t(`lark.ingressAsync`),detail:t(`lark.ingressAsyncDescription`)},direct_session:{label:t(`lark.ingressLegacy`),detail:t(`lark.ingressLegacyDescription`)}}[e]}function ob(e,t){return e.listener_status===`starting`?{label:t(`lark.health.starting`),detail:t(`lark.health.startingDetail`),ready:!1}:e.listener_status===`retrying`?{label:t(`lark.health.retrying`),detail:t(`lark.health.retryingDetail`),ready:!1}:e.listener_status===`stopped`||e.listener_status===null?{label:t(`lark.health.notStarted`),detail:t(`lark.health.notStartedDetail`),ready:!1}:e.last_event_status===`message_context_permission_required`?{label:t(`lark.health.messageContextPermission`),detail:t(`lark.health.messageContextPermissionDetail`),ready:!1}:e.last_event_status===`processing_failed`?{label:t(`lark.health.processingFailed`),detail:t(`lark.health.processingFailedDetail`),ready:!1}:e.health_error_code===`invalid_routing_state`?{label:t(`lark.health.invalidRouting`),detail:t(`lark.health.invalidRoutingDetail`),ready:!1}:e.last_event_status===`queued_for_agent`?{label:t(`lark.health.queued`),detail:t(`lark.health.queuedDetail`,{agent:e.agent_id??t(`lark.targetAgent`)}),ready:!0}:e.last_event_status===`ignored`&&e.last_event_reason===`not_addressed`?{label:t(`lark.health.notAddressed`),detail:t(`lark.health.notAddressedDetail`),ready:!0}:e.last_event_status===`ignored`&&e.last_event_reason===`self_message`?{label:t(`lark.health.listening`),detail:t(`lark.health.ignoredSelf`),ready:!0}:e.health_error_code===`lark_event_route_mismatch`||[`chat_mismatch`,`topic_mismatch`,`route_ambiguous`].includes(e.last_event_reason??``)?{label:e.last_event_reason===`route_ambiguous`?t(`lark.health.routeAmbiguous`):t(`lark.health.routeMismatch`),detail:e.last_event_reason===`route_ambiguous`?t(`lark.health.routeAmbiguousDetail`):t(`lark.health.routeMismatchDetail`),ready:!1}:[`invalid_event`,`binding_unavailable`].includes(e.last_event_reason??``)?{label:t(`lark.health.routeUnavailable`),detail:t(`lark.health.routeUnavailableDetail`),ready:!1}:e.last_event_status===`replied_and_acknowledged`?{label:t(`lark.health.listening`),detail:t(`lark.health.eventProcessed`,{events:e.event_count,replies:e.replied_count}),ready:!0}:e.health_error_code===`lark_event_delivery_unverified`||e.event_count===0?{label:t(`lark.health.eventUnverified`),detail:t(`lark.health.eventUnverifiedDetail`),ready:!1}:{label:e.reply_ready?t(`lark.health.listening`):t(`lark.health.unavailable`),detail:t(`lark.health.lastStatus`,{status:e.last_event_status??t(`lark.health.waiting`)}),ready:e.reply_ready}}function sb(e){return e.history_permission_guidance?.api_document_url??null}function cb(e,t,n){if(e instanceof _h){let t=String(e.payload.error_code??``);return{lark_cli_not_installed:n(`lark.error.cliMissing`),lark_cli_not_executable:n(`lark.error.cliExecutable`),lark_cli_start_failed:n(`lark.error.cliStart`),lark_message_permissions_required:n(`lark.error.messagePermissions`),lark_app_required:n(`lark.error.appRequired`),invalid_lark_app:n(`lark.error.invalidApp`),lark_group_lookup_failed:n(`lark.error.groupLookup`),provider_api_failed:n(`lark.error.provider`)}[t]??e.message}return e instanceof Error?e.message:t}function lb({embedded:e=!1,focusGoalConnection:t=!1,goals:n,initialGoalId:r,onChanged:i,onClose:a}){let{t:o}=Ji(),[s,c]=(0,R.useState)(`connections`),[l,u]=(0,R.useState)([]),[d,f]=(0,R.useState)([]),[p,m]=(0,R.useState)(!0),[h,g]=(0,R.useState)(null),[_,v]=(0,R.useState)(``),[y,b]=(0,R.useState)(t),[x,S]=(0,R.useState)(``),[C,w]=(0,R.useState)(r??n[0]?.goalId??``),[T,E]=(0,R.useState)(``),[D,O]=(0,R.useState)([]),[k,ee]=(0,R.useState)(``),[A,j]=(0,R.useState)(!1),[te,ne]=(0,R.useState)(null),[re,M]=(0,R.useState)(`addressed_only`),[N,ie]=(0,R.useState)(`async_inbox`),[ae,oe]=(0,R.useState)(`topic_reply`),[P,F]=(0,R.useState)(``),[I,se]=(0,R.useState)(!1),[ce,le]=(0,R.useState)({}),[ue,de]=(0,R.useState)(!1),[fe,pe]=(0,R.useState)(null),[me,he]=(0,R.useState)(null),[ge,_e]=(0,R.useState)(null),[ve,ye]=(0,R.useState)(!1),[be,xe]=(0,R.useState)(`loopx-workspace-bot`),[Se,Ce]=(0,R.useState)(`feishu`),[we,Te]=(0,R.useState)(null),[Ee,De]=(0,R.useState)(!1),[L,Oe]=(0,R.useState)(null),ke=(0,R.useRef)(null),Ae=(0,R.useRef)(null),je=(0,R.useRef)(!1);async function Me(){m(!0),g(null);try{let[e,t]=await Promise.all([Og(),Lg()]);u(e),f(t),S(t=>t||e.find(e=>e.reply_ready)?.app_ref||e.find(e=>e.ready)?.app_ref||e[0]?.app_ref||``)}catch(e){g(cb(e,o(`lark.error.configuration`),o))}finally{m(!1)}}(0,R.useEffect)(()=>{Me()},[]),(0,R.useEffect)(()=>{if(!t||p||je.current||!r)return;je.current=!0;let e=d.find(e=>e.goal_id===r);e?Ue(e):He(n.find(e=>e.goalId===r))},[d,t,n,r,p]),(0,R.useEffect)(()=>{if(!y||!x){O([]),ee(``),j(!1),ne(null);return}let e=!1;j(!0),ne(null);let t=window.setTimeout(()=>{Fg(x,T).then(t=>{e||(O(t),ee(e=>t.some(t=>t.chat_id===e)?e:t[0]?.chat_id??``))}).catch(t=>{e||(O([]),ee(``),ne(cb(t,o(`lark.error.groupLoad`),o)))}).finally(()=>{e||j(!1)})},180);return()=>{e=!0,window.clearTimeout(t)}},[x,T,y]),(0,R.useEffect)(()=>{if(!ve||!we||[`ready`,`failed`,`cancelled`].includes(we.status))return;let e=!1,t=window.setTimeout(()=>{jg(we.setup_id).then(async t=>{e||(Te(t),t.verification_url&&Ae.current!==t.verification_url&&(Ae.current=t.verification_url,ke.current&&!ke.current.closed&&(ke.current.location.href=t.verification_url)),t.status===`ready`&&(await Me(),S(t.app_ref),le({}),ye(!1)),t.status===`failed`&&Oe(t.error??o(`lark.error.appCreate`)))}).catch(t=>{e||Oe(cb(t,o(`lark.error.setupPoll`),o))})},650);return()=>{e=!0,window.clearTimeout(t)}},[ve,we]);let Ne=n.find(e=>e.goalId===C),Pe=Ne?.agentId?[{agentId:Ne.agentId,label:Ne.agentLabel??Ne.agentId}]:[],Fe=Ne?.agentLanes?.length?Ne.agentLanes:Pe,Ie=Fe.some(e=>e.agentId===P),B=[];I?B=Fe.map(e=>({agentId:e.agentId,appRef:ce[e.agentId]??x})):Ie&&(B=[{agentId:P,appRef:x}]);let Le=B.map(e=>e.agentId),Re=B.length>0&&B.every(e=>l.some(t=>t.app_ref===e.appRef&&t.reply_ready)),V=o(`lark.connect`);me?V=o(`lark.saveConnection`):I&&(V=o(`lark.connectAllAgentsAction`,{count:Le.length}));let ze=l.find(e=>e.app_ref===x),Be=D.find(e=>e.chat_id===k),Ve=(0,R.useMemo)(()=>{let e=_.trim().toLocaleLowerCase();return e?d.filter(t=>[t.app_label,t.chat_name,t.goal_title,t.topic_name].some(t=>t.toLocaleLowerCase().includes(e))):d},[d,_]);function He(e){let t=e??n.find(e=>e.goalId===r)??n[0];he(null),w(t?.goalId??``),F(t?.agentId??``),se(!1),le({}),M(`addressed_only`),ie(`async_inbox`),oe(`topic_reply`),E(``),pe(null),b(!0)}function Ue(e){he(e.goal_id),S(e.app_ref),w(e.goal_id),F(e.agent_id??n.find(t=>t.goalId===e.goal_id)?.agentId??``),se(!1),le({}),M(e.capture_scope),ie(e.ingress_mode===`direct_session`?`session_queue`:e.ingress_mode),oe(e.reply_mode),E(e.chat_name),pe(null),b(!0)}function We(){Te(null),Oe(null),Ae.current=null,ye(!0)}async function Ge(){if(!(Ee||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(be))){De(!0),Oe(null),Ae.current=null,ke.current=window.open(window.location.href,`_blank`);try{let e=await Ag({appRef:be,brand:Se});Te(e)}catch(e){ke.current?.close(),Oe(cb(e,o(`lark.error.setupStart`),o))}finally{De(!1)}}}async function Ke(){let e=we;if(ye(!1),ke.current?.close(),e&&![`ready`,`failed`,`cancelled`].includes(e.status))try{await Mg(e.setup_id)}catch{}}async function qe(){if(!(!x||!C||!Be||Le.length===0||ue)){de(!0),pe(null);try{let e={agentBindings:B,captureScope:re,chatId:Be.chat_id,chatName:Be.chat_name,goalId:C,incomingMode:re===`configured_chat_all`?`all`:`mentions`,ingressMode:N,replyMode:ae},t=await Rg({...e,execute:!1});if(!t.ok)throw new _h(t.public_summary??t.blocker??o(`lark.error.bindPreview`),{error_code:t.blocker??`provider_api_failed`});let n=await Rg({...e,execute:!0});if(!n.ok)throw new _h(n.public_summary??n.blocker??o(`lark.error.bind`),{error_code:n.blocker??`provider_api_failed`});b(!1),await Me(),i?.()}catch(e){pe(cb(e,o(`lark.error.bind`),o))}finally{de(!1)}}}async function Je(e,t){if(ge!==t){_e(t);return}try{await zg(e,t),_e(null),await Me(),i?.()}catch(e){g(cb(e,o(`lark.error.disconnect`),o))}}return(0,z.jsxs)(`section`,{className:`personal-lark-settings${e?` is-embedded`:``}`,"aria-label":o(`lark.configuration`),children:[e?null:(0,z.jsxs)(`header`,{className:`personal-lark-header`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:o(`settings.goalConnections`)}),(0,z.jsx)(`h1`,{children:`Lark`}),(0,z.jsx)(`p`,{children:o(`lark.description`)})]}),(0,z.jsx)(`button`,{"aria-label":o(`lark.closeSettings`),className:`personal-icon-button`,onClick:a,type:`button`,children:(0,z.jsx)(Gm,{size:18})})]}),(0,z.jsxs)(`nav`,{className:`personal-lark-tabs`,"aria-label":o(`lark.management`),children:[(0,z.jsxs)(`button`,{"aria-current":s===`apps`?`page`:void 0,onClick:()=>c(`apps`),type:`button`,children:[o(`lark.apps`),` `,(0,z.jsx)(`span`,{children:p?`…`:l.length})]}),(0,z.jsxs)(`button`,{"aria-current":s===`connections`?`page`:void 0,onClick:()=>c(`connections`),type:`button`,children:[o(`lark.connections`),` `,(0,z.jsx)(`span`,{children:p?`…`:d.length})]})]}),h?(0,z.jsx)(`p`,{className:`personal-notification-error`,children:h}):null,p?(0,z.jsxs)(`div`,{className:`personal-lark-loading`,children:[(0,z.jsx)(hm,{className:`is-spinning`,size:18}),o(`lark.loading`)]}):null,!p&&s===`apps`?(0,z.jsxs)(`div`,{className:`personal-lark-apps`,children:[(0,z.jsxs)(`div`,{className:`personal-lark-app-toolbar`,children:[(0,z.jsx)(`span`,{children:o(`lark.reusableApps`,{count:l.length})}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:We,type:`button`,children:[(0,z.jsx)(Em,{size:16}),o(`lark.newApp`)]})]}),(0,z.jsxs)(`div`,{className:`personal-lark-app-grid`,children:[l.map(e=>(0,z.jsxs)(`article`,{className:`personal-lark-app-card`,children:[(0,z.jsx)(`span`,{className:`personal-lark-app-avatar`,children:(0,z.jsx)(Up,{size:19})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsxs)(`small`,{children:[e.brand,` · lark-cli profile`]})]}),(0,z.jsx)(`em`,{className:e.reply_ready?`is-ready`:`is-off`,children:e.reply_ready?o(`lark.autoReplyReady`):e.ready?o(`lark.needsMessagePermissions`):o(`lark.needsSetup`)}),(0,z.jsxs)(`p`,{children:[o(`lark.goalConnections`,{count:d.filter(t=>t.app_ref===e.app_ref).length}),e.ready&&!e.reply_ready?` · ${o(`lark.autoReplyUnavailable`)}`:``]})]},e.app_ref)),l.length===0?(0,z.jsx)(`p`,{className:`personal-lark-empty`,children:o(`lark.noProfiles`)}):null]})]}):null,!p&&s===`connections`?(0,z.jsxs)(`div`,{className:`personal-lark-connections`,children:[(0,z.jsxs)(`div`,{className:`personal-lark-toolbar`,children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(jm,{size:16}),(0,z.jsx)(`input`,{"aria-label":o(`lark.searchConnections`),onChange:e=>v(e.target.value),placeholder:o(`lark.searchPlaceholder`),type:`search`,value:_})]}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:l.length===0||n.length===0,onClick:()=>He(),type:`button`,children:[(0,z.jsx)(Em,{size:16}),o(`lark.connectApp`)]})]}),(0,z.jsxs)(`div`,{className:`personal-lark-table`,role:`table`,"aria-label":o(`lark.goalTopicConnections`),children:[(0,z.jsxs)(`div`,{className:`personal-lark-table-head`,role:`row`,children:[(0,z.jsx)(`span`,{children:o(`lark.connection`)}),(0,z.jsx)(`span`,{children:o(`common.goal`)}),(0,z.jsx)(`span`,{children:o(`lark.capture`)}),(0,z.jsx)(`span`,{children:o(`lark.processing`)}),(0,z.jsx)(`span`,{children:o(`common.actions`)})]}),Ve.map(e=>(0,z.jsxs)(`div`,{className:`personal-lark-table-row`,role:`row`,children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.chat_name}),(0,z.jsxs)(`small`,{children:[e.app_label,` · `,ob(e,o).label]}),(0,z.jsx)(`small`,{children:ob(e,o).detail}),e.health_error_code===`lark_event_delivery_unverified`?(0,z.jsxs)(`a`,{href:`https://open.feishu.cn/document/server-docs/im-v1/message/events/receive?lang=zh-CN`,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(im,{size:12}),o(`lark.openEventSettings`)]}):null,sb(e)?(0,z.jsxs)(`a`,{href:sb(e)??void 0,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(im,{size:12}),o(`lark.historyPermission`)]}):null]}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.goal_title}),(0,z.jsxs)(`small`,{children:[`# `,e.topic_name]})]}),(0,z.jsx)(`span`,{children:e.capture_scope===`addressed_only`?o(`lark.mentionsOnly`):o(`lark.allTopicMessages`)}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:ab(e.ingress_mode,o).label}),(0,z.jsx)(`small`,{children:e.agent_id??ab(e.ingress_mode,o).detail})]}),(0,z.jsxs)(`span`,{className:`personal-lark-row-actions`,children:[(0,z.jsx)(`button`,{"aria-label":o(`lark.settingsConfigure`,{goal:e.goal_title}),onClick:()=>Ue(e),type:`button`,children:(0,z.jsx)(Fm,{size:15})}),(0,z.jsxs)(`button`,{"aria-label":o(`lark.settingsDisconnect`,{goal:e.goal_title}),className:ge===e.connection_id?`is-confirm`:``,onClick:()=>void Je(e.goal_id,e.connection_id),type:`button`,children:[(0,z.jsx)(Wm,{size:15}),ge===e.connection_id?o(`common.confirm`):null]})]})]},e.connection_id)),Ve.length===0?(0,z.jsx)(`p`,{className:`personal-lark-empty`,children:o(`lark.noConnections`)}):null]})]}):null,y?(0,z.jsx)(`div`,{className:`personal-lark-modal-backdrop`,role:`presentation`,children:(0,z.jsxs)(`section`,{"aria-labelledby":`connect-lark-title`,"aria-modal":`true`,className:`personal-lark-modal`,role:`dialog`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:`Goal Topic connection`}),(0,z.jsx)(`h2`,{id:`connect-lark-title`,children:o(me?`lark.editConnection`:`lark.connectApp`)})]}),(0,z.jsx)(`button`,{"aria-label":o(`lark.closeConnection`),onClick:()=>b(!1),type:`button`,children:(0,z.jsx)(Gm,{size:18})})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.appProfile`)}),(0,z.jsx)(`select`,{"aria-label":o(`lark.appProfile`),disabled:p,onChange:e=>{e.target.value===`__register__`?We():(S(e.target.value),le({}))},value:x,children:p?(0,z.jsx)(`option`,{value:``,children:o(`lark.appLoading`)}):(0,z.jsxs)(z.Fragment,{children:[l.map(e=>(0,z.jsxs)(`option`,{disabled:!e.ready,value:e.app_ref,children:[e.label,e.reply_ready?``:e.ready?` · ${o(`lark.needsMessagePermissions`)}`:` · ${o(`lark.needsSetup`)}`]},e.app_ref)),(0,z.jsx)(`option`,{value:`__register__`,children:o(`lark.registerAnother`)})]})}),(0,z.jsx)(`small`,{children:o(`lark.defaultAgentAppDescription`)})]}),ze?.ready&&!ze.reply_ready?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:o(`lark.appPermissions`)}):null,(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.groupChat`)}),(0,z.jsx)(`input`,{"aria-label":o(`lark.groupSearch`),onChange:e=>E(e.target.value),placeholder:o(`lark.groupSearch`),type:`search`,value:T}),A?(0,z.jsxs)(`div`,{className:`personal-lark-group-state`,role:`status`,children:[(0,z.jsx)(hm,{className:`is-spinning`,size:15}),o(`lark.groupLoading`)]}):null,!A&&te?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:te}):null,!A&&!te&&D.length===0?(0,z.jsx)(`div`,{className:`personal-lark-group-state`,role:`status`,children:o(`lark.groupEmpty`)}):null,!A&&!te&&D.length>0?(0,z.jsx)(`select`,{"aria-label":o(`lark.groupChat`),onChange:e=>ee(e.target.value),value:k,children:D.map(e=>(0,z.jsx)(`option`,{value:e.chat_id,children:e.chat_name},e.chat_id))}):null]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.bindGoal`)}),(0,z.jsx)(`select`,{"aria-label":o(`lark.bindGoal`),onChange:e=>{let t=e.target.value;w(t),F(n.find(e=>e.goalId===t)?.agentId??``),le({})},value:C,children:n.map(e=>(0,z.jsx)(`option`,{value:e.goalId,children:e.title},e.goalId))})]}),(0,z.jsxs)(`label`,{className:`personal-lark-check`,children:[(0,z.jsx)(`input`,{checked:!0,readOnly:!0,type:`checkbox`}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:o(`lark.createAutomatically`)}),(0,z.jsx)(`small`,{children:o(`lark.createAutomaticallyDescription`)})]})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.topicPreview`)}),(0,z.jsxs)(`div`,{className:`personal-lark-topic-preview`,children:[(0,z.jsx)(ym,{size:15}),`# `,Ne?.title??Ne?.goalId??`Goal`]})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.captureScope`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.captureScope`),onChange:e=>M(e.target.value),value:re,children:[(0,z.jsx)(`option`,{value:`addressed_only`,children:o(`lark.captureAddressed`)}),(0,z.jsx)(`option`,{value:`configured_chat_all`,children:o(`lark.captureAll`)})]}),(0,z.jsx)(`small`,{children:o(`lark.captureScopeDescription`)})]}),(0,z.jsxs)(`fieldset`,{"aria-label":o(`lark.agentIngress`),className:`personal-lark-ingress`,children:[(0,z.jsx)(`legend`,{children:o(`lark.agentIngress`)}),(0,z.jsx)(`div`,{children:[`live_steering`,`session_queue`,`async_inbox`].map(e=>{let t=ab(e,o);return(0,z.jsxs)(`label`,{className:N===e?`is-active`:``,children:[(0,z.jsx)(`input`,{"aria-label":t.label,checked:N===e,name:`lark-agent-ingress`,onChange:()=>ie(e),type:`radio`,value:e}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:t.label}),(0,z.jsx)(`small`,{children:t.detail})]})]},e)})})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.targetAgent`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.targetAgent`),onChange:e=>F(e.target.value),value:P,children:[Ie?null:(0,z.jsx)(`option`,{disabled:!0,value:P,children:P?o(`lark.agentUnavailable`,{agent:P}):o(`lark.noAgentConfigured`)}),Fe.map(e=>(0,z.jsx)(`option`,{value:e.agentId,children:e.label===e.agentId?e.agentId:`${e.label} · ${e.agentId}`},e.agentId))]}),(0,z.jsx)(`small`,{children:o(`lark.targetAgentDescription`)})]}),!me&&Fe.length>1?(0,z.jsxs)(`label`,{"aria-label":o(`lark.connectAllAgents`),className:`personal-lark-check`,children:[(0,z.jsx)(`input`,{checked:I,onChange:e=>se(e.target.checked),type:`checkbox`}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:o(`lark.connectAllAgents`)}),(0,z.jsx)(`small`,{children:o(`lark.connectAllAgentsDescription`,{count:Fe.length})})]})]}):null,!me&&I&&Fe.length>1?(0,z.jsxs)(`fieldset`,{"aria-label":o(`lark.agentApps`),className:`personal-lark-agent-apps`,children:[(0,z.jsx)(`legend`,{children:o(`lark.agentApps`)}),(0,z.jsx)(`small`,{children:o(`lark.agentAppsDescription`)}),(0,z.jsx)(`div`,{children:Fe.map(e=>(0,z.jsxs)(`label`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.agentId})]}),(0,z.jsx)(`select`,{"aria-label":o(`lark.agentAppSelection`,{agent:e.label}),onChange:t=>le(n=>({...n,[e.agentId]:t.target.value})),value:ce[e.agentId]??x,children:l.map(e=>(0,z.jsxs)(`option`,{disabled:!e.ready,value:e.app_ref,children:[e.label,e.reply_ready?``:e.ready?` · ${o(`lark.needsMessagePermissions`)}`:` · ${o(`lark.needsSetup`)}`]},e.app_ref))})]},e.agentId))})]}):null,I&&B.length>0&&!Re?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:o(`lark.agentAppPermissions`)}):null,Le.length===0?(0,z.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:o(`lark.selectRegisteredAgent`)}):null,(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.replyMode`)}),(0,z.jsx)(`select`,{"aria-label":o(`lark.replyMode`),onChange:e=>oe(e.target.value),value:ae,children:(0,z.jsx)(`option`,{value:`topic_reply`,children:o(`lark.topicReply`)})}),(0,z.jsx)(`small`,{children:o(`lark.replyModeDescription`)})]}),(0,z.jsxs)(`p`,{className:`personal-lark-cardinality`,children:[(0,z.jsx)(Kp,{size:15}),o(`lark.cardinality`)]}),fe?(0,z.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:fe}):null,(0,z.jsxs)(`footer`,{children:[(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>b(!1),type:`button`,children:o(`lark.cancel`)}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:p||!x||!ze?.reply_ready||!Re||!C||!k||Le.length===0||ue,onClick:()=>void qe(),type:`button`,children:[ue?(0,z.jsx)(hm,{className:`is-spinning`,size:15}):null,V]})]})]})}):null,ve?(0,z.jsx)(`div`,{className:`personal-lark-modal-backdrop is-setup`,role:`presentation`,children:(0,z.jsxs)(`section`,{"aria-labelledby":`new-lark-app-title`,"aria-modal":`true`,className:`personal-lark-modal personal-lark-setup-modal`,role:`dialog`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:o(`lark.reusableWorkspaceApp`)}),(0,z.jsx)(`h2`,{id:`new-lark-app-title`,children:o(`lark.newApp`)})]}),(0,z.jsx)(`button`,{"aria-label":o(`lark.closeCreate`),onClick:()=>void Ke(),type:`button`,children:(0,z.jsx)(Gm,{size:18})})]}),we?(0,z.jsxs)(`div`,{className:`personal-lark-setup-progress`,children:[(0,z.jsx)(`span`,{className:`personal-lark-setup-icon is-${we.status}`,children:we.status===`ready`?(0,z.jsx)(Kp,{size:22}):(0,z.jsx)(hm,{className:we.status===`failed`?``:`is-spinning`,size:22})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:we.status===`ready`?o(`lark.appCreated`):we.status===`failed`?o(`lark.appCreateFailed`):o(`lark.waitingFeishu`)}),(0,z.jsx)(`p`,{children:we.status===`waiting_for_feishu`?o(`lark.waitingFeishuDescription`):we.status===`starting`?o(`lark.waitingLink`):we.error})]}),we.verification_url?(0,z.jsxs)(`a`,{href:we.verification_url,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(im,{size:15}),o(`lark.reopenFeishu`)]}):null]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{className:`personal-lark-setup-copy`,children:o(`lark.setupCopy`)}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.profileName`)}),(0,z.jsx)(`input`,{"aria-label":o(`lark.profileName`),autoComplete:`off`,onChange:e=>xe(e.target.value),placeholder:`loopx-workspace-bot`,value:be})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.region`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.region`),onChange:e=>Ce(e.target.value),value:Se,children:[(0,z.jsx)(`option`,{value:`feishu`,children:`Feishu`}),(0,z.jsx)(`option`,{value:`lark`,children:`Lark`})]})]}),be&&!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(be)?(0,z.jsx)(`p`,{className:`personal-notification-error`,children:o(`lark.profileValidation`)}):null]}),L?(0,z.jsx)(`p`,{className:`personal-notification-error`,children:L}):null,(0,z.jsxs)(`footer`,{children:[(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void Ke(),type:`button`,children:o(`lark.cancel`)}),we?null:(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:Ee||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(be),onClick:()=>void Ge(),type:`button`,children:[Ee?(0,z.jsx)(hm,{className:`is-spinning`,size:15}):(0,z.jsx)(im,{size:15}),o(`lark.continueFeishu`)]})]})]})}):null]})}function ub(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function db(e,t,n){let r=ub(t),i=ub(n);return Object.fromEntries(e.fields.flatMap(({key:e})=>{let t=r[e],n=i[e];return Object.hasOwn(r,e)&&t!=null?[[e,t]]:Object.hasOwn(i,e)&&n!=null?[[e,n]]:[]}))}function fb({children:e}){return e?(0,z.jsx)(`small`,{children:e}):null}function pb({copy:e,field:t,id:n,onChange:r,value:i}){let a=e[t.key]?.label??t.label,o=e[t.key]?.description??t.description,s=!r;if(t.input_kind===`boolean`)return(0,z.jsxs)(`label`,{className:`is-boolean`,htmlFor:n,children:[(0,z.jsx)(`span`,{children:a}),(0,z.jsx)(`input`,{checked:i===!0,id:n,onChange:r?e=>r(t.key,e.target.checked):void 0,readOnly:s,type:`checkbox`}),(0,z.jsx)(fb,{children:o})]});if(t.input_kind===`select`)return(0,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:a}),(0,z.jsxs)(`select`,{id:n,onChange:r?e=>r(t.key,e.target.value):void 0,value:typeof i==`string`?i:``,children:[(0,z.jsx)(`option`,{value:``}),(t.options??[]).map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]}),(0,z.jsx)(fb,{children:o})]});if(t.input_kind===`string_list`)return(0,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:a}),(0,z.jsx)(`textarea`,{id:n,onChange:r?e=>r(t.key,e.target.value.split(/\r?\n/u).filter(Boolean)):void 0,readOnly:s,rows:4,value:Array.isArray(i)?i.join(` +`):``}),(0,z.jsx)(fb,{children:o})]});let c=t.input_kind===`number`;return(0,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:a}),(0,z.jsx)(`input`,{id:n,max:t.maximum,min:t.minimum,onChange:r?e=>r(t.key,c?Number(e.target.value):e.target.value):void 0,readOnly:s,required:t.required,type:c?`number`:`text`,value:typeof i==`number`||typeof i==`string`?i:``}),(0,z.jsx)(fb,{children:o})]})}function mb({copy:e={},disabled:t=!1,editor:n,omitKeys:r=[],onChange:i,value:a}){let o=(0,R.useId)(),s=new Set(r);return(0,z.jsx)(`fieldset`,{className:`personal-capability-fields`,disabled:t,children:n.fields.filter(e=>!s.has(e.key)).map(t=>(0,z.jsx)(pb,{copy:e,field:t,id:`${o}-${t.key.replace(/[^a-z0-9_-]/gi,`-`)}`,onChange:i,value:a[t.key]},t.key))})}var hb={en:{change_quality_qualification:{displayName:`Change quality qualification`,description:`Prepares a provider-neutral review packet, allows at most one policy-authorized safe-fix pass, and can require an exact-diff receipt.`},explore_graph:{displayName:`Explore Graph`,description:`Organizes bounded exploration as a typed evidence graph so branches, findings, and synthesis remain inspectable.`},explore_harness:{displayName:`Explore Harness`,description:`Selects a capability-owned planning and research harness profile for bounded multi-step exploration.`},lark_event_inbox:{displayName:`Lark event inbox`,description:`Receives provider events through a local-private inbox binding before LoopX projects them into governed work.`,readOnlyReason:`This capability requires a local-private inbox binding. Manage it in Lark settings or through the capability CLI.`},lark_kanban_heartbeat_sync:{displayName:`Lark Kanban heartbeat sync`,description:`Synchronizes accepted LoopX work state to the configured Lark Kanban heartbeat surface.`},local_authority_shadow:{displayName:`Local authority shadow`,description:`Observes post-commit Todo and task-lease state through the shared authority contract without taking write authority.`},multi_subagent:{displayName:`Adaptive child capacity`,description:`Sets bounded child-agent capacity and the public-safe responsibility domains in which parallel work may be delegated.`},peer_task_coordination:{displayName:`Registered-peer task coordination`,description:`Routes explicitly scoped peer-owned work to one registered coordinator without granting cross-owner mutation authority.`},periodic_report:{displayName:`Periodic reports`,description:`Turns validated Goal stage progress into a frozen report and automatically delivers it through the configured Goal Channel with exact readback.`},reward_memory:{displayName:`Reward Memory experiment`,description:`Runs an opt-in, provider-bound retrieval experiment over an explicitly allowlisted memory corpus.`,readOnlyReason:`This capability requires a reviewed local-private provider binding and an explicit Agent allowlist. Configure it through the capability CLI.`}},"zh-CN":{change_quality_qualification:{displayName:`变更质量验证`,description:`生成与 Provider 无关的审阅包,最多允许一次策略授权的安全修复,并可要求精确 diff 回执。`},explore_graph:{displayName:`探索图谱`,description:`把有界探索组织为 typed 证据图,让探索分支、发现与综合结论都可检查、可追溯。`},explore_harness:{displayName:`探索 Harness`,description:`为有界的多步探索选择由能力负责的规划与研究 Harness profile。`},lark_event_inbox:{displayName:`飞书事件收件箱`,description:`通过本机私有收件箱接收 Provider 事件,再由 LoopX 将其投影为受治理的工作。`,readOnlyReason:`此能力依赖本机私有的收件箱绑定,请在飞书设置或 capability CLI 中管理。`},lark_kanban_heartbeat_sync:{displayName:`飞书看板心跳同步`,description:`把 LoopX 已接受的工作状态同步到配置好的飞书看板心跳界面。`},local_authority_shadow:{displayName:`本地 Authority 影子观测`,description:`通过共享 Authority contract 观测提交后的 Todo 与 task lease 状态,但不取得写入权。`},multi_subagent:{displayName:`自适应子 Agent 容量`,description:`限定子 Agent 容量与可公开的职责域,只有落在这些边界内的工作才能并行委派。`},peer_task_coordination:{displayName:`已注册 Peer 任务协调`,description:`把明确限定的 Peer 工作路由给一个已注册协调者,不授予跨 Owner 修改权限。`},periodic_report:{displayName:`周期报告`,description:`把经过验证的 Goal 阶段进展整理为冻结报告,并通过配置的 Goal Channel 自动发送和精确回读。`},reward_memory:{displayName:`Reward Memory 实验`,description:`在明确 allowlist 的记忆语料上运行可选、Provider 绑定的检索实验。`,readOnlyReason:`此能力依赖经过审阅的本机私有 Provider 绑定和明确的 Agent allowlist,请通过 capability CLI 配置。`}}},gb={en:{allowed_domains:{label:`Allowed responsibility domains`,description:`Enter one bounded, public-safe domain per line.`},coordinator_agent_id:{label:`Coordinator Agent`,description:`Use an already registered Agent id; leave blank to disable coordination.`},enabled:{label:`Enabled`},max_children:{label:`Maximum children`,description:`Hard upper bound for concurrently delegated child work.`},profile:{label:`Planner profile`,description:`Select one registered Explore Harness profile.`},profile_preset:{label:`Report profile`,description:`Capability-owned report profile, such as weekly-progress.`},route_ref:{label:`Goal Channel route`,description:`Public route alias only; credentials and provider identifiers stay outside this form.`},safe_fix:{label:`Allow one bounded safe-fix pass`},strict_receipt:{label:`Require an exact-diff receipt`},timezone:{label:`Timezone`,description:`Use an IANA timezone, for example Asia/Shanghai.`}},"zh-CN":{allowed_domains:{label:`允许的职责域`,description:`每行填写一个有边界、可公开的职责域。`},coordinator_agent_id:{label:`协调 Agent`,description:`填写一个已经注册的 Agent ID;留空表示关闭协调。`},enabled:{label:`启用`},max_children:{label:`最大子 Agent 数`,description:`可同时委派的子任务硬上限。`},profile:{label:`规划 Profile`,description:`选择一个已注册的 Explore Harness profile。`},profile_preset:{label:`报告 Profile`,description:`由该能力管理的报告 profile,例如 weekly-progress。`},route_ref:{label:`Goal Channel 路由`,description:`只填写公开 route alias;凭据与 Provider 标识不会进入此表单。`},safe_fix:{label:`允许一次有界安全修复`},strict_receipt:{label:`要求精确 diff 回执`},timezone:{label:`时区`,description:`使用 IANA 时区,例如 Asia/Shanghai。`}}};function _b(e,t){let n=hb[t][e.capability_id];return n?{...e,display_name:n.displayName,description:n.description,configuration_editor:{...e.configuration_editor,...n.readOnlyReason?{read_only_reason:n.readOnlyReason}:{}}}:e}function vb(e){return gb[e]}Object.freeze(Object.keys(hb.en).sort());function yb(e,t){return e.available_scopes.includes(t)&&(t!==`machine`||!!e.machine_namespace)&&e.configuration_editor.editable&&e.configuration_editor.writable_scopes.includes(t)}function bb({values:e,t}){return(0,z.jsxs)(`details`,{className:`personal-capability-raw-values`,children:[(0,z.jsx)(`summary`,{children:t(`capabilities.rawJson`)}),(0,z.jsx)(`div`,{className:`personal-capability-value-grid`,children:e.map(({label:e,value:t})=>(0,z.jsxs)(`section`,{children:[(0,z.jsx)(`strong`,{children:e}),(0,z.jsx)(`pre`,{children:t?JSON.stringify(t,null,2):`—`})]},e))})]})}function xb({source:e,t}){return e?(0,z.jsxs)(`p`,{className:`personal-capability-effective-source`,children:[(0,z.jsx)(Im,{"aria-hidden":!0,size:15}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:t(`capabilities.effectiveSource`)}),t(`capabilities.source.${e}`)]})]}):null}function Sb({available:e,description:t,t:n}){return e?null:(0,z.jsxs)(`section`,{className:`personal-capability-editor-status is-read-only`,children:[(0,z.jsx)(Um,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:n(`capabilities.readOnly`)}),(0,z.jsx)(`p`,{children:t})]})]})}function Cb(e){return e.availability?.includes(`experimental`)?4:e.capability_id===`multi_subagent`?3:e.configuration_editor.writable_scopes.length===0||e.availability===`supported_explicit_opt_in`?2:e.availability===`supported_explicit_override`?0:1}function wb(e,t){return[...e].sort((e,n)=>{let r=Cb(e)-Cb(n);if(r!==0)return r;let i=_b(e,t),a=_b(n,t);return i.display_name.localeCompare(a.display_name,t)||e.capability_id.localeCompare(n.capability_id)})}function Tb({capabilities:e,locale:t,onSelect:n,scope:r,selectedCapabilityId:i,t:a}){return(0,z.jsx)(`nav`,{"aria-label":a(r===`goal`?`capabilities.catalog`:`machine.capabilityCatalog`),className:`personal-capability-list`,children:wb(e,t).map(e=>{let o=_b(e,t);return(0,z.jsxs)(`button`,{"aria-current":i===o.capability_id?`page`:void 0,onClick:()=>n(o.capability_id),type:`button`,children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:o.display_name}),(0,z.jsx)(`small`,{children:o.capability_id})]}),(0,z.jsx)(`em`,{children:a(o.available_scopes.includes(r)?r===`goal`?`capabilities.goalScope`:`capabilities.machineScope`:r===`machine`?`capabilities.goalScope`:`capabilities.machineScope`)})]},o.capability_id)})})}function Eb({capability:e,locale:t}){let n=_b(e,t);return(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`span`,{className:`personal-settings-icon`,children:(0,z.jsx)(Lm,{"aria-hidden":!0,size:18})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:n.capability_id}),(0,z.jsx)(`h2`,{children:n.display_name}),(0,z.jsx)(`p`,{children:n.description})]})]})}function Db({goalId:e,onApplied:t,selected:n,t:r}){let[i,a]=(0,R.useState)({busy:null,draft:{},partialWrite:null,preview:null}),[o,s]=(0,R.useState)(null);(0,R.useEffect)(()=>{a({busy:null,draft:db(n?.configuration_editor??{fields:[]},n?.current??n?.effective_configuration?.configuration??n?.default,n?.default),partialWrite:null,preview:null}),s(null)},[n]);async function c(t){if(!(!n||i.busy)){a(e=>({...e,busy:`preview`,partialWrite:null})),s(null);try{let r=await _g(e,n.capability_id,t);a(e=>({...e,preview:r}))}catch(e){s(e instanceof Error?e.message:r(`capabilities.previewFailed`))}finally{a(e=>({...e,busy:null}))}}}async function l(){if(!(!n||!i.preview||i.busy)){a(e=>({...e,busy:`apply`})),s(null);try{let r=db(n.configuration_editor,i.draft,n.default),o=await vg(e,n.capability_id,i.preview.action===`delete`?null:r,i.preview.plan_revision);a(e=>({...e,partialWrite:o.status===`partial_write`?o:null,preview:null})),o.status!==`partial_write`&&t()}catch(e){a(e=>({...e,preview:null})),s(e instanceof Error?e.message:r(`capabilities.applyFailed`))}finally{a(e=>({...e,busy:null}))}}}function u(e,t){a(n=>({...n,draft:{...n.draft,[e]:t},preview:null})),s(null)}return{apply:l,changeDraft:u,error:o,mutation:i,preview:c}}function Ob({mutationError:e,onApplied:t,partialWrite:n,preview:r}){let{t:i}=Ji();return(0,z.jsxs)(z.Fragment,{children:[e?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:e}):null,n?(0,z.jsxs)(`section`,{"aria-live":`polite`,className:`personal-capability-recovery`,children:[(0,z.jsx)(Um,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:i(`capabilities.partialWrite`)}),(0,z.jsx)(`p`,{children:i(`capabilities.partialWriteDescription`)}),(0,z.jsx)(`small`,{children:n.recommended_action})]}),(0,z.jsxs)(`button`,{onClick:t,type:`button`,children:[(0,z.jsx)(Om,{"aria-hidden":!0,size:15}),i(`capabilities.refreshSource`)]})]}):null,r?(0,z.jsxs)(`section`,{className:`personal-capability-preview`,"aria-label":i(`capabilities.preview`),children:[(0,z.jsx)(`strong`,{children:i(`capabilities.preview`)}),(0,z.jsx)(`span`,{children:i(`machine.action.${r.action}`)}),(0,z.jsx)(`small`,{children:i(`capabilities.previewLocked`)})]}):null]})}function kb({catalog:e,goalId:t,onApplied:n}){let{locale:r,t:i}=Ji(),[a,o]=(0,R.useState)(e.capabilities[0]?.capability_id??``),s=(0,R.useMemo)(()=>e.capabilities.find(e=>e.capability_id===a)??e.capabilities[0],[e.capabilities,a]),c=(0,R.useMemo)(()=>s?_b(s,r):void 0,[r,s]),{apply:l,changeDraft:u,error:d,mutation:f,preview:p}=Db({goalId:t,onApplied:n,selected:c,t:i}),{busy:m,draft:h,partialWrite:g,preview:_}=f;if(!s||!c)return(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:i(`capabilities.empty`)});let v=c.available_scopes.includes(`goal`),y=yb(c,`goal`),b=c.configuration_editor.read_only_reason??i(v?`capabilities.previewOnly`:`capabilities.machineOnly`);async function x(){if(!c||!y||m)return;let e=db(c.configuration_editor,h,c.default);await p(e)}async function S(){!y||m||await p(null)}return(0,z.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,z.jsx)(Tb,{capabilities:e.capabilities,locale:r,onSelect:o,scope:`goal`,selectedCapabilityId:c.capability_id,t:i}),(0,z.jsxs)(`article`,{className:`personal-capability-detail`,children:[(0,z.jsx)(Eb,{capability:s,locale:r}),(0,z.jsx)(xb,{source:c.effective_configuration?.source,t:i}),(0,z.jsx)(Sb,{available:y,t:i,description:b}),y?(0,z.jsxs)(`section`,{className:`personal-capability-field-summary`,children:[(0,z.jsx)(`strong`,{children:i(`capabilities.fields`)}),(0,z.jsx)(mb,{disabled:!!m,copy:vb(r),editor:c.configuration_editor,onChange:u,value:h})]}):null,(0,z.jsx)(Ob,{mutationError:d,onApplied:n,partialWrite:g,preview:_}),y?(0,z.jsxs)(`footer`,{className:`personal-capability-actions`,children:[c.current&&c.available_scopes.includes(`machine`)?(0,z.jsx)(`button`,{disabled:!!m,onClick:()=>void S(),type:`button`,children:i(`capabilities.restoreInheritance`)}):null,(0,z.jsx)(`button`,{disabled:!!m,onClick:()=>void x(),type:`button`,children:i(m===`preview`?`common.loading`:`capabilities.previewChanges`)}),(0,z.jsx)(`button`,{className:`is-primary`,disabled:!!m||!_,onClick:()=>void l(),type:`button`,children:i(m===`apply`?`common.loading`:`capabilities.applyPreview`)})]}):null,(0,z.jsx)(bb,{values:[{label:i(`capabilities.goalValue`),value:c.current},{label:i(c.machine_current?`capabilities.machineValue`:`capabilities.defaultValue`),value:c.machine_current??c.default}],t:i},s.capability_id)]})]})}function Ab({goalId:e}){let{t}=Ji(),[n,r]=(0,R.useState)(null),[i,a]=(0,R.useState)(null),[o,s]=(0,R.useState)(!1);function c(){e&&(s(!0),a(null),gg(e).then(r).catch(e=>a(e instanceof Error?e.message:t(`capabilities.loadFailed`))).finally(()=>s(!1)))}return(0,R.useEffect)(c,[e]),e?o&&!n?(0,z.jsxs)(`p`,{"aria-live":`polite`,className:`personal-capability-empty`,children:[(0,z.jsx)(hm,{className:`personal-spin`,size:18}),t(`capabilities.loading`)]}):i?(0,z.jsxs)(`section`,{className:`personal-capability-error`,role:`alert`,children:[(0,z.jsx)(Um,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:t(`capabilities.loadFailed`)}),(0,z.jsx)(`small`,{children:i})]}),(0,z.jsxs)(`button`,{onClick:c,type:`button`,children:[(0,z.jsx)(Om,{"aria-hidden":!0,size:15}),t(`capabilities.retry`)]})]}):n?(0,z.jsxs)(`section`,{className:`personal-capability-settings`,"data-revision":n.revision,children:[(0,z.jsxs)(`div`,{className:`personal-capability-scope-note`,children:[(0,z.jsx)(Im,{"aria-hidden":!0,size:17}),(0,z.jsxs)(`p`,{children:[(0,z.jsx)(`strong`,{children:t(`capabilities.atomicOverride`)}),t(`capabilities.atomicOverrideDescription`)]})]}),(0,z.jsx)(kb,{catalog:n.capability_catalog,goalId:e,onApplied:c})]}):null:(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:t(`capabilities.chooseGoal`)})}function jb(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function Mb(e,t){let n=t?.machine_namespace;return n?e?.machine_configuration?.namespaces[n]:void 0}function Nb(e,t,n){return{...jb(e.default),...jb(t),...n}}function Pb(e,t){for(let n of e.configuration_editor.fields){let e=t[n.key];if(n.required&&(e==null||e===``))return!1}return e.capability_id===`periodic_report`&&t.enabled===!0?!!(String(t.profile_preset??``).trim()&&String(t.route_ref??``).trim()&&String(t.timezone??``).trim()):!0}function Fb(e){try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}function Ib(e){return e?e===`absent`?e:e.replace(/^sha256:/,``).slice(0,12):`—`}function Lb(){let{locale:e,t}=Ji(),[n,r]=(0,R.useState)(null),[i,a]=(0,R.useState)(``),[o,s]=(0,R.useState)({}),[c,l]=(0,R.useState)(`{}`),[u,d]=(0,R.useState)(`guided`),[f,p]=(0,R.useState)(null),[m,h]=(0,R.useState)(`upsert`),[g,_]=(0,R.useState)(null),[v,y]=(0,R.useState)(null),[b,x]=(0,R.useState)(`load`),[S,C]=(0,R.useState)(null),[w,T]=(0,R.useState)(null),E=n?.capability_catalog.capabilities??[],D=E.find(e=>e.capability_id===i)??E[0],O=D?_b(D,e):void 0,k=Mb(n,O),ee=!!(O?.machine_namespace&&k),A=!!(O&&yb(O,`machine`)),j=(0,R.useMemo)(()=>Fb(c),[c]),te=O?u===`json`?j:Nb(O,k,o):null,ne=!!(O&&(u===`json`?j:Pb(O,te??{})));async function re(){r(await hg())}(0,R.useEffect)(()=>{let e=!0;return hg().then(t=>{e&&(r(t),a(t.capability_catalog.capabilities.find(e=>e.available_scopes.includes(`machine`))?.capability_id??``))}).catch(n=>{e&&C(n instanceof Error?n.message:t(`machine.loadError`))}).finally(()=>{e&&x(null)}),()=>{e=!1}},[t]),(0,R.useEffect)(()=>{if(!O)return;let e=Mb(n,O),t=db(O.configuration_editor,e??O.default,O.default),r=Nb(O,e,t);s(t),l(JSON.stringify(r,null,2)),d(A?`guided`:`json`),p(null),h(`upsert`),y(null)},[n,i,e]);function M(e,t){s(n=>({...n,[e]:t})),p(null),h(`upsert`),C(null),T(null)}function N(e){if(O){if(e===`json`)l(JSON.stringify(Nb(O,k,o),null,2));else if(j)s(db(O.configuration_editor,j,O.default));else{C(t(`machine.jsonInvalid`));return}d(e),p(null),h(`upsert`),C(null)}}async function ie(){if(!(!A||!O?.machine_namespace||!te||!ne||b)){x(`preview`),C(null),T(null);try{h(`upsert`),p(await yg(O.machine_namespace,te))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function ae(){if(!(!A||!O?.machine_namespace||!ee||b)){x(`preview`),C(null),T(null);try{h(`remove`),p(await xg(O.machine_namespace))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function oe(){if(!A||!O?.machine_namespace||!f||b||m===`upsert`&&!te)return;x(`apply`),C(null);let e=m;try{let n=e===`remove`?await Sg(O.machine_namespace,f.plan_revision):await bg(O.machine_namespace,te,f.plan_revision);_(n),p(null),h(`upsert`),y(null),await re(),T(n.status===`applied`?t(e===`remove`?`machine.removed`:`machine.applied`):t(`machine.unchanged`))}catch(e){p(null),h(`upsert`),C(e instanceof Error?e.message:t(`machine.applyError`))}finally{x(null)}}async function P(){if(!(!g?.transaction_id||b)){x(`rollback-preview`),C(null);try{y(await Cg(g.transaction_id))}catch(e){C(e instanceof Error?e.message:t(`machine.rollbackError`))}finally{x(null)}}}async function F(){if(!(!g?.transaction_id||!v||b)){x(`rollback`),C(null);try{await wg(g.transaction_id,v.plan_revision),_(null),y(null),p(null),await re(),T(t(`machine.rolledBack`))}catch(e){y(null),C(e instanceof Error?e.message:t(`machine.rollbackError`))}finally{x(null)}}}return b===`load`?(0,z.jsx)(`div`,{className:`personal-machine-loading`,role:`status`,children:t(`common.loading`)}):O?(0,z.jsxs)(`section`,{className:`personal-capability-settings`,"data-revision":n?.revision,children:[(0,z.jsxs)(`div`,{className:`personal-capability-scope-note`,children:[(0,z.jsx)(Im,{"aria-hidden":!0,size:17}),(0,z.jsxs)(`p`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.liveDefault`)}),t(`machine.liveDefaultDescription`)]})]}),(0,z.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,z.jsx)(Tb,{capabilities:E,locale:e,onSelect:a,scope:`machine`,selectedCapabilityId:O.capability_id,t}),(0,z.jsxs)(`article`,{className:`personal-capability-detail`,children:[(0,z.jsx)(Eb,{capability:D,locale:e}),O.available_scopes.includes(`machine`)?(0,z.jsx)(xb,{source:ee?`machine_default`:`capability_default`,t}):null,(0,z.jsx)(Sb,{available:A,t,description:O.available_scopes.includes(`machine`)?t(`machine.editorUnavailableDescription`):t(`machine.goalOnly`)}),O.capability_id===`periodic_report`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(Im,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.periodicReportActivation`)}),(0,z.jsx)(`p`,{children:t(`machine.periodicReportActivationDescription`)})]})]}):null,A?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{className:`personal-capability-editor-mode`,children:[(0,z.jsx)(`span`,{children:t(`machine.editorMode`)}),(0,z.jsxs)(`div`,{role:`group`,"aria-label":t(`machine.editorMode`),children:[(0,z.jsx)(`button`,{"aria-pressed":u===`guided`,disabled:!A,onClick:()=>N(`guided`),type:`button`,children:t(`machine.visualEditor`)}),(0,z.jsxs)(`button`,{"aria-pressed":u===`json`,onClick:()=>N(`json`),type:`button`,children:[(0,z.jsx)($p,{"aria-hidden":!0,size:14}),t(`machine.jsonEditor`)]})]})]}),u===`guided`?(0,z.jsxs)(`section`,{className:`personal-capability-field-summary`,children:[(0,z.jsx)(`strong`,{children:t(`capabilities.fields`)}),(0,z.jsx)(mb,{copy:vb(e),disabled:!!b,editor:O.configuration_editor,onChange:M,value:o}),ne?null:(0,z.jsx)(`p`,{className:`personal-machine-validation`,role:`alert`,children:t(`machine.requiredFields`)})]}):(0,z.jsxs)(`label`,{className:`personal-capability-json-editor`,htmlFor:`machine-configuration-json`,children:[(0,z.jsx)(`span`,{children:t(`machine.jsonConfiguration`)}),(0,z.jsx)(`textarea`,{"aria-describedby":`machine-configuration-json-help`,disabled:!!b,id:`machine-configuration-json`,onChange:e=>{l(e.target.value),p(null),C(null)},rows:12,spellCheck:!1,value:c}),(0,z.jsx)(`small`,{id:`machine-configuration-json-help`,children:t(`machine.jsonConfigurationHelp`)}),j?null:(0,z.jsx)(`span`,{className:`personal-machine-validation`,role:`alert`,children:t(`machine.jsonInvalid`)})]})]}):null,S?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:S}):null,w?(0,z.jsxs)(`p`,{className:`personal-machine-notice`,role:`status`,"aria-live":`polite`,children:[(0,z.jsx)(Kp,{"aria-hidden":!0,size:16}),w]}):null,f?(0,z.jsxs)(`section`,{"aria-label":t(`machine.preview`),className:`personal-machine-preview`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.preview`)}),(0,z.jsx)(`span`,{children:t(`machine.action.${f.action}`)})]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`machine.currentRevision`)}),(0,z.jsx)(`dd`,{title:f.current_revision,children:Ib(f.current_revision)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`machine.desiredRevision`)}),(0,z.jsx)(`dd`,{title:f.desired_revision,children:Ib(f.desired_revision)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`machine.changedNamespaces`)}),(0,z.jsx)(`dd`,{children:f.changed_namespaces.join(`, `)||t(`common.none`)})]})]}),(0,z.jsx)(`p`,{children:t(`machine.previewLocked`)})]}):null,g?.rollback_available&&g.transaction_id?(0,z.jsxs)(`section`,{className:`personal-machine-rollback`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.rollbackAvailable`)}),(0,z.jsx)(`p`,{children:t(v?`machine.rollbackPreviewDescription`:`machine.rollbackDescription`)})]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,disabled:!!b||!!(v&&!v.rollback_allowed),onClick:()=>void(v?F():P()),type:`button`,children:[(0,z.jsx)(km,{"aria-hidden":!0,size:15}),t(b===`rollback`||b===`rollback-preview`?`common.loading`:v?`machine.confirmRollback`:`machine.previewRollback`)]})]}):null,A?(0,z.jsxs)(`footer`,{className:`personal-capability-actions`,children:[ee?(0,z.jsxs)(`button`,{className:`is-danger`,disabled:!!b,onClick:()=>void ae(),type:`button`,children:[(0,z.jsx)(Hm,{"aria-hidden":!0,size:15}),t(`machine.previewRemoval`)]}):null,(0,z.jsx)(`button`,{disabled:!!b||!ne,onClick:()=>void ie(),type:`button`,children:t(b===`preview`?`common.loading`:`machine.previewChanges`)}),(0,z.jsx)(`button`,{className:`is-primary`,disabled:!!b||!f,onClick:()=>void oe(),type:`button`,children:t(b===`apply`?`common.loading`:`machine.applyPreview`)})]}):null,O.available_scopes.includes(`machine`)?(0,z.jsx)(bb,{values:[{label:t(`machine.currentValue`),value:k},{label:t(`capabilities.defaultValue`),value:O.default}],t},O.capability_id):null]})]})]}):(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:t(`machine.capabilityEmpty`)})}var Rb={appearance:Sm,capabilities:Lm,language:fm,lark:Fm,machine:Nm};function zb({focusGoalConnection:e=!1,goals:t,initialGoalId:n,initialTab:r=`lark`,onChanged:i,onClose:a,onThemeChange:o,theme:s}){let{locale:c,setLocale:l,t:u}=Ji(),[d,f]=(0,R.useState)(r),p=[...n?[{description:u(`settings.capabilitiesTabDescription`),key:`capabilities`,label:u(`capabilities.title`)}]:[],{description:u(`settings.machineTabDescription`),key:`machine`,label:u(`machine.title`)},{description:u(`settings.larkTabDescription`),key:`lark`,label:`Lark`},{description:u(`settings.appearanceTabDescription`),key:`appearance`,label:u(`settings.appearance`)},{description:u(`settings.languageTabDescription`),key:`language`,label:u(`settings.language`)}],m=[{description:u(`settings.languageEnglishDescription`),label:u(`settings.languageEnglish`),value:`en`},{description:u(`settings.languageSimplifiedChineseDescription`),label:u(`settings.languageSimplifiedChinese`),value:`zh-CN`}],h={appearance:{description:u(`settings.appearanceDescription`),eyebrow:u(`settings.workspaceDisplay`),title:u(`settings.appearance`)},capabilities:{description:u(`capabilities.description`),eyebrow:u(`capabilities.goalPolicy`),title:u(`capabilities.title`)},language:{description:u(`settings.languageDescription`),eyebrow:u(`settings.workspaceDisplay`),title:u(`settings.language`)},lark:{description:u(`lark.description`),eyebrow:u(`settings.goalConnections`),title:`Lark`},machine:{description:u(`machine.description`),eyebrow:u(`machine.machinePolicy`),title:u(`machine.title`)}}[d];return(0,z.jsxs)(`section`,{"aria-label":u(`settings.title`),className:`personal-settings-page`,"data-pw-theme":s,children:[(0,z.jsxs)(`aside`,{className:`personal-settings-sidebar`,children:[(0,z.jsxs)(`button`,{className:`personal-settings-back`,onClick:a,type:`button`,children:[(0,z.jsx)(Lp,{size:17}),(0,z.jsx)(`span`,{children:u(`settings.back`)})]}),(0,z.jsxs)(`div`,{className:`personal-settings-title`,children:[(0,z.jsx)(`small`,{children:u(`settings.eyebrow`)}),(0,z.jsx)(`strong`,{children:u(`settings.title`)})]}),(0,z.jsx)(`nav`,{"aria-label":u(`settings.categories`),className:`personal-settings-tabs`,children:p.map(e=>{let t=Rb[e.key];return(0,z.jsxs)(`button`,{"aria-current":d===e.key?`page`:void 0,onClick:()=>f(e.key),type:`button`,children:[(0,z.jsx)(t,{size:17}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.description})]})]},e.key)})})]}),(0,z.jsxs)(`main`,{className:`personal-settings-body`,children:[(0,z.jsx)(`header`,{className:`personal-settings-header`,children:(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`small`,{children:h.eyebrow}),(0,z.jsx)(`h1`,{children:h.title}),(0,z.jsx)(`p`,{children:h.description})]})}),d===`lark`?(0,z.jsx)(lb,{embedded:!0,focusGoalConnection:e,goals:t,initialGoalId:n,onChanged:i,onClose:a}):null,d===`machine`?(0,z.jsx)(Lb,{}):null,d===`capabilities`?(0,z.jsx)(Ab,{goalId:n}):null,d===`appearance`?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-appearance-settings`,children:[(0,z.jsx)(`small`,{children:u(`settings.workspaceDisplay`)}),(0,z.jsx)(`h3`,{children:u(`settings.appearance`)}),(0,z.jsx)(`p`,{children:u(`settings.themeDescription`)}),(0,z.jsxs)(`div`,{className:`personal-settings-choice-group`,role:`radiogroup`,"aria-label":u(`settings.workspaceTheme`),children:[(0,z.jsxs)(`button`,{"aria-checked":s===`loopx`,onClick:()=>o(`loopx`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-loopx`}),(0,z.jsx)(`strong`,{children:u(`settings.themeLoopx`)}),(0,z.jsx)(`small`,{children:u(`settings.themeLoopxDescription`)})]}),(0,z.jsxs)(`button`,{"aria-checked":s===`paper`,onClick:()=>o(`paper`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-paper`}),(0,z.jsx)(`strong`,{children:u(`settings.themeDefault`)}),(0,z.jsx)(`small`,{children:u(`settings.themeDefaultDescription`)})]}),(0,z.jsxs)(`button`,{"aria-checked":s===`brutal`,onClick:()=>o(`brutal`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-brutal`}),(0,z.jsx)(`strong`,{children:u(`settings.themeHighContrast`)}),(0,z.jsx)(`small`,{children:u(`settings.themeHighContrastDescription`)})]})]})]}):null,d===`language`?(0,z.jsxs)(`section`,{className:`personal-settings-card`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`span`,{className:`personal-settings-icon`,children:(0,z.jsx)(fm,{size:18})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h2`,{children:u(`settings.language`)}),(0,z.jsx)(`p`,{children:u(`settings.languageDescription`)})]})]}),(0,z.jsx)(`div`,{"aria-label":u(`settings.language`),className:`personal-language-options`,role:`radiogroup`,children:m.map(e=>(0,z.jsxs)(`button`,{"aria-checked":c===e.value,className:c===e.value?`is-selected`:``,onClick:()=>l(e.value),role:`radio`,type:`button`,children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.description})]}),c===e.value?(0,z.jsx)(Kp,{"aria-hidden":!0,size:17}):null]},e.value))}),(0,z.jsx)(`footer`,{children:u(`settings.languageStoredLocally`)})]}):null]})]})}var Bb=`loopx-pw-theme`,Vb=`loopx`;function Hb(){try{let e=window.localStorage.getItem(Bb);return e===`loopx`||e===`paper`||e===`brutal`?e:Vb}catch{return Vb}}function Ub(e){try{window.localStorage.setItem(Bb,e)}catch{}}function Wb({drawer:e,drawerMode:t=`panel`,drawerOpen:n,main:r,mobileSidebarOpen:i=!1,onCloseMobileSidebar:a,sidebar:o,theme:s=`loopx`}){let{t:c}=Ji(),l=(0,R.useRef)(null),u=(0,R.useRef)(null);return(0,R.useEffect)(()=>{if(!i)return;u.current=document.activeElement instanceof HTMLElement?document.activeElement:null;let e=l.current?.querySelectorAll(`button:not([disabled]), a[href], select:not([disabled]), textarea:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])`);e?.[0]?.focus();function t(t){if(t.key!==`Tab`||!e?.length)return;let n=e[0],r=e[e.length-1];t.shiftKey&&document.activeElement===n?(t.preventDefault(),r.focus()):!t.shiftKey&&document.activeElement===r&&(t.preventDefault(),n.focus())}return document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`keydown`,t),u.current?.focus(),u.current=null}},[i]),(0,z.jsxs)(`section`,{className:`personal-workspace-shell${n?` has-drawer`:``}${n&&t.startsWith(`inspector`)?` has-task-inspector`:``}${t===`inspector-full`?` is-task-inspector-full`:``}${i?` mobile-sidebar-open`:``}`,"data-pw-theme":s,children:[i?(0,z.jsx)(`button`,{"aria-hidden":!0,className:`personal-sidebar-backdrop`,onClick:a,tabIndex:-1,type:`button`}):null,(0,z.jsx)(`aside`,{"aria-label":i?c(`header.goalNavigation`):void 0,"aria-modal":i?!0:void 0,className:`personal-workspace-sidebar`,"data-workspace-sidebar":!0,ref:l,role:i?`dialog`:void 0,children:(0,z.jsxs)(`div`,{className:`personal-workspace-sidebar-inner`,children:[i?(0,z.jsxs)(`button`,{className:`personal-sr-only`,onClick:a,type:`button`,children:[c(`common.close`),` `,c(`header.goalNavigation`)]}):null,o]})}),(0,z.jsx)(`main`,{"aria-hidden":i||void 0,className:`personal-workspace-main`,inert:i||void 0,children:r}),n?(0,z.jsx)(`aside`,{className:`personal-workspace-drawer`,"data-context-drawer":!0,"data-drawer-mode":t,children:e}):null]})}function Gb(e){let t=e.match(/(?:下一步|建议|行动项|待办)[::\s]*([^\n]+)/u),n=t?t[1]:e;n=n.replace(/```[\s\S]*?```/g,``).replace(/`([^`]+)`/g,`$1`).replace(/\[([^\]]+)\]\([^)]+\)/g,`$1`).replace(/[#*~_>]/g,``).replace(/^[-*•\d+.\s]+/u,``).replace(/^(好的|没问题|收到|建议如下|任务如下|分析如下|结论[::])[\s,,::]*/u,``);let r=(n.split(/\r?\n/).map(e=>e.trim()).filter(Boolean)[0]||n).replace(/\s+/gu,` `).trim();return Array.from(r).slice(0,120).join(``)}function Kb(e){let t=new Map;return e.forEach(e=>{let n=e.fields.find(e=>e.key===`todo_id`)?.value??``,r=[e.actionKind,e.goalId??``,n,e.title].join(`:`);t.set(r,e)}),[...t.values()]}function qb(e,t,n){if(!e)return n(`home.noFirstActivity`);let r=new Date(e);if(Number.isNaN(r.getTime()))return e;let i=new Date,a=new Intl.DateTimeFormat(t,{hour:`2-digit`,minute:`2-digit`,hour12:!1}).format(r);return r.toDateString()===i.toDateString()?n(`home.todayAt`,{time:a}):new Intl.DateTimeFormat(t,{month:`numeric`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,hour12:!1}).format(r)}function Jb({goals:e,onSelectGoal:t,onRetry:n,systemHealth:r}){let{locale:i,t:a}=Ji(),o=e.filter(e=>e.activationState===`active`),s=o.filter(e=>e.loadState===`error`).length,c=[{description:a(`home.lane.needsYouDescription`),key:`needs_you`,label:a(`home.lane.needsYou`)},{description:a(`home.lane.runningDescription`),key:`running`,label:a(`home.lane.running`)},{description:a(`home.lane.observingDescription`),key:`observing`,label:a(`home.lane.observing`)},{description:a(`home.lane.scheduledDescription`),key:`scheduled`,label:a(`home.lane.scheduled`)}],l=Object.fromEntries(c.map(e=>[e.key,[]])),u=[],d=[];e.filter(e=>!e.loadState).forEach(e=>{let t=ty(e);t===`history`?u.push(e):t===`stopped`?d.push(e):l[t].push(e)});let f=e=>(0,z.jsxs)(`button`,{className:`personal-home-goal-card`,"data-goal-state":e.loadState??e.state,"data-load-error":e.loadError,onClick:()=>t(e.goalId),type:`button`,children:[(0,z.jsxs)(`span`,{className:`personal-home-goal-meta`,children:[(0,z.jsx)(`i`,{}),e.agentLaneCount&&e.agentLaneCount>1?a(`header.workAgentCount`,{count:e.agentLaneCount}):e.agentLabel??e.agentId]}),(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`p`,{children:e.loadError?a(`startup.error.${e.loadError}`):e.needsYou??e.nextSentence}),(0,z.jsxs)(`footer`,{children:[(0,z.jsx)(`span`,{children:e.loadState?a(e.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(e.state,i)}),(0,z.jsx)(`small`,{title:e.latestActivity,children:e.loadState?``:e.latestActivity?qb(e.latestActivity,i,a):e.agentTodos.length?a(`home.taskCount`,{count:e.agentTodos.length}):a(`home.noActivity`)})]})]},e.goalId);return(0,z.jsxs)(`section`,{"aria-label":a(`home.workspace`),className:`personal-home-board`,children:[r&&(!r.ok||r.issues.length>0||r.freshnessWarning)?(0,z.jsxs)(`div`,{className:`personal-system-health-banner`,role:`alert`,children:[(0,z.jsxs)(`div`,{className:`personal-system-health-header`,children:[(0,z.jsx)(Xp,{size:15}),(0,z.jsx)(`strong`,{children:a(`home.systemHealth`,{summary:r.summary})}),r.freshnessWarning?(0,z.jsxs)(`small`,{children:[`(`,r.freshnessWarning,`)`]}):null]}),r.issues.length>0?(0,z.jsx)(`ul`,{className:`personal-system-health-issues`,children:r.issues.map((e,t)=>(0,z.jsx)(`li`,{children:e},t))}):null]}):null,o.some(e=>e.loadState)?(0,z.jsxs)(`section`,{className:`personal-home-lane`,"aria-live":`polite`,children:[(0,z.jsx)(`header`,{children:a(`startup.progress`,{loaded:o.filter(e=>!e.loadState).length,total:o.length})}),s?(0,z.jsxs)(`div`,{className:`personal-stopped-goal-error`,role:`status`,children:[(0,z.jsx)(`span`,{children:a(`startup.failedCount`,{count:s})}),(0,z.jsx)(`button`,{className:`min-h-11 rounded-md border px-3 py-2 text-sm`,onClick:n,type:`button`,children:a(`startup.retryFailed`)})]}):null,o.filter(e=>e.loadState).map(f)]}):null,(0,z.jsx)(`div`,{className:`personal-home-lanes`,children:c.map(e=>(0,z.jsxs)(`section`,{className:`personal-home-lane is-${e.key}`,"data-testid":`personal-home-lane-${e.key}`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`i`,{}),e.label]}),(0,z.jsx)(`b`,{children:l[e.key].length})]}),(0,z.jsx)(`p`,{children:e.description}),(0,z.jsx)(`div`,{className:`personal-home-lane-list`,children:l[e.key].length?l[e.key].map(f):(0,z.jsx)(`span`,{className:`personal-home-empty`,children:a(`home.empty`)})})]},e.key))}),(0,z.jsxs)(`details`,{className:`personal-home-history`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(`span`,{children:a(`home.history`)}),(0,z.jsx)(`b`,{children:u.length}),(0,z.jsx)(`small`,{children:a(`home.completedGoals`)})]}),(0,z.jsx)(`div`,{children:u.length?u.map(f):(0,z.jsx)(`span`,{className:`personal-home-empty`,children:a(`home.noCompletedGoals`)})})]}),d.length?(0,z.jsxs)(`details`,{className:`personal-home-history is-stopped`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(`span`,{children:a(`home.stopped`)}),(0,z.jsx)(`b`,{children:d.length}),(0,z.jsx)(`small`,{children:a(`home.preservedState`)})]}),(0,z.jsx)(`div`,{children:d.map(f)})]}):null]})}function Yb({items:e,onSelect:t,reportState:n}){let{locale:r,t:i}=Ji();return(0,z.jsxs)(`section`,{className:`personal-object-list personal-files-list`,"data-testid":`personal-goal-outputs`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:i(`files.title`)}),(0,z.jsx)(`span`,{children:e.length})]}),n?.loading?(0,z.jsxs)(`p`,{className:`personal-object-list-state`,role:`status`,children:[(0,z.jsx)(Om,{className:`is-spinning`,size:14}),i(`files.loadingReports`)]}):null,n?.error?(0,z.jsxs)(`p`,{className:`personal-object-list-state is-error`,role:`alert`,children:[(0,z.jsx)(Xp,{size:14}),i(`files.reportLoadFailed`),`: `,n.error]}):null,!n?.loading&&!n?.error&&e.length===0?(0,z.jsxs)(`p`,{className:`personal-object-list-state`,children:[(0,z.jsx)(cm,{size:14}),i(`files.empty`)]}):null,e.map(e=>(0,z.jsxs)(`button`,{"data-output-kind":e.output.kind,onClick:()=>t({item:e.output,kind:`output`}),type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-file-icon`,children:(0,z.jsx)(cm,{size:16})}),(0,z.jsx)(`strong`,{children:e.output.title}),e.output.report?(0,z.jsx)(`em`,{children:i(`files.reportDelta`,{added:e.output.report.addedCount,changed:e.output.report.changedCount})}):null,(0,z.jsx)(`p`,{children:e.output.summary??e.output.safePreview??e.output.kind??i(`files.emptySummary`)}),(0,z.jsx)(`small`,{title:e.output.createdAt,children:[e.output.goalTitle,e.output.kind===`report`?i(`files.verifiedReport`):null,e.output.todoId?`${i(`common.task`)} ${e.output.todoId}`:null,qb(e.output.createdAt,r,i)].filter(Boolean).join(` · `)})]},e.id))]})}function Xb({agentLabel:e,messages:t,onClose:n,onDraftTask:r,onOpenConversation:i,title:a}){let{t:o}=Ji(),s=t.reduce((e,t,n)=>t.role===`user`?n:e,0),c=t.slice(Math.max(0,s)).slice(-3),l=c.filter(e=>e.role===`assistant`&&!e.pending).at(-1);return(0,R.useEffect)(()=>{if(!n)return;let e=e=>{e.key===`Escape`&&n()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n]),(0,z.jsxs)(`aside`,{"aria-label":o(`conversation.receipt`),className:`personal-manager-conversation-tray`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(Up,{size:16}),(0,z.jsx)(`strong`,{children:a??o(`conversation.title`)}),(0,z.jsx)(`small`,{children:t.at(-1)?.pending?o(`conversation.replying`):o(`common.recently`)})]}),(0,z.jsxs)(`div`,{className:`personal-manager-conversation-actions`,children:[r&&l?(0,z.jsxs)(`button`,{className:`personal-manager-conversation-btn`,onClick:()=>r(l.text),title:o(`conversation.convertHint`),type:`button`,children:[(0,z.jsx)(mm,{size:13}),(0,z.jsx)(`span`,{children:o(`conversation.toTask`)})]}):null,(0,z.jsx)(`button`,{className:`personal-manager-conversation-link`,onClick:i,type:`button`,children:o(`conversation.full`)}),n?(0,z.jsx)(`button`,{"aria-label":o(`conversation.close`),className:`personal-manager-conversation-close`,onClick:n,title:o(`conversation.close`),type:`button`,children:(0,z.jsx)(Gm,{size:14})}):null]})]}),(0,z.jsx)(`div`,{"aria-live":`polite`,className:`personal-manager-conversation-messages`,children:c.map(t=>(0,z.jsxs)(`article`,{className:`is-${t.role}`,children:[(0,z.jsx)(`strong`,{children:t.role===`user`?o(`common.you`):t.agentLabel??e??o(`header.manager`)}),(0,z.jsxs)(`div`,{className:`personal-manager-conversation-bubble`,children:[t.role===`user`?(0,z.jsx)(`p`,{children:t.text}):(0,z.jsx)(gy,{text:t.text}),t.pending?(0,z.jsx)(`small`,{children:o(`conversation.agentPending`)}):null]})]},t.id))})]})}function Zb({onClose:e,onOpenDetails:t,run:n}){let{t:r}=Ji();return(0,z.jsxs)(`section`,{"aria-label":r(`session.record`),className:`personal-session-record`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(Up,{size:17}),r(`session.record`)]}),(0,z.jsx)(`button`,{"aria-label":r(`session.closeRecord`),onClick:e,type:`button`,children:(0,z.jsx)(Gm,{size:15})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:n.title}),(0,z.jsx)(`p`,{children:r(`session.recordDescription`)})]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Agent`}),(0,z.jsx)(`dd`,{children:n.agentLabel})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`common.status`)}),(0,z.jsx)(`dd`,{children:Xi(n.sessionStatus??n.status,r)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Session`}),(0,z.jsx)(`dd`,{title:n.sessionId,children:n.sessionId})]})]}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:t,type:`button`,children:r(`session.details`)})]})}function Qb(e,t,n){let r=[];if(t===null)return e.userTodos.slice(0,4).forEach(t=>r.push({attention:{...t,goalTitle:t.goalTitle??ey(e,t.goalId)},id:`attention:${t.todoId}`,kind:`attention`})),e.goals.filter(e=>ty(e)===`running`).slice(0,4).forEach(e=>r.push({id:`run:${e.goalId}`,kind:`run`,run:{agentId:e.agentId,agentLabel:e.agentLabel??e.agentId,completedSteps:e.doneTodoCount??e.agentTodos.filter(e=>e.done).length,goalId:e.goalId,goalTitle:e.title,latestActivity:e.agentSentence,runId:`goal:${e.goalId}`,status:`running`,title:e.nextSentence,totalSteps:Math.max((e.doneTodoCount??0)+e.agentTodos.filter(e=>!e.done).length,1)}})),r;let i=e.goals.find(e=>e.goalId===t);if(!i)return r;i.needsYou&&r.push({attention:{blocking:i.needsYouBlocking??!1,goalId:i.goalId,goalTitle:i.title,text:i.needsYou,todoId:`${i.goalId}:attention`},id:`attention:${i.goalId}`,kind:`attention`}),r.push({id:`run:${i.goalId}`,kind:`run`,run:{agentId:i.agentId,agentLabel:i.agentLabel??i.agentId,completedSteps:i.doneTodoCount??i.agentTodos.filter(e=>e.done).length,goalId:i.goalId,goalTitle:i.title,latestActivity:i.agentSentence,runId:`goal:${i.goalId}`,status:i.state===`推进中`?`running`:i.state===`需修复`?`failed`:`waiting`,title:i.nextSentence,totalSteps:Math.max((i.doneTodoCount??0)+i.agentTodos.filter(e=>!e.done).length,1)}}),i.agentTodos.filter(e=>e.taskClass===`continuous_monitor`).forEach(t=>{let a=e.timeline?.find(e=>e.kind===`run`&&e.run.goalId===i.goalId&&e.run.todoId===t.todoId&&!!e.run.sessionId);r.push({id:`schedule:${i.goalId}:${t.todoId}`,kind:`schedule`,schedule:{agentId:i.agentId,executionHistory:a?[{label:a.run.latestActivity||a.run.title,runId:a.run.runId,status:a.run.status===`waiting`||a.run.status===`queued`?`running`:a.run.status,timestamp:i.latestActivity||n(`common.recently`)}]:[],goalId:i.goalId,label:t.text,schedule:t.evidence??n(`schedule.summary`),scheduleId:t.todoId,scheduleKind:`monitor`,sessionId:a?.run.sessionId,status:t.done||t.status===`paused`?`paused`:`active`,stopCondition:n(`drawer.scheduleDefaultStop`),target:t.text,timezone:`Asia/Shanghai`}})});let a=e.timeline?.find(e=>e.kind===`proposal`&&e.proposal.actionKind===`heartbeat.bind`&&e.proposal.goalId===i.goalId);if(a){let e=e=>a.proposal.fields.find(t=>t.key===e)?.value;r.push({id:`schedule:${i.goalId}:heartbeat`,kind:`schedule`,schedule:{agentId:i.agentId,executionHistory:[],goalId:i.goalId,label:`${n(`schedule.heartbeat`)} · ${i.title}`,nextRunAt:n(`drawer.schedulePending`),notificationRule:n(`drawer.scheduleDefaultNotification`),schedule:e(`cadence`)??n(`schedule.summary`),scheduleId:`${i.goalId}:heartbeat`,scheduleKind:`heartbeat`,status:a.proposal.status===`applied`?`active`:`draft`,stopCondition:e(`stop_condition`)??n(`drawer.scheduleDefaultStop`),timezone:e(`timezone`)??`Asia/Shanghai`}})}return r}function $b(e){return e===`preview_ready`?`ready`:e===`cancelled`?`draft`:e===`failed`?`error`:e}function ex(e,t){let n={agent_id:t(`proposal.field.agentId`),cadence:t(`proposal.field.cadence`),completion_criteria:t(`proposal.field.completionCriteria`),execution_boundary:t(`proposal.field.executionBoundary`),goal_id:t(`proposal.field.goalId`),heartbeat:t(`proposal.field.heartbeat`),initial_todos:t(`proposal.field.initialTodos`),objective:t(`proposal.field.objective`),operation:t(`proposal.field.operation`),permission:t(`proposal.field.permission`),reason:t(`proposal.field.reason`),stop_condition:t(`proposal.field.stopCondition`),target:t(`proposal.field.target`),timezone:t(`proposal.field.timezone`),title:t(`proposal.field.title`),workspace_ref:t(`proposal.field.workspace`)},r=[`title`,`objective`,`completion_criteria`,`execution_boundary`,`permission`,`agent_id`,`workspace_ref`,`initial_todos`,`heartbeat`,`stop_condition`,`goal_id`];return Object.entries(e).sort(([e],[t])=>{let n=r.indexOf(e),i=r.indexOf(t);return(n<0?r.length:n)-(i<0?r.length:i)}).slice(0,10).map(([e,r])=>({key:e,label:n[e]??e.replaceAll(`_`,` `),value:e===`workspace_ref`?r===`current`?t(`proposal.workspace.current`):t(`proposal.workspace.named`,{workspace:String(r??`current`)}):Array.isArray(r)?r.join(` · `):typeof r==`object`&&r?JSON.stringify(r):String(r??`—`)}))}function tx(e){if(e.action_kind!==`goal.lifecycle`)return;let t=e.normalized_parameters.operation;return t===`stop`||t===`resume`||t===`delete`?t:void 0}function nx(e,t){let n=tx(e),r=typeof e.normalized_parameters.title==`string`?e.normalized_parameters.title:typeof e.normalized_parameters.goal_id==`string`?e.normalized_parameters.goal_id:``,i=typeof e.normalized_parameters.target==`string`?e.normalized_parameters.target:``,a=e.action_kind===`goal.create`?t(`proposal.summary.goalCreate`,{title:r}):e.action_kind===`heartbeat.bind`?t(`proposal.summary.heartbeat`):e.action_kind===`monitor.create`?t(`proposal.summary.monitor`,{target:i}):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.summary.lifecycleStop`,{title:r}):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.summary.lifecycleDelete`,{title:r}):e.action_kind===`goal.lifecycle`?t(`proposal.summary.lifecycleResume`,{title:r}):e.summary;return{actionKind:e.action_kind,fields:ex(e.normalized_parameters,t),goalId:typeof e.normalized_parameters.goal_id==`string`?e.normalized_parameters.goal_id:void 0,impact:e.action_kind===`goal.create`?t(`proposal.impact.goalCreate`):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.impact.lifecycleStop`):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.impact.lifecycleDelete`):e.action_kind===`goal.lifecycle`?t(`proposal.impact.lifecycleResume`):e.permission_classification===`protected`?t(`proposal.impact.protected`):t(`proposal.impact.default`),previewId:e.proposal_id,lifecycleOperation:n,gate:e.gate?{kind:String(e.gate.kind??`protected_action`),nextAction:typeof e.gate.next_action==`string`?e.gate.next_action:void 0,summary:String(e.gate.summary??t(`proposal.gate.default`))}:void 0,primaryLabel:e.action_kind===`goal.create`?t(`proposal.primary.goalCreate`):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.primary.lifecycleStop`):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.primary.lifecycleDelete`):e.action_kind===`goal.lifecycle`?t(`proposal.primary.lifecycleResume`):e.action_kind===`todo.create`&&e.normalized_parameters.start_execution===!0?t(`proposal.primary.todoStart`):t(`proposal.primary.apply`),status:$b(e.status),title:a}}function rx(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,42);if(t)return t;let n=2166136261;for(let t of e)n^=t.codePointAt(0)??0,n=Math.imul(n,16777619);return`goal-${(n>>>0).toString(36)}`}function ix(e,t){let n=e.match(/[「“"]([^」”"]{2,80})[」”"]/u)?.[1];return n?n.trim():e.replace(/^(请|帮我|我想|给我|创建|新建|设置|please|i want to|create|set up)+/iu,``).replace(/(一个|新的)?\s*(goal|目标)/giu,``).replace(/[,。!?].*$/u,``).trim().slice(0,80)||t(`goal.defaultTitle`)}function ax(e,t){for(let n of e.split(/\r?\n/u)){let e=n.trim();for(let n of t){let t=e.match(RegExp(`^${n.replace(/[.*+?^${}()|[\]\\]/gu,`\\$&`)}\\s*[::]\\s*(.*)$`,`iu`));if(t?.[1]?.trim())return t[1].trim()}}return``}function ox(e,t){let n=ax(e,[`目标`,`Objective`]),r=ax(e,[`完成标准`,`Completion criteria`]),i=ax(e,[`执行边界(可选)`,`执行边界`,`边界`,`Execution boundary (optional)`,`Execution boundary`,`Boundary`]),a=(n||ix(e,t)).split(/[。;;\n]/u)[0].trim().slice(0,80)||t(`goal.defaultTitle`),o=[n||a,r?t(`goal.objectiveCompletion`,{criteria:r}):``,i?t(`goal.objectiveBoundary`,{boundary:i}):``].filter(Boolean).join(` +`),s=/(只读|不调用外部工具|不修改(?:仓库|代码|状态)|read.?only|do not (?:call|use) external tools|do not modify (?:repositories|repository|code|state))/iu.test(i||e);return{completionCriteria:r,executionBoundary:i,initialTodos:r?[t(`goal.initialTodo`,{criteria:r})]:[],objective:o,permission:s?`read_only`:`workspace_write_on_confirmation`,title:a}}function sx(e){let t=e.match(/(?:每|every)\s*(\d{1,3})\s*(?:分钟|minutes?)/iu)?.[1];if(t)return`${t}m`;let n=e.match(/(?:每|every)\s*(\d{1,2})\s*(?:小时|hours?)/iu)?.[1];return n?`${n}h`:/每小时|every hour|hourly/iu.test(e)?`1h`:(/每天|每日|早上|上午|daily|every day/iu.test(e),`1d`)}function cx(e,t){return/(每周|星期|周[一二三四五六日天]|weekly|every\s+(?:mon|tues|wednes|thurs|fri|satur|sun)day|\d{1,2}\s*[::]\s*\d{2})/iu.test(e)?t(`schedule.unsupportedCalendar`):null}function lx(e,t){return ax(e,[`检查内容`,`监控内容`,`目标`,`Check target`,`Monitor target`,`Target`])||e.replace(/^(?:为当前 Goal |for the current Goal )?(?:添加|配置|创建|add|configure|create)?\s*(?:定时检查|监控|scheduled check|monitor)[::]?/iu,``).split(/\r?\n/u)[0].trim()||t(`schedule.defaultTarget`)}function ux(e){return/(mr|pr).{0,8}(合并|merge)/iu.test(e)?`pr_merged`:/发布完成|上线完成|release (?:is )?complete|deployment (?:is )?complete/iu.test(e)?`release_complete`:`goal_complete`}function dx(e,t){let n=e.toLowerCase();return t.find(e=>n.includes(e.agentId.toLowerCase())||n.includes(e.label.toLowerCase()))}function fx(e){let t=ax(e,[`标题`,`任务标题`,`Todo 标题`]),n=ax(e,[`内容`,`任务内容`,`Todo 内容`]);if(t)return[t,n].filter(Boolean).join(`:`).slice(0,400);let r=e.match(/[「“"]([^」”"]{2,200})[」”"]/u)?.[1];return r?r.trim():e.replace(/^(请|帮我|给我|为当前 Goal |新增|新建|创建|添加|加上|加一个|记一个)+/u,``).replace(/^(一个\s*)?(普通\s*)?(todo|待办|任务)(?:\s*到\s*Tasks?)?[::\s]*/iu,``).replace(/[。;;,,]\s*(?:不要|不需要|无需|禁止|别|暂不).{0,80}(?:heartbeat|心跳|定时|监控|执行).*$/iu,``).replace(/[,,]\s*(并且|然后|再)?\s*(交给|分配给|让).+$/u,``).replace(/\s*(交给|分配给|让)\s+.+$/u,``).trim().slice(0,400)||`推进当前 Goal 的下一项工作`}var px=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]),mx=5242880,hx=4;function gx(e,t){return new Promise((n,r)=>{let i=new FileReader;i.onerror=()=>r(Error(t(`composer.imageReadError`,{name:e.name}))),i.onload=()=>n({dataUrl:String(i.result??``),id:crypto.randomUUID(),mimeType:e.type,name:e.name,size:e.size}),i.readAsDataURL(e)})}function _x({agents:e=[{agentId:`codex`,available:!0,capability:`代码与项目执行`,label:`Codex`}],callbacks:t={},goalArchiveLoadState:n={error:null,phase:`ready`},model:r,readOnly:i=!1,selectedAgentId:a,selectedGoalId:o,statusSourceControl:s}){let{locale:c,t:l}=Ji(),[u,d]=(0,R.useState)(o??null),[f,p]=(0,R.useState)(a??e.find(e=>e.available)?.agentId??`codex`),[m,h]=(0,R.useState)(null),[g,_]=(0,R.useState)(!1),[v,y]=(0,R.useState)(null),[b,x]=(0,R.useState)({}),[S,C]=(0,R.useState)(`chat`),[w,T]=(0,R.useState)(!1),[E,D]=(0,R.useState)(!1),[O,k]=(0,R.useState)(!1),[ee,A]=(0,R.useState)(()=>{try{let e=window.sessionStorage.getItem(`loopx-pw-composer-drafts`),t=e?JSON.parse(e):{};return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}),[j,te]=(0,R.useState)(!1),[ne,re]=(0,R.useState)([]),[M,N]=(0,R.useState)(null),[ie,ae]=(0,R.useState)(null),[oe,P]=(0,R.useState)(()=>new Set),[F,I]=(0,R.useState)(()=>new Set),[se,ce]=(0,R.useState)(`idle`),[le,ue]=(0,R.useState)([]),[de,fe]=(0,R.useState)(!1),[pe,me]=(0,R.useState)(Hb),[he,ge]=(0,R.useState)({}),[_e,ve]=(0,R.useState)([]),ye=(0,R.useRef)(!1),be=(0,R.useRef)(NaN),xe=(0,R.useRef)(null),Se=(0,R.useRef)(null),Ce=(0,R.useRef)(null),we=(0,R.useRef)(new Set),Te=(0,R.useRef)(new Set),[Ee,De]=(0,R.useState)(null),L=o===void 0?u:o,Oe=a??f,ke=`${L??`manager`}:${Oe}`,Ae=ee[ke]??``;(0,R.useEffect)(()=>{re([]),N(null)},[ke]);function je(e,t){A(n=>{let r={...n};t?r[e]=t:delete r[e];try{window.sessionStorage.setItem(`loopx-pw-composer-drafts`,JSON.stringify(r))}catch{}return r})}function Me(e){je(ke,e)}function Ne(e){let t=ee[ke]?.trimEnd();Me(t?`${t}\n${e}`:e),window.requestAnimationFrame(()=>xe.current?.focus())}(0,R.useEffect)(()=>{let e=xe.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,120)}px`)},[Ae]);let Pe=(0,R.useMemo)(()=>r.goals.map(e=>{let t=he[e.goalId];return t?{...e,repository:{branch:t.branch,identity:t.identity,label:t.label,readOnly:!0}}:e}),[he,r.goals]),Fe=(0,R.useMemo)(()=>Pe.filter(e=>ty(e)===`needs_you`).length,[Pe]),Ie=(0,R.useMemo)(()=>Pe.filter(e=>ty(e)===`needs_you`&&(e.needsYouBlocking||e.state===`等你`)).length,[Pe]),B=Pe.find(e=>e.goalId===L)??null,Le=m?.kind===`settings`,Re=L,V=(0,R.useMemo)(()=>{let e=Object.values(b).filter(e=>e.actionKind===`heartbeat.bind`&&e.goalId&&e.status===`applied`).map(e=>({id:`schedule:${e.goalId}:heartbeat`,kind:`schedule`,schedule:{agentId:Oe,executionHistory:[],goalId:e.goalId,label:e.title,nextRunAt:l(`drawer.schedulePending`),notificationRule:l(`drawer.scheduleDefaultNotification`),schedule:e.fields.find(e=>e.key===`cadence`)?.value??l(`schedule.summary`),scheduleId:`${e.goalId}:heartbeat`,scheduleKind:`heartbeat`,status:e.status===`applied`?`active`:`draft`,stopCondition:e.fields.find(e=>e.key===`stop_condition`)?.value??l(`drawer.scheduleDefaultStop`),timezone:e.fields.find(e=>e.key===`timezone`)?.value??`Asia/Shanghai`}})),t=[...Qb(r,Re,l),...r.timeline??[],...e,...Kb(Object.values(b)).filter(e=>e.actionKind!==`heartbeat.bind`||e.status!==`applied`).map(e=>({id:`proposal:${e.previewId}`,kind:`proposal`,proposal:e}))];return[...new Map(t.map(e=>[e.id,e])).values()].filter(e=>e.kind!==`proposal`||![`stale`,`error`].includes(e.proposal.status)||le.includes(e.proposal.previewId)).filter(e=>!L||e.kind===`message`?!0:e.kind===`proposal`?!e.proposal.goalId||e.proposal.goalId===L:e.kind===`attention`?e.attention.goalId===L:e.kind===`run`?e.run.goalId===L:e.kind===`schedule`?e.schedule.goalId===L:e.output.goalId===L)},[Re,r,b,Oe,L,le,l]),ze=(0,R.useMemo)(()=>v?V.filter(e=>e.kind===`message`?!0:e.kind===`run`?e.run.runId===v.runId:e.kind===`output`&&e.output.runId===v.runId):V,[v,V]);(0,R.useEffect)(()=>{if(!v)return;let e=V.find(e=>e.kind===`run`&&e.run.runId===v.runId);!e||e.kind!==`run`||JSON.stringify({completedSteps:v.completedSteps,latestActivity:v.latestActivity,messages:v.sessionMessages,sessionStatus:v.sessionStatus,status:v.status,totalSteps:v.totalSteps})!==JSON.stringify({completedSteps:e.run.completedSteps,latestActivity:e.run.latestActivity,messages:e.run.sessionMessages,sessionStatus:e.run.sessionStatus,status:e.run.status,totalSteps:e.run.totalSteps})&&y(e.run)},[v,V]);let Be=(0,R.useMemo)(()=>V.flatMap(e=>e.kind===`message`?[e.message]:[]),[V]),Ve=(0,R.useMemo)(()=>B?V.flatMap(e=>e.kind===`message`?[e.message]:[]):[],[V,B]);(0,R.useEffect)(()=>{B||w||Be.some(e=>e.pending)&&D(!0)},[w,Be,B]),(0,R.useEffect)(()=>{!B||S===`chat`||Ve.some(e=>e.pending)&&k(!0)},[Ve,B,S]);let He=(0,R.useMemo)(()=>V.filter(e=>e.kind===`message`||e.kind===`proposal`&&le.includes(e.proposal.previewId)),[V,le]),Ue=He[He.length-1],We=Ue?.kind===`message`?Ue.message.text.length:0;(0,R.useEffect)(()=>{if(!w||!Se.current)return;let e=window.requestAnimationFrame(()=>{Se.current&&(Se.current.scrollTop=Se.current.scrollHeight)});return()=>window.cancelAnimationFrame(e)},[He.length,w,We]);let Ge=(0,R.useMemo)(()=>{if(m?.kind===`settings`)return null;if(m?.kind===`goal`){let e=Pe.find(e=>e.goalId===m.item.goalId);return e?{item:e,kind:`goal`}:m}if(m?.kind!==`run`)return m;let e=V.find(e=>e.kind===`run`&&e.run.runId===m.item.runId);return e?{item:e.run,kind:`run`}:m},[V,m,Pe]);(0,R.useEffect)(()=>{if(i){ge({}),ve([]);return}let e=!1;return Promise.all([Eg(),Lg()]).then(([t,n])=>{e||(ge(Object.fromEntries(t.map(e=>[e.goal_id,e.repository]))),ve(n))}).catch(()=>{}),()=>{e=!0}},[i]),(0,R.useEffect)(()=>{if(!de)return;function e(e){e.key===`Escape`&&fe(!1)}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[de]),(0,R.useEffect)(()=>{if(L||!V.length)return;if(!ye.current){ye.current=!0;try{be.current=Date.parse(window.localStorage.getItem(`loopx-pw-last-visit`)??``),window.localStorage.setItem(`loopx-pw-last-visit`,new Date().toISOString())}catch{be.current=NaN}}let e=be.current,t=V.filter(e=>e.kind===`run`).map(e=>e.run),n=t=>{let n=Date.parse(t??``);return!Number.isNaN(e)&&!Number.isNaN(n)&&n>e},r={attention:Fe,done:t.filter(e=>e.status===`completed`&&n(e.latestActivity)).length,failed:t.filter(e=>(e.status===`failed`||e.status===`interrupted`)&&n(e.latestActivity)).length};De(e=>e?.attention===r.attention&&e.done===r.done&&e.failed===r.failed?e:r)},[V,Fe,L]),(0,R.useEffect)(()=>{if(i){x({});return}let e=!1;return Ch(L?{goalId:L}:{contextKind:`manager`}).then(t=>{if(e)return;let n=Object.fromEntries(t.filter(e=>[`ready`,`gated`,`deferred`,`applying`].includes(e.status)).map(e=>{let t=nx(e,l);return[t.previewId,t]}));x(e=>({...e,...n}))}).catch(()=>{}),()=>{e=!0}},[i,L,l]);async function Ke(e,n={}){if(i)throw Error(l(`source.readOnlyWriteError`));let r;try{r=t.onPreviewAction?await t.onPreviewAction(e):nx(await xh(e),l)}catch(t){if(!(t instanceof _h)||t.payload.error_code!==`action_preview_gate`)throw t;let n=t.payload.gate&&typeof t.payload.gate==`object`?t.payload.gate:{},i=(Array.isArray(n.candidates)?n.candidates:[]).flatMap(e=>{if(!e||typeof e!=`object`)return[];let t=e;return typeof t.workspace_ref==`string`&&typeof t.label==`string`?[{label:t.label,workspaceRef:t.workspace_ref}]:[]}),a=String(n.kind??`workspace_selection_required`),o=a===`agent_binding_required`||a===`agent_identity_selection_required`;r={actionKind:e.actionKind,fields:i.map(e=>({key:`workspace_ref:${e.workspaceRef}`,label:e.label,value:e.workspaceRef})),gate:{kind:a,nextAction:typeof n.next_action==`string`?n.next_action:void 0,summary:String(n.summary??l(`proposal.workspaceGate.defaultSummary`))},impact:l(o?`proposal.workspaceGate.agentImpact`:`proposal.workspaceGate.selectionImpact`),previewId:`workspace-choice-${Date.now().toString(36)}`,sourceRequest:e,status:`gated`,title:l(o?`proposal.workspaceGate.agentTitle`:`proposal.workspaceGate.selectionTitle`),workspaceCandidates:i}}return ue(e=>e.includes(r.previewId)?e:[...e,r.previewId]),x(e=>({...e,[r.previewId]:r})),n.select!==!1&&h({item:r,kind:`proposal`}),r}function qe(){tt(null),je(`manager:${Oe}`,l(`composer.createGoalTemplate`)),window.requestAnimationFrame(()=>xe.current?.focus())}async function Je(e,n){let r={delete:`Deleted from the owner workspace`,resume:`Resumed from the owner workspace`,stop:`Stopped from the owner workspace`},i={delete:l(`proposal.summary.lifecycleDelete`,{title:e.title}),resume:l(`proposal.summary.lifecycleResume`,{title:e.title}),stop:l(`proposal.summary.lifecycleStop`,{title:e.title})},a=null,o=!1;try{if(n===`stop`){if(we.current.has(e.goalId))return;we.current.add(e.goalId),P(new Set(we.current)),h(null),a={goalId:e.goalId,next:`stopped`,optimisticApplied:!0,previous:e.activationState},ae(l(`feedback.applying`,{title:i.stop})),t.onGoalActivationStateChange?.(e.goalId,`stopped`)}let s=await Ke({actionKind:`goal.lifecycle`,context:{kind:`goal_directory`,goal_id:e.goalId},idempotencyKey:`workspace-goal-${n}-${e.goalId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,operation:n,reason:r[n]},summary:i[n]},{select:n!==`stop`});n===`stop`&&(s.status===`ready`?(o=!0,await Qe(s,{lifecycleProjection:a??void 0,presentation:`feedback`})):(a&&t.onGoalActivationStateChange?.(a.goalId,a.previous),ae(s.gate?l(`feedback.gateRequired`,{summary:s.gate.summary}):l(`feedback.notCompleted`,{status:s.status})),h({item:s,kind:`proposal`})))}catch(e){a&&!o&&t.onGoalActivationStateChange?.(a.goalId,a.previous),ae(l(`feedback.executionFailed`,{error:e instanceof Error?e.message:String(e)}))}finally{n===`stop`&&(we.current.delete(e.goalId),P(new Set(we.current)))}}function Ye(e,t){Me(l(t?e===`heartbeat`?`composer.heartbeatTemplate`:`composer.monitorTemplate`:e===`heartbeat`?`composer.heartbeatTemplateWithoutGoal`:`composer.monitorTemplateWithoutGoal`)),h(null),window.requestAnimationFrame(()=>xe.current?.focus())}async function Xe(e,n,r=``){let i=await t.onRequestScheduleConfig?.(e,n);if(i){ue(e=>e.includes(i.previewId)?e:[...e,i.previewId]),x(e=>({...e,[i.previewId]:i})),h({item:i,kind:`proposal`});return}if(!n){Me(l(e===`heartbeat`?`composer.heartbeatGoalQuestion`:`composer.monitorGoalQuestion`));return}let a=Date.now().toString(36);await Ke({actionKind:e===`heartbeat`?`heartbeat.bind`:`monitor.create`,context:{kind:`schedule`,goal_id:n},idempotencyKey:`workspace-${e}-${n}-${a}`,normalizedParameters:e===`heartbeat`?{agent_id:Oe,cadence:sx(r),goal_id:n,stop_condition:ux(r),timezone:`Asia/Shanghai`}:{agent_id:Oe,cadence:sx(r),goal_id:n,stop_condition:ux(r),target:lx(r,l),target_key:`goal-${n}`,timezone:`Asia/Shanghai`},summary:e===`heartbeat`?l(`proposal.summary.heartbeat`):l(`proposal.summary.monitor`,{target:lx(r,l)})})}async function Ze(e){if(!Te.current.has(e.todoId)){Te.current.add(e.todoId),I(new Set(Te.current)),ae(l(`feedback.preparingPreview`,{title:e.text}));try{await Ke({actionKind:`todo.update`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-${e.todoId}-complete-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,operation:`complete`,todo_id:e.todoId},summary:l(`tasks.markComplete`,{name:e.text})}),ae(null)}catch(e){ae(l(`feedback.previewFailed`,{error:e instanceof Error?e.message:String(e)}))}finally{Te.current.delete(e.todoId),I(new Set(Te.current))}}}async function Qe(e,n={}){let i=n.presentation!==`feedback`,a=e.actionKind===`goal.lifecycle`&&e.goalId&&(e.lifecycleOperation===`stop`||e.lifecycleOperation===`resume`)?{goalId:e.goalId,next:e.lifecycleOperation===`stop`?`stopped`:`active`,optimisticApplied:!1,previous:r.goals.find(t=>t.goalId===e.goalId)?.activationState??(e.lifecycleOperation===`stop`?`active`:`stopped`)}:null,o=n.lifecycleProjection??a;ae(l(`feedback.applying`,{title:e.title}));let s={...e,status:`applying`};x(t=>({...t,[e.previewId]:s})),i&&h({item:s,kind:`proposal`}),o&&!o.optimisticApplied&&t.onGoalActivationStateChange?.(o.goalId,o.next);try{if(t.onApplyProposal){await t.onApplyProposal(e);let n={...e,status:`applied`};if(x(t=>({...t,[e.previewId]:n})),i&&h({item:n,kind:`proposal`}),ae(l(`feedback.completed`,{title:e.title})),e.actionKind===`goal.lifecycle`){(e.lifecycleOperation===`stop`||e.lifecycleOperation===`delete`)&&tt(null),e.lifecycleOperation===`delete`&&e.goalId&&t.onGoalDeleted?.(e.goalId);let n=t.onReconcileStatus??t.onRefresh;Promise.resolve().then(()=>n?.()).catch(()=>void 0)}return}let n=await wh(e.previewId),r=nx(n.proposal,l);if(x(t=>({...t,[e.previewId]:r})),i&&h({item:r,kind:`proposal`}),n.proposal.status!==`applied`||n.proposal.receipt?.projection_verified!==!0){o&&t.onGoalActivationStateChange?.(o.goalId,o.previous),ae(n.proposal.status===`stale`?l(`feedback.stale`):l(`feedback.notCompleted`,{status:n.proposal.status}));return}if(ae(l(`feedback.completed`,{title:r.title})),r.actionKind===`todo.create`&&await t.onRefresh?.(),r.actionKind===`goal.lifecycle`&&(r.lifecycleOperation===`stop`||r.lifecycleOperation===`delete`)&&tt(null),r.actionKind===`goal.lifecycle`&&r.lifecycleOperation===`delete`&&r.goalId&&t.onGoalDeleted?.(r.goalId),r.actionKind===`goal.lifecycle`){let e=t.onReconcileStatus??t.onRefresh;Promise.resolve().then(()=>e?.()).catch(()=>void 0)}}catch(n){if(o&&t.onGoalActivationStateChange?.(o.goalId,o.previous),n instanceof _h&&n.payload.error_code===`protected_action`){let r=n.payload.gate,i=r&&typeof r==`object`?r:{},a={...e,gate:{kind:String(i.kind??`protected_action`),nextAction:typeof i.next_action==`string`?i.next_action:void 0,summary:String(i.summary??n.message)},status:`gated`};x(t=>({...t,[e.previewId]:a})),h({item:a,kind:`proposal`}),ae(l(`feedback.gateRequired`,{summary:a.gate.summary})),e.actionKind===`goal.create`&&e.goalId&&(t.onRefresh?.(),tt(e.goalId));return}let r=n instanceof Error&&/stale|状态.*变化|conflict/i.test(n.message),a={...e,errorMessage:n instanceof Error?n.message:String(n),status:r?`stale`:`error`};x(t=>({...t,[e.previewId]:a})),i&&h({item:a,kind:`proposal`}),ae(l(`feedback.executionFailed`,{error:a.errorMessage}))}}let $e={...t,onOpenRunSession:async e=>{e.goalId!==L&&tt(e.goalId),C(`chat`),await t.onOpenRunSession?.(e),y(e),h(null)},onOpenGoal:e=>{tt(e);let n=t.onReconcileStatus??t.onRefresh;Promise.resolve().then(()=>n?.()).catch(()=>{ae(l(`feedback.goalRefreshFailed`))})},onOpenGoalView:e=>{C(e),e===`chat`&&y(null),h(null)},onOpenOutput:e=>{e.goalId!==L&&tt(e.goalId),C(`files`),t.onOpenOutput?.(e)},onApplyProposal:Qe,onCancelProposal:async e=>{h(null),x(t=>{let n={...t};return delete n[e.previewId],n});try{t.onCancelProposal?.(e),t.onCancelProposal||await Th(e.previewId)}catch(t){x(t=>({...t,[e.previewId]:e})),ae(l(`feedback.cancelFailed`,{error:t instanceof Error?t.message:String(t)}))}},onTransitionProposal:async(e,t)=>{let n=nx(await Eh(e.previewId,t),l);ue(e=>e.includes(n.previewId)?e:[...e,n.previewId]),x(r=>{let i={...r};return t===`regenerate`&&delete i[e.previewId],i[n.previewId]=n,i}),h({item:n,kind:`proposal`})},onSelectWorkspaceCandidate:async(e,t)=>{e.sourceRequest&&(x(t=>{let n={...t};return delete n[e.previewId],n}),await Ke({...e.sourceRequest,idempotencyKey:`${e.sourceRequest.idempotencyKey}-${t}`,normalizedParameters:{...e.sourceRequest.normalizedParameters,workspace_ref:t}}))},onPreviewAction:Ke,onRequestScheduleConfig:(e,t)=>Ye(e,t),onOpenNotificationSettings:e=>h({goalId:e,kind:`settings`,tab:`lark`}),onFetchNotificationTargets:()=>Yh(),onSetupGoalChannel:e=>Zh(e),onToggleGoalAutoNotify:e=>Qh(e),onUpdateSchedule:async(e,t)=>{let n=Date.now().toString(36),r=e.scheduleKind===`heartbeat`;await Ke({actionKind:r?`heartbeat.bind`:`monitor.update`,context:{kind:`schedule`,goal_id:e.goalId},idempotencyKey:`workspace-monitor-${e.scheduleId}-${t}-${n}`,normalizedParameters:{agent_id:e.agentId??Oe,...!r&&t===`run_now`?{endpoint_id:Oe}:{},...t===`edit`?{cadence:`2h`,...r?{timezone:e.timezone??`Asia/Shanghai`}:{}}:{},goal_id:e.goalId,operation:t,...!r&&t===`run_now`&&e.sessionId?{session_id:e.sessionId}:{},...r?{}:{todo_id:e.scheduleId}},summary:t===`pause`?`暂停自动运行:${e.label}`:t===`resume`?`恢复自动运行:${e.label}`:t===`run_now`?`立即运行:${e.label}`:t===`stop`?`停止自动运行:${e.label}`:`编辑自动运行生命周期:${e.label}`})}},et=i?{onOpenGoal:$e.onOpenGoal,onOpenGoalView:$e.onOpenGoalView,onOpenOutput:$e.onOpenOutput}:$e;function tt(e){d(e),T(!1),D(!1),k(!1),y(null),h(null),C(`tasks`),fe(!1),t.onSelectGoal?.(e)}function nt(e){p(e),t.onSelectAgent?.(e)}function rt(e){me(e),Ub(e)}async function it(n){let r=n?[]:ne,i=(n??Ae).trim()||(r.length?l(`composer.imageAnalysisPrompt`):``);if(!(!i||j)){n||(Me(``),re([])),N(null),te(!0);try{if(r.length){L?S!==`chat`&&k(!0):D(!0);let e=await t.onSendMessage?.(i,Oe,L,r);e&&await Ke(e);return}let n=Dy(i,{agents:e.map(e=>({agentId:e.agentId,label:e.label})),goalId:L,todos:(B?.agentTodos??[]).map(e=>({text:e.text,todoId:e.todoId}))});if(n.route===`clarify`){Me(i);let e=l(`composer.clarifySingleAction`);n.missingFields.includes(`resume_when`)&&(e=l(`composer.clarifyDefer`)),ae(e);return}if(n.actionKind===`goal.create`){let e=ox(i,l),t=rx(e.title);await Ke({actionKind:`goal.create`,context:{kind:`manager`,goal_id:null,natural_language:i},idempotencyKey:`workspace-goal-intent-${t}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:Oe,completion_criteria:e.completionCriteria,execution_boundary:e.executionBoundary,goal_id:t,heartbeat:{cadence:sx(i),enabled:n.normalizedParameters.heartbeat_enabled===!0,timezone:`Asia/Shanghai`},initial_todos:e.initialTodos,objective:e.objective,permission:e.permission,stop_condition:ux(i),title:e.title,workspace_ref:`current`},summary:l(`proposal.summary.goalCreate`,{title:e.title})});return}if(L&&n.actionKind===`heartbeat.bind`){await Xe(`heartbeat`,L,i);return}if(L&&n.actionKind===`monitor.create`){let e=cx(i,l);if(e){Me(i),ae(e);return}await Xe(`monitor`,L,i);return}let a=dx(i,e);if(L&&a&&n.actionKind===`agent.bind`){await Ke({actionKind:`agent.bind`,context:{kind:`goal`,goal_id:L,natural_language:i},idempotencyKey:`workspace-agent-bind-${L}-${a.agentId}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:a.agentId,goal_id:L},summary:`将 ${a.label} 绑定到 ${B?.title??L}`});return}if(L&&n.actionKind===`todo.create`){if(n.normalizedParameters.start_execution===!0){await Ke({actionKind:`todo.create`,context:{kind:`goal`,goal_id:L,natural_language:i},idempotencyKey:`workspace-task-start-${L}-${Date.now().toString(36)}`,normalizedParameters:{endpoint_id:a?.agentId??Oe,goal_id:L,start_execution:!0,text:i},summary:`交给 Agent 执行:${i.slice(0,120)}`});return}let e=a?.agentId??(/(交给|分配给|让).{0,24}(agent|codex|claude|kiro|kimi)/iu.test(i)?Oe:null);await Ke({actionKind:`todo.create`,context:{kind:`goal`,goal_id:L,natural_language:i},idempotencyKey:`workspace-todo-create-${L}-${Date.now().toString(36)}`,normalizedParameters:{...e?{endpoint_id:e}:{},goal_id:L,text:fx(i)},summary:`创建 Todo:${fx(i)}`});return}let o=B?.agentTodos.find(e=>i.includes(e.todoId)||i.includes(e.text)),s=typeof n.normalizedParameters.operation==`string`?n.normalizedParameters.operation:null;if(L&&o&&n.actionKind===`todo.update`&&s){await Ke({actionKind:`todo.update`,context:{kind:`todo`,goal_id:L,todo_id:o.todoId,natural_language:i},idempotencyKey:`workspace-todo-update-${o.todoId}-${s}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:Oe,...s===`reassign`&&a?{endpoint_id:a.agentId}:{},...s===`block`?{note:i}:{},...s===`defer`&&typeof n.normalizedParameters.resume_when==`string`?{resume_when:n.normalizedParameters.resume_when}:{},goal_id:L,operation:s,todo_id:o.todoId},summary:`更新 Todo:${o.text}`});return}L?S!==`chat`&&k(!0):D(!0);let c=await t.onSendMessage?.(i,Oe,L);c&&await Ke(c)}catch(e){n||(Me(i),re(r));let t=e instanceof Error?e.message:l(`feedback.sendGenericError`);ae(l(`feedback.sendFailed`,{error:t}))}finally{te(!1)}}}let at=e.find(e=>e.agentId===Oe)?.label??Oe,ot=!B&&Ae.startsWith(l(`composer.createGoalDraftLead`)),st=V.filter(e=>e.kind===`run`&&!!e.run.sessionId&&!!e.run.canInterrupt&&(e.run.status===`running`||e.run.status===`queued`)).length;async function ct(e){if(!e?.length)return;let t=hx-ne.length,n=Array.from(e).slice(0,Math.max(0,t)),r=n.find(e=>!px.has(e.type)),i=n.find(e=>e.size>mx);if(t<=0){N(l(`composer.imageCountError`,{count:hx}));return}if(r){N(l(`composer.imageTypeError`));return}if(i){N(l(`composer.imageSizeError`,{size:mx/1024/1024}));return}try{let t=await Promise.all(n.map(e=>gx(e,l)));re(e=>[...e,...t].slice(0,hx)),N(e.length>n.length?l(`composer.imageCountError`,{count:hx}):null)}catch(e){N(e instanceof Error?e.message:l(`composer.imageReadGenericError`))}finally{Ce.current&&(Ce.current.value=``)}}function lt(e){let t=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&e.type.startsWith(`image/`)).flatMap(e=>{let t=e.getAsFile();return t?[t]:[]});t.length&&(e.preventDefault(),ct(t))}async function ut(){let e=await Lg();ve(e)}async function dt(){await Promise.all([ut(),t.onRefresh?.()])}async function ft(){if(!(!t.onRefresh||se===`loading`)){ce(`loading`);try{await t.onRefresh(),ce(`done`)}catch{ce(`error`)}window.setTimeout(()=>ce(`idle`),1800)}}return Le?(0,z.jsx)(zb,{focusGoalConnection:!!(m?.kind===`settings`&&m.goalId),goals:Pe,initialGoalId:m?.kind===`settings`?m.goalId??L:L,initialTab:m?.kind===`settings`?m.tab??`lark`:`lark`,onChanged:()=>void dt(),onClose:()=>h(null),onThemeChange:rt,theme:pe}):(0,z.jsx)(Wb,{drawer:Ge?(0,z.jsx)(Fy,{agents:e,callbacks:et,goalNotifications:r.goalNotifications??[],goals:Pe,inspectorExpanded:g,larkConnections:i?[]:_e,onClose:()=>{Ge.kind===`proposal`&&[`applied`,`rejected`].includes(Ge.item.status)&&(Ge.item.actionKind!==`heartbeat.bind`||Ge.item.status!==`applied`)&&x(e=>{let t={...e};return delete t[Ge.item.previewId],t}),_(!1),h(null)},onToggleInspectorSize:()=>_(e=>!e),readOnly:i,runs:V.flatMap(e=>e.kind===`run`?[e.run]:[]),selection:Ge}):null,drawerMode:Ge?.kind===`todo`?g?`inspector-full`:`inspector`:`panel`,drawerOpen:Ge!==null,mobileSidebarOpen:de,onCloseMobileSidebar:()=>fe(!1),theme:pe,main:(0,z.jsxs)(`div`,{className:`personal-channel`,children:[(0,z.jsx)(ly,{agents:e,managerChatOpen:w,mobileNavigationOpen:de,onOpenGoalCapabilities:B?()=>h({goalId:B.goalId,kind:`settings`,tab:`capabilities`}):void 0,onOpenGoalDetail:B&&!B.loadState?()=>h({item:B,kind:`goal`}):void 0,onRefresh:t.onRefresh?()=>void ft():void 0,onOpenNavigation:()=>fe(!0),onOpenManagerChat:()=>{D(!1),T(!0)},onSelectGoalTab:e=>{C(e),e===`chat`&&(y(null),k(!1))},onSelectAgent:nt,onReturnManagerHome:()=>{T(!1),D(!1),window.requestAnimationFrame(()=>Se.current?.scrollTo({behavior:`smooth`,top:0}))},selectedAgentId:Oe,refreshState:se,readOnlySourceLabel:i?s?.activeSource.label:void 0,selectedGoal:B,selectedGoalTab:S}),(0,z.jsxs)(`div`,{className:`personal-channel-scroll`,ref:Se,children:[!B&&!w&&Ee&&Ee.done+Ee.failed+Ee.attention>0?(0,z.jsxs)(`section`,{className:`personal-digest-card`,"aria-label":l(`digest.away`),children:[(0,z.jsx)(`strong`,{children:l(`digest.away`)}),(0,z.jsxs)(`div`,{className:`personal-digest-stats`,children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Ee.done}),l(`digest.completed`)]}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Ee.failed}),l(`digest.failed`)]}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Ee.attention}),l(`digest.needsYou`)]})]})]}):null,!B&&!w?(0,z.jsxs)(`section`,{className:`personal-manager-greeting`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(Up,{size:20})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:l(`home.greeting`)}),(0,z.jsx)(`p`,{children:r.goals.some(e=>e.activationState===`active`&&e.loadState)?l(`startup.partial`):(0,z.jsxs)(z.Fragment,{children:[l(`home.waitingCount`,{count:Fe}),` `,l(`home.blockingSummary`,{count:Ie})]})})]})]}):null,B?.loadState?(0,z.jsx)(`section`,{className:`personal-manager-greeting`,role:`status`,"data-testid":`goal-status-loading`,children:(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:l(B.loadState===`error`?`startup.goalError`:`startup.goalLoading`)}),(0,z.jsx)(`p`,{children:l(B.loadError?`startup.error.${B.loadError}`:`startup.independent`)}),B.loadState===`error`?(0,z.jsx)(`button`,{className:`min-h-11 rounded-md border px-3 py-2 text-sm`,type:`button`,onClick:()=>void t.onRefresh?.(),children:l(`startup.retry`)}):null]})}):B&&S===`tasks`?(0,z.jsx)(ib,{historyEnabled:!i,goal:B,items:V,onDraftTaskFromMessage:i?void 0:e=>{Me(`创建一个 Task:${Gb(e)}`),ae(l(`feedback.taskDraftCreated`)),window.requestAnimationFrame(()=>xe.current?.focus())},onOpenChat:()=>C(`chat`),onQuickComplete:i?void 0:Ze,onSelect:h,quickCompletingTodoIds:F,selectedTodoId:Ge?.kind===`todo`?Ge.item.todoId:null,userTodos:r.userTodos}):B&&S===`files`?(0,z.jsx)(Yb,{items:V.filter(e=>e.kind===`output`),onSelect:h,reportState:r.periodicReports}):!B&&!w?(0,z.jsx)(Jb,{goals:Pe,onRetry:()=>void t.onRefresh?.(),onSelectGoal:tt,systemHealth:r.systemHealth}):B?(0,z.jsxs)(z.Fragment,{children:[B&&v?.goalId===B.goalId?(0,z.jsx)(Zb,{onClose:()=>y(null),onOpenDetails:()=>h({item:v,kind:`run`}),run:v}):null,(0,z.jsx)(xy,{items:ze,onSelect:h,selectedGoal:B})]}):(0,z.jsx)(xy,{items:He,onSelect:h,selectedGoal:null})]}),(0,z.jsx)(`div`,{className:`personal-composer-wrap`,children:i?(0,z.jsxs)(`div`,{className:`personal-read-only-notice`,children:[(0,z.jsx)(`strong`,{children:l(`source.readOnlyNoticeTitle`)}),(0,z.jsx)(`span`,{children:l(`source.readOnlyNoticeDescription`)})]}):(0,z.jsxs)(z.Fragment,{children:[!B&&!w&&E&&Be.length?(0,z.jsx)(Xb,{messages:Be,onClose:()=>D(!1),onOpenConversation:()=>{D(!1),T(!0)}}):null,B&&S!==`chat`&&O&&Ve.length?(0,z.jsx)(Xb,{agentLabel:at,messages:Ve,onClose:()=>k(!1),onDraftTask:S===`tasks`?e=>{Me(`创建一个 Task:${Gb(e)}`),ae(l(`feedback.taskDraftCreated`)),window.requestAnimationFrame(()=>xe.current?.focus())}:void 0,onOpenConversation:()=>{k(!1),C(`chat`)},title:`${B.title} · ${at}`}):null,ie?(0,z.jsxs)(`div`,{className:`personal-action-feedback`,role:`status`,children:[(0,z.jsx)(`span`,{children:ie}),(0,z.jsx)(`button`,{"aria-label":l(`common.closeActionReceipt`),onClick:()=>ae(null),type:`button`,children:(0,z.jsx)(Gm,{size:14})})]}):null,(0,z.jsx)(`p`,{className:`personal-composer-hint`,children:B?st>0?l(`composer.goalRunningHint`,{agent:at,count:st}):l(`composer.goalMessageHint`,{agent:at}):l(`composer.managerMessageHint`)}),B?(0,z.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,z.jsxs)(`button`,{"aria-label":l(`composer.nextAction`),className:`is-draft`,onClick:()=>Ne(l(`composer.nextActionPrompt`)),title:l(`composer.prepareDraft`),type:`button`,children:[(0,z.jsx)(vm,{size:13}),(0,z.jsx)(`span`,{children:l(`composer.nextAction`)}),(0,z.jsx)(`small`,{className:`personal-prompt-subtle`,children:l(`composer.draft`)})]}),(0,z.jsxs)(`button`,{className:`is-immediate`,disabled:j,onClick:()=>void it(l(`composer.agentProgressPrompt`)),title:l(`composer.immediate`),type:`button`,children:[(0,z.jsx)(Mm,{size:13}),(0,z.jsx)(`span`,{children:l(`composer.agentProgress`)}),(0,z.jsx)(`em`,{className:`personal-prompt-badge`,children:l(`composer.immediate`)})]}),(0,z.jsxs)(`button`,{"aria-label":l(`composer.monitor`),className:`is-draft`,onClick:()=>Ye(`monitor`,L),title:l(`composer.monitorHint`),type:`button`,children:[(0,z.jsx)(Gp,{size:13}),(0,z.jsx)(`span`,{children:l(`composer.monitor`)}),(0,z.jsx)(`small`,{className:`personal-prompt-subtle`,children:l(`composer.draft`)})]})]}):(0,z.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,z.jsxs)(`button`,{"aria-label":l(`composer.globalTasks`),className:`is-draft`,onClick:()=>Ne(l(`composer.globalTasksPrompt`)),title:l(`composer.prepareDraft`),type:`button`,children:[(0,z.jsx)(vm,{size:13}),(0,z.jsx)(`span`,{children:l(`composer.globalTasks`)}),(0,z.jsx)(`small`,{className:`personal-prompt-subtle`,children:l(`composer.draft`)})]}),(0,z.jsxs)(`button`,{className:`is-immediate`,disabled:j,onClick:()=>void it(l(`composer.globalProgressPrompt`)),title:l(`composer.immediate`),type:`button`,children:[(0,z.jsx)(Mm,{size:13}),(0,z.jsx)(`span`,{children:l(`composer.globalProgress`)}),(0,z.jsx)(`em`,{className:`personal-prompt-badge`,children:l(`composer.immediate`)})]}),(0,z.jsxs)(`button`,{"aria-label":l(`composer.createGoal`),className:`is-draft`,onClick:qe,title:l(`composer.createGoalHint`),type:`button`,children:[(0,z.jsx)(Em,{size:13}),(0,z.jsx)(`span`,{children:l(`composer.createGoal`)}),(0,z.jsx)(`small`,{className:`personal-prompt-subtle`,children:l(`composer.draft`)})]})]}),ot?(0,z.jsxs)(`div`,{className:`personal-goal-draft-status`,role:`status`,children:[(0,z.jsx)(`strong`,{children:l(`composer.createGoalDraft`)}),(0,z.jsx)(`span`,{children:l(`composer.createGoalDraftDescription`)})]}):null,ne.length?(0,z.jsx)(`div`,{className:`personal-composer-images`,"aria-label":l(`composer.imagesPending`),children:ne.map(e=>(0,z.jsxs)(`figure`,{children:[(0,z.jsx)(`img`,{alt:e.name,src:e.dataUrl}),(0,z.jsx)(`button`,{"aria-label":l(`composer.sentImageAlt`,{name:e.name}),onClick:()=>re(t=>t.filter(t=>t.id!==e.id)),type:`button`,children:(0,z.jsx)(Gm,{size:13})})]},e.id))}):null,M?(0,z.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:M}):null,(0,z.jsxs)(`div`,{className:`personal-channel-composer`,onDragOver:e=>{[...e.dataTransfer.items].some(e=>e.kind===`file`&&e.type.startsWith(`image/`))&&e.preventDefault()},onDrop:e=>{let t=[...e.dataTransfer.files].filter(e=>e.type.startsWith(`image/`));t.length&&(e.preventDefault(),ct(t))},children:[(0,z.jsxs)(`span`,{children:[(0,z.jsx)(Up,{size:17}),e.find(e=>e.agentId===Oe)?.label??Oe]}),(0,z.jsx)(`button`,{"aria-label":l(`composer.addImage`),className:`personal-composer-attach`,disabled:j||ne.length>=hx,onClick:()=>Ce.current?.click(),title:l(`composer.attachImageHint`),type:`button`,children:(0,z.jsx)(Cm,{size:17})}),(0,z.jsx)(`input`,{accept:`image/png,image/jpeg,image/webp,image/gif`,"aria-label":l(`composer.imagePicker`),className:`personal-composer-file-input`,disabled:j||ne.length>=hx,multiple:!0,onChange:e=>void ct(e.target.files),ref:Ce,type:`file`}),(0,z.jsx)(`textarea`,{"aria-label":l(`composer.sendMessage`),onChange:e=>Me(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),it())},onPaste:lt,placeholder:B?l(`composer.goalPlaceholder`,{goal:B.title}):l(`composer.managerPlaceholder`),ref:xe,rows:1,value:Ae}),(0,z.jsx)(`button`,{"aria-label":l(ot?`composer.createGoal`:`composer.send`),disabled:!Ae.trim()&&ne.length===0||j,onClick:()=>void it(),title:l(ot?`composer.createGoalHint`:`composer.sendMessageHint`),type:`button`,children:(0,z.jsx)(Mm,{size:18})})]})]})})]}),sidebar:(0,z.jsx)(eb,{attentionCount:Fe,goals:Pe,goalArchiveLoadState:n,lifecycleBusyGoalIds:oe,onRequestGoalCreate:i?void 0:qe,onRequestGoalLifecycle:i?void 0:(e,t)=>void Je(e,t),onRetryGoalArchive:t.onRetryGoalArchive||t.onRefresh?()=>void(t.onRetryGoalArchive??t.onRefresh)?.():void 0,onOpenSettings:i?void 0:()=>h({kind:`settings`}),onSelectGoal:tt,selectedGoalId:L,statusSourceControl:s},s?.activeSource.statusUrl??`/status.json`)})}function vx(e){return(e??``).replace(/\s+/gu,` `).trim()}function yx(e,t=120){let n=Array.from(e);return n.length<=t?e:`${n.slice(0,t-1).join(``)}…`}function bx(e,t,n){let r=vx(e);return!r||r===`暂无`?n?t(n):``:/refresh-state|latest_run|latest run-derived/iu.test(r)?t(`projection.refreshState`):/first read-only adapter tick|read-only adapter/iu.test(r)?t(`projection.firstReadOnlyAdapterCheck`):/todo update recorded for/iu.test(r)?t(`projection.todoStatusUpdated`):/^(loopx|python3|npm|git|run)\s|\s--[a-z0-9-]+|\b[a-z]+_[a-z_]+\b/iu.test(r)?t(n??`projection.agentPreparingNextStep`):yx(r)}function xx(e,t){return t({advancing:`projection.agentAdvancingGoal`,idle:`projection.agentIdle`,needs_you:`projection.agentNeedsDecision`,stopped:`projection.agentStopped`,waiting_external:`projection.agentWaitingExternal`}[e])}function Sx({eventCount:e,hasArtifact:t,hasLatestValidation:n},r){return{label:r(n?`projection.latestValidation`:`projection.latestRun`),metadata:e>0?r(`projection.events24h`,{count:e}):r(t?`projection.runEvidenceAvailable`:`projection.publicSafeProjection`)}}var Cx=`/status.json`,wx=`loopx-status-source-catalog-v1`,Tx={id:`local`,kind:`local`,label:`本机`,readOnly:!1,statusUrl:Cx};function Ex(e,t){let n=Xm(e,t).source;if(!n||!n.isLoopback||n.isRelative)return{error:`SSH 隧道来源必须使用显式的 localhost、127.0.0.1 或 ::1 URL。`};let r=new URL(n.url,t);return[`http:`,`https:`].includes(r.protocol)?{url:r.toString()}:{error:`状态来源只支持 HTTP 或 HTTPS。`}}function Dx(e){let t=2166136261;for(let n of e)t^=n.codePointAt(0)??0,t=Math.imul(t,16777619);return`ssh-${(t>>>0).toString(36)}`}function Ox(e,t){if(!e||typeof e!=`object`||Array.isArray(e))return null;let n=e;if(n.kind!==`ssh_tunnel`||typeof n.label!=`string`||typeof n.statusUrl!=`string`)return null;let r=n.label.trim(),i=Ex(n.statusUrl,t);return!r||r.length>48||!(`url`in i)?null:{id:Dx(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url}}function kx(){return{schemaVersion:1,sources:[Tx]}}function Ax(e,t){try{let n=e.getItem(wx);if(!n)return kx();let r=JSON.parse(n);if(r.schemaVersion!==1||!Array.isArray(r.sources))return kx();let i=new Set([Tx.statusUrl]);return{schemaVersion:1,sources:[Tx,...r.sources.flatMap(e=>{let n=Ox(e,t);return!n||i.has(n.statusUrl)?[]:(i.add(n.statusUrl),[n])})]}}catch{return kx()}}function jx(e,t){e.setItem(wx,JSON.stringify({schemaVersion:1,sources:t.sources.filter(e=>e.kind===`ssh_tunnel`)}))}function Mx(e,t,n){let r=t.label.trim();if(!r)return{error:`请填写来源名称。`};if(r.length>48)return{error:`来源名称不能超过 48 个字符。`};let i=Ex(t.statusUrl,n);if(!(`url`in i))return i;if(e.sources.some(e=>e.statusUrl===i.url))return{error:`这个状态 URL 已经在来源目录中。`};let a={id:Dx(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url};return{catalog:{...e,sources:[...e.sources,a]},source:a}}function Nx(e,t){return{...e,sources:e.sources.filter(e=>e.kind===`local`||e.id!==t)}}function Px(e,t,n){if(!t.trim()||Xm(t,n).source?.isRelative)return Tx;let r=t.trim();try{r=new URL(r,n).toString()}catch{return null}return e.sources.find(e=>e.statusUrl===r)??null}function Fx(e,t,n){return Px(e,t,n)||(Xm(t,n).source?.isRelative?Tx:{id:`temporary`,kind:`ssh_tunnel`,label:`临时来源`,readOnly:!0,statusUrl:t.trim()})}function Ix(e,t,n,r){return Fx(e,t??n,r)}var Lx={delete:`删除`,deploy:`部署`,merge:`合并`,payment:`付款`,release:`发布`};function Rx(e,t,n){let r=t.replace(/\s+/gu,` `).trim().toLowerCase(),i=n.target.replace(/\s+/gu,` `).trim().toLowerCase();return!i||!r.includes(i)?null:{actionKind:`goal.update`,context:{goal_id:e,kind:`goal`,natural_language:t,semantic_proposal:{operation:n.operation,target:n.target}},idempotencyKey:`workspace-semantic-protected-${e}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e,status:`operator_gate_requested`},summary:`请求受保护操作:${Lx[n.operation]} · ${n.target}`}}var zx=Cx;async function Bx(e){let t=await fetch(e,{cache:`no-store`,signal:AbortSignal.timeout(3e4)});if(!t.ok)throw Error(`HTTP ${t.status} while loading ${e}`);return vp(await t.json())}function Vx(e,t){if(t?.controller_readiness?.decision_advisor_ready||t?.controller_readiness?.write_controller_ready)return`controller_ready`;if(t?.controller_readiness)return`controller_gated`;if(t?.human_reward)return`reward_judged`;if(t?.operator_gate?.decision===`approve`)return`operator_approved`;if(t?.operator_gate)return`operator_gated`;let n=e||t?.classification||``;return n===`connected_without_run`?`connected`:n===`read_only_project_map`||t?.project_map?`mapped`:n===`state_refreshed`?`refreshed`:n&&n!==`no_status`?`adapter_inspected`:`registered`}function Hx(e,t){let n=new Map(t.map(e=>[e.goal_id,e])),r=new Set,i=e.map(e=>{r.add(e.id);let t=n.get(e.id),i=e.latest_runs[0],a=t?.lifecycle_phase??e.lifecycle_phase??i?.lifecycle_phase??Vx(t?.status??i?.classification??e.status,i),o=t?.lifecycle_flags?.length?t.lifecycle_flags:e.lifecycle_flags?.length?e.lifecycle_flags:i?.lifecycle_flags?.length?i.lifecycle_flags:[a];return{goal:e,queueItem:t,latestRun:i,status:t?.status??i?.classification??e.status??`no_status`,waitingOn:t?.waiting_on??`clear`,severity:t?.severity??`clear`,lifecyclePhase:a,lifecycleFlags:o}});for(let e of t)r.has(e.goal_id)||i.push({goal:{activation_state:e.activation_state,id:e.goal_id,status:e.status,display_name:e.goal_id,latest_runs:[],lifecycle_flags:[e.lifecycle_phase??`registered`],registry_member:!0,legacy_runtime_goal:!1,index_exists:!1,raw_index_records:0,unique_runs:0},queueItem:e,status:e.status,waitingOn:e.waiting_on,severity:e.severity,lifecyclePhase:e.lifecycle_phase??`registered`,lifecycleFlags:e.lifecycle_flags??[`registered`]});return i}function Ux(e){return(e??``).replace(/\s+/g,` `).trim()}function Wx(e,t=132){let n=Ux(e);return n.length<=t?n:`${n.slice(0,Math.max(0,t-1))}…`}function Gx(e){let t=new Map;for(let n of e?.goals??[])t.set(n.goal_id,n);return t}function Kx(e,t){return e===void 0||t===void 0?void 0:e+t}function qx(e,t){if(!e)return null;let n=t===`user`?e.queueItem?.project_asset?.user_todos:e.queueItem?.project_asset?.agent_todos;if(n?.items?.length)return{done_count:n.done??n.items.filter(e=>e.done).length,items:n.items,open_count:n.open??n.items.filter(e=>!e.done).length,total_count:n.total??n.items.length};let r=t===`user`?e.queueItem?.user_todos:e.queueItem?.agent_todos;return r?.items?.length?r:null}function Jx(e){return e?.items.find(e=>!e.done)}function Yx(e,t,n=`todos`){return e?.items?.length?{advancement_done_count:e.advancement_done_count??t?.advancement_done_count,done_count:e.done??e.items.filter(e=>e.done).length,items:e.items,open_count:e.open??e.items.filter(e=>!e.done).length,total_count:e.total??e.items.length}:t??null}function Xx(e){return e?.queueItem?.project_asset?.quota?.state??e?.queueItem?.quota?.state??e?.goal.quota?.state??`waiting`}function Zx(e,t,n){let r=[];for(let t of e){let e=qx(t,`agent`);for(let n of e?.items??[])r.push({goalId:t.goal.id,role:`agent`,todo:n})}let i=new Map;for(let e of r){let t=e.todo.claimed_by||`codex`,n=i.get(t)??[];n.push(e),i.set(t,n)}let a=new Map((n?.agents??[]).map(e=>[e.agent_id,e]));return Array.from(new Set([...i.keys(),...a.keys()])).map(e=>{let t=i.get(e)??[],n=a.get(e),r=Array.from(new Set([...t.map(e=>e.goalId),n?.current_todo?.goal_id,...n?.goal_ids??[]].filter(Boolean))),o=(t.filter(e=>!e.todo.done)[0]??t[0])?.goalId??n?.current_todo?.goal_id??r[0]??``,s=n?.last_activity_at??null;return{agentId:e,claimedTodos:t,currentTodo:n?.current_todo??null,evidenceRefs:[],goalIds:r,handoffNote:null,lastActivity:s,nextSafeAction:n?.next_action?.trim()||`Inspect status projection before taking work`,primaryGoalId:o,quotaHints:[],staleClaimHint:null,status:{label:`可用`,summary:`正常运行`,variant:`success`},workspaceRef:null}})}function Qx(e){return e?.map(e=>({dataUrl:e.data_url,id:e.id,mimeType:e.mime_type,name:e.name,size:e.size}))}var $x=`loopx.personal-agent-selection.v1`;function eS(){if(typeof window>`u`)return{};try{let e=JSON.parse(window.localStorage.getItem($x)??`{}`);return!e||typeof e!=`object`||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[0]==`string`&&typeof e[1]==`string`))}catch{return{}}}var tS={需修复:`danger`,等你:`warning`,等待条件:`info`,推进中:`success`,安静运行:`neutral`,已停止:`neutral`,已完成:`neutral`};function nS(e,t){return Ux(t)||e.replace(/^loopx[-_]/i,`LoopX `).split(/[-_]+/).filter(Boolean).map((e,t)=>t===0?`${e.slice(0,1).toUpperCase()}${e.slice(1)}`:e).join(` `)}function rS(e){return e.split(/\r?\n/u).filter(e=>!/^\s*GOAL_(STATUS|PROGRESS)\s*:/u.test(e)).map(e=>/^\s*GOAL_EVIDENCE\s*:/u.test(e)?e.replace(/^\s*GOAL_EVIDENCE\s*:/u,`验证依据:`):/^\s*NEXT_ACTION\s*:/u.test(e)?e.replace(/^\s*NEXT_ACTION\s*:/u,`下一步:`):e).join(` +`).trim()}function iS(e,t){return[`agent`,`assistant`].includes(e.trim().toLowerCase())&&t.trim().length>0}var aS=`已发现的项目 Agent`;function oS(e){switch(Zv(e)){case`codex`:return`Codex`;case`claude`:return`Claude Code`;case`kiro`:return`Kiro CLI`;case`trae`:return`Trae CLI Agent`;case`coco`:return`Coco Agent`;default:return nS(e)}}function sS(e,t){switch(Qv(e,t)){case`codex`:return`代码与项目执行`;case`claude`:return`复杂分析与长任务`;case`openai`:case`anthropic`:return`管家问答 · 无工具`;case`kiro`:return`终端编码 · 原生 /goal 循环`;case`trae`:return`前端与交互实现`;case`coco`:return`通用任务`;default:return aS}}function cS(e,t){let n=e.project_asset;return t===`user`?Yx(n?.user_todos,e.user_todos,`project_asset.user_todos`):Yx(n?.agent_todos,e.agent_todos,`project_asset.agent_todos`)}function lS(e){return Wx(e.title??e.text,112)}function uS(e,t){return{resumeWhen:e.resume_when??null,claimedBy:e.claimed_by??null,done:e.status!==`deferred`&&e.done,evidence:e.evidence?Wx(e.evidence,96):null,index:e.index,priority:e.priority??null,status:e.status??null,taskClass:e.task_class??null,taskDomain:e.task_domain??null,text:lS(e),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.index}`}}function dS(e){let t=e.queueItem?.agent_todos,n=t?.items??e.queueItem?.project_asset?.agent_todos?.items??[],r=new Map(n.map(t=>[t.todo_id?.trim()||`${e.goal.id}:agent:${t.index}`,t]));for(let n of t?.deferred_items??[]){let t=n.todo_id?.trim()||`${e.goal.id}:agent:${n.index}`;r.has(t)||r.set(t,n)}return[...r.values()]}function fS(e){return dS(e).map(t=>uS(t,e))}function pS(e,t,n){let r=new Map;for(let n of e.todo_index?.items??[]){if(n.goal_id!==t.goal.id||n.role!==`agent`)continue;let e=uS(n,t);r.set(e.todoId,e)}for(let e of n)r.has(e.todoId)||r.set(e.todoId,e);let i=new Map;for(let e of r.values()){if(e.done||e.taskClass!==`advancement_task`)continue;let t=e.taskDomain?.trim();t&&i.set(t,(i.get(t)??0)+1)}return[...i].map(([e,t])=>({domain:e,matchingTodoCount:t}))}function mS(e,t){return{claimedBy:e.claimed_by??null,done:e.status===`done`||e.status===`completed`,index:-1,priority:e.priority??null,status:e.status??null,taskClass:e.task_class??null,text:Wx(e.title,112),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.claimed_by??`unknown`}:current`}}function hS(e,t,n){let r=new Map(e.map(e=>[e.todoId,e]));for(let e of t){let t=e.currentTodo;if(!t||t.goal_id!==n.goal.id)continue;let i=mS(t,n);r.has(i.todoId)||r.set(i.todoId,i)}return[...r.values()]}function gS(e){let t=e.queueItem?.project_asset?.agent_todos,n=e.queueItem?.agent_todos,r=dS(e),i=t?.advancement_done_count??n?.advancement_done_count??t?.done??n?.done_count??null,a=r.filter(e=>e.done&&e.status!==`deferred`).length,o=Math.max(i??0,a),s=new Set(r.map(e=>e.todo_id?.trim()).filter(e=>!!e)),c=(t?.recent_completed_advancement_items??[]).filter(e=>!e.todo_id?.trim()||!s.has(e.todo_id.trim())).map(t=>uS(t,e)),l=r.find(e=>!e.done);return{doneTodoCount:o,nextTodoText:Ux(t?.next??``)||(l?Ux(l.title??``)||Ux(l.text??``):``)||null,recentCompleted:c}}function _S(e,t){let n=Ux(e);return n?/\b(state_file|registry_goal|authority_sources|source_registry)\b|\b[a-z_]+\s+\d+\/\d+/i.test(n)?t(`projection.goalVerified`):bx(n,t,`projection.validationRecorded`):``}function vS(e,t=4){if(e.length<=t)return e;let n=e.findIndex(e=>!e.done);if(n<0)return e.slice(-t);let r=Math.max(0,Math.min(n-2,e.length-t));return e.slice(r,r+t)}function yS(e,t,n){let r=t.queueItem?.project_asset?.latest_validation,i=t.latestRun,a=e.event_ledger_summary?.goals.find(e=>e.goal_id===t.goal.id);if(!r&&!i&&!a)return null;let o=[_S(r?.summary,n),bx(i?.health_check,n),bx(i?.recommended_action,n)].find(e=>e!==``&&e!==`暂无`)??n(`projection.runRecorded`),s=Sx({eventCount:a?.events_24h??0,hasArtifact:!!(i?.json_exists||i?.markdown_exists),hasLatestValidation:!!r},n);return{generatedAt:r?.generated_at??i?.generated_at??a?.latest_event_at??``,label:s.label,metadata:s.metadata,runId:i?`${t.goal.id}:${i.generated_at}`:null,safePreview:[o,s.metadata].filter(Boolean).join(` +`),summary:o,todoId:t.queueItem?.project_asset?.agent_todos?.items.find(e=>!e.done)?.todo_id??null}}function bS(e){return[e.status,e.goal.status,e.latestRun?.classification,e.lifecyclePhase].filter(Boolean).some(e=>/(^|[_\s-])(done|complete|completed|finished|terminal|closed|success)([_\s-]|$)/i.test(e??``))}function xS(e,t){return e.global_registry?.findings?.find(e=>e.severity===`high`&&(e.goal_id===t.goal.id||e.goal_ids.includes(t.goal.id)))}function SS(e){return[e.status,e.goal.status,e.latestRun?.classification,e.lifecyclePhase].filter(Boolean).some(e=>/(^|[_\s-])(failure|failed|error|broken|unhealthy|blocked[_\s-]?health|health[_\s-]?blocked)([_\s-]|$)/i.test(e??``))}function CS(e,t){let n=t.queueItem?.stale_latest_run_warning;return t.severity===`high`||!!xS(e,t)||!!(n?.requires_refresh_state||n?.severity===`high`)||SS(t)}function wS(e,t){let n=xS(e,t);return t.queueItem?.stale_latest_run_warning?.recommended_action??t.queueItem?.stale_latest_run_warning?.reason??n?.recommended_action??n?.message??t.queueItem?.recommended_action??t.latestRun?.recommended_action??null}function TS(e){let t=e.latestRun?.operator_gate,n=t?.decision?.trim().toLowerCase()??``,r=new Set([`approve`,`approved`,`reject`,`rejected`,`defer`,`deferred`,`cancel`,`cancelled`]),i=[e.queueItem?.recommended_action,e.latestRun?.recommended_action].filter(Boolean).join(` `),a=/(?:等待|需要)(?:用户|你|owner).{0,24}(?:批准|确认|授权|补充|选择|决定)|(?:批准|确认|授权).{0,16}(?:后|才能|方可)/i.test(i);return!!(t&&!r.has(n))||e.lifecyclePhase===`operator_gated`&&!r.has(n)||a}function ES(e,t){let n=e.latestRun?.operator_gate;return bx(n?.operator_question??n?.reason_summary??n?.follow_up??e.queueItem?.recommended_action??e.latestRun?.recommended_action,t,`projection.confirmAgentDecision`)}function DS(e,t){if(t.goal.activation_state===`stopped`)return`已停止`;let n=qx(t,`user`),r=qx(t,`agent`),i=!!Jx(n),a=!!Jx(r);return[`user_or_controller`,`controller`].includes(t.waitingOn)||i||TS(t)?`等你`:CS(e,t)?`需修复`:t.waitingOn===`external_evidence`?`等待条件`:Xx(t)===`eligible`||a?`推进中`:bS(t)?`已完成`:`安静运行`}function OS(e,t,n,r){if(n===`已停止`)return xx(`stopped`,r);if(n===`需修复`)return bx(wS(e,t),r,`projection.statusRefreshNeeded`);if(n===`等你`)return xx(`needs_you`,r);if(n===`推进中`){let e=[(qx(t,`agent`)?.items??[]).filter(e=>!e.done).flatMap(e=>[e.title,e.text]).map(e=>Ux(e)).find(e=>e!==``&&e!==`暂无`),t.queueItem?.recommended_action,t.latestRun?.recommended_action].map(e=>Ux(e)).find(e=>e!==``&&e!==`暂无`);return e?bx(e,r,`projection.agentAdvancingGoal`):xx(`advancing`,r)}return xx(n===`等待条件`?`waiting_external`:`idle`,r)}function kS(e,t){return t.some(t=>e.includes(t))}function AS(e){return kS(e,[`我现在该做什么`,`该做什么`,`下一步`,`哪些 Goal 在等我`,`哪些 Goal 正在等我`,`等我`,`优先处理`,`全局待办`,`Agent 在做什么`,`哪些 Goal 需要我`])}function jS(e,t,n){if(t.goals.some(e=>e.activationState===`active`&&e.loadState))return{text:`Goal 状态尚未全部加载,暂不能给出完整统计。可先打开已加载的 Goal,失败项可重试。`,lines:[]};if(kS(n,[`Agent`,`agent`,`推进`,`在做`])){let e=t.goals.filter(e=>![`安静运行`,`已完成`,`已停止`].includes(e.state)),n=(e.length>0?e:t.goals).slice(0,3);return n.length===0?{text:`当前状态里还没有 Goal 可供汇总。`,lines:[]}:{text:e.length>0?`Agent 当前关注这些 Goal:`:`当前 Goal 都比较安静:`,lines:n.map(e=>`${e.title} · ${e.state} · ${e.agentSentence}`)}}if(kS(n,[`现在`,`下一步`,`我该`,`该做什么`,`优先处理`])){let e=t.userTodos[0];if(e)return{text:e.blocking?`先处理「${nS(e.goalId)}」:${e.text}`:`当前最先处理「${nS(e.goalId)}」:${e.text}`,lines:[]};let n=t.goals.find(e=>e.state===`需修复`);if(n)return{text:`没有待办,但这个 Goal 需要先修复。`,lines:[`${n.title} · ${n.agentSentence}`]};let r=t.goals.find(e=>e.state===`推进中`);return r?{text:`目前不需要你介入,Agent 正在推进。`,lines:[`${r.title} · ${r.agentSentence}`]}:{text:`当前系统很安静,没有需要你立即处理的事项。`,lines:[]}}if(kS(n,[`等我`,`阻塞`,`需要我`,`全局待办`]))return t.userTodos.length===0?{text:`目前没有 Goal 在等你,开放用户待办为 0。`,lines:[]}:{text:`有 ${t.userTodos.length} 项开放用户待办,阻塞项优先:`,lines:t.userTodos.slice(0,3).map(e=>`${nS(e.goalId)} · ${e.blocking?`阻塞`:`待处理`} · ${e.text}`)};if(kS(n,[`状态`,`异常`,`修复`,`健康`])){let n=t.systemHealth?!t.systemHealth.ok:!e.ok||!e.contract?.ok||!e.global_registry?.ok||(e.global_registry?.summary?.high??0)>0,r=t.goals.filter(e=>e.state===`需修复`),i=r.slice(0,n?2:3).map(e=>`${e.title} · ${e.agentSentence}`);return n&&i.push(`全局状态、契约或注册表健康检查未通过,请进入管理页检查。`),i.length===0?{text:`当前没有发现 Goal 级或全局健康异常。`,lines:[]}:{text:r.length>0?`当前需要关注这些健康问题:`:`Goal 状态正常,但全局健康需要检查:`,lines:i}}return{text:`当前管家支持三类问题:下一步、等待你的事项、Agent 与健康状态。`,lines:[`问“我现在该做什么?”`,`问“哪些 Goal 在等我?”`,`问“Agent 在做什么?”或当前健康状态`]}}function MS(e,t,n,r=!1){let i=new Map(t.map(e=>[e.goal.id,e])),a=new Set(e.run_history.goals.filter(e=>e.activation_state===`stopped`).map(e=>e.id)),o=Gx(e.usage_summary),s=Zx(t,e.todo_index,e.agent_management_projection),c=e.attention_queue.items.flatMap((e,t)=>{if(a.has(e.goal_id))return[];let n=[`user_or_controller`,`controller`].includes(e.waiting_on);return(cS(e,`user`)?.items??[]).filter(e=>!e.done).map((r,i)=>({actionKind:r.action_kind??null,blocking:n,goalId:e.goal_id,sourceOrder:t,taskClass:r.task_class??null,text:lS(r),todoId:r.todo_id?.trim()||`${e.goal_id}:user:${r.index}`,todoOrder:i,updatedAt:r.updated_at??null}))}),l=new Set(c.map(e=>e.goalId)),u=t.flatMap((t,r)=>a.has(t.goal.id)||l.has(t.goal.id)||!TS(t)?[]:[{actionKind:`gate.resolve`,blocking:!0,goalId:t.goal.id,sourceOrder:e.attention_queue.items.length+r,taskClass:`user_gate`,text:ES(t,n),todoId:`${t.goal.id}:operator-gate`,todoOrder:0,updatedAt:t.latestRun?.operator_gate?.recorded_at??t.latestRun?.generated_at??null}]),d=[...c,...u].sort((e,t)=>Number(t.blocking)-Number(e.blocking)||e.sourceOrder-t.sourceOrder||e.todoOrder-t.todoOrder),f=e.run_history.goals.flatMap(t=>{if(t.registry_member===!1)return[];let a=i.get(t.id);if(!a)return[];let c=DS(e,a),l=d.find(e=>e.goalId===t.id),u=l?.text??null,f=gS(a),p=t.coordination?.registered_agents??[],m=new Set(p),h=[...s.filter(e=>e.goalIds.includes(t.id)&&!/unassigned|unknown/i.test(e.agentId)&&(m.size===0||m.has(e.agentId))&&(e.currentTodo?.goal_id===t.id||e.claimedTodos.some(e=>e.goalId===t.id)))].sort((e,t)=>(t.lastActivity??``).localeCompare(e.lastActivity??``)),g=new Set(h.map(e=>e.agentId)),_=[...h.map(e=>({agentId:e.agentId,label:e.agentId,lastActivityAt:e.lastActivity,state:e.status.label})),...p.filter(e=>!g.has(e)).map(e=>({agentId:e,label:e,lastActivityAt:null,state:`registered`}))],v=h[0],y=hS(fS(a),h,a),b=[f.nextTodoText,a.queueItem?.recommended_action,a.latestRun?.recommended_action,OS(e,a,c,n)].map(e=>bx(e,n)).find(e=>e!==``&&e!==`暂无`)??n(`projection.nextUpdatePending`);return[{activationState:t.activation_state,agentId:v?.agentId??p[0]??`codex`,agentLaneCount:_.length,agentLanes:_,agentLabel:v?.agentId,agentSentence:OS(e,a,c,n),agentTodos:[...y,...f.recentCompleted],doneTodoCount:f.doneTodoCount,goalId:t.id,latestActivity:a.latestRun?.generated_at??``,needsYou:u,needsYouActionKind:l?.actionKind??null,needsYouBlocking:l?.blocking??!1,needsYouTaskClass:l?.taskClass??null,needsYouTodoId:l?.todoId??null,nextSentence:b,runEvidence:yS(e,a,n),state:c,...r?{subagentExecution:{allowedDomains:t.spawn_policy?.allowed_domains??[],domainCandidates:pS(e,a,y),enabled:t.spawn_policy?.mode===`multi_subagent`&&t.spawn_policy.spawn_allowed===!0&&t.spawn_policy.max_children>0,maxChildren:t.spawn_policy?.max_children??0}}:{},title:nS(t.id,t.display_name),usage:(()=>{let e=o.get(t.id);return e?{costUsd24h:e.cost_usd_24h,costUsd7d:e.cost_usd_7d,durationMs24h:e.duration_ms_24h,durationMs7d:e.duration_ms_7d,tokens24h:Kx(e.input_tokens_24h,e.output_tokens_24h),tokens7d:Kx(e.input_tokens_7d,e.output_tokens_7d)}:null})()}]}),p=[];if(e.ok||p.push(`状态载荷未标记为正常 (payload.ok === false)`),e.contract&&!e.contract.ok){let t=e.contract.summary,n=t?`${t.errors} 项错误 / ${t.warnings} 项警告`:e.contract.errors?.[0]||`请检查控制面契约`;p.push(`契约检查未通过: ${n}`)}if(e.global_registry){e.global_registry.ok||p.push(`注册表状态异常: ${e.global_registry.summary.high} 项高危`);for(let t of e.global_registry.findings||[])t.severity===`high`&&p.push(`[${t.kind}] ${t.message}`)}let m=e.decision_freshness_summary?.summary?.stale_count?`${e.decision_freshness_summary.summary.stale_count} 项决策状态已过期`:null,h=p.length===0&&!m,g={ok:h,summary:h?`所有控制面契约与注册表检查均正常`:`发现 ${p.length+ +!!m} 项系统健康关注点`,issues:p,freshnessWarning:m};return{blockingTodoCount:d.filter(e=>e.blocking).length,goalNotifications:(e.goal_channel_notification_projection?.goals??[]).map(e=>({goalId:e.goal_id,configured:e.configured,enabled:e.enabled,humanGateAutoNotifyEnabled:e.human_gate_auto_notify_enabled,lastNotifiedAt:e.last_notified_at??null,receiptCount:e.receipt_count,targetRef:e.target_ref??null})),goals:f,openUserTodoCount:d.length,systemHealth:g,userTodos:d,visibleUserTodos:d.slice(0,5),workers:(e.agent_management_projection?.agents??[]).map(e=>({agentId:e.agent_id,currentTodoGoalId:e.current_todo?.goal_id??null,currentTodoText:e.current_todo?.title?Wx(e.current_todo.title,96):null,lastActivityAt:e.last_activity_at??null,state:e.state??null}))}}function NS({goalArchiveLoadState:e,isLoading:t,onGoalActivationStateChange:n,onGoalDeleted:r,onSelectGoal:i,onReconcileStatus:a,onRefresh:o,onRetryGoalArchive:s,payload:c,progress:l,rows:u,selectedGoalId:d,statusSourceControl:f,theme:p,toggleTheme:m}){let h=f.activeSource.readOnly,{t:g}=Ji(),[_,v]=(0,R.useState)([]),[y,b]=(0,R.useState)(!1),x=(0,R.useMemo)(()=>{let e=MS(c,u,g,y);if(!l)return e;let t=Object.values(l.snapshots).map(e=>MS(e,Hx(e.run_history.goals,e.attention_queue.items),g,y)),n=new Map(t.flatMap(e=>e.goals).map(e=>[e.goalId,e])),r=e.goals.map(e=>n.get(e.goalId)??{...e,loadError:l.errors[e.goalId],loadState:l.errors[e.goalId]?`error`:`loading`,agentId:``,agentSentence:``,nextSentence:``,subagentExecution:void 0}),i=t.flatMap(e=>e.userTodos),a=r.some(e=>e.activationState===`active`&&e.loadState),o=[...new Set(t.flatMap(e=>e.systemHealth?.issues??[]))];return{...e,goals:r,userTodos:i,visibleUserTodos:i.slice(0,5),openUserTodoCount:i.length,blockingTodoCount:i.filter(e=>e.blocking).length,workers:[...new Map(t.flatMap(e=>e.workers??[]).map(e=>[e.agentId,e])).values()],goalNotifications:t.flatMap(e=>e.goalNotifications??[]),systemHealth:a||t.length===0?void 0:{ok:t.every(e=>e.systemHealth?.ok),issues:o,summary:o.length?`发现 ${o.length} 项系统健康关注点`:`状态检查已完成`,freshnessWarning:t.map(e=>e.systemHealth?.freshnessWarning).filter(Boolean).join(`;`)||null}}},[c,u,l,y,g]),S=x.goals.find(e=>e.goalId===d)??null,C=l?.snapshots[d]??c,[w,T]=(0,R.useState)(null),[E,D]=(0,R.useState)(null),[O,k]=(0,R.useState)(!1),ee=x.goals.some(e=>e.activationState===`active`&&e.loadState===`loading`)?`loading`:x.goals.map(e=>`${e.goalId}:${e.agentId}`).join(`|`),A=S?.goalId??`manager`;x.goals.some(e=>e.activationState===`active`&&e.loadState)||(x.systemHealth?!x.systemHealth.ok:!c.ok)||x.openUserTodoCount>0&&`${x.openUserTodoCount}${x.blockingTodoCount}`;let j=_.length>0?_.map(e=>({agentId:e.agent_id,adapterKind:e.adapter_kind,available:e.available,capability:sS(e.agent_id,e.adapter_kind),interrupt:e.interrupt,label:e.display_name,location:e.location,resume:e.resume,source:e.source,statusLabel:e.available?`可用`:`需要配置`,streaming:e.streaming,toolCalls:e.tool_calls,trustScope:e.trust_scope})):[{agentId:`codex`,available:!0,capability:sS(`codex`),label:`Codex`,statusLabel:`正在检测`}],te=[...j,{agentId:`status-only`,available:!0,capability:`不调用模型`,adapterKind:`status_projection`,interrupt:!1,label:`仅查状态`,resume:!0,statusLabel:`只读`,streaming:!1,toolCalls:!1,trustScope:`read_only`}],ne=j.find(e=>e.label===`Codex`&&e.available)?.agentId??j.find(e=>e.available)?.agentId??`status-only`,[re,M]=(0,R.useState)(eS),N=nh(te,re[A]??ne,ne),[ie,ae]=(0,R.useState)(!1),[oe,P]=(0,R.useState)(!1),[F,I]=(0,R.useState)(`chat`),[se,ce]=(0,R.useState)(``),[le,ue]=(0,R.useState)({}),[de,fe]=(0,R.useState)({}),[pe,me]=(0,R.useState)(null),[he,ge]=(0,R.useState)({}),[_e,ve]=(0,R.useState)([]),[ye,be]=(0,R.useState)(null),[xe,Se]=(0,R.useState)({}),Ce=(0,R.useRef)(1),we=(0,R.useRef)(1),Te=(0,R.useRef)(new Map),Ee=(0,R.useRef)(new Set),De=(0,R.useRef)(new Map),L=(0,R.useRef)(new Map),Oe=(0,R.useRef)(new Set),ke=(0,R.useRef)(new Set),Ae=(0,R.useRef)(null),je=(0,R.useRef)(null),Me=(0,R.useRef)(null),Ne=(0,R.useRef)(null);(0,R.useRef)(null);let Pe=le[A]??[];de[A];let Fe=S?x.userTodos.filter(e=>e.goalId===S.goalId):x.userTodos,Ie=S?.agentTodos??[];vS(Ie,S?.needsYou?3:4);let B=Ie.filter(e=>e.done).length,Le=Ie.length>0?`${B}/${Ie.length}`:`暂无计划`,Re=S?{...x,blockingTodoCount:Fe.filter(e=>e.blocking).length,goals:[S],openUserTodoCount:Fe.length,userTodos:Fe,visibleUserTodos:Fe}:x;(0,R.useEffect)(()=>{let e=Ym(f.activeSource.statusUrl,window.location.href),t=e.source?$m(C,e.source):null;if(!S||!t?.indexUrl||!t.detailUrl){T(null),D(null),k(!1);return}let{detailUrl:n,indexUrl:r}=t,i=!1;return T(null),D(null),k(!0),eh(r,S.goalId).then(async e=>{let t=e.items[0]?.detail_ref;return t?th(n,t):null}).then(e=>{i||T(e)}).catch(e=>{i||D(yp(e))}).finally(()=>{i||k(!1)}),()=>{i=!0}},[C,S?.goalId,f.activeSource.statusUrl]);function V(e,t){ge(n=>{if(t===null){let t={...n};return delete t[e],t}return{...n,[e]:t}})}(0,R.useEffect)(()=>{if(h){v([]),b(!1);return}let e=!1;return Oh().then(t=>{e||(v(t.adapters??[]),b(t.goal_subagent_configuration===`preview_locked`))}).catch(()=>{e||b(!1)}),()=>{e=!0}},[h]),(0,R.useEffect)(()=>{try{window.localStorage.setItem($x,JSON.stringify(re))}catch{}},[re]),(0,R.useEffect)(()=>{if(h||!N.available)return;let e=A,t=`${e}:${N.agentId}`,n=S?`goal`:`manager`,r=S?`goal.${S.goalId}`:`manager`,i=S?.goalId??x.goals[0]?.goalId??``,a=!1,o=null,s=null;return(async()=>{try{let c=await Ph({agentId:N.agentId,channelId:r,goalId:S?.goalId});if(a||(ue(t=>(t[e]?.length??0)>0?t:{...t,[e]:c.messages.map(e=>({agentLabel:e.role===`user`?void 0:N.label,attachments:Qx(e.attachments),id:Ce.current++,lines:[],role:e.role===`user`?`user`:`assistant`,sourceLabel:e.role===`user`?void 0:e.role===`error`?`本地会话记录`:`恢复的 ${N.label} 会话`,text:e.role===`user`?e.text:rS(e.text)}))}),N.agentId===`status-only`))return;let l=c.sessions[0];if(s=l?.session_id??null,l&&!l.resumable){Ee.current.add(t),V(e,{agentId:N.agentId,resumable:!1,sessionId:l.session_id,status:`resume_failed`});return}let u=l?.goal_id??i;if(!u)return;let d=await Ah(u,N.agentId,`resume_latest`,n);if(a)return;Te.current.set(t,d.session_id);let f=c.snapshots.find(e=>e.session.session_id===d.session_id),p=f?.session.active_turn_id??``;if(V(e,{agentId:N.agentId,resumable:!0,sessionId:d.session_id,status:p?`running`:`ready`,turnId:p||void 0}),Ee.current.delete(t),!p)return;let m=`${d.session_id}:${p}`;if(ke.current.has(m))return;ke.current.add(m),De.current.set(e,p),V(e,{agentId:N.agentId,resumable:!0,sessionId:d.session_id,status:`running`,turnId:p}),me(e),o=new AbortController,L.current.set(e,o);let h=``,g=ze(e,{activity:[`正在恢复进行中的 Agent 回合`],agentLabel:N.label,lines:[],pending:!0,sourceLabel:`恢复的 ${N.label} 会话`,text:``});try{let t=await Vh(d.session_id,p,{signal:o.signal,onDelta:t=>{h+=t,Be(e,g,{text:h})},onActivity:t=>{ue(n=>({...n,[e]:(n[e]??[]).map(e=>e.id===g?{...e,activity:[...new Set([...e.activity??[],t])].slice(-6)}:e)}))}});if(a)return;Be(e,g,{lines:t.response.gate?[t.response.gate.summary,t.response.gate.next_action].filter(Boolean).slice(0,2):[],pending:!1,text:t.response.message||h.trim()||`${N.label} 已完成分析。`});let n=x.goals.find(e=>e.goalId===f?.session.goal_id)??S??x.goals[0]??null;if(n&&t.response.proposals.length>0){let r=t.response.proposals.map(e=>({goalId:n.goalId,id:we.current++,previewId:null,proposal:e,receiptLabel:null,state:`candidate`,statusMessage:null}));fe(t=>({...t,[e]:[...t[e]??[],...r]}))}}catch(t){if(a)return;Be(e,g,{activity:[],lines:[],pending:!1,reconnect:t instanceof _h&&t.payload.reconnectable===!0,sourceLabel:`LoopX Chat 本地后端`,text:t instanceof Error?t.message:`无法恢复进行中的 Agent 回合。`})}finally{ke.current.delete(m),De.current.get(e)===p&&De.current.delete(e),V(e,{agentId:N.agentId,resumable:!0,sessionId:d.session_id,status:`ready`}),L.current.get(e)===o&&L.current.delete(e),a||me(t=>t===e?null:t)}}catch(n){if(a)return;n instanceof _h&&n.payload.error_code===`resume_failed`&&(Ee.current.add(t),s&&V(e,{agentId:N.agentId,resumable:!1,sessionId:s,status:`resume_failed`}))}})(),()=>{a=!0,o?.abort()}},[A,x.goals[0]?.goalId,h,S?.goalId,N.agentId,N.available,N.label]),(0,R.useEffect)(()=>{if(h||S||x.goals.length===0||ee===`loading`)return;let e=!1;return Promise.all(x.goals.filter(e=>!e.loadState).map(async e=>{let t=await Mh({agentId:e.agentId,channelId:`goal.${e.goalId}`,goalId:e.goalId});return{goalId:e.goalId,session:t.sessions[0]??null}})).then(t=>{e||ge(e=>{let n={...e};for(let e of t)e.session&&(n[e.goalId]={agentId:e.session.agent_id,resumable:e.session.resumable,sessionId:e.session.session_id,status:e.session.active_turn_id?`running`:e.session.status,turnId:e.session.active_turn_id??void 0});return n})}).catch(()=>{}),()=>{e=!0}},[h,ee,S?.goalId]),(0,R.useEffect)(()=>{if(be(null),h){ve([]),Se({});return}if(!S){ve([]),Se({});return}let e=!1,t=0,n=0;ve([]),Se({});let r=async()=>{if(!e){if(document.hidden){t=window.setTimeout(()=>void r(),1e4);return}try{let t=await Mh({goalId:S.goalId});if(!e){let r=t.sessions.filter(e=>e.channel_id?.startsWith(`task.`));ve(r);let i=await Promise.allSettled(r.map(e=>jh(e.session_id)));if(!e){let e=i.some(e=>e.status===`rejected`);n=e?n+1:0,be(e?`partial`:null),Se(Object.fromEntries(i.flatMap((e,t)=>e.status===`fulfilled`?[[r[t].session_id,e.value]]:[])))}}}catch{n+=1,e||be(`offline`)}e||(t=window.setTimeout(()=>void r(),Math.min(3e4,2e3*2**Math.min(n,4))))}};return r(),()=>{e=!0,window.clearTimeout(t)}},[h,S?.goalId]),(0,R.useEffect)(()=>{if(!ie)return;let e=window.requestAnimationFrame(()=>{Ae.current?.querySelector(`[role="menuitem"]:not(:disabled)`)?.focus()});return()=>{window.cancelAnimationFrame(e),je.current?.focus()}},[ie]),(0,R.useEffect)(()=>{if(!oe)return;let e=window.requestAnimationFrame(()=>Me.current?.focus());return()=>{window.cancelAnimationFrame(e),Ne.current?.focus()}},[oe]),(0,R.useEffect)(()=>{if(!ie&&!oe)return;let e=e=>{e.key===`Escape`&&(ae(!1),P(!1))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[ie,oe]);function ze(e,t){let n=Ce.current++;return ue(r=>({...r,[e]:[...r[e]??[],{...t,id:n,role:`assistant`}]})),n}function Be(e,t,n){ue(r=>({...r,[e]:(r[e]??[]).map(e=>e.id===t?{...e,...n}:e)}))}async function Ve(e,t){let n=e.trim();if(!n)return;let r=t&&`goalId`in t?t.goalId??`manager`:A,i=r===`manager`?Re.goals[0]??x.goals[0]??null:x.goals.find(e=>e.goalId===r)??null,a=t?.agentId?nh(te,t.agentId,ne):N,o=r===`manager`?x:i?{...x,blockingTodoCount:x.userTodos.filter(e=>e.goalId===i.goalId&&e.blocking).length,goals:[i],openUserTodoCount:x.userTodos.filter(e=>e.goalId===i.goalId).length,userTodos:x.userTodos.filter(e=>e.goalId===i.goalId),visibleUserTodos:x.userTodos.filter(e=>e.goalId===i.goalId)}:x,s=Ce.current++;if(ue(e=>({...e,[r]:[...e[r]??[],{attachments:t?.attachments,id:s,lines:[],role:`user`,text:n}]})),ce(``),me(r),r===`manager`&&AS(n)||a.agentId===`status-only`||!i){let e=jS(C,o,n),t=a.agentId===`status-only`;ze(r,{agentLabel:t?`仅查状态`:`LoopX 管家`,lines:e.lines.slice(0,3),sourceLabel:t?`LoopX 状态投影 · 仅查状态`:`LoopX 状态投影`,text:e.text}),kh({answer:[e.text,...e.lines.slice(0,3)].filter(Boolean).join(` +`),contextKind:r===`manager`?`manager`:`goal`,goalId:r===`manager`?void 0:r,question:n}).catch(()=>{}),me(null);return}let c=`${r}:${a.agentId}`,l=null;try{let e=Te.current.get(c);if(!e){let t=Ee.current.has(c)?`new`:`resume_latest`;e=(await Ah(i.goalId,a.agentId,t,r===`manager`?`manager`:`goal`)).session_id,Te.current.set(c,e),V(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`ready`}),Ee.current.delete(c)}let o=``;l=ze(r,{activity:[`正在连接 Agent`],agentLabel:a.label,lines:[],pending:!0,sourceLabel:r===`manager`?`${a.label} 管家 · 跨 Goal`:`${a.label} Agent · ${nS(i.goalId)}`,text:``});let s=(await zh(e,n,{attachments:t?.attachments,signal:(()=>{let e=new AbortController;return L.current.set(r,e),e.signal})(),onDelta:e=>{o+=e,l!==null&&Be(r,l,{text:o})},onActivity:e=>{l!==null&&ue(t=>({...t,[r]:(t[r]??[]).map(t=>t.id===l?{...t,activity:[...new Set([...t.activity??[],e])].slice(-6)}:t)}))},onPhase:(t,n)=>{De.current.set(r,n),V(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`running`,turnId:n})}})).response;if(Be(r,l,{lines:s.gate?[s.gate.summary,s.gate.next_action].filter(Boolean).slice(0,2):[],pending:!1,text:rS(s.message||o.trim())||`${a.label} 已完成分析。`}),s.proposals.length>0){let e=s.proposals.map(e=>({goalId:i.goalId,id:we.current++,previewId:null,proposal:e,receiptLabel:null,state:`candidate`,statusMessage:null}));fe(t=>({...t,[r]:[...t[r]??[],...e]}))}if(r!==`manager`&&s.protected_action){let e=Rx(r,n,s.protected_action);if(e)return e}}catch(e){if(Oe.current.delete(r)){let e={agentLabel:a.label,lines:[],pending:!1,sourceLabel:`${a.label} 会话`,text:`已中断。你可以在当前会话继续发送消息。`};l===null?ze(r,e):Be(r,l,e);return}let t=e instanceof _h?e.payload:null;t&&rh(t)&&Te.current.delete(c),t?.error_code===`resume_failed`&&(Te.current.delete(c),Ee.current.add(c),V(r,{agentId:a.agentId,resumable:!1,sessionId:he[r]?.sessionId??`resume-failed`,status:`resume_failed`}));let n=t?.gate,i=n&&typeof n==`object`?String(n.summary??``):``,o={agentLabel:a.label,lines:i?[i]:[],pending:!1,reconnect:t?.reconnectable===!0,sourceLabel:`LoopX Chat 本地后端`,text:t?.error_code===`resume_failed`?`原 ${a.label} 会话无法恢复。本地历史已经保留,请在运行详情里选择“重试恢复”或“开始新 Session”。`:e instanceof Error?e.message:`${a.label} 会话暂时不可用。`};l===null?ze(r,o):Be(r,l,o)}finally{De.current.delete(r),L.current.delete(r);let e=Te.current.get(c);e&&V(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`ready`}),me(e=>e===r?null:e)}}async function He(e){let t=e?.goalId??A,n=he[t],r=e?.agentId??n?.agentId??N.agentId,i=`${t}:${r}`,a=e?.sessionId??n?.sessionId??Te.current.get(i),o=e?.turnId??n?.turnId??De.current.get(t);if(!(!a||!o))try{Oe.current.add(t),await Rh(a,o),L.current.get(t)?.abort()}catch(e){throw Oe.current.delete(t),e}finally{De.current.delete(t),V(t,{agentId:r,resumable:!0,sessionId:a,status:`ready`}),L.current.delete(t),me(e=>e===t?null:e)}}async function Ue(e){let t=e.goalId,n=`${t}:${e.agentId}`,r=e.sessionId??he[t]?.sessionId??Te.current.get(n);if(r)try{let i=await Uh(r);Te.current.set(n,r),Ee.current.delete(n),V(t,{agentId:e.agentId,resumable:i.session.resumable,sessionId:r,status:i.session.status})}catch{V(t,{agentId:e.agentId,resumable:!1,sessionId:r,status:`resume_failed`})}}function We(e){let t=`${e.goalId}:${e.agentId}`;Te.current.delete(t),Ee.current.add(t),V(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:`new-session-pending`,status:`ready`})}async function Ge(e){let t=`${e.goalId}:${e.agentId}`,n=e.sessionId??he[e.goalId]?.sessionId??Te.current.get(t);n&&n!==`new-session-pending`&&await Hh(n),Te.current.delete(t),Ee.current.add(t),V(e.goalId,null)}function Ke(e){te.some(t=>t.agentId===e&&t.available)&&(M(t=>({...t,[A]:e})),ae(!1))}function qe(){i(``),I(`chat`)}function Je(e){i(e),I(`chat`)}S&&tS[S.state],S&&(`${N.label}${S.state}`,Ie.length>0&&`${Le}`,Fe.length>0&&`${Fe.length}`),S?.state===`需修复`||!S&&!c.ok?(S&&oS(S.agentId),S?.nextSentence,S?.agentSentence):S?.state===`等你`?(S.needsYouBlocking,S.needsYouBlocking,S.needsYou??S.nextSentence,S.needsYou):(S&&oS(S.agentId),S?.nextSentence);let Ye=[...!S&&he.manager?.status===`resume_failed`?[{id:`run:manager:resume-failed`,kind:`run`,run:{agentId:he.manager.agentId,agentLabel:oS(he.manager.agentId),canInterrupt:!1,completedSteps:0,goalId:`manager`,goalTitle:`LoopX 管家`,latestActivity:`本地聊天记录已保留,点我查看恢复方式。`,resumable:!1,runId:`manager:resume-failed`,sessionId:he.manager.sessionId,sessionStatus:`resume_failed`,status:`failed`,title:`上次会话需要恢复`,totalSteps:1,outputs:[]}}]:[],...S?_e.map(e=>{let t=e.channel_id?.startsWith(`task.`)?e.channel_id.slice(5):void 0,n=S.agentTodos.find(e=>e.todoId===t),r=!!e.active_turn_id,i=xe[e.session_id],a=i?.messages.some(e=>iS(e.role,e.text))===!0;return{id:`run:task:${e.session_id}`,kind:`run`,run:{agentId:e.agent_id,agentLabel:oS(e.agent_id),canInterrupt:r,completedSteps:n?.done||a?1:0,goalId:S.goalId,goalTitle:S.title,latestActivity:r?`Agent 正在执行,可进入 Session 查看过程或发送纠偏。`:a?`Agent 已返回结果,点击查看结果与完整运行记录。`:`执行 Session 已保留,可继续纠偏或恢复。`,resumable:e.resumable,runId:e.session_id,sessionId:e.session_id,sessionMessages:i?.messages.map(e=>({createdAt:e.created_at,messageId:e.message_id,role:e.role===`user`?`user`:iS(e.role,e.text)?`assistant`:`error`,text:e.role===`user`?e.text:rS(e.text)})),sessionStatus:a?`completed`:e.status,status:n?.done||a?`completed`:r?`running`:e.status===`resume_failed`?`failed`:`waiting`,title:n?.text??`Agent 执行任务`,todoId:t,totalSteps:1,turnId:e.active_turn_id??void 0}}}):[],...S?[{id:`run:${S.goalId}`,kind:`run`,run:{agentId:he[S.goalId]?.agentId??S.agentId,agentLabel:oS(he[S.goalId]?.agentId??S.agentId),canInterrupt:!!he[S.goalId]?.turnId,completedSteps:S.agentTodos.filter(e=>e.done).length,goalId:S.goalId,goalTitle:S.title,latestActivity:S.agentSentence,resumable:he[S.goalId]?.resumable??!0,runId:`goal:${S.goalId}`,sessionId:he[S.goalId]?.sessionId,sessionStatus:he[S.goalId]?.status,status:he[S.goalId]?.turnId?`running`:S.state===`需修复`?`failed`:`waiting`,title:S.nextSentence,totalSteps:S.agentTodos.length||1,turnId:he[S.goalId]?.turnId,outputs:S.runEvidence?[{createdAt:S.runEvidence.generatedAt,kind:`evidence`,outputId:`${S.goalId}:latest-evidence`,title:S.runEvidence.label}]:[]}}]:[],...Pe.map(e=>({id:`message:${e.id}`,kind:`message`,message:{agentLabel:e.agentLabel,attachments:e.attachments,id:String(e.id),pending:e.pending,role:e.role,text:e.text||(e.pending?`Agent 正在处理…`:e.lines.join(` +`))}})),...(S?[S]:x.goals).flatMap(e=>e.runEvidence?[{id:`output:${e.goalId}:${e.runEvidence.generatedAt||`latest`}`,kind:`output`,output:{agentLabel:oS(e.agentId),createdAt:e.runEvidence.generatedAt,goalId:e.goalId,goalTitle:e.title,kind:`evidence`,outputId:`${e.goalId}:latest-evidence`,runId:e.runEvidence.runId??void 0,safePreview:e.runEvidence.safePreview,summary:e.runEvidence.summary,title:e.runEvidence.label,todoId:e.runEvidence.todoId??void 0}}]:[]),...S&&w?[{id:`output:${S.goalId}:report:${w.publication.publication_id}`,kind:`output`,output:{agentId:w.agent_id,agentLabel:oS(w.agent_id),createdAt:w.publication.delivered_at,goalId:S.goalId,goalTitle:S.title,kind:`report`,outputId:w.publication.publication_id,report:{addedCount:w.delta.added_count,changedCount:w.delta.changed_count,deliveredAt:w.publication.delivered_at,generationId:w.generation_id,items:w.delta.items.map(e=>({changeKind:e.change_kind,previousStatus:e.previous_status,sourceRef:e.source_ref,status:e.status,summary:e.summary,title:e.title})),periodEndAt:w.period_window.end_at,periodStartAt:w.period_window.start_at,predecessorPublicationId:w.publication.predecessor_publication_id,publicationId:w.publication.publication_id},safePreview:w.delta.items.map(e=>`${e.change_kind===`added`?`+`:`~`} ${e.title}\n${e.summary}`).join(` + +`),summary:w.summary,title:w.title}}]:[]],Xe={...$v(x),periodicReports:{error:E,loading:O},timeline:Ye};return(0,z.jsxs)(`div`,{className:p===`dark`?`dark`:``,"data-testid":`personal-goal-home`,children:[ye?(0,z.jsx)(`p`,{role:`status`,className:`m-0 bg-amber-50 px-4 py-2 text-sm text-amber-900`,children:g(ye===`partial`?`runs.discoveryPartial`:`runs.discoveryOffline`)}):null,(0,z.jsx)(_x,{agents:te.map(e=>({adapterKind:e.adapterKind,agentId:e.agentId,available:e.available,capability:e.capability,interrupt:e.interrupt,label:e.label,location:e.location,resume:e.resume,source:e.source,streaming:e.streaming,toolCalls:e.toolCalls,trustScope:e.trustScope,workspaceCompatibility:e.available?`当前 Goal 写入前验证`:`不可用,需先修复 Endpoint`})),callbacks:{onApplyAttention:e=>Je(e.goalId),onCorrectRun:async(e,t)=>{if(!e.sessionId)throw Error(`这个 Run 还没有可纠偏的执行 Session。`);let n=await wh((await xh({actionKind:`run.correct`,context:{kind:`run`,goal_id:e.goalId,todo_id:e.todoId},idempotencyKey:`workspace-run-correct-${e.sessionId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,message:t,session_id:e.sessionId},summary:`纠偏执行任务:${e.title}`})).proposal_id),r=typeof n.turn?.turn_id==`string`?n.turn.turn_id:void 0;if(V(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:e.sessionId,status:r?`running`:`ready`,turnId:r}),r){De.current.set(e.goalId,r);let t=new AbortController;L.current.set(e.goalId,t);let n=``,i=ze(e.goalId,{activity:[`正在把纠偏送入原执行 Session`],agentLabel:e.agentLabel,lines:[],pending:!0,sourceLabel:`${e.agentLabel} · 执行 Session`,text:``});try{let a=await Vh(e.sessionId,r,{signal:t.signal,onDelta:t=>{n+=t,Be(e.goalId,i,{text:n})}});Be(e.goalId,i,{activity:[],pending:!1,text:rS(a.response.message||n.trim())||`${e.agentLabel} 已完成纠偏。`})}catch(t){let n=Oe.current.delete(e.goalId);Be(e.goalId,i,{activity:[],pending:!1,text:n?`已中断。你可以在当前会话继续发送消息。`:t instanceof Error?t.message:`纠偏回合失败。`})}finally{De.current.delete(e.goalId),L.current.delete(e.goalId),V(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:e.sessionId,status:`ready`})}}},onCloseRunSession:Ge,onInterruptRun:async e=>He(e),onOpenGoal:Je,onOpenRunSession:async e=>{if(!e.sessionId)return;let t=e.sessionId,n=await jh(t);Se(e=>({...e,[t]:n})),Je(e.goalId),ue(t=>({...t,[e.goalId]:n.messages.map(t=>({agentLabel:t.role===`user`?void 0:e.agentLabel,attachments:Qx(t.attachments),id:Ce.current++,lines:[],role:t.role===`user`?`user`:`assistant`,sourceLabel:t.role===`user`?void 0:`${e.agentLabel} · 执行 Session`,text:t.role===`user`?t.text:rS(t.text)}))})),V(e.goalId,{agentId:e.agentId,resumable:n.session.resumable,sessionId:t,status:n.session.active_turn_id?`running`:n.session.status,turnId:n.session.active_turn_id??void 0})},onOpenOutput:e=>Je(e.goalId),...y?{onPreviewGoalSubagentConfiguration:async e=>{let t=await Kh(e);return{changed:t.changed,configuration:{allowedDomains:t.after.orchestration.allowed_domains,enabled:t.feature_summary.multi_subagent===`enabled`,maxChildren:t.after.orchestration.max_children},previewId:t.preview_id}},onApplyGoalSubagentConfiguration:async({previewId:e,...t})=>{let n=await qh(t,e);return{allowedDomains:n.after.orchestration.allowed_domains,enabled:n.feature_summary.multi_subagent===`enabled`,maxChildren:n.after.orchestration.max_children}}}:{},onGoalActivationStateChange:n,onGoalDeleted:r,onReconcileStatus:a,onRetryGoalArchive:s,onExportOutput:async e=>{let t=[`# ${e.title}`,``,e.summary??``,``,e.safePreview??`此产出没有可用的公开安全预览。`,``,`Goal: ${e.goalId}`,`Todo: ${e.todoId??`unlinked`}`,`Run: ${e.runId??`unlinked`}`].join(` +`),n=URL.createObjectURL(new Blob([t],{type:`text/markdown;charset=utf-8`})),r=document.createElement(`a`);r.href=n,r.download=`${e.outputId.replace(/[^a-z0-9._-]+/gi,`-`)}.md`,r.click(),URL.revokeObjectURL(n)},onRefresh:o,onRetryResumeRun:Ue,onSelectAgent:Ke,onSelectGoal:e=>e?Je(e):qe(),onSendMessage:async(e,t,n,r)=>Ve(e,{agentId:t,goalId:n,attachments:r}),onStartNewRunSession:We},goalArchiveLoadState:e,model:Xe,readOnly:h,selectedAgentId:N.agentId,selectedGoalId:S?.goalId??null,statusSourceControl:f})]})}function PS({error:e,isLoading:t,onRetry:n,requestedUrl:r,theme:i,toggleTheme:a}){let o=!!(e&&/failed to fetch|networkerror|load failed/i.test(e)&&r.includes(`status.json`));return(0,z.jsx)(`div`,{className:i===`dark`?`dark`:``,children:(0,z.jsxs)(`main`,{className:`min-h-screen bg-[#f6f7f9] text-slate-950 dark:bg-[#09090b] dark:text-zinc-50`,children:[(0,z.jsxs)(`header`,{className:`flex min-h-16 flex-wrap items-center justify-between gap-3 border-b border-slate-200 bg-white px-4 py-3 dark:border-zinc-800 dark:bg-zinc-950 sm:px-6`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h1`,{className:`text-xl font-semibold`,children:`LoopX Workspace`}),(0,z.jsx)(`p`,{className:`mt-1 break-all text-sm text-slate-500 dark:text-zinc-400`,children:`Personal Workspace`})]}),(0,z.jsx)(qv,{"aria-label":`切换主题`,onClick:a,size:`icon`,variant:`secondary`,children:i===`dark`?(0,z.jsx)(Bm,{className:`h-4 w-4`}):(0,z.jsx)(xm,{className:`h-4 w-4`})})]}),(0,z.jsxs)(`div`,{className:`grid min-h-[calc(100vh-80px)] sm:grid-cols-[240px_1fr]`,children:[(0,z.jsxs)(`aside`,{className:`hidden border-r border-slate-200 p-6 dark:border-zinc-800 sm:block`,"aria-label":`Workspace`,children:[(0,z.jsx)(`strong`,{children:`LoopX`}),(0,z.jsx)(`p`,{className:`mt-6 text-sm`,children:`Workspace`}),(0,z.jsx)(`p`,{className:`mt-8 text-xs text-slate-500`,children:`Goals`}),[1,2,3].map(e=>(0,z.jsx)(`div`,{className:`mt-4 h-8 rounded bg-slate-100 dark:bg-zinc-900`},e))]}),(0,z.jsx)(`div`,{className:`p-4 sm:p-8`,children:(0,z.jsx)(Jv,{"data-testid":`initial-status-state`,children:(0,z.jsx)(Yv,{className:`flex min-h-64 items-center justify-center p-6`,children:(0,z.jsxs)(`div`,{className:`max-w-xl text-center`,children:[e?(0,z.jsx)(Xp,{className:`mx-auto h-6 w-6 text-rose-600 dark:text-rose-300`}):(0,z.jsx)(Om,{className:`mx-auto h-6 w-6 animate-spin text-slate-500 dark:text-zinc-400`}),(0,z.jsx)(`p`,{className:`mt-3 text-sm font-medium`,children:e?`无法加载实时状态`:`正在加载实时状态`}),e?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{className:`mt-2 break-words text-sm leading-6 text-slate-500 dark:text-zinc-400`,children:o?`本地状态服务暂时未连接。升级或启动期间可能短暂断开,请重试;仍失败时重新打开 LoopX App,或运行 loopx doctor。`:e}),o?(0,z.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-slate-400 dark:text-zinc-500`,children:`重新加载不会执行任务,也不会改变 Goal 配置。`}):null,(0,z.jsx)(`div`,{className:`mt-4 flex flex-wrap justify-center gap-2`,children:(0,z.jsxs)(qv,{disabled:t,onClick:n,children:[(0,z.jsx)(Om,{className:`h-4 w-4`}),`重试`]})})]}):(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-500 dark:text-zinc-400`,role:`status`,children:`正在连接 Workspace,Goal 列表将先出现,详细状态会逐个补齐。 / Connecting to your Workspace. Goals load independently.`})]})})})})]})]})})}function FS(){let e=MC.useSearch(),t=MC.useNavigate(),[n,r]=(0,R.useState)(`light`),[i,a]=(0,R.useState)(null),o=(0,R.useRef)(null),s=(0,R.useRef)(e.goalId);s.current=e.goalId;let[c,l]=(0,R.useState)(bp),[u,d]=(0,R.useState)({kind:`example`,label:`bundled example`}),[f,p]=(0,R.useState)(()=>{try{return Ax(window.localStorage,window.location.href)}catch{return kx()}}),[m,h]=(0,R.useState)(e.statusUrl),[g,_]=(0,R.useState)(null),[v,y]=(0,R.useState)(!1),[b,x]=(0,R.useState)({error:null,phase:`idle`}),[S,C]=(0,R.useState)(e.statusUrl.trim()||null),[w,T]=(0,R.useState)(!1),E=(0,R.useRef)(null),D=(0,R.useRef)(Bg(e.statusUrl.trim()||null)),O=!w&&u.kind===`example`?e.statusUrl.trim():``,k=S??O,ee=u.kind===`url`?u.label:zx,A=!!(g&&S),j=Ix(f,S,ee,window.location.href),te=u.kind===`example`&&!w,ne=c.attention_queue,re=c.run_history,M=(0,R.useMemo)(()=>Hx(re.goals,ne.items),[re.goals,ne.items]);function N(e,t,n=0){x({error:null,phase:`loading`}),Bx(Zm(e,`stopped`,window.location.href)).then(r=>{if(!Wg(D.current,t))return;let i=r.goal_projection?.registry_revision??null,a=t.registryRevision!==null&&t.registryRevision!==void 0&&i!==null&&t.registryRevision!==i;if(l(e=>p_(e,r)),a&&n<1){oe(e,{background:!0,resyncAttempt:n+1});return}x(a?{error:`Goal 状态在加载历史时发生变化,请重试。`,phase:`error`}:{error:null,phase:`ready`})}).catch(e=>{Wg(D.current,t)&&x({error:yp(e),phase:`error`})})}function ie(){let e=u.kind===`url`?u.label:m||zx,t=Hg(D.current,e,{background:!0});if(i){oe(e);return}t&&N(e,t)}async function ae(e,n,r){if(r.background)return l(e=>p_(e,n)),!0;let i={kind:`url`,label:e};return D.current.loadedUrl=e,l(n),d(i),h(e),await t({search:t=>({...t,statusUrl:e})}),Ug(D.current,r)?(D.current.requestedUrl=null,C(null),!0):!1}async function oe(e,t={}){let n=e.trim(),r=t.background===!0;if(!n){r||_(`状态地址不能为空`);return}let c=Hg(D.current,n,{background:r,selectionRevision:t.selectionRevision});if(!c)return;o.current?.abort();let d=new AbortController;o.current=d,r||(E.current=null,T(!1),C(n),y(!0),_(null),x({error:null,phase:`idle`}));try{let e=await Cp(n,window.location.href).catch(()=>null);if(!Wg(D.current,c))return;if(e){let o=t.retryOnly&&u.kind===`url`&&u.label===n&&i?.directory.registry_revision===e.registry_revision?i.snapshots:{};a({directory:e,snapshots:o,errors:{}});let f={...e,goals:e.goals.filter(e=>!o[e.id])},p=!1,m=wp(e);if(r)l(m);else if(!await ae(n,m,c))return;if(x({error:null,phase:`loading`}),await Tp(n,window.location.href,f,(e,t,n)=>{n===`revision`&&(p=!0),a(r=>r&&{...r,snapshots:t?{...r.snapshots,[e]:t}:r.snapshots,errors:n?{...r.errors,[e]:n}:r.errors})},()=>Wg(D.current,c),()=>s.current,d.signal),p&&(t.resyncAttempt??0)<1&&Wg(D.current,c)){await oe(n,{resyncAttempt:1});return}Wg(D.current,c)&&x({error:null,phase:`ready`});return}let o=await Bx(Zm(n,`active`,window.location.href));if(!Wg(D.current,c)||(a(null),c.registryRevision=o.goal_projection?.registry_revision??null,!await ae(n,o,c)))return;if(o.goal_projection?.scope!==`active`||o.goal_projection.complete){x({error:null,phase:`ready`});return}N(n,c,t.resyncAttempt??0)}catch(e){if(!Ug(D.current,c))return;r||_(yp(e))}finally{!r&&Ug(D.current,c)&&y(!1)}}function P(e,t={}){o.current?.abort();let n=Vg(D.current,e.statusUrl);E.current=null,T(!1),C(e.statusUrl),y(!0),_(null),(async()=>{if(t.ensureTunnel&&e.kind===`ssh_tunnel`){let t=new URL(e.statusUrl,window.location.href).port;if(t)try{await Zy(e.label,t)}catch{}}D.current.selectionRevision===n&&await oe(e.statusUrl,{selectionRevision:n})})()}function F(e){p(e);try{jx(window.localStorage,e)}catch{}}let I={activeSource:j,connectionState:v?`loading`:A?`error`:`connected`,errorMessage:A?`未切换到 ${S??`所选来源`}:${g}`:null,onAdd:e=>{let t=Mx(f,e,window.location.href);return`error`in t?{error:t.error}:(F(t.catalog),P(t.source,{ensureTunnel:e.ensureTunnel}),{})},onRemove:e=>{F(Nx(f,e)),j.id===e&&P(Tx)},onSelect:e=>{let t=f.sources.find(t=>t.id===e);t&&P(t,{ensureTunnel:t.kind===`ssh_tunnel`})},sources:j.id===`temporary`?[...f.sources,j]:f.sources};(0,R.useEffect)(()=>{let t=e.statusUrl.trim();if(t){if(E.current===t||S&&S!==t)return;(u.kind!==`url`||u.label!==t)&&oe(t);return}E.current=null,!w&&(S||u.kind===`example`&&oe(zx))},[w,S,e.statusUrl,u.kind,u.label]),(0,R.useEffect)(()=>{if(e.statusUrl&&u.kind===`example`)return;let n=new Set(M.map(e=>e.goal.id));if(M.length===0){e.goalId&&t({search:e=>({...e,goalId:``})});return}e.goalId&&!n.has(e.goalId)&&b.phase!==`loading`&&t({search:e=>({...e,goalId:``})})},[b.phase,M,t,e.goalId,e.statusUrl,u.kind]),(0,R.useEffect)(()=>{if(!i||v||!e.goalId||u.kind!==`url`)return;let t=i.directory.goals.find(t=>t.id===e.goalId);t?.activation_state===`stopped`&&!i.snapshots[t.id]&&!i.errors[t.id]&&oe(u.label,{retryOnly:!0})},[e.goalId,v,i,u]);function se(e){t({search:t=>({...t,goalId:e})})}return te?(0,z.jsx)(PS,{error:g,isLoading:v,onRetry:()=>void oe(k||zx),requestedUrl:k||zx,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)}):(0,z.jsx)(NS,{goalArchiveLoadState:b,isLoading:v,onGoalActivationStateChange:(e,t)=>{D.current.projectionRevision+=1,l(n=>gp(n,e,t)),a(n=>n&&{...n,snapshots:Object.fromEntries(Object.entries(n.snapshots).map(([n,r])=>[n,gp(r,e,t)]))})},onGoalDeleted:e=>{D.current.projectionRevision+=1,l(t=>_p(t,e)),a(t=>t&&{...t,snapshots:Object.fromEntries(Object.entries(t.snapshots).filter(([t])=>t!==e))})},onSelectGoal:se,onReconcileStatus:()=>oe(u.kind===`url`?u.label:m||zx,{background:!0}),onRetryGoalArchive:ie,onRefresh:()=>oe(u.kind===`url`?u.label:m||zx,{retryOnly:!!(i&&Object.keys(i.errors).length)}),payload:c,progress:i,rows:M,selectedGoalId:e.goalId,statusSourceControl:I,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)})}var IS=v_(`inline-flex items-center gap-1 rounded-md border px-2 py-0.5 text-xs font-medium`,{variants:{variant:{neutral:`border-slate-200 bg-white text-slate-700 dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-300`,success:`border-emerald-200 bg-emerald-50 text-emerald-800 dark:border-emerald-900 dark:bg-emerald-950 dark:text-emerald-200`,warning:`border-amber-200 bg-amber-50 text-amber-800 dark:border-amber-900 dark:bg-amber-950 dark:text-amber-200`,info:`border-sky-200 bg-sky-50 text-sky-800 dark:border-sky-900 dark:bg-sky-950 dark:text-sky-200`,danger:`border-rose-200 bg-rose-50 text-rose-800 dark:border-rose-900 dark:bg-rose-950 dark:text-rose-200`}},defaultVariants:{variant:`neutral`}});function LS({className:e,variant:t,...n}){return(0,z.jsx)(`span`,{className:Gv(IS({variant:t}),e),...n})}var RS=[{label:`status payload`,source:`apps/presentation/dashboard/src/data/status.ts`,detail:`status_contract, attention_queue, local_dashboard_api, run_history`},{label:`channel projection`,source:`apps/presentation/dashboard/src/data/goal-channel-frontstage.ts`,detail:`decision_frame, todos, gates, leases, artifacts, truth_contract`},{label:`public showcase catalog`,source:`docs/showcases/showcase-catalog.json`,detail:`case metadata, visual hints, evidence boundaries, story beats`},{label:`route smoke`,source:`apps/presentation/dashboard/smoke/frontstage-route-smoke.ts`,detail:`static route contract, source guards, component expectations`}],zS=[{axis:`schema`,current:`goal_channel_projection_v0`,proposed:`new optional projection field`,gate:`parser default plus route smoke assertion`},{axis:`truth`,current:`event ledger and active state remain source of truth`,proposed:`derived UI state only`,gate:`truth_contract must stay read-only`},{axis:`privacy`,current:`compact source refs and warnings`,proposed:`public-safe fixture field`,gate:`loopx check and browser fake-private fixture`},{axis:`interaction`,current:`render, filter, select, inspect`,proposed:`no browser write by default`,gate:`write affordance requires explicit loopback capability`}],BS=[{title:`Fixture sources`,body:`Use examples/status.example.json, browser-smoke fixtures, and docs/showcases/showcase-catalog.json.`},{title:`Required proof`,body:`Every projection addition needs parser coverage, route smoke assertions, and one browser or bundle check when UI output changes.`},{title:`Never include`,body:`Raw task text, trajectories, transcripts, local paths, private registry state, credentials, or internal document links.`}],VS=[`npm --prefix apps/presentation/dashboard run smoke:frontstage-route`,`npm --prefix apps/presentation/dashboard run smoke:frontstage-browser`,`npm --prefix apps/presentation/dashboard run smoke:frontstage-share-bundle`,`npm --prefix apps/presentation/dashboard run build`,`loopx check --scan-path apps/presentation/dashboard --scan-path docs/status-data-contract.md`],HS=[{name:`Projection lane`,badges:[`read-only`,`schema v0`],body:`Summarizes one compact projection lane without mutating the underlying LoopX state.`},{name:`Capability badge`,badges:[`loopback`,`dry-run`],body:`Shows an advertised local capability only after the status feed declares it.`},{name:`Boundary warning`,badges:[`public-safe`,`omitted`],body:`Names omitted private material and points contributors back to compact source references.`}];function US({children:e,icon:t,title:n}){return(0,z.jsxs)(`section`,{className:`rounded-lg border border-slate-200 bg-white shadow-sm`,children:[(0,z.jsx)(`div`,{className:`flex items-center justify-between gap-3 border-b border-slate-200 px-4 py-3`,children:(0,z.jsxs)(`h2`,{className:`flex items-center gap-2 text-sm font-semibold text-slate-950`,children:[(0,z.jsx)(t,{className:`h-4 w-4 text-slate-500`}),n]})}),e]})}function WS(){return(0,z.jsx)(US,{icon:Wp,title:`Status Contract Explorer`,children:(0,z.jsx)(`div`,{className:`grid gap-3 p-4 lg:grid-cols-2`,"data-testid":`developer-contract-explorer`,children:RS.map(e=>(0,z.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-3`,children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,z.jsx)(LS,{variant:`info`,children:e.label}),(0,z.jsx)(LS,{variant:`neutral`,children:`public contract`})]}),(0,z.jsx)(`div`,{className:`mt-2 break-words font-mono text-xs text-slate-700`,children:e.source}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.detail})]},e.label))})})}function GS(){return(0,z.jsx)(US,{icon:um,title:`Projection Diffing`,children:(0,z.jsx)(`div`,{className:`overflow-x-auto`,"data-testid":`developer-projection-diffing`,children:(0,z.jsxs)(`table`,{className:`min-w-full border-separate border-spacing-0 text-left text-sm`,children:[(0,z.jsx)(`thead`,{children:(0,z.jsxs)(`tr`,{className:`bg-slate-50 text-xs uppercase tracking-normal text-slate-500`,children:[(0,z.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Axis`}),(0,z.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Current`}),(0,z.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Proposed`}),(0,z.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Gate`})]})}),(0,z.jsx)(`tbody`,{children:zS.map(e=>(0,z.jsxs)(`tr`,{className:`align-top`,children:[(0,z.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 font-semibold text-slate-950`,children:e.axis}),(0,z.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.current}),(0,z.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.proposed}),(0,z.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.gate})]},e.axis))})]})})})}function KS(){return(0,z.jsx)(US,{icon:om,title:`Fixture Generation`,children:(0,z.jsx)(`div`,{className:`grid gap-3 p-4 md:grid-cols-3`,"data-testid":`developer-fixture-generation`,children:BS.map(e=>(0,z.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-3`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:e.title}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.body})]},e.title))})})}function qS(){return(0,z.jsx)(US,{icon:Qp,title:`Smoke Checklist`,children:(0,z.jsx)(`div`,{className:`space-y-2 p-4`,"data-testid":`developer-smoke-checklist`,children:VS.map(e=>(0,z.jsxs)(`div`,{className:`flex items-start gap-3 rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,z.jsx)(Vp,{className:`mt-0.5 h-4 w-4 shrink-0 text-emerald-600`}),(0,z.jsx)(`code`,{className:`break-all text-xs font-semibold leading-5 text-slate-700`,children:e})]},e))})})}function JS(){return(0,z.jsx)(US,{icon:$p,title:`Component Examples`,children:(0,z.jsx)(`div`,{className:`grid gap-3 p-4 lg:grid-cols-3`,"data-testid":`developer-component-examples`,children:HS.map(e=>(0,z.jsxs)(`article`,{className:`rounded-md border border-slate-200 bg-slate-50 p-3`,children:[(0,z.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.badges.map(e=>(0,z.jsx)(LS,{variant:e===`read-only`||e===`public-safe`?`success`:`neutral`,children:e},e))}),(0,z.jsx)(`h3`,{className:`mt-3 text-sm font-semibold leading-6 text-slate-950`,children:e.name}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.body})]},e.name))})})}function YS(){return(0,z.jsx)(`main`,{className:`min-h-screen bg-[#f7f7f4] px-4 py-4 text-slate-950 sm:px-5`,"data-testid":`frontstage-developer-cockpit`,children:(0,z.jsxs)(`div`,{className:`mx-auto grid max-w-[1500px] gap-4 xl:grid-cols-[260px_minmax(0,1fr)]`,children:[(0,z.jsxs)(`aside`,{className:`rounded-lg border border-slate-200 bg-white p-4 shadow-sm xl:sticky xl:top-4 xl:self-start`,children:[(0,z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,z.jsx)(`div`,{className:`flex h-9 w-9 items-center justify-center rounded-md border border-slate-200 bg-slate-950 text-white`,children:(0,z.jsx)(Vm,{className:`h-4 w-4`})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold`,children:`Developer Cockpit`}),(0,z.jsx)(`div`,{className:`text-xs text-slate-500`,children:`Projection extension`})]})]}),(0,z.jsxs)(`div`,{className:`mt-4 grid gap-2`,children:[(0,z.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md border border-slate-200 px-3 py-2 text-sm font-medium`,href:`https://huangruiteng.github.io/loopx/`,children:[(0,z.jsx)(pm,{className:`h-4 w-4`}),`LoopX home`]}),(0,z.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md border border-slate-200 px-3 py-2 text-sm font-medium`,href:`https://huangruiteng.github.io/loopx/docs/showcases/index.en.html`,children:[(0,z.jsx)(im,{className:`h-4 w-4`}),`Public cases`]}),(0,z.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md bg-slate-950 px-3 py-2 text-sm font-medium text-white`,href:`/chat/developers/projections/`,children:[(0,z.jsx)($p,{className:`h-4 w-4`}),`Developer cockpit`]})]}),(0,z.jsxs)(`div`,{className:`mt-5 space-y-2 rounded-md border border-emerald-200 bg-emerald-50 p-3 text-xs leading-5 text-emerald-950`,children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,z.jsx)(LS,{variant:`success`,children:`read-only`}),(0,z.jsx)(LS,{variant:`neutral`,children:`public fixtures`})]}),(0,z.jsx)(`p`,{children:`This route uses static public contracts only; live status feeds, registry files, and browser write APIs stay outside the cockpit.`})]})]}),(0,z.jsxs)(`section`,{className:`space-y-4`,children:[(0,z.jsx)(`div`,{className:`rounded-lg border border-slate-200 bg-white px-5 py-5 shadow-sm`,children:(0,z.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-4`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,z.jsx)(LS,{variant:`info`,children:`developers/projections`}),(0,z.jsx)(LS,{variant:`success`,children:`public-safe`}),(0,z.jsx)(LS,{variant:`neutral`,children:`no browser writes`})]}),(0,z.jsx)(`h1`,{className:`mt-3 text-3xl font-semibold tracking-normal text-slate-950`,children:`LoopX Projection Developer Cockpit`}),(0,z.jsx)(`p`,{className:`mt-2 max-w-3xl text-sm leading-6 text-slate-600`,children:`A read-only contributor workbench for adding dashboard/frontstage projections without reverse-engineering the large operator page.`})]}),(0,z.jsxs)(`div`,{className:`grid min-w-[260px] gap-2 text-sm`,children:[(0,z.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,z.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-normal text-slate-500`,children:`Source of truth`}),(0,z.jsx)(`div`,{className:`mt-1 font-semibold text-slate-950`,children:`status contract + compact fixtures`})]}),(0,z.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,z.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-normal text-slate-500`,children:`Boundary`}),(0,z.jsx)(`div`,{className:`mt-1 font-semibold text-slate-950`,children:`read-only extension surface`})]})]})]})}),(0,z.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,z.jsx)(WS,{}),(0,z.jsx)(GS,{})]}),(0,z.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(0,1fr)_420px]`,children:[(0,z.jsx)(KS,{}),(0,z.jsx)(qS,{})]}),(0,z.jsx)(JS,{}),(0,z.jsx)(US,{icon:Im,title:`Extension Boundary`,children:(0,z.jsxs)(`div`,{className:`grid gap-3 p-4 md:grid-cols-3`,"data-testid":`developer-extension-boundary`,children:[(0,z.jsxs)(`div`,{className:`rounded-md border border-emerald-200 bg-emerald-50 px-3 py-3`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Allowed`}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`Versioned parser defaults, public fixtures, read-only route panels, and focused smoke assertions.`})]}),(0,z.jsxs)(`div`,{className:`rounded-md border border-amber-200 bg-amber-50 px-3 py-3`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Review`}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`New dashboard dependencies, status contract fields, loopback capability display, and browser-visible workflows.`})]}),(0,z.jsxs)(`div`,{className:`rounded-md border border-rose-200 bg-rose-50 px-3 py-3`,children:[(0,z.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Stop`}),(0,z.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`Credentials, private registry material, raw logs, transcripts, production actions, or default browser write authority.`})]})]})})]})]})})}var XS=J({value:G().finite(),total:G().finite().positive().optional(),unit:W().optional(),higher_is_better:K()}).passthrough(),ZS=gd(W(),G().finite()).default({}),QS=J({outcome_status:W().optional(),failure_class:W(),causal_summary:W(),expectedness:W(),implication:W(),next_probe:W(),confidence:W(),evidence_refs:q(W()).optional()}).passthrough(),$S=J({arm_id:W(),selected_run_id:W().nullable(),score_countable:K(),metrics:gd(W(),XS),effort:ZS,insight:QS.nullable().optional()}),eC=J({run_id:W(),case_id:W(),arm_id:W(),arm_role:W(),status:W(),protocol_id:W(),runner_revision:W().optional(),observed_at:W(),metrics:gd(W(),XS),countability:J({integrity_qualified:K(),official_result_present:K(),score_countable:K()}).passthrough(),treatment_fidelity:W(),effort:ZS,redacted_insight:QS.nullable().optional(),upload_provenance:J({producer_id:W(),producer_version:W(),observed_at:W(),source_revision:W()}).passthrough()}).passthrough(),tC=J({case_denominator:G().int().nonnegative(),value_sum:G().finite(),value_mean:G().finite().nullable(),value_median:G().finite().nullable(),value_min:G().finite().nullable(),value_max:G().finite().nullable(),case_macro_rate:G().finite().optional(),suite_micro_rate:G().finite().optional(),suite_micro_numerator:G().finite().optional(),suite_micro_denominator:G().finite().positive().optional()}).passthrough(),nC=J({arm_id:W(),arm_role:W(),factor_assignments:gd(W(),W()),protocol_counts:gd(W(),G().int().nonnegative()).default({}),runner_revision_counts:gd(W(),G().int().nonnegative()).default({}),orchestrator_runtime_counts:gd(W(),G().int().nonnegative()).default({}),intended_case_count:G().int().positive(),run_count:G().int().nonnegative(),terminal_run_count:G().int().nonnegative(),selected_score_countable_case_count:G().int().nonnegative(),coverage_rate:G().finite().min(0).max(1),metrics:gd(W(),tC),binary_outcomes:gd(W(),J({success_count:G().int().nonnegative(),case_denominator:G().int().nonnegative(),success_rate:G().finite().min(0).max(1).nullable()})),effort:gd(W(),J({denominator:G().int().nonnegative(),mean:G().finite().nullable(),median:G().finite().nullable()})),failure_class_counts:gd(W(),G().int().nonnegative())}).passthrough(),rC=J({baseline_value:G().finite(),candidate_value:G().finite(),delta:G().finite(),direction:Y([`improved`,`flat`,`regressed`]).optional()}).passthrough(),iC=J({comparison_id:W(),comparison_anchor_run_id:W(),candidate_run_id:W(),candidate_arm_id:W(),primary_metric:W(),matched_pair_countable:X(!0),metric_deltas:gd(W(),rC)}).passthrough(),aC=J({ok:X(!0),schema_version:X(`benchmark_study_dashboard_v0`),benchmark_id:W(),study_id:W(),status:Y([`complete`,`provisional`]),design:J({protocol_id:W(),comparison_protocol_id:W(),baseline_arm_id:W(),case_set:J({case_set_id:W(),case_ids:q(W())}),metric_catalog:q(J({metric_name:W(),role:Y([`primary`,`guardrail`,`supporting`]),unit:W().optional(),higher_is_better:K(),binary:K()})),labels:gd(W(),W())}).passthrough(),campaign:J({intended_case_count:G().int().positive(),intended_arm_count:G().int().positive(),intended_cell_denominator:G().int().positive(),selected_score_countable_cell_count:G().int().nonnegative(),selected_score_countable_coverage_rate:G().finite().min(0).max(1),complete_declared_design_case_count:G().int().nonnegative(),ambiguous_score_countable_cell_count:G().int().nonnegative(),in_flight_run_count:G().int().nonnegative(),matched_pair_countable_count:G().int().nonnegative(),factorial_contrast_count:G().int().nonnegative(),factorial_contrast_countable_count:G().int().nonnegative(),runtime_observation_count:G().int().nonnegative(),runtime_classification_counts:gd(W(),G().int().nonnegative())}),arms:q(nC),contrasts:gd(W(),J({matched_pair_denominator:G().int().nonnegative(),primary_metric_directions:J({improved:G().int().nonnegative(),flat:G().int().nonnegative(),regressed:G().int().nonnegative()}),binary_metric_transitions:gd(W(),J({"0_to_1":G().int().nonnegative(),"1_to_0":G().int().nonnegative(),same:G().int().nonnegative()}))})),cases:q(J({case_id:W(),complete_declared_design:K(),arms:q($S),eligible_comparisons:q(iC),largest_eligible_primary_contrast:iC.nullable()})),runs:q(eC),authority:J({score_source:W(),matched_comparison_source:W(),factorial_comparison_source:W().nullable(),manifest_changes_scores:X(!1),dashboard_is_execution_authority:X(!1)}),public_boundary:J({raw_task_recorded:X(!1),raw_trajectory_recorded:X(!1),hidden_evaluation_recorded:X(!1),raw_verifier_output_recorded:X(!1),credentials_recorded:X(!1),local_paths_recorded:X(!1)}),write_performed:X(!1),network_access_performed:X(!1)});function oC(e){return aC.parse(e)}function sC(e,t){let n=new URL(t),r=new URL(e||`/benchmark-study.example.json`,n);if(!new Set([`http:`,`https:`]).has(r.protocol))throw Error(`Benchmark dashboard source must use HTTP or HTTPS`);if(r.origin!==n.origin)throw Error(`Benchmark dashboard source must use same-origin local readback`);return r.toString()}var cC=[{id:`campaign`,label:`Campaign`},{id:`arms`,label:`Arms`},{id:`cases`,label:`Cases`},{id:`runs`,label:`Runs`}];function lC(e){return e==null?`—`:`${(e*100).toFixed(e>=.995?0:1)}%`}function uC(e){return e==null?`—`:new Intl.NumberFormat(`en`,{maximumFractionDigits:2,notation:`compact`}).format(e)}function dC(e){if(e==null)return`—`;let t=e/6e4;return t>=120?`${(t/60).toFixed(1)} h`:`${uC(t)} min`}function fC(e){let t=Object.entries(e);return t.length?t.map(([e,t])=>`${e} (${t})`).join(`, `):`—`}function pC(e){if(!e)return`—`;let t=e.total==null?uC(e.value):`${uC(e.value)}/${uC(e.total)}`;return e.unit?`${t} ${e.unit}`:t}function mC(e,t){let n=e.metrics[t];return!n||n.case_denominator===0?`—`:n.suite_micro_rate==null?`${uC(n.value_mean)} mean`:`${lC(n.suite_micro_rate)} · ${uC(n.suite_micro_numerator)}/${uC(n.suite_micro_denominator)}`}function hC(e,t){let n=e.largest_eligible_primary_contrast,r=n?.metric_deltas[t];if(!n||!r)return null;let i=r.delta>0?`+`:``;return{direction:r.direction,text:`${n.candidate_arm_id}: ${i}${uC(r.delta)}`}}function gC({children:e,tone:t=`neutral`}){return(0,z.jsx)(`span`,{className:`benchmark-state benchmark-state-${t}`,children:e})}function _C({packet:e,primaryMetric:t}){return(0,z.jsxs)(`div`,{className:`benchmark-view-stack`,children:[(0,z.jsxs)(`section`,{"aria-labelledby":`arm-summary-title`,children:[(0,z.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`p`,{className:`benchmark-kicker`,children:`ARM SUMMARY`}),(0,z.jsx)(`h2`,{id:`arm-summary-title`,children:`Comparable outcomes, denominator first`})]}),(0,z.jsx)(`p`,{children:`Only one score-countable run per declared case × arm cell is selected.`})]}),(0,z.jsx)(`div`,{className:`benchmark-arm-grid`,children:e.arms.map(e=>{let n=Object.values(e.binary_outcomes)[0];return(0,z.jsxs)(`article`,{className:`benchmark-arm-card`,children:[(0,z.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{className:`benchmark-mono`,children:e.arm_role}),(0,z.jsx)(`h3`,{children:e.arm_id})]}),(0,z.jsx)(gC,{tone:e.coverage_rate===1?`success`:`warning`,children:e.coverage_rate===1?`Complete`:`Provisional`})]}),(0,z.jsxs)(`dl`,{className:`benchmark-stat-list`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`dt`,{children:[`Primary · `,t]}),(0,z.jsx)(`dd`,{children:mC(e,t)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Score-countable coverage`}),(0,z.jsxs)(`dd`,{children:[e.selected_score_countable_case_count,`/`,e.intended_case_count]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Binary success`}),(0,z.jsx)(`dd`,{children:n?`${n.success_count}/${n.case_denominator}`:`Not declared`})]})]})]},e.arm_id)})})]}),(0,z.jsxs)(`section`,{"aria-labelledby":`contrast-title`,children:[(0,z.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`p`,{className:`benchmark-kicker`,children:`MATCHED CONTRASTS`}),(0,z.jsx)(`h2`,{id:`contrast-title`,children:`Direction counts on eligible pairs`})]}),(0,z.jsx)(`p`,{children:`Raw run volume is never used as a comparison denominator.`})]}),(0,z.jsx)(`div`,{className:`benchmark-table-shell`,children:(0,z.jsxs)(`table`,{children:[(0,z.jsx)(`thead`,{children:(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`th`,{children:`Candidate arm`}),(0,z.jsx)(`th`,{children:`Matched denominator`}),(0,z.jsx)(`th`,{children:`Improved`}),(0,z.jsx)(`th`,{children:`Flat`}),(0,z.jsx)(`th`,{children:`Regressed`}),(0,z.jsx)(`th`,{children:`Binary transitions`})]})}),(0,z.jsxs)(`tbody`,{children:[Object.entries(e.contrasts).map(([e,t])=>(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`td`,{children:(0,z.jsx)(`strong`,{children:e})}),(0,z.jsx)(`td`,{children:t.matched_pair_denominator}),(0,z.jsx)(`td`,{className:`benchmark-positive`,children:t.primary_metric_directions.improved}),(0,z.jsx)(`td`,{children:t.primary_metric_directions.flat}),(0,z.jsx)(`td`,{className:`benchmark-negative`,children:t.primary_metric_directions.regressed}),(0,z.jsx)(`td`,{children:Object.entries(t.binary_metric_transitions).map(([e,t])=>`${e}: 0→1 ${t[`0_to_1`]}, 1→0 ${t[`1_to_0`]}, same ${t.same}`).join(` · `)||`—`})]},e)),Object.keys(e.contrasts).length===0&&(0,z.jsx)(`tr`,{children:(0,z.jsx)(`td`,{colSpan:6,children:`No matched comparisons are countable yet.`})})]})]})})]}),(0,z.jsxs)(`section`,{"aria-labelledby":`runtime-health-title`,children:[(0,z.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`p`,{className:`benchmark-kicker`,children:`RUNTIME HEALTH`}),(0,z.jsx)(`h2`,{id:`runtime-health-title`,children:`Qualified observations, without execution authority`})]}),(0,z.jsxs)(`p`,{children:[e.campaign.runtime_observation_count,` public-safe runtime observations.`]})]}),(0,z.jsxs)(`div`,{className:`benchmark-runtime-list`,children:[Object.entries(e.campaign.runtime_classification_counts).map(([e,t])=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{children:e}),(0,z.jsx)(`strong`,{children:t})]},e)),e.campaign.runtime_observation_count===0&&(0,z.jsx)(`p`,{className:`benchmark-muted`,children:`No runtime observations uploaded.`})]})]})]})}function vC({packet:e}){return(0,z.jsx)(`div`,{className:`benchmark-detail-grid`,children:e.arms.map(t=>(0,z.jsxs)(`article`,{className:`benchmark-detail-card`,children:[(0,z.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{className:`benchmark-mono`,children:t.arm_role}),(0,z.jsx)(`h2`,{children:t.arm_id})]}),(0,z.jsxs)(gC,{tone:t.coverage_rate===1?`success`:`warning`,children:[t.selected_score_countable_case_count,`/`,t.intended_case_count,` countable`]})]}),(0,z.jsx)(`div`,{className:`benchmark-factor-row`,children:Object.entries(t.factor_assignments).map(([e,t])=>(0,z.jsxs)(`span`,{children:[e,`: `,(0,z.jsx)(`strong`,{children:t})]},e))}),(0,z.jsxs)(`dl`,{className:`benchmark-stat-list`,children:[e.design.metric_catalog.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`dt`,{children:[e.role,` · `,e.metric_name]}),(0,z.jsx)(`dd`,{children:mC(t,e.metric_name)})]},e.metric_name)),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Runs terminal / observed`}),(0,z.jsxs)(`dd`,{children:[t.terminal_run_count,`/`,t.run_count]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Median duration`}),(0,z.jsx)(`dd`,{children:dC(t.effort.duration_ms?.median)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Protocols`}),(0,z.jsx)(`dd`,{children:fC(t.protocol_counts)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Runner revisions`}),(0,z.jsx)(`dd`,{children:fC(t.runner_revision_counts)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Orchestrator runtimes`}),(0,z.jsxs)(`dd`,{children:[Object.keys(t.orchestrator_runtime_counts).length||0,` distinct`]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Failure classes`}),(0,z.jsx)(`dd`,{children:fC(t.failure_class_counts)})]})]})]},t.arm_id))})}function yC({packet:e,primaryMetric:t,onOpenRun:n}){return(0,z.jsx)(`div`,{className:`benchmark-table-shell benchmark-wide-table`,children:(0,z.jsxs)(`table`,{children:[(0,z.jsx)(`thead`,{children:(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`th`,{children:`Case`}),(0,z.jsx)(`th`,{children:`Design status`}),(0,z.jsx)(`th`,{children:`Largest eligible delta`}),e.arms.map(e=>(0,z.jsx)(`th`,{children:e.arm_id},e.arm_id))]})}),(0,z.jsx)(`tbody`,{children:e.cases.map(r=>{let i=hC(r,t);return(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`td`,{children:(0,z.jsx)(`strong`,{children:r.case_id})}),(0,z.jsx)(`td`,{children:(0,z.jsx)(gC,{tone:r.complete_declared_design?`success`:`warning`,children:r.complete_declared_design?`Complete`:`Provisional`})}),(0,z.jsx)(`td`,{className:i?.direction===`improved`?`benchmark-positive`:i?.direction===`regressed`?`benchmark-negative`:void 0,children:i?.text??`—`}),r.arms.map(r=>(0,z.jsx)(`td`,{children:r.selected_run_id&&r.score_countable?(0,z.jsxs)(`button`,{className:`benchmark-cell-link`,onClick:()=>n(r.selected_run_id),type:`button`,children:[(0,z.jsxs)(`span`,{children:[t,`: `,pC(r.metrics[t])]}),e.design.metric_catalog.filter(e=>e.metric_name!==t).map(e=>(0,z.jsxs)(`small`,{className:`benchmark-cell-metric`,children:[e.metric_name,`: `,pC(r.metrics[e.metric_name])]},e.metric_name)),(0,z.jsxs)(`small`,{children:[`Countable · `,dC(r.effort.duration_ms),` `,(0,z.jsx)(Rp,{"aria-hidden":`true`,size:12})]}),r.insight&&(0,z.jsxs)(`small`,{children:[r.insight.failure_class,` · `,r.insight.confidence]})]}):(0,z.jsx)(`span`,{className:`benchmark-muted`,children:`Not countable`})},r.arm_id))]},r.case_id)})})]})})}function bC({run:e,packet:t}){return(0,z.jsxs)(`aside`,{"aria-label":`Run detail for ${e.run_id}`,className:`benchmark-run-detail`,children:[(0,z.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{className:`benchmark-mono`,children:`RUN DETAIL`}),(0,z.jsx)(`h2`,{children:e.run_id})]}),(0,z.jsx)(gC,{tone:e.countability.score_countable?`success`:`warning`,children:e.countability.score_countable?`Score-countable`:`Diagnostic only`})]}),(0,z.jsxs)(`dl`,{className:`benchmark-stat-list benchmark-run-facts`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Case / arm`}),(0,z.jsxs)(`dd`,{children:[e.case_id,` · `,e.arm_id]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Lifecycle`}),(0,z.jsxs)(`dd`,{children:[e.status,` · `,e.observed_at]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Protocol`}),(0,z.jsx)(`dd`,{children:e.protocol_id})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Qualification`}),(0,z.jsxs)(`dd`,{children:[`Integrity `,e.countability.integrity_qualified?`qualified`:`not qualified`,` · result `,e.countability.official_result_present?`present`:`missing`]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Treatment fidelity`}),(0,z.jsx)(`dd`,{children:e.treatment_fidelity})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Effort`}),(0,z.jsxs)(`dd`,{children:[dC(e.effort.duration_ms),` · `,uC(e.effort.agent_steps),` steps · `,uC(e.effort.token_count),` tokens`]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Runner revision`}),(0,z.jsx)(`dd`,{children:e.runner_revision??`—`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Upload provenance`}),(0,z.jsxs)(`dd`,{children:[e.upload_provenance.producer_id,` · `,e.upload_provenance.source_revision]})]})]}),(0,z.jsx)(`div`,{className:`benchmark-run-metrics`,children:t.design.metric_catalog.map(t=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`span`,{children:t.metric_name}),(0,z.jsx)(`strong`,{children:pC(e.metrics[t.metric_name])})]},t.metric_name))}),e.redacted_insight&&(0,z.jsxs)(`div`,{className:`benchmark-insight`,children:[(0,z.jsxs)(`span`,{className:`benchmark-mono`,children:[`REDACTED CASE INSIGHT · `,e.redacted_insight.confidence]}),(0,z.jsx)(`p`,{children:e.redacted_insight.causal_summary}),(0,z.jsxs)(`small`,{children:[`Implication: `,e.redacted_insight.implication]}),(0,z.jsx)(`br`,{}),(0,z.jsxs)(`small`,{children:[`Next probe: `,e.redacted_insight.next_probe]}),!!e.redacted_insight.evidence_refs?.length&&(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`br`,{}),(0,z.jsxs)(`small`,{children:[`Evidence: `,e.redacted_insight.evidence_refs.join(`, `)]})]})]})]})}function xC({packet:e,selectedRunId:t,onSelectRun:n}){let r=e.runs.find(e=>e.run_id===t)??e.runs[0];return(0,z.jsxs)(`div`,{className:`benchmark-runs-layout`,children:[(0,z.jsx)(`div`,{className:`benchmark-table-shell`,children:(0,z.jsxs)(`table`,{children:[(0,z.jsx)(`thead`,{children:(0,z.jsxs)(`tr`,{children:[(0,z.jsx)(`th`,{children:`Run`}),(0,z.jsx)(`th`,{children:`Case`}),(0,z.jsx)(`th`,{children:`Arm`}),(0,z.jsx)(`th`,{children:`Status`}),(0,z.jsx)(`th`,{children:`Countability`})]})}),(0,z.jsx)(`tbody`,{children:e.runs.map(e=>(0,z.jsxs)(`tr`,{"aria-selected":e.run_id===r?.run_id,children:[(0,z.jsx)(`td`,{children:(0,z.jsx)(`button`,{className:`benchmark-run-link`,onClick:()=>n(e.run_id),type:`button`,children:e.run_id})}),(0,z.jsx)(`td`,{children:e.case_id}),(0,z.jsx)(`td`,{children:e.arm_id}),(0,z.jsx)(`td`,{children:e.status}),(0,z.jsx)(`td`,{children:e.countability.score_countable?`Score-countable`:`Diagnostic only`})]},e.run_id))})]})}),r&&(0,z.jsx)(bC,{packet:e,run:r})]})}function SC(){let e=LC.useSearch(),t=LC.useNavigate(),[n,r]=(0,R.useState)(null),[i,a]=(0,R.useState)(null),[o,s]=(0,R.useState)(0),c=(0,R.useMemo)(()=>{let t=e.dashboardUrl||`/chat/benchmark-study.example.json`;try{return{url:sC(t,window.location.href),error:null}}catch(e){return{url:``,error:e instanceof Error?e.message:`Invalid dashboard source`}}},[e.dashboardUrl]);if((0,R.useEffect)(()=>{let e=!0;return r(null),a(null),c.error?(a(c.error),()=>{e=!1}):(fetch(c.url,{cache:`no-store`}).then(async e=>{if(!e.ok)throw Error(`HTTP ${e.status} while loading the dashboard packet`);return oC(await e.json())}).then(t=>{e&&r(t)}).catch(t=>{e&&a(t instanceof Error?t.message:`Unable to load dashboard packet`)}),()=>{e=!1})},[o,c]),(0,R.useEffect)(()=>{n&&(document.title=`${n.design.labels.title??n.study_id} · LoopX Benchmark`)},[n]),i)return(0,z.jsxs)(`main`,{className:`benchmark-page benchmark-loading`,children:[(0,z.jsx)(Xp,{"aria-hidden":`true`}),(0,z.jsx)(`h1`,{children:`Dashboard packet unavailable`}),(0,z.jsx)(`p`,{children:i}),(0,z.jsxs)(`button`,{onClick:()=>s(e=>e+1),type:`button`,children:[(0,z.jsx)(Om,{"aria-hidden":`true`,size:16}),` Retry readback`]})]});if(!n)return(0,z.jsxs)(`main`,{"aria-busy":`true`,className:`benchmark-page benchmark-loading`,children:[(0,z.jsx)(Fp,{"aria-hidden":`true`}),(0,z.jsx)(`h1`,{children:`Reading benchmark study`}),(0,z.jsx)(`p`,{children:`Validating the public-safe dashboard packet…`})]});let l=n.design.metric_catalog.find(e=>e.role===`primary`)?.metric_name??`primary`,u=(n,r=e.runId)=>t({search:e=>({...e,view:n,runId:r})}),d=new URL(c.url).pathname;return(0,z.jsxs)(`main`,{className:`benchmark-page`,children:[(0,z.jsxs)(`header`,{className:`benchmark-hero`,children:[(0,z.jsxs)(`div`,{className:`benchmark-hero-topline`,children:[(0,z.jsx)(`a`,{className:`benchmark-wordmark`,href:`/chat/`,children:`LoopX`}),(0,z.jsxs)(`div`,{className:`benchmark-readonly`,children:[(0,z.jsx)(Im,{"aria-hidden":`true`,size:15}),` Derived read-only projection`]})]}),(0,z.jsxs)(`div`,{className:`benchmark-hero-grid`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`p`,{className:`benchmark-kicker`,children:[`BENCHMARK STUDY / `,n.benchmark_id]}),(0,z.jsxs)(`div`,{className:`benchmark-title-row`,children:[(0,z.jsx)(`h1`,{children:n.design.labels.title??n.study_id}),(0,z.jsx)(gC,{tone:n.status===`complete`?`success`:`warning`,children:n.status})]}),(0,z.jsx)(`p`,{className:`benchmark-lead`,children:`One declared study, explicit denominators, and the same countability rules from campaign summary to exact run.`})]}),(0,z.jsxs)(`dl`,{className:`benchmark-identity`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Study`}),(0,z.jsx)(`dd`,{children:n.study_id})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Protocol`}),(0,z.jsx)(`dd`,{children:n.design.protocol_id})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Case set`}),(0,z.jsx)(`dd`,{children:n.design.case_set.case_set_id})]})]})]}),(0,z.jsxs)(`div`,{className:`benchmark-kpi-grid`,children:[(0,z.jsxs)(`article`,{children:[(0,z.jsx)(tm,{"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:`Score-countable cells`}),(0,z.jsxs)(`strong`,{children:[n.campaign.selected_score_countable_cell_count,(0,z.jsxs)(`small`,{children:[` / `,n.campaign.intended_cell_denominator]})]}),(0,z.jsxs)(`p`,{children:[lC(n.campaign.selected_score_countable_coverage_rate),` declared coverage`]})]}),(0,z.jsxs)(`article`,{children:[(0,z.jsx)(Zp,{"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:`Complete designs`}),(0,z.jsxs)(`strong`,{children:[n.campaign.complete_declared_design_case_count,(0,z.jsxs)(`small`,{children:[` / `,n.campaign.intended_case_count]})]}),(0,z.jsx)(`p`,{children:`Cases with every declared arm`})]}),(0,z.jsxs)(`article`,{children:[(0,z.jsx)(Rp,{"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:`Matched comparisons`}),(0,z.jsx)(`strong`,{children:n.campaign.matched_pair_countable_count}),(0,z.jsx)(`p`,{children:`Eligible pairs only`})]}),(0,z.jsxs)(`article`,{children:[(0,z.jsx)(Fp,{"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:`In flight`}),(0,z.jsx)(`strong`,{children:n.campaign.in_flight_run_count}),(0,z.jsx)(`p`,{children:n.status===`provisional`?`Coverage remains provisional`:`Declared coverage complete`})]})]})]}),(0,z.jsxs)(`nav`,{"aria-label":`Benchmark dashboard views`,className:`benchmark-tabs`,children:[cC.map(t=>(0,z.jsx)(`button`,{"aria-current":e.view===t.id?`page`:void 0,onClick:()=>u(t.id),type:`button`,children:t.label},t.id)),(0,z.jsxs)(`button`,{className:`benchmark-refresh`,onClick:()=>s(e=>e+1),type:`button`,children:[(0,z.jsx)(Om,{"aria-hidden":`true`,size:14}),` Refresh local readback`]})]}),(0,z.jsxs)(`div`,{className:`benchmark-content`,children:[e.view===`campaign`&&(0,z.jsx)(_C,{packet:n,primaryMetric:l}),e.view===`arms`&&(0,z.jsx)(vC,{packet:n}),e.view===`cases`&&(0,z.jsx)(yC,{onOpenRun:e=>u(`runs`,e),packet:n,primaryMetric:l}),e.view===`runs`&&(0,z.jsx)(xC,{onSelectRun:e=>u(`runs`,e),packet:n,selectedRunId:e.runId})]}),(0,z.jsxs)(`footer`,{className:`benchmark-footer`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(Im,{"aria-hidden":`true`,size:16}),(0,z.jsxs)(`span`,{children:[`Scores: `,n.authority.score_source]}),(0,z.jsx)(`span`,{children:`Dashboard cannot launch, grade, or mutate runs.`})]}),(0,z.jsxs)(`code`,{title:d,children:[`local`,d]})]})]})}var CC=J({goalId:W().optional().default(``),statusUrl:W().optional().default(``)}),wC=J({goalId:W().optional().default(``),mode:Y([`showcase`,`developer`,`ops`]).optional().default(`showcase`),statusUrl:W().optional().default(``),todoLane:Y([`all`,`user`,`agent`]).optional().default(`all`),todoQuery:W().optional().default(``)}),TC=wC.omit({mode:!0}),EC=J({dashboardUrl:W().optional().default(``),view:Y([`campaign`,`arms`,`cases`,`runs`]).optional().default(`campaign`),runId:W().optional().default(``)});function DC(){let e=`https://huangruiteng.github.io/loopx/docs/showcases/index.en.html`;return(0,R.useEffect)(()=>{window.location.replace(e)},[]),(0,z.jsx)(`a`,{href:e,children:`Open LoopX cases / 浏览案例`})}function OC({goalId:e,statusUrl:t}){let n=t?Ym(t,window.location.href):null;return n?.error?(0,z.jsx)(`main`,{role:`alert`,children:n.error}):(0,z.jsx)(ii,{replace:!0,to:`/`,search:{goalId:e,statusUrl:t}})}function kC(){let e=NC.useSearch();return e.mode===`ops`?(0,z.jsx)(OC,{...e}):e.mode===`developer`?(0,z.jsx)(ii,{replace:!0,to:`/developers/projections`}):(0,z.jsx)(DC,{})}function AC(){return(0,z.jsx)(OC,{...PC.useSearch()})}var jC=Ci({component:()=>(0,z.jsx)(Mi,{}),errorComponent:()=>(0,z.jsxs)(`main`,{role:`alert`,className:`p-8`,children:[(0,z.jsx)(`h1`,{children:`页面暂时无法显示 / Page unavailable`}),(0,z.jsx)(`p`,{children:`请重新加载页面;这不会执行任务。 / Reloading does not execute tasks.`}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>window.location.reload(),children:`重新加载 / Reload`})]})}),MC=xi({getParentRoute:()=>jC,path:`/`,validateSearch:e=>CC.parse(e),component:FS}),NC=xi({getParentRoute:()=>jC,path:`/frontstage`,validateSearch:e=>wC.parse(e),component:kC}),PC=xi({getParentRoute:()=>jC,path:`/deprecated/frontstage/ops`,validateSearch:e=>TC.parse(e),component:AC}),FC=xi({getParentRoute:()=>jC,path:`/frontstage/developer`,component:()=>(0,z.jsx)(ii,{replace:!0,to:`/developers/projections`})}),IC=xi({getParentRoute:()=>jC,path:`/developers/projections`,component:YS}),LC=xi({getParentRoute:()=>jC,path:`/benchmarks/study`,validateSearch:e=>EC.parse(e),component:SC}),RC=jC.addChildren([MC,NC,PC,FC,IC,LC]);function zC(e){return!e||e===`/`||e===`./`?`/`:(e.startsWith(`/`)?e:`/${e}`).replace(/\/+$/,``)||`/`}var BC=Li({routeTree:RC,basepath:zC(`/chat/`),trailingSlash:`preserve`}),VC=document.getElementById(`root`);if(!VC)throw Error(`Root element not found`);var HC=new je({defaultOptions:{queries:{refetchOnWindowFocus:!1,retry:1,staleTime:1e4}}});(0,Vi.createRoot)(VC).render((0,z.jsx)(Fe,{client:HC,children:(0,z.jsx)(qi,{children:(0,z.jsx)(Bi,{router:BC})})})); \ No newline at end of file diff --git a/loopx/web/chat/index.html b/loopx/web/chat/index.html index a9a238c053..b1ea398f4c 100644 --- a/loopx/web/chat/index.html +++ b/loopx/web/chat/index.html @@ -18,7 +18,7 @@ content="LoopX 个人 Agent 工作区:在同一个频道里查看、纠偏并推进 Goal。" /> LoopX 个人 Agent 工作区 - + From 509822243933e4e2ad28db57da30698c6cd32efd Mon Sep 17 00:00:00 2001 From: luw2007 Date: Mon, 14 Sep 2026 11:22:16 +0800 Subject: [PATCH 03/76] fix(chat): restore workspace choices for gated goals Signed-off-by: luw2007 --- .../personal-workspace/context-drawer.tsx | 2 +- .../personal-workspace-page.tsx | 29 +++++++++++++----- loopx/web/chat/asset-retention.json | 4 +-- .../{index-LRc2f6MH.js => index-DZ4wXv1S.js} | 30 +++++++++---------- loopx/web/chat/index.html | 2 +- 5 files changed, 40 insertions(+), 27 deletions(-) rename loopx/web/chat/assets/{index-LRc2f6MH.js => index-DZ4wXv1S.js} (70%) diff --git a/apps/presentation/dashboard/src/features/personal-workspace/context-drawer.tsx b/apps/presentation/dashboard/src/features/personal-workspace/context-drawer.tsx index 8d3f250579..1cee44d247 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/context-drawer.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/context-drawer.tsx @@ -977,7 +977,7 @@ export function ContextDrawer({ agents, attentionHistory = [], onSelectAttention {selection.item.status === "error" ?
{selection.item.reviewPlan?.reason === "readback_unverified" ? t("actionReview.readback_unverified") : t("drawer.proposalApplyFailed")}{selection.item.errorMessage ? {selection.item.errorMessage} : null}{t("drawer.proposalApplyFailedHint")}
: null} {selection.item.status === "rejected" ?

{t("drawer.proposalRejected")}

: null} {selection.item.status === "deferred" ?

{t("drawer.proposalDeferred")}

: null} - {selection.item.status === "gated" ?
{selection.item.actionKind === "operation.execute" ? selection.item.primaryLabel : t("drawer.gateRequiresHost")}{selection.item.actionKind === "operation.execute" ? selection.item.impact : t("drawer.gateRequiresHostDescription")}{selection.item.gate?.nextAction ? {selection.item.gate.nextAction} : null}
: null} + {selection.item.status === "gated" ?
{selection.item.actionKind === "operation.execute" ? selection.item.primaryLabel : selection.item.workspaceCandidates?.length ? selection.item.title : t("drawer.gateRequiresHost")}{selection.item.actionKind === "operation.execute" || selection.item.workspaceCandidates?.length ? selection.item.impact : t("drawer.gateRequiresHostDescription")}{selection.item.gate?.nextAction ? {selection.item.gate.nextAction} : null}
: null} {selection.item.status === "gated" && selection.item.actionKind === "gate.resolve" ? (() => { const fieldValue = (key: string) => selection.item.fields.find((field) => field.key === key)?.value; const gateGoalId = fieldValue("goal_id"); diff --git a/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace-page.tsx b/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace-page.tsx index 0970c4a94e..e9c4764452 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace-page.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace-page.tsx @@ -541,6 +541,17 @@ function lifecycleOperationFor(proposal: TypedActionProposal): GoalLifecycleOper : undefined; } +function workspaceCandidatesFromGate(gate: Record | null | undefined) { + const candidates = Array.isArray(gate?.candidates) ? gate.candidates : []; + return candidates.flatMap((candidate) => { + if (!candidate || typeof candidate !== "object") return []; + const item = candidate as Record; + return typeof item.workspace_ref === "string" && typeof item.label === "string" + ? [{ label: item.label, workspaceRef: item.workspace_ref }] + : []; + }); +} + function workspaceProposal(proposal: TypedActionProposal, t: WorkspaceTranslate): WorkspaceActionPreview { const lifecycleOperation = lifecycleOperationFor(proposal); const reviewPlan = compileActionReviewPlan(proposal); @@ -549,6 +560,7 @@ function workspaceProposal(proposal: TypedActionProposal, t: WorkspaceTranslate) : typeof proposal.normalized_parameters.goal_id === "string" ? proposal.normalized_parameters.goal_id : ""; + const workspaceCandidates = workspaceCandidatesFromGate(proposal.gate); const target = typeof proposal.normalized_parameters.target === "string" ? proposal.normalized_parameters.target : ""; @@ -599,6 +611,14 @@ function workspaceProposal(proposal: TypedActionProposal, t: WorkspaceTranslate) nextAction: typeof proposal.gate.next_action === "string" ? proposal.gate.next_action : undefined, summary: String(proposal.gate.summary ?? t("proposal.gate.default")), } : undefined, + sourceRequest: proposal.status === "gated" && proposal.action_kind === "goal.create" ? { + actionKind: proposal.action_kind, + context: proposal.context, + idempotencyKey: `${proposal.proposal_id}-workspace`, + normalizedParameters: proposal.normalized_parameters, + summary: proposal.summary, + } : undefined, + workspaceCandidates, primaryLabel: proposal.action_kind === "operation.execute" ? proposal.operation?.lifecycle_state === "outcome_observed" ? proposal.operation.result_delivery @@ -1087,14 +1107,7 @@ export function PersonalWorkspacePage({ const rawGate = error.payload.gate && typeof error.payload.gate === "object" ? error.payload.gate as Record : {}; - const rawCandidates = Array.isArray(rawGate.candidates) ? rawGate.candidates : []; - const workspaceCandidates = rawCandidates.flatMap((candidate) => { - if (!candidate || typeof candidate !== "object") return []; - const item = candidate as Record; - return typeof item.workspace_ref === "string" && typeof item.label === "string" - ? [{ label: item.label, workspaceRef: item.workspace_ref }] - : []; - }); + const workspaceCandidates = workspaceCandidatesFromGate(rawGate); const gateKind = String(rawGate.kind ?? "workspace_selection_required"); const requiresAgentBinding = gateKind === "agent_binding_required" || gateKind === "agent_identity_selection_required"; diff --git a/loopx/web/chat/asset-retention.json b/loopx/web/chat/asset-retention.json index 1720214db6..b2a62ba558 100644 --- a/loopx/web/chat/asset-retention.json +++ b/loopx/web/chat/asset-retention.json @@ -14,7 +14,7 @@ "assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2", "assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2", "assets/index-B7B_kVDP.css", - "assets/index-C6eFCYni.js" + "assets/index-DZ4wXv1S.js" ], [ "assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2", @@ -29,7 +29,7 @@ "assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2", "assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2", "assets/index-B7B_kVDP.css", - "assets/index-LRc2f6MH.js" + "assets/index-C6eFCYni.js" ] ] } diff --git a/loopx/web/chat/assets/index-LRc2f6MH.js b/loopx/web/chat/assets/index-DZ4wXv1S.js similarity index 70% rename from loopx/web/chat/assets/index-LRc2f6MH.js rename to loopx/web/chat/assets/index-DZ4wXv1S.js index 70d570d21c..aeea032c53 100644 --- a/loopx/web/chat/assets/index-LRc2f6MH.js +++ b/loopx/web/chat/assets/index-DZ4wXv1S.js @@ -25,7 +25,7 @@ Notification: Only notify me when needed`,"composer.heartbeatTemplateWithoutGoal Goal: Frequency: Daily Stop condition: Goal completes -Notification: Only notify me when needed`,"composer.nextAction":`Ask what’s next`,"composer.nextActionPrompt":`What should I do next?`,"composer.prepareDraft":`Insert a draft and review before sending`,"composer.send":`Send`,"composer.sendMessage":`Send a message to LoopX`,"composer.sendMessageHint":`Send message`,"composer.sentImageAlt":`Remove image {name}`,"conversation.agentPending":`Working…`,"conversation.close":`Close conversation receipt`,"conversation.convertHint":`Turn the Agent’s latest reply into a Task draft`,"conversation.full":`View full conversation`,"conversation.receipt":`Conversation receipt`,"conversation.replying":`Replying`,"conversation.title":`Manager conversation`,"conversation.toTask":`Convert to Task`,"digest.away":`Runs since your previous visit`,"digest.completed":`new completions`,"digest.failed":`new failed/interrupted runs`,"digest.needsYou":`currently need confirmation`,"feedback.applying":`Running: {title}`,"feedback.cancelFailed":`Cancel failed: {error}`,"feedback.completed":`Completed: {title}`,"feedback.executionFailed":`Execution failed: {error}`,"feedback.gateRequired":`Your confirmation is required: {summary}`,"feedback.notCompleted":`Not completed: {status}`,"feedback.goalRefreshFailed":`The Goal opened, but its latest state could not be refreshed. Use Refresh to try again.`,"feedback.preparingPreview":`Preparing confirmation preview: {title}`,"feedback.previewFailed":`Could not prepare the confirmation preview: {error}`,"feedback.sendFailed":`Send failed: {error}`,"feedback.sendGenericError":`Could not send the message. Try again later.`,"feedback.stale":`State changed, so nothing was applied. Generate a new confirmation preview.`,"feedback.taskDraftCreated":`Created a Task draft from the reply. Edit and send it to review the confirmation preview.`,"goal.defaultTitle":`New personal Goal`,"goal.initialTodo":`Work toward the completion criteria: {criteria}`,"goal.objectiveBoundary":`Execution boundary: {boundary}`,"goal.objectiveCompletion":`Completion criteria: {criteria}`,"drawer.advancedDiagnostics":`Advanced diagnostics`,"drawer.agentWorking":`Agent is continuing; the record updates automatically.`,"drawer.analysis":`Analyzing`,"drawer.apply":`Confirm and apply`,"drawer.applying":`Applying…`,"drawer.attentionBlocking":`Blocking an Agent`,"drawer.attentionWaiting":`Waiting for your decision`,"drawer.autoNotify":`Human-gate auto notifications`,"drawer.branch":`Branch`,"drawer.closeDetail":`Close details and return to {context}`,"drawer.connected":`Connected`,"drawer.correctionDescription":`The message keeps the current Goal, Todo, and Agent Session context.`,"drawer.correctionLabel":`Guide {agent}`,"drawer.correctionPlaceholder":`For example: focus on permission risks first and do not commit yet…`,"drawer.correctionSend":`Send guidance`,"drawer.correctionTextarea":`Enter guidance for Goal {goal}, Agent {agent}, Run {run}`,"drawer.copyRepository":`Copy repository identity`,"drawer.copyRepositoryDone":`Repository identity copied`,"drawer.copyRepositoryError":`Copy failed. Check browser clipboard permission.`,"drawer.copyRepositorySuccess":`Copied. You can paste it into another tool.`,"drawer.cost":`Cost 24h / 7d`,"drawer.costShort":`Cost`,"drawer.durationShort":`Duration`,"drawer.period24h":`24h`,"drawer.period7d":`7d`,"drawer.tokens":`Tokens 24h / 7d`,"drawer.tokensShort":`tokens`,"drawer.usageNotMeasured":`Not measured`,"drawer.currentGoal":`Current Goal`,"attentionDetail.title":`Request details`,"attentionDetail.request":`What is requested`,"attentionDetail.decision":`Decision requested`,"attentionDetail.unknownRequest":`Not specified; review the source before deciding`,"attentionDetail.open":`Open in current projection`,"attentionDetail.closed":`Closed`,"attentionDetail.deferred":`Deferred`,"attentionDetail.superseded":`Replaced`,"attentionDetail.unknown":`Status not provided`,"attentionDetail.unavailable":`The source has not confirmed this item; refresh before acting`,"attentionDetail.unknownReason":`The source has not provided a reason.`,"attentionDetail.targetTodo":`Linked Todo to unblock`,"attentionDetail.targetAgent":`Agent named by the request`,"attentionDetail.scope":`Declared decision scope`,"attentionDetail.notProvided":`Not provided`,"attentionDetail.replacement":`Replacement Todo`,"attentionDetail.openReplacement":`Open replacement`,"attentionDetail.boundary":`Reading this detail does not resolve a gate or grant authority. Available decisions require a fresh preview.`,"drawer.decisionDefaultEvidence":`No additional public-safe evidence is attached. The next step will still show a Preview first.`,"drawer.decisionDefaultReason":`This decision affects the next step of the current Todo.`,"drawer.decisionDefer":`Decide later`,"drawer.decisionMore":`More decisions`,"drawer.decisionReject":`Reject`,"drawer.decisionReview":`Review impact and decide`,"drawer.dependencies":`Dependencies`,"drawer.detailsAndActions":`Details & actions`,"drawer.duration":`Duration 24h / 7d`,"drawer.evidence":`Evidence`,"drawer.executionHistory":`Execution history`,"drawer.executionRecord":`Run record`,"drawer.executionRecordAndResult":`Execution & result`,"drawer.explainDecision":`Explain this decision`,"drawer.gateApproveHint":`Run one command in the terminal to complete approval:`,"drawer.gateRejectHint":`Replace approve with reject at the end to decline. This notice disappears after the command runs.`,"drawer.gateRequiresHost":`Host confirmation required`,"drawer.gateRequiresHostDescription":`This page cannot approve this protected permission change. Nothing was written by your click.`,"drawer.goalAutoRun":`Automatic runs for this Goal`,"drawer.goalChanges":`Pending changes for this Goal`,"drawer.goalDetails":`Goal details`,"drawer.group":`Group`,"drawer.inspectorFull":`Switch to full screen`,"drawer.inspectorFullView":`Full-screen view`,"drawer.inspectorHalf":`Switch to half screen`,"drawer.inspectorHalfView":`Half-screen view`,"drawer.lastNotification":`Latest notification`,"drawer.larkConfigure":`Configure Lark connection`,"drawer.larkConnect":`Connect Lark App`,"drawer.larkConnection":`Lark connection`,"drawer.larkNotConfigured":`Not configured`,"drawer.larkNotConfiguredDescription":`After setup, LoopX sends a Feishu notification when this Goal needs your confirmation.`,"drawer.managerChanges":`Pending Manager changes`,"drawer.moreActions":`More actions`,"drawer.moreRunActions":`More run actions`,"drawer.nextTransition":`Next transition`,"drawer.noExecutionHistory":`No execution history yet.`,"drawer.noRun":`Execution Session has not started`,"drawer.noRunDescription":`Run records will appear here after an Agent starts execution.`,"drawer.notAssigned":`Unassigned`,"drawer.notLinked":`Not linked`,"drawer.notSet":`Not set`,"drawer.outputDetails":`Output details`,"drawer.outputRecorded":`This output is recorded on the current Goal.`,"drawer.outputSafePreview":`Public-safe output preview`,"drawer.outputRun":`Run`,"drawer.outputTodo":`Todo`,"drawer.outputs":`Outputs from this run`,"drawer.previewUnavailable":`No public-safe inline preview is available for this output.`,"drawer.priority":`Priority`,"drawer.progress":`Progress`,"drawer.proposalApplied":`Applied. LoopX state will refresh.`,"drawer.proposalApplyFailed":`Apply failed. No changes were written.`,"drawer.proposalApplyFailedHint":`Refresh the Goal state and regenerate. If it still fails, keep this page open and inspect advanced diagnostics.`,"drawer.proposalClose":`Close`,"drawer.proposalDefer":`Later`,"drawer.proposalDeferred":`Deferred. You can apply it later or regenerate it.`,"drawer.proposalEnterGoal":`Open new Goal`,"drawer.proposalExplainer":`After confirmation, LoopX applies this change and shows the write result. Closing or canceling changes nothing.`,"drawer.proposalRecheck":`Recheck against latest state`,"drawer.proposalRegenerate":`Retry with latest state`,"drawer.proposalRejected":`Rejected. This change will not be written.`,"drawer.proposalStale":`Source state changed. Recheck against the latest state.`,"drawer.proposalViewGoal":`View updated Goal`,"drawer.reassign":`Reassign to`,"drawer.reassignSummary":`Reassign: {task}`,"drawer.reason":`Reason`,"drawer.recoveryDescription":`Local history is preserved. Choose a recovery path.`,"drawer.recoveryFailed":`Upstream Session recovery failed`,"drawer.recoveryNewSession":`Start a new Session with context`,"drawer.recoveryRetry":`Retry recovery`,"drawer.repositoryRole":`Execution workspace`,"drawer.repository":`Repository`,"drawer.replyMode":`Reply mode`,"drawer.subagentApplied":`Applied and verified against the shared Goal state.`,"drawer.subagentAppliedRefreshFailed":`Applied and verified. The status view could not refresh; retry the page refresh later.`,"drawer.subagentApplying":`Applying and verifying shared-state readback…`,"drawer.subagentApplyFailed":`Could not apply the sub-agent setting.`,"drawer.subagentChildLimit":`Current limit`,"drawer.subagentConfirmDisable":`Confirm turning off sub-agent execution`,"drawer.subagentConfirmEnable":`Confirm turning on sub-agent execution`,"drawer.subagentCurrentBoundary":`Current task-domain restriction`,"drawer.subagentDescription":`Allows the runtime to create temporary child agents for independent tasks only after Todo, quota, capability, and write-scope gates pass. It does not force parallel work or grant durable authority.`,"drawer.subagentDisable":`Preview turning off sub-agent execution`,"drawer.subagentDisableSummary":`New child-agent execution will be disabled for this Goal. Existing Todo ownership and execution records stay unchanged.`,"drawer.subagentDomainInvalid":`The selected task-domain restriction is invalid.`,"drawer.subagentDomainTodoCount":`{count} matching open Todos`,"drawer.subagentDomains":`Task-domain restriction (optional)`,"drawer.subagentDomainsEmpty":`No open advancement Todo declares task_domain. Leave this empty to keep child execution unrestricted by task domain.`,"drawer.subagentDomainsHint":`Leave every option clear to apply no task-domain filter. Selecting domains admits only matching typed Todos; all other execution gates still apply.`,"drawer.subagentDomainsUnrestricted":`No task-domain restriction`,"drawer.subagentEnable":`Preview turning on sub-agent execution`,"drawer.subagentLabel":`Per-Goal execution boundary`,"drawer.subagentModel":`Child model`,"drawer.subagentEffort":`Child reasoning effort`,"drawer.subagentModelDefault":`Host default`,"drawer.subagentLunaPreset":`Use Luna / max`,"drawer.subagentClearModel":`Clear model preference`,"drawer.subagentModelHint":`Use Preview configuration update to save this preference. It can be saved while execution is off; host support is checked at launch.`,"drawer.subagentModelRequired":`Choose a child model before setting reasoning effort.`,"drawer.subagentMaxChildren":`Maximum child agents`,"drawer.subagentNoChange":`The current Goal already matches this setting; nothing was written.`,"drawer.subagentPending":`Pending confirmation`,"drawer.subagentPreviewBoundary":`Preview configuration update`,"drawer.subagentPreviewFailed":`Could not create the sub-agent setting preview.`,"drawer.subagentPreviewing":`Checking the latest Goal state…`,"drawer.subagentPreviewReady":`Preview locked. Confirm to apply this Goal setting.`,"drawer.subagentPreviewSummary":`Allow up to {count} child agents. Task-domain restriction: {domains}.`,"drawer.subagentRemoteReadOnly":`This source is read only. Open the Goal on its host to change the setting.`,"drawer.subagentTitle":`Adaptive sub-agent execution`,"drawer.remoteDetailsDescription":`SSH sources expose public-safe status only and do not read connection settings from the source host.`,"drawer.remoteDetailsUnavailable":`Remote details are not projected`,"drawer.resumeNo":`No`,"drawer.resumeYes":`Yes`,"drawer.runDetails":`Execution Session`,"drawer.runInterrupt":`Interrupt this run`,"drawer.runLatest":`View latest execution`,"drawer.runNewSession":`Start new Session`,"drawer.runCloseSession":`Close Session`,"drawer.runRecordEmpty":`No run record yet. The Agent has not started this execution. Check waiting conditions or resume the Session under Details & actions.`,"drawer.runRecordProjected":`No step-by-step record is available. LoopX read {completed}/{total} projected steps{outputs}; inspect the Session under Details & actions.`,"drawer.runRecordProjectedOutputs":` and {count} outputs`,"drawer.runRoleAssistant":`Completed`,"drawer.runRoleSystem":`Needs review`,"drawer.runRoleUser":`Task received`,"drawer.runView":`Session views`,"drawer.scheduleAdd":`Add scheduled check`,"drawer.scheduleDefaultNotification":`Notify only when you are needed`,"drawer.scheduleDefaultStop":`Goal completes or owner stops it`,"drawer.scheduleDefaultTarget":`Wake according to this Goal’s LoopX schedule.`,"drawer.scheduleEdit":`Change to every 2 hours`,"drawer.scheduleLast":`Last run`,"drawer.scheduleLocalTimezone":`Local timezone`,"drawer.scheduleNext":`Next run`,"drawer.scheduleNeverRun":`Not run yet`,"drawer.scheduleNotification":`Notification`,"drawer.schedulePause":`Pause`,"drawer.schedulePending":`Waiting for schedule`,"drawer.scheduleResume":`Resume`,"drawer.scheduleRunNow":`Run now`,"drawer.scheduleStop":`Stop {kind}`,"drawer.scheduleStopCondition":`Stop condition`,"drawer.scheduleTimezone":`Timezone`,"drawer.sessionRecoverable":`Resumable`,"drawer.sessionStatus":`Session status`,"drawer.setupHeartbeat":`Set up Heartbeat`,"drawer.taskActions":`Pending Todo actions`,"drawer.taskAdvancement":`Advancement task`,"drawer.taskBlock":`Mark blocked`,"drawer.taskComplete":`Mark complete`,"drawer.taskCompletedNote":`This task is retained as a read-only record.`,"drawer.taskCompletedTitle":`Task completed`,"drawer.taskDefer":`Defer`,"drawer.taskDeferCondition":`Todo defer resume condition`,"drawer.taskDeferInvalid":`Unsupported condition format; use one of the deterministic conditions below.`,"drawer.taskDeferPlaceholder":`For example, resume_at:2026-09-14T09:00:00+08:00`,"drawer.taskDeferReview":`Review defer`,"drawer.taskDeferSupported":`Supports todo_done, pr_merged, capacity_available, and timezone-aware resume_at conditions.`,"drawer.taskDeferUntil":`Defer until`,"drawer.taskDetails":`Todo details`,"drawer.taskInfo":`Task information`,"drawer.taskManage":`Manage task`,"drawer.taskNextCompleted":`Create a follow-up task`,"drawer.taskNextOpen":`Advance or update status`,"drawer.taskOrdinary":`Task`,"drawer.taskStatusBlocked":`Blocked`,"drawer.taskStatusDeferred":`Deferred`,"drawer.resumeWhen":`Resume condition`,"drawer.resumeState":`Resume state`,"drawer.resumePending":`Waiting for condition`,"drawer.resumeReady":`Ready to resume`,"drawer.resumeReceipt":`Resume receipt`,"drawer.taskNextDeferred":`Wait for the resume condition, then reassess`,"drawer.taskNextResumeReady":`Resume condition met; awaiting lifecycle replan`,"drawer.taskStatusCompleted":`Completed`,"drawer.taskStatusOpen":`Ready`,"drawer.taskSuccessor":`Create follow-up Todo`,"drawer.taskSuccessorNote":`Owner marked this blocked while waiting for more context.`,"drawer.taskSuccessorSummary":`Create follow-up Todo: {task}`,"drawer.taskSuccessorText":`Follow-up work for {task}`,"drawer.taskType":`Task type`,"drawer.topic":`Topic`,"drawer.trigger":`Trigger`,"drawer.titleAttention":`Needs you`,"drawer.titleOutput":`Output details`,"drawer.titleProposalApplied":`Execution result`,"drawer.titleProposalConfirm":`Confirm execution`,"drawer.titleSchedule":`Scheduled check`,"drawer.unconfigured":`Not configured`,"drawer.workspaceCandidates":`Available workspaces`,"files.emptySummary":`Public-safe output`,"files.empty":`No files, outputs, or verified reports yet.`,"files.loadingReports":`Loading verified milestone reports…`,"files.reportDelta":`+{added} added · {changed} changed`,"files.reportAdded":`added`,"files.reportChanged":`changed`,"files.reportGeneration":`Generation`,"files.reportLoadFailed":`Could not load verified reports`,"files.reportPublication":`Publication`,"files.title":`Files & Outputs`,"files.verifiedReport":`Verified milestone report`,"header.agentUnavailable":`Unavailable`,"header.chatRuntime":`Chat`,"header.workAgentCount":`{count} work Agents`,"header.chat":`Chat`,"header.files":`Files`,"header.goalCapabilities":`Capability settings`,"header.goalCapabilitiesDescription":`Manage overrides and inherited machine defaults.`,"header.goalDetails":`Goal details`,"header.goalDetailsDescription":`Review status, usage, repository, notifications, and sessions.`,"header.goalSettings":`Goal settings`,"header.goalSettingsDescription":`Open Goal details or capability settings`,"header.goalNavigation":`Goal navigation`,"header.goalView":`Goal view`,"header.live":`Live`,"header.manager":`LoopX Manager`,"header.managerDescription":`Your personal workspace across Goals`,"header.managerOverview":`Overview`,"header.managerView":`Manager view`,"header.openGoalNavigation":`Open Goal navigation`,"header.readOnlySourceDescription":`{source} is displayed read-only through an SSH tunnel`,"header.refresh":`Refresh status`,"header.refreshDone":`Updated just now`,"header.refreshFailed":`Refresh failed`,"header.refreshing":`Refreshing`,"header.selectAgent":`Select Agent`,"header.selectChatRuntime":`Select chat runtime`,"header.tasks":`Tasks`,"header.themeBrutal":`Switch to brutal theme`,"header.themePaper":`Switch to default theme`,"home.blockingSummary":`{count} are blocking an Agent.`,"home.completedGoals":`Completed Goals`,"home.empty":`Nothing here`,"startup.goalLoading":`Loading status…`,"startup.goalError":`Could not load status`,"startup.progress":`{loaded} of {total} active Goals loaded`,"startup.partial":`Goal states are updating. Counts are incomplete.`,"startup.independent":`Other Goals remain available while this Goal loads.`,"startup.error.timeout":`The request timed out. Retry when the local service is ready.`,"startup.error.network":`The connection was interrupted. Retry to reconnect.`,"startup.error.service":`The local service is temporarily unavailable. Retry to continue.`,"startup.error.revision":`The Goal directory changed during loading. Refresh to synchronize.`,"startup.error.scope":`This Goal is no longer available in the selected source. Refresh the directory.`,"startup.error.invalid":`The status response could not be read. Refresh or check for a LoopX update.`,"startup.retry":`Retry`,"startup.retryFailed":`Retry failed Goals`,"startup.failedCount":`{count} Goals could not be loaded. Ready Goals remain available.`,"home.greeting":`Hi, I’m your LoopX Manager`,"home.history":`History`,"home.lane.needsYou":`Needs you`,"home.lane.needsYouDescription":`Waiting for your decision, authorization, or context`,"home.lane.observing":`Observing`,"home.lane.observingDescription":`Monitoring continuously and notifying you when something changes`,"home.lane.running":`Running`,"home.lane.runningDescription":`Agents are making progress and reporting back`,"home.lane.scheduled":`Scheduled`,"home.lane.scheduledDescription":`Queued until its time or prerequisite arrives`,"home.noActivity":`No activity yet`,"home.noFirstActivity":`Waiting for first activity`,"home.noCompletedGoals":`No completed Goals yet`,"home.preservedState":`State is preserved and can be resumed`,"home.stopped":`Stopped`,"home.systemHealth":`System health: {summary}`,"home.taskCount":`{count} Tasks`,"home.todayAt":`Today {time}`,"home.waitingCount":`You have {count} items to handle.`,"home.workspace":`Goal workspace`,"lark.allMessages":`All messages in this topic`,"lark.allTopicMessages":`All topic messages`,"lark.agentIngress":`Agent ingress`,"lark.agentAppPermissions":`Every selected Agent needs a Lark App that is ready for group mentions and replies.`,"lark.agentApps":`Lark App per Agent`,"lark.agentAppsDescription":`The default App is preselected. Assign a different compatible App when an Agent needs its own bot identity.`,"lark.agentAppSelection":`Lark App for {agent}`,"lark.appCreated":`App created`,"lark.appCreateFailed":`Creation failed`,"lark.appLoading":`Loading available Lark Apps…`,"lark.appPermissions":`This App can send connection messages, but lacks the bot permissions required to receive group mentions or reply automatically. Enable im:message.group_at_msg:readonly, im:message.send_as_bot, and the im.message.receive_v1 event, publish a new version, then refresh.`,"lark.appProfile":`Lark App`,"lark.apps":`Lark Apps`,"lark.autoReplyUnavailable":`Auto reply unavailable`,"lark.autoReplyReady":`Auto reply ready`,"lark.bindGoal":`Bind to Goal`,"lark.cancel":`Cancel`,"lark.cardinality":`One Lark App · many Goals · one isolated route per Agent`,"lark.capture":`Capture`,"lark.captureAddressed":`Only messages that mention or reply to the App`,"lark.captureAll":`All messages in this Goal topic`,"lark.captureScope":`Capture scope`,"lark.captureScopeDescription":`Controls which Topic messages enter LoopX without expanding Agent permissions.`,"lark.closeConnection":`Close connection dialog`,"lark.closeCreate":`Close create dialog`,"lark.closeSettings":`Close Lark settings`,"lark.connect":`Connect`,"lark.connectAllAgents":`Connect every registered Agent`,"lark.connectAllAgentsAction":`Connect {count} Agents`,"lark.connectAllAgentsDescription":`Create {count} isolated Agent Topics in one guided action. Send requests inside the matching Topic; each Agent keeps its own route and inbox.`,"lark.connectApp":`Connect Lark App`,"lark.connection":`Connection`,"lark.connections":`Connections`,"lark.configuration":`Lark configuration`,"lark.continueFeishu":`Continue in Feishu`,"lark.createAutomatically":`Create Goal topic automatically`,"lark.createAutomaticallyDescription":`A dedicated, Agent-labelled Topic will be created for every selected Agent.`,"lark.defaultAgentAppDescription":`Used to find the target group and as the default for every selected Agent. Per-Agent choices below override it.`,"lark.description":`Manage reusable Lark Apps and connect group chats to Goals through dedicated topics.`,"lark.editConnection":`Edit Lark Connection`,"lark.goalConnections":`{count} Goal connections`,"lark.goalTopicConnections":`Lark Goal Topic connections`,"lark.groupChat":`Group chat`,"lark.groupEmpty":`This bot has not joined a group that can be connected. Add it to a Feishu group first, then return to refresh or search.`,"lark.groupLoading":`Reading groups joined by this bot…`,"lark.groupSearch":`Search groups joined by this bot`,"lark.historyPermission":`Group-history permission (separate capability)`,"lark.health.eventProcessed":`{events} events processed, {replies} replies sent.`,"lark.health.eventUnverified":`Event subscription needs verification`,"lark.health.eventUnverifiedDetail":`The provider listener is ready, but no event has arrived. Enable im.message.receive_v1 and group mention permissions, publish a new version, then send a new @ mention inside this Agent Topic. Group-level messages fail closed when multiple Agent routes exist.`,"lark.health.ignoredSelf":`The bot’s own message was ignored to prevent duplicate replies.`,"lark.health.invalidRouting":`Invalid routing configuration`,"lark.health.invalidRoutingDetail":`The connection was safely disabled. Select a processing mode again and save.`,"lark.health.lastStatus":`Latest event status: {status}`,"lark.health.listening":`Listening`,"lark.health.messageContextPermission":`Message permission required`,"lark.health.messageContextPermissionDetail":`A message event arrived, but group context could not be read. Publish and authorize group message read access for this App.`,"lark.health.notAddressed":`Latest message did not directly @ the bot`,"lark.health.notAddressedDetail":`Listening is healthy. This connection only responds to direct @ mentions or replies to the bot.`,"lark.health.notStarted":`Listener not started`,"lark.health.notStartedDetail":`Refresh the connection or restart LoopX, then try again.`,"lark.health.processingFailed":`Message processing failed`,"lark.health.processingFailedDetail":`The message event arrived, but Agent processing failed. Review local diagnostics and retry.`,"lark.health.queued":`Queued in the Agent inbox`,"lark.health.queuedDetail":`The message will be processed asynchronously by {agent} without starting a general Chat Session.`,"lark.health.sourceDisconnected":`Event connection disconnected`,"lark.health.sourceDisconnectedDetail":`The event consumer exited unexpectedly. Check that the app profile uses Feishu for Feishu apps or Lark for international Lark, then inspect connection and subscription errors. LoopX is retrying; successful history queries do not prove live delivery.`,"lark.health.retrying":`Retrying listener`,"lark.health.retryingDetail":`Event listening was interrupted and LoopX is retrying automatically.`,"lark.health.routeAmbiguous":`Message matches multiple Goals`,"lark.health.routeAmbiguousDetail":`The same bot and group have multiple full-group capture connections. Use a separate bot for each Agent or keep only one full-group connection.`,"lark.health.routeMismatch":`Message did not match this Goal Topic`,"lark.health.routeMismatchDetail":`The event came from another group or Topic. Reconnect this Goal to the correct group, then send a new @ mention.`,"lark.health.routeUnavailable":`Message cannot be routed to the Goal`,"lark.health.routeUnavailableDetail":`Connection data is incomplete. Reconnect this Goal, then send a new @ mention.`,"lark.health.starting":`Starting`,"lark.health.startingDetail":`LoopX is starting message event listening for this App.`,"lark.health.unavailable":`Auto reply unavailable`,"lark.health.waiting":`Waiting`,"lark.incomingMessages":`Incoming messages`,"lark.ingressAsync":`Async inbox`,"lark.ingressAsyncDescription":`Write to the Agent private inbox for a later explicit drain.`,"lark.editPreservesIdentity":`Saving preserves this App, group and Topic. Old connections upgrade to the Agent inbox by default.`,"lark.conversationKind":`Connection purpose`,"lark.managerConversation":`Manager · live conversation`,"lark.workerConversation":`Worker Agent · background tasks`,"lark.managerConversationDescription":`The built-in manager responds as you chat and delegates long-running work to background Agents. Group and private conversations keep separate histories.`,"lark.ingressLegacy":`Upgrade available`,"lark.ingressLegacyDescription":`Save this connection to upgrade to the Agent inbox. Existing messages remain in the same Topic.`,"lark.ingressQueue":`Queuing`,"lark.ingressQueueDescription":`Enter the same Agent Session's bounded FIFO queue and run after the current Turn.`,"lark.ingressSteering":`Steering`,"lark.ingressSteeringDescription":`Deliver to the active Turn and reject safely when no exact active Turn exists.`,"lark.loading":`Loading Lark configuration…`,"lark.management":`Lark management`,"lark.openEventSettings":`Open Feishu event settings`,"lark.mentions":`Mentions`,"lark.mentionsOnly":`Mentions only`,"lark.needsMessagePermissions":`Needs message permissions`,"lark.needsSetup":`Needs setup`,"lark.newApp":`New Lark App`,"lark.noAgentConfigured":`No Agent configured`,"lark.noConnections":`No matching connections.`,"lark.noProfiles":`No lark-cli App profiles are available yet.`,"lark.profileName":`Profile name`,"lark.profileValidation":`Profile can contain only letters, numbers, periods, underscores, and hyphens.`,"lark.processing":`Processing`,"lark.region":`Region`,"lark.registerAnother":`+ Register another Lark App — Create through Feishu`,"lark.reopenFeishu":`Reopen Feishu`,"lark.settingsConfigure":`Configure {goal}`,"lark.settingsDisconnect":`Disconnect {goal}`,"lark.replyMode":`Reply mode`,"lark.replyModeDescription":`Replies are limited to the source Topic to prevent cross-group or cross-Goal delivery.`,"lark.reusableApps":`{count} reusable Apps`,"lark.reusableWorkspaceApp":`Reusable workspace App`,"lark.routesUnverified":`{count} Lark routes pending verification`,"lark.saveConnection":`Save connection`,"lark.searchConnections":`Search Lark connections`,"lark.searchPlaceholder":`Search Apps, groups, Goals, or topics`,"lark.setupCopy":`LoopX opens the official Feishu creation page through lark-cli. App credentials stay in the system Keychain; LoopX stores only the profile reference.`,"lark.someoneMentions":`Someone mentions the Agent`,"lark.targetAgent":`Target Agent`,"lark.targetAgentDescription":`Choose a registered Agent in this Goal. This connection delivers to one Agent; it does not broadcast or grant permissions. Steering and Queuing require that Agent's exact active Session.`,"lark.agentUnavailable":`{agent} · no longer available`,"lark.selectRegisteredAgent":`Select an available registered Agent before connecting. The previous Agent will not be replaced automatically.`,"lark.topicPreview":`Topic preview`,"lark.topicReply":`Topic reply`,"lark.trigger":`Trigger`,"lark.waitingFeishu":`Waiting for Feishu`,"lark.waitingFeishuDescription":`Complete Feishu authorization in the new window. This page updates automatically when it is ready.`,"lark.waitingLink":`Generating the official Feishu creation link…`,"lark.error.appCreate":`Lark App creation failed`,"lark.error.appRequired":`Select a Lark App profile.`,"lark.error.bind":`Connection failed`,"lark.error.bindPreview":`Connection preview failed`,"lark.error.configuration":`Could not load Lark configuration`,"lark.error.groupLookup":`Could not read groups joined by this bot. Check the bot status and try again.`,"lark.error.groupLoad":`Could not load group chats`,"lark.error.invalidApp":`The Lark App profile is unavailable or has not completed authorization.`,"lark.error.messagePermissions":`This App lacks the bot permissions required for automatic replies. Enable im:message.group_at_msg:readonly and im:message:send_as_bot, publish a new version, then refresh.`,"lark.error.provider":`The Feishu API call failed without a verified receipt. Try again later.`,"lark.error.setupPoll":`Could not read creation status`,"lark.error.setupStart":`Could not start Lark App creation`,"lark.error.cliExecutable":`The configured lark-cli was found but cannot run. Check the installation or launch arguments.`,"lark.error.cliMissing":`lark-cli was not found. Install lark-cli and restart LoopX.`,"lark.error.cliStart":`lark-cli failed to start. Check the installation and restart LoopX.`,"lark.error.disconnect":`Disconnect failed`,"notifications.autoNotify":`Send automatically when your confirmation is required`,"notifications.bind":`Bind notification group`,"notifications.bindConfirm":`Bind “{goal}” to “{target}”. LoopX will verify that the bot is in the group and send a confirmation message.`,"notifications.bindFailed":`Binding failed`,"notifications.bound":`Bound`,"notifications.confirmBind":`Confirm binding`,"notifications.description":`Send Goal changes that need your confirmation to a Feishu group. Bindings and automatic delivery use the existing channel.`,"notifications.disabled":`Disabled`,"notifications.group":`Notification group: {target}`,"notifications.loadFailed":`Could not load notification groups`,"notifications.noTargets":`No notification groups are available. Group delivery uses a private bot identity; configure one from the terminal first:`,"notifications.notBound":`Not bound`,"notifications.recent":`Latest {time}`,"notifications.sentCount":`{count} sent`,"notifications.settings":`Goal notification bindings`,"notifications.setupFailed":`Could not update settings`,"notifications.title":`Feishu group notifications`,"proposal.field.agentId":`Agent`,"proposal.field.cadence":`Frequency`,"proposal.field.completionCriteria":`Completion criteria`,"proposal.field.executionBoundary":`Execution boundary`,"proposal.field.goalId":`Goal ID`,"proposal.field.heartbeat":`Heartbeat`,"proposal.field.initialTodos":`Initial tasks`,"proposal.field.objective":`Objective`,"proposal.field.operation":`Operation`,"proposal.field.operationState":`Operation state`,"proposal.field.resultDelivery":`Result delivery`,"proposal.field.confirmationBoundary":`Confirmation boundary`,"proposal.field.expiresAt":`Expires at`,"proposal.field.permission":`Permission`,"proposal.field.reason":`Reason`,"proposal.field.stopCondition":`Stop condition`,"proposal.field.target":`Check target`,"proposal.field.timezone":`Timezone`,"proposal.field.title":`Title`,"proposal.field.workspace":`Execution workspace`,"actionReview.targetChanged":`The preview target does not match the requested Goal and operation. Generate a new preview.`,"actionReview.ready_stop":`Pausing is reversible. This validated preview can apply directly; completion still requires verified readback.`,"actionReview.resume_review":`Review before restoring automatic scheduling. Quota, gates and Todo constraints still apply.`,"actionReview.delete_review":`Review removal of this stopped Goal from the registries. Project files and history are preserved.`,"actionReview.action_review":`Review the target and impact before applying this proposal.`,"actionReview.protected_action":`This action needs explicit review. Confirmation cannot replace required authority.`,"actionReview.unknown_permission":`The permission classification is not recognized. Recheck the proposal before continuing.`,"actionReview.unknown_action":`This lifecycle operation is not recognized. Recheck the proposal before continuing.`,"actionReview.incomplete_proposal":`The preview is missing validation or an available apply transition. Generate a new preview.`,"actionReview.authority_gate":`A gate prevents execution. Resolve its requirements, then recheck the proposal.`,"actionReview.stale_proposal":`The source state changed. Generate a new preview; the previous decision no longer applies.`,"actionReview.apply_pending":`Execution is in progress. Wait for its result before retrying.`,"actionReview.readback_verified":`The action completed and its resulting state was verified.`,"actionReview.readback_unverified":`The action returned without verified readback. Completion is not confirmed; recheck the state.`,"actionReview.operation_group_confirmation":`This exact request can only be confirmed on its original card in the bound Feishu group. The Dashboard does not expose a local execution control.`,"actionReview.operation_result_delivery_pending":`The operation outcome was recorded, but the original group result card has not passed readback verification yet.`,"actionReview.apply_failed":`Execution did not complete. Check the failure and regenerate the preview before retrying.`,"actionReview.inactive_proposal":`This proposal is no longer ready to execute. Recheck it before continuing.`,"proposal.gate.default":`Host confirmation required`,"proposal.impact.default":`After confirmation, the canonical LoopX service will write the state change.`,"proposal.impact.goalCreate":`After confirmation, LoopX will create the Goal and its initial Todo, then let the selected Agent start the first run.`,"proposal.impact.lifecycleDelete":`After confirmation, this stopped Goal is removed from the source and global registries. Project files, history state, and backups are preserved.`,"proposal.impact.lifecycleResume":`After confirmation, the Goal becomes eligible for automatic scheduling and returns to Active Goals. Actual execution still follows quota, Gate, and Todo constraints.`,"proposal.impact.lifecycleStop":`After confirmation, automatic progress stops and the Goal moves to the collapsed Stopped list. History, Todos, and evidence remain available for resuming.`,"proposal.impact.protected":`This action must be completed through the protected LoopX write service.`,"proposal.impact.operation":`The exact terms are read-only here. Confirm or reject the same immutable request in the bound Feishu group; confirmation consumes one canonical claim.`,"proposal.primary.apply":`Confirm and apply`,"proposal.primary.goalCreate":`Create Goal and start first run`,"proposal.primary.lifecycleDelete":`Delete Goal`,"proposal.primary.lifecycleResume":`Resume Goal`,"proposal.primary.lifecycleStop":`Stop Goal`,"proposal.primary.todoStart":`Create task and start execution`,"proposal.primary.operationGroup":`Confirm in Feishu group`,"proposal.primary.operationResultPending":`Result card delivery pending`,"proposal.primary.operationResultVerified":`Verified result`,"proposal.resultDelivery.verified":`Verified in the original group card`,"proposal.resultDelivery.pending":`Pending verified return to the original group card`,"proposal.summary.goalCreate":`Create Goal: {title}`,"proposal.summary.heartbeat":`Set a Heartbeat for the current Goal`,"proposal.summary.lifecycleDelete":`Delete Goal: {title}`,"proposal.summary.lifecycleResume":`Resume Goal: {title}`,"proposal.summary.lifecycleStop":`Stop Goal: {title}`,"proposal.summary.monitor":`Create a scheduled check for the current Goal: {target}`,"proposal.workspace.current":`Current local workspace (no Repository bound)`,"proposal.workspace.named":`{workspace} (execution environment only; does not bind a repository)`,"proposal.workspaceGate.agentImpact":`Bind an Agent identity, then recheck the original action. No Goal has been written.`,"proposal.workspaceGate.agentTitle":`Bind an Agent first`,"proposal.workspaceGate.defaultSummary":`Select the Goal workspace.`,"proposal.workspaceGate.selectionImpact":`After selecting a workspace, LoopX will show the confirmation preview again. The selection itself does not write state.`,"proposal.workspaceGate.selectionTitle":`Select Goal workspace`,"projection.agentAdvancingGoal":`Agent is advancing the current Goal`,"projection.agentIdle":`Nothing needs your attention`,"projection.agentNeedsDecision":`Agent is waiting for your decision`,"projection.agentPreparingNextStep":`Agent is preparing the next step`,"projection.agentStopped":`Stopped by you; history, Todos, and evidence are preserved`,"projection.agentWaitingExternal":`Waiting for an external condition`,"projection.confirmAgentDecision":`Confirm the permission or decision the Agent needs next`,"projection.events24h":`{count} events in the last 24 hours`,"projection.firstReadOnlyAdapterCheck":`Run the first read-only adapter check and save progress`,"projection.goalVerified":`Goal state, Todos, and registration information verified`,"projection.latestRun":`Latest run`,"projection.latestValidation":`Latest validation`,"projection.nextUpdatePending":`Waiting for LoopX to update the next step`,"projection.publicSafeProjection":`Public-safe status projection`,"projection.refreshState":`Refresh LoopX status and confirm the current progress is still valid`,"projection.runEvidenceAvailable":`Run evidence is available`,"projection.runRecorded":`The latest LoopX run is recorded`,"projection.statusRefreshNeeded":`LoopX status needs to be refreshed`,"projection.todoStatusUpdated":`Todo status updated; confirming the next step`,"projection.validationRecorded":`The latest validation is recorded`,"runs.completed":`Completed`,"runs.failed":`Needs review`,"runs.interrupted":`Interrupted`,"runs.queued":`Scheduled`,"runs.ready":`Ready`,"runs.resumeFailed":`Recovery failed`,"runs.running":`Running`,"runs.unknown":`Unknown`,"runs.waiting":`Waiting`,"schedule.active":`Running`,"schedule.heartbeat":`Goal Heartbeat`,"schedule.monitor":`Scheduled & continuous task`,"schedule.paused":`Paused`,"schedule.summary":`Continuously checked under LoopX scheduling constraints`,"schedule.defaultTarget":`Check the current Goal for blockers, progress, and new outputs`,"schedule.unsupportedCalendar":`Scheduled checks do not currently support an exact weekday or time. Use a fixed interval such as “Every 30 minutes,” “Every 2 hours,” or “Daily.” The draft was preserved and no confirmation preview was created.`,"source.add":`Add source`,"source.addConfigured":`Add read-only source`,"source.addMethod":`Source setup method`,"source.addSsh":`Add SSH source`,"source.closeForm":`Close source form`,"source.configured":`Configured SSH`,"source.configuredCount":`Local SSH Hosts · {count}`,"source.configuredGroup":`Configured SSH Hosts · {count} (select to add)`,"source.connected":`Connected`,"source.connecting":`Connecting`,"source.controlPlane":`Control plane source`,"source.copy":`Copy`,"source.copyCommand":`Copy SSH tunnel command`,"source.copyError":`Could not copy the command. Copy it manually below.`,"source.copied":`Copied`,"source.description":`All explicit Hosts are loaded, including Include files. Wildcards are not listed. Run the command first; LoopX never reads SSH keys or configuration details.`,"source.host":`Local SSH Host`,"source.hostEmpty":`No explicit SSH Hosts are available in ~/.ssh/config.`,"source.hostLoadError":`Could not read local SSH Hosts.`,"source.hostPlaceholder":`Enter or search for a Host`,"source.invalid":`The SSH source settings are invalid.`,"source.loadingHosts":`Loading…`,"source.localInteractive":`Local interactive`,"source.localPort":`Local port`,"source.manual":`Manual URL`,"source.manualDescription":`Remote sources always remain read-only projections and never inherit local write permissions.`,"source.name":`Name`,"source.namePlaceholder":`Remote development machine`,"source.notAvailable":`Unavailable`,"source.readOnly":`SSH tunnel · read only`,"source.readOnlyNoticeDescription":`You can view Goals, Tasks, evidence, and run status. Writes, guidance, and Agent sessions remain on the source host.`,"source.readOnlyNoticeTitle":`Remote read-only projection`,"source.readOnlyWriteError":`Remote SSH tunnel sources are read-only projections and cannot perform control-plane writes.`,"source.refreshHosts":`Reload SSH Hosts`,"source.remove":`Remove source {source}`,"source.removeCurrent":`Remove current source`,"source.select":`Select control plane source`,"source.selectHost":`Select a configured SSH Host.`,"source.statusUrl":`Local forwarded URL`,"source.tunnelCommandPending":`Select a Host to generate the tunnel command`,"machine.absent":`Not configured`,"machine.action.create":`Create machine policy`,"machine.action.delete":`Remove machine policy`,"machine.action.unchanged":`No write required`,"machine.action.update":`Update machine policy`,"machine.applied":`Machine policy applied and read back successfully.`,"machine.applyError":`Machine policy could not be applied.`,"machine.applyPreview":`Apply reviewed preview`,"machine.changedNamespaces":`Changed namespaces`,"machine.capabilityCatalog":`Machine capability catalog`,"machine.capabilityEmpty":`No machine-configurable capabilities are registered.`,"machine.configured":`Configured`,"machine.confirmRollback":`Confirm rollback`,"machine.currentRevision":`Current revision`,"machine.currentValue":`Current machine value`,"machine.description":`Browse the same capability catalog as Goal settings. Configure supported machine defaults here; Goal-only capabilities are labeled explicitly.`,"capabilities.rawJson":`Advanced: raw JSON`,"machine.goalOnly":`This capability currently supports Goal configuration only. Open a Goal’s capability settings to configure it; no machine-wide default is applied.`,"machine.desiredRevision":`Desired revision`,"machine.editorUnavailable":`No editor is installed for this namespace`,"machine.editorUnavailableDescription":`The namespace remains visible in the registry. Install or upgrade its Dashboard editor before changing it.`,"machine.editorMode":`Editor mode`,"machine.liveDefault":`Live default; Goal override wins`,"machine.liveDefaultDescription":`Goals without an explicit override read the current machine policy at the capability’s next decision point. Changes and removal affect those existing Goals immediately; an explicit Goal override stays pinned.`,"machine.genericNamespaceDescription":`Edit this registered namespace as JSON. LoopX validates it with the capability-owned schema before previewing any write.`,"machine.jsonConfiguration":`Namespace configuration (JSON)`,"machine.jsonConfigurationHelp":`Only this namespace is updated. Other machine configuration is preserved, and Apply remains locked to the reviewed preview revision.`,"machine.jsonEditor":`JSON`,"machine.editJson":`Edit JSON`,"capabilities.jsonConfiguration":`Goal configuration (JSON)`,"capabilities.jsonHelp":`Edit registered fields for this Goal. Changes require a new preview before applying.`,"capabilities.jsonInvalid":`Enter a valid JSON object using only registered editable fields.`,"machine.backToForm":`Back to form`,"machine.jsonInvalid":`Enter one valid JSON object before previewing changes.`,"machine.loadError":`Machine configuration could not be loaded.`,"machine.machinePolicy":`Machine policy`,"machine.namespaceCount":`Registered namespaces`,"machine.namespaces":`Configuration namespaces`,"machine.periodicReport":`Periodic reports`,"machine.periodicReportDescription":`Default report policy for every Goal without an explicit override. Goal scheduling and delivery consume the effective configuration.`,"machine.periodicReportActivation":`Enabled means automatic delivery at validated stage boundaries`,"machine.periodicReportActivationDescription":`This is not a weekly timer. When LoopX validates a Goal stage completion, an Agent prepares and freezes the report, then automatically delivers it through the configured Goal Channel. The enabled subscription is standing delivery authority; failures and route drift stop closed for repair.`,"machine.changeQualityActivation":`Qualification is a quality gate, not new authority`,"machine.changeQualityActivationDescription":`Goals that inherit this policy qualify their exact final diff. safe_fix allows at most one bounded fix pass inside existing write authority; this setting never grants file, permission, or merge authority.`,"machine.replanCadenceActivation":`Review cadence changes timing, not execution authority`,"machine.replanCadenceActivationDescription":`Goals without an explicit override read this threshold before the next review decision. It does not create Turns, spend quota, or grant authority.`,"machine.preview":`Review exact machine change`,"machine.previewChanges":`Preview changes`,"machine.previewError":`A machine-policy preview could not be created.`,"machine.previewLocked":`Apply is locked to this exact revision. If machine state changes, LoopX requires a new preview.`,"machine.previewRollback":`Preview rollback`,"machine.previewRemoval":`Preview removal`,"machine.profilePreset":`Profile preset`,"machine.profilePresetHelp":`A capability-owned preset, such as weekly-progress.`,"machine.registry":`Typed registry`,"machine.requiredFields":`Enable requires a profile preset, Goal Channel route, and valid timezone.`,"machine.revision":`Machine revision`,"machine.revisionLockedReady":`All changes require a preview and apply only while that exact machine revision remains current.`,"machine.rollbackAvailable":`Rollback is available for the last apply`,"machine.rollbackDescription":`Preview the stored prior revision before restoring it.`,"machine.rollbackError":`The rollback could not be completed.`,"machine.rollbackPreviewDescription":`The prior revision is ready to restore. Confirm to apply this rollback.`,"machine.rolledBack":`The prior machine policy was restored and verified.`,"machine.removed":`Machine policy removed and the resulting configuration read back successfully.`,"machine.routeRef":`Goal Channel route`,"machine.routeRefHelp":`Use a public route alias; credentials and provider identifiers never enter this form.`,"machine.timezone":`Timezone`,"machine.timezoneHelp":`Use an IANA timezone, for example Asia/Shanghai.`,"machine.title":`Machine configuration`,"machine.unchanged":`Machine policy already matches this preview; nothing was written.`,"machine.visualEditor":`Guided`,"capabilities.atomicOverride":`Goal override is atomic`,"capabilities.atomicOverrideDescription":`A complete Goal value wins over the machine default. LoopX never mixes individual fields across scopes.`,"capabilities.applyFailed":`Goal capability changes were not applied.`,"capabilities.applyPreview":`Apply preview`,"capabilities.catalog":`Goal capability catalog`,"capabilities.chooseGoal":`Choose a Goal before inspecting its capabilities.`,"capabilities.defaultValue":`Declared default`,"capabilities.description":`Inspect the capabilities available to this Goal and the exact scope of each setting.`,"capabilities.editorPrepared":`Typed editor contract available`,"capabilities.effectiveSource":`Effective source`,"capabilities.empty":`No capability descriptors are available for this Goal.`,"capabilities.fields":`Registered fields`,"capabilities.goalPolicy":`Goal capability policy`,"capabilities.goalScope":`Goal`,"capabilities.goalValue":`Current Goal value`,"capabilities.loadFailed":`Could not load Goal capabilities`,"capabilities.loading":`Loading Goal capabilities…`,"capabilities.machineOnly":`This capability is configured only at machine scope.`,"capabilities.machineValue":`Live machine default`,"capabilities.machineScope":`Machine`,"capabilities.previewOnly":`Inspection is live. Goal writes remain unavailable until the revision-locked preview and apply path is connected.`,"capabilities.preview":`Revision-locked preview`,"capabilities.previewChanges":`Preview changes`,"capabilities.restoreInheritance":`Restore machine-default inheritance`,"capabilities.previewFailed":`Could not preview Goal capability changes.`,"capabilities.previewLocked":`Apply will re-check this exact plan revision and reject stale changes.`,"capabilities.partialWrite":`Goal value saved; shared projection needs reconciliation`,"capabilities.partialWriteDescription":`The source Goal configuration was written and read back. Its shared runtime projection did not synchronize, so do not submit the change again.`,"capabilities.refreshSource":`Refresh source value`,"capabilities.readOnly":`Read-only capability`,"capabilities.revisionLockedReady":`Changes require a preview and are applied only when its exact revision is still current.`,"capabilities.retry":`Retry`,"capabilities.source.capability_default":`Capability default`,"capabilities.source.goal_override":`Goal override`,"capabilities.source.machine_default":`Live machine default`,"capabilities.source.not_configured":`Not configured`,"capabilities.title":`Goal capabilities`,"settings.close":`Close settings`,"settings.appearance":`Appearance`,"settings.appearanceDescription":`Manage workspace display preferences in this browser.`,"settings.appearanceTabDescription":`Theme and display preferences`,"settings.capabilitiesTabDescription":`Capability overrides for this Goal`,"settings.back":`Back to workspace`,"settings.categories":`Settings categories`,"settings.description":`Manage workspace preferences and integrations.`,"settings.eyebrow":`Workspace preferences`,"settings.general":`General`,"settings.goalConnections":`Goal connections`,"settings.language":`Language`,"settings.languageDescription":`Choose the language used by the LoopX desktop workspace.`,"settings.languageEnglishDescription":`Use English for navigation, settings, and workspace controls.`,"settings.languageEnglish":`English`,"settings.languageSimplifiedChineseDescription":`Use Simplified Chinese for navigation, settings, and workspace controls.`,"settings.languageSimplifiedChinese":`Simplified Chinese`,"settings.languageStoredLocally":`This preference is stored only on this device.`,"settings.languageTabDescription":`Interface language for this device`,"settings.larkTabDescription":`Apps, group chats, and Goal Topic connections`,"settings.machineTabDescription":`Typed defaults shared by capabilities on this machine`,"settings.notifications":`Notifications`,"settings.open":`Settings`,"settings.themeDefault":`Paper`,"settings.themeDefaultDescription":`Calm and lightweight for long-running work.`,"settings.themeDescription":`Choose the workspace visual style. This preference is stored in the current browser.`,"settings.themeHighContrast":`High contrast`,"settings.themeHighContrastDescription":`Stronger borders and more prominent state blocks.`,"settings.themeLoopx":`LoopX standard`,"settings.themeLoopxDescription":`Precise monochrome surfaces, Geist type, and quiet hairline structure.`,"settings.title":`Settings`,"settings.workspaceDisplay":`Workspace display`,"settings.workspaceTheme":`Workspace theme`,"session.closeRecord":`Exit run record`,"session.details":`Session details`,"session.record":`Execution Session · Run record`,"session.recordDescription":`The timeline now shows messages and Turn records from this Session.`,"sidebar.createGoal":`Create Goal`,"sidebar.delete":`Delete`,"sidebar.deleteGoal":`Delete Goal`,"sidebar.manager":`LoopX Manager`,"sidebar.notifications":`Settings`,"sidebar.owner":`Personal workspace`,"sidebar.product":`Personal Agent workspace`,"sidebar.resume":`Resume`,"sidebar.resumeGoal":`Resume Goal`,"sidebar.stop":`Stop`,"tasks.historyLoading":`Loading history…`,"tasks.historyError":`History could not be loaded.`,"tasks.historyExpired":`History snapshot expired. Reload to continue.`,"tasks.historyRetry":`Reload`,"tasks.historyEnd":`End of completed history`,"tasks.historyMore":`Load more`,"tasks.historyLocalOnly":`Open this machine’s Dashboard to browse full history.`,"sidebar.sortGoals":`Reorder Goals`,"sidebar.dragGoal":`Drag to reorder, or use Reorder Goals`,"sidebar.moveUp":`Move {goal} up`,"sidebar.moveDown":`Move {goal} down`,"sidebar.goalMoved":`{goal} moved to position {position}`,"sidebar.orderNotSaved":`Order changed for this visit; browser storage is unavailable.`,"sidebar.stopGoal":`Stop Goal`,"sidebar.stopped":`Stopped`,"sidebar.stoppedLoading":`Loading stopped Goals`,"sidebar.stoppedLoadFailed":`Stopped Goals could not be loaded. Active Goals remain available.`,"sidebar.retryStopped":`Retry`,"state.completed":`Completed`,"state.needsRepair":`Needs repair`,"state.needsYou":`Needs you`,"state.quiet":`Quiet`,"state.running":`Running`,"state.stopped":`Stopped`,"state.waiting":`Waiting`,"tasks.blocked":`Blocked`,"tasks.agentLane":`Work Agent`,"tasks.agentLaneDescription":`Filter this Goal's projected work lanes`,"tasks.agentLaneFilter":`Filter by work Agent`,"tasks.allAgentLanes":`All Agents ({count})`,"tasks.chatAgentReplied":`Agent replied`,"tasks.chatPending":`Sent to Agent`,"tasks.chatPendingDescription":`Processing. Tasks update only after a task operation is confirmed.`,"tasks.chatRecent":`Recent conversation`,"tasks.chatUnchangedDescription":`This conversation did not directly change Tasks. Convert the reply to a Task draft and confirm it when execution is needed.`,"tasks.chatViewReply":`View reply`,"tasks.convertToTask":`Convert to Task`,"tasks.completed":`Completed`,"runs.discoveryPartial":`Some execution details are unavailable. Reconnecting; task summaries are not live execution status.`,"runs.discoveryOffline":`Execution service unavailable. Reconnecting; retained task summaries may be stale.`,"files.openConversation":`Go to conversation`,"files.exportSummary":`Export summary`,"tasks.viewDescription":`Decisions first, then work and recent completions`,"tasks.viewLabel":`Task view`,"tasks.listView":`List`,"tasks.boardView":`Board`,"tasks.completedSummary":`{count} tasks completed. Recent details are projected by the control plane when needed.`,"tasks.emptyCompleted":`No completed tasks yet.`,"tasks.emptyConfirm":`No tasks waiting for confirmation.`,"tasks.emptyRunning":`No queued or running tasks.`,"tasks.emptySchedules":`No scheduled tasks.`,"tasks.emptyGoal":`This Goal has no tasks yet. Describe the next step below and LoopX will show a confirmation preview first.`,"tasks.markComplete":`Mark complete: {name}`,"tasks.moreActions":`More actions: {name}`,"tasks.openExecution":`View execution: {name}`,"tasks.pending":`Pending`,"tasks.pendingAndRunning":`Queued / Running`,"tasks.scheduled":`Scheduled & continuous`,"tasks.sessionError":`Session issue`,"tasks.waiting":`Queued`,"tasks.waitingAge":`Waiting {age}`,"tasks.viewExecution":`View execution`,"tasks.viewResult":`View result`,"time.days":`{count} days`,"time.hours":`{count} hours`,"timeline.emptyGoal":`This Goal has no new activity`,"timeline.emptyGoalDescription":`Ask for progress or send new guidance.`,"timeline.emptyWorkspace":`Your workspace is quiet today`,"timeline.emptyWorkspaceDescription":`Describe a Goal to the LoopX Manager, or ask what deserves attention today.`,"timeline.gateHistory":`{count} historical Gates`,"timeline.pending":`Working…`,"timeline.runCompleted":`{run}: completed`,"timeline.review":`Review`,"timeline.reviewAndConfirm":`Review and confirm`,"timeline.waitingConfirmation":`Needs your confirmation`},"zh-CN":{"acceptance.connected":`已连接`,"acceptance.mapped":`已建立项目映射`,"acceptance.refreshed":`已刷新状态`,"acceptance.inspected":`已检查适配器`,"acceptance.recorded":`已记录执行`,"acceptance.judged":`已记录反馈`,"acceptance.approved":`已记录批准`,"acceptance.ready":`已记录控制器就绪`,"acceptance.attentionSource":`当前状态`,"acceptance.visionSource":`Agent 验收条件`,"acceptance.todoSource":`任务状态`,"acceptance.runSource":`最新执行证据`,"acceptance.title":`验收观察`,"acceptance.unavailable":`验收观测不可用,Goal 是否达成仍未知。`,"acceptance.partial":`当前仅有部分观测。任务完成或缺口列表为空,都不能证明 Goal 已通过验收。`,"acceptance.gaps":`仍需补充的证据`,"acceptance.reasonUnknown":`来源未提供原因`,"acceptance.unknown":`未知`,"acceptance.required":`所需证据或条件`,"acceptance.observed":`观测时间`,"acceptance.noGaps":`现有观测中没有缺口,尚未评估完整验收条件。`,"acceptance.guards":`待处理的门禁决策`,"acceptance.noGuards":`现有观测中没有待处理的门禁决策。`,"acceptance.scope":`决策范围`,"acceptance.next":`当前状态给出的下一步`,"acceptance.historical_progress":`已记录的历史进展`,"acceptance.historical":`历史生命周期记录不授予权限,也不代表通过验收。`,"acceptance.missing":`未获取的来源:`,"acceptance.truncated":`仅展示前 12 条观测。`,"common.actions":`操作`,"common.agent":`Agent`,"common.allMessages":`所有消息`,"common.cancel":`取消`,"common.close":`关闭`,"common.closeActionReceipt":`关闭操作回执`,"common.confirm":`确认`,"common.export":`导出`,"common.failed":`失败`,"common.goal":`Goal`,"common.loading":`加载中…`,"common.none":`无`,"common.off":`关闭`,"common.on":`开启`,"common.open":`打开`,"common.owner":`Owner`,"common.readOnly":`只读`,"common.recently":`刚刚`,"common.status":`状态`,"common.task":`Task`,"common.you":`你`,"common.waiting":`等待中`,"composer.addImage":`添加图片`,"composer.agentProgress":`向 Agent 获取进度报告`,"composer.agentProgressPrompt":`请给我一份当前 Goal 的进度报告:已完成、执行中、阻塞和下一步。`,"composer.attachImageHint":`选择、粘贴或拖入图片`,"composer.clarifyDefer":`暂缓 Todo 需要可自动判断的恢复条件。请补充 todo_done:、pr_merged:[owner/repo]#、capacity_available: 或 resume_at:<带时区 RFC3339 时间>。`,"composer.clarifySingleAction":`这句话包含多个可能修改状态的操作。请一次描述一项操作,我会逐项展示确认预览。`,"composer.createGoal":`创建新 Goal`,"composer.createGoalDraft":`Goal 草稿`,"composer.createGoalDraftDescription":`补充内容后发送,LoopX 会先展示待确认操作。`,"composer.createGoalDraftLead":`我想创建一个长期 Goal:`,"composer.createGoalTemplate":`我想创建一个长期 Goal: +Notification: Only notify me when needed`,"composer.nextAction":`Ask what’s next`,"composer.nextActionPrompt":`What should I do next?`,"composer.prepareDraft":`Insert a draft and review before sending`,"composer.send":`Send`,"composer.sendMessage":`Send a message to LoopX`,"composer.sendMessageHint":`Send message`,"composer.sentImageAlt":`Remove image {name}`,"conversation.agentPending":`Working…`,"conversation.close":`Close conversation receipt`,"conversation.convertHint":`Turn the Agent’s latest reply into a Task draft`,"conversation.full":`View full conversation`,"conversation.receipt":`Conversation receipt`,"conversation.replying":`Replying`,"conversation.title":`Manager conversation`,"conversation.toTask":`Convert to Task`,"digest.away":`Runs since your previous visit`,"digest.completed":`new completions`,"digest.failed":`new failed/interrupted runs`,"digest.needsYou":`currently need confirmation`,"feedback.applying":`Running: {title}`,"feedback.cancelFailed":`Cancel failed: {error}`,"feedback.completed":`Completed: {title}`,"feedback.executionFailed":`Execution failed: {error}`,"feedback.gateRequired":`Your confirmation is required: {summary}`,"feedback.notCompleted":`Not completed: {status}`,"feedback.goalRefreshFailed":`The Goal opened, but its latest state could not be refreshed. Use Refresh to try again.`,"feedback.preparingPreview":`Preparing confirmation preview: {title}`,"feedback.previewFailed":`Could not prepare the confirmation preview: {error}`,"feedback.sendFailed":`Send failed: {error}`,"feedback.sendGenericError":`Could not send the message. Try again later.`,"feedback.stale":`State changed, so nothing was applied. Generate a new confirmation preview.`,"feedback.taskDraftCreated":`Created a Task draft from the reply. Edit and send it to review the confirmation preview.`,"goal.defaultTitle":`New personal Goal`,"goal.initialTodo":`Work toward the completion criteria: {criteria}`,"goal.objectiveBoundary":`Execution boundary: {boundary}`,"goal.objectiveCompletion":`Completion criteria: {criteria}`,"drawer.advancedDiagnostics":`Advanced diagnostics`,"drawer.agentWorking":`Agent is continuing; the record updates automatically.`,"drawer.analysis":`Analyzing`,"drawer.apply":`Confirm and apply`,"drawer.applying":`Applying…`,"drawer.attentionBlocking":`Blocking an Agent`,"drawer.attentionWaiting":`Waiting for your decision`,"drawer.autoNotify":`Human-gate auto notifications`,"drawer.branch":`Branch`,"drawer.closeDetail":`Close details and return to {context}`,"drawer.connected":`Connected`,"drawer.correctionDescription":`The message keeps the current Goal, Todo, and Agent Session context.`,"drawer.correctionLabel":`Guide {agent}`,"drawer.correctionPlaceholder":`For example: focus on permission risks first and do not commit yet…`,"drawer.correctionSend":`Send guidance`,"drawer.correctionTextarea":`Enter guidance for Goal {goal}, Agent {agent}, Run {run}`,"drawer.copyRepository":`Copy repository identity`,"drawer.copyRepositoryDone":`Repository identity copied`,"drawer.copyRepositoryError":`Copy failed. Check browser clipboard permission.`,"drawer.copyRepositorySuccess":`Copied. You can paste it into another tool.`,"drawer.cost":`Cost 24h / 7d`,"drawer.costShort":`Cost`,"drawer.durationShort":`Duration`,"drawer.period24h":`24h`,"drawer.period7d":`7d`,"drawer.tokens":`Tokens 24h / 7d`,"drawer.tokensShort":`tokens`,"drawer.usageNotMeasured":`Not measured`,"drawer.currentGoal":`Current Goal`,"attentionDetail.title":`Request details`,"attentionDetail.request":`What is requested`,"attentionDetail.decision":`Decision requested`,"attentionDetail.unknownRequest":`Not specified; review the source before deciding`,"attentionDetail.open":`Open in current projection`,"attentionDetail.closed":`Closed`,"attentionDetail.deferred":`Deferred`,"attentionDetail.superseded":`Replaced`,"attentionDetail.unknown":`Status not provided`,"attentionDetail.unavailable":`The source has not confirmed this item; refresh before acting`,"attentionDetail.unknownReason":`The source has not provided a reason.`,"attentionDetail.targetTodo":`Linked Todo to unblock`,"attentionDetail.targetAgent":`Agent named by the request`,"attentionDetail.scope":`Declared decision scope`,"attentionDetail.notProvided":`Not provided`,"attentionDetail.replacement":`Replacement Todo`,"attentionDetail.openReplacement":`Open replacement`,"attentionDetail.boundary":`Reading this detail does not resolve a gate or grant authority. Available decisions require a fresh preview.`,"drawer.decisionDefaultEvidence":`No additional public-safe evidence is attached. The next step will still show a Preview first.`,"drawer.decisionDefaultReason":`This decision affects the next step of the current Todo.`,"drawer.decisionDefer":`Decide later`,"drawer.decisionMore":`More decisions`,"drawer.decisionReject":`Reject`,"drawer.decisionReview":`Review impact and decide`,"drawer.dependencies":`Dependencies`,"drawer.detailsAndActions":`Details & actions`,"drawer.duration":`Duration 24h / 7d`,"drawer.evidence":`Evidence`,"drawer.executionHistory":`Execution history`,"drawer.executionRecord":`Run record`,"drawer.executionRecordAndResult":`Execution & result`,"drawer.explainDecision":`Explain this decision`,"drawer.gateApproveHint":`Run one command in the terminal to complete approval:`,"drawer.gateRejectHint":`Replace approve with reject at the end to decline. This notice disappears after the command runs.`,"drawer.gateRequiresHost":`Host confirmation required`,"drawer.gateRequiresHostDescription":`This page cannot approve this protected permission change. Nothing was written by your click.`,"drawer.goalAutoRun":`Automatic runs for this Goal`,"drawer.goalChanges":`Pending changes for this Goal`,"drawer.goalDetails":`Goal details`,"drawer.group":`Group`,"drawer.inspectorFull":`Switch to full screen`,"drawer.inspectorFullView":`Full-screen view`,"drawer.inspectorHalf":`Switch to half screen`,"drawer.inspectorHalfView":`Half-screen view`,"drawer.lastNotification":`Latest notification`,"drawer.larkConfigure":`Configure Lark connection`,"drawer.larkConnect":`Connect Lark App`,"drawer.larkConnection":`Lark connection`,"drawer.larkNotConfigured":`Not configured`,"drawer.larkNotConfiguredDescription":`After setup, LoopX sends a Feishu notification when this Goal needs your confirmation.`,"drawer.managerChanges":`Pending Manager changes`,"drawer.moreActions":`More actions`,"drawer.moreRunActions":`More run actions`,"drawer.nextTransition":`Next transition`,"drawer.noExecutionHistory":`No execution history yet.`,"drawer.noRun":`Execution Session has not started`,"drawer.noRunDescription":`Run records will appear here after an Agent starts execution.`,"drawer.notAssigned":`Unassigned`,"drawer.notLinked":`Not linked`,"drawer.notSet":`Not set`,"drawer.outputDetails":`Output details`,"drawer.outputRecorded":`This output is recorded on the current Goal.`,"drawer.outputSafePreview":`Public-safe output preview`,"drawer.outputRun":`Run`,"drawer.outputTodo":`Todo`,"drawer.outputs":`Outputs from this run`,"drawer.previewUnavailable":`No public-safe inline preview is available for this output.`,"drawer.priority":`Priority`,"drawer.progress":`Progress`,"drawer.proposalApplied":`Applied. LoopX state will refresh.`,"drawer.proposalApplyFailed":`Apply failed. No changes were written.`,"drawer.proposalApplyFailedHint":`Refresh the Goal state and regenerate. If it still fails, keep this page open and inspect advanced diagnostics.`,"drawer.proposalClose":`Close`,"drawer.proposalDefer":`Later`,"drawer.proposalDeferred":`Deferred. You can apply it later or regenerate it.`,"drawer.proposalEnterGoal":`Open new Goal`,"drawer.proposalExplainer":`After confirmation, LoopX applies this change and shows the write result. Closing or canceling changes nothing.`,"drawer.proposalRecheck":`Recheck against latest state`,"drawer.proposalRegenerate":`Retry with latest state`,"drawer.proposalRejected":`Rejected. This change will not be written.`,"drawer.proposalStale":`Source state changed. Recheck against the latest state.`,"drawer.proposalViewGoal":`View updated Goal`,"drawer.reassign":`Reassign to`,"drawer.reassignSummary":`Reassign: {task}`,"drawer.reason":`Reason`,"drawer.recoveryDescription":`Local history is preserved. Choose a recovery path.`,"drawer.recoveryFailed":`Upstream Session recovery failed`,"drawer.recoveryNewSession":`Start a new Session with context`,"drawer.recoveryRetry":`Retry recovery`,"drawer.repositoryRole":`Execution workspace`,"drawer.repository":`Repository`,"drawer.replyMode":`Reply mode`,"drawer.subagentApplied":`Applied and verified against the shared Goal state.`,"drawer.subagentAppliedRefreshFailed":`Applied and verified. The status view could not refresh; retry the page refresh later.`,"drawer.subagentApplying":`Applying and verifying shared-state readback…`,"drawer.subagentApplyFailed":`Could not apply the sub-agent setting.`,"drawer.subagentChildLimit":`Current limit`,"drawer.subagentConfirmDisable":`Confirm turning off sub-agent execution`,"drawer.subagentConfirmEnable":`Confirm turning on sub-agent execution`,"drawer.subagentCurrentBoundary":`Current task-domain restriction`,"drawer.subagentDescription":`Allows the runtime to create temporary child agents for independent tasks only after Todo, quota, capability, and write-scope gates pass. It does not force parallel work or grant durable authority.`,"drawer.subagentDisable":`Preview turning off sub-agent execution`,"drawer.subagentDisableSummary":`New child-agent execution will be disabled for this Goal. Existing Todo ownership and execution records stay unchanged.`,"drawer.subagentDomainInvalid":`The selected task-domain restriction is invalid.`,"drawer.subagentDomainTodoCount":`{count} matching open Todos`,"drawer.subagentDomains":`Task-domain restriction (optional)`,"drawer.subagentDomainsEmpty":`No open advancement Todo declares task_domain. Leave this empty to keep child execution unrestricted by task domain.`,"drawer.subagentDomainsHint":`Leave every option clear to apply no task-domain filter. Selecting domains admits only matching typed Todos; all other execution gates still apply.`,"drawer.subagentDomainsUnrestricted":`No task-domain restriction`,"drawer.subagentEnable":`Preview turning on sub-agent execution`,"drawer.subagentLabel":`Per-Goal execution boundary`,"drawer.subagentModel":`Child model`,"drawer.subagentEffort":`Child reasoning effort`,"drawer.subagentModelDefault":`Host default`,"drawer.subagentLunaPreset":`Use Luna / max`,"drawer.subagentClearModel":`Clear model preference`,"drawer.subagentModelHint":`Use Preview configuration update to save this preference. It can be saved while execution is off; host support is checked at launch.`,"drawer.subagentModelRequired":`Choose a child model before setting reasoning effort.`,"drawer.subagentMaxChildren":`Maximum child agents`,"drawer.subagentNoChange":`The current Goal already matches this setting; nothing was written.`,"drawer.subagentPending":`Pending confirmation`,"drawer.subagentPreviewBoundary":`Preview configuration update`,"drawer.subagentPreviewFailed":`Could not create the sub-agent setting preview.`,"drawer.subagentPreviewing":`Checking the latest Goal state…`,"drawer.subagentPreviewReady":`Preview locked. Confirm to apply this Goal setting.`,"drawer.subagentPreviewSummary":`Allow up to {count} child agents. Task-domain restriction: {domains}.`,"drawer.subagentRemoteReadOnly":`This source is read only. Open the Goal on its host to change the setting.`,"drawer.subagentTitle":`Adaptive sub-agent execution`,"drawer.remoteDetailsDescription":`SSH sources expose public-safe status only and do not read connection settings from the source host.`,"drawer.remoteDetailsUnavailable":`Remote details are not projected`,"drawer.resumeNo":`No`,"drawer.resumeYes":`Yes`,"drawer.runDetails":`Execution Session`,"drawer.runInterrupt":`Interrupt this run`,"drawer.runLatest":`View latest execution`,"drawer.runNewSession":`Start new Session`,"drawer.runCloseSession":`Close Session`,"drawer.runRecordEmpty":`No run record yet. The Agent has not started this execution. Check waiting conditions or resume the Session under Details & actions.`,"drawer.runRecordProjected":`No step-by-step record is available. LoopX read {completed}/{total} projected steps{outputs}; inspect the Session under Details & actions.`,"drawer.runRecordProjectedOutputs":` and {count} outputs`,"drawer.runRoleAssistant":`Completed`,"drawer.runRoleSystem":`Needs review`,"drawer.runRoleUser":`Task received`,"drawer.runView":`Session views`,"drawer.scheduleAdd":`Add scheduled check`,"drawer.scheduleDefaultNotification":`Notify only when you are needed`,"drawer.scheduleDefaultStop":`Goal completes or owner stops it`,"drawer.scheduleDefaultTarget":`Wake according to this Goal’s LoopX schedule.`,"drawer.scheduleEdit":`Change to every 2 hours`,"drawer.scheduleLast":`Last run`,"drawer.scheduleLocalTimezone":`Local timezone`,"drawer.scheduleNext":`Next run`,"drawer.scheduleNeverRun":`Not run yet`,"drawer.scheduleNotification":`Notification`,"drawer.schedulePause":`Pause`,"drawer.schedulePending":`Waiting for schedule`,"drawer.scheduleResume":`Resume`,"drawer.scheduleRunNow":`Run now`,"drawer.scheduleStop":`Stop {kind}`,"drawer.scheduleStopCondition":`Stop condition`,"drawer.scheduleTimezone":`Timezone`,"drawer.sessionRecoverable":`Resumable`,"drawer.sessionStatus":`Session status`,"drawer.setupHeartbeat":`Set up Heartbeat`,"drawer.taskActions":`Pending Todo actions`,"drawer.taskAdvancement":`Advancement task`,"drawer.taskBlock":`Mark blocked`,"drawer.taskComplete":`Mark complete`,"drawer.taskCompletedNote":`This task is retained as a read-only record.`,"drawer.taskCompletedTitle":`Task completed`,"drawer.taskDefer":`Defer`,"drawer.taskDeferCondition":`Todo defer resume condition`,"drawer.taskDeferInvalid":`Unsupported condition format; use one of the deterministic conditions below.`,"drawer.taskDeferPlaceholder":`For example, resume_at:2026-09-14T09:00:00+08:00`,"drawer.taskDeferReview":`Review defer`,"drawer.taskDeferSupported":`Supports todo_done, pr_merged, capacity_available, and timezone-aware resume_at conditions.`,"drawer.taskDeferUntil":`Defer until`,"drawer.taskDetails":`Todo details`,"drawer.taskInfo":`Task information`,"drawer.taskManage":`Manage task`,"drawer.taskNextCompleted":`Create a follow-up task`,"drawer.taskNextOpen":`Advance or update status`,"drawer.taskOrdinary":`Task`,"drawer.taskStatusBlocked":`Blocked`,"drawer.taskStatusDeferred":`Deferred`,"drawer.resumeWhen":`Resume condition`,"drawer.resumeState":`Resume state`,"drawer.resumePending":`Waiting for condition`,"drawer.resumeReady":`Ready to resume`,"drawer.resumeReceipt":`Resume receipt`,"drawer.taskNextDeferred":`Wait for the resume condition, then reassess`,"drawer.taskNextResumeReady":`Resume condition met; awaiting lifecycle replan`,"drawer.taskStatusCompleted":`Completed`,"drawer.taskStatusOpen":`Ready`,"drawer.taskSuccessor":`Create follow-up Todo`,"drawer.taskSuccessorNote":`Owner marked this blocked while waiting for more context.`,"drawer.taskSuccessorSummary":`Create follow-up Todo: {task}`,"drawer.taskSuccessorText":`Follow-up work for {task}`,"drawer.taskType":`Task type`,"drawer.topic":`Topic`,"drawer.trigger":`Trigger`,"drawer.titleAttention":`Needs you`,"drawer.titleOutput":`Output details`,"drawer.titleProposalApplied":`Execution result`,"drawer.titleProposalConfirm":`Confirm execution`,"drawer.titleSchedule":`Scheduled check`,"drawer.unconfigured":`Not configured`,"drawer.workspaceCandidates":`Available workspaces`,"files.emptySummary":`Public-safe output`,"files.empty":`No files, outputs, or verified reports yet.`,"files.loadingReports":`Loading verified milestone reports…`,"files.reportDelta":`+{added} added · {changed} changed`,"files.reportAdded":`added`,"files.reportChanged":`changed`,"files.reportGeneration":`Generation`,"files.reportLoadFailed":`Could not load verified reports`,"files.reportPublication":`Publication`,"files.title":`Files & Outputs`,"files.verifiedReport":`Verified milestone report`,"header.agentUnavailable":`Unavailable`,"header.chatRuntime":`Chat`,"header.workAgentCount":`{count} work Agents`,"header.chat":`Chat`,"header.files":`Files`,"header.goalCapabilities":`Capability settings`,"header.goalCapabilitiesDescription":`Manage overrides and inherited machine defaults.`,"header.goalDetails":`Goal details`,"header.goalDetailsDescription":`Review status, usage, repository, notifications, and sessions.`,"header.goalSettings":`Goal settings`,"header.goalSettingsDescription":`Open Goal details or capability settings`,"header.goalNavigation":`Goal navigation`,"header.goalView":`Goal view`,"header.live":`Live`,"header.manager":`LoopX Manager`,"header.managerDescription":`Your personal workspace across Goals`,"header.managerOverview":`Overview`,"header.managerView":`Manager view`,"header.openGoalNavigation":`Open Goal navigation`,"header.readOnlySourceDescription":`{source} is displayed read-only through an SSH tunnel`,"header.refresh":`Refresh status`,"header.refreshDone":`Updated just now`,"header.refreshFailed":`Refresh failed`,"header.refreshing":`Refreshing`,"header.selectAgent":`Select Agent`,"header.selectChatRuntime":`Select chat runtime`,"header.tasks":`Tasks`,"header.themeBrutal":`Switch to brutal theme`,"header.themePaper":`Switch to default theme`,"home.blockingSummary":`{count} are blocking an Agent.`,"home.completedGoals":`Completed Goals`,"home.empty":`Nothing here`,"startup.goalLoading":`Loading status…`,"startup.goalError":`Could not load status`,"startup.progress":`{loaded} of {total} active Goals loaded`,"startup.partial":`Goal states are updating. Counts are incomplete.`,"startup.independent":`Other Goals remain available while this Goal loads.`,"startup.error.timeout":`The request timed out. Retry when the local service is ready.`,"startup.error.network":`The connection was interrupted. Retry to reconnect.`,"startup.error.service":`The Goal status could not be read. Retry later; if the problem continues, check the status source.`,"startup.error.access":`The status source cannot access files or runtime directories required for this Goal. Check the permissions of the account running that source, then retry.`,"startup.error.revision":`The Goal directory changed during loading. Refresh to synchronize.`,"startup.error.scope":`This Goal is no longer available in the selected source. Refresh the directory.`,"startup.error.invalid":`The status response could not be read. Refresh or check for a LoopX update.`,"startup.retry":`Retry`,"startup.retryFailed":`Retry failed Goals`,"startup.failedCount":`{count} Goals could not be loaded. Ready Goals remain available.`,"home.greeting":`Hi, I’m your LoopX Manager`,"home.history":`History`,"home.lane.needsYou":`Needs you`,"home.lane.needsYouDescription":`Waiting for your decision, authorization, or context`,"home.lane.observing":`Observing`,"home.lane.observingDescription":`Monitoring continuously and notifying you when something changes`,"home.lane.running":`Running`,"home.lane.runningDescription":`Agents are making progress and reporting back`,"home.lane.scheduled":`Scheduled`,"home.lane.scheduledDescription":`Queued until its time or prerequisite arrives`,"home.noActivity":`No activity yet`,"home.noFirstActivity":`Waiting for first activity`,"home.noCompletedGoals":`No completed Goals yet`,"home.preservedState":`State is preserved and can be resumed`,"home.stopped":`Stopped`,"home.systemHealth":`System health: {summary}`,"home.taskCount":`{count} Tasks`,"home.todayAt":`Today {time}`,"home.waitingCount":`You have {count} items to handle.`,"home.workspace":`Goal workspace`,"lark.allMessages":`All messages in this topic`,"lark.allTopicMessages":`All topic messages`,"lark.agentIngress":`Agent ingress`,"lark.agentAppPermissions":`Every selected Agent needs a Lark App that is ready for group mentions and replies.`,"lark.agentApps":`Lark App per Agent`,"lark.agentAppsDescription":`The default App is preselected. Assign a different compatible App when an Agent needs its own bot identity.`,"lark.agentAppSelection":`Lark App for {agent}`,"lark.appCreated":`App created`,"lark.appCreateFailed":`Creation failed`,"lark.appLoading":`Loading available Lark Apps…`,"lark.appPermissions":`This App can send connection messages, but lacks the bot permissions required to receive group mentions or reply automatically. Enable im:message.group_at_msg:readonly, im:message.send_as_bot, and the im.message.receive_v1 event, publish a new version, then refresh.`,"lark.appProfile":`Lark App`,"lark.apps":`Lark Apps`,"lark.autoReplyUnavailable":`Auto reply unavailable`,"lark.autoReplyReady":`Auto reply ready`,"lark.bindGoal":`Bind to Goal`,"lark.cancel":`Cancel`,"lark.cardinality":`One Lark App · many Goals · one isolated route per Agent`,"lark.capture":`Capture`,"lark.captureAddressed":`Only messages that mention or reply to the App`,"lark.captureAll":`All messages in this Goal topic`,"lark.captureScope":`Capture scope`,"lark.captureScopeDescription":`Controls which Topic messages enter LoopX without expanding Agent permissions.`,"lark.closeConnection":`Close connection dialog`,"lark.closeCreate":`Close create dialog`,"lark.closeSettings":`Close Lark settings`,"lark.connect":`Connect`,"lark.connectAllAgents":`Connect every registered Agent`,"lark.connectAllAgentsAction":`Connect {count} Agents`,"lark.connectAllAgentsDescription":`Create {count} isolated Agent Topics in one guided action. Send requests inside the matching Topic; each Agent keeps its own route and inbox.`,"lark.connectApp":`Connect Lark App`,"lark.connection":`Connection`,"lark.connections":`Connections`,"lark.configuration":`Lark configuration`,"lark.continueFeishu":`Continue in Feishu`,"lark.createAutomatically":`Create Goal topic automatically`,"lark.createAutomaticallyDescription":`A dedicated, Agent-labelled Topic will be created for every selected Agent.`,"lark.defaultAgentAppDescription":`Used to find the target group and as the default for every selected Agent. Per-Agent choices below override it.`,"lark.description":`Manage reusable Lark Apps and connect group chats to Goals through dedicated topics.`,"lark.editConnection":`Edit Lark Connection`,"lark.goalConnections":`{count} Goal connections`,"lark.goalTopicConnections":`Lark Goal Topic connections`,"lark.groupChat":`Group chat`,"lark.groupEmpty":`This bot has not joined a group that can be connected. Add it to a Feishu group first, then return to refresh or search.`,"lark.groupLoading":`Reading groups joined by this bot…`,"lark.groupSearch":`Search groups joined by this bot`,"lark.historyPermission":`Group-history permission (separate capability)`,"lark.health.eventProcessed":`{events} events processed, {replies} replies sent.`,"lark.health.eventUnverified":`Event subscription needs verification`,"lark.health.eventUnverifiedDetail":`The provider listener is ready, but no event has arrived. Enable im.message.receive_v1 and group mention permissions, publish a new version, then send a new @ mention inside this Agent Topic. Group-level messages fail closed when multiple Agent routes exist.`,"lark.health.ignoredSelf":`The bot’s own message was ignored to prevent duplicate replies.`,"lark.health.invalidRouting":`Invalid routing configuration`,"lark.health.invalidRoutingDetail":`The connection was safely disabled. Select a processing mode again and save.`,"lark.health.lastStatus":`Latest event status: {status}`,"lark.health.listening":`Listening`,"lark.health.messageContextPermission":`Message permission required`,"lark.health.messageContextPermissionDetail":`A message event arrived, but group context could not be read. Publish and authorize group message read access for this App.`,"lark.health.notAddressed":`Latest message did not directly @ the bot`,"lark.health.notAddressedDetail":`Listening is healthy. This connection only responds to direct @ mentions or replies to the bot.`,"lark.health.notStarted":`Listener not started`,"lark.health.notStartedDetail":`Refresh the connection or restart LoopX, then try again.`,"lark.health.processingFailed":`Message processing failed`,"lark.health.processingFailedDetail":`The message event arrived, but Agent processing failed. Review local diagnostics and retry.`,"lark.health.queued":`Queued in the Agent inbox`,"lark.health.queuedDetail":`The message will be processed asynchronously by {agent} without starting a general Chat Session.`,"lark.health.sourceDisconnected":`Event connection disconnected`,"lark.health.sourceDisconnectedDetail":`The event consumer exited unexpectedly. Check that the app profile uses Feishu for Feishu apps or Lark for international Lark, then inspect connection and subscription errors. LoopX is retrying; successful history queries do not prove live delivery.`,"lark.health.retrying":`Retrying listener`,"lark.health.retryingDetail":`Event listening was interrupted and LoopX is retrying automatically.`,"lark.health.routeAmbiguous":`Message matches multiple Goals`,"lark.health.routeAmbiguousDetail":`The same bot and group have multiple full-group capture connections. Use a separate bot for each Agent or keep only one full-group connection.`,"lark.health.routeMismatch":`Message did not match this Goal Topic`,"lark.health.routeMismatchDetail":`The event came from another group or Topic. Reconnect this Goal to the correct group, then send a new @ mention.`,"lark.health.routeUnavailable":`Message cannot be routed to the Goal`,"lark.health.routeUnavailableDetail":`Connection data is incomplete. Reconnect this Goal, then send a new @ mention.`,"lark.health.starting":`Starting`,"lark.health.startingDetail":`LoopX is starting message event listening for this App.`,"lark.health.unavailable":`Auto reply unavailable`,"lark.health.waiting":`Waiting`,"lark.incomingMessages":`Incoming messages`,"lark.ingressAsync":`Async inbox`,"lark.ingressAsyncDescription":`Write to the Agent private inbox for a later explicit drain.`,"lark.editPreservesIdentity":`Saving preserves this App, group and Topic. Old connections upgrade to the Agent inbox by default.`,"lark.conversationKind":`Connection purpose`,"lark.managerConversation":`Manager · live conversation`,"lark.workerConversation":`Worker Agent · background tasks`,"lark.managerConversationDescription":`The built-in manager responds as you chat and delegates long-running work to background Agents. Group and private conversations keep separate histories.`,"lark.ingressLegacy":`Upgrade available`,"lark.ingressLegacyDescription":`Save this connection to upgrade to the Agent inbox. Existing messages remain in the same Topic.`,"lark.ingressQueue":`Queuing`,"lark.ingressQueueDescription":`Enter the same Agent Session's bounded FIFO queue and run after the current Turn.`,"lark.ingressSteering":`Steering`,"lark.ingressSteeringDescription":`Deliver to the active Turn and reject safely when no exact active Turn exists.`,"lark.loading":`Loading Lark configuration…`,"lark.management":`Lark management`,"lark.openEventSettings":`Open Feishu event settings`,"lark.mentions":`Mentions`,"lark.mentionsOnly":`Mentions only`,"lark.needsMessagePermissions":`Needs message permissions`,"lark.needsSetup":`Needs setup`,"lark.newApp":`New Lark App`,"lark.noAgentConfigured":`No Agent configured`,"lark.noConnections":`No matching connections.`,"lark.noProfiles":`No lark-cli App profiles are available yet.`,"lark.profileName":`Profile name`,"lark.profileValidation":`Profile can contain only letters, numbers, periods, underscores, and hyphens.`,"lark.processing":`Processing`,"lark.region":`Region`,"lark.registerAnother":`+ Register another Lark App — Create through Feishu`,"lark.reopenFeishu":`Reopen Feishu`,"lark.settingsConfigure":`Configure {goal}`,"lark.settingsDisconnect":`Disconnect {goal}`,"lark.replyMode":`Reply mode`,"lark.replyModeDescription":`Replies are limited to the source Topic to prevent cross-group or cross-Goal delivery.`,"lark.reusableApps":`{count} reusable Apps`,"lark.reusableWorkspaceApp":`Reusable workspace App`,"lark.routesUnverified":`{count} Lark routes pending verification`,"lark.saveConnection":`Save connection`,"lark.searchConnections":`Search Lark connections`,"lark.searchPlaceholder":`Search Apps, groups, Goals, or topics`,"lark.setupCopy":`LoopX opens the official Feishu creation page through lark-cli. App credentials stay in the system Keychain; LoopX stores only the profile reference.`,"lark.someoneMentions":`Someone mentions the Agent`,"lark.targetAgent":`Target Agent`,"lark.targetAgentDescription":`Choose a registered Agent in this Goal. This connection delivers to one Agent; it does not broadcast or grant permissions. Steering and Queuing require that Agent's exact active Session.`,"lark.agentUnavailable":`{agent} · no longer available`,"lark.selectRegisteredAgent":`Select an available registered Agent before connecting. The previous Agent will not be replaced automatically.`,"lark.topicPreview":`Topic preview`,"lark.topicReply":`Topic reply`,"lark.trigger":`Trigger`,"lark.waitingFeishu":`Waiting for Feishu`,"lark.waitingFeishuDescription":`Complete Feishu authorization in the new window. This page updates automatically when it is ready.`,"lark.waitingLink":`Generating the official Feishu creation link…`,"lark.error.appCreate":`Lark App creation failed`,"lark.error.appRequired":`Select a Lark App profile.`,"lark.error.bind":`Connection failed`,"lark.error.bindPreview":`Connection preview failed`,"lark.error.configuration":`Could not load Lark configuration`,"lark.error.groupLookup":`Could not read groups joined by this bot. Check the bot status and try again.`,"lark.error.groupLoad":`Could not load group chats`,"lark.error.invalidApp":`The Lark App profile is unavailable or has not completed authorization.`,"lark.error.messagePermissions":`This App lacks the bot permissions required for automatic replies. Enable im:message.group_at_msg:readonly and im:message:send_as_bot, publish a new version, then refresh.`,"lark.error.provider":`The Feishu API call failed without a verified receipt. Try again later.`,"lark.error.setupPoll":`Could not read creation status`,"lark.error.setupStart":`Could not start Lark App creation`,"lark.error.cliExecutable":`The configured lark-cli was found but cannot run. Check the installation or launch arguments.`,"lark.error.cliMissing":`lark-cli was not found. Install lark-cli and restart LoopX.`,"lark.error.cliStart":`lark-cli failed to start. Check the installation and restart LoopX.`,"lark.error.disconnect":`Disconnect failed`,"notifications.autoNotify":`Send automatically when your confirmation is required`,"notifications.bind":`Bind notification group`,"notifications.bindConfirm":`Bind “{goal}” to “{target}”. LoopX will verify that the bot is in the group and send a confirmation message.`,"notifications.bindFailed":`Binding failed`,"notifications.bound":`Bound`,"notifications.confirmBind":`Confirm binding`,"notifications.description":`Send Goal changes that need your confirmation to a Feishu group. Bindings and automatic delivery use the existing channel.`,"notifications.disabled":`Disabled`,"notifications.group":`Notification group: {target}`,"notifications.loadFailed":`Could not load notification groups`,"notifications.noTargets":`No notification groups are available. Group delivery uses a private bot identity; configure one from the terminal first:`,"notifications.notBound":`Not bound`,"notifications.recent":`Latest {time}`,"notifications.sentCount":`{count} sent`,"notifications.settings":`Goal notification bindings`,"notifications.setupFailed":`Could not update settings`,"notifications.title":`Feishu group notifications`,"proposal.field.agentId":`Agent`,"proposal.field.cadence":`Frequency`,"proposal.field.completionCriteria":`Completion criteria`,"proposal.field.executionBoundary":`Execution boundary`,"proposal.field.goalId":`Goal ID`,"proposal.field.heartbeat":`Heartbeat`,"proposal.field.initialTodos":`Initial tasks`,"proposal.field.objective":`Objective`,"proposal.field.operation":`Operation`,"proposal.field.operationState":`Operation state`,"proposal.field.resultDelivery":`Result delivery`,"proposal.field.confirmationBoundary":`Confirmation boundary`,"proposal.field.expiresAt":`Expires at`,"proposal.field.permission":`Permission`,"proposal.field.reason":`Reason`,"proposal.field.stopCondition":`Stop condition`,"proposal.field.target":`Check target`,"proposal.field.timezone":`Timezone`,"proposal.field.title":`Title`,"proposal.field.workspace":`Execution workspace`,"actionReview.targetChanged":`The preview target does not match the requested Goal and operation. Generate a new preview.`,"actionReview.ready_stop":`Pausing is reversible. This validated preview can apply directly; completion still requires verified readback.`,"actionReview.resume_review":`Review before restoring automatic scheduling. Quota, gates and Todo constraints still apply.`,"actionReview.delete_review":`Review removal of this stopped Goal from the registries. Project files and history are preserved.`,"actionReview.action_review":`Review the target and impact before applying this proposal.`,"actionReview.protected_action":`This action needs explicit review. Confirmation cannot replace required authority.`,"actionReview.unknown_permission":`The permission classification is not recognized. Recheck the proposal before continuing.`,"actionReview.unknown_action":`This lifecycle operation is not recognized. Recheck the proposal before continuing.`,"actionReview.incomplete_proposal":`The preview is missing validation or an available apply transition. Generate a new preview.`,"actionReview.authority_gate":`A gate prevents execution. Resolve its requirements, then recheck the proposal.`,"actionReview.stale_proposal":`The source state changed. Generate a new preview; the previous decision no longer applies.`,"actionReview.apply_pending":`Execution is in progress. Wait for its result before retrying.`,"actionReview.readback_verified":`The action completed and its resulting state was verified.`,"actionReview.readback_unverified":`The action returned without verified readback. Completion is not confirmed; recheck the state.`,"actionReview.operation_group_confirmation":`This exact request can only be confirmed on its original card in the bound Feishu group. The Dashboard does not expose a local execution control.`,"actionReview.operation_result_delivery_pending":`The operation outcome was recorded, but the original group result card has not passed readback verification yet.`,"actionReview.apply_failed":`Execution did not complete. Check the failure and regenerate the preview before retrying.`,"actionReview.inactive_proposal":`This proposal is no longer ready to execute. Recheck it before continuing.`,"proposal.gate.default":`Host confirmation required`,"proposal.impact.default":`After confirmation, the canonical LoopX service will write the state change.`,"proposal.impact.goalCreate":`After confirmation, LoopX will create the Goal and its initial Todo, then let the selected Agent start the first run.`,"proposal.impact.lifecycleDelete":`After confirmation, this stopped Goal is removed from the source and global registries. Project files, history state, and backups are preserved.`,"proposal.impact.lifecycleResume":`After confirmation, the Goal becomes eligible for automatic scheduling and returns to Active Goals. Actual execution still follows quota, Gate, and Todo constraints.`,"proposal.impact.lifecycleStop":`After confirmation, automatic progress stops and the Goal moves to the collapsed Stopped list. History, Todos, and evidence remain available for resuming.`,"proposal.impact.protected":`This action must be completed through the protected LoopX write service.`,"proposal.impact.operation":`The exact terms are read-only here. Confirm or reject the same immutable request in the bound Feishu group; confirmation consumes one canonical claim.`,"proposal.primary.apply":`Confirm and apply`,"proposal.primary.goalCreate":`Create Goal and start first run`,"proposal.primary.lifecycleDelete":`Delete Goal`,"proposal.primary.lifecycleResume":`Resume Goal`,"proposal.primary.lifecycleStop":`Stop Goal`,"proposal.primary.todoStart":`Create task and start execution`,"proposal.primary.operationGroup":`Confirm in Feishu group`,"proposal.primary.operationResultPending":`Result card delivery pending`,"proposal.primary.operationResultVerified":`Verified result`,"proposal.resultDelivery.verified":`Verified in the original group card`,"proposal.resultDelivery.pending":`Pending verified return to the original group card`,"proposal.summary.goalCreate":`Create Goal: {title}`,"proposal.summary.heartbeat":`Set a Heartbeat for the current Goal`,"proposal.summary.lifecycleDelete":`Delete Goal: {title}`,"proposal.summary.lifecycleResume":`Resume Goal: {title}`,"proposal.summary.lifecycleStop":`Stop Goal: {title}`,"proposal.summary.monitor":`Create a scheduled check for the current Goal: {target}`,"proposal.workspace.current":`Current local workspace (no Repository bound)`,"proposal.workspace.named":`{workspace} (execution environment only; does not bind a repository)`,"proposal.workspaceGate.agentImpact":`Bind an Agent identity, then recheck the original action. No Goal has been written.`,"proposal.workspaceGate.agentTitle":`Bind an Agent first`,"proposal.workspaceGate.defaultSummary":`Select the Goal workspace.`,"proposal.workspaceGate.selectionImpact":`After selecting a workspace, LoopX will show the confirmation preview again. The selection itself does not write state.`,"proposal.workspaceGate.selectionTitle":`Select Goal workspace`,"projection.agentAdvancingGoal":`Agent is advancing the current Goal`,"projection.agentIdle":`Nothing needs your attention`,"projection.agentNeedsDecision":`Agent is waiting for your decision`,"projection.agentPreparingNextStep":`Agent is preparing the next step`,"projection.agentStopped":`Stopped by you; history, Todos, and evidence are preserved`,"projection.agentWaitingExternal":`Waiting for an external condition`,"projection.confirmAgentDecision":`Confirm the permission or decision the Agent needs next`,"projection.events24h":`{count} events in the last 24 hours`,"projection.firstReadOnlyAdapterCheck":`Run the first read-only adapter check and save progress`,"projection.goalVerified":`Goal state, Todos, and registration information verified`,"projection.latestRun":`Latest run`,"projection.latestValidation":`Latest validation`,"projection.nextUpdatePending":`Waiting for LoopX to update the next step`,"projection.publicSafeProjection":`Public-safe status projection`,"projection.refreshState":`Refresh LoopX status and confirm the current progress is still valid`,"projection.runEvidenceAvailable":`Run evidence is available`,"projection.runRecorded":`The latest LoopX run is recorded`,"projection.statusRefreshNeeded":`LoopX status needs to be refreshed`,"projection.todoStatusUpdated":`Todo status updated; confirming the next step`,"projection.validationRecorded":`The latest validation is recorded`,"runs.completed":`Completed`,"runs.failed":`Needs review`,"runs.interrupted":`Interrupted`,"runs.queued":`Scheduled`,"runs.ready":`Ready`,"runs.resumeFailed":`Recovery failed`,"runs.running":`Running`,"runs.unknown":`Unknown`,"runs.waiting":`Waiting`,"schedule.active":`Running`,"schedule.heartbeat":`Goal Heartbeat`,"schedule.monitor":`Scheduled & continuous task`,"schedule.paused":`Paused`,"schedule.summary":`Continuously checked under LoopX scheduling constraints`,"schedule.defaultTarget":`Check the current Goal for blockers, progress, and new outputs`,"schedule.unsupportedCalendar":`Scheduled checks do not currently support an exact weekday or time. Use a fixed interval such as “Every 30 minutes,” “Every 2 hours,” or “Daily.” The draft was preserved and no confirmation preview was created.`,"source.add":`Add source`,"source.addConfigured":`Add read-only source`,"source.addMethod":`Source setup method`,"source.addSsh":`Add SSH source`,"source.closeForm":`Close source form`,"source.configured":`Configured SSH`,"source.configuredCount":`Local SSH Hosts · {count}`,"source.configuredGroup":`Configured SSH Hosts · {count} (select to add)`,"source.connected":`Connected`,"source.connecting":`Connecting`,"source.controlPlane":`Control plane source`,"source.copy":`Copy`,"source.copyCommand":`Copy SSH tunnel command`,"source.copyError":`Could not copy the command. Copy it manually below.`,"source.copied":`Copied`,"source.description":`All explicit Hosts are loaded, including Include files. Wildcards are not listed. Run the command first; LoopX never reads SSH keys or configuration details.`,"source.host":`Local SSH Host`,"source.hostEmpty":`No explicit SSH Hosts are available in ~/.ssh/config.`,"source.hostLoadError":`Could not read local SSH Hosts.`,"source.hostPlaceholder":`Enter or search for a Host`,"source.invalid":`The SSH source settings are invalid.`,"source.loadingHosts":`Loading…`,"source.localInteractive":`Local interactive`,"source.localPort":`Local port`,"source.manual":`Manual URL`,"source.manualDescription":`Remote sources always remain read-only projections and never inherit local write permissions.`,"source.name":`Name`,"source.namePlaceholder":`Remote development machine`,"source.notAvailable":`Unavailable`,"source.readOnly":`SSH tunnel · read only`,"source.readOnlyNoticeDescription":`You can view Goals, Tasks, evidence, and run status. Writes, guidance, and Agent sessions remain on the source host.`,"source.readOnlyNoticeTitle":`Remote read-only projection`,"source.readOnlyWriteError":`Remote SSH tunnel sources are read-only projections and cannot perform control-plane writes.`,"source.refreshHosts":`Reload SSH Hosts`,"source.remove":`Remove source {source}`,"source.removeCurrent":`Remove current source`,"source.select":`Select control plane source`,"source.selectHost":`Select a configured SSH Host.`,"source.statusUrl":`Local forwarded URL`,"source.tunnelCommandPending":`Select a Host to generate the tunnel command`,"machine.absent":`Not configured`,"machine.action.create":`Create machine policy`,"machine.action.delete":`Remove machine policy`,"machine.action.unchanged":`No write required`,"machine.action.update":`Update machine policy`,"machine.applied":`Machine policy applied and read back successfully.`,"machine.applyError":`Machine policy could not be applied.`,"machine.applyPreview":`Apply reviewed preview`,"machine.changedNamespaces":`Changed namespaces`,"machine.capabilityCatalog":`Machine capability catalog`,"machine.capabilityEmpty":`No machine-configurable capabilities are registered.`,"machine.configured":`Configured`,"machine.confirmRollback":`Confirm rollback`,"machine.currentRevision":`Current revision`,"machine.currentValue":`Current machine value`,"machine.description":`Browse the same capability catalog as Goal settings. Configure supported machine defaults here; Goal-only capabilities are labeled explicitly.`,"capabilities.rawJson":`Advanced: raw JSON`,"machine.goalOnly":`This capability currently supports Goal configuration only. Open a Goal’s capability settings to configure it; no machine-wide default is applied.`,"machine.desiredRevision":`Desired revision`,"machine.editorUnavailable":`No editor is installed for this namespace`,"machine.editorUnavailableDescription":`The namespace remains visible in the registry. Install or upgrade its Dashboard editor before changing it.`,"machine.editorMode":`Editor mode`,"machine.liveDefault":`Live default; Goal override wins`,"machine.liveDefaultDescription":`Goals without an explicit override read the current machine policy at the capability’s next decision point. Changes and removal affect those existing Goals immediately; an explicit Goal override stays pinned.`,"machine.genericNamespaceDescription":`Edit this registered namespace as JSON. LoopX validates it with the capability-owned schema before previewing any write.`,"machine.jsonConfiguration":`Namespace configuration (JSON)`,"machine.jsonConfigurationHelp":`Only this namespace is updated. Other machine configuration is preserved, and Apply remains locked to the reviewed preview revision.`,"machine.jsonEditor":`JSON`,"machine.editJson":`Edit JSON`,"capabilities.jsonConfiguration":`Goal configuration (JSON)`,"capabilities.jsonHelp":`Edit registered fields for this Goal. Changes require a new preview before applying.`,"capabilities.jsonInvalid":`Enter a valid JSON object using only registered editable fields.`,"machine.backToForm":`Back to form`,"machine.jsonInvalid":`Enter one valid JSON object before previewing changes.`,"machine.loadError":`Machine configuration could not be loaded.`,"machine.machinePolicy":`Machine policy`,"machine.namespaceCount":`Registered namespaces`,"machine.namespaces":`Configuration namespaces`,"machine.periodicReport":`Periodic reports`,"machine.periodicReportDescription":`Default report policy for every Goal without an explicit override. Goal scheduling and delivery consume the effective configuration.`,"machine.periodicReportActivation":`Enabled means automatic delivery at validated stage boundaries`,"machine.periodicReportActivationDescription":`This is not a weekly timer. When LoopX validates a Goal stage completion, an Agent prepares and freezes the report, then automatically delivers it through the configured Goal Channel. The enabled subscription is standing delivery authority; failures and route drift stop closed for repair.`,"machine.changeQualityActivation":`Qualification is a quality gate, not new authority`,"machine.changeQualityActivationDescription":`Goals that inherit this policy qualify their exact final diff. safe_fix allows at most one bounded fix pass inside existing write authority; this setting never grants file, permission, or merge authority.`,"machine.replanCadenceActivation":`Review cadence changes timing, not execution authority`,"machine.replanCadenceActivationDescription":`Goals without an explicit override read this threshold before the next review decision. It does not create Turns, spend quota, or grant authority.`,"machine.preview":`Review exact machine change`,"machine.previewChanges":`Preview changes`,"machine.previewError":`A machine-policy preview could not be created.`,"machine.previewLocked":`Apply is locked to this exact revision. If machine state changes, LoopX requires a new preview.`,"machine.previewRollback":`Preview rollback`,"machine.previewRemoval":`Preview removal`,"machine.profilePreset":`Profile preset`,"machine.profilePresetHelp":`A capability-owned preset, such as weekly-progress.`,"machine.registry":`Typed registry`,"machine.requiredFields":`Enable requires a profile preset, Goal Channel route, and valid timezone.`,"machine.revision":`Machine revision`,"machine.revisionLockedReady":`All changes require a preview and apply only while that exact machine revision remains current.`,"machine.rollbackAvailable":`Rollback is available for the last apply`,"machine.rollbackDescription":`Preview the stored prior revision before restoring it.`,"machine.rollbackError":`The rollback could not be completed.`,"machine.rollbackPreviewDescription":`The prior revision is ready to restore. Confirm to apply this rollback.`,"machine.rolledBack":`The prior machine policy was restored and verified.`,"machine.removed":`Machine policy removed and the resulting configuration read back successfully.`,"machine.routeRef":`Goal Channel route`,"machine.routeRefHelp":`Use a public route alias; credentials and provider identifiers never enter this form.`,"machine.timezone":`Timezone`,"machine.timezoneHelp":`Use an IANA timezone, for example Asia/Shanghai.`,"machine.title":`Machine configuration`,"machine.unchanged":`Machine policy already matches this preview; nothing was written.`,"machine.visualEditor":`Guided`,"capabilities.atomicOverride":`Goal override is atomic`,"capabilities.atomicOverrideDescription":`A complete Goal value wins over the machine default. LoopX never mixes individual fields across scopes.`,"capabilities.applyFailed":`Goal capability changes were not applied.`,"capabilities.applyPreview":`Apply preview`,"capabilities.catalog":`Goal capability catalog`,"capabilities.chooseGoal":`Choose a Goal before inspecting its capabilities.`,"capabilities.defaultValue":`Declared default`,"capabilities.description":`Inspect the capabilities available to this Goal and the exact scope of each setting.`,"capabilities.editorPrepared":`Typed editor contract available`,"capabilities.effectiveSource":`Effective source`,"capabilities.empty":`No capability descriptors are available for this Goal.`,"capabilities.fields":`Registered fields`,"capabilities.goalPolicy":`Goal capability policy`,"capabilities.goalScope":`Goal`,"capabilities.goalValue":`Current Goal value`,"capabilities.loadFailed":`Could not load Goal capabilities`,"capabilities.loading":`Loading Goal capabilities…`,"capabilities.machineOnly":`This capability is configured only at machine scope.`,"capabilities.machineValue":`Live machine default`,"capabilities.machineScope":`Machine`,"capabilities.previewOnly":`Inspection is live. Goal writes remain unavailable until the revision-locked preview and apply path is connected.`,"capabilities.preview":`Revision-locked preview`,"capabilities.previewChanges":`Preview changes`,"capabilities.restoreInheritance":`Restore machine-default inheritance`,"capabilities.previewFailed":`Could not preview Goal capability changes.`,"capabilities.previewLocked":`Apply will re-check this exact plan revision and reject stale changes.`,"capabilities.partialWrite":`Goal value saved; shared projection needs reconciliation`,"capabilities.partialWriteDescription":`The source Goal configuration was written and read back. Its shared runtime projection did not synchronize, so do not submit the change again.`,"capabilities.refreshSource":`Refresh source value`,"capabilities.readOnly":`Read-only capability`,"capabilities.revisionLockedReady":`Changes require a preview and are applied only when its exact revision is still current.`,"capabilities.retry":`Retry`,"capabilities.source.capability_default":`Capability default`,"capabilities.source.goal_override":`Goal override`,"capabilities.source.machine_default":`Live machine default`,"capabilities.source.not_configured":`Not configured`,"capabilities.title":`Goal capabilities`,"settings.close":`Close settings`,"settings.appearance":`Appearance`,"settings.appearanceDescription":`Manage workspace display preferences in this browser.`,"settings.appearanceTabDescription":`Theme and display preferences`,"settings.capabilitiesTabDescription":`Capability overrides for this Goal`,"settings.back":`Back to workspace`,"settings.categories":`Settings categories`,"settings.description":`Manage workspace preferences and integrations.`,"settings.eyebrow":`Workspace preferences`,"settings.general":`General`,"settings.goalConnections":`Goal connections`,"settings.language":`Language`,"settings.languageDescription":`Choose the language used by the LoopX desktop workspace.`,"settings.languageEnglishDescription":`Use English for navigation, settings, and workspace controls.`,"settings.languageEnglish":`English`,"settings.languageSimplifiedChineseDescription":`Use Simplified Chinese for navigation, settings, and workspace controls.`,"settings.languageSimplifiedChinese":`Simplified Chinese`,"settings.languageStoredLocally":`This preference is stored only on this device.`,"settings.languageTabDescription":`Interface language for this device`,"settings.larkTabDescription":`Apps, group chats, and Goal Topic connections`,"settings.machineTabDescription":`Typed defaults shared by capabilities on this machine`,"settings.notifications":`Notifications`,"settings.open":`Settings`,"settings.themeDefault":`Paper`,"settings.themeDefaultDescription":`Calm and lightweight for long-running work.`,"settings.themeDescription":`Choose the workspace visual style. This preference is stored in the current browser.`,"settings.themeHighContrast":`High contrast`,"settings.themeHighContrastDescription":`Stronger borders and more prominent state blocks.`,"settings.themeLoopx":`LoopX standard`,"settings.themeLoopxDescription":`Precise monochrome surfaces, Geist type, and quiet hairline structure.`,"settings.title":`Settings`,"settings.workspaceDisplay":`Workspace display`,"settings.workspaceTheme":`Workspace theme`,"session.closeRecord":`Exit run record`,"session.details":`Session details`,"session.record":`Execution Session · Run record`,"session.recordDescription":`The timeline now shows messages and Turn records from this Session.`,"sidebar.createGoal":`Create Goal`,"sidebar.delete":`Delete`,"sidebar.deleteGoal":`Delete Goal`,"sidebar.manager":`LoopX Manager`,"sidebar.notifications":`Settings`,"sidebar.owner":`Personal workspace`,"sidebar.product":`Personal Agent workspace`,"sidebar.resume":`Resume`,"sidebar.resumeGoal":`Resume Goal`,"sidebar.stop":`Stop`,"tasks.historyLoading":`Loading history…`,"tasks.historyError":`History could not be loaded.`,"tasks.historyExpired":`History snapshot expired. Reload to continue.`,"tasks.historyRetry":`Reload`,"tasks.historyEnd":`End of completed history`,"tasks.historyMore":`Load more`,"tasks.historyLocalOnly":`Open this machine’s Dashboard to browse full history.`,"sidebar.sortGoals":`Reorder Goals`,"sidebar.dragGoal":`Drag to reorder, or use Reorder Goals`,"sidebar.moveUp":`Move {goal} up`,"sidebar.moveDown":`Move {goal} down`,"sidebar.goalMoved":`{goal} moved to position {position}`,"sidebar.orderNotSaved":`Order changed for this visit; browser storage is unavailable.`,"sidebar.stopGoal":`Stop Goal`,"sidebar.stopped":`Stopped`,"sidebar.stoppedLoading":`Loading stopped Goals`,"sidebar.stoppedLoadFailed":`Stopped Goals could not be loaded. Active Goals remain available.`,"sidebar.retryStopped":`Retry`,"state.completed":`Completed`,"state.needsRepair":`Needs repair`,"state.needsYou":`Needs you`,"state.quiet":`Quiet`,"state.running":`Running`,"state.stopped":`Stopped`,"state.waiting":`Waiting`,"tasks.blocked":`Blocked`,"tasks.agentLane":`Work Agent`,"tasks.agentLaneDescription":`Filter this Goal's projected work lanes`,"tasks.agentLaneFilter":`Filter by work Agent`,"tasks.allAgentLanes":`All Agents ({count})`,"tasks.chatAgentReplied":`Agent replied`,"tasks.chatPending":`Sent to Agent`,"tasks.chatPendingDescription":`Processing. Tasks update only after a task operation is confirmed.`,"tasks.chatRecent":`Recent conversation`,"tasks.chatUnchangedDescription":`This conversation did not directly change Tasks. Convert the reply to a Task draft and confirm it when execution is needed.`,"tasks.chatViewReply":`View reply`,"tasks.convertToTask":`Convert to Task`,"tasks.completed":`Completed`,"runs.discoveryPartial":`Some execution details are unavailable. Reconnecting; task summaries are not live execution status.`,"runs.discoveryOffline":`Execution service unavailable. Reconnecting; retained task summaries may be stale.`,"files.openConversation":`Go to conversation`,"files.exportSummary":`Export summary`,"tasks.viewDescription":`Decisions first, then work and recent completions`,"tasks.viewLabel":`Task view`,"tasks.listView":`List`,"tasks.boardView":`Board`,"tasks.completedSummary":`{count} tasks completed. Recent details are projected by the control plane when needed.`,"tasks.emptyCompleted":`No completed tasks yet.`,"tasks.emptyConfirm":`No tasks waiting for confirmation.`,"tasks.emptyRunning":`No queued or running tasks.`,"tasks.emptySchedules":`No scheduled tasks.`,"tasks.emptyGoal":`This Goal has no tasks yet. Describe the next step below and LoopX will show a confirmation preview first.`,"tasks.markComplete":`Mark complete: {name}`,"tasks.moreActions":`More actions: {name}`,"tasks.openExecution":`View execution: {name}`,"tasks.pending":`Pending`,"tasks.pendingAndRunning":`Queued / Running`,"tasks.scheduled":`Scheduled & continuous`,"tasks.sessionError":`Session issue`,"tasks.waiting":`Queued`,"tasks.waitingAge":`Waiting {age}`,"tasks.viewExecution":`View execution`,"tasks.viewResult":`View result`,"time.days":`{count} days`,"time.hours":`{count} hours`,"timeline.emptyGoal":`This Goal has no new activity`,"timeline.emptyGoalDescription":`Ask for progress or send new guidance.`,"timeline.emptyWorkspace":`Your workspace is quiet today`,"timeline.emptyWorkspaceDescription":`Describe a Goal to the LoopX Manager, or ask what deserves attention today.`,"timeline.gateHistory":`{count} historical Gates`,"timeline.pending":`Working…`,"timeline.runCompleted":`{run}: completed`,"timeline.review":`Review`,"timeline.reviewAndConfirm":`Review and confirm`,"timeline.waitingConfirmation":`Needs your confirmation`},"zh-CN":{"acceptance.connected":`已连接`,"acceptance.mapped":`已建立项目映射`,"acceptance.refreshed":`已刷新状态`,"acceptance.inspected":`已检查适配器`,"acceptance.recorded":`已记录执行`,"acceptance.judged":`已记录反馈`,"acceptance.approved":`已记录批准`,"acceptance.ready":`已记录控制器就绪`,"acceptance.attentionSource":`当前状态`,"acceptance.visionSource":`Agent 验收条件`,"acceptance.todoSource":`任务状态`,"acceptance.runSource":`最新执行证据`,"acceptance.title":`验收观察`,"acceptance.unavailable":`验收观测不可用,Goal 是否达成仍未知。`,"acceptance.partial":`当前仅有部分观测。任务完成或缺口列表为空,都不能证明 Goal 已通过验收。`,"acceptance.gaps":`仍需补充的证据`,"acceptance.reasonUnknown":`来源未提供原因`,"acceptance.unknown":`未知`,"acceptance.required":`所需证据或条件`,"acceptance.observed":`观测时间`,"acceptance.noGaps":`现有观测中没有缺口,尚未评估完整验收条件。`,"acceptance.guards":`待处理的门禁决策`,"acceptance.noGuards":`现有观测中没有待处理的门禁决策。`,"acceptance.scope":`决策范围`,"acceptance.next":`当前状态给出的下一步`,"acceptance.historical_progress":`已记录的历史进展`,"acceptance.historical":`历史生命周期记录不授予权限,也不代表通过验收。`,"acceptance.missing":`未获取的来源:`,"acceptance.truncated":`仅展示前 12 条观测。`,"common.actions":`操作`,"common.agent":`Agent`,"common.allMessages":`所有消息`,"common.cancel":`取消`,"common.close":`关闭`,"common.closeActionReceipt":`关闭操作回执`,"common.confirm":`确认`,"common.export":`导出`,"common.failed":`失败`,"common.goal":`Goal`,"common.loading":`加载中…`,"common.none":`无`,"common.off":`关闭`,"common.on":`开启`,"common.open":`打开`,"common.owner":`Owner`,"common.readOnly":`只读`,"common.recently":`刚刚`,"common.status":`状态`,"common.task":`Task`,"common.you":`你`,"common.waiting":`等待中`,"composer.addImage":`添加图片`,"composer.agentProgress":`向 Agent 获取进度报告`,"composer.agentProgressPrompt":`请给我一份当前 Goal 的进度报告:已完成、执行中、阻塞和下一步。`,"composer.attachImageHint":`选择、粘贴或拖入图片`,"composer.clarifyDefer":`暂缓 Todo 需要可自动判断的恢复条件。请补充 todo_done:、pr_merged:[owner/repo]#、capacity_available: 或 resume_at:<带时区 RFC3339 时间>。`,"composer.clarifySingleAction":`这句话包含多个可能修改状态的操作。请一次描述一项操作,我会逐项展示确认预览。`,"composer.createGoal":`创建新 Goal`,"composer.createGoalDraft":`Goal 草稿`,"composer.createGoalDraftDescription":`补充内容后发送,LoopX 会先展示待确认操作。`,"composer.createGoalDraftLead":`我想创建一个长期 Goal:`,"composer.createGoalTemplate":`我想创建一个长期 Goal: 目标: 完成标准: 执行边界(可选): @@ -44,7 +44,7 @@ Goal: Goal: 频率:每天 停止条件:Goal 完成 -通知:仅在需要我时`,"composer.nextAction":`询问下一步`,"composer.nextActionPrompt":`我现在该做什么?`,"composer.prepareDraft":`填入编辑框,确认后再发送`,"composer.send":`发送`,"composer.sendMessage":`向 LoopX 发送消息`,"composer.sendMessageHint":`发送消息`,"composer.sentImageAlt":`移除图片 {name}`,"conversation.agentPending":`正在整理…`,"conversation.close":`关闭对话回执`,"conversation.convertHint":`将 Agent 最新回复转为 Task 草稿`,"conversation.full":`查看完整对话`,"conversation.receipt":`对话回执`,"conversation.replying":`正在回复`,"conversation.title":`管家对话`,"conversation.toTask":`转为 Task`,"digest.away":`自上次访问以来的运行记录`,"digest.completed":`新增完成运行`,"digest.failed":`新增失败或中断`,"digest.needsYou":`当前待确认`,"feedback.applying":`正在执行:{title}`,"feedback.cancelFailed":`取消失败:{error}`,"feedback.completed":`已完成:{title}`,"feedback.executionFailed":`执行失败:{error}`,"feedback.gateRequired":`需要你确认:{summary}`,"feedback.notCompleted":`操作未完成:{status}`,"feedback.goalRefreshFailed":`已打开 Goal,但暂时无法刷新最新状态。请点击刷新重试。`,"feedback.preparingPreview":`正在准备确认预览:{title}`,"feedback.previewFailed":`无法准备确认预览:{error}`,"feedback.sendFailed":`发送失败:{error}`,"feedback.sendGenericError":`消息发送失败,请稍后重试。`,"feedback.stale":`状态已变化,操作未执行,请重新生成确认预览。`,"feedback.taskDraftCreated":`已根据回复生成 Task 草稿。编辑后发送,LoopX 会先展示确认预览。`,"goal.defaultTitle":`新的个人 Goal`,"goal.initialTodo":`按完成标准推进:{criteria}`,"goal.objectiveBoundary":`执行边界:{boundary}`,"goal.objectiveCompletion":`完成标准:{criteria}`,"drawer.advancedDiagnostics":`高级诊断`,"drawer.agentWorking":`Agent 正在继续执行,记录会自动更新。`,"drawer.analysis":`正在分析`,"drawer.apply":`确认并应用`,"drawer.applying":`正在应用…`,"drawer.attentionBlocking":`正在阻塞 Agent`,"drawer.attentionWaiting":`等待你的决定`,"drawer.autoNotify":`Human-gate 自动通知`,"drawer.branch":`分支`,"drawer.closeDetail":`关闭详情:返回{context}`,"drawer.connected":`已连接`,"drawer.correctionDescription":`消息会沿用当前 Goal、Todo 与 Agent Session 上下文。`,"drawer.correctionLabel":`与 {agent} 纠偏`,"drawer.correctionPlaceholder":`例如:先关注权限风险,暂时不要提交…`,"drawer.correctionSend":`发送纠偏`,"drawer.correctionTextarea":`输入纠偏信息:Goal {goal},Agent {agent},Run {run}`,"drawer.copyRepository":`复制仓库标识`,"drawer.copyRepositoryDone":`已复制仓库标识`,"drawer.copyRepositoryError":`复制失败,请检查浏览器剪贴板权限。`,"drawer.copyRepositorySuccess":`已复制,可粘贴到其他工具。`,"drawer.cost":`成本 24h / 7d`,"drawer.costShort":`成本`,"drawer.durationShort":`时长`,"drawer.period24h":`24 小时`,"drawer.period7d":`7 天`,"drawer.tokens":`Token 24 小时 / 7 天`,"drawer.tokensShort":`Token`,"drawer.usageNotMeasured":`未采集`,"drawer.currentGoal":`当前 Goal`,"attentionDetail.title":`事项说明`,"attentionDetail.request":`需要你做什么`,"attentionDetail.decision":`需要作出决定`,"attentionDetail.unknownRequest":`来源未明确,请先查看来源再判断`,"attentionDetail.open":`当前投影中待处理`,"attentionDetail.closed":`已关闭`,"attentionDetail.deferred":`已推迟`,"attentionDetail.superseded":`已被替代`,"attentionDetail.unknown":`来源未提供状态`,"attentionDetail.unavailable":`来源尚未确认当前事项,请刷新后再操作`,"attentionDetail.unknownReason":`来源尚未提供原因。`,"attentionDetail.targetTodo":`关联的待解锁 Todo`,"attentionDetail.targetAgent":`事项指定的 Agent`,"attentionDetail.scope":`声明的决策范围`,"attentionDetail.notProvided":`来源未提供`,"attentionDetail.replacement":`替代 Todo`,"attentionDetail.openReplacement":`打开替代事项`,"attentionDetail.boundary":`阅读详情不会关闭 gate 或授予权限;作出决定前仍需新的操作预览。`,"drawer.decisionDefaultEvidence":`当前状态没有附加公开安全证据;下一步仍会先展示 Preview。`,"drawer.decisionDefaultReason":`该决定会影响当前 Todo 的下一步执行。`,"drawer.decisionDefer":`稍后决定`,"drawer.decisionMore":`更多决定`,"drawer.decisionReject":`拒绝`,"drawer.decisionReview":`查看影响并决定`,"drawer.dependencies":`依赖`,"drawer.detailsAndActions":`详情与操作`,"drawer.duration":`运行时长 24h / 7d`,"drawer.evidence":`证据`,"drawer.executionHistory":`执行历史`,"drawer.executionRecord":`运行记录`,"drawer.executionRecordAndResult":`执行过程与结果`,"drawer.explainDecision":`解释此决定`,"drawer.gateApproveHint":`在终端执行一条命令即可完成审批:`,"drawer.gateRejectHint":`不同意就把末尾的 approve 换成 reject。执行后这条提醒会自动消失。`,"drawer.gateRequiresHost":`需要宿主确认`,"drawer.gateRequiresHostDescription":`页面无权直接批准这类权限变更,你的点击没有写入任何内容。`,"drawer.goalAutoRun":`当前 Goal 的自动运行`,"drawer.goalChanges":`当前 Goal 的待确认变更`,"drawer.goalDetails":`Goal 详情`,"drawer.group":`群聊`,"drawer.inspectorFull":`切换到全屏`,"drawer.inspectorFullView":`全屏查看`,"drawer.inspectorHalf":`切换到半屏`,"drawer.inspectorHalfView":`半屏查看`,"drawer.lastNotification":`最近通知`,"drawer.larkConfigure":`管理 Lark connection`,"drawer.larkConnect":`连接 Lark App`,"drawer.larkConnection":`Lark connection`,"drawer.larkNotConfigured":`未配置`,"drawer.larkNotConfiguredDescription":`配置后,当这个 Goal 出现需要你确认的变更时,会自动发飞书通知。`,"drawer.managerChanges":`管家待确认变更`,"drawer.moreActions":`更多操作`,"drawer.moreRunActions":`更多运行操作`,"drawer.nextTransition":`下一转换`,"drawer.noExecutionHistory":`暂无执行记录。`,"drawer.noRun":`尚未启动执行 Session`,"drawer.noRunDescription":`Agent 开始执行后,运行记录会稳定显示在这里。`,"drawer.notAssigned":`未分配`,"drawer.notLinked":`未关联`,"drawer.notSet":`未设置`,"drawer.outputDetails":`产出详情`,"drawer.outputRecorded":`该产出已记录到当前 Goal。`,"drawer.outputSafePreview":`公开安全产出预览`,"drawer.outputRun":`Run`,"drawer.outputTodo":`Todo`,"drawer.outputs":`本次运行产出`,"drawer.previewUnavailable":`此产出没有可用的公开安全内联预览。`,"drawer.priority":`优先级`,"drawer.progress":`进度`,"drawer.proposalApplied":`已应用,LoopX 状态将刷新。`,"drawer.proposalApplyFailed":`应用失败,没有写入任何变更。`,"drawer.proposalApplyFailedHint":`请刷新 Goal 状态后重新生成;若仍失败,可保留此页并查看高级诊断。`,"drawer.proposalClose":`关闭`,"drawer.proposalDefer":`稍后`,"drawer.proposalDeferred":`已暂缓,可稍后继续应用或重新生成。`,"drawer.proposalEnterGoal":`进入新 Goal`,"drawer.proposalExplainer":`确认后,LoopX 会执行这项变更并显示写入结果。关闭或取消不会修改任何状态。`,"drawer.proposalRecheck":`按最新状态重新检查`,"drawer.proposalRegenerate":`基于最新状态重试`,"drawer.proposalRejected":`已拒绝,这项变更不会写入。`,"drawer.proposalStale":`来源状态已变化,请按最新状态重新检查。`,"drawer.proposalViewGoal":`查看更新后的 Goal`,"drawer.reassign":`改派给`,"drawer.reassignSummary":`重新分配:{task}`,"drawer.reason":`原因`,"drawer.recoveryDescription":`本地历史已经保留,请选择恢复路径。`,"drawer.recoveryFailed":`上游 Session 恢复失败`,"drawer.recoveryNewSession":`携带上下文开始新 Session`,"drawer.recoveryRetry":`重试恢复`,"drawer.repositoryRole":`执行工作区`,"drawer.repository":`仓库`,"drawer.replyMode":`回复方式`,"drawer.subagentApplied":`已写入,并通过共享 Goal 状态读回校验。`,"drawer.subagentAppliedRefreshFailed":`已写入并通过共享 Goal 状态读回;状态投影刷新失败,可稍后手动刷新。`,"drawer.subagentApplying":`正在写入并校验共享状态读回…`,"drawer.subagentApplyFailed":`子代理设置写入失败。`,"drawer.subagentChildLimit":`当前上限`,"drawer.subagentConfirmDisable":`确认关闭子代理执行`,"drawer.subagentConfirmEnable":`确认开启子代理执行`,"drawer.subagentCurrentBoundary":`当前任务领域限制`,"drawer.subagentDescription":`仅在 Todo、配额、能力和写入范围门禁全部通过后,允许运行时为相互独立的任务临时创建子代理;不会强制并行,也不会授予持久权限。`,"drawer.subagentDisable":`预览关闭子代理执行`,"drawer.subagentDisableSummary":`这个 Goal 将不再创建新的子代理;现有 Todo 归属和执行记录不受影响。`,"drawer.subagentDomainInvalid":`所选任务领域限制无效。`,"drawer.subagentDomainTodoCount":`匹配 {count} 个开放 Todo`,"drawer.subagentDomains":`任务领域限制(可选)`,"drawer.subagentDomainsEmpty":`当前没有开放的 advancement Todo 声明 task_domain;保持为空即可不按任务领域限制子代理执行。`,"drawer.subagentDomainsHint":`全部不选表示不按任务领域过滤;选择后只放行匹配且已声明领域的 Todo,其他执行门禁始终生效。`,"drawer.subagentDomainsUnrestricted":`不限制任务领域`,"drawer.subagentEnable":`预览开启子代理执行`,"drawer.subagentLabel":`Per-Goal 执行边界`,"drawer.subagentModel":`子 Agent 模型`,"drawer.subagentEffort":`子 Agent 推理档位`,"drawer.subagentModelDefault":`宿主默认`,"drawer.subagentLunaPreset":`使用 Luna / max`,"drawer.subagentClearModel":`清除模型偏好`,"drawer.subagentModelHint":`填写后通过“预览配置调整”保存,执行关闭时也可保存偏好;启动时须核验宿主支持情况。`,"drawer.subagentModelRequired":`设置推理档位前请先指定子 Agent 模型。`,"drawer.subagentMaxChildren":`最多子代理数`,"drawer.subagentNoChange":`当前 Goal 已是这个设置,没有写入任何内容。`,"drawer.subagentPending":`待确认`,"drawer.subagentPreviewBoundary":`预览配置调整`,"drawer.subagentPreviewFailed":`无法生成子代理设置预览。`,"drawer.subagentPreviewing":`正在核对最新 Goal 状态…`,"drawer.subagentPreviewReady":`预览已锁定,确认后才会写入这个 Goal。`,"drawer.subagentPreviewSummary":`最多允许创建 {count} 个子代理;任务领域限制:{domains}。`,"drawer.subagentRemoteReadOnly":`当前来源只读,请在 Goal 所在主机上修改。`,"drawer.subagentTitle":`自适应子代理执行`,"drawer.remoteDetailsDescription":`SSH 来源只展示公开安全状态,不读取来源主机上的连接配置。`,"drawer.remoteDetailsUnavailable":`远端详情未投影`,"drawer.resumeNo":`否`,"drawer.resumeYes":`是`,"drawer.runDetails":`执行 Session`,"drawer.runInterrupt":`中断本次运行`,"drawer.runLatest":`查看最近执行过程`,"drawer.runNewSession":`开始新 Session`,"drawer.runCloseSession":`关闭 Session`,"drawer.runRecordEmpty":`还没有运行记录。Agent 尚未开始这次执行;请在“详情与操作”查看等待条件或恢复 Session。`,"drawer.runRecordProjected":`当前没有可展示的逐步运行记录。LoopX 已读取到 {completed}/{total} 的投影进度{outputs};请在“详情与操作”检查 Session 状态。`,"drawer.runRecordProjectedOutputs":`和 {count} 项产出`,"drawer.runRoleAssistant":`已完成`,"drawer.runRoleSystem":`需检查`,"drawer.runRoleUser":`收到任务`,"drawer.runView":`Session 视图`,"drawer.scheduleAdd":`添加定时检查`,"drawer.scheduleDefaultNotification":`仅在需要你时通知`,"drawer.scheduleDefaultStop":`Goal 完成或 owner 停止`,"drawer.scheduleDefaultTarget":`由 LoopX 调度器按 Goal 配置唤醒。`,"drawer.scheduleEdit":`改为每 2 小时`,"drawer.scheduleLast":`上次执行`,"drawer.scheduleLocalTimezone":`本地时区`,"drawer.scheduleNext":`下次执行`,"drawer.scheduleNeverRun":`尚未执行`,"drawer.scheduleNotification":`通知`,"drawer.schedulePause":`暂停`,"drawer.schedulePending":`等待调度`,"drawer.scheduleResume":`恢复`,"drawer.scheduleRunNow":`立即运行`,"drawer.scheduleStop":`停止{kind}`,"drawer.scheduleStopCondition":`停止条件`,"drawer.scheduleTimezone":`时区`,"drawer.sessionRecoverable":`可恢复`,"drawer.sessionStatus":`会话状态`,"drawer.setupHeartbeat":`设置 Heartbeat`,"drawer.taskActions":`Todo 待确认操作`,"drawer.taskAdvancement":`推进任务`,"drawer.taskBlock":`标记阻塞`,"drawer.taskComplete":`标记完成`,"drawer.taskCompletedNote":`该任务保留为只读记录。`,"drawer.taskCompletedTitle":`任务已完成`,"drawer.taskDefer":`暂缓`,"drawer.taskDeferCondition":`Todo 暂缓恢复条件`,"drawer.taskDeferInvalid":`条件格式不受支持;请使用下列可判定条件。`,"drawer.taskDeferPlaceholder":`例如 resume_at:2026-09-14T09:00:00+08:00`,"drawer.taskDeferReview":`检查暂缓`,"drawer.taskDeferSupported":`支持 todo_done、pr_merged、capacity_available 与带时区的 resume_at 条件。`,"drawer.taskDeferUntil":`暂缓至`,"drawer.taskDetails":`Todo 详情`,"drawer.taskInfo":`任务信息`,"drawer.taskManage":`管理任务`,"drawer.taskNextCompleted":`可创建后续任务`,"drawer.taskNextOpen":`推进或更新状态`,"drawer.taskOrdinary":`普通任务`,"drawer.taskStatusBlocked":`受阻`,"drawer.taskStatusDeferred":`已延期`,"drawer.resumeWhen":`恢复条件`,"drawer.resumeState":`恢复状态`,"drawer.resumePending":`等待条件满足`,"drawer.resumeReady":`可恢复`,"drawer.resumeReceipt":`恢复回执`,"drawer.taskNextDeferred":`等待恢复条件满足后重新评估`,"drawer.taskNextResumeReady":`恢复条件已满足,等待生命周期重新规划`,"drawer.taskStatusCompleted":`已完成`,"drawer.taskStatusOpen":`待执行`,"drawer.taskSuccessor":`创建后续 Todo`,"drawer.taskSuccessorNote":`Owner 标记为阻塞,等待补充上下文。`,"drawer.taskSuccessorSummary":`创建后续 Todo:{task}`,"drawer.taskSuccessorText":`{task} 的后续工作`,"drawer.taskType":`任务类型`,"drawer.topic":`Topic`,"drawer.trigger":`触发方式`,"drawer.titleAttention":`需要你`,"drawer.titleOutput":`产出详情`,"drawer.titleProposalApplied":`执行结果`,"drawer.titleProposalConfirm":`确认执行`,"drawer.titleSchedule":`定时检查`,"drawer.unconfigured":`未配置`,"drawer.workspaceCandidates":`可选择的工作区`,"files.emptySummary":`公开安全产出`,"files.empty":`还没有文件、产出或已验证的阶段周报。`,"files.loadingReports":`正在加载已验证的阶段周报…`,"files.reportDelta":`+{added} 新增 · {changed} 变化`,"files.reportAdded":`新增`,"files.reportChanged":`变化`,"files.reportGeneration":`生成批次`,"files.reportLoadFailed":`无法加载已验证周报`,"files.reportPublication":`发布批次`,"files.title":`Files & Outputs`,"files.verifiedReport":`已验证阶段周报`,"header.agentUnavailable":`不可用`,"header.chatRuntime":`Chat`,"header.workAgentCount":`{count} 个工作 Agent`,"header.chat":`Chat`,"header.files":`Files`,"header.goalCapabilities":`能力配置`,"header.goalCapabilitiesDescription":`管理 Goal override 与继承的本机默认值。`,"header.goalDetails":`Goal 详情`,"header.goalDetailsDescription":`查看状态、用量、仓库、通知与 Session。`,"header.goalSettings":`Goal 设置`,"header.goalSettingsDescription":`打开 Goal 详情或能力配置`,"header.goalNavigation":`Goal 导航`,"header.goalView":`Goal 视图`,"header.live":`实时`,"header.manager":`LoopX 管家`,"header.managerDescription":`跨 Goal 的个人工作入口`,"header.managerOverview":`总览`,"header.managerView":`管家视图`,"header.openGoalNavigation":`打开 Goal 导航`,"header.readOnlySourceDescription":`{source} 通过 SSH 隧道只读展示`,"header.refresh":`刷新状态`,"header.refreshDone":`刚刚更新`,"header.refreshFailed":`刷新失败`,"header.refreshing":`刷新中`,"header.selectAgent":`选择 Agent`,"header.selectChatRuntime":`选择聊天 Runtime`,"header.tasks":`Tasks`,"header.themeBrutal":`切换到野兽主题`,"header.themePaper":`切换到默认主题`,"home.blockingSummary":`其中 {count} 项正在阻塞 Agent。`,"home.completedGoals":`已完成的 Goal`,"home.empty":`当前没有`,"startup.goalLoading":`正在加载状态…`,"startup.goalError":`状态加载失败`,"startup.progress":`已加载 {loaded} / {total} 个活跃 Goal`,"startup.partial":`Goal 状态正在逐个更新,当前统计尚不完整。`,"startup.independent":`此 Goal 的加载不会阻塞其他 Goal,你可以先查看已加载的内容。`,"startup.error.timeout":`读取超时,可在本地服务就绪后重试。`,"startup.error.network":`连接中断,请重试以重新连接。`,"startup.error.service":`本地服务暂时不可用,请重试继续加载。`,"startup.error.revision":`加载期间 Goal 目录发生变化,请刷新以同步。`,"startup.error.scope":`该 Goal 已不在当前来源中,请刷新目录。`,"startup.error.invalid":`无法解析状态响应,请刷新或检查 LoopX 更新。`,"startup.retry":`重试`,"startup.retryFailed":`重试失败的 Goal`,"startup.failedCount":`{count} 个 Goal 加载失败,已加载的 Goal 可继续使用。`,"home.greeting":`你好,我是 LoopX 管家`,"home.history":`历史`,"home.lane.needsYou":`需要你`,"home.lane.needsYouDescription":`等待你的决定、授权或补充信息`,"home.lane.observing":`观察中`,"home.lane.observingDescription":`持续监控,出现变化时再提醒你`,"home.lane.running":`执行中`,"home.lane.runningDescription":`Agent 正在推进并持续回传进展`,"home.lane.scheduled":`已安排`,"home.lane.scheduledDescription":`已经安排,等待时间或前置条件`,"home.noActivity":`尚无活动`,"home.noFirstActivity":`等待首次活动`,"home.noCompletedGoals":`还没有已完成的 Goal`,"home.preservedState":`保留状态,可随时恢复`,"home.stopped":`已停止`,"home.systemHealth":`系统健康:{summary}`,"home.taskCount":`{count} 个 Task`,"home.todayAt":`今天 {time}`,"home.waitingCount":`你有 {count} 项需要处理。`,"home.workspace":`Goal 工作区`,"lark.allMessages":`此 Topic 中的所有消息`,"lark.allTopicMessages":`所有 Topic 消息`,"lark.agentIngress":`Agent 入站方式`,"lark.agentAppPermissions":`每个选中的 Agent 都需要一个已具备群聊提及和回复能力的 Lark App。`,"lark.agentApps":`每个 Agent 的 Lark App`,"lark.agentAppsDescription":`默认使用上方 App;需要独立机器人身份时,可为 Agent 选择另一个兼容 App。`,"lark.agentAppSelection":`{agent} 的 Lark App`,"lark.appCreated":`App 已创建`,"lark.appCreateFailed":`创建失败`,"lark.appLoading":`正在加载可用的 Lark Apps…`,"lark.appPermissions":`该 App 能发送建联消息,但缺少接收群聊 @ 消息或自动回复所需的机器人权限。请开启 im:message.group_at_msg:readonly、im:message.send_as_bot 和事件 im.message.receive_v1,发布新版后刷新。`,"lark.appProfile":`Lark App`,"lark.apps":`Lark Apps`,"lark.autoReplyUnavailable":`自动回复暂不可用`,"lark.autoReplyReady":`自动回复可用`,"lark.bindGoal":`绑定到 Goal`,"lark.cancel":`取消`,"lark.cardinality":`一个 Lark App · 多个 Goal · 每个 Agent 一条隔离路由`,"lark.capture":`接收范围`,"lark.captureAddressed":`仅接收提及 App 或回复 App 的消息`,"lark.captureAll":`接收此 Goal Topic 中的所有消息`,"lark.captureScope":`接收范围`,"lark.captureScopeDescription":`决定哪些 Topic 消息会进入 LoopX;不会扩大 Agent 权限。`,"lark.closeConnection":`关闭连接弹窗`,"lark.closeCreate":`关闭创建弹窗`,"lark.closeSettings":`关闭 Lark 设置`,"lark.connect":`连接`,"lark.connectAllAgents":`连接全部已注册 Agent`,"lark.connectAllAgentsAction":`一键连接 {count} 个 Agent`,"lark.connectAllAgentsDescription":`一次引导创建 {count} 个隔离的 Agent Topic;请在对应 Topic 内发送请求,每个 Agent 保留独立路由和收件箱。`,"lark.connectApp":`连接 Lark App`,"lark.connection":`连接`,"lark.connections":`连接`,"lark.configuration":`Lark 配置`,"lark.continueFeishu":`在飞书中继续`,"lark.createAutomatically":`自动创建 Goal Topic`,"lark.createAutomaticallyDescription":`将为每个选中的 Agent 创建带 Agent 标识的专属 Topic。`,"lark.defaultAgentAppDescription":`用于查找目标群聊,并作为所有选中 Agent 的默认 App;下方的逐 Agent 选择可覆盖它。`,"lark.description":`管理可复用的 Lark App,并用独立 Topic 将群聊连接到 Goal。`,"lark.editConnection":`编辑 Lark 连接`,"lark.goalConnections":`{count} 个 Goal 连接`,"lark.goalTopicConnections":`Lark Goal Topic 连接`,"lark.groupChat":`群聊`,"lark.groupEmpty":`该机器人尚未加入可连接的群。请先在飞书群设置中添加这个机器人,再回来刷新或搜索。`,"lark.groupLoading":`正在读取该机器人已加入的群…`,"lark.groupSearch":`搜索该机器人已加入的群`,"lark.historyPermission":`历史补读权限(独立能力)`,"lark.health.eventProcessed":`已处理 {events} 条事件,成功回复 {replies} 条。`,"lark.health.eventUnverified":`事件订阅待验证`,"lark.health.eventUnverifiedDetail":`Provider listener 已就绪,但尚未收到消息事件。请启用 im.message.receive_v1、开通群聊 @ 消息权限并发布新版,然后在这个 Agent Topic 内发送新的 @ 消息;存在多条 Agent 路由时,群顶层消息会 fail closed。`,"lark.health.ignoredSelf":`已忽略机器人自身发送的消息,避免重复回复。`,"lark.health.invalidRouting":`路由配置无效`,"lark.health.invalidRoutingDetail":`连接已安全停用,请重新选择处理方式并保存。`,"lark.health.lastStatus":`最近事件状态:{status}`,"lark.health.listening":`监听中`,"lark.health.messageContextPermission":`消息权限不足`,"lark.health.messageContextPermissionDetail":`已收到消息事件,但无法读取群消息上下文。请发布并授权该 App 的群消息读取权限。`,"lark.health.notAddressed":`最近消息未直接 @ 机器人`,"lark.health.notAddressedDetail":`监听正常;当前连接只响应直接 @ 机器人或对机器人的回复。`,"lark.health.notStarted":`监听未启动`,"lark.health.notStartedDetail":`请刷新连接或重新启动 LoopX 后再试。`,"lark.health.processingFailed":`消息处理失败`,"lark.health.processingFailedDetail":`已收到消息事件,但 Agent 处理失败。请查看本地诊断后重试。`,"lark.health.queued":`已进入 Agent 收件箱`,"lark.health.queuedDetail":`消息由 {agent} 异步处理,不会启动通用 Chat Session。`,"lark.health.sourceDisconnected":`实时消息连接断开`,"lark.health.sourceDisconnectedDetail":`消息监听进程意外退出。请核对应用档案的平台:飞书应用选飞书,国际版 Lark 应用选 Lark,再检查连接及订阅错误。LoopX 正在重试;历史消息能读取,不代表能实时收消息。`,"lark.health.retrying":`监听重试中`,"lark.health.retryingDetail":`事件监听暂时中断,LoopX 正在自动重试。`,"lark.health.routeAmbiguous":`消息匹配多个 Goal`,"lark.health.routeAmbiguousDetail":`同一 Bot 和群聊存在多个完整群捕获连接。请让每个 Agent 使用独立 Bot,或只保留一个完整群连接。`,"lark.health.routeMismatch":`消息未匹配当前 Goal Topic`,"lark.health.routeMismatchDetail":`事件来自其他群聊或 Topic。请重新选择群聊并连接该 Goal,然后发送一条新的 @ 消息。`,"lark.health.routeUnavailable":`消息无法路由到 Goal`,"lark.health.routeUnavailableDetail":`当前连接信息不完整。请重新连接该 Goal 后再发送一条新的 @ 消息。`,"lark.health.starting":`正在启动`,"lark.health.startingDetail":`LoopX 正在启动该 App 的消息事件监听。`,"lark.health.unavailable":`自动回复不可用`,"lark.health.waiting":`等待处理`,"lark.incomingMessages":`接收消息`,"lark.ingressAsync":`异步收件箱`,"lark.ingressAsyncDescription":`写入 Agent 私有收件箱,等待后续显式处理。`,"lark.editPreservesIdentity":`保存会保留此 App、群和 Topic;旧连接默认升级为 Agent 异步收件箱。`,"lark.conversationKind":`连接用途`,"lark.managerConversation":`管家 · 同步对话`,"lark.workerConversation":`工作 Agent · 后台任务`,"lark.managerConversationDescription":`内置管家即时回应对话,长任务交给后台 Agent。群聊与私聊分别保存上下文。`,"lark.ingressLegacy":`待升级`,"lark.ingressLegacyDescription":`保存连接即可升级为 Agent 异步收件箱,已有消息保留在原 Topic 中。`,"lark.ingressQueue":`排队`,"lark.ingressQueueDescription":`进入同一 Agent Session 的有界 FIFO 队列,当前 Turn 完成后处理。`,"lark.ingressSteering":`实时引导`,"lark.ingressSteeringDescription":`投到当前活跃 Turn;没有精确活跃 Turn 时安全拒绝。`,"lark.loading":`加载 Lark 配置…`,"lark.management":`Lark 管理`,"lark.openEventSettings":`查看飞书事件配置`,"lark.mentions":`提及机器人`,"lark.mentionsOnly":`仅提及消息`,"lark.needsMessagePermissions":`需要消息权限`,"lark.needsSetup":`需要设置`,"lark.newApp":`新建 Lark App`,"lark.noAgentConfigured":`未配置 Agent`,"lark.noConnections":`暂无匹配的连接。`,"lark.noProfiles":`还没有可用的 lark-cli App profile。`,"lark.profileName":`Profile 名称`,"lark.profileValidation":`Profile 只能包含字母、数字、点、下划线和连字符。`,"lark.processing":`处理方式`,"lark.region":`区域`,"lark.registerAnother":`+ 注册另一个 Lark App — 通过飞书创建`,"lark.reopenFeishu":`重新打开飞书`,"lark.settingsConfigure":`配置 {goal}`,"lark.settingsDisconnect":`解绑 {goal}`,"lark.replyMode":`回复方式`,"lark.replyModeDescription":`当前只支持在来源 Topic 内回复,避免跨群或跨 Goal 投递。`,"lark.reusableApps":`{count} 个可复用 App`,"lark.reusableWorkspaceApp":`可复用工作区 App`,"lark.routesUnverified":`{count} 条 Lark 路由尚未验证`,"lark.saveConnection":`保存连接`,"lark.searchConnections":`搜索 Lark 连接`,"lark.searchPlaceholder":`搜索 App、群、Goal 或 Topic`,"lark.setupCopy":`LoopX 将通过 lark-cli 打开飞书官方创建页面。应用凭证保存在系统 Keychain,LoopX 只保留 profile 引用。`,"lark.someoneMentions":`有人提及 Agent`,"lark.targetAgent":`目标 Agent`,"lark.targetAgentDescription":`选择该 Goal 内已注册的 Agent。此连接只投递给一个 Agent,不广播、不授予新权限。实时引导与排队需要该 Agent 的精确活跃 Session。`,"lark.agentUnavailable":`{agent} · 已不可用`,"lark.selectRegisteredAgent":`请先选择可用的已注册 Agent;不会自动替换原先的接收者。`,"lark.topicPreview":`Topic 预览`,"lark.topicReply":`Topic 回复`,"lark.trigger":`触发方式`,"lark.waitingFeishu":`等待飞书完成创建`,"lark.waitingFeishuDescription":`请在新窗口中完成飞书授权,完成后会自动回到这里。`,"lark.waitingLink":`正在生成飞书官方创建链接…`,"lark.error.appCreate":`Lark App 创建失败`,"lark.error.appRequired":`请选择一个 Lark App profile。`,"lark.error.bind":`绑定失败`,"lark.error.bindPreview":`绑定预览失败`,"lark.error.configuration":`Lark 配置加载失败`,"lark.error.groupLookup":`无法读取该机器人已加入的群。请检查机器人状态后重试。`,"lark.error.groupLoad":`群聊加载失败`,"lark.error.invalidApp":`Lark App profile 不可用或尚未完成授权。`,"lark.error.messagePermissions":`该 App 缺少自动回复所需的机器人权限。请开启 im:message.group_at_msg:readonly 和 im:message:send_as_bot,发布新版后回来刷新重试。`,"lark.error.provider":`飞书 API 调用失败,且没有生成已验证回执。请稍后重试。`,"lark.error.setupPoll":`创建状态查询失败`,"lark.error.setupStart":`无法启动 Lark App 创建流程`,"lark.error.cliExecutable":`已找到配置的 lark-cli,但当前无法执行。请检查安装或启动参数。`,"lark.error.cliMissing":`未发现 lark-cli。请先安装 lark-cli,然后重新启动 LoopX。`,"lark.error.cliStart":`lark-cli 启动失败。请检查安装状态,然后重新启动 LoopX。`,"lark.error.disconnect":`解绑失败`,"notifications.autoNotify":`需要你确认时自动推送到群里`,"notifications.bind":`绑定到通知群`,"notifications.bindConfirm":`将把「{goal}」绑定到通知群「{target}」,绑定时会验证机器人在群内并发送一条确认消息。`,"notifications.bindFailed":`绑定失败`,"notifications.bound":`已绑定`,"notifications.confirmBind":`确认绑定`,"notifications.description":`把 Goal 里需要你确认的变更推送到飞书群。绑定和开关在这里完成,推送逻辑沿用现有通道。`,"notifications.disabled":`已停用`,"notifications.group":`通知群:{target}`,"notifications.loadFailed":`通知群列表加载失败`,"notifications.noTargets":`还没有可用的通知群。通知群涉及机器人私有身份,请先在终端配置一次:`,"notifications.notBound":`未绑定`,"notifications.recent":`最近 {time}`,"notifications.sentCount":`已发送 {count} 条`,"notifications.settings":`Goal 通知绑定`,"notifications.setupFailed":`设置失败`,"notifications.title":`飞书群通知`,"proposal.field.agentId":`Agent`,"proposal.field.cadence":`频率`,"proposal.field.completionCriteria":`完成标准`,"proposal.field.executionBoundary":`执行边界`,"proposal.field.goalId":`Goal ID`,"proposal.field.heartbeat":`Heartbeat`,"proposal.field.initialTodos":`首个任务`,"proposal.field.objective":`目标`,"proposal.field.operation":`操作`,"proposal.field.operationState":`操作状态`,"proposal.field.resultDelivery":`结果回传`,"proposal.field.confirmationBoundary":`确认边界`,"proposal.field.expiresAt":`过期时间`,"proposal.field.permission":`权限`,"proposal.field.reason":`原因`,"proposal.field.stopCondition":`停止条件`,"proposal.field.target":`检查内容`,"proposal.field.timezone":`时区`,"proposal.field.title":`标题`,"proposal.field.workspace":`执行工作区`,"actionReview.targetChanged":`预览目标与请求的 Goal 或操作不一致,请重新生成预览。`,"actionReview.ready_stop":`暂停可恢复。此预览已通过检查,可直接执行;完成仍需要读回验证。`,"actionReview.resume_review":`恢复自动调度前需要确认。实际执行仍受额度、Gate 和 Todo 约束。`,"actionReview.delete_review":`请确认从注册表移除这个已停止 Goal。项目文件与历史记录会保留。`,"actionReview.action_review":`执行前请检查此提案的目标与影响。`,"actionReview.protected_action":`此操作需要明确审阅。确认不能替代所需授权。`,"actionReview.unknown_permission":`无法识别权限分类。请重新检查提案后再继续。`,"actionReview.unknown_action":`无法识别此生命周期操作。请重新检查提案后再继续。`,"actionReview.incomplete_proposal":`预览缺少验证信息或可执行转换。请重新生成预览。`,"actionReview.authority_gate":`Gate 阻止执行。请满足其要求后重新检查提案。`,"actionReview.stale_proposal":`来源状态已变化。请重新生成预览,原决定不再适用。`,"actionReview.apply_pending":`正在执行,请等待读回结果后再重试。`,"actionReview.readback_verified":`操作已完成,结果状态已通过读回验证。`,"actionReview.readback_unverified":`操作返回但未通过读回验证。尚不能确认完成,请重新检查状态。`,"actionReview.operation_group_confirmation":`这份精确请求只能在已绑定飞书群的原始卡片确认;Dashboard 不提供本地执行入口。`,"actionReview.operation_result_delivery_pending":`操作结果已经记录,但原群结果卡尚未通过回读核验。`,"actionReview.apply_failed":`执行未完成。请检查失败原因并重新生成预览后再试。`,"actionReview.inactive_proposal":`此提案当前不可执行。请重新检查后再继续。`,"proposal.gate.default":`需要宿主确认`,"proposal.impact.default":`确认后会调用规范 LoopX 服务写入状态。`,"proposal.impact.goalCreate":`确认后会创建 Goal 和首个 Todo,并让选定 Agent 开始首轮推进。`,"proposal.impact.lifecycleDelete":`确认后会从 source registry 和 global registry 移除这个已停止 Goal;项目文件、历史状态文件和备份不会被删除。`,"proposal.impact.lifecycleResume":`确认后会恢复 Goal 的自动调度资格并移回 Active Goals;实际执行仍受 quota、Gate 和 Todo 约束。`,"proposal.impact.lifecycleStop":`确认后会停止自动推进,并将 Goal 移入折叠的「已停止」列表;历史、Todo 和证据都会保留,可随时恢复。`,"proposal.impact.protected":`该操作需要通过受保护的 LoopX 写入服务完成。`,"proposal.impact.operation":`这里仅展示同一份不可变条款。请在已绑定的飞书群确认或拒绝;确认只会消费一个规范 claim。`,"proposal.primary.apply":`确认并应用`,"proposal.primary.goalCreate":`创建 Goal 并开始首轮`,"proposal.primary.lifecycleDelete":`删除 Goal`,"proposal.primary.lifecycleResume":`恢复 Goal`,"proposal.primary.lifecycleStop":`停止 Goal`,"proposal.primary.todoStart":`创建任务并开始执行`,"proposal.primary.operationGroup":`前往飞书群确认`,"proposal.primary.operationResultPending":`结果卡回传待恢复`,"proposal.primary.operationResultVerified":`结果已核验`,"proposal.resultDelivery.verified":`已在原群卡片完成回读核验`,"proposal.resultDelivery.pending":`等待回传并核验原群卡片`,"proposal.summary.goalCreate":`创建 Goal:{title}`,"proposal.summary.heartbeat":`为当前 Goal 设置 Heartbeat`,"proposal.summary.lifecycleDelete":`删除 Goal:{title}`,"proposal.summary.lifecycleResume":`恢复 Goal:{title}`,"proposal.summary.lifecycleStop":`停止 Goal:{title}`,"proposal.summary.monitor":`为当前 Goal 创建定时检查:{target}`,"proposal.workspace.current":`当前本地工作区(未绑定 Repository)`,"proposal.workspace.named":`{workspace}(仅提供执行环境,不会自动关联仓库)`,"proposal.workspaceGate.agentImpact":`先完成 Agent 身份绑定,再重新检查原操作;当前没有写入 Goal。`,"proposal.workspaceGate.agentTitle":`先绑定 Agent`,"proposal.workspaceGate.defaultSummary":`请选择 Goal 所属工作区。`,"proposal.workspaceGate.selectionImpact":`选择工作区后会重新展示待确认操作,选择本身不会写入状态。`,"proposal.workspaceGate.selectionTitle":`选择 Goal 工作区`,"projection.agentAdvancingGoal":`Agent 正在推进当前 Goal`,"projection.agentIdle":`暂无需要你处理`,"projection.agentNeedsDecision":`Agent 等待你的决定`,"projection.agentPreparingNextStep":`Agent 正在整理下一步`,"projection.agentStopped":`已由你停止;历史、Todo 和证据仍保留`,"projection.agentWaitingExternal":`正在等待外部条件`,"projection.confirmAgentDecision":`请确认 Agent 下一步需要的权限或决策`,"projection.events24h":`24 小时内 {count} 个事件`,"projection.firstReadOnlyAdapterCheck":`执行首次只读适配检查并保存进度`,"projection.goalVerified":`Goal 状态、Todo 与注册信息已验证`,"projection.latestRun":`最近运行`,"projection.latestValidation":`最近验证`,"projection.nextUpdatePending":`等待 LoopX 更新下一步`,"projection.publicSafeProjection":`公开安全状态投影`,"projection.refreshState":`刷新 LoopX 状态,确认当前进度仍然有效`,"projection.runEvidenceAvailable":`存在可查看的运行证据`,"projection.runRecorded":`最近一次 LoopX 运行已经记录`,"projection.statusRefreshNeeded":`LoopX 状态需要刷新`,"projection.todoStatusUpdated":`Todo 状态已经更新,正在确认下一步`,"projection.validationRecorded":`最近验证已经记录`,"runs.completed":`已完成`,"runs.failed":`需检查`,"runs.interrupted":`已中断`,"runs.queued":`已安排`,"runs.ready":`可继续`,"runs.resumeFailed":`恢复失败`,"runs.running":`执行中`,"runs.unknown":`状态未知`,"runs.waiting":`等待条件`,"schedule.active":`执行中`,"schedule.heartbeat":`Goal Heartbeat`,"schedule.monitor":`定时与持续任务`,"schedule.paused":`已暂停`,"schedule.summary":`按 LoopX 调度约束持续检查`,"schedule.defaultTarget":`检查当前 Goal 的阻塞、进度与新产出`,"schedule.unsupportedCalendar":`当前定时检查不支持精确到星期或时刻的日历计划。请改用固定间隔,例如“每 30 分钟”“每 2 小时”或“每天”;草稿已保留,没有生成待确认操作。`,"source.add":`添加来源`,"source.addConfigured":`添加只读来源`,"source.addMethod":`来源添加方式`,"source.addSsh":`添加 SSH 隧道来源`,"source.closeForm":`关闭来源表单`,"source.configured":`已配置 SSH`,"source.configuredCount":`本机 SSH Host · {count} 个`,"source.configuredGroup":`已配置 SSH Host · {count}(点击快速添加)`,"source.connected":`已连接`,"source.connecting":`连接中`,"source.controlPlane":`控制面来源`,"source.copy":`复制`,"source.copyCommand":`复制 SSH 隧道命令`,"source.copyError":`无法复制命令,请手动复制下方命令。`,"source.copied":`已复制`,"source.description":`已读取全部显式 Host(含 Include);通配规则不会作为具体来源。先运行命令,LoopX 不读取密钥或配置细节。`,"source.host":`本机 SSH Host`,"source.hostEmpty":`~/.ssh/config 中没有可直接选择的显式 Host。`,"source.hostLoadError":`无法读取本机 SSH Host。`,"source.hostPlaceholder":`输入或搜索 Host`,"source.invalid":`SSH 来源参数无效。`,"source.loadingHosts":`正在读取…`,"source.localInteractive":`本机交互`,"source.localPort":`本地端口`,"source.manual":`手动 URL`,"source.manualDescription":`远端来源始终按只读投影处理,不继承本机写权限。`,"source.name":`名称`,"source.namePlaceholder":`远程开发机`,"source.notAvailable":`不可用`,"source.readOnly":`SSH 隧道 · 只读`,"source.readOnlyNoticeDescription":`你可以查看 Goal、Task、证据与运行状态;写入、纠偏和 Agent 会话仍留在来源主机。`,"source.readOnlyNoticeTitle":`远端只读投影`,"source.readOnlyWriteError":`远端 SSH 隧道来源是只读投影,不能执行控制面写入。`,"source.refreshHosts":`重新读取 SSH Host`,"source.remove":`移除来源 {source}`,"source.removeCurrent":`移除当前来源`,"source.select":`选择控制面来源`,"source.selectHost":`请选择已配置的 SSH Host。`,"source.statusUrl":`本地转发 URL`,"source.tunnelCommandPending":`选择 Host 后生成隧道命令`,"machine.absent":`尚未配置`,"machine.action.create":`创建机器策略`,"machine.action.delete":`移除机器策略`,"machine.action.unchanged":`无需写入`,"machine.action.update":`更新机器策略`,"machine.applied":`机器策略已应用,并通过回读校验。`,"machine.applyError":`无法应用机器策略。`,"machine.applyPreview":`应用已审阅预览`,"machine.changedNamespaces":`变更的 Namespace`,"machine.capabilityCatalog":`机器能力目录`,"machine.capabilityEmpty":`当前没有注册可在机器作用域配置的能力。`,"machine.configured":`已配置`,"machine.confirmRollback":`确认回滚`,"machine.currentRevision":`当前 Revision`,"machine.currentValue":`当前机器值`,"machine.description":`与 Goal 设置共用能力目录。在这里管理受支持的机器默认值;仅支持 Goal 配置的能力会明确标注。`,"capabilities.rawJson":`高级:原始 JSON`,"machine.goalOnly":`此能力目前仅支持 Goal 级配置。请打开具体 Goal 的能力设置进行配置;这里不会设置机器级默认值。`,"machine.desiredRevision":`目标 Revision`,"machine.editorUnavailable":`当前版本未安装此 Namespace 的编辑器`,"machine.editorUnavailableDescription":`它仍会显示在 Registry 中;安装或升级对应的 Dashboard 编辑器后才能修改。`,"machine.editorMode":`编辑模式`,"machine.liveDefault":`实时默认值;Goal 显式覆盖优先`,"machine.liveDefaultDescription":`没有显式覆盖的 Goal 会在该能力下一次决策时读取当前机器策略。修改或移除策略会立即影响这些已有 Goal;显式 Goal 覆盖保持固定。`,"machine.genericNamespaceDescription":`使用 JSON 编辑这个已注册 Namespace。LoopX 会先按 capability 自己拥有的 schema 校验,再允许预览写入。`,"machine.jsonConfiguration":`Namespace 配置(JSON)`,"machine.jsonConfigurationHelp":`只更新当前 Namespace;其他机器配置会保留,Apply 仍锁定到已审阅的 Preview Revision。`,"machine.jsonEditor":`JSON`,"machine.editJson":`编辑 JSON`,"capabilities.jsonConfiguration":`Goal 配置(JSON)`,"capabilities.jsonHelp":`仅编辑当前 Goal 的已注册字段。修改后需重新预览才能应用。`,"capabilities.jsonInvalid":`请输入合法的 JSON 对象,且仅包含已注册的可编辑字段。`,"machine.backToForm":`返回表单`,"machine.jsonInvalid":`请先填写一个合法的 JSON object,再预览变更。`,"machine.loadError":`无法读取机器配置。`,"machine.machinePolicy":`机器策略`,"machine.namespaceCount":`已注册 Namespace`,"machine.namespaces":`配置 Namespace`,"machine.periodicReport":`周期报告`,"machine.periodicReportDescription":`为所有未显式覆盖的 Goal 提供默认报告策略;Goal 调度与发送消费解析后的有效配置。`,"machine.periodicReportActivation":`开启后将在已验证的阶段节点自动投递`,"machine.periodicReportActivationDescription":`这不是每周定时器。当 LoopX 验证 Goal 已完成一个阶段时,Agent 会生成并冻结报告,随后通过配置的 Goal Channel 自动发送。启用此订阅即授予持续投递权;发送失败或路由漂移会 fail closed 并进入修复。`,"machine.changeQualityActivation":`质量验证是质量门禁,不是新增授权`,"machine.changeQualityActivationDescription":`继承该策略的 Goal 会验证最终精确 diff。safe_fix 只允许在既有写入权限内执行至多一次有界修复;此设置不会授予文件、权限或合并权。`,"machine.replanCadenceActivation":`复核周期只改变时机,不改变执行权限`,"machine.replanCadenceActivationDescription":`没有显式覆盖的 Goal 会在下一次复核决策前读取此阈值;它不会创建 Turn、消耗配额或授予权限。`,"machine.preview":`审阅机器配置变更`,"machine.previewChanges":`预览变更`,"machine.previewError":`无法生成机器策略预览。`,"machine.previewLocked":`应用操作锁定到当前 Revision;若机器状态变化,LoopX 会要求重新预览。`,"machine.previewRollback":`预览回滚`,"machine.previewRemoval":`预览移除`,"machine.profilePreset":`Profile preset`,"machine.profilePresetHelp":`由 capability 管理的 preset,例如 weekly-progress。`,"machine.registry":`Typed Registry`,"machine.requiredFields":`开启后必须填写 profile preset、Goal Channel route 与有效时区。`,"machine.revision":`机器 Revision`,"machine.revisionLockedReady":`所有变更必须先预览;只有对应的机器 Revision 仍然有效时才会应用。`,"machine.rollbackAvailable":`可回滚上一次应用`,"machine.rollbackDescription":`先预览已保存的前一 Revision,再决定是否恢复。`,"machine.rollbackError":`无法完成回滚。`,"machine.rollbackPreviewDescription":`前一 Revision 已准备恢复,请确认执行本次回滚。`,"machine.rolledBack":`已恢复前一版机器策略,并通过校验。`,"machine.removed":`机器策略已移除,并通过回读校验。`,"machine.routeRef":`Goal Channel route`,"machine.routeRefHelp":`只填写公开 route alias;凭据与 provider identifier 不会进入此表单。`,"machine.timezone":`时区`,"machine.timezoneHelp":`填写 IANA 时区,例如 Asia/Shanghai。`,"machine.title":`机器配置`,"machine.unchanged":`机器策略已与预览一致,本次没有写入。`,"machine.visualEditor":`引导式`,"capabilities.atomicOverride":`Goal override 按完整配置生效`,"capabilities.atomicOverrideDescription":`Goal 的完整配置优先于机器默认值;LoopX 不会在两个作用域之间逐字段拼接。`,"capabilities.applyFailed":`Goal 能力变更未写入。`,"capabilities.applyPreview":`应用此预览`,"capabilities.catalog":`Goal 能力目录`,"capabilities.chooseGoal":`请先选择一个 Goal,再查看它的能力配置。`,"capabilities.defaultValue":`声明的默认值`,"capabilities.description":`查看当前 Goal 可用的能力,以及每项配置的准确作用域。`,"capabilities.editorPrepared":`已注册 typed editor contract`,"capabilities.effectiveSource":`当前生效来源`,"capabilities.empty":`当前 Goal 没有可用的能力描述。`,"capabilities.fields":`已注册字段`,"capabilities.goalPolicy":`Goal 能力策略`,"capabilities.goalScope":`Goal`,"capabilities.goalValue":`当前 Goal 值`,"capabilities.loadFailed":`无法加载 Goal 能力`,"capabilities.loading":`正在加载 Goal 能力…`,"capabilities.machineOnly":`此能力只能在机器作用域配置。`,"capabilities.machineValue":`实时机器默认值`,"capabilities.machineScope":`机器`,"capabilities.previewOnly":`当前读取结果来自真实配置;在 revision-locked preview/apply 路径接通前,Dashboard 不会提供 Goal 写入控件。`,"capabilities.preview":`锁定 revision 的变更预览`,"capabilities.previewChanges":`预览变更`,"capabilities.restoreInheritance":`恢复继承机器默认值`,"capabilities.previewFailed":`无法预览 Goal 能力变更。`,"capabilities.previewLocked":`应用时会重新校验这一个 plan revision;过期变更将被拒绝。`,"capabilities.partialWrite":`Goal 值已保存;共享投影仍需修复`,"capabilities.partialWriteDescription":`源 Goal 配置已经写入并回读,但共享 runtime 投影尚未同步;请勿重复提交本次变更。`,"capabilities.refreshSource":`刷新源配置`,"capabilities.readOnly":`只读能力`,"capabilities.revisionLockedReady":`所有变更必须先预览;只有对应的精确 revision 仍然有效时才会写入。`,"capabilities.retry":`重试`,"capabilities.source.capability_default":`能力默认值`,"capabilities.source.goal_override":`Goal override`,"capabilities.source.machine_default":`实时机器默认值`,"capabilities.source.not_configured":`未配置`,"capabilities.title":`Goal 能力`,"settings.close":`关闭设置`,"settings.appearance":`外观`,"settings.appearanceDescription":`管理当前浏览器里的工作区显示偏好。`,"settings.appearanceTabDescription":`主题和显示偏好`,"settings.capabilitiesTabDescription":`当前 Goal 的能力覆盖配置`,"settings.back":`返回工作区`,"settings.categories":`设置分类`,"settings.description":`管理工作区偏好与集成。`,"settings.eyebrow":`工作区偏好`,"settings.general":`通用`,"settings.goalConnections":`Goal 连接`,"settings.language":`语言`,"settings.languageDescription":`选择 LoopX Desktop 工作区使用的界面语言。`,"settings.languageEnglishDescription":`使用英文显示导航、设置和工作区控件。`,"settings.languageEnglish":`English`,"settings.languageSimplifiedChineseDescription":`使用简体中文显示导航、设置和工作区控件。`,"settings.languageSimplifiedChinese":`简体中文`,"settings.languageStoredLocally":`此偏好仅保存在当前设备。`,"settings.languageTabDescription":`当前设备的界面语言`,"settings.larkTabDescription":`App、群聊和 Goal Topic 连接`,"settings.machineTabDescription":`本机各 Capability 共享的 typed defaults`,"settings.notifications":`通知`,"settings.open":`设置`,"settings.themeDefault":`纸张`,"settings.themeDefaultDescription":`安静、轻量,适合长期查看。`,"settings.themeDescription":`选择工作区的视觉风格。设置会保存在当前浏览器本地。`,"settings.themeHighContrast":`高对比`,"settings.themeHighContrastDescription":`更强边框和更醒目的状态块。`,"settings.themeLoopx":`LoopX 标准`,"settings.themeLoopxDescription":`精确的黑白界面、Geist 字体与安静的细线结构。`,"settings.title":`设置`,"settings.workspaceDisplay":`工作区显示`,"settings.workspaceTheme":`工作区主题`,"session.closeRecord":`退出运行记录`,"session.details":`Session 详情`,"session.record":`执行 Session · 运行记录`,"session.recordDescription":`当前时间线已切换到这次 Session 的消息与 Turn 记录。`,"sidebar.createGoal":`创建 Goal`,"sidebar.delete":`删除`,"sidebar.deleteGoal":`删除 Goal`,"sidebar.manager":`LoopX 管家`,"sidebar.notifications":`设置`,"sidebar.owner":`个人工作区`,"sidebar.product":`个人 Agent 工作区`,"sidebar.resume":`恢复`,"sidebar.resumeGoal":`恢复 Goal`,"sidebar.stop":`停止`,"tasks.historyLoading":`正在加载历史…`,"tasks.historyError":`历史加载失败,已显示的内容仍可查看。`,"tasks.historyExpired":`历史快照已过期,重新加载后可继续查看。`,"tasks.historyRetry":`重新加载`,"tasks.historyEnd":`已显示全部完成记录`,"tasks.historyMore":`加载更多`,"tasks.historyLocalOnly":`请打开这台机器的 Dashboard 查看完整历史。`,"sidebar.sortGoals":`调整 Goal 顺序`,"sidebar.dragGoal":`拖拽调整顺序,或使用列表排序按钮`,"sidebar.moveUp":`上移 {goal}`,"sidebar.moveDown":`下移 {goal}`,"sidebar.goalMoved":`{goal} 已移至第 {position} 位`,"sidebar.orderNotSaved":`顺序已在本次页面生效;浏览器存储不可用,无法保存。`,"sidebar.stopGoal":`停止 Goal`,"sidebar.stopped":`已停止`,"sidebar.stoppedLoading":`正在加载已停止 Goal`,"sidebar.stoppedLoadFailed":`已停止 Goal 加载失败,其他 Goal 仍可使用。`,"sidebar.retryStopped":`重试`,"state.completed":`已完成`,"state.needsRepair":`需修复`,"state.needsYou":`等你`,"state.quiet":`安静运行`,"state.running":`推进中`,"state.stopped":`已停止`,"state.waiting":`等待条件`,"tasks.blocked":`受阻`,"tasks.agentLane":`工作 Agent`,"tasks.agentLaneDescription":`筛选这个 Goal 下的工作泳道`,"tasks.agentLaneFilter":`按工作 Agent 筛选`,"tasks.allAgentLanes":`全部 Agent({count})`,"tasks.chatAgentReplied":`Agent 已回复`,"tasks.chatPending":`已发送给 Agent`,"tasks.chatPendingDescription":`正在处理;只有经过确认的任务操作才会更新 Tasks。`,"tasks.chatRecent":`最近对话`,"tasks.chatUnchangedDescription":`本次对话没有直接修改 Tasks。需要执行时,可先转成 Task 草稿并确认。`,"tasks.chatViewReply":`查看回复`,"tasks.convertToTask":`转为 Task`,"tasks.completed":`已完成`,"runs.discoveryPartial":`部分执行详情暂不可用,正在重连;任务摘要不代表实时执行状态。`,"runs.discoveryOffline":`执行服务暂不可用,正在重连;保留的任务摘要可能已过时。`,"files.openConversation":`前往会话`,"files.exportSummary":`导出摘要`,"tasks.viewDescription":`先处理待确认,再查看工作与完成记录`,"tasks.viewLabel":`任务视图`,"tasks.listView":`列表`,"tasks.boardView":`看板`,"tasks.completedSummary":`已完成 {count} 项,近期完成明细由控制面按需投影。`,"tasks.emptyCompleted":`还没有完成的任务。`,"tasks.emptyConfirm":`没有待确认的任务。`,"tasks.emptyRunning":`没有待执行或进行中的任务。`,"tasks.emptySchedules":`没有定时任务。`,"tasks.emptyGoal":`这个 Goal 还没有任务。用下面的输入框描述下一步,LoopX 会先展示待确认操作。`,"tasks.markComplete":`标记完成:{name}`,"tasks.moreActions":`更多操作:{name}`,"tasks.openExecution":`查看执行过程:{name}`,"tasks.pending":`待处理`,"tasks.pendingAndRunning":`待执行 / 进行中`,"tasks.scheduled":`定时与持续`,"tasks.sessionError":`Session 异常`,"tasks.waiting":`待执行`,"tasks.waitingAge":`已等待 {age}`,"tasks.viewExecution":`查看执行过程`,"tasks.viewResult":`查看结果`,"time.days":`{count} 天`,"time.hours":`{count} 小时`,"timeline.emptyGoal":`这个 Goal 还没有新动态`,"timeline.emptyGoalDescription":`你可以直接询问进度或下发新的纠偏信息。`,"timeline.emptyWorkspace":`今天的工作区很安静`,"timeline.emptyWorkspaceDescription":`向 LoopX 管家描述一个 Goal,或询问今天最值得关注的事情。`,"timeline.gateHistory":`{count} 项历史 Gate`,"timeline.pending":`正在整理…`,"timeline.runCompleted":`{run}:已完成`,"timeline.review":`查看处理方式`,"timeline.reviewAndConfirm":`查看并确认`,"timeline.waitingConfirmation":`待你确认`}};function Gi(e,t){return t?Object.entries(t).reduce((e,[t,n])=>e.replaceAll(`{${t}}`,String(n)),e):e}function Ki(){try{return window.localStorage.getItem(`loopx-pw-locale`)===`en`?`en`:`zh-CN`}catch{return`zh-CN`}}function qi({children:e}){let[t,n]=(0,z.useState)(Ki);function r(e){n(e);try{window.localStorage.setItem(Ui,e)}catch{}}(0,z.useEffect)(()=>{document.documentElement.lang=t},[t]);let i=(0,z.useMemo)(()=>({locale:t,setLocale:r,t:(e,n)=>Gi(Wi[t][e],n)}),[t]);return(0,B.jsx)(Hi.Provider,{value:i,children:e})}function Ji(){let e=(0,z.useContext)(Hi);if(!e)throw Error(`useWorkspaceI18n must be used within WorkspaceI18nProvider`);return e}function Yi(e,t){let n={安静运行:`state.quiet`,等你:`state.needsYou`,等待条件:`state.waiting`,推进中:`state.running`,需修复:`state.needsRepair`,已完成:`state.completed`,已停止:`state.stopped`}[e];return n?Wi[t][n]:e}function Xi(e,t){let n={busy:`runs.running`,completed:`runs.completed`,failed:`runs.failed`,queued:`runs.queued`,ready:`runs.ready`,resume_failed:`runs.resumeFailed`,running:`runs.running`,waiting:`runs.waiting`};return e?n[e]?t(n[e]):e:t(`runs.unknown`)}function Zi(e,t){if(!e)return null;let n=new Date(e).getTime();if(Number.isNaN(n))return null;let r=Date.now()-n;if(r<36e5)return null;let i=Math.floor(r/864e5);return i>=1?t(`time.days`,{count:i}):t(`time.hours`,{count:Math.floor(r/36e5)})}var Qi;function H(e,t,n){function r(n,r){if(n._zod||Object.defineProperty(n,"_zod",{value:{def:r,constr:o,traits:new Set},enumerable:!1}),n._zod.traits.has(e))return;n._zod.traits.add(e),t(n,r);let i=o.prototype,a=Object.keys(i);for(let e=0;en?.Parent&&t instanceof n.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(o,"name",{value:e}),o}var $i=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},ea=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(Qi=globalThis).__zod_globalConfig??(Qi.__zod_globalConfig={});var ta=globalThis.__zod_globalConfig;function na(e){return e&&Object.assign(ta,e),ta}function ra(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function ia(e,t){return typeof t==`bigint`?t.toString():t}function aa(e){return{get value(){{let t=e();return Object.defineProperty(this,"value",{value:t}),t}}}}function oa(e){return e==null}function sa(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function ca(e,t){let n=e/t,r=Math.round(n),i=2**-52*Math.max(Math.abs(n),1);return Math.abs(n-r){};function ga(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var _a=aa(()=>{if(ta.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function va(e){if(ga(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return ga(n)!==!1&&Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)!==!1}function ya(e){return va(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var ba=new Set([`string`,`number`,`symbol`]);function xa(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Sa(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function U(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function Ca(e){return Object.keys(e).filter(t=>e[t]._zod.optin===`optional`&&e[t]._zod.optout===`optional`)}var wa={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function Ta(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);return Sa(e,fa(e._zod.def,{get shape(){let e={};for(let r in t){if(!(r in n.shape))throw Error(`Unrecognized key: "${r}"`);t[r]&&(e[r]=n.shape[r])}return da(this,`shape`,e),e},checks:[]}))}function Ea(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);return Sa(e,fa(e._zod.def,{get shape(){let r={...e._zod.def.shape};for(let e in t){if(!(e in n.shape))throw Error(`Unrecognized key: "${e}"`);t[e]&&delete r[e]}return da(this,`shape`,r),r},checks:[]}))}function Da(e,t){if(!va(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=e._zod.def.shape;for(let e in t)if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return da(this,`shape`,n),n}}))}function Oa(e,t){if(!va(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return da(this,`shape`,n),n}}))}function ka(e,t){if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t._zod.def.shape};return da(this,`shape`,n),n},get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function Aa(e,t,n){let r=t._zod.def.checks;if(r&&r.length>0)throw Error(`.partial() cannot be used on object schemas containing refinements`);return Sa(t,fa(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in r))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t])}else for(let t in r)i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t];return da(this,`shape`,i),i},checks:[]}))}function ja(e,t,n){return Sa(t,fa(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in i))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=new e({type:`nonoptional`,innerType:r[t]}))}else for(let t in r)i[t]=new e({type:`nonoptional`,innerType:r[t]});return da(this,`shape`,i),i}}))}function Ma(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function Fa(e){return typeof e==`string`?e:e?.message}function Ia(e,t,n){let r=e.message?e.message:Fa(e.inst?._zod.def?.error?.(e))??Fa(t?.error?.(e))??Fa(n.customError?.(e))??Fa(n.localeError?.(e))??`Invalid input`,{inst:i,continue:a,input:o,...s}=e;return s.path??=[],s.message=r,t?.reportInput&&(s.input=o),s}function La(e){return Array.isArray(e)?`array`:typeof e==`string`?`string`:`unknown`}function Ra(...e){let[t,n,r]=e;return typeof t==`string`?{message:t,code:`custom`,input:n,inst:r}:{...t}}var za=(e,t)=>{e.name=`$ZodError`,Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),e.message=JSON.stringify(t,ia,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},Ba=H(`$ZodError`,za),Va=H(`$ZodError`,za,{Parent:Error});function Ha(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}function Ua(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i(t,n,r,i)=>{let a=r?{...r,async:!1}:{async:!1},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise)throw new $i;if(o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>Ia(e,a,na())));throw ha(t,i?.callee),t}return o.value},Ga=e=>async(t,n,r,i)=>{let a=r?{...r,async:!0}:{async:!0},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise&&(o=await o),o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>Ia(e,a,na())));throw ha(t,i?.callee),t}return o.value},Ka=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new $i;return a.issues.length?{success:!1,error:new(e??Ba)(a.issues.map(e=>Ia(e,i,na())))}:{success:!0,data:a.value}},qa=Ka(Va),Ja=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?{success:!1,error:new e(a.issues.map(e=>Ia(e,i,na())))}:{success:!0,data:a.value}},Ya=Ja(Va),Xa=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Wa(e)(t,n,i)},Za=e=>(t,n,r)=>Wa(e)(t,n,r),Qa=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ga(e)(t,n,i)},$a=e=>async(t,n,r)=>Ga(e)(t,n,r),eo=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ka(e)(t,n,i)},to=e=>(t,n,r)=>Ka(e)(t,n,r),no=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ja(e)(t,n,i)},ro=e=>async(t,n,r)=>Ja(e)(t,n,r),io=/^[cC][0-9a-z]{6,}$/,ao=/^[0-9a-z]+$/,oo=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,so=/^[0-9a-vA-V]{20}$/,co=/^[A-Za-z0-9]{27}$/,lo=/^[a-zA-Z0-9_-]{21}$/,uo=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,fo=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,po=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,mo=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,ho=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;function go(){return new RegExp(ho,`u`)}var _o=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,vo=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,yo=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,bo=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,xo=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,So=/^[A-Za-z0-9_-]*$/,Co=/^https?$/,wo=/^\+[1-9]\d{6,14}$/,To=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`,Eo=RegExp(`^${To}$`);function Do(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Oo(e){return RegExp(`^${Do(e)}$`)}function ko(e){let t=Do({precision:e.precision}),n=[`Z`];e.local&&n.push(``),e.offset&&n.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let r=`${t}(?:${n.join(`|`)})`;return RegExp(`^${To}T(?:${r})$`)}var Ao=e=>{let t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??``}}`:`[\\s\\S]*`;return RegExp(`^${t}$`)},jo=/^-?\d+$/,Mo=/^-?\d+(?:\.\d+)?$/,No=/^(?:true|false)$/i,Po=/^null$/i,Fo=/^[^A-Z]*$/,Io=/^[^a-z]*$/,Lo=H(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),Ro={number:`number`,bigint:`bigint`,object:`date`},zo=H(`$ZodCheckLessThan`,(e,t)=>{Lo.init(e,t);let n=Ro[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.maximum:n.exclusiveMaximum)??1/0;t.value{(t.inclusive?r.value<=t.value:r.value{Lo.init(e,t);let n=Ro[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.minimum:n.exclusiveMinimum)??-1/0;t.value>r&&(t.inclusive?n.minimum=t.value:n.exclusiveMinimum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Vo=H(`$ZodCheckMultipleOf`,(e,t)=>{Lo.init(e,t),e._zod.onattach.push(e=>{var n;(n=e._zod.bag).multipleOf??(n.multipleOf=t.value)}),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?n.value%t.value===BigInt(0):ca(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),Ho=H(`$ZodCheckNumberFormat`,(e,t)=>{Lo.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=wa[t.format];e._zod.onattach.push(e=>{let r=e._zod.bag;r.format=t.format,r.minimum=i,r.maximum=a,n&&(r.pattern=jo)}),e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}sa&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),Uo=H(`$ZodCheckMaxLength`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.maximum??1/0;t.maximum{let r=n.value;if(r.length<=t.maximum)return;let i=La(r);n.issues.push({origin:i,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Wo=H(`$ZodCheckMinLength`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.minimum??-1/0;t.minimum>n&&(e._zod.bag.minimum=t.minimum)}),e._zod.check=n=>{let r=n.value;if(r.length>=t.minimum)return;let i=La(r);n.issues.push({origin:i,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Go=H(`$ZodCheckLengthEquals`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag;n.minimum=t.length,n.maximum=t.length,n.length=t.length}),e._zod.check=n=>{let r=n.value,i=r.length;if(i===t.length)return;let a=La(r),o=i>t.length;n.issues.push({origin:a,...o?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),Ko=H(`$ZodCheckStringFormat`,(e,t)=>{var n,r;Lo.init(e,t),e._zod.onattach.push(e=>{let n=e._zod.bag;n.format=t.format,t.pattern&&(n.patterns??=new Set,n.patterns.add(t.pattern))}),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),qo=H(`$ZodCheckRegex`,(e,t)=>{Ko.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),Jo=H(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=Fo,Ko.init(e,t)}),Yo=H(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=Io,Ko.init(e,t)}),Xo=H(`$ZodCheckIncludes`,(e,t)=>{Lo.init(e,t);let n=xa(t.includes),r=new RegExp(typeof t.position==`number`?`^.{${t.position}}${n}`:n);t.pattern=r,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(r)}),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),Zo=H(`$ZodCheckStartsWith`,(e,t)=>{Lo.init(e,t);let n=RegExp(`^${xa(t.prefix)}.*`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),Qo=H(`$ZodCheckEndsWith`,(e,t)=>{Lo.init(e,t);let n=RegExp(`.*${xa(t.suffix)}$`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),$o=H(`$ZodCheckOverwrite`,(e,t)=>{Lo.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),es=class{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),--this.indent}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(` +通知:仅在需要我时`,"composer.nextAction":`询问下一步`,"composer.nextActionPrompt":`我现在该做什么?`,"composer.prepareDraft":`填入编辑框,确认后再发送`,"composer.send":`发送`,"composer.sendMessage":`向 LoopX 发送消息`,"composer.sendMessageHint":`发送消息`,"composer.sentImageAlt":`移除图片 {name}`,"conversation.agentPending":`正在整理…`,"conversation.close":`关闭对话回执`,"conversation.convertHint":`将 Agent 最新回复转为 Task 草稿`,"conversation.full":`查看完整对话`,"conversation.receipt":`对话回执`,"conversation.replying":`正在回复`,"conversation.title":`管家对话`,"conversation.toTask":`转为 Task`,"digest.away":`自上次访问以来的运行记录`,"digest.completed":`新增完成运行`,"digest.failed":`新增失败或中断`,"digest.needsYou":`当前待确认`,"feedback.applying":`正在执行:{title}`,"feedback.cancelFailed":`取消失败:{error}`,"feedback.completed":`已完成:{title}`,"feedback.executionFailed":`执行失败:{error}`,"feedback.gateRequired":`需要你确认:{summary}`,"feedback.notCompleted":`操作未完成:{status}`,"feedback.goalRefreshFailed":`已打开 Goal,但暂时无法刷新最新状态。请点击刷新重试。`,"feedback.preparingPreview":`正在准备确认预览:{title}`,"feedback.previewFailed":`无法准备确认预览:{error}`,"feedback.sendFailed":`发送失败:{error}`,"feedback.sendGenericError":`消息发送失败,请稍后重试。`,"feedback.stale":`状态已变化,操作未执行,请重新生成确认预览。`,"feedback.taskDraftCreated":`已根据回复生成 Task 草稿。编辑后发送,LoopX 会先展示确认预览。`,"goal.defaultTitle":`新的个人 Goal`,"goal.initialTodo":`按完成标准推进:{criteria}`,"goal.objectiveBoundary":`执行边界:{boundary}`,"goal.objectiveCompletion":`完成标准:{criteria}`,"drawer.advancedDiagnostics":`高级诊断`,"drawer.agentWorking":`Agent 正在继续执行,记录会自动更新。`,"drawer.analysis":`正在分析`,"drawer.apply":`确认并应用`,"drawer.applying":`正在应用…`,"drawer.attentionBlocking":`正在阻塞 Agent`,"drawer.attentionWaiting":`等待你的决定`,"drawer.autoNotify":`Human-gate 自动通知`,"drawer.branch":`分支`,"drawer.closeDetail":`关闭详情:返回{context}`,"drawer.connected":`已连接`,"drawer.correctionDescription":`消息会沿用当前 Goal、Todo 与 Agent Session 上下文。`,"drawer.correctionLabel":`与 {agent} 纠偏`,"drawer.correctionPlaceholder":`例如:先关注权限风险,暂时不要提交…`,"drawer.correctionSend":`发送纠偏`,"drawer.correctionTextarea":`输入纠偏信息:Goal {goal},Agent {agent},Run {run}`,"drawer.copyRepository":`复制仓库标识`,"drawer.copyRepositoryDone":`已复制仓库标识`,"drawer.copyRepositoryError":`复制失败,请检查浏览器剪贴板权限。`,"drawer.copyRepositorySuccess":`已复制,可粘贴到其他工具。`,"drawer.cost":`成本 24h / 7d`,"drawer.costShort":`成本`,"drawer.durationShort":`时长`,"drawer.period24h":`24 小时`,"drawer.period7d":`7 天`,"drawer.tokens":`Token 24 小时 / 7 天`,"drawer.tokensShort":`Token`,"drawer.usageNotMeasured":`未采集`,"drawer.currentGoal":`当前 Goal`,"attentionDetail.title":`事项说明`,"attentionDetail.request":`需要你做什么`,"attentionDetail.decision":`需要作出决定`,"attentionDetail.unknownRequest":`来源未明确,请先查看来源再判断`,"attentionDetail.open":`当前投影中待处理`,"attentionDetail.closed":`已关闭`,"attentionDetail.deferred":`已推迟`,"attentionDetail.superseded":`已被替代`,"attentionDetail.unknown":`来源未提供状态`,"attentionDetail.unavailable":`来源尚未确认当前事项,请刷新后再操作`,"attentionDetail.unknownReason":`来源尚未提供原因。`,"attentionDetail.targetTodo":`关联的待解锁 Todo`,"attentionDetail.targetAgent":`事项指定的 Agent`,"attentionDetail.scope":`声明的决策范围`,"attentionDetail.notProvided":`来源未提供`,"attentionDetail.replacement":`替代 Todo`,"attentionDetail.openReplacement":`打开替代事项`,"attentionDetail.boundary":`阅读详情不会关闭 gate 或授予权限;作出决定前仍需新的操作预览。`,"drawer.decisionDefaultEvidence":`当前状态没有附加公开安全证据;下一步仍会先展示 Preview。`,"drawer.decisionDefaultReason":`该决定会影响当前 Todo 的下一步执行。`,"drawer.decisionDefer":`稍后决定`,"drawer.decisionMore":`更多决定`,"drawer.decisionReject":`拒绝`,"drawer.decisionReview":`查看影响并决定`,"drawer.dependencies":`依赖`,"drawer.detailsAndActions":`详情与操作`,"drawer.duration":`运行时长 24h / 7d`,"drawer.evidence":`证据`,"drawer.executionHistory":`执行历史`,"drawer.executionRecord":`运行记录`,"drawer.executionRecordAndResult":`执行过程与结果`,"drawer.explainDecision":`解释此决定`,"drawer.gateApproveHint":`在终端执行一条命令即可完成审批:`,"drawer.gateRejectHint":`不同意就把末尾的 approve 换成 reject。执行后这条提醒会自动消失。`,"drawer.gateRequiresHost":`需要宿主确认`,"drawer.gateRequiresHostDescription":`页面无权直接批准这类权限变更,你的点击没有写入任何内容。`,"drawer.goalAutoRun":`当前 Goal 的自动运行`,"drawer.goalChanges":`当前 Goal 的待确认变更`,"drawer.goalDetails":`Goal 详情`,"drawer.group":`群聊`,"drawer.inspectorFull":`切换到全屏`,"drawer.inspectorFullView":`全屏查看`,"drawer.inspectorHalf":`切换到半屏`,"drawer.inspectorHalfView":`半屏查看`,"drawer.lastNotification":`最近通知`,"drawer.larkConfigure":`管理 Lark connection`,"drawer.larkConnect":`连接 Lark App`,"drawer.larkConnection":`Lark connection`,"drawer.larkNotConfigured":`未配置`,"drawer.larkNotConfiguredDescription":`配置后,当这个 Goal 出现需要你确认的变更时,会自动发飞书通知。`,"drawer.managerChanges":`管家待确认变更`,"drawer.moreActions":`更多操作`,"drawer.moreRunActions":`更多运行操作`,"drawer.nextTransition":`下一转换`,"drawer.noExecutionHistory":`暂无执行记录。`,"drawer.noRun":`尚未启动执行 Session`,"drawer.noRunDescription":`Agent 开始执行后,运行记录会稳定显示在这里。`,"drawer.notAssigned":`未分配`,"drawer.notLinked":`未关联`,"drawer.notSet":`未设置`,"drawer.outputDetails":`产出详情`,"drawer.outputRecorded":`该产出已记录到当前 Goal。`,"drawer.outputSafePreview":`公开安全产出预览`,"drawer.outputRun":`Run`,"drawer.outputTodo":`Todo`,"drawer.outputs":`本次运行产出`,"drawer.previewUnavailable":`此产出没有可用的公开安全内联预览。`,"drawer.priority":`优先级`,"drawer.progress":`进度`,"drawer.proposalApplied":`已应用,LoopX 状态将刷新。`,"drawer.proposalApplyFailed":`应用失败,没有写入任何变更。`,"drawer.proposalApplyFailedHint":`请刷新 Goal 状态后重新生成;若仍失败,可保留此页并查看高级诊断。`,"drawer.proposalClose":`关闭`,"drawer.proposalDefer":`稍后`,"drawer.proposalDeferred":`已暂缓,可稍后继续应用或重新生成。`,"drawer.proposalEnterGoal":`进入新 Goal`,"drawer.proposalExplainer":`确认后,LoopX 会执行这项变更并显示写入结果。关闭或取消不会修改任何状态。`,"drawer.proposalRecheck":`按最新状态重新检查`,"drawer.proposalRegenerate":`基于最新状态重试`,"drawer.proposalRejected":`已拒绝,这项变更不会写入。`,"drawer.proposalStale":`来源状态已变化,请按最新状态重新检查。`,"drawer.proposalViewGoal":`查看更新后的 Goal`,"drawer.reassign":`改派给`,"drawer.reassignSummary":`重新分配:{task}`,"drawer.reason":`原因`,"drawer.recoveryDescription":`本地历史已经保留,请选择恢复路径。`,"drawer.recoveryFailed":`上游 Session 恢复失败`,"drawer.recoveryNewSession":`携带上下文开始新 Session`,"drawer.recoveryRetry":`重试恢复`,"drawer.repositoryRole":`执行工作区`,"drawer.repository":`仓库`,"drawer.replyMode":`回复方式`,"drawer.subagentApplied":`已写入,并通过共享 Goal 状态读回校验。`,"drawer.subagentAppliedRefreshFailed":`已写入并通过共享 Goal 状态读回;状态投影刷新失败,可稍后手动刷新。`,"drawer.subagentApplying":`正在写入并校验共享状态读回…`,"drawer.subagentApplyFailed":`子代理设置写入失败。`,"drawer.subagentChildLimit":`当前上限`,"drawer.subagentConfirmDisable":`确认关闭子代理执行`,"drawer.subagentConfirmEnable":`确认开启子代理执行`,"drawer.subagentCurrentBoundary":`当前任务领域限制`,"drawer.subagentDescription":`仅在 Todo、配额、能力和写入范围门禁全部通过后,允许运行时为相互独立的任务临时创建子代理;不会强制并行,也不会授予持久权限。`,"drawer.subagentDisable":`预览关闭子代理执行`,"drawer.subagentDisableSummary":`这个 Goal 将不再创建新的子代理;现有 Todo 归属和执行记录不受影响。`,"drawer.subagentDomainInvalid":`所选任务领域限制无效。`,"drawer.subagentDomainTodoCount":`匹配 {count} 个开放 Todo`,"drawer.subagentDomains":`任务领域限制(可选)`,"drawer.subagentDomainsEmpty":`当前没有开放的 advancement Todo 声明 task_domain;保持为空即可不按任务领域限制子代理执行。`,"drawer.subagentDomainsHint":`全部不选表示不按任务领域过滤;选择后只放行匹配且已声明领域的 Todo,其他执行门禁始终生效。`,"drawer.subagentDomainsUnrestricted":`不限制任务领域`,"drawer.subagentEnable":`预览开启子代理执行`,"drawer.subagentLabel":`Per-Goal 执行边界`,"drawer.subagentModel":`子 Agent 模型`,"drawer.subagentEffort":`子 Agent 推理档位`,"drawer.subagentModelDefault":`宿主默认`,"drawer.subagentLunaPreset":`使用 Luna / max`,"drawer.subagentClearModel":`清除模型偏好`,"drawer.subagentModelHint":`填写后通过“预览配置调整”保存,执行关闭时也可保存偏好;启动时须核验宿主支持情况。`,"drawer.subagentModelRequired":`设置推理档位前请先指定子 Agent 模型。`,"drawer.subagentMaxChildren":`最多子代理数`,"drawer.subagentNoChange":`当前 Goal 已是这个设置,没有写入任何内容。`,"drawer.subagentPending":`待确认`,"drawer.subagentPreviewBoundary":`预览配置调整`,"drawer.subagentPreviewFailed":`无法生成子代理设置预览。`,"drawer.subagentPreviewing":`正在核对最新 Goal 状态…`,"drawer.subagentPreviewReady":`预览已锁定,确认后才会写入这个 Goal。`,"drawer.subagentPreviewSummary":`最多允许创建 {count} 个子代理;任务领域限制:{domains}。`,"drawer.subagentRemoteReadOnly":`当前来源只读,请在 Goal 所在主机上修改。`,"drawer.subagentTitle":`自适应子代理执行`,"drawer.remoteDetailsDescription":`SSH 来源只展示公开安全状态,不读取来源主机上的连接配置。`,"drawer.remoteDetailsUnavailable":`远端详情未投影`,"drawer.resumeNo":`否`,"drawer.resumeYes":`是`,"drawer.runDetails":`执行 Session`,"drawer.runInterrupt":`中断本次运行`,"drawer.runLatest":`查看最近执行过程`,"drawer.runNewSession":`开始新 Session`,"drawer.runCloseSession":`关闭 Session`,"drawer.runRecordEmpty":`还没有运行记录。Agent 尚未开始这次执行;请在“详情与操作”查看等待条件或恢复 Session。`,"drawer.runRecordProjected":`当前没有可展示的逐步运行记录。LoopX 已读取到 {completed}/{total} 的投影进度{outputs};请在“详情与操作”检查 Session 状态。`,"drawer.runRecordProjectedOutputs":`和 {count} 项产出`,"drawer.runRoleAssistant":`已完成`,"drawer.runRoleSystem":`需检查`,"drawer.runRoleUser":`收到任务`,"drawer.runView":`Session 视图`,"drawer.scheduleAdd":`添加定时检查`,"drawer.scheduleDefaultNotification":`仅在需要你时通知`,"drawer.scheduleDefaultStop":`Goal 完成或 owner 停止`,"drawer.scheduleDefaultTarget":`由 LoopX 调度器按 Goal 配置唤醒。`,"drawer.scheduleEdit":`改为每 2 小时`,"drawer.scheduleLast":`上次执行`,"drawer.scheduleLocalTimezone":`本地时区`,"drawer.scheduleNext":`下次执行`,"drawer.scheduleNeverRun":`尚未执行`,"drawer.scheduleNotification":`通知`,"drawer.schedulePause":`暂停`,"drawer.schedulePending":`等待调度`,"drawer.scheduleResume":`恢复`,"drawer.scheduleRunNow":`立即运行`,"drawer.scheduleStop":`停止{kind}`,"drawer.scheduleStopCondition":`停止条件`,"drawer.scheduleTimezone":`时区`,"drawer.sessionRecoverable":`可恢复`,"drawer.sessionStatus":`会话状态`,"drawer.setupHeartbeat":`设置 Heartbeat`,"drawer.taskActions":`Todo 待确认操作`,"drawer.taskAdvancement":`推进任务`,"drawer.taskBlock":`标记阻塞`,"drawer.taskComplete":`标记完成`,"drawer.taskCompletedNote":`该任务保留为只读记录。`,"drawer.taskCompletedTitle":`任务已完成`,"drawer.taskDefer":`暂缓`,"drawer.taskDeferCondition":`Todo 暂缓恢复条件`,"drawer.taskDeferInvalid":`条件格式不受支持;请使用下列可判定条件。`,"drawer.taskDeferPlaceholder":`例如 resume_at:2026-09-14T09:00:00+08:00`,"drawer.taskDeferReview":`检查暂缓`,"drawer.taskDeferSupported":`支持 todo_done、pr_merged、capacity_available 与带时区的 resume_at 条件。`,"drawer.taskDeferUntil":`暂缓至`,"drawer.taskDetails":`Todo 详情`,"drawer.taskInfo":`任务信息`,"drawer.taskManage":`管理任务`,"drawer.taskNextCompleted":`可创建后续任务`,"drawer.taskNextOpen":`推进或更新状态`,"drawer.taskOrdinary":`普通任务`,"drawer.taskStatusBlocked":`受阻`,"drawer.taskStatusDeferred":`已延期`,"drawer.resumeWhen":`恢复条件`,"drawer.resumeState":`恢复状态`,"drawer.resumePending":`等待条件满足`,"drawer.resumeReady":`可恢复`,"drawer.resumeReceipt":`恢复回执`,"drawer.taskNextDeferred":`等待恢复条件满足后重新评估`,"drawer.taskNextResumeReady":`恢复条件已满足,等待生命周期重新规划`,"drawer.taskStatusCompleted":`已完成`,"drawer.taskStatusOpen":`待执行`,"drawer.taskSuccessor":`创建后续 Todo`,"drawer.taskSuccessorNote":`Owner 标记为阻塞,等待补充上下文。`,"drawer.taskSuccessorSummary":`创建后续 Todo:{task}`,"drawer.taskSuccessorText":`{task} 的后续工作`,"drawer.taskType":`任务类型`,"drawer.topic":`Topic`,"drawer.trigger":`触发方式`,"drawer.titleAttention":`需要你`,"drawer.titleOutput":`产出详情`,"drawer.titleProposalApplied":`执行结果`,"drawer.titleProposalConfirm":`确认执行`,"drawer.titleSchedule":`定时检查`,"drawer.unconfigured":`未配置`,"drawer.workspaceCandidates":`可选择的工作区`,"files.emptySummary":`公开安全产出`,"files.empty":`还没有文件、产出或已验证的阶段周报。`,"files.loadingReports":`正在加载已验证的阶段周报…`,"files.reportDelta":`+{added} 新增 · {changed} 变化`,"files.reportAdded":`新增`,"files.reportChanged":`变化`,"files.reportGeneration":`生成批次`,"files.reportLoadFailed":`无法加载已验证周报`,"files.reportPublication":`发布批次`,"files.title":`Files & Outputs`,"files.verifiedReport":`已验证阶段周报`,"header.agentUnavailable":`不可用`,"header.chatRuntime":`Chat`,"header.workAgentCount":`{count} 个工作 Agent`,"header.chat":`Chat`,"header.files":`Files`,"header.goalCapabilities":`能力配置`,"header.goalCapabilitiesDescription":`管理 Goal override 与继承的本机默认值。`,"header.goalDetails":`Goal 详情`,"header.goalDetailsDescription":`查看状态、用量、仓库、通知与 Session。`,"header.goalSettings":`Goal 设置`,"header.goalSettingsDescription":`打开 Goal 详情或能力配置`,"header.goalNavigation":`Goal 导航`,"header.goalView":`Goal 视图`,"header.live":`实时`,"header.manager":`LoopX 管家`,"header.managerDescription":`跨 Goal 的个人工作入口`,"header.managerOverview":`总览`,"header.managerView":`管家视图`,"header.openGoalNavigation":`打开 Goal 导航`,"header.readOnlySourceDescription":`{source} 通过 SSH 隧道只读展示`,"header.refresh":`刷新状态`,"header.refreshDone":`刚刚更新`,"header.refreshFailed":`刷新失败`,"header.refreshing":`刷新中`,"header.selectAgent":`选择 Agent`,"header.selectChatRuntime":`选择聊天 Runtime`,"header.tasks":`Tasks`,"header.themeBrutal":`切换到野兽主题`,"header.themePaper":`切换到默认主题`,"home.blockingSummary":`其中 {count} 项正在阻塞 Agent。`,"home.completedGoals":`已完成的 Goal`,"home.empty":`当前没有`,"startup.goalLoading":`正在加载状态…`,"startup.goalError":`状态加载失败`,"startup.progress":`已加载 {loaded} / {total} 个活跃 Goal`,"startup.partial":`Goal 状态正在逐个更新,当前统计尚不完整。`,"startup.independent":`此 Goal 的加载不会阻塞其他 Goal,你可以先查看已加载的内容。`,"startup.error.timeout":`读取超时,可在本地服务就绪后重试。`,"startup.error.network":`连接中断,请重试以重新连接。`,"startup.error.service":`Goal 状态读取失败。请稍后重试;若问题持续,请检查状态来源。`,"startup.error.access":`状态来源无法访问此 Goal 所需的文件或运行时目录。请检查该来源运行账户的访问权限,修复后重试。`,"startup.error.revision":`加载期间 Goal 目录发生变化,请刷新以同步。`,"startup.error.scope":`该 Goal 已不在当前来源中,请刷新目录。`,"startup.error.invalid":`无法解析状态响应,请刷新或检查 LoopX 更新。`,"startup.retry":`重试`,"startup.retryFailed":`重试失败的 Goal`,"startup.failedCount":`{count} 个 Goal 加载失败,已加载的 Goal 可继续使用。`,"home.greeting":`你好,我是 LoopX 管家`,"home.history":`历史`,"home.lane.needsYou":`需要你`,"home.lane.needsYouDescription":`等待你的决定、授权或补充信息`,"home.lane.observing":`观察中`,"home.lane.observingDescription":`持续监控,出现变化时再提醒你`,"home.lane.running":`执行中`,"home.lane.runningDescription":`Agent 正在推进并持续回传进展`,"home.lane.scheduled":`已安排`,"home.lane.scheduledDescription":`已经安排,等待时间或前置条件`,"home.noActivity":`尚无活动`,"home.noFirstActivity":`等待首次活动`,"home.noCompletedGoals":`还没有已完成的 Goal`,"home.preservedState":`保留状态,可随时恢复`,"home.stopped":`已停止`,"home.systemHealth":`系统健康:{summary}`,"home.taskCount":`{count} 个 Task`,"home.todayAt":`今天 {time}`,"home.waitingCount":`你有 {count} 项需要处理。`,"home.workspace":`Goal 工作区`,"lark.allMessages":`此 Topic 中的所有消息`,"lark.allTopicMessages":`所有 Topic 消息`,"lark.agentIngress":`Agent 入站方式`,"lark.agentAppPermissions":`每个选中的 Agent 都需要一个已具备群聊提及和回复能力的 Lark App。`,"lark.agentApps":`每个 Agent 的 Lark App`,"lark.agentAppsDescription":`默认使用上方 App;需要独立机器人身份时,可为 Agent 选择另一个兼容 App。`,"lark.agentAppSelection":`{agent} 的 Lark App`,"lark.appCreated":`App 已创建`,"lark.appCreateFailed":`创建失败`,"lark.appLoading":`正在加载可用的 Lark Apps…`,"lark.appPermissions":`该 App 能发送建联消息,但缺少接收群聊 @ 消息或自动回复所需的机器人权限。请开启 im:message.group_at_msg:readonly、im:message.send_as_bot 和事件 im.message.receive_v1,发布新版后刷新。`,"lark.appProfile":`Lark App`,"lark.apps":`Lark Apps`,"lark.autoReplyUnavailable":`自动回复暂不可用`,"lark.autoReplyReady":`自动回复可用`,"lark.bindGoal":`绑定到 Goal`,"lark.cancel":`取消`,"lark.cardinality":`一个 Lark App · 多个 Goal · 每个 Agent 一条隔离路由`,"lark.capture":`接收范围`,"lark.captureAddressed":`仅接收提及 App 或回复 App 的消息`,"lark.captureAll":`接收此 Goal Topic 中的所有消息`,"lark.captureScope":`接收范围`,"lark.captureScopeDescription":`决定哪些 Topic 消息会进入 LoopX;不会扩大 Agent 权限。`,"lark.closeConnection":`关闭连接弹窗`,"lark.closeCreate":`关闭创建弹窗`,"lark.closeSettings":`关闭 Lark 设置`,"lark.connect":`连接`,"lark.connectAllAgents":`连接全部已注册 Agent`,"lark.connectAllAgentsAction":`一键连接 {count} 个 Agent`,"lark.connectAllAgentsDescription":`一次引导创建 {count} 个隔离的 Agent Topic;请在对应 Topic 内发送请求,每个 Agent 保留独立路由和收件箱。`,"lark.connectApp":`连接 Lark App`,"lark.connection":`连接`,"lark.connections":`连接`,"lark.configuration":`Lark 配置`,"lark.continueFeishu":`在飞书中继续`,"lark.createAutomatically":`自动创建 Goal Topic`,"lark.createAutomaticallyDescription":`将为每个选中的 Agent 创建带 Agent 标识的专属 Topic。`,"lark.defaultAgentAppDescription":`用于查找目标群聊,并作为所有选中 Agent 的默认 App;下方的逐 Agent 选择可覆盖它。`,"lark.description":`管理可复用的 Lark App,并用独立 Topic 将群聊连接到 Goal。`,"lark.editConnection":`编辑 Lark 连接`,"lark.goalConnections":`{count} 个 Goal 连接`,"lark.goalTopicConnections":`Lark Goal Topic 连接`,"lark.groupChat":`群聊`,"lark.groupEmpty":`该机器人尚未加入可连接的群。请先在飞书群设置中添加这个机器人,再回来刷新或搜索。`,"lark.groupLoading":`正在读取该机器人已加入的群…`,"lark.groupSearch":`搜索该机器人已加入的群`,"lark.historyPermission":`历史补读权限(独立能力)`,"lark.health.eventProcessed":`已处理 {events} 条事件,成功回复 {replies} 条。`,"lark.health.eventUnverified":`事件订阅待验证`,"lark.health.eventUnverifiedDetail":`Provider listener 已就绪,但尚未收到消息事件。请启用 im.message.receive_v1、开通群聊 @ 消息权限并发布新版,然后在这个 Agent Topic 内发送新的 @ 消息;存在多条 Agent 路由时,群顶层消息会 fail closed。`,"lark.health.ignoredSelf":`已忽略机器人自身发送的消息,避免重复回复。`,"lark.health.invalidRouting":`路由配置无效`,"lark.health.invalidRoutingDetail":`连接已安全停用,请重新选择处理方式并保存。`,"lark.health.lastStatus":`最近事件状态:{status}`,"lark.health.listening":`监听中`,"lark.health.messageContextPermission":`消息权限不足`,"lark.health.messageContextPermissionDetail":`已收到消息事件,但无法读取群消息上下文。请发布并授权该 App 的群消息读取权限。`,"lark.health.notAddressed":`最近消息未直接 @ 机器人`,"lark.health.notAddressedDetail":`监听正常;当前连接只响应直接 @ 机器人或对机器人的回复。`,"lark.health.notStarted":`监听未启动`,"lark.health.notStartedDetail":`请刷新连接或重新启动 LoopX 后再试。`,"lark.health.processingFailed":`消息处理失败`,"lark.health.processingFailedDetail":`已收到消息事件,但 Agent 处理失败。请查看本地诊断后重试。`,"lark.health.queued":`已进入 Agent 收件箱`,"lark.health.queuedDetail":`消息由 {agent} 异步处理,不会启动通用 Chat Session。`,"lark.health.sourceDisconnected":`实时消息连接断开`,"lark.health.sourceDisconnectedDetail":`消息监听进程意外退出。请核对应用档案的平台:飞书应用选飞书,国际版 Lark 应用选 Lark,再检查连接及订阅错误。LoopX 正在重试;历史消息能读取,不代表能实时收消息。`,"lark.health.retrying":`监听重试中`,"lark.health.retryingDetail":`事件监听暂时中断,LoopX 正在自动重试。`,"lark.health.routeAmbiguous":`消息匹配多个 Goal`,"lark.health.routeAmbiguousDetail":`同一 Bot 和群聊存在多个完整群捕获连接。请让每个 Agent 使用独立 Bot,或只保留一个完整群连接。`,"lark.health.routeMismatch":`消息未匹配当前 Goal Topic`,"lark.health.routeMismatchDetail":`事件来自其他群聊或 Topic。请重新选择群聊并连接该 Goal,然后发送一条新的 @ 消息。`,"lark.health.routeUnavailable":`消息无法路由到 Goal`,"lark.health.routeUnavailableDetail":`当前连接信息不完整。请重新连接该 Goal 后再发送一条新的 @ 消息。`,"lark.health.starting":`正在启动`,"lark.health.startingDetail":`LoopX 正在启动该 App 的消息事件监听。`,"lark.health.unavailable":`自动回复不可用`,"lark.health.waiting":`等待处理`,"lark.incomingMessages":`接收消息`,"lark.ingressAsync":`异步收件箱`,"lark.ingressAsyncDescription":`写入 Agent 私有收件箱,等待后续显式处理。`,"lark.editPreservesIdentity":`保存会保留此 App、群和 Topic;旧连接默认升级为 Agent 异步收件箱。`,"lark.conversationKind":`连接用途`,"lark.managerConversation":`管家 · 同步对话`,"lark.workerConversation":`工作 Agent · 后台任务`,"lark.managerConversationDescription":`内置管家即时回应对话,长任务交给后台 Agent。群聊与私聊分别保存上下文。`,"lark.ingressLegacy":`待升级`,"lark.ingressLegacyDescription":`保存连接即可升级为 Agent 异步收件箱,已有消息保留在原 Topic 中。`,"lark.ingressQueue":`排队`,"lark.ingressQueueDescription":`进入同一 Agent Session 的有界 FIFO 队列,当前 Turn 完成后处理。`,"lark.ingressSteering":`实时引导`,"lark.ingressSteeringDescription":`投到当前活跃 Turn;没有精确活跃 Turn 时安全拒绝。`,"lark.loading":`加载 Lark 配置…`,"lark.management":`Lark 管理`,"lark.openEventSettings":`查看飞书事件配置`,"lark.mentions":`提及机器人`,"lark.mentionsOnly":`仅提及消息`,"lark.needsMessagePermissions":`需要消息权限`,"lark.needsSetup":`需要设置`,"lark.newApp":`新建 Lark App`,"lark.noAgentConfigured":`未配置 Agent`,"lark.noConnections":`暂无匹配的连接。`,"lark.noProfiles":`还没有可用的 lark-cli App profile。`,"lark.profileName":`Profile 名称`,"lark.profileValidation":`Profile 只能包含字母、数字、点、下划线和连字符。`,"lark.processing":`处理方式`,"lark.region":`区域`,"lark.registerAnother":`+ 注册另一个 Lark App — 通过飞书创建`,"lark.reopenFeishu":`重新打开飞书`,"lark.settingsConfigure":`配置 {goal}`,"lark.settingsDisconnect":`解绑 {goal}`,"lark.replyMode":`回复方式`,"lark.replyModeDescription":`当前只支持在来源 Topic 内回复,避免跨群或跨 Goal 投递。`,"lark.reusableApps":`{count} 个可复用 App`,"lark.reusableWorkspaceApp":`可复用工作区 App`,"lark.routesUnverified":`{count} 条 Lark 路由尚未验证`,"lark.saveConnection":`保存连接`,"lark.searchConnections":`搜索 Lark 连接`,"lark.searchPlaceholder":`搜索 App、群、Goal 或 Topic`,"lark.setupCopy":`LoopX 将通过 lark-cli 打开飞书官方创建页面。应用凭证保存在系统 Keychain,LoopX 只保留 profile 引用。`,"lark.someoneMentions":`有人提及 Agent`,"lark.targetAgent":`目标 Agent`,"lark.targetAgentDescription":`选择该 Goal 内已注册的 Agent。此连接只投递给一个 Agent,不广播、不授予新权限。实时引导与排队需要该 Agent 的精确活跃 Session。`,"lark.agentUnavailable":`{agent} · 已不可用`,"lark.selectRegisteredAgent":`请先选择可用的已注册 Agent;不会自动替换原先的接收者。`,"lark.topicPreview":`Topic 预览`,"lark.topicReply":`Topic 回复`,"lark.trigger":`触发方式`,"lark.waitingFeishu":`等待飞书完成创建`,"lark.waitingFeishuDescription":`请在新窗口中完成飞书授权,完成后会自动回到这里。`,"lark.waitingLink":`正在生成飞书官方创建链接…`,"lark.error.appCreate":`Lark App 创建失败`,"lark.error.appRequired":`请选择一个 Lark App profile。`,"lark.error.bind":`绑定失败`,"lark.error.bindPreview":`绑定预览失败`,"lark.error.configuration":`Lark 配置加载失败`,"lark.error.groupLookup":`无法读取该机器人已加入的群。请检查机器人状态后重试。`,"lark.error.groupLoad":`群聊加载失败`,"lark.error.invalidApp":`Lark App profile 不可用或尚未完成授权。`,"lark.error.messagePermissions":`该 App 缺少自动回复所需的机器人权限。请开启 im:message.group_at_msg:readonly 和 im:message:send_as_bot,发布新版后回来刷新重试。`,"lark.error.provider":`飞书 API 调用失败,且没有生成已验证回执。请稍后重试。`,"lark.error.setupPoll":`创建状态查询失败`,"lark.error.setupStart":`无法启动 Lark App 创建流程`,"lark.error.cliExecutable":`已找到配置的 lark-cli,但当前无法执行。请检查安装或启动参数。`,"lark.error.cliMissing":`未发现 lark-cli。请先安装 lark-cli,然后重新启动 LoopX。`,"lark.error.cliStart":`lark-cli 启动失败。请检查安装状态,然后重新启动 LoopX。`,"lark.error.disconnect":`解绑失败`,"notifications.autoNotify":`需要你确认时自动推送到群里`,"notifications.bind":`绑定到通知群`,"notifications.bindConfirm":`将把「{goal}」绑定到通知群「{target}」,绑定时会验证机器人在群内并发送一条确认消息。`,"notifications.bindFailed":`绑定失败`,"notifications.bound":`已绑定`,"notifications.confirmBind":`确认绑定`,"notifications.description":`把 Goal 里需要你确认的变更推送到飞书群。绑定和开关在这里完成,推送逻辑沿用现有通道。`,"notifications.disabled":`已停用`,"notifications.group":`通知群:{target}`,"notifications.loadFailed":`通知群列表加载失败`,"notifications.noTargets":`还没有可用的通知群。通知群涉及机器人私有身份,请先在终端配置一次:`,"notifications.notBound":`未绑定`,"notifications.recent":`最近 {time}`,"notifications.sentCount":`已发送 {count} 条`,"notifications.settings":`Goal 通知绑定`,"notifications.setupFailed":`设置失败`,"notifications.title":`飞书群通知`,"proposal.field.agentId":`Agent`,"proposal.field.cadence":`频率`,"proposal.field.completionCriteria":`完成标准`,"proposal.field.executionBoundary":`执行边界`,"proposal.field.goalId":`Goal ID`,"proposal.field.heartbeat":`Heartbeat`,"proposal.field.initialTodos":`首个任务`,"proposal.field.objective":`目标`,"proposal.field.operation":`操作`,"proposal.field.operationState":`操作状态`,"proposal.field.resultDelivery":`结果回传`,"proposal.field.confirmationBoundary":`确认边界`,"proposal.field.expiresAt":`过期时间`,"proposal.field.permission":`权限`,"proposal.field.reason":`原因`,"proposal.field.stopCondition":`停止条件`,"proposal.field.target":`检查内容`,"proposal.field.timezone":`时区`,"proposal.field.title":`标题`,"proposal.field.workspace":`执行工作区`,"actionReview.targetChanged":`预览目标与请求的 Goal 或操作不一致,请重新生成预览。`,"actionReview.ready_stop":`暂停可恢复。此预览已通过检查,可直接执行;完成仍需要读回验证。`,"actionReview.resume_review":`恢复自动调度前需要确认。实际执行仍受额度、Gate 和 Todo 约束。`,"actionReview.delete_review":`请确认从注册表移除这个已停止 Goal。项目文件与历史记录会保留。`,"actionReview.action_review":`执行前请检查此提案的目标与影响。`,"actionReview.protected_action":`此操作需要明确审阅。确认不能替代所需授权。`,"actionReview.unknown_permission":`无法识别权限分类。请重新检查提案后再继续。`,"actionReview.unknown_action":`无法识别此生命周期操作。请重新检查提案后再继续。`,"actionReview.incomplete_proposal":`预览缺少验证信息或可执行转换。请重新生成预览。`,"actionReview.authority_gate":`Gate 阻止执行。请满足其要求后重新检查提案。`,"actionReview.stale_proposal":`来源状态已变化。请重新生成预览,原决定不再适用。`,"actionReview.apply_pending":`正在执行,请等待读回结果后再重试。`,"actionReview.readback_verified":`操作已完成,结果状态已通过读回验证。`,"actionReview.readback_unverified":`操作返回但未通过读回验证。尚不能确认完成,请重新检查状态。`,"actionReview.operation_group_confirmation":`这份精确请求只能在已绑定飞书群的原始卡片确认;Dashboard 不提供本地执行入口。`,"actionReview.operation_result_delivery_pending":`操作结果已经记录,但原群结果卡尚未通过回读核验。`,"actionReview.apply_failed":`执行未完成。请检查失败原因并重新生成预览后再试。`,"actionReview.inactive_proposal":`此提案当前不可执行。请重新检查后再继续。`,"proposal.gate.default":`需要宿主确认`,"proposal.impact.default":`确认后会调用规范 LoopX 服务写入状态。`,"proposal.impact.goalCreate":`确认后会创建 Goal 和首个 Todo,并让选定 Agent 开始首轮推进。`,"proposal.impact.lifecycleDelete":`确认后会从 source registry 和 global registry 移除这个已停止 Goal;项目文件、历史状态文件和备份不会被删除。`,"proposal.impact.lifecycleResume":`确认后会恢复 Goal 的自动调度资格并移回 Active Goals;实际执行仍受 quota、Gate 和 Todo 约束。`,"proposal.impact.lifecycleStop":`确认后会停止自动推进,并将 Goal 移入折叠的「已停止」列表;历史、Todo 和证据都会保留,可随时恢复。`,"proposal.impact.protected":`该操作需要通过受保护的 LoopX 写入服务完成。`,"proposal.impact.operation":`这里仅展示同一份不可变条款。请在已绑定的飞书群确认或拒绝;确认只会消费一个规范 claim。`,"proposal.primary.apply":`确认并应用`,"proposal.primary.goalCreate":`创建 Goal 并开始首轮`,"proposal.primary.lifecycleDelete":`删除 Goal`,"proposal.primary.lifecycleResume":`恢复 Goal`,"proposal.primary.lifecycleStop":`停止 Goal`,"proposal.primary.todoStart":`创建任务并开始执行`,"proposal.primary.operationGroup":`前往飞书群确认`,"proposal.primary.operationResultPending":`结果卡回传待恢复`,"proposal.primary.operationResultVerified":`结果已核验`,"proposal.resultDelivery.verified":`已在原群卡片完成回读核验`,"proposal.resultDelivery.pending":`等待回传并核验原群卡片`,"proposal.summary.goalCreate":`创建 Goal:{title}`,"proposal.summary.heartbeat":`为当前 Goal 设置 Heartbeat`,"proposal.summary.lifecycleDelete":`删除 Goal:{title}`,"proposal.summary.lifecycleResume":`恢复 Goal:{title}`,"proposal.summary.lifecycleStop":`停止 Goal:{title}`,"proposal.summary.monitor":`为当前 Goal 创建定时检查:{target}`,"proposal.workspace.current":`当前本地工作区(未绑定 Repository)`,"proposal.workspace.named":`{workspace}(仅提供执行环境,不会自动关联仓库)`,"proposal.workspaceGate.agentImpact":`先完成 Agent 身份绑定,再重新检查原操作;当前没有写入 Goal。`,"proposal.workspaceGate.agentTitle":`先绑定 Agent`,"proposal.workspaceGate.defaultSummary":`请选择 Goal 所属工作区。`,"proposal.workspaceGate.selectionImpact":`选择工作区后会重新展示待确认操作,选择本身不会写入状态。`,"proposal.workspaceGate.selectionTitle":`选择 Goal 工作区`,"projection.agentAdvancingGoal":`Agent 正在推进当前 Goal`,"projection.agentIdle":`暂无需要你处理`,"projection.agentNeedsDecision":`Agent 等待你的决定`,"projection.agentPreparingNextStep":`Agent 正在整理下一步`,"projection.agentStopped":`已由你停止;历史、Todo 和证据仍保留`,"projection.agentWaitingExternal":`正在等待外部条件`,"projection.confirmAgentDecision":`请确认 Agent 下一步需要的权限或决策`,"projection.events24h":`24 小时内 {count} 个事件`,"projection.firstReadOnlyAdapterCheck":`执行首次只读适配检查并保存进度`,"projection.goalVerified":`Goal 状态、Todo 与注册信息已验证`,"projection.latestRun":`最近运行`,"projection.latestValidation":`最近验证`,"projection.nextUpdatePending":`等待 LoopX 更新下一步`,"projection.publicSafeProjection":`公开安全状态投影`,"projection.refreshState":`刷新 LoopX 状态,确认当前进度仍然有效`,"projection.runEvidenceAvailable":`存在可查看的运行证据`,"projection.runRecorded":`最近一次 LoopX 运行已经记录`,"projection.statusRefreshNeeded":`LoopX 状态需要刷新`,"projection.todoStatusUpdated":`Todo 状态已经更新,正在确认下一步`,"projection.validationRecorded":`最近验证已经记录`,"runs.completed":`已完成`,"runs.failed":`需检查`,"runs.interrupted":`已中断`,"runs.queued":`已安排`,"runs.ready":`可继续`,"runs.resumeFailed":`恢复失败`,"runs.running":`执行中`,"runs.unknown":`状态未知`,"runs.waiting":`等待条件`,"schedule.active":`执行中`,"schedule.heartbeat":`Goal Heartbeat`,"schedule.monitor":`定时与持续任务`,"schedule.paused":`已暂停`,"schedule.summary":`按 LoopX 调度约束持续检查`,"schedule.defaultTarget":`检查当前 Goal 的阻塞、进度与新产出`,"schedule.unsupportedCalendar":`当前定时检查不支持精确到星期或时刻的日历计划。请改用固定间隔,例如“每 30 分钟”“每 2 小时”或“每天”;草稿已保留,没有生成待确认操作。`,"source.add":`添加来源`,"source.addConfigured":`添加只读来源`,"source.addMethod":`来源添加方式`,"source.addSsh":`添加 SSH 隧道来源`,"source.closeForm":`关闭来源表单`,"source.configured":`已配置 SSH`,"source.configuredCount":`本机 SSH Host · {count} 个`,"source.configuredGroup":`已配置 SSH Host · {count}(点击快速添加)`,"source.connected":`已连接`,"source.connecting":`连接中`,"source.controlPlane":`控制面来源`,"source.copy":`复制`,"source.copyCommand":`复制 SSH 隧道命令`,"source.copyError":`无法复制命令,请手动复制下方命令。`,"source.copied":`已复制`,"source.description":`已读取全部显式 Host(含 Include);通配规则不会作为具体来源。先运行命令,LoopX 不读取密钥或配置细节。`,"source.host":`本机 SSH Host`,"source.hostEmpty":`~/.ssh/config 中没有可直接选择的显式 Host。`,"source.hostLoadError":`无法读取本机 SSH Host。`,"source.hostPlaceholder":`输入或搜索 Host`,"source.invalid":`SSH 来源参数无效。`,"source.loadingHosts":`正在读取…`,"source.localInteractive":`本机交互`,"source.localPort":`本地端口`,"source.manual":`手动 URL`,"source.manualDescription":`远端来源始终按只读投影处理,不继承本机写权限。`,"source.name":`名称`,"source.namePlaceholder":`远程开发机`,"source.notAvailable":`不可用`,"source.readOnly":`SSH 隧道 · 只读`,"source.readOnlyNoticeDescription":`你可以查看 Goal、Task、证据与运行状态;写入、纠偏和 Agent 会话仍留在来源主机。`,"source.readOnlyNoticeTitle":`远端只读投影`,"source.readOnlyWriteError":`远端 SSH 隧道来源是只读投影,不能执行控制面写入。`,"source.refreshHosts":`重新读取 SSH Host`,"source.remove":`移除来源 {source}`,"source.removeCurrent":`移除当前来源`,"source.select":`选择控制面来源`,"source.selectHost":`请选择已配置的 SSH Host。`,"source.statusUrl":`本地转发 URL`,"source.tunnelCommandPending":`选择 Host 后生成隧道命令`,"machine.absent":`尚未配置`,"machine.action.create":`创建机器策略`,"machine.action.delete":`移除机器策略`,"machine.action.unchanged":`无需写入`,"machine.action.update":`更新机器策略`,"machine.applied":`机器策略已应用,并通过回读校验。`,"machine.applyError":`无法应用机器策略。`,"machine.applyPreview":`应用已审阅预览`,"machine.changedNamespaces":`变更的 Namespace`,"machine.capabilityCatalog":`机器能力目录`,"machine.capabilityEmpty":`当前没有注册可在机器作用域配置的能力。`,"machine.configured":`已配置`,"machine.confirmRollback":`确认回滚`,"machine.currentRevision":`当前 Revision`,"machine.currentValue":`当前机器值`,"machine.description":`与 Goal 设置共用能力目录。在这里管理受支持的机器默认值;仅支持 Goal 配置的能力会明确标注。`,"capabilities.rawJson":`高级:原始 JSON`,"machine.goalOnly":`此能力目前仅支持 Goal 级配置。请打开具体 Goal 的能力设置进行配置;这里不会设置机器级默认值。`,"machine.desiredRevision":`目标 Revision`,"machine.editorUnavailable":`当前版本未安装此 Namespace 的编辑器`,"machine.editorUnavailableDescription":`它仍会显示在 Registry 中;安装或升级对应的 Dashboard 编辑器后才能修改。`,"machine.editorMode":`编辑模式`,"machine.liveDefault":`实时默认值;Goal 显式覆盖优先`,"machine.liveDefaultDescription":`没有显式覆盖的 Goal 会在该能力下一次决策时读取当前机器策略。修改或移除策略会立即影响这些已有 Goal;显式 Goal 覆盖保持固定。`,"machine.genericNamespaceDescription":`使用 JSON 编辑这个已注册 Namespace。LoopX 会先按 capability 自己拥有的 schema 校验,再允许预览写入。`,"machine.jsonConfiguration":`Namespace 配置(JSON)`,"machine.jsonConfigurationHelp":`只更新当前 Namespace;其他机器配置会保留,Apply 仍锁定到已审阅的 Preview Revision。`,"machine.jsonEditor":`JSON`,"machine.editJson":`编辑 JSON`,"capabilities.jsonConfiguration":`Goal 配置(JSON)`,"capabilities.jsonHelp":`仅编辑当前 Goal 的已注册字段。修改后需重新预览才能应用。`,"capabilities.jsonInvalid":`请输入合法的 JSON 对象,且仅包含已注册的可编辑字段。`,"machine.backToForm":`返回表单`,"machine.jsonInvalid":`请先填写一个合法的 JSON object,再预览变更。`,"machine.loadError":`无法读取机器配置。`,"machine.machinePolicy":`机器策略`,"machine.namespaceCount":`已注册 Namespace`,"machine.namespaces":`配置 Namespace`,"machine.periodicReport":`周期报告`,"machine.periodicReportDescription":`为所有未显式覆盖的 Goal 提供默认报告策略;Goal 调度与发送消费解析后的有效配置。`,"machine.periodicReportActivation":`开启后将在已验证的阶段节点自动投递`,"machine.periodicReportActivationDescription":`这不是每周定时器。当 LoopX 验证 Goal 已完成一个阶段时,Agent 会生成并冻结报告,随后通过配置的 Goal Channel 自动发送。启用此订阅即授予持续投递权;发送失败或路由漂移会 fail closed 并进入修复。`,"machine.changeQualityActivation":`质量验证是质量门禁,不是新增授权`,"machine.changeQualityActivationDescription":`继承该策略的 Goal 会验证最终精确 diff。safe_fix 只允许在既有写入权限内执行至多一次有界修复;此设置不会授予文件、权限或合并权。`,"machine.replanCadenceActivation":`复核周期只改变时机,不改变执行权限`,"machine.replanCadenceActivationDescription":`没有显式覆盖的 Goal 会在下一次复核决策前读取此阈值;它不会创建 Turn、消耗配额或授予权限。`,"machine.preview":`审阅机器配置变更`,"machine.previewChanges":`预览变更`,"machine.previewError":`无法生成机器策略预览。`,"machine.previewLocked":`应用操作锁定到当前 Revision;若机器状态变化,LoopX 会要求重新预览。`,"machine.previewRollback":`预览回滚`,"machine.previewRemoval":`预览移除`,"machine.profilePreset":`Profile preset`,"machine.profilePresetHelp":`由 capability 管理的 preset,例如 weekly-progress。`,"machine.registry":`Typed Registry`,"machine.requiredFields":`开启后必须填写 profile preset、Goal Channel route 与有效时区。`,"machine.revision":`机器 Revision`,"machine.revisionLockedReady":`所有变更必须先预览;只有对应的机器 Revision 仍然有效时才会应用。`,"machine.rollbackAvailable":`可回滚上一次应用`,"machine.rollbackDescription":`先预览已保存的前一 Revision,再决定是否恢复。`,"machine.rollbackError":`无法完成回滚。`,"machine.rollbackPreviewDescription":`前一 Revision 已准备恢复,请确认执行本次回滚。`,"machine.rolledBack":`已恢复前一版机器策略,并通过校验。`,"machine.removed":`机器策略已移除,并通过回读校验。`,"machine.routeRef":`Goal Channel route`,"machine.routeRefHelp":`只填写公开 route alias;凭据与 provider identifier 不会进入此表单。`,"machine.timezone":`时区`,"machine.timezoneHelp":`填写 IANA 时区,例如 Asia/Shanghai。`,"machine.title":`机器配置`,"machine.unchanged":`机器策略已与预览一致,本次没有写入。`,"machine.visualEditor":`引导式`,"capabilities.atomicOverride":`Goal override 按完整配置生效`,"capabilities.atomicOverrideDescription":`Goal 的完整配置优先于机器默认值;LoopX 不会在两个作用域之间逐字段拼接。`,"capabilities.applyFailed":`Goal 能力变更未写入。`,"capabilities.applyPreview":`应用此预览`,"capabilities.catalog":`Goal 能力目录`,"capabilities.chooseGoal":`请先选择一个 Goal,再查看它的能力配置。`,"capabilities.defaultValue":`声明的默认值`,"capabilities.description":`查看当前 Goal 可用的能力,以及每项配置的准确作用域。`,"capabilities.editorPrepared":`已注册 typed editor contract`,"capabilities.effectiveSource":`当前生效来源`,"capabilities.empty":`当前 Goal 没有可用的能力描述。`,"capabilities.fields":`已注册字段`,"capabilities.goalPolicy":`Goal 能力策略`,"capabilities.goalScope":`Goal`,"capabilities.goalValue":`当前 Goal 值`,"capabilities.loadFailed":`无法加载 Goal 能力`,"capabilities.loading":`正在加载 Goal 能力…`,"capabilities.machineOnly":`此能力只能在机器作用域配置。`,"capabilities.machineValue":`实时机器默认值`,"capabilities.machineScope":`机器`,"capabilities.previewOnly":`当前读取结果来自真实配置;在 revision-locked preview/apply 路径接通前,Dashboard 不会提供 Goal 写入控件。`,"capabilities.preview":`锁定 revision 的变更预览`,"capabilities.previewChanges":`预览变更`,"capabilities.restoreInheritance":`恢复继承机器默认值`,"capabilities.previewFailed":`无法预览 Goal 能力变更。`,"capabilities.previewLocked":`应用时会重新校验这一个 plan revision;过期变更将被拒绝。`,"capabilities.partialWrite":`Goal 值已保存;共享投影仍需修复`,"capabilities.partialWriteDescription":`源 Goal 配置已经写入并回读,但共享 runtime 投影尚未同步;请勿重复提交本次变更。`,"capabilities.refreshSource":`刷新源配置`,"capabilities.readOnly":`只读能力`,"capabilities.revisionLockedReady":`所有变更必须先预览;只有对应的精确 revision 仍然有效时才会写入。`,"capabilities.retry":`重试`,"capabilities.source.capability_default":`能力默认值`,"capabilities.source.goal_override":`Goal override`,"capabilities.source.machine_default":`实时机器默认值`,"capabilities.source.not_configured":`未配置`,"capabilities.title":`Goal 能力`,"settings.close":`关闭设置`,"settings.appearance":`外观`,"settings.appearanceDescription":`管理当前浏览器里的工作区显示偏好。`,"settings.appearanceTabDescription":`主题和显示偏好`,"settings.capabilitiesTabDescription":`当前 Goal 的能力覆盖配置`,"settings.back":`返回工作区`,"settings.categories":`设置分类`,"settings.description":`管理工作区偏好与集成。`,"settings.eyebrow":`工作区偏好`,"settings.general":`通用`,"settings.goalConnections":`Goal 连接`,"settings.language":`语言`,"settings.languageDescription":`选择 LoopX Desktop 工作区使用的界面语言。`,"settings.languageEnglishDescription":`使用英文显示导航、设置和工作区控件。`,"settings.languageEnglish":`English`,"settings.languageSimplifiedChineseDescription":`使用简体中文显示导航、设置和工作区控件。`,"settings.languageSimplifiedChinese":`简体中文`,"settings.languageStoredLocally":`此偏好仅保存在当前设备。`,"settings.languageTabDescription":`当前设备的界面语言`,"settings.larkTabDescription":`App、群聊和 Goal Topic 连接`,"settings.machineTabDescription":`本机各 Capability 共享的 typed defaults`,"settings.notifications":`通知`,"settings.open":`设置`,"settings.themeDefault":`纸张`,"settings.themeDefaultDescription":`安静、轻量,适合长期查看。`,"settings.themeDescription":`选择工作区的视觉风格。设置会保存在当前浏览器本地。`,"settings.themeHighContrast":`高对比`,"settings.themeHighContrastDescription":`更强边框和更醒目的状态块。`,"settings.themeLoopx":`LoopX 标准`,"settings.themeLoopxDescription":`精确的黑白界面、Geist 字体与安静的细线结构。`,"settings.title":`设置`,"settings.workspaceDisplay":`工作区显示`,"settings.workspaceTheme":`工作区主题`,"session.closeRecord":`退出运行记录`,"session.details":`Session 详情`,"session.record":`执行 Session · 运行记录`,"session.recordDescription":`当前时间线已切换到这次 Session 的消息与 Turn 记录。`,"sidebar.createGoal":`创建 Goal`,"sidebar.delete":`删除`,"sidebar.deleteGoal":`删除 Goal`,"sidebar.manager":`LoopX 管家`,"sidebar.notifications":`设置`,"sidebar.owner":`个人工作区`,"sidebar.product":`个人 Agent 工作区`,"sidebar.resume":`恢复`,"sidebar.resumeGoal":`恢复 Goal`,"sidebar.stop":`停止`,"tasks.historyLoading":`正在加载历史…`,"tasks.historyError":`历史加载失败,已显示的内容仍可查看。`,"tasks.historyExpired":`历史快照已过期,重新加载后可继续查看。`,"tasks.historyRetry":`重新加载`,"tasks.historyEnd":`已显示全部完成记录`,"tasks.historyMore":`加载更多`,"tasks.historyLocalOnly":`请打开这台机器的 Dashboard 查看完整历史。`,"sidebar.sortGoals":`调整 Goal 顺序`,"sidebar.dragGoal":`拖拽调整顺序,或使用列表排序按钮`,"sidebar.moveUp":`上移 {goal}`,"sidebar.moveDown":`下移 {goal}`,"sidebar.goalMoved":`{goal} 已移至第 {position} 位`,"sidebar.orderNotSaved":`顺序已在本次页面生效;浏览器存储不可用,无法保存。`,"sidebar.stopGoal":`停止 Goal`,"sidebar.stopped":`已停止`,"sidebar.stoppedLoading":`正在加载已停止 Goal`,"sidebar.stoppedLoadFailed":`已停止 Goal 加载失败,其他 Goal 仍可使用。`,"sidebar.retryStopped":`重试`,"state.completed":`已完成`,"state.needsRepair":`需修复`,"state.needsYou":`等你`,"state.quiet":`安静运行`,"state.running":`推进中`,"state.stopped":`已停止`,"state.waiting":`等待条件`,"tasks.blocked":`受阻`,"tasks.agentLane":`工作 Agent`,"tasks.agentLaneDescription":`筛选这个 Goal 下的工作泳道`,"tasks.agentLaneFilter":`按工作 Agent 筛选`,"tasks.allAgentLanes":`全部 Agent({count})`,"tasks.chatAgentReplied":`Agent 已回复`,"tasks.chatPending":`已发送给 Agent`,"tasks.chatPendingDescription":`正在处理;只有经过确认的任务操作才会更新 Tasks。`,"tasks.chatRecent":`最近对话`,"tasks.chatUnchangedDescription":`本次对话没有直接修改 Tasks。需要执行时,可先转成 Task 草稿并确认。`,"tasks.chatViewReply":`查看回复`,"tasks.convertToTask":`转为 Task`,"tasks.completed":`已完成`,"runs.discoveryPartial":`部分执行详情暂不可用,正在重连;任务摘要不代表实时执行状态。`,"runs.discoveryOffline":`执行服务暂不可用,正在重连;保留的任务摘要可能已过时。`,"files.openConversation":`前往会话`,"files.exportSummary":`导出摘要`,"tasks.viewDescription":`先处理待确认,再查看工作与完成记录`,"tasks.viewLabel":`任务视图`,"tasks.listView":`列表`,"tasks.boardView":`看板`,"tasks.completedSummary":`已完成 {count} 项,近期完成明细由控制面按需投影。`,"tasks.emptyCompleted":`还没有完成的任务。`,"tasks.emptyConfirm":`没有待确认的任务。`,"tasks.emptyRunning":`没有待执行或进行中的任务。`,"tasks.emptySchedules":`没有定时任务。`,"tasks.emptyGoal":`这个 Goal 还没有任务。用下面的输入框描述下一步,LoopX 会先展示待确认操作。`,"tasks.markComplete":`标记完成:{name}`,"tasks.moreActions":`更多操作:{name}`,"tasks.openExecution":`查看执行过程:{name}`,"tasks.pending":`待处理`,"tasks.pendingAndRunning":`待执行 / 进行中`,"tasks.scheduled":`定时与持续`,"tasks.sessionError":`Session 异常`,"tasks.waiting":`待执行`,"tasks.waitingAge":`已等待 {age}`,"tasks.viewExecution":`查看执行过程`,"tasks.viewResult":`查看结果`,"time.days":`{count} 天`,"time.hours":`{count} 小时`,"timeline.emptyGoal":`这个 Goal 还没有新动态`,"timeline.emptyGoalDescription":`你可以直接询问进度或下发新的纠偏信息。`,"timeline.emptyWorkspace":`今天的工作区很安静`,"timeline.emptyWorkspaceDescription":`向 LoopX 管家描述一个 Goal,或询问今天最值得关注的事情。`,"timeline.gateHistory":`{count} 项历史 Gate`,"timeline.pending":`正在整理…`,"timeline.runCompleted":`{run}:已完成`,"timeline.review":`查看处理方式`,"timeline.reviewAndConfirm":`查看并确认`,"timeline.waitingConfirmation":`待你确认`}};function Gi(e,t){return t?Object.entries(t).reduce((e,[t,n])=>e.replaceAll(`{${t}}`,String(n)),e):e}function Ki(){try{return window.localStorage.getItem(`loopx-pw-locale`)===`en`?`en`:`zh-CN`}catch{return`zh-CN`}}function qi({children:e}){let[t,n]=(0,z.useState)(Ki);function r(e){n(e);try{window.localStorage.setItem(Ui,e)}catch{}}(0,z.useEffect)(()=>{document.documentElement.lang=t},[t]);let i=(0,z.useMemo)(()=>({locale:t,setLocale:r,t:(e,n)=>Gi(Wi[t][e],n)}),[t]);return(0,B.jsx)(Hi.Provider,{value:i,children:e})}function Ji(){let e=(0,z.useContext)(Hi);if(!e)throw Error(`useWorkspaceI18n must be used within WorkspaceI18nProvider`);return e}function Yi(e,t){let n={安静运行:`state.quiet`,等你:`state.needsYou`,等待条件:`state.waiting`,推进中:`state.running`,需修复:`state.needsRepair`,已完成:`state.completed`,已停止:`state.stopped`}[e];return n?Wi[t][n]:e}function Xi(e,t){let n={busy:`runs.running`,completed:`runs.completed`,failed:`runs.failed`,queued:`runs.queued`,ready:`runs.ready`,resume_failed:`runs.resumeFailed`,running:`runs.running`,waiting:`runs.waiting`};return e?n[e]?t(n[e]):e:t(`runs.unknown`)}function Zi(e,t){if(!e)return null;let n=new Date(e).getTime();if(Number.isNaN(n))return null;let r=Date.now()-n;if(r<36e5)return null;let i=Math.floor(r/864e5);return i>=1?t(`time.days`,{count:i}):t(`time.hours`,{count:Math.floor(r/36e5)})}var Qi;function H(e,t,n){function r(n,r){if(n._zod||Object.defineProperty(n,"_zod",{value:{def:r,constr:o,traits:new Set},enumerable:!1}),n._zod.traits.has(e))return;n._zod.traits.add(e),t(n,r);let i=o.prototype,a=Object.keys(i);for(let e=0;en?.Parent&&t instanceof n.Parent?!0:t?._zod?.traits?.has(e)}),Object.defineProperty(o,"name",{value:e}),o}var $i=class extends Error{constructor(){super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`)}},ea=class extends Error{constructor(e){super(`Encountered unidirectional transform during encode: ${e}`),this.name=`ZodEncodeError`}};(Qi=globalThis).__zod_globalConfig??(Qi.__zod_globalConfig={});var ta=globalThis.__zod_globalConfig;function na(e){return e&&Object.assign(ta,e),ta}function ra(e){let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e,n])=>t.indexOf(+e)===-1).map(([e,t])=>t)}function ia(e,t){return typeof t==`bigint`?t.toString():t}function aa(e){return{get value(){{let t=e();return Object.defineProperty(this,"value",{value:t}),t}}}}function oa(e){return e==null}function sa(e){let t=+!!e.startsWith(`^`),n=e.endsWith(`$`)?e.length-1:e.length;return e.slice(t,n)}function ca(e,t){let n=e/t,r=Math.round(n),i=2**-52*Math.max(Math.abs(n),1);return Math.abs(n-r){};function ga(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}var _a=aa(()=>{if(ta.jitless||typeof navigator<`u`&&navigator?.userAgent?.includes(`Cloudflare`))return!1;try{return Function(``),!0}catch{return!1}});function va(e){if(ga(e)===!1)return!1;let t=e.constructor;if(t===void 0||typeof t!=`function`)return!0;let n=t.prototype;return ga(n)!==!1&&Object.prototype.hasOwnProperty.call(n,`isPrototypeOf`)!==!1}function ya(e){return va(e)?{...e}:Array.isArray(e)?[...e]:e instanceof Map?new Map(e):e instanceof Set?new Set(e):e}var ba=new Set([`string`,`number`,`symbol`]);function xa(e){return e.replace(/[.*+?^${}()|[\]\\]/g,`\\$&`)}function Sa(e,t,n){let r=new e._zod.constr(t??e._zod.def);return(!t||n?.parent)&&(r._zod.parent=e),r}function U(e){let t=e;if(!t)return{};if(typeof t==`string`)return{error:()=>t};if(t?.message!==void 0){if(t?.error!==void 0)throw Error("Cannot specify both `message` and `error` params");t.error=t.message}return delete t.message,typeof t.error==`string`?{...t,error:()=>t.error}:t}function Ca(e){return Object.keys(e).filter(t=>e[t]._zod.optin===`optional`&&e[t]._zod.optout===`optional`)}var wa={safeint:[-(2**53-1),2**53-1],int32:[-2147483648,2147483647],uint32:[0,4294967295],float32:[-34028234663852886e22,34028234663852886e22],float64:[-Number.MAX_VALUE,Number.MAX_VALUE]};function Ta(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.pick() cannot be used on object schemas containing refinements`);return Sa(e,fa(e._zod.def,{get shape(){let e={};for(let r in t){if(!(r in n.shape))throw Error(`Unrecognized key: "${r}"`);t[r]&&(e[r]=n.shape[r])}return da(this,`shape`,e),e},checks:[]}))}function Ea(e,t){let n=e._zod.def,r=n.checks;if(r&&r.length>0)throw Error(`.omit() cannot be used on object schemas containing refinements`);return Sa(e,fa(e._zod.def,{get shape(){let r={...e._zod.def.shape};for(let e in t){if(!(e in n.shape))throw Error(`Unrecognized key: "${e}"`);t[e]&&delete r[e]}return da(this,`shape`,r),r},checks:[]}))}function Da(e,t){if(!va(t))throw Error(`Invalid input to extend: expected a plain object`);let n=e._zod.def.checks;if(n&&n.length>0){let n=e._zod.def.shape;for(let e in t)if(Object.getOwnPropertyDescriptor(n,e)!==void 0)throw Error("Cannot overwrite keys on object schemas containing refinements. Use `.safeExtend()` instead.")}return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return da(this,`shape`,n),n}}))}function Oa(e,t){if(!va(t))throw Error(`Invalid input to safeExtend: expected a plain object`);return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t};return da(this,`shape`,n),n}}))}function ka(e,t){if(e._zod.def.checks?.length)throw Error(`.merge() cannot be used on object schemas containing refinements. Use .safeExtend() instead.`);return Sa(e,fa(e._zod.def,{get shape(){let n={...e._zod.def.shape,...t._zod.def.shape};return da(this,`shape`,n),n},get catchall(){return t._zod.def.catchall},checks:t._zod.def.checks??[]}))}function Aa(e,t,n){let r=t._zod.def.checks;if(r&&r.length>0)throw Error(`.partial() cannot be used on object schemas containing refinements`);return Sa(t,fa(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in r))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t])}else for(let t in r)i[t]=e?new e({type:`optional`,innerType:r[t]}):r[t];return da(this,`shape`,i),i},checks:[]}))}function ja(e,t,n){return Sa(t,fa(t._zod.def,{get shape(){let r=t._zod.def.shape,i={...r};if(n)for(let t in n){if(!(t in i))throw Error(`Unrecognized key: "${t}"`);n[t]&&(i[t]=new e({type:`nonoptional`,innerType:r[t]}))}else for(let t in r)i[t]=new e({type:`nonoptional`,innerType:r[t]});return da(this,`shape`,i),i}}))}function Ma(e,t=0){if(e.aborted===!0)return!0;for(let n=t;n{var n;return(n=t).path??(n.path=[]),t.path.unshift(e),t})}function Fa(e){return typeof e==`string`?e:e?.message}function Ia(e,t,n){let r=e.message?e.message:Fa(e.inst?._zod.def?.error?.(e))??Fa(t?.error?.(e))??Fa(n.customError?.(e))??Fa(n.localeError?.(e))??`Invalid input`,{inst:i,continue:a,input:o,...s}=e;return s.path??=[],s.message=r,t?.reportInput&&(s.input=o),s}function La(e){return Array.isArray(e)?`array`:typeof e==`string`?`string`:`unknown`}function Ra(...e){let[t,n,r]=e;return typeof t==`string`?{message:t,code:`custom`,input:n,inst:r}:{...t}}var za=(e,t)=>{e.name=`$ZodError`,Object.defineProperty(e,"_zod",{value:e._zod,enumerable:!1}),Object.defineProperty(e,"issues",{value:t,enumerable:!1}),e.message=JSON.stringify(t,ia,2),Object.defineProperty(e,"toString",{value:()=>e.message,enumerable:!1})},Ba=H(`$ZodError`,za),Va=H(`$ZodError`,za,{Parent:Error});function Ha(e,t=e=>e.message){let n={},r=[];for(let i of e.issues)i.path.length>0?(n[i.path[0]]=n[i.path[0]]||[],n[i.path[0]].push(t(i))):r.push(t(i));return{formErrors:r,fieldErrors:n}}function Ua(e,t=e=>e.message){let n={_errors:[]},r=(e,i=[])=>{for(let a of e.issues)if(a.code===`invalid_union`&&a.errors.length)a.errors.map(e=>r({issues:e},[...i,...a.path]));else if(a.code===`invalid_key`)r({issues:a.issues},[...i,...a.path]);else if(a.code===`invalid_element`)r({issues:a.issues},[...i,...a.path]);else{let e=[...i,...a.path];if(e.length===0)n._errors.push(t(a));else{let r=n,i=0;for(;i(t,n,r,i)=>{let a=r?{...r,async:!1}:{async:!1},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise)throw new $i;if(o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>Ia(e,a,na())));throw ha(t,i?.callee),t}return o.value},Ga=e=>async(t,n,r,i)=>{let a=r?{...r,async:!0}:{async:!0},o=t._zod.run({value:n,issues:[]},a);if(o instanceof Promise&&(o=await o),o.issues.length){let t=new((i?.Err)??e)(o.issues.map(e=>Ia(e,a,na())));throw ha(t,i?.callee),t}return o.value},Ka=e=>(t,n,r)=>{let i=r?{...r,async:!1}:{async:!1},a=t._zod.run({value:n,issues:[]},i);if(a instanceof Promise)throw new $i;return a.issues.length?{success:!1,error:new(e??Ba)(a.issues.map(e=>Ia(e,i,na())))}:{success:!0,data:a.value}},qa=Ka(Va),Ja=e=>async(t,n,r)=>{let i=r?{...r,async:!0}:{async:!0},a=t._zod.run({value:n,issues:[]},i);return a instanceof Promise&&(a=await a),a.issues.length?{success:!1,error:new e(a.issues.map(e=>Ia(e,i,na())))}:{success:!0,data:a.value}},Ya=Ja(Va),Xa=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Wa(e)(t,n,i)},Za=e=>(t,n,r)=>Wa(e)(t,n,r),Qa=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ga(e)(t,n,i)},$a=e=>async(t,n,r)=>Ga(e)(t,n,r),eo=e=>(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ka(e)(t,n,i)},to=e=>(t,n,r)=>Ka(e)(t,n,r),no=e=>async(t,n,r)=>{let i=r?{...r,direction:`backward`}:{direction:`backward`};return Ja(e)(t,n,i)},ro=e=>async(t,n,r)=>Ja(e)(t,n,r),io=/^[cC][0-9a-z]{6,}$/,ao=/^[0-9a-z]+$/,oo=/^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/,so=/^[0-9a-vA-V]{20}$/,co=/^[A-Za-z0-9]{27}$/,lo=/^[a-zA-Z0-9_-]{21}$/,uo=/^P(?:(\d+W)|(?!.*W)(?=\d|T\d)(\d+Y)?(\d+M)?(\d+D)?(T(?=\d)(\d+H)?(\d+M)?(\d+([.,]\d+)?S)?)?)$/,fo=/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12})$/,po=e=>e?RegExp(`^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-${e}[0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})$`):/^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$/,mo=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/,ho=`^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$`;function go(){return new RegExp(ho,`u`)}var _o=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,vo=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:))$/,yo=/^((25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/([0-9]|[1-2][0-9]|3[0-2])$/,bo=/^(([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}|::|([0-9a-fA-F]{1,4})?::([0-9a-fA-F]{1,4}:?){0,6})\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,xo=/^$|^(?:[0-9a-zA-Z+/]{4})*(?:(?:[0-9a-zA-Z+/]{2}==)|(?:[0-9a-zA-Z+/]{3}=))?$/,So=/^[A-Za-z0-9_-]*$/,Co=/^https?$/,wo=/^\+[1-9]\d{6,14}$/,To=`(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))`,Eo=RegExp(`^${To}$`);function Do(e){let t=`(?:[01]\\d|2[0-3]):[0-5]\\d`;return typeof e.precision==`number`?e.precision===-1?`${t}`:e.precision===0?`${t}:[0-5]\\d`:`${t}:[0-5]\\d\\.\\d{${e.precision}}`:`${t}(?::[0-5]\\d(?:\\.\\d+)?)?`}function Oo(e){return RegExp(`^${Do(e)}$`)}function ko(e){let t=Do({precision:e.precision}),n=[`Z`];e.local&&n.push(``),e.offset&&n.push(`([+-](?:[01]\\d|2[0-3]):[0-5]\\d)`);let r=`${t}(?:${n.join(`|`)})`;return RegExp(`^${To}T(?:${r})$`)}var Ao=e=>{let t=e?`[\\s\\S]{${e?.minimum??0},${e?.maximum??``}}`:`[\\s\\S]*`;return RegExp(`^${t}$`)},jo=/^-?\d+$/,Mo=/^-?\d+(?:\.\d+)?$/,No=/^(?:true|false)$/i,Po=/^null$/i,Fo=/^[^A-Z]*$/,Io=/^[^a-z]*$/,Lo=H(`$ZodCheck`,(e,t)=>{var n;e._zod??={},e._zod.def=t,(n=e._zod).onattach??(n.onattach=[])}),Ro={number:`number`,bigint:`bigint`,object:`date`},zo=H(`$ZodCheckLessThan`,(e,t)=>{Lo.init(e,t);let n=Ro[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.maximum:n.exclusiveMaximum)??1/0;t.value{(t.inclusive?r.value<=t.value:r.value{Lo.init(e,t);let n=Ro[typeof t.value];e._zod.onattach.push(e=>{let n=e._zod.bag,r=(t.inclusive?n.minimum:n.exclusiveMinimum)??-1/0;t.value>r&&(t.inclusive?n.minimum=t.value:n.exclusiveMinimum=t.value)}),e._zod.check=r=>{(t.inclusive?r.value>=t.value:r.value>t.value)||r.issues.push({origin:n,code:`too_small`,minimum:typeof t.value==`object`?t.value.getTime():t.value,input:r.value,inclusive:t.inclusive,inst:e,continue:!t.abort})}}),Vo=H(`$ZodCheckMultipleOf`,(e,t)=>{Lo.init(e,t),e._zod.onattach.push(e=>{var n;(n=e._zod.bag).multipleOf??(n.multipleOf=t.value)}),e._zod.check=n=>{if(typeof n.value!=typeof t.value)throw Error(`Cannot mix number and bigint in multiple_of check.`);(typeof n.value==`bigint`?n.value%t.value===BigInt(0):ca(n.value,t.value)===0)||n.issues.push({origin:typeof n.value,code:`not_multiple_of`,divisor:t.value,input:n.value,inst:e,continue:!t.abort})}}),Ho=H(`$ZodCheckNumberFormat`,(e,t)=>{Lo.init(e,t),t.format=t.format||`float64`;let n=t.format?.includes(`int`),r=n?`int`:`number`,[i,a]=wa[t.format];e._zod.onattach.push(e=>{let r=e._zod.bag;r.format=t.format,r.minimum=i,r.maximum=a,n&&(r.pattern=jo)}),e._zod.check=o=>{let s=o.value;if(n){if(!Number.isInteger(s)){o.issues.push({expected:r,format:t.format,code:`invalid_type`,continue:!1,input:s,inst:e});return}if(!Number.isSafeInteger(s)){s>0?o.issues.push({input:s,code:`too_big`,maximum:2**53-1,note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort}):o.issues.push({input:s,code:`too_small`,minimum:-(2**53-1),note:`Integers must be within the safe integer range.`,inst:e,origin:r,inclusive:!0,continue:!t.abort});return}}sa&&o.issues.push({origin:`number`,input:s,code:`too_big`,maximum:a,inclusive:!0,inst:e,continue:!t.abort})}}),Uo=H(`$ZodCheckMaxLength`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.maximum??1/0;t.maximum{let r=n.value;if(r.length<=t.maximum)return;let i=La(r);n.issues.push({origin:i,code:`too_big`,maximum:t.maximum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Wo=H(`$ZodCheckMinLength`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag.minimum??-1/0;t.minimum>n&&(e._zod.bag.minimum=t.minimum)}),e._zod.check=n=>{let r=n.value;if(r.length>=t.minimum)return;let i=La(r);n.issues.push({origin:i,code:`too_small`,minimum:t.minimum,inclusive:!0,input:r,inst:e,continue:!t.abort})}}),Go=H(`$ZodCheckLengthEquals`,(e,t)=>{var n;Lo.init(e,t),(n=e._zod.def).when??(n.when=e=>{let t=e.value;return!oa(t)&&t.length!==void 0}),e._zod.onattach.push(e=>{let n=e._zod.bag;n.minimum=t.length,n.maximum=t.length,n.length=t.length}),e._zod.check=n=>{let r=n.value,i=r.length;if(i===t.length)return;let a=La(r),o=i>t.length;n.issues.push({origin:a,...o?{code:`too_big`,maximum:t.length}:{code:`too_small`,minimum:t.length},inclusive:!0,exact:!0,input:n.value,inst:e,continue:!t.abort})}}),Ko=H(`$ZodCheckStringFormat`,(e,t)=>{var n,r;Lo.init(e,t),e._zod.onattach.push(e=>{let n=e._zod.bag;n.format=t.format,t.pattern&&(n.patterns??=new Set,n.patterns.add(t.pattern))}),t.pattern?(n=e._zod).check??(n.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:t.format,input:n.value,...t.pattern?{pattern:t.pattern.toString()}:{},inst:e,continue:!t.abort})}):(r=e._zod).check??(r.check=()=>{})}),qo=H(`$ZodCheckRegex`,(e,t)=>{Ko.init(e,t),e._zod.check=n=>{t.pattern.lastIndex=0,!t.pattern.test(n.value)&&n.issues.push({origin:`string`,code:`invalid_format`,format:`regex`,input:n.value,pattern:t.pattern.toString(),inst:e,continue:!t.abort})}}),Jo=H(`$ZodCheckLowerCase`,(e,t)=>{t.pattern??=Fo,Ko.init(e,t)}),Yo=H(`$ZodCheckUpperCase`,(e,t)=>{t.pattern??=Io,Ko.init(e,t)}),Xo=H(`$ZodCheckIncludes`,(e,t)=>{Lo.init(e,t);let n=xa(t.includes),r=new RegExp(typeof t.position==`number`?`^.{${t.position}}${n}`:n);t.pattern=r,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(r)}),e._zod.check=n=>{n.value.includes(t.includes,t.position)||n.issues.push({origin:`string`,code:`invalid_format`,format:`includes`,includes:t.includes,input:n.value,inst:e,continue:!t.abort})}}),Zo=H(`$ZodCheckStartsWith`,(e,t)=>{Lo.init(e,t);let n=RegExp(`^${xa(t.prefix)}.*`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.startsWith(t.prefix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`starts_with`,prefix:t.prefix,input:n.value,inst:e,continue:!t.abort})}}),Qo=H(`$ZodCheckEndsWith`,(e,t)=>{Lo.init(e,t);let n=RegExp(`.*${xa(t.suffix)}$`);t.pattern??=n,e._zod.onattach.push(e=>{let t=e._zod.bag;t.patterns??=new Set,t.patterns.add(n)}),e._zod.check=n=>{n.value.endsWith(t.suffix)||n.issues.push({origin:`string`,code:`invalid_format`,format:`ends_with`,suffix:t.suffix,input:n.value,inst:e,continue:!t.abort})}}),$o=H(`$ZodCheckOverwrite`,(e,t)=>{Lo.init(e,t),e._zod.check=e=>{e.value=t.tx(e.value)}}),es=class{constructor(e=[]){this.content=[],this.indent=0,this&&(this.args=e)}indented(e){this.indent+=1,e(this),--this.indent}write(e){if(typeof e==`function`){e(this,{execution:`sync`}),e(this,{execution:`async`});return}let t=e.split(` `).filter(e=>e),n=Math.min(...t.map(e=>e.length-e.trimStart().length)),r=t.map(e=>e.slice(n)).map(e=>` `.repeat(this.indent*2)+e);for(let e of r)this.content.push(e)}compile(){let e=Function,t=this?.args,n=[...(this?.content??[``]).map(e=>` ${e}`)];return new e(...t,n.join(` `))}},ts={major:4,minor:4,patch:3},ns=H(`$ZodType`,(e,t)=>{var n;e??={},e._zod.def=t,e._zod.bag=e._zod.bag||{},e._zod.version=ts;let r=[...e._zod.def.checks??[]];e._zod.traits.has(`$ZodCheck`)&&r.unshift(e);for(let t of r)for(let n of t._zod.onattach)n(e);if(r.length===0)(n=e._zod).deferred??(n.deferred=[]),e._zod.deferred?.push(()=>{e._zod.run=e._zod.parse});else{let t=(e,t,n)=>{let r=Ma(e),i;for(let a of t){if(a._zod.def.when){if(Na(e)||!a._zod.def.when(e))continue}else if(r)continue;let t=e.issues.length,o=a._zod.check(e);if(o instanceof Promise&&n?.async===!1)throw new $i;if(i||o instanceof Promise)i=(i??Promise.resolve()).then(async()=>{await o,e.issues.length!==t&&(r||=Ma(e,t))});else{if(e.issues.length===t)continue;r||=Ma(e,t)}}return i?i.then(()=>e):e},n=(n,i,a)=>{if(Ma(n))return n.aborted=!0,n;let o=t(i,r,a);if(o instanceof Promise){if(a.async===!1)throw new $i;return o.then(t=>e._zod.parse(t,a))}return e._zod.parse(o,a)};e._zod.run=(i,a)=>{if(a.skipChecks)return e._zod.parse(i,a);if(a.direction===`backward`){let t=e._zod.parse({value:i.value,issues:[]},{...a,skipChecks:!0});return t instanceof Promise?t.then(e=>n(e,i,a)):n(t,i,a)}let o=e._zod.parse(i,a);if(o instanceof Promise){if(a.async===!1)throw new $i;return o.then(e=>t(e,r,a))}return t(o,r,a)}}ua(e,`~standard`,()=>({validate:t=>{try{let n=qa(e,t);return n.success?{value:n.data}:{issues:n.error?.issues}}catch{return Ya(e,t).then(e=>e.success?{value:e.data}:{issues:e.error?.issues})}},vendor:`zod`,version:1}))}),rs=H(`$ZodString`,(e,t)=>{ns.init(e,t),e._zod.pattern=[...e?._zod.bag?.patterns??[]].pop()??Ao(e._zod.bag),e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=String(n.value)}catch{}return typeof n.value==`string`||n.issues.push({expected:`string`,code:`invalid_type`,input:n.value,inst:e}),n}}),is=H(`$ZodStringFormat`,(e,t)=>{Ko.init(e,t),rs.init(e,t)}),as=H(`$ZodGUID`,(e,t)=>{t.pattern??=fo,is.init(e,t)}),os=H(`$ZodUUID`,(e,t)=>{if(t.version){let e={v1:1,v2:2,v3:3,v4:4,v5:5,v6:6,v7:7,v8:8}[t.version];if(e===void 0)throw Error(`Invalid UUID version: "${t.version}"`);t.pattern??=po(e)}else t.pattern??=po();is.init(e,t)}),ss=H(`$ZodEmail`,(e,t)=>{t.pattern??=mo,is.init(e,t)}),cs=H(`$ZodURL`,(e,t)=>{is.init(e,t),e._zod.check=n=>{try{let r=n.value.trim();if(!t.normalize&&t.protocol?.source===Co.source&&!/^https?:\/\//i.test(r)){n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid URL format`,input:n.value,inst:e,continue:!t.abort});return}let i=new URL(r);t.hostname&&(t.hostname.lastIndex=0,t.hostname.test(i.hostname)||n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid hostname`,pattern:t.hostname.source,input:n.value,inst:e,continue:!t.abort})),t.protocol&&(t.protocol.lastIndex=0,t.protocol.test(i.protocol.endsWith(`:`)?i.protocol.slice(0,-1):i.protocol)||n.issues.push({code:`invalid_format`,format:`url`,note:`Invalid protocol`,pattern:t.protocol.source,input:n.value,inst:e,continue:!t.abort})),n.value=t.normalize?i.href:r;return}catch{n.issues.push({code:`invalid_format`,format:`url`,input:n.value,inst:e,continue:!t.abort})}}}),ls=H(`$ZodEmoji`,(e,t)=>{t.pattern??=go(),is.init(e,t)}),us=H(`$ZodNanoID`,(e,t)=>{t.pattern??=lo,is.init(e,t)}),ds=H(`$ZodCUID`,(e,t)=>{t.pattern??=io,is.init(e,t)}),fs=H(`$ZodCUID2`,(e,t)=>{t.pattern??=ao,is.init(e,t)}),ps=H(`$ZodULID`,(e,t)=>{t.pattern??=oo,is.init(e,t)}),ms=H(`$ZodXID`,(e,t)=>{t.pattern??=so,is.init(e,t)}),hs=H(`$ZodKSUID`,(e,t)=>{t.pattern??=co,is.init(e,t)}),gs=H(`$ZodISODateTime`,(e,t)=>{t.pattern??=ko(t),is.init(e,t)}),_s=H(`$ZodISODate`,(e,t)=>{t.pattern??=Eo,is.init(e,t)}),vs=H(`$ZodISOTime`,(e,t)=>{t.pattern??=Oo(t),is.init(e,t)}),ys=H(`$ZodISODuration`,(e,t)=>{t.pattern??=uo,is.init(e,t)}),bs=H(`$ZodIPv4`,(e,t)=>{t.pattern??=_o,is.init(e,t),e._zod.bag.format=`ipv4`}),xs=H(`$ZodIPv6`,(e,t)=>{t.pattern??=vo,is.init(e,t),e._zod.bag.format=`ipv6`,e._zod.check=n=>{try{new URL(`http://[${n.value}]`)}catch{n.issues.push({code:`invalid_format`,format:`ipv6`,input:n.value,inst:e,continue:!t.abort})}}}),Ss=H(`$ZodCIDRv4`,(e,t)=>{t.pattern??=yo,is.init(e,t)}),Cs=H(`$ZodCIDRv6`,(e,t)=>{t.pattern??=bo,is.init(e,t),e._zod.check=n=>{let r=n.value.split(`/`);try{if(r.length!==2)throw Error();let[e,t]=r;if(!t)throw Error();let n=Number(t);if(`${n}`!==t||n<0||n>128)throw Error();new URL(`http://[${e}]`)}catch{n.issues.push({code:`invalid_format`,format:`cidrv6`,input:n.value,inst:e,continue:!t.abort})}}});function ws(e){if(e===``)return!0;if(/\s/.test(e)||e.length%4!=0)return!1;try{return atob(e),!0}catch{return!1}}var Ts=H(`$ZodBase64`,(e,t)=>{t.pattern??=xo,is.init(e,t),e._zod.bag.contentEncoding=`base64`,e._zod.check=n=>{ws(n.value)||n.issues.push({code:`invalid_format`,format:`base64`,input:n.value,inst:e,continue:!t.abort})}});function Es(e){if(!So.test(e))return!1;let t=e.replace(/[-_]/g,e=>e===`-`?`+`:`/`);return ws(t.padEnd(Math.ceil(t.length/4)*4,`=`))}var Ds=H(`$ZodBase64URL`,(e,t)=>{t.pattern??=So,is.init(e,t),e._zod.bag.contentEncoding=`base64url`,e._zod.check=n=>{Es(n.value)||n.issues.push({code:`invalid_format`,format:`base64url`,input:n.value,inst:e,continue:!t.abort})}}),Os=H(`$ZodE164`,(e,t)=>{t.pattern??=wo,is.init(e,t)});function ks(e,t=null){try{let n=e.split(`.`);if(n.length!==3)return!1;let[r]=n;if(!r)return!1;let i=JSON.parse(atob(r));return!(`typ`in i&&i?.typ!==`JWT`||!i.alg||t&&(!(`alg`in i)||i.alg!==t))}catch{return!1}}var As=H(`$ZodJWT`,(e,t)=>{is.init(e,t),e._zod.check=n=>{ks(n.value,t.alg)||n.issues.push({code:`invalid_format`,format:`jwt`,input:n.value,inst:e,continue:!t.abort})}}),js=H(`$ZodNumber`,(e,t)=>{ns.init(e,t),e._zod.pattern=e._zod.bag.pattern??Mo,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=Number(n.value)}catch{}let i=n.value;if(typeof i==`number`&&!Number.isNaN(i)&&Number.isFinite(i))return n;let a=typeof i==`number`?Number.isNaN(i)?`NaN`:Number.isFinite(i)?void 0:`Infinity`:void 0;return n.issues.push({expected:`number`,code:`invalid_type`,input:i,inst:e,...a?{received:a}:{}}),n}}),Ms=H(`$ZodNumberFormat`,(e,t)=>{Ho.init(e,t),js.init(e,t)}),Ns=H(`$ZodBoolean`,(e,t)=>{ns.init(e,t),e._zod.pattern=No,e._zod.parse=(n,r)=>{if(t.coerce)try{n.value=!!n.value}catch{}let i=n.value;return typeof i==`boolean`||n.issues.push({expected:`boolean`,code:`invalid_type`,input:i,inst:e}),n}}),Ps=H(`$ZodNull`,(e,t)=>{ns.init(e,t),e._zod.pattern=Po,e._zod.values=new Set([null]),e._zod.parse=(t,n)=>{let r=t.value;return r===null||t.issues.push({expected:`null`,code:`invalid_type`,input:r,inst:e}),t}}),Fs=H(`$ZodUnknown`,(e,t)=>{ns.init(e,t),e._zod.parse=e=>e}),Is=H(`$ZodNever`,(e,t)=>{ns.init(e,t),e._zod.parse=(t,n)=>(t.issues.push({expected:`never`,code:`invalid_type`,input:t.value,inst:e}),t)});function Ls(e,t,n){e.issues.length&&t.issues.push(...Pa(n,e.issues)),t.value[n]=e.value}var Rs=H(`$ZodArray`,(e,t)=>{ns.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!Array.isArray(i))return n.issues.push({expected:`array`,code:`invalid_type`,input:i,inst:e}),n;n.value=Array(i.length);let a=[];for(let e=0;eLs(t,n,e))):Ls(s,n,e)}return a.length?Promise.all(a).then(()=>n):n}});function zs(e,t,n,r,i,a){let o=n in r;if(e.issues.length){if(i&&a&&!o)return;t.issues.push(...Pa(n,e.issues))}if(!o&&!i){e.issues.length||t.issues.push({code:`invalid_type`,expected:`nonoptional`,input:void 0,path:[n]});return}e.value===void 0?o&&(t.value[n]=void 0):t.value[n]=e.value}function Bs(e){let t=Object.keys(e.shape);for(let n of t)if(!e.shape?.[n]?._zod?.traits?.has(`$ZodType`))throw Error(`Invalid element at key "${n}": expected a Zod schema`);let n=Ca(e.shape);return{...e,keys:t,keySet:new Set(t),numKeys:t.length,optionalKeys:new Set(n)}}function Vs(e,t,n,r,i,a){let o=[],s=i.keySet,c=i.catchall._zod,l=c.def.type,u=c.optin===`optional`,d=c.optout===`optional`;for(let i in t){if(i===`__proto__`||s.has(i))continue;if(l===`never`){o.push(i);continue}let a=c.run({value:t[i],issues:[]},r);a instanceof Promise?e.push(a.then(e=>zs(e,n,i,t,u,d))):zs(a,n,i,t,u,d)}return o.length&&n.issues.push({code:`unrecognized_keys`,keys:o,input:t,inst:a}),e.length?Promise.all(e).then(()=>n):n}var Hs=H(`$ZodObject`,(e,t)=>{if(ns.init(e,t),!Object.getOwnPropertyDescriptor(t,`shape`)?.get){let e=t.shape;Object.defineProperty(t,"shape",{get:()=>{let n={...e};return Object.defineProperty(t,"shape",{value:n}),n}})}let n=aa(()=>Bs(t));ua(e._zod,`propValues`,()=>{let e=t.shape,n={};for(let t in e){let r=e[t]._zod;if(r.values){n[t]??(n[t]=new Set);for(let e of r.values)n[t].add(e)}}return n});let r=ga,i=t.catchall,a;e._zod.parse=(t,o)=>{a??=n.value;let s=t.value;if(!r(s))return t.issues.push({expected:`object`,code:`invalid_type`,input:s,inst:e}),t;t.value={};let c=[],l=a.shape;for(let e of a.keys){let n=l[e],r=n._zod.optin===`optional`,i=n._zod.optout===`optional`,a=n._zod.run({value:s[e],issues:[]},o);a instanceof Promise?c.push(a.then(n=>zs(n,t,e,s,r,i))):zs(a,t,e,s,r,i)}return i?Vs(c,s,t,o,n.value,e):c.length?Promise.all(c).then(()=>t):t}}),Us=H(`$ZodObjectJIT`,(e,t)=>{Hs.init(e,t);let n=e._zod.parse,r=aa(()=>Bs(t)),i=e=>{let t=new es([`shape`,`payload`,`ctx`]),n=r.value,i=e=>{let t=pa(e);return`shape[${t}]._zod.run({ value: input[${t}], issues: [] }, ctx)`};t.write(`const input = payload.value;`);let a=Object.create(null),o=0;for(let e of n.keys)a[e]=`key_${o++}`;t.write(`const newResult = {};`);for(let r of n.keys){let n=a[r],o=pa(r),s=e[r],c=s?._zod?.optin===`optional`,l=s?._zod?.optout===`optional`;t.write(`const ${n} = ${i(r)};`),c&&l?t.write(` if (${n}.issues.length) { @@ -107,23 +107,23 @@ Goal: `)}t.write(`payload.value = newResult;`),t.write(`return payload;`);let s=t.compile();return(t,n)=>s(e,t,n)},a,o=ga,s=!ta.jitless,c=s&&_a.value,l=t.catchall,u;e._zod.parse=(d,f)=>{u??=r.value;let p=d.value;return o(p)?s&&c&&f?.async===!1&&f.jitless!==!0?(a||=i(t.shape),d=a(d,f),l?Vs([],p,d,f,u,e):d):n(d,f):(d.issues.push({expected:`object`,code:`invalid_type`,input:p,inst:e}),d)}});function Ws(e,t,n,r){for(let n of e)if(n.issues.length===0)return t.value=n.value,t;let i=e.filter(e=>!Ma(e));return i.length===1?(t.value=i[0].value,i[0]):(t.issues.push({code:`invalid_union`,input:t.value,inst:n,errors:e.map(e=>e.issues.map(e=>Ia(e,r,na())))}),t)}var Gs=H(`$ZodUnion`,(e,t)=>{ns.init(e,t),ua(e._zod,`optin`,()=>t.options.some(e=>e._zod.optin===`optional`)?`optional`:void 0),ua(e._zod,`optout`,()=>t.options.some(e=>e._zod.optout===`optional`)?`optional`:void 0),ua(e._zod,`values`,()=>{if(t.options.every(e=>e._zod.values))return new Set(t.options.flatMap(e=>Array.from(e._zod.values)))}),ua(e._zod,`pattern`,()=>{if(t.options.every(e=>e._zod.pattern)){let e=t.options.map(e=>e._zod.pattern);return RegExp(`^(${e.map(e=>sa(e.source)).join(`|`)})$`)}});let n=t.options.length===1?t.options[0]._zod.run:null;e._zod.parse=(r,i)=>{if(n)return n(r,i);let a=!1,o=[];for(let e of t.options){let t=e._zod.run({value:r.value,issues:[]},i);if(t instanceof Promise)o.push(t),a=!0;else{if(t.issues.length===0)return t;o.push(t)}}return a?Promise.all(o).then(t=>Ws(t,r,e,i)):Ws(o,r,e,i)}}),Ks=H(`$ZodIntersection`,(e,t)=>{ns.init(e,t),e._zod.parse=(e,n)=>{let r=e.value,i=t.left._zod.run({value:r,issues:[]},n),a=t.right._zod.run({value:r,issues:[]},n);return i instanceof Promise||a instanceof Promise?Promise.all([i,a]).then(([t,n])=>Js(e,t,n)):Js(e,i,a)}});function qs(e,t){if(e===t||e instanceof Date&&t instanceof Date&&+e==+t)return{valid:!0,data:e};if(va(e)&&va(t)){let n=Object.keys(t),r=Object.keys(e).filter(e=>n.indexOf(e)!==-1),i={...e,...t};for(let n of r){let r=qs(e[n],t[n]);if(!r.valid)return{valid:!1,mergeErrorPath:[n,...r.mergeErrorPath]};i[n]=r.data}return{valid:!0,data:i}}if(Array.isArray(e)&&Array.isArray(t)){if(e.length!==t.length)return{valid:!1,mergeErrorPath:[]};let n=[];for(let r=0;re.l&&e.r).map(([e])=>e);if(a.length&&i&&e.issues.push({...i,keys:a}),Ma(e))return e;let o=qs(t.value,n.value);if(!o.valid)throw Error(`Unmergable intersection. Error path: ${JSON.stringify(o.mergeErrorPath)}`);return e.value=o.data,e}var Ys=H(`$ZodTuple`,(e,t)=>{ns.init(e,t);let n=t.items;e._zod.parse=(r,i)=>{let a=r.value;if(!Array.isArray(a))return r.issues.push({input:a,inst:e,expected:`tuple`,code:`invalid_type`}),r;r.value=[];let o=[],s=Xs(n,`optin`),c=Xs(n,`optout`);if(!t.rest){if(a.lengthn.length&&r.issues.push({code:`too_big`,maximum:n.length,inclusive:!0,input:a,inst:e,origin:`array`})}let l=Array(n.length);for(let e=0;e{l[e]=t})):l[e]=t}if(t.rest){let e=n.length-1,s=a.slice(n.length);for(let n of s){e++;let a=t.rest._zod.run({value:n,issues:[]},i);a instanceof Promise?o.push(a.then(t=>Zs(t,r,e))):Zs(a,r,e)}}return o.length?Promise.all(o).then(()=>Qs(l,r,n,a,c)):Qs(l,r,n,a,c)}});function Xs(e,t){for(let n=e.length-1;n>=0;n--)if(e[n]._zod[t]!==`optional`)return n+1;return 0}function Zs(e,t,n){e.issues.length&&t.issues.push(...Pa(n,e.issues)),t.value[n]=e.value}function Qs(e,t,n,r,i){for(let a=0;a=i){t.value.length=a;break}t.issues.push(...Pa(a,n.issues))}t.value[a]=n.value}for(let e=t.value.length-1;e>=r.length&&n[e]._zod.optout===`optional`&&t.value[e]===void 0;e--)t.value.length=e;return t}var $s=H(`$ZodRecord`,(e,t)=>{ns.init(e,t),e._zod.parse=(n,r)=>{let i=n.value;if(!va(i))return n.issues.push({expected:`record`,code:`invalid_type`,input:i,inst:e}),n;let a=[],o=t.keyType._zod.values;if(o){n.value={};let s=new Set;for(let c of o)if(typeof c==`string`||typeof c==`number`||typeof c==`symbol`){s.add(typeof c==`number`?c.toString():c);let o=t.keyType._zod.run({value:c,issues:[]},r);if(o instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(o.issues.length){n.issues.push({code:`invalid_key`,origin:`record`,issues:o.issues.map(e=>Ia(e,r,na())),input:c,path:[c],inst:e});continue}let l=o.value,u=t.valueType._zod.run({value:i[c],issues:[]},r);u instanceof Promise?a.push(u.then(e=>{e.issues.length&&n.issues.push(...Pa(c,e.issues)),n.value[l]=e.value})):(u.issues.length&&n.issues.push(...Pa(c,u.issues)),n.value[l]=u.value)}let c;for(let e in i)s.has(e)||(c??=[],c.push(e));c&&c.length>0&&n.issues.push({code:`unrecognized_keys`,input:i,inst:e,keys:c})}else{n.value={};for(let o of Reflect.ownKeys(i)){if(o===`__proto__`||!Object.prototype.propertyIsEnumerable.call(i,o))continue;let s=t.keyType._zod.run({value:o,issues:[]},r);if(s instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);if(typeof o==`string`&&Mo.test(o)&&s.issues.length){let e=t.keyType._zod.run({value:Number(o),issues:[]},r);if(e instanceof Promise)throw Error(`Async schemas not supported in object keys currently`);e.issues.length===0&&(s=e)}if(s.issues.length){t.mode===`loose`?n.value[o]=i[o]:n.issues.push({code:`invalid_key`,origin:`record`,issues:s.issues.map(e=>Ia(e,r,na())),input:o,path:[o],inst:e});continue}let c=t.valueType._zod.run({value:i[o],issues:[]},r);c instanceof Promise?a.push(c.then(e=>{e.issues.length&&n.issues.push(...Pa(o,e.issues)),n.value[s.value]=e.value})):(c.issues.length&&n.issues.push(...Pa(o,c.issues)),n.value[s.value]=c.value)}}return a.length?Promise.all(a).then(()=>n):n}}),ec=H(`$ZodEnum`,(e,t)=>{ns.init(e,t);let n=ra(t.entries),r=new Set(n);e._zod.values=r,e._zod.pattern=RegExp(`^(${n.filter(e=>ba.has(typeof e)).map(e=>typeof e==`string`?xa(e):e.toString()).join(`|`)})$`),e._zod.parse=(t,i)=>{let a=t.value;return r.has(a)||t.issues.push({code:`invalid_value`,values:n,input:a,inst:e}),t}}),tc=H(`$ZodLiteral`,(e,t)=>{if(ns.init(e,t),t.values.length===0)throw Error(`Cannot create literal schema with no valid values`);let n=new Set(t.values);e._zod.values=n,e._zod.pattern=RegExp(`^(${t.values.map(e=>typeof e==`string`?xa(e):e?xa(e.toString()):String(e)).join(`|`)})$`),e._zod.parse=(r,i)=>{let a=r.value;return n.has(a)||r.issues.push({code:`invalid_value`,values:t.values,input:a,inst:e}),r}}),nc=H(`$ZodTransform`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new ea(e.constructor.name);let i=t.transform(n.value,n);if(r.async)return(i instanceof Promise?i:Promise.resolve(i)).then(e=>(n.value=e,n.fallback=!0,n));if(i instanceof Promise)throw new $i;return n.value=i,n.fallback=!0,n}});function rc(e,t){return t===void 0&&(e.issues.length||e.fallback)?{issues:[],value:void 0}:e}var ic=H(`$ZodOptional`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,e._zod.optout=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,void 0]):void 0),ua(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${sa(e.source)})?$`):void 0}),e._zod.parse=(e,n)=>{if(t.innerType._zod.optin===`optional`){let r=e.value,i=t.innerType._zod.run(e,n);return i instanceof Promise?i.then(e=>rc(e,r)):rc(i,r)}return e.value===void 0?e:t.innerType._zod.run(e,n)}}),ac=H(`$ZodExactOptional`,(e,t)=>{ic.init(e,t),ua(e._zod,`values`,()=>t.innerType._zod.values),ua(e._zod,`pattern`,()=>t.innerType._zod.pattern),e._zod.parse=(e,n)=>t.innerType._zod.run(e,n)}),oc=H(`$ZodNullable`,(e,t)=>{ns.init(e,t),ua(e._zod,`optin`,()=>t.innerType._zod.optin),ua(e._zod,`optout`,()=>t.innerType._zod.optout),ua(e._zod,`pattern`,()=>{let e=t.innerType._zod.pattern;return e?RegExp(`^(${sa(e.source)}|null)$`):void 0}),ua(e._zod,`values`,()=>t.innerType._zod.values?new Set([...t.innerType._zod.values,null]):void 0),e._zod.parse=(e,n)=>e.value===null?e:t.innerType._zod.run(e,n)}),sc=H(`$ZodDefault`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);if(e.value===void 0)return e.value=t.defaultValue,e;let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(e=>cc(e,t)):cc(r,t)}});function cc(e,t){return e.value===void 0&&(e.value=t.defaultValue),e}var lc=H(`$ZodPrefault`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>(n.direction===`backward`||e.value===void 0&&(e.value=t.defaultValue),t.innerType._zod.run(e,n))}),uc=H(`$ZodNonOptional`,(e,t)=>{ns.init(e,t),ua(e._zod,`values`,()=>{let e=t.innerType._zod.values;return e?new Set([...e].filter(e=>e!==void 0)):void 0}),e._zod.parse=(n,r)=>{let i=t.innerType._zod.run(n,r);return i instanceof Promise?i.then(t=>dc(t,e)):dc(i,e)}});function dc(e,t){return!e.issues.length&&e.value===void 0&&e.issues.push({code:`invalid_type`,expected:`nonoptional`,input:e.value,inst:t}),e}var fc=H(`$ZodCatch`,(e,t)=>{ns.init(e,t),e._zod.optin=`optional`,ua(e._zod,`optout`,()=>t.innerType._zod.optout),ua(e._zod,`values`,()=>t.innerType._zod.values),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(r=>(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>Ia(e,n,na()))},input:e.value}),e.issues=[],e.fallback=!0),e)):(e.value=r.value,r.issues.length&&(e.value=t.catchValue({...e,error:{issues:r.issues.map(e=>Ia(e,n,na()))},input:e.value}),e.issues=[],e.fallback=!0),e)}}),pc=H(`$ZodPipe`,(e,t)=>{ns.init(e,t),ua(e._zod,`values`,()=>t.in._zod.values),ua(e._zod,`optin`,()=>t.in._zod.optin),ua(e._zod,`optout`,()=>t.out._zod.optout),ua(e._zod,`propValues`,()=>t.in._zod.propValues),e._zod.parse=(e,n)=>{if(n.direction===`backward`){let r=t.out._zod.run(e,n);return r instanceof Promise?r.then(e=>mc(e,t.in,n)):mc(r,t.in,n)}let r=t.in._zod.run(e,n);return r instanceof Promise?r.then(e=>mc(e,t.out,n)):mc(r,t.out,n)}});function mc(e,t,n){return e.issues.length?(e.aborted=!0,e):t._zod.run({value:e.value,issues:e.issues,fallback:e.fallback},n)}var hc=H(`$ZodReadonly`,(e,t)=>{ns.init(e,t),ua(e._zod,`propValues`,()=>t.innerType._zod.propValues),ua(e._zod,`values`,()=>t.innerType._zod.values),ua(e._zod,`optin`,()=>t.innerType?._zod?.optin),ua(e._zod,`optout`,()=>t.innerType?._zod?.optout),e._zod.parse=(e,n)=>{if(n.direction===`backward`)return t.innerType._zod.run(e,n);let r=t.innerType._zod.run(e,n);return r instanceof Promise?r.then(gc):gc(r)}});function gc(e){return e.value=Object.freeze(e.value),e}var _c=H(`$ZodCustom`,(e,t)=>{Lo.init(e,t),ns.init(e,t),e._zod.parse=(e,t)=>e,e._zod.check=n=>{let r=n.value,i=t.fn(r);if(i instanceof Promise)return i.then(t=>vc(t,n,r,e));vc(i,n,r,e)}});function vc(e,t,n,r){if(!e){let e={code:`custom`,input:n,inst:r,path:[...r._zod.def.path??[]],continue:!r._zod.def.abort};r._zod.def.params&&(e.params=r._zod.def.params),t.issues.push(Ra(e))}}var yc,bc=class{constructor(){this._map=new WeakMap,this._idmap=new Map}add(e,...t){let n=t[0];return this._map.set(e,n),n&&typeof n==`object`&&`id`in n&&this._idmap.set(n.id,e),this}clear(){return this._map=new WeakMap,this._idmap=new Map,this}remove(e){let t=this._map.get(e);return t&&typeof t==`object`&&`id`in t&&this._idmap.delete(t.id),this._map.delete(e),this}get(e){let t=e._zod.parent;if(t){let n={...this.get(t)??{}};delete n.id;let r={...n,...this._map.get(e)};return Object.keys(r).length?r:void 0}return this._map.get(e)}has(e){return this._map.has(e)}};function xc(){return new bc}(yc=globalThis).__zod_globalRegistry??(yc.__zod_globalRegistry=xc());var Sc=globalThis.__zod_globalRegistry;function Cc(e,t){return new e({type:`string`,...U(t)})}function wc(e,t){return new e({type:`string`,format:`email`,check:`string_format`,abort:!1,...U(t)})}function Tc(e,t){return new e({type:`string`,format:`guid`,check:`string_format`,abort:!1,...U(t)})}function Ec(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,...U(t)})}function Dc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v4`,...U(t)})}function Oc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v6`,...U(t)})}function kc(e,t){return new e({type:`string`,format:`uuid`,check:`string_format`,abort:!1,version:`v7`,...U(t)})}function Ac(e,t){return new e({type:`string`,format:`url`,check:`string_format`,abort:!1,...U(t)})}function jc(e,t){return new e({type:`string`,format:`emoji`,check:`string_format`,abort:!1,...U(t)})}function Mc(e,t){return new e({type:`string`,format:`nanoid`,check:`string_format`,abort:!1,...U(t)})}function Nc(e,t){return new e({type:`string`,format:`cuid`,check:`string_format`,abort:!1,...U(t)})}function Pc(e,t){return new e({type:`string`,format:`cuid2`,check:`string_format`,abort:!1,...U(t)})}function Fc(e,t){return new e({type:`string`,format:`ulid`,check:`string_format`,abort:!1,...U(t)})}function Ic(e,t){return new e({type:`string`,format:`xid`,check:`string_format`,abort:!1,...U(t)})}function Lc(e,t){return new e({type:`string`,format:`ksuid`,check:`string_format`,abort:!1,...U(t)})}function Rc(e,t){return new e({type:`string`,format:`ipv4`,check:`string_format`,abort:!1,...U(t)})}function zc(e,t){return new e({type:`string`,format:`ipv6`,check:`string_format`,abort:!1,...U(t)})}function Bc(e,t){return new e({type:`string`,format:`cidrv4`,check:`string_format`,abort:!1,...U(t)})}function Vc(e,t){return new e({type:`string`,format:`cidrv6`,check:`string_format`,abort:!1,...U(t)})}function Hc(e,t){return new e({type:`string`,format:`base64`,check:`string_format`,abort:!1,...U(t)})}function Uc(e,t){return new e({type:`string`,format:`base64url`,check:`string_format`,abort:!1,...U(t)})}function Wc(e,t){return new e({type:`string`,format:`e164`,check:`string_format`,abort:!1,...U(t)})}function Gc(e,t){return new e({type:`string`,format:`jwt`,check:`string_format`,abort:!1,...U(t)})}function Kc(e,t){return new e({type:`string`,format:`datetime`,check:`string_format`,offset:!1,local:!1,precision:null,...U(t)})}function qc(e,t){return new e({type:`string`,format:`date`,check:`string_format`,...U(t)})}function Jc(e,t){return new e({type:`string`,format:`time`,check:`string_format`,precision:null,...U(t)})}function Yc(e,t){return new e({type:`string`,format:`duration`,check:`string_format`,...U(t)})}function Xc(e,t){return new e({type:`number`,checks:[],...U(t)})}function Zc(e,t){return new e({type:`number`,check:`number_format`,abort:!1,format:`safeint`,...U(t)})}function Qc(e,t){return new e({type:`boolean`,...U(t)})}function $c(e,t){return new e({type:`null`,...U(t)})}function el(e){return new e({type:`unknown`})}function tl(e,t){return new e({type:`never`,...U(t)})}function nl(e,t){return new zo({check:`less_than`,...U(t),value:e,inclusive:!1})}function rl(e,t){return new zo({check:`less_than`,...U(t),value:e,inclusive:!0})}function il(e,t){return new Bo({check:`greater_than`,...U(t),value:e,inclusive:!1})}function al(e,t){return new Bo({check:`greater_than`,...U(t),value:e,inclusive:!0})}function ol(e,t){return new Vo({check:`multiple_of`,...U(t),value:e})}function sl(e,t){return new Uo({check:`max_length`,...U(t),maximum:e})}function cl(e,t){return new Wo({check:`min_length`,...U(t),minimum:e})}function ll(e,t){return new Go({check:`length_equals`,...U(t),length:e})}function ul(e,t){return new qo({check:`string_format`,format:`regex`,...U(t),pattern:e})}function dl(e){return new Jo({check:`string_format`,format:`lowercase`,...U(e)})}function fl(e){return new Yo({check:`string_format`,format:`uppercase`,...U(e)})}function pl(e,t){return new Xo({check:`string_format`,format:`includes`,...U(t),includes:e})}function ml(e,t){return new Zo({check:`string_format`,format:`starts_with`,...U(t),prefix:e})}function hl(e,t){return new Qo({check:`string_format`,format:`ends_with`,...U(t),suffix:e})}function gl(e){return new $o({check:`overwrite`,tx:e})}function _l(e){return gl(t=>t.normalize(e))}function vl(){return gl(e=>e.trim())}function yl(){return gl(e=>e.toLowerCase())}function bl(){return gl(e=>e.toUpperCase())}function xl(){return gl(e=>ma(e))}function Sl(e,t,n){return new e({type:`array`,element:t,...U(n)})}function Cl(e,t,n){return new e({type:`custom`,check:`custom`,fn:t,...U(n)})}function wl(e,t){let n=Tl(t=>(t.addIssue=e=>{if(typeof e==`string`)t.issues.push(Ra(e,t.value,n._zod.def));else{let r=e;r.fatal&&(r.continue=!1),r.code??=`custom`,r.input??=t.value,r.inst??=n,r.continue??=!n._zod.def.abort,t.issues.push(Ra(r))}},e(t.value,t)),t);return n}function Tl(e,t){let n=new Lo({check:`custom`,...U(t)});return n._zod.check=e,n}function El(e){let t=e?.target??`draft-2020-12`;return t===`draft-4`&&(t=`draft-04`),t===`draft-7`&&(t=`draft-07`),{processors:e.processors??{},metadataRegistry:e?.metadata??Sc,target:t,unrepresentable:e?.unrepresentable??`throw`,override:e?.override??(()=>{}),io:e?.io??`output`,counter:0,seen:new Map,cycles:e?.cycles??`ref`,reused:e?.reused??`inline`,external:e?.external??void 0}}function Dl(e,t,n={path:[],schemaPath:[]}){var r;let i=e._zod.def,a=t.seen.get(e);if(a)return a.count++,n.schemaPath.includes(e)&&(a.cycle=n.path),a.schema;let o={schema:{},count:1,cycle:void 0,path:n.path};t.seen.set(e,o);let s=e._zod.toJSONSchema?.();if(s)o.schema=s;else{let r={...n,schemaPath:[...n.schemaPath,e],path:n.path};if(e._zod.processJSONSchema)e._zod.processJSONSchema(t,o.schema,r);else{let n=o.schema,a=t.processors[i.type];if(!a)throw Error(`[toJSONSchema]: Non-representable type encountered: ${i.type}`);a(e,t,n,r)}let a=e._zod.parent;a&&(o.ref||=a,Dl(a,t,r),t.seen.get(a).isParent=!0)}let c=t.metadataRegistry.get(e);return c&&Object.assign(o.schema,c),t.io===`input`&&Al(e)&&(delete o.schema.examples,delete o.schema.default),t.io===`input`&&`_prefault`in o.schema&&((r=o.schema).default??(r.default=o.schema._prefault)),delete o.schema._prefault,t.seen.get(e).schema}function Ol(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=new Map;for(let t of e.seen.entries()){let n=e.metadataRegistry.get(t[0])?.id;if(n){let e=r.get(n);if(e&&e!==t[0])throw Error(`Duplicate schema id "${n}" detected during JSON Schema conversion. Two different schemas cannot share the same id when converted together.`);r.set(n,t[0])}}let i=t=>{let r=e.target===`draft-2020-12`?`$defs`:`definitions`;if(e.external){let n=e.external.registry.get(t[0])?.id,i=e.external.uri??(e=>e);if(n)return{ref:i(n)};let a=t[1].defId??t[1].schema.id??`schema${e.counter++}`;return t[1].defId=a,{defId:a,ref:`${i(`__shared`)}#/${r}/${a}`}}if(t[1]===n)return{ref:`#`};let i=`#/${r}/`,a=t[1].schema.id??`__schema${e.counter++}`;return{defId:a,ref:i+a}},a=e=>{if(e[1].schema.$ref)return;let t=e[1],{ref:n,defId:r}=i(e);t.def={...t.schema},r&&(t.defId=r);let a=t.schema;for(let e in a)delete a[e];a.$ref=n};if(e.cycles===`throw`)for(let t of e.seen.entries()){let e=t[1];if(e.cycle)throw Error(`Cycle detected: #/${e.cycle?.join(`/`)}/ -Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}if(r.count>1&&e.reused===`ref`){a(n);continue}}}function kl(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):Object.assign(i,s),Object.assign(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};for(let t of[...e.seen.entries()].reverse())r(t[0]);let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}Object.assign(i,n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,o[e.defId]=e.def)}e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:Ml(t,`input`,e.processors),output:Ml(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function Al(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return Al(r.element,n);if(r.type===`set`)return Al(r.valueType,n);if(r.type===`lazy`)return Al(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`)return Al(r.innerType,n);if(r.type===`intersection`)return Al(r.left,n)||Al(r.right,n);if(r.type===`record`||r.type===`map`)return Al(r.keyType,n)||Al(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:Al(r.in,n)||Al(r.out,n);if(r.type===`object`){for(let e in r.shape)if(Al(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(Al(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(Al(e,n))return!0;return!!(r.rest&&Al(r.rest,n))}return!1}var jl=(e,t={})=>n=>{let r=El({...n,processors:t});return Dl(e,r),Ol(r,e),kl(r,e)},Ml=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=El({...i??{},target:a,io:t,processors:n});return Dl(e,o),Ol(o,e),kl(o,e)},Nl={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},Pl=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l}=e._zod.bag;if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Nl[s]??s,i.format===``&&delete i.format,s===`time`&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c];e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},Fl=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,format:s,multipleOf:c,exclusiveMaximum:l,exclusiveMinimum:u}=e._zod.bag;i.type=typeof s==`string`&&s.includes(`int`)?`integer`:`number`;let d=typeof u==`number`&&u>=(a??-1/0),f=typeof l==`number`&&l<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;d?p?(i.minimum=u,i.exclusiveMinimum=!0):i.exclusiveMinimum=u:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=l,i.exclusiveMaximum=!0):i.exclusiveMaximum=l:typeof o==`number`&&(i.maximum=o),typeof c==`number`&&(i.multipleOf=c)},Il=(e,t,n,r)=>{n.type=`boolean`},Ll=(e,t,n,r)=>{t.target===`openapi-3.0`?(n.type=`string`,n.nullable=!0,n.enum=[null]):n.type=`null`},Rl=(e,t,n,r)=>{n.not={}},zl=(e,t,n,r)=>{let i=e._zod.def,a=ra(i.entries);a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},Bl=(e,t,n,r)=>{let i=e._zod.def,a=[];for(let e of i.values)if(e===void 0){if(t.unrepresentable===`throw`)throw Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof e==`bigint`){if(t.unrepresentable===`throw`)throw Error(`BigInt literals cannot be represented in JSON Schema`);a.push(Number(e))}else a.push(e);if(a.length!==0){if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a}},Vl=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Custom types cannot be represented in JSON Schema`)},Hl=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Transforms cannot be represented in JSON Schema`)},Ul=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=e._zod.bag;typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=Dl(a.element,t,{...r,path:[...r.path,`items`]})},Wl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`,i.properties={};let o=a.shape;for(let e in o)i.properties[e]=Dl(o[e],t,{...r,path:[...r.path,`properties`,e]});let s=new Set(Object.keys(o)),c=new Set([...s].filter(e=>{let n=a.shape[e]._zod;return t.io===`input`?n.optin===void 0:n.optout===void 0}));c.size>0&&(i.required=Array.from(c)),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=Dl(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},Gl=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>Dl(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},Kl=(e,t,n,r)=>{let i=e._zod.def,a=Dl(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=Dl(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1;n.allOf=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]]},ql=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`array`;let o=t.target===`draft-2020-12`?`prefixItems`:`items`,s=t.target===`draft-2020-12`||t.target===`openapi-3.0`?`items`:`additionalItems`,c=a.items.map((e,n)=>Dl(e,t,{...r,path:[...r.path,o,n]})),l=a.rest?Dl(a.rest,t,{...r,path:[...r.path,s,...t.target===`openapi-3.0`?[a.items.length]:[]]}):null;t.target===`draft-2020-12`?(i.prefixItems=c,l&&(i.items=l)):t.target===`openapi-3.0`?(i.items={anyOf:c},l&&i.items.anyOf.push(l),i.minItems=c.length,l||(i.maxItems=c.length)):(i.items=c,l&&(i.additionalItems=l));let{minimum:u,maximum:d}=e._zod.bag;typeof u==`number`&&(i.minItems=u),typeof d==`number`&&(i.maxItems=d)},Jl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=o._zod.bag?.patterns;if(a.mode===`loose`&&s&&s.size>0){let e=Dl(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)i.patternProperties[t.source]=e}else(t.target===`draft-07`||t.target===`draft-2020-12`)&&(i.propertyNames=Dl(a.keyType,t,{...r,path:[...r.path,`propertyNames`]})),i.additionalProperties=Dl(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]});let c=o._zod.values;if(c){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e)}},Yl=(e,t,n,r)=>{let i=e._zod.def,a=Dl(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},Xl=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Zl=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.default=JSON.parse(JSON.stringify(i.defaultValue))},Ql=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,t.io===`input`&&(n._prefault=JSON.parse(JSON.stringify(i.defaultValue)))},$l=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{throw Error(`Dynamic catch values are not supported in JSON Schema`)}n.default=o},eu=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;Dl(o,t,r);let s=t.seen.get(e);s.ref=o},tu=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},nu=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},ru=H(`ZodISODateTime`,(e,t)=>{gs.init(e,t),ju.init(e,t)});function iu(e){return Kc(ru,e)}var au=H(`ZodISODate`,(e,t)=>{_s.init(e,t),ju.init(e,t)});function ou(e){return qc(au,e)}var su=H(`ZodISOTime`,(e,t)=>{vs.init(e,t),ju.init(e,t)});function cu(e){return Jc(su,e)}var lu=H(`ZodISODuration`,(e,t)=>{ys.init(e,t),ju.init(e,t)});function uu(e){return Yc(lu,e)}var du=(e,t)=>{Ba.init(e,t),e.name=`ZodError`,Object.defineProperties(e,{format:{value:t=>Ua(e,t)},flatten:{value:t=>Ha(e,t)},addIssue:{value:t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,ia,2)}},addIssues:{value:t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,ia,2)}},isEmpty:{get(){return e.issues.length===0}}})},fu=H(`ZodError`,du),pu=H(`ZodError`,du,{Parent:Error}),mu=Wa(pu),hu=Ga(pu),gu=Ka(pu),_u=Ja(pu),vu=Xa(pu),yu=Za(pu),bu=Qa(pu),xu=$a(pu),Su=eo(pu),Cu=to(pu),wu=no(pu),Tu=ro(pu),Eu=new WeakMap;function Du(e,t,n){let r=Object.getPrototypeOf(e),i=Eu.get(r);if(i||(i=new Set,Eu.set(r,i)),!i.has(t)){i.add(t);for(let e in n){let t=n[e];Object.defineProperty(r,e,{configurable:!0,enumerable:!1,get(){let n=t.bind(this);return Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:n}),n},set(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:t})}})}}}var Ou=H(`ZodType`,(e,t)=>(ns.init(e,t),Object.assign(e[`~standard`],{jsonSchema:{input:Ml(e,`input`),output:Ml(e,`output`)}}),e.toJSONSchema=jl(e,{}),e.def=t,e.type=t.type,Object.defineProperty(e,"_def",{value:t}),e.parse=(t,n)=>mu(e,t,n,{callee:e.parse}),e.safeParse=(t,n)=>gu(e,t,n),e.parseAsync=async(t,n)=>hu(e,t,n,{callee:e.parseAsync}),e.safeParseAsync=async(t,n)=>_u(e,t,n),e.spa=e.safeParseAsync,e.encode=(t,n)=>vu(e,t,n),e.decode=(t,n)=>yu(e,t,n),e.encodeAsync=async(t,n)=>bu(e,t,n),e.decodeAsync=async(t,n)=>xu(e,t,n),e.safeEncode=(t,n)=>Su(e,t,n),e.safeDecode=(t,n)=>Cu(e,t,n),e.safeEncodeAsync=async(t,n)=>wu(e,t,n),e.safeDecodeAsync=async(t,n)=>Tu(e,t,n),Du(e,`ZodType`,{check(...e){let t=this.def;return this.clone(fa(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return Sa(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(Bd(e,t))},superRefine(e,t){return this.check(Vd(e,t))},overwrite(e){return this.check(gl(e))},optional(){return Sd(this)},exactOptional(){return wd(this)},nullable(){return Ed(this)},nullish(){return Sd(Ed(this))},nonoptional(e){return Md(this,e)},array(){return q(this)},or(e){return ud([this,e])},and(e){return fd(this,e)},transform(e){return Id(this,bd(e))},default(e){return Od(this,e)},prefault(e){return Ad(this,e)},catch(e){return Pd(this,e)},pipe(e){return Id(this,e)},readonly(){return Rd(this)},describe(e){let t=this.clone();return Sc.add(t,{description:e}),t},meta(...e){if(e.length===0)return Sc.get(this);let t=this.clone();return Sc.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e){return e(this)}}),Object.defineProperty(e,"description",{get(){return Sc.get(e)?.description},configurable:!0}),e)),ku=H(`_ZodString`,(e,t)=>{rs.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Pl(e,t,n,r);let n=e._zod.bag;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null,Du(e,`_ZodString`,{regex(...e){return this.check(ul(...e))},includes(...e){return this.check(pl(...e))},startsWith(...e){return this.check(ml(...e))},endsWith(...e){return this.check(hl(...e))},min(...e){return this.check(cl(...e))},max(...e){return this.check(sl(...e))},length(...e){return this.check(ll(...e))},nonempty(...e){return this.check(cl(1,...e))},lowercase(e){return this.check(dl(e))},uppercase(e){return this.check(fl(e))},trim(){return this.check(vl())},normalize(...e){return this.check(_l(...e))},toLowerCase(){return this.check(yl())},toUpperCase(){return this.check(bl())},slugify(){return this.check(xl())}})}),Au=H(`ZodString`,(e,t)=>{rs.init(e,t),ku.init(e,t),e.email=t=>e.check(wc(Mu,t)),e.url=t=>e.check(Ac(Fu,t)),e.jwt=t=>e.check(Gc(Xu,t)),e.emoji=t=>e.check(jc(Iu,t)),e.guid=t=>e.check(Tc(Nu,t)),e.uuid=t=>e.check(Ec(Pu,t)),e.uuidv4=t=>e.check(Dc(Pu,t)),e.uuidv6=t=>e.check(Oc(Pu,t)),e.uuidv7=t=>e.check(kc(Pu,t)),e.nanoid=t=>e.check(Mc(Lu,t)),e.guid=t=>e.check(Tc(Nu,t)),e.cuid=t=>e.check(Nc(Ru,t)),e.cuid2=t=>e.check(Pc(zu,t)),e.ulid=t=>e.check(Fc(Bu,t)),e.base64=t=>e.check(Hc(qu,t)),e.base64url=t=>e.check(Uc(Ju,t)),e.xid=t=>e.check(Ic(Vu,t)),e.ksuid=t=>e.check(Lc(Hu,t)),e.ipv4=t=>e.check(Rc(Uu,t)),e.ipv6=t=>e.check(zc(Wu,t)),e.cidrv4=t=>e.check(Bc(Gu,t)),e.cidrv6=t=>e.check(Vc(Ku,t)),e.e164=t=>e.check(Wc(Yu,t)),e.datetime=t=>e.check(iu(t)),e.date=t=>e.check(ou(t)),e.time=t=>e.check(cu(t)),e.duration=t=>e.check(uu(t))});function W(e){return Cc(Au,e)}var ju=H(`ZodStringFormat`,(e,t)=>{is.init(e,t),ku.init(e,t)}),Mu=H(`ZodEmail`,(e,t)=>{ss.init(e,t),ju.init(e,t)}),Nu=H(`ZodGUID`,(e,t)=>{as.init(e,t),ju.init(e,t)}),Pu=H(`ZodUUID`,(e,t)=>{os.init(e,t),ju.init(e,t)}),Fu=H(`ZodURL`,(e,t)=>{cs.init(e,t),ju.init(e,t)}),Iu=H(`ZodEmoji`,(e,t)=>{ls.init(e,t),ju.init(e,t)}),Lu=H(`ZodNanoID`,(e,t)=>{us.init(e,t),ju.init(e,t)}),Ru=H(`ZodCUID`,(e,t)=>{ds.init(e,t),ju.init(e,t)}),zu=H(`ZodCUID2`,(e,t)=>{fs.init(e,t),ju.init(e,t)}),Bu=H(`ZodULID`,(e,t)=>{ps.init(e,t),ju.init(e,t)}),Vu=H(`ZodXID`,(e,t)=>{ms.init(e,t),ju.init(e,t)}),Hu=H(`ZodKSUID`,(e,t)=>{hs.init(e,t),ju.init(e,t)}),Uu=H(`ZodIPv4`,(e,t)=>{bs.init(e,t),ju.init(e,t)}),Wu=H(`ZodIPv6`,(e,t)=>{xs.init(e,t),ju.init(e,t)}),Gu=H(`ZodCIDRv4`,(e,t)=>{Ss.init(e,t),ju.init(e,t)}),Ku=H(`ZodCIDRv6`,(e,t)=>{Cs.init(e,t),ju.init(e,t)}),qu=H(`ZodBase64`,(e,t)=>{Ts.init(e,t),ju.init(e,t)}),Ju=H(`ZodBase64URL`,(e,t)=>{Ds.init(e,t),ju.init(e,t)}),Yu=H(`ZodE164`,(e,t)=>{Os.init(e,t),ju.init(e,t)}),Xu=H(`ZodJWT`,(e,t)=>{As.init(e,t),ju.init(e,t)}),Zu=H(`ZodNumber`,(e,t)=>{js.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Fl(e,t,n,r),Du(e,`ZodNumber`,{gt(e,t){return this.check(il(e,t))},gte(e,t){return this.check(al(e,t))},min(e,t){return this.check(al(e,t))},lt(e,t){return this.check(nl(e,t))},lte(e,t){return this.check(rl(e,t))},max(e,t){return this.check(rl(e,t))},int(e){return this.check($u(e))},safe(e){return this.check($u(e))},positive(e){return this.check(il(0,e))},nonnegative(e){return this.check(al(0,e))},negative(e){return this.check(nl(0,e))},nonpositive(e){return this.check(rl(0,e))},multipleOf(e,t){return this.check(ol(e,t))},step(e,t){return this.check(ol(e,t))},finite(){return this}});let n=e._zod.bag;e.minValue=Math.max(n.minimum??-1/0,n.exclusiveMinimum??-1/0)??null,e.maxValue=Math.min(n.maximum??1/0,n.exclusiveMaximum??1/0)??null,e.isInt=(n.format??``).includes(`int`)||Number.isSafeInteger(n.multipleOf??.5),e.isFinite=!0,e.format=n.format??null});function G(e){return Xc(Zu,e)}var Qu=H(`ZodNumberFormat`,(e,t)=>{Ms.init(e,t),Zu.init(e,t)});function $u(e){return Zc(Qu,e)}var ed=H(`ZodBoolean`,(e,t)=>{Ns.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Il(e,t,n,r)});function K(e){return Qc(ed,e)}var td=H(`ZodNull`,(e,t)=>{Ps.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ll(e,t,n,r)});function nd(e){return $c(td,e)}var rd=H(`ZodUnknown`,(e,t)=>{Fs.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function id(){return el(rd)}var ad=H(`ZodNever`,(e,t)=>{Is.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Rl(e,t,n,r)});function od(e){return tl(ad,e)}var sd=H(`ZodArray`,(e,t)=>{Rs.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ul(e,t,n,r),e.element=t.element,Du(e,`ZodArray`,{min(e,t){return this.check(cl(e,t))},nonempty(e){return this.check(cl(1,e))},max(e,t){return this.check(sl(e,t))},length(e,t){return this.check(ll(e,t))},unwrap(){return this.element}})});function q(e,t){return Sl(sd,e,t)}var cd=H(`ZodObject`,(e,t)=>{Us.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Wl(e,t,n,r),ua(e,`shape`,()=>t.shape),Du(e,`ZodObject`,{keyof(){return Y(Object.keys(this._zod.def.shape))},catchall(e){return this.clone({...this._zod.def,catchall:e})},passthrough(){return this.clone({...this._zod.def,catchall:id()})},loose(){return this.clone({...this._zod.def,catchall:id()})},strict(){return this.clone({...this._zod.def,catchall:od()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(e){return Da(this,e)},safeExtend(e){return Oa(this,e)},merge(e){return ka(this,e)},pick(e){return Ta(this,e)},omit(e){return Ea(this,e)},partial(...e){return Aa(xd,this,e[0])},required(...e){return ja(jd,this,e[0])}})});function J(e,t){return new cd({type:`object`,shape:e??{},...U(t)})}var ld=H(`ZodUnion`,(e,t)=>{Gs.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Gl(e,t,n,r),e.options=t.options});function ud(e,t){return new ld({type:`union`,options:e,...U(t)})}var dd=H(`ZodIntersection`,(e,t)=>{Ks.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Kl(e,t,n,r)});function fd(e,t){return new dd({type:`intersection`,left:e,right:t})}var pd=H(`ZodTuple`,(e,t)=>{Ys.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ql(e,t,n,r),e.rest=t=>e.clone({...e._zod.def,rest:t})});function md(e,t,n){let r=t instanceof ns;return new pd({type:`tuple`,items:e,rest:r?t:null,...U(r?n:t)})}var hd=H(`ZodRecord`,(e,t)=>{$s.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Jl(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function gd(e,t,n){return!t||!t._zod?new hd({type:`record`,keyType:W(),valueType:e,...U(t)}):new hd({type:`record`,keyType:e,valueType:t,...U(n)})}var _d=H(`ZodEnum`,(e,t)=>{ec.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>zl(e,t,n,r),e.enum=t.entries,e.options=Object.values(t.entries);let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new _d({...t,checks:[],...U(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new _d({...t,checks:[],...U(r),entries:i})}});function Y(e,t){return new _d({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...U(t)})}var vd=H(`ZodLiteral`,(e,t)=>{tc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Bl(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function X(e,t){return new vd({type:`literal`,values:Array.isArray(e)?e:[e],...U(t)})}var yd=H(`ZodTransform`,(e,t)=>{nc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Hl(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new ea(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(Ra(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,t.input??=n.value,t.inst??=e,n.issues.push(Ra(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n.fallback=!0,n)):(n.value=i,n.fallback=!0,n)}});function bd(e){return new yd({type:`transform`,transform:e})}var xd=H(`ZodOptional`,(e,t)=>{ic.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Sd(e){return new xd({type:`optional`,innerType:e})}var Cd=H(`ZodExactOptional`,(e,t)=>{ac.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function wd(e){return new Cd({type:`optional`,innerType:e})}var Td=H(`ZodNullable`,(e,t)=>{oc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Yl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Ed(e){return new Td({type:`nullable`,innerType:e})}var Dd=H(`ZodDefault`,(e,t)=>{sc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Zl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function Od(e,t){return new Dd({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():ya(t)}})}var kd=H(`ZodPrefault`,(e,t)=>{lc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ql(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Ad(e,t){return new kd({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():ya(t)}})}var jd=H(`ZodNonOptional`,(e,t)=>{uc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Xl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Md(e,t){return new jd({type:`nonoptional`,innerType:e,...U(t)})}var Nd=H(`ZodCatch`,(e,t)=>{fc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>$l(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function Pd(e,t){return new Nd({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:()=>t})}var Fd=H(`ZodPipe`,(e,t)=>{pc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>eu(e,t,n,r),e.in=t.in,e.out=t.out});function Id(e,t){return new Fd({type:`pipe`,in:e,out:t})}var Ld=H(`ZodReadonly`,(e,t)=>{hc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>tu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Rd(e){return new Ld({type:`readonly`,innerType:e})}var zd=H(`ZodCustom`,(e,t)=>{_c.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Vl(e,t,n,r)});function Bd(e,t={}){return Cl(zd,e,t)}function Vd(e,t){return wl(e,t)}var Hd=e=>typeof e==`string`&&e.trim()?e.trim():null;function Ud(e){let t=e.decision_scope&&typeof e.decision_scope==`object`&&!Array.isArray(e.decision_scope)?e.decision_scope:{},n=Hd(t.kind),r=Hd(t.granularity),i=Hd(t.scope_key),a=Hd(e.superseded_by);return{interaction:e.task_class===`user_gate`?`decision`:`unknown`,lifecycle:a?`superseded`:e.status===`deferred`?`deferred`:e.done===!0||[`done`,`completed`,`closed`,`archived`].includes(String(e.status))?`closed`:e.status===`open`||e.status===`blocked`?`open`:`unknown`,reason:Hd(e.note),evidence:Hd(e.evidence),blocksAgent:Hd(e.blocks_agent),unblocksTodoId:Hd(e.unblocks_todo_id),decisionScope:n&&r&&i?{kind:n,granularity:r,scopeKey:i}:null,supersededBy:a}}function Wd(e,t,n,r){return{...e,sourceId:t,goalTitle:r??e.goalTitle,details:n?e.details:{...e.details??Ud({}),lifecycle:`unavailable`}}}function Gd(e,t){return t.find(t=>t.sourceId===e.sourceId&&t.goalId===e.goalId&&t.todoId===e.todoId)||{...e,details:{...e.details??Ud({}),lifecycle:`unavailable`}}}function Kd(e,t){let n=e.details?.supersededBy;if(!(!n||n===e.todoId||e.details?.lifecycle===`unavailable`))return t.find(t=>t.sourceId===e.sourceId&&t.goalId===e.goalId&&t.todoId===n)}function qd(e){return![`closed`,`deferred`,`superseded`,`unavailable`].includes(e.details?.lifecycle??`unknown`)}var Jd={ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,runtime_root:`$HOME/.codex/loopx`,goal_count:1,run_count:8440,status_contract:{schema_version:2,minimum_dashboard_schema_version:2,producer:`loopx status`,reload_hint:`scripts/macos-dashboard-launchagent.sh restart`},usage_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.471166+00:00`,sample_run_count:20,proxy_note:`run-history proxy; excludes token counts and raw thread logs`,totals:{runs_24h:20,runs_7d:20,quota_spend_slots_24h:11,quota_spend_slots_7d:11,automation_run_count_24h:11,automation_run_count_7d:11,progress_signal_run_count_24h:9,progress_signal_run_count_7d:9},goals:[{goal_id:`loopx-meta`,runs_24h:20,runs_7d:20,quota_spend_slots_24h:11,quota_spend_slots_7d:11,automation_run_count_24h:11,automation_run_count_7d:11,progress_signal_run_count_24h:9,progress_signal_run_count_7d:9,project_share_24h:1}]},event_ledger_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.360662+00:00`,sample_run_count:20,proxy_note:`append-only run-history projection; compact event-class counts only`,event_classes:[`accounting`,`decision`,`evidence`,`state`,`work`],totals:{events_24h:20,events_7d:20,by_class_24h:{accounting:11,decision:0,evidence:0,state:0,work:9},by_class_7d:{accounting:11,decision:0,evidence:0,state:0,work:9}},goals:[{goal_id:`loopx-meta`,events_24h:20,events_7d:20,by_class_24h:{accounting:11,decision:0,evidence:0,state:0,work:9},by_class_7d:{accounting:11,decision:0,evidence:0,state:0,work:9},latest_event_class:`accounting`,latest_event_at:`2026-07-06T14:37:32+08:00`}]},promotion_readiness_summary:{available:!0,source:`run_history_full_scan`,goal_id:`loopx-meta`,generated_at:`2026-07-05T20:02:02+08:00`,classification:`canary_promotion_readiness_smoke_group`,delivery_batch_scale:`multi_surface`,delivery_outcome:`primary_goal_outcome`,recommended_action:`Canary promotion-readiness smoke passed; promotion may proceed after doctor/status reports fresh evidence.`,json_exists:!0,markdown_exists:!0,freshness_window_hours:24,freshness_status:`fresh`,is_fresh:!0,requires_readiness_run:!1,age_seconds:67624,age_hours:18.78,freshness_reference_time:`2026-07-06T06:49:06.408527+00:00`,sample_run_count:0,proxy_note:`canary promotion-readiness projection from append-only run history; exact evidence stays in run artifacts`},promotion_gate:{ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,runtime_root:`$HOME/.codex/loopx`,gate:`promotion_readiness`,gate_state:`ready`,can_promote:!0,should_warn:!1,non_blocking:!0,recommended_action:`promotion readiness is fresh`,readiness:{available:!0,goal_id:`loopx-meta`,generated_at:`2026-07-05T20:02:02+08:00`,classification:`canary_promotion_readiness_smoke_group`,delivery_batch_scale:`multi_surface`,delivery_outcome:`primary_goal_outcome`,recommended_action:`Canary promotion-readiness smoke passed; promotion may proceed after doctor/status reports fresh evidence.`,json_exists:!0,markdown_exists:!0,runtime_root:`$HOME/.codex/loopx`,freshness_window_hours:24,freshness_status:`fresh`,is_fresh:!0,requires_readiness_run:!1,age_seconds:67624,age_hours:18.78,freshness_reference_time:`2026-07-06T06:49:06.471087+00:00`}},decision_freshness_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.471133+00:00`,sample_run_count:20,window_days:7,proxy_note:`checkpointed decision freshness projection; rebase old decisions at the decision point before reuse`,summary:{decision_count:0,stale_count:0,rebase_required_count:0,fresh_count:0},items:[]},todo_index:JSON.parse(`{"schema_version":"todo_index_v0","source":"live_loopx_status_public_slice","total_count":12,"current_projected_count":12,"rollout_event_count":94,"item_limit":12,"items":[{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo update recorded for todo_1596c3a678bb","schema_version":"todo_index_item_v0","todo_id":"todo_1596c3a678bb","role":"agent","status":"open","title":"todo update recorded for todo_1596c3a678bb","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:33:32Z","latest_event_status":"open","event_count":7,"event_kinds":["todo_update"]},{"goal_id":"loopx-meta","index":24,"done":false,"text":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","schema_version":"todo_index_item_v0","todo_id":"todo_15bc0926a494","role":"agent","status":"open","priority":"P0-REVENUE MONITOR","title":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"github_public_reply_metadata_monitor","claimed_by":"codex-value-explorer","evidence":"autonomous replan: bounded current value-explorer monitor lane with explicit expires_at.","note":"Set bounded watch expiry for metadata-only public reply monitor; no catch-up after expiry.","updated_at":"2026-07-05T06:27:15+08:00"},{"goal_id":"loopx-meta","index":17,"done":false,"text":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","schema_version":"todo_index_item_v0","todo_id":"todo_2bf560b48a0c","role":"agent","status":"open","priority":"P0","title":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"legacy_open_pr_rename_blocker","claimed_by":"codex-main-control"},{"goal_id":"loopx-meta","index":23,"done":false,"text":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","schema_version":"todo_index_item_v0","todo_id":"todo_3ed1c4a69164","role":"agent","status":"open","priority":"P0","title":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"skillsbench_local_verifier_reward_collection","claimed_by":"codex-main-control","required_capabilities":["benchmark_runner"]},{"goal_id":"loopx-meta","index":32,"done":false,"text":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","schema_version":"todo_index_item_v0","todo_id":"todo_44907a5f355d","role":"agent","status":"blocked","priority":"P0","title":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_raw_new_rerun","claimed_by":"codex-main-control","evidence":"Public-safe redacted live LoopX text; inspect local status for the full row.","note":"Do not spend a full citation-check loopx rerun yet: #865 fixed scored output paths and #874 added bootstrap preflight attribution, but citation-check itself still preflights as apt+verifier bootstrap risk on ECS.","updated_at":"2026-06-29T00:49:36+08:00"},{"goal_id":"loopx-meta","index":39,"done":false,"text":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","schema_version":"todo_index_item_v0","todo_id":"todo_4762c790e583","role":"agent","status":"blocked","priority":"P0","title":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_remote_rerun","claimed_by":"codex-main-control","evidence":"A prior benchmark adapter change was validated before the legacy surface was archived. Current research uses the RFC-linked benchmark workspace and toolkit boundary smokes.","note":"2026-06-29: fixed host-local ACP idle/no-output root cause in PR #894. ACP protocol tool_call_count=0 is now distinguished from reverse-channel task-facing bridge activity; repeated codex_exec_bridge_idle_timeout withou…","updated_at":"2026-06-29T19:40:32+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_584f55f8f3b4","schema_version":"todo_index_item_v0","todo_id":"todo_584f55f8f3b4","role":"agent","status":"open","title":"todo add recorded for todo_584f55f8f3b4","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:48:49Z","latest_event_status":"open","event_count":3,"event_kinds":["todo_add","todo_update"]},{"goal_id":"loopx-meta","index":40,"done":false,"text":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","schema_version":"todo_index_item_v0","todo_id":"todo_62debf065fec","role":"agent","status":"blocked","priority":"P0 MONITOR","title":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"monitor_skillsbench_batch","claimed_by":"codex-main-control","evidence":"Observed 2026-06-30T02:52+08: active-state target_key=skillsbench-goal-baseline-30case-20260629T1826Z-r10; local ps/tmux/recent artifact search found no r10 batch process or compact artifact; no raw task/log/trajectory …","updated_at":"2026-06-30T02:54:54+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_93bc6439c521","schema_version":"todo_index_item_v0","todo_id":"todo_93bc6439c521","role":"agent","status":"open","title":"todo add recorded for todo_93bc6439c521","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_claim","latest_event_at":"2026-07-06T06:32:52Z","latest_event_status":"open","event_count":2,"event_kinds":["todo_add","todo_claim"]},{"goal_id":"loopx-meta","index":27,"done":false,"text":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","schema_version":"todo_index_item_v0","todo_id":"todo_aad7e9716927","role":"agent","status":"blocked","priority":"P0","title":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"run_goal_start_product_mode_matrix","claimed_by":"codex-main-control","evidence":"driver.status shows DONE raw then RUN loopx-goal-start with no running driver; raw benchmark_run.compact first_blocker=skillsbench_codex_acp_provider_zero_activity; source guard requires --host-local-acp-launch for Loop…","note":"Remote run group skillsbench-raw-new-goal-start-20260627T0420Z produced a material closeout for citation-check raw only; raw compact attribution is skillsbench_codex_acp_provider_zero_activity with official score missin…","updated_at":"2026-06-27T13:05:47+08:00"},{"goal_id":"loopx-meta","index":21,"done":false,"text":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","schema_version":"todo_index_item_v0","todo_id":"todo_aec1873c7f28","role":"agent","status":"open","priority":"P0 MONITOR","title":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","claimed_by":"codex-main-control","note":"2026-06-23 projection fix: this is monitor context for the powerlifting run, not an advancement next action; current executable path is SkillsBench build cache/prewarm repair.","updated_at":"2026-06-23T10:37:43+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_c02cb7d19607","schema_version":"todo_index_item_v0","todo_id":"todo_c02cb7d19607","role":"agent","status":"open","title":"todo add recorded for todo_c02cb7d19607","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_add","latest_event_at":"2026-07-06T03:47:54Z","latest_event_status":"open","event_count":1,"event_kinds":["todo_add"]}]}`),agent_management_projection:{schema_version:`agent_management_projection_v0`,mode:`read_only`,goal_id:`loopx-meta`,generated_at:`2026-07-06T06:49:06Z`,style_hint:null,truth_contract:{todo_is_runtime_work_item:!0,projection_is_writable:!1,introduces_task_runtime:!1,write_api:!1},source_summary:{registered_agent_count:4,projected_agent_count:4,todo_source:`live_loopx_status_public_slice`,public_safe_export:!0},agents:[{agent_id:`codex-main-control`,agent_model:`peer_v1`,profile_role:`release-validation`,state:`blocked`,next_action:`Continue projected todo todo_2bf560b48a0c.`,last_activity_at:`2026-06-29T00:49:36+08:00`,evidence_refs:[`todo:todo_e72afc24f04a:evidence`],goal_ids:[`loopx-meta`],stale_claim_hint:{state:`activity_missing`,claimed_by:`codex-main-control`,reason:`claimed open todo has no projected activity timestamp`,recommended_operator_action:`inspect evidence before considering reassignment`},current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_2bf560b48a0c`,goal_id:`loopx-meta`,role:`agent`,status:`open`,priority:`P0`,title:`Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harn…`,task_class:`blocker`,action_kind:`legacy_open_pr_rename_blocker`,claimed_by:`codex-main-control`}},{agent_id:`codex-product-capability`,agent_model:`peer_v1`,profile_role:`product-validation`,state:`monitoring`,next_action:`Continue projected todo todo_ded745761822.`,last_activity_at:`2026-07-06T06:29:53Z`,evidence_refs:[`todo:todo_ded745761822:evidence`],goal_ids:[`loopx-meta`],current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_ded745761822`,goal_id:`loopx-meta`,role:`agent`,status:`open`,priority:`P0-LOCAL`,title:`Public-safe redacted live LoopX text; inspect local status for the full row.`,task_class:`continuous_monitor`,action_kind:`Public-safe redacted live LoopX text; inspect local status for the full row.`,claimed_by:`codex-product-capability`,updated_at:`2026-07-04T20:22:45+08:00`}},{agent_id:`codex-side-bypass`,agent_model:`peer_v1`,profile_role:`implementation-validation`,state:`waiting`,next_action:`Inspect status projection before taking work.`,last_activity_at:`2026-07-06T06:32:16Z`,evidence_refs:[`rollout_event:todo_complete:todo_22c946938115`],goal_ids:[`loopx-meta`]},{agent_id:`codex-value-explorer`,agent_model:`peer_v1`,profile_role:`value-exploration`,state:`monitoring`,next_action:`Continue projected todo todo_584f55f8f3b4.`,last_activity_at:`2026-07-06T09:39:59+08:00`,evidence_refs:[`rollout_event:todo_update:todo_584f55f8f3b4`],goal_ids:[`loopx-meta`],current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_584f55f8f3b4`,goal_id:`loopx-meta`,role:`agent`,status:`open`,title:`todo add recorded for todo_584f55f8f3b4`}}]},contract:{ok:!0,summary:{errors:0,warnings:1,checks:6},errors:[],warnings:["loopx-meta: duplicate index rows raw=8444 unique=8440 unexpected=3 artifact_identity_collisions=2 artifact_collision_rows=3 reward_overlays=1; inspect with `loopx history --goal-id loopx-meta inspect-index-duplicates`; artifact identity collisions need review…"],checks:[`registry goals checked: 12`,`registry boundary: shared_local_registry push_allowed=False tracked=False ignored=False`,`user-gate scopes checked: 6 open multi-agent gates`,`runtime root resolved: $HOME/.codex/loopx`,`run-history goals=28 runs=10210`,`public boundary scan clean: 1218 files`]},global_registry:{available:!0,ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,current_registry:`$HOME/.codex/loopx/registry.global.json`,current_registry_is_global:!0,global_goal_count:12,current_goal_count:12,source_registry_count:7,summary:{high:0,action:8,info:0,checks:2,findings:8},findings:[{kind:`source_registry_missing`,severity:`action`,message:"`cc-test` source registry is missing",recommended_action:"reconnect `cc-test` from its project or archive it if the project is obsolete",goal_id:`cc-test`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-test` active state file is missing",recommended_action:"repair `cc-test` state_file or reconnect the project",goal_id:`cc-test`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`cc-tmp` source registry is missing",recommended_action:"reconnect `cc-tmp` from its project or archive it if the project is obsolete",goal_id:`cc-tmp`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-tmp` active state file is missing",recommended_action:"repair `cc-tmp` state_file or reconnect the project",goal_id:`cc-tmp`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`cc-tmp-xdrchpuaul` source registry is missing",recommended_action:"reconnect `cc-tmp-xdrchpuaul` from its project or archive it if the project is obsolete",goal_id:`cc-tmp-xdrchpuaul`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-tmp-xdrchpuaul` active state file is missing",recommended_action:"repair `cc-tmp-xdrchpuaul` state_file or reconnect the project",goal_id:`cc-tmp-xdrchpuaul`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`loopx-auto-research-e2e-probe-20260628-2225-goal` source registry is missing",recommended_action:"reconnect `loopx-auto-research-e2e-probe-20260628-2225-goal` from its project or archive it if the project is obsolete",goal_id:`loopx-auto-research-e2e-probe-20260628-2225-goal`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`loopx-auto-research-e2e-probe-20260628-2225-goal` active state file is missing",recommended_action:"repair `loopx-auto-research-e2e-probe-20260628-2225-goal` state_file or reconnect the project",goal_id:`loopx-auto-research-e2e-probe-20260628-2225-goal`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`}],checks:[`global registry goals checked: 12`,`global source registries checked: 7`]},attention_queue:JSON.parse(`{"available":true,"item_count":1,"needs_user_or_controller":0,"needs_controller":0,"needs_codex":1,"watching_external_evidence":0,"items":[{"goal_id":"loopx-meta","status":"skillsbench_codex_cli_goal_tail4_keepalive_relaunched","lifecycle_phase":"adapter_inspected","lifecycle_flags":["adapter_inspected"],"waiting_on":"codex","severity":"action","recommended_action":"Monitor run_group skillsbench-codex-cli-goal-xhigh-tail4-keepalive-20260706T143132CST using public compact/public artifacts only; once benchmark_run.compact.json lands for each case, classify launcher/case/solver/verifi…","source":"latest_run","quota":{"compute":1.0,"window_hours":24,"slot_minutes":1,"allowed_slots":1440,"spent_slots":97,"state":"eligible","reason":"1 compute quota; eligible for the next automatic agent turn"},"agent_todos":{"source_section":"Agent Todo","total_count":12,"open_count":12,"done_count":0,"items":[{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo update recorded for todo_1596c3a678bb","schema_version":"todo_index_item_v0","todo_id":"todo_1596c3a678bb","role":"agent","status":"open","title":"todo update recorded for todo_1596c3a678bb","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:33:32Z","latest_event_status":"open","event_count":7,"event_kinds":["todo_update"]},{"goal_id":"loopx-meta","index":24,"done":false,"text":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","schema_version":"todo_index_item_v0","todo_id":"todo_15bc0926a494","role":"agent","status":"open","priority":"P0-REVENUE MONITOR","title":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"github_public_reply_metadata_monitor","claimed_by":"codex-value-explorer","evidence":"autonomous replan: bounded current value-explorer monitor lane with explicit expires_at.","note":"Set bounded watch expiry for metadata-only public reply monitor; no catch-up after expiry.","updated_at":"2026-07-05T06:27:15+08:00"},{"goal_id":"loopx-meta","index":17,"done":false,"text":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","schema_version":"todo_index_item_v0","todo_id":"todo_2bf560b48a0c","role":"agent","status":"open","priority":"P0","title":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"legacy_open_pr_rename_blocker","claimed_by":"codex-main-control"},{"goal_id":"loopx-meta","index":23,"done":false,"text":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","schema_version":"todo_index_item_v0","todo_id":"todo_3ed1c4a69164","role":"agent","status":"open","priority":"P0","title":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"skillsbench_local_verifier_reward_collection","claimed_by":"codex-main-control","required_capabilities":["benchmark_runner"]},{"goal_id":"loopx-meta","index":32,"done":false,"text":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","schema_version":"todo_index_item_v0","todo_id":"todo_44907a5f355d","role":"agent","status":"blocked","priority":"P0","title":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_raw_new_rerun","claimed_by":"codex-main-control","evidence":"Public-safe redacted live LoopX text; inspect local status for the full row.","note":"Do not spend a full citation-check loopx rerun yet: #865 fixed scored output paths and #874 added bootstrap preflight attribution, but citation-check itself still preflights as apt+verifier bootstrap risk on ECS.","updated_at":"2026-06-29T00:49:36+08:00"},{"goal_id":"loopx-meta","index":39,"done":false,"text":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","schema_version":"todo_index_item_v0","todo_id":"todo_4762c790e583","role":"agent","status":"blocked","priority":"P0","title":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_remote_rerun","claimed_by":"codex-main-control","evidence":"A prior benchmark adapter change was validated before the legacy surface was archived. Current research uses the RFC-linked benchmark workspace and toolkit boundary smokes.","note":"2026-06-29: fixed host-local ACP idle/no-output root cause in PR #894. ACP protocol tool_call_count=0 is now distinguished from reverse-channel task-facing bridge activity; repeated codex_exec_bridge_idle_timeout withou…","updated_at":"2026-06-29T19:40:32+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_584f55f8f3b4","schema_version":"todo_index_item_v0","todo_id":"todo_584f55f8f3b4","role":"agent","status":"open","title":"todo add recorded for todo_584f55f8f3b4","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:48:49Z","latest_event_status":"open","event_count":3,"event_kinds":["todo_add","todo_update"]},{"goal_id":"loopx-meta","index":40,"done":false,"text":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","schema_version":"todo_index_item_v0","todo_id":"todo_62debf065fec","role":"agent","status":"blocked","priority":"P0 MONITOR","title":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"monitor_skillsbench_batch","claimed_by":"codex-main-control","evidence":"Observed 2026-06-30T02:52+08: active-state target_key=skillsbench-goal-baseline-30case-20260629T1826Z-r10; local ps/tmux/recent artifact search found no r10 batch process or compact artifact; no raw task/log/trajectory …","updated_at":"2026-06-30T02:54:54+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_93bc6439c521","schema_version":"todo_index_item_v0","todo_id":"todo_93bc6439c521","role":"agent","status":"open","title":"todo add recorded for todo_93bc6439c521","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_claim","latest_event_at":"2026-07-06T06:32:52Z","latest_event_status":"open","event_count":2,"event_kinds":["todo_add","todo_claim"]},{"goal_id":"loopx-meta","index":27,"done":false,"text":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","schema_version":"todo_index_item_v0","todo_id":"todo_aad7e9716927","role":"agent","status":"blocked","priority":"P0","title":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"run_goal_start_product_mode_matrix","claimed_by":"codex-main-control","evidence":"driver.status shows DONE raw then RUN loopx-goal-start with no running driver; raw benchmark_run.compact first_blocker=skillsbench_codex_acp_provider_zero_activity; source guard requires --host-local-acp-launch for Loop…","note":"Remote run group skillsbench-raw-new-goal-start-20260627T0420Z produced a material closeout for citation-check raw only; raw compact attribution is skillsbench_codex_acp_provider_zero_activity with official score missin…","updated_at":"2026-06-27T13:05:47+08:00"},{"goal_id":"loopx-meta","index":21,"done":false,"text":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","schema_version":"todo_index_item_v0","todo_id":"todo_aec1873c7f28","role":"agent","status":"open","priority":"P0 MONITOR","title":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","claimed_by":"codex-main-control","note":"2026-06-23 projection fix: this is monitor context for the powerlifting run, not an advancement next action; current executable path is SkillsBench build cache/prewarm repair.","updated_at":"2026-06-23T10:37:43+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_c02cb7d19607","schema_version":"todo_index_item_v0","todo_id":"todo_c02cb7d19607","role":"agent","status":"open","title":"todo add recorded for todo_c02cb7d19607","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_add","latest_event_at":"2026-07-06T03:47:54Z","latest_event_status":"open","event_count":1,"event_kinds":["todo_add"]}]}}]}`),run_history:{available:!0,goal_count:1,run_count:5,goals:[{id:`loopx-meta`,domain:`loopx-platform`,status:`active-read-only`,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`],registry_member:!0,legacy_runtime_goal:!1,adapter_kind:`harness_self_improvement`,adapter_status:`connected-read-only`,index_exists:!0,raw_index_records:8444,unique_runs:8440,quota:{compute:1,window_hours:24,slot_minutes:1,allowed_slots:1440,spent_slots:97,state:`waiting`,reason:`no active Codex-ready work is currently selected`},latest_runs:[{generated_at:`2026-07-06T14:37:32+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-value-explorer`,recommended_action:`审阅 PR #1524 的 Agent Management 面板视觉方向:workspace hint 与 stale claim hint 是否符合预期;确认后允许 codex-value-explorer 自合并。`,health_check:`quota safe-bypass operator gate; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:55+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-main-control`,recommended_action:`[P1] Repair SkillsBench post-run debug gate consistency for countable codex-cli-goal official-zero runs: when attempt_accounting is countable and case_closeout_complete=true, do not project first_blocker=loopx_closeout_…`,health_check:`quota should-run eligible; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:54+08:00`,goal_id:`loopx-meta`,classification:`skillsbench_codex_cli_goal_tail4_keepalive_relaunched`,agent_id:`codex-main-control`,progress_scope:`goal`,delivery_batch_scale:`single_surface`,delivery_outcome:`outcome_progress`,recommended_action:`Monitor run_group skillsbench-codex-cli-goal-xhigh-tail4-keepalive-20260706T143132CST using public compact/public artifacts only; once benchmark_run.compact.json lands for each case, classify launcher/case/solver/verifi…`,health_check:`state_file 1/1; registry_goal 1/1; authority_sources 10`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:34+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-side-bypass`,recommended_action:`[P0] Rerun real KNN visible auto-research after the successor-link fix and verify evaluator completion projects a second-round hypothesis/frontier or explicit completion gate without manual intervention; keep evidence p…`,health_check:`quota should-run eligible; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:32:57+08:00`,goal_id:`loopx-meta`,classification:`auto_research_successor_link_fix_merged`,agent_id:`codex-side-bypass`,progress_scope:`agent_lane`,delivery_batch_scale:`implementation`,delivery_outcome:`outcome_progress`,recommended_action:`[P0] Rerun real KNN visible auto-research after the successor-link fix and verify evaluator completion projects a second-round hypothesis/frontier or explicit completion gate without manual intervention; keep evidence p…`,health_check:`state_file 1/1; registry_goal 1/1; authority_sources 0`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]}]}]}},Yd=W().nullable(),Xd=J({schema_version:X(`goal_acceptance_observation_projection_v0`),goal_id:W(),read_only:X(!0),acceptance_assessed:X(!1),coverage:Y([`partial`,`unavailable`]),missing_sources:q(W()),truncated:K(),historical_progress:q(J({kind:W(),observed_at:Yd,source:W(),evidence_refs:q(W())})),acceptance_gaps:q(J({kind:W(),owner:Yd,reason:Yd,evidence_required:Yd,observed_at:Yd,source:W()})),guards:q(J({kind:W(),todo_id:Yd,blocks_agent:Yd,owner:Yd,reason:Yd,evidence_required:Yd,decision_scope:Yd})),next_action:Yd,next_action_source:Yd}),Zd=ud([W(),G(),K(),nd()]),Qd=gd(W(),Zd),$d=J({todo_id:W().optional(),priority:W().optional(),status:W(),title:W(),claimed_by:W().optional(),task_class:W().optional(),action_kind:W().optional()}),ef=J({gate_id:W(),kind:W(),status:W(),blocks:q(W()).optional()}),tf=J({todo_id:W().optional(),owner_agent:W().optional(),status:W().optional(),lease_until:W().optional(),write_scope:q(W()).optional()}),nf=J({generated_at:W().optional(),classification:W().optional(),summary:W().optional()}),rf=J({kind:W().optional().default(`warning`),message:ud([W(),q(W())]).optional().default(`compact source warning`)}).passthrough(),af=J({schema_version:X(`goal_channel_projection_v0`),mode:X(`read_only`),goal_id:W(),display_name:W(),generated_at:W().optional().nullable(),latest_status:W(),waiting_on:W(),next_action:W(),source_refs:gd(W(),Zd),decision_frame:J({user_action_required:K(),agent_action_required:K(),quiet_noop_allowed:K()}),quota:Qd,user_todos:q($d).default([]),agent_todos:q($d).default([]),open_gates:q(ef).default([]),active_leases:q(tf).default([]),artifacts:q(Qd).default([]),recent_events:q(nf).default([]),source_warnings:q(rf).default([]),truth_contract:J({event_ledger_is_source_of_truth:K(),projection_is_writable:K(),recompute_rule:W(),write_authority:W()})}),of=J({compute:G().optional().default(1),window_hours:G().optional().default(24),slot_minutes:G().optional().default(1),allowed_slots:G().optional().nullable(),spent_slots:G().optional().default(0),state:W().optional().nullable(),next_eligible_at:W().optional().nullable(),reason:W().optional().nullable(),blocked_action_scope:W().optional().nullable(),focus_wait:K().optional().nullable(),handoff_outcome_floor_block:K().optional().nullable(),safe_bypass_allowed:K().optional().default(!1),safe_bypass_kind:W().optional().nullable(),safe_bypass_policy:W().optional().nullable(),post_handoff_outcome_gap_streak:G().optional().nullable(),outcome_gap_threshold:G().optional().nullable(),must_advance:q(W()).optional().default([]),avoid:q(W()).optional().default([])}).transform(e=>{let t=Math.max(1,e.slot_minutes),n=Math.round(e.window_hours*60*e.compute/t);return{...e,slot_minutes:t,allowed_slots:e.allowed_slots??n}}),sf=J({self_repair:J({enabled:K().optional().default(!1),allow_health_blocker_repair:K().optional().default(!1),allow_waiting_projection_repair:K().optional().default(!1)}).optional().nullable()}).passthrough(),cf=J({model_config:J({model:W(),reasoning_effort:W().optional()}).optional(),mode:W().optional().default(`default`),orchestration_mode:W().optional().nullable(),spawn_allowed:K().optional().default(!1),allowed:K().optional().nullable(),max_children:G().optional().default(0),allowed_domains:q(W()).optional().default([])}).passthrough(),lf=J({label:W().optional().nullable(),path:W(),anchor:W().optional().nullable(),exists:K().optional().default(!1),resolved_path:W().optional().nullable()}),uf=J({index:G(),done:K(),text:W(),schema_version:W().optional().nullable(),todo_id:W().optional().nullable(),role:W().optional().nullable(),status:W().optional().nullable(),resume_when:W().optional().nullable(),resume_ready:K().optional().nullable(),resume_condition:gd(W(),id()).optional().nullable(),priority:W().optional().nullable(),title:W().optional().nullable(),archive_state:W().optional().nullable(),source_section:W().optional().nullable(),task_class:W().optional().nullable(),task_domain:W().optional().nullable(),action_kind:W().optional().nullable(),claimed_by:W().optional().nullable(),required_capabilities:q(W()).optional(),note:W().optional().nullable(),evidence:W().optional().nullable(),updated_at:W().optional().nullable(),review_materials:q(lf).optional().default([])}).passthrough(),df=J({source_section:W().optional().nullable(),total_count:G().optional().default(0),open_count:G().optional().default(0),done_count:G().optional().default(0),advancement_done_count:G().optional(),items:q(uf).optional().default([]),deferred_items:q(uf).optional()}),ff=uf.extend({goal_id:W(),source:W().optional().nullable(),event_count:G().optional().default(0),event_kinds:q(W()).optional().default([]),latest_event_kind:W().optional().nullable(),latest_event_at:W().optional().nullable(),latest_event_status:W().optional().nullable(),agent_id:W().optional().nullable()}).passthrough(),pf=J({schema_version:W().optional().nullable(),source:W().optional().nullable(),total_count:G().optional().default(0),current_projected_count:G().optional().default(0),rollout_event_count:G().optional().default(0),item_limit:G().optional().nullable(),items:q(ff).optional().default([])}),mf=J({kind:W().optional().nullable(),label:W().optional().nullable(),path_safe:K().optional().default(!1),branch:W().optional().nullable(),write_scope:q(W()).optional().default([])}).passthrough(),hf=J({state:W().optional().nullable(),claimed_by:W().optional().nullable(),last_activity_at:W().optional().nullable(),threshold_hours:G().optional().nullable(),reason:W().optional().nullable(),recommended_operator_action:W().optional().nullable()}).passthrough(),gf=J({schema_version:W().optional().nullable(),todo_id:W().optional().nullable(),goal_id:W().optional().nullable(),role:W().optional().nullable(),status:W().optional().nullable(),priority:W().optional().nullable(),title:W().optional().nullable(),task_class:W().optional().nullable(),action_kind:W().optional().nullable(),claimed_by:W().optional().nullable(),required_write_scopes:q(W()).optional().default([]),workspace_ref:mf.optional().nullable()}).passthrough(),_f=J({schema_version:W().optional().nullable(),from_agent:W().optional().nullable(),to_agent:W().optional().nullable(),intent:W().optional().nullable(),summary:W().optional().nullable(),blocker:W().optional().nullable(),suggested_next_action:W().optional().nullable(),evidence_refs:q(W()).optional().default([]),updated_at:W().optional().nullable()}).passthrough(),vf=J({agent_id:W(),role:W().optional().nullable(),state:W().optional().nullable(),current_todo:gf.optional().nullable(),next_action:W().optional().nullable(),last_activity_at:W().optional().nullable(),evidence_refs:q(W()).optional().default([]),handoff_refs:q(W()).optional().default([]),handoff_note:_f.optional().nullable(),workspace_ref:mf.optional().nullable(),stale_claim_hint:hf.optional().nullable(),blocked_on:gf.optional().nullable(),goal_ids:q(W()).optional().default([])}).passthrough(),yf=J({schema_version:W().optional().nullable(),mode:W().optional().nullable(),goal_id:W().optional().nullable(),generated_at:W().optional().nullable(),style_hint:J({preferred:W().optional().nullable(),license_boundary:W().optional().nullable()}).optional().nullable(),truth_contract:J({todo_is_runtime_work_item:K().optional().default(!0),projection_is_writable:K().optional().default(!1),introduces_task_runtime:K().optional().default(!1),write_api:K().optional().default(!1)}).optional().nullable(),source_summary:J({registered_agent_count:G().optional().default(0),projected_agent_count:G().optional().default(0),todo_source:W().optional().nullable()}).optional().nullable(),agents:q(vf).optional().default([])}).passthrough(),bf=J({goal_id:W(),configured:K().optional().default(!1),enabled:K().optional().default(!1),human_gate_auto_notify_enabled:K().optional().default(!1),target_ref:W().optional().nullable(),receipt_count:G().optional().default(0),last_notified_at:W().optional().nullable()}).passthrough(),xf=J({schema_version:W().optional().nullable(),generated_at:W().optional().nullable(),goals:q(bf).optional().default([])}).passthrough(),Sf=J({source_section:W().optional().nullable(),open:G().optional().default(0),done:G().optional().default(0),total:G().optional().default(0),advancement_done_count:G().optional(),next:W().optional().nullable(),next_index:G().optional().nullable(),items:q(uf).optional().default([]),recent_completed_advancement_items:q(uf).optional().default([])}),Cf=J({goal_id:W(),status:W().optional().nullable(),waiting_on:W().optional().nullable(),severity:W().optional().nullable(),index:G().optional().nullable(),text:W(),source:W().optional().nullable()}),wf=J({source:W().optional().nullable(),open_count:G().optional().default(0),items:q(Cf).optional().default([])}),Tf=J({goal_id:W(),status:W().optional().nullable(),waiting_on:W().optional().nullable(),quota_state:W().optional().nullable(),priority:W().optional().nullable(),todo_index:G().optional().nullable(),text:W(),source:W().optional().nullable()}),Ef=J({source:W().optional().nullable(),open_count:G().optional().default(0),items:q(Tf).optional().default([])}),Df=J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),summary:W().optional().nullable()}),Of=J({kind:W().optional().nullable(),source:W().optional().nullable(),severity:W().optional().nullable(),requires_refresh_state:K().optional().default(!1),reason:W().optional().nullable(),active_state_updated_at:W().optional().nullable(),latest_run_generated_at:W().optional().nullable(),latest_run_state_updated_at:W().optional().nullable(),latest_run_classification:W().optional().nullable(),recommended_action:W().optional().nullable()}),kf=J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),delivery_batch_scale:W().optional().nullable(),delivery_outcome:W().optional().nullable(),health_check:W().optional().nullable(),json_exists:K().optional().nullable(),markdown_exists:K().optional().nullable()}),Af=J({project_asset_backed:K().optional(),same_source_should_run:K().optional(),codex_ready:K().optional(),handoff_has_next_action:K().optional(),handoff_has_stop_condition:K().optional(),handoff_sanitized_surface:K().optional()}).catchall(K()),jf=J({ready:K().optional().default(!1),codex_ready:K().optional().default(!1),source:W().optional().nullable(),quota_state:W().optional().nullable(),checks:Af.optional().default({}),handoff_status:W().optional().nullable(),handoff_ready_at:W().optional().nullable(),handoff_ready_classification:W().optional().nullable(),post_handoff_run_seen:K().optional().default(!1),post_handoff_latest_run:kf.optional().nullable(),post_handoff_recent_runs:q(kf).optional().default([]),post_handoff_small_scale_streak:G().int().nonnegative().optional().default(0),post_handoff_outcome_gap_streak:G().int().nonnegative().optional().default(0),next_probe:W().optional().nullable()}),Mf=J({schema_version:W().optional().nullable(),kind:W().optional().nullable(),missing_roles:q(W()).optional().default([]),source:W().optional().nullable(),recommended_action:W().optional().nullable()}),Nf=J({owner:W(),gate:W(),next_action:W(),stop_condition:W(),user_todos:Sf.optional().nullable(),agent_todos:Sf.optional().nullable(),quota:of.optional().nullable(),control_plane:sf.optional().nullable(),orchestration:cf.optional().nullable(),latest_validation:Df.optional().nullable(),stale_latest_run_warning:Of.optional().nullable(),todo_projection_gap:Mf.optional().nullable()}),Pf=J({goal_id:W(),activation_state:Y([`active`,`stopped`]).optional().default(`active`),status:W(),waiting_on:W(),severity:W(),recommended_action:W(),project_asset:Nf.optional().nullable(),handoff_readiness:jf.optional().nullable(),source:W().optional(),operator_question:W().optional().nullable(),agent_command:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),controller_stage:W().optional().nullable(),missing_gates:q(W()).optional().default([]),next_handoff_condition:W().optional().nullable(),quota:of.optional().nullable(),control_plane:sf.optional().nullable(),user_todos:df.optional().nullable(),agent_todos:df.optional().nullable(),stale_latest_run_warning:Of.optional().nullable(),dependency_blockers:wf.optional().nullable(),todo_state_file:W().optional().nullable(),goal_channel_projection:af.optional().nullable()}),Ff=J({recorded_at:W().optional().nullable(),decision:W().optional().nullable(),reward:W().optional().nullable(),reason_summary:W().optional().nullable(),follow_up:W().optional().nullable()}),If=J({recorded_at:W().optional().nullable(),gate:W().optional().nullable(),decision:W().optional().nullable(),operator_question:W().optional().nullable(),reason_summary:W().optional().nullable(),follow_up:W().optional().nullable(),agent_command:W().optional().nullable()}),Lf=J({version:W().optional().nullable(),goal_id:W().optional().nullable(),run_id:W().optional().nullable(),gate_id:W().optional().nullable(),created_state_ref:W().optional().nullable(),created_policy_version:W().optional().nullable(),interrupt_payload:J({question:W().optional().nullable(),choices:q(W()).optional().default([])}).optional().nullable(),allowed_decisions:q(W()).optional().default([]),operator_decision:W().optional().nullable(),latest_state_ref:W().optional().nullable(),freshness_check:W().optional().nullable(),precondition_check:W().optional().nullable(),migration_or_rebase_result:W().optional().nullable(),resulting_action:W().optional().nullable(),validation_after_resume:W().optional().nullable()}),Rf=J({id:W().optional().nullable(),ok:K().optional().nullable(),review:W().optional().nullable()}),zf=J({classification:W().optional().nullable(),read_only_observer_ready:K().optional().nullable(),decision_advisor_ready:K().optional().nullable(),write_controller_ready:K().optional().nullable(),missing_gates:q(W()).optional().default([]),review_judgment:W().optional().nullable(),next_handoff_condition:W().optional().nullable(),gates:q(Rf).optional().default([])}),Bf=J({declared:K().optional().default(!1),required:K().optional().default(!1),path:W().optional().nullable(),path_exists:K().optional().nullable(),read_status:W().optional().nullable(),default_entry_count:G().optional().default(0),default_entries_checked:G().optional().default(0),default_entries_present:G().optional().default(0),topic_authority_count:G().optional().default(0),project_material_count:G().optional().default(0),project_material_repository_count:G().optional().default(0),project_material_owner_review_required_count:G().optional().default(0),project_material_stale_count:G().optional().default(0),project_material_current_authority_count:G().optional().default(0),deprecated_source_count:G().optional().default(0),conflict_risk:W().optional().nullable()}),Vf=J({adapter_kind:W().optional().nullable(),adapter_status:W().optional().nullable(),authority_source_count:G().optional().nullable(),authority_registry_declared:K().optional().nullable(),authority_registry_path_exists:K().optional().nullable(),authority_registry_default_entry_count:G().optional().nullable(),authority_registry_default_entries_present:G().optional().nullable(),topic_authority_count:G().optional().nullable(),project_material_count:G().optional().nullable(),project_material_repository_count:G().optional().nullable(),project_material_owner_review_required_count:G().optional().nullable(),project_material_stale_count:G().optional().nullable(),project_material_current_authority_count:G().optional().nullable(),authority_registry_conflict_risk:W().optional().nullable(),guard_count:G().optional().nullable(),sections_found:G().optional().nullable(),sections_checked:G().optional().nullable(),files_present:G().optional().nullable(),files_checked:G().optional().nullable()}),Hf=J({generated_at:W(),goal_id:W(),classification:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),recommended_action:W().optional().nullable(),health_check:W().optional().nullable(),active_task_count:G().optional().nullable(),active_priorities:gd(W(),id()).optional().nullable(),cache_check:W().optional().nullable(),json_exists:K().optional().default(!1),markdown_exists:K().optional().default(!1),human_reward:Ff.optional().nullable(),operator_gate:If.optional().nullable(),operator_gate_resume_contract:Lf.optional().nullable(),controller_readiness:zf.optional().nullable(),project_map:Vf.optional().nullable()}),Uf=J({acceptance_observation:Xd.optional().nullable().catch(null),id:W(),activation_state:Y([`active`,`stopped`]).optional().default(`active`),display_name:W().optional().nullable(),domain:W().optional().nullable(),status:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),registry_member:K().optional().default(!1),legacy_runtime_goal:K().optional().default(!1),adapter_kind:W().optional().nullable(),adapter_status:W().optional().nullable(),authority_registry:Bf.optional().nullable(),quota:of.optional().nullable(),control_plane:sf.optional().nullable(),spawn_policy:cf.optional().nullable(),orchestration:cf.optional().nullable(),coordination:J({agent_model:W().optional().nullable(),registered_agents:q(W()).optional().default([])}).optional().nullable(),index_exists:K().optional().default(!1),raw_index_records:G().optional().default(0),unique_runs:G().optional().default(0),latest_runs:q(Hf).optional().default([])}),Wf=J({available:K(),goal_count:G().optional().default(0),run_count:G().optional().default(0),goals:q(Uf).optional().default([]),recent_runs:q(Hf).optional().default([])}),Gf=J({kind:W(),severity:W(),message:W(),recommended_action:W(),goal_id:W().optional().nullable(),path:W().optional().nullable(),goal_ids:q(W()).optional().default([])}),Kf=J({available:K(),ok:K(),registry:W(),current_registry:W().optional().nullable(),current_registry_is_global:K().optional().default(!1),global_goal_count:G().optional().default(0),current_goal_count:G().optional().default(0),source_registry_count:G().optional().default(0),summary:J({high:G().optional().default(0),action:G().optional().default(0),info:G().optional().default(0),checks:G().optional().default(0),findings:G().optional().default(0)}),findings:q(Gf).optional().default([]),checks:q(W()).optional().default([])}),qf=J({runs_24h:G().optional().default(0),runs_7d:G().optional().default(0),quota_spend_slots_24h:G().optional().default(0),quota_spend_slots_7d:G().optional().default(0),automation_run_count_24h:G().optional().default(0),automation_run_count_7d:G().optional().default(0),progress_signal_run_count_24h:G().optional().default(0),progress_signal_run_count_7d:G().optional().default(0),input_tokens_24h:G().optional(),input_tokens_7d:G().optional(),output_tokens_24h:G().optional(),output_tokens_7d:G().optional(),cache_tokens_24h:G().optional(),cache_tokens_7d:G().optional(),cost_usd_24h:G().optional(),cost_usd_7d:G().optional(),duration_ms_24h:G().optional(),duration_ms_7d:G().optional()}),Jf=qf.extend({goal_id:W(),project_share_24h:G().optional().default(0)}),Yf=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),totals:qf.optional().default({runs_24h:0,runs_7d:0,quota_spend_slots_24h:0,quota_spend_slots_7d:0,automation_run_count_24h:0,automation_run_count_7d:0,progress_signal_run_count_24h:0,progress_signal_run_count_7d:0}),goals:q(Jf).optional().default([])}).optional().nullable(),Xf=J({accounting:G().optional().default(0),decision:G().optional().default(0),evidence:G().optional().default(0),state:G().optional().default(0),work:G().optional().default(0)}),Zf={accounting:0,decision:0,evidence:0,state:0,work:0},Qf=J({events_24h:G().optional().default(0),events_7d:G().optional().default(0),by_class_24h:Xf.optional().default(Zf),by_class_7d:Xf.optional().default(Zf)}),$f=Qf.extend({goal_id:W(),latest_event_class:W().optional().nullable(),latest_event_at:W().optional().nullable()}),ep={events_24h:0,events_7d:0,by_class_24h:Zf,by_class_7d:Zf},tp=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),event_classes:q(W()).optional().default([`accounting`,`decision`,`evidence`,`state`,`work`]),totals:Qf.optional().default(ep),goals:q($f).optional().default([])}).optional().nullable(),np=J({available:K().optional().default(!1),source:W().optional().default(`run_history`),goal_id:W().optional().nullable(),generated_at:W().optional().nullable(),classification:W().optional().nullable(),delivery_batch_scale:W().optional().nullable(),delivery_outcome:W().optional().nullable(),recommended_action:W().optional().nullable(),json_exists:K().optional().default(!1),markdown_exists:K().optional().default(!1),freshness_window_hours:G().optional().default(24),freshness_status:W().optional().nullable(),is_fresh:K().optional().default(!1),requires_readiness_run:K().optional().default(!0),age_seconds:G().optional().nullable(),age_hours:G().optional().nullable(),freshness_reference_time:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),reason:W().optional().nullable()}).optional().nullable(),rp=J({ok:K().optional().default(!0),registry:W().optional().nullable(),runtime_root:W().optional().nullable(),gate:W().optional().default(`promotion_readiness`),gate_state:W().optional().default(`warning`),can_promote:K().optional().default(!1),should_warn:K().optional().default(!0),non_blocking:K().optional().default(!0),recommended_action:W().optional().nullable(),warning_message:W().optional().nullable(),readiness:np.default(null)}).optional().nullable(),ip=J({decision_count:G().optional().default(0),stale_count:G().optional().default(0),rebase_required_count:G().optional().default(0),fresh_count:G().optional().default(0)}),ap=J({goal_id:W(),decision_kind:W().optional().nullable(),decision_at:W().optional().nullable(),classification:W().optional().nullable(),age_days:G().optional().nullable(),stale_by_age:K().optional().default(!1),newer_event_count_7d:G().optional().default(0),newer_event_classes_7d:Xf.optional().default(Zf),freshness_state:W().optional().nullable(),requires_decision_point_rebase:K().optional().default(!1),reason:W().optional().nullable()}),op=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),window_days:G().optional().default(7),proxy_note:W().optional().nullable(),summary:ip.optional().default({decision_count:0,stale_count:0,rebase_required_count:0,fresh_count:0}),items:q(ap).optional().default([])}).optional().nullable(),sp=J({schema_version:G().optional().default(0),minimum_dashboard_schema_version:G().optional().default(2),producer:W().optional().nullable(),reload_hint:W().optional().nullable()}).optional().default({schema_version:0,minimum_dashboard_schema_version:2,producer:null,reload_hint:`scripts/macos-dashboard-launchagent.sh restart`}),cp=J({schema_version:X(`loopx_goal_projection_scope_v0`),scope:Y([`all`,`active`,`stopped`]),complete:K(),projected_goal_count:G().int().nonnegative(),registry_goal_count:G().int().nonnegative(),registry_revision:W().optional().nullable()}),lp=J({source:W().optional().default(`serve-status`),status_url:W().optional().nullable(),health_url:W().optional().nullable(),review_material_url:W().optional().nullable(),presentation_surfaces_url:W().optional().nullable(),presentation_detail_url:W().optional().nullable(),periodic_report_index_url:W().optional().nullable(),periodic_report_detail_url:W().optional().nullable(),ssh_hosts_url:W().optional().nullable(),reward_dry_run_url:W().optional().nullable(),reward_append_url:W().optional().nullable(),reward_write_enabled:K().optional().default(!1),configure_goal_dry_run_url:W().optional().nullable(),configure_goal_apply_url:W().optional().nullable(),control_plane_write_enabled:K().optional().default(!1)}).optional().nullable(),up=J({extension_id:W().min(1),surface_id:W().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/),extension_revision:W().min(1),payload_sha256:W().regex(/^[0-9a-f]{64}$/)}).strict(),dp=J({extension_id:W().min(1),extension_revision:W().min(1),surface_id:W().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/),surface_kind:W().regex(/^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/),title:W().min(1),view_schema:W().regex(/^[a-z][a-z0-9_]*_v\d+$/),visibility:Y([`public-safe`,`owner-only`]),goal_id:W().min(1).nullable(),generated_at:W().min(1).nullable(),review_due_at:W().min(1).nullable(),diagnostic:W().min(1).nullable(),empty_state_title:W().min(1),empty_state_detail:W().min(1)}),fp=ud([dp.extend({state:Y([`ready`,`review_due`]),goal_id:W().min(1),generated_at:W().min(1),detail_ref:up}).strict(),dp.extend({state:X(`empty`),detail_ref:od().optional()}).strict(),dp.extend({state:X(`invalid`),diagnostic:W().min(1),detail_ref:od().optional()}).strict()]),pp=J({schema_version:X(`extension_presentation_surfaces_v0`),count:G().int().nonnegative(),ready_count:G().int().nonnegative(),review_due_count:G().int().nonnegative(),empty_count:G().int().nonnegative(),invalid_count:G().int().nonnegative(),items:q(fp)}).strict(),mp={schema_version:`extension_presentation_surfaces_v0`,count:0,ready_count:0,review_due_count:0,empty_count:0,invalid_count:0,items:[]};J({ok:X(!0),presentation_surfaces:pp}).strict();var hp=J({goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),content_sha256:W().regex(/^sha256:[0-9a-f]{64}$/)}).strict(),gp=J({goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),publication_id:W().min(1),delivered_at:W().min(1),predecessor_publication_id:W().min(1).nullable().optional(),detail_ref:hp}).strict(),_p=J({schema_version:X(`periodic_report_workspace_index_v0`),count:G().int().nonnegative(),items:q(gp)}),vp=_p.extend({returned_count:G().int().nonnegative(),total_count:G().int().nonnegative(),limit:G().int().nonnegative(),offset:G().int().nonnegative(),truncated:K()}).strict(),yp=_p.strict().transform(e=>({...e,returned_count:e.count,total_count:e.count,limit:e.count,offset:0,truncated:!1})),bp=J({ok:X(!0),periodic_reports:ud([vp,yp])}).strict(),xp=J({schema_version:X(`periodic_report_workspace_projection_v0`),goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),generated_at:W().min(1),title:W().min(1),summary:W().min(1),content_sha256:W().regex(/^sha256:[0-9a-f]{64}$/),period_window:J({start_at:W().min(1),end_at:W().min(1)}).strict(),interaction:J({attention_kind:X(`progress`),interaction:X(`inform`),delivery:X(`surface`),form:X(`milestone_report`),writable:X(!1)}).strict(),delta:J({added_count:G().int().nonnegative(),changed_count:G().int().nonnegative(),item_count:G().int().positive(),items:q(J({fact_id:W().min(1),source_ref:W().min(1),title:W().min(1),summary:W().min(1),status:W().min(1),content_kind:W().min(1),change_kind:Y([`added`,`changed`]),previous_status:W().min(1).optional()}).strict())}).strict(),publication:J({publication_id:W().min(1),delivered_at:W().min(1),predecessor_publication_id:W().min(1).nullable().optional(),cursor_id:W().min(1)}).strict(),truth_contract:J({published_cursor_is_source_of_truth:X(!0),generation_receipt_is_delivery_receipt:X(!1),projection_is_writable:X(!1),browser_write_api:X(!1)}).strict()}).strict(),Sp=J({ok:X(!0),projection:xp}).strict(),Cp=J({ok:K(),registry:W(),runtime_root:W(),goal_count:G(),run_count:G(),status_contract:sp,goal_projection:cp.optional().nullable().default(null),local_dashboard_api:lp,contract:J({ok:K(),summary:J({errors:G(),warnings:G(),checks:G()}),errors:q(W()),warnings:q(W()),checks:q(W()).optional().default([])}),global_registry:Kf.optional().default({available:!1,ok:!0,registry:``,current_registry:null,current_registry_is_global:!1,global_goal_count:0,current_goal_count:0,source_registry_count:0,summary:{high:0,action:0,info:0,checks:0,findings:0},findings:[],checks:[]}),attention_queue:J({available:K(),item_count:G(),needs_user_or_controller:G(),needs_controller:G().optional().default(0),needs_codex:G(),watching_external_evidence:G(),autonomous_backlog_candidates:Ef.optional().nullable(),items:q(Pf)}),run_history:Wf.optional().default({available:!1,goal_count:0,run_count:0,goals:[],recent_runs:[]}),event_ledger_summary:tp.default(null),promotion_readiness_summary:np.default(null),promotion_gate:rp.default(null),decision_freshness_summary:op.default(null),usage_summary:Yf.default(null),todo_index:pf.optional().nullable().default(null),agent_management_projection:yf.optional().nullable().default(null),goal_channel_notification_projection:xf.optional().nullable().default(null),presentation_surfaces:pp.optional().default(mp)});J({ok:K(),dry_run:K().optional().default(!0),appended:K().optional().default(!1),goal_id:W().optional().nullable(),raw_index_records_before:G().optional().nullable(),preview_id:W().optional().nullable(),selected_run:J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),recommended_action:W().optional().nullable(),json_exists:K().optional().nullable(),markdown_exists:K().optional().nullable()}).optional().nullable(),human_reward:Ff.optional().nullable(),active_state_summary:W().optional().nullable(),project_agent_visibility:J({source_of_truth:W().optional().nullable(),history_command:W().optional().nullable(),active_state_role:W().optional().nullable(),review_packet_role:W().optional().nullable()}).optional().nullable(),error:W().optional().nullable()});function wp(e,t,n){let r=e.run_history.goals.map(e=>e.id===t&&e.activation_state!==n?{...e,activation_state:n}:e),i=e.attention_queue.items.map(e=>e.goal_id===t&&e.activation_state!==n?{...e,activation_state:n}:e),a=r.some((t,n)=>t!==e.run_history.goals[n]),o=i.some((t,n)=>t!==e.attention_queue.items[n]);return!a&&!o?e:{...e,attention_queue:o?{...e.attention_queue,items:i}:e.attention_queue,run_history:a?{...e.run_history,goals:r}:e.run_history}}function Tp(e,t){let n=e.run_history.goals.filter(e=>e.id!==t),r=e.attention_queue.items.filter(e=>e.goal_id!==t);return n.length===e.run_history.goals.length&&r.length===e.attention_queue.items.length?e:{...e,attention_queue:{...e.attention_queue,items:r},run_history:{...e.run_history,goals:n}}}function Ep(e){return Cp.parse(e)}function Dp(e){return e instanceof fu?e.issues.map(e=>`${e.path.join(`.`)||`root`}: ${e.message}`).join(`; `):e instanceof Error?e.message:String(e)}var Op=Ep(Jd),kp=J({ok:X(!0),schema_version:X(`loopx_workspace_directory_v1`),registry_revision:W(),goals:q(J({id:W(),display_name:W(),activation_state:Y([`active`,`stopped`]),registry_member:X(!0)}))});function Ap(e,t,n){let r=new URL(e,n);r.searchParams.delete(`goal_activation`),r.searchParams.delete(`goal_id`),r.searchParams.delete(`view`);for(let[e,n]of Object.entries(t))r.searchParams.set(e,n);return r.toString()}async function jp(e,t){let n=await fetch(Ap(e,{view:`workspace-directory`},t),{cache:`no-store`,signal:AbortSignal.timeout(5e3)});if(!n.ok)return null;let r=kp.safeParse(await n.json());return r.success?r.data:null}function Mp(e){return Ep({ok:!0,registry:``,runtime_root:``,goal_count:e.goals.length,run_count:0,local_dashboard_api:{},contract:{ok:!0,summary:{errors:0,warnings:0,checks:0},errors:[],warnings:[]},attention_queue:{available:!1,item_count:0,needs_user_or_controller:0,needs_codex:0,watching_external_evidence:0,items:[]},run_history:{available:!1,goal_count:e.goals.length,run_count:0,goals:e.goals,recent_runs:[]}})}async function Np(e,t,n,r,i,a,o){let s=[...n.goals],c=new Map;async function l(){for(;s.length&&i()&&!o?.aborted;){let l=s.findIndex(e=>e.id===a()),u=l>=0?l:s.findIndex(e=>e.activation_state===`active`);if(u<0)return;let d=s.splice(u,1)[0],f=(c.get(d.id)??0)+1;c.set(d.id,f);let p=new AbortController,m=!1,h=()=>p.abort();o?.addEventListener(`abort`,h,{once:!0});let g=setTimeout(()=>{m=!0,p.abort()},3e4),_=null;try{let a=await fetch(Ap(e,{goal_id:d.id},t),{cache:`no-store`,signal:p.signal});if(!a.ok)_=a.status===409?`revision`:a.status>=500?`service`:`scope`;else{let e=await a.json();if(e.workspace_registry_revision!==n.registry_revision)_=`revision`;else{let t=Ep(e);!t.run_history.goals.some(e=>e.id===d.id)||t.run_history.goals.some(e=>e.id!==d.id)?_=`scope`:i()&&!o?.aborted&&r(d.id,t,null)}}}catch(e){_=m?`timeout`:e instanceof TypeError?`network`:`invalid`}finally{clearTimeout(g),o?.removeEventListener(`abort`,h)}if(!i()||o?.aborted)return;_&&[`timeout`,`network`,`service`].includes(_)&&f<3?(await new Promise(e=>setTimeout(e,f*1e3)),s.push(d)):_&&r(d.id,null,_)}}await Promise.all([l(),l()])}var Pp=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),Fp=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),Ip=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),Lp=e=>{let t=Ip(e);return t.charAt(0).toUpperCase()+t.slice(1)},Rp={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},zp=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Bp=(0,z.createContext)({}),Vp=()=>(0,z.useContext)(Bp),Hp=(0,z.forwardRef)(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>{let{size:l=24,strokeWidth:u=2,absoluteStrokeWidth:d=!1,color:f=`currentColor`,className:p=``}=Vp()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return(0,z.createElement)(`svg`,{ref:c,...Rp,width:t??l??Rp.width,height:t??l??Rp.height,stroke:e??f,strokeWidth:m,className:Pp(`lucide`,p,i),...!a&&!zp(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,z.createElement)(e,t)),...Array.isArray(a)?a:[a]])}),Z=(e,t)=>{let n=(0,z.forwardRef)(({className:n,...r},i)=>(0,z.createElement)(Hp,{ref:i,iconNode:t,className:Pp(`lucide-${Fp(Lp(e))}`,`lucide-${e}`,n),...r}));return n.displayName=Lp(e),n},Up=Z(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]),Wp=Z(`arrow-down`,[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]),Gp=Z(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),Kp=Z(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),qp=Z(`arrow-up-down`,[[`path`,{d:`m21 16-4 4-4-4`,key:`f6ql7i`}],[`path`,{d:`M17 20V4`,key:`1ejh1v`}],[`path`,{d:`m3 8 4-4 4 4`,key:`11wl7u`}],[`path`,{d:`M7 4v16`,key:`1glfcx`}]]),Jp=Z(`arrow-up`,[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]),Yp=Z(`badge-check`,[[`path`,{d:`M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z`,key:`3c2336`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),Xp=Z(`bell`,[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]]),Zp=Z(`bot`,[[`path`,{d:`M12 8V4H8`,key:`hb8ula`}],[`rect`,{width:`16`,height:`12`,x:`4`,y:`8`,rx:`2`,key:`enze0r`}],[`path`,{d:`M2 14h2`,key:`vft8re`}],[`path`,{d:`M20 14h2`,key:`4cs60a`}],[`path`,{d:`M15 13v2`,key:`1xurst`}],[`path`,{d:`M9 13v2`,key:`rq6x2g`}]]),Qp=Z(`braces`,[[`path`,{d:`M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1`,key:`ezmyqa`}],[`path`,{d:`M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1`,key:`e1hn23`}]]),$p=Z(`calendar-clock`,[[`path`,{d:`M16 14v2.2l1.6 1`,key:`fo4ql5`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`path`,{d:`M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5`,key:`1osxxc`}],[`path`,{d:`M3 10h5`,key:`r794hk`}],[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`circle`,{cx:`16`,cy:`16`,r:`6`,key:`qoo3c4`}]]),em=Z(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),tm=Z(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),nm=Z(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),rm=Z(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),im=Z(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]),am=Z(`circle-check`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),om=Z(`clipboard-check`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}],[`path`,{d:`m9 14 2 2 4-4`,key:`df797q`}]]),sm=Z(`code-xml`,[[`path`,{d:`m18 16 4-4-4-4`,key:`1inbqp`}],[`path`,{d:`m6 8-4 4 4 4`,key:`15zrgr`}],[`path`,{d:`m14.5 4-5 16`,key:`e7oirm`}]]),cm=Z(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),lm=Z(`database`,[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]),um=Z(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),dm=Z(`ellipsis`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]]),fm=Z(`external-link`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]),pm=Z(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),mm=Z(`file-braces`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1`,key:`1oajmo`}],[`path`,{d:`M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1`,key:`mpwhp6`}]]),hm=Z(`file-check-corner`,[[`path`,{d:`M10.5 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v6`,key:`g5mvt7`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m14 20 2 2 4-4`,key:`15kota`}]]),gm=Z(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]),_m=Z(`git-branch`,[[`path`,{d:`M15 6a9 9 0 0 0-9 9V3`,key:`1cii5b`}],[`circle`,{cx:`18`,cy:`6`,r:`3`,key:`1h7g24`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}]]),vm=Z(`git-compare-arrows`,[[`circle`,{cx:`5`,cy:`6`,r:`3`,key:`1qnov2`}],[`path`,{d:`M12 6h5a2 2 0 0 1 2 2v7`,key:`1yj91y`}],[`path`,{d:`m15 9-3-3 3-3`,key:`1lwv8l`}],[`circle`,{cx:`19`,cy:`18`,r:`3`,key:`1qljk2`}],[`path`,{d:`M12 18H7a2 2 0 0 1-2-2V9`,key:`16sdep`}],[`path`,{d:`m9 15 3 3-3 3`,key:`1m3kbl`}]]),ym=Z(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),bm=Z(`languages`,[[`path`,{d:`m5 8 6 6`,key:`1wu5hv`}],[`path`,{d:`m4 14 6-6 2-3`,key:`1k1g8d`}],[`path`,{d:`M2 5h12`,key:`or177f`}],[`path`,{d:`M7 2h1`,key:`1t2jsx`}],[`path`,{d:`m22 22-5-10-5 10`,key:`don7ne`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),xm=Z(`layout-dashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),Sm=Z(`list-plus`,[[`path`,{d:`M16 5H3`,key:`m91uny`}],[`path`,{d:`M11 12H3`,key:`51ecnj`}],[`path`,{d:`M16 19H3`,key:`zzsher`}],[`path`,{d:`M18 9v6`,key:`1twb98`}],[`path`,{d:`M21 12h-6`,key:`bt1uis`}]]),Cm=Z(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),wm=Z(`maximize-2`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]),Tm=Z(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),Em=Z(`message-circle-question-mark`,[[`path`,{d:`M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719`,key:`1sd12s`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Dm=Z(`message-square-text`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}],[`path`,{d:`M7 11h10`,key:`1twpyw`}],[`path`,{d:`M7 15h6`,key:`d9of3u`}],[`path`,{d:`M7 7h8`,key:`af5zfr`}]]),Om=Z(`minimize-2`,[[`path`,{d:`m14 10 7-7`,key:`oa77jy`}],[`path`,{d:`M20 10h-6V4`,key:`mjg0md`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M4 14h6v6`,key:`rmj7iw`}]]),km=Z(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),Am=Z(`palette`,[[`path`,{d:`M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z`,key:`e79jfc`}],[`circle`,{cx:`13.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`1okk4w`}],[`circle`,{cx:`17.5`,cy:`10.5`,r:`.5`,fill:`currentColor`,key:`f64h9f`}],[`circle`,{cx:`6.5`,cy:`12.5`,r:`.5`,fill:`currentColor`,key:`qy21gx`}],[`circle`,{cx:`8.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`fotxhn`}]]),jm=Z(`paperclip`,[[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551`,key:`1miecu`}]]),Mm=Z(`pause`,[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]),Nm=Z(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),Pm=Z(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),Fm=Z(`radio`,[[`path`,{d:`M16.247 7.761a6 6 0 0 1 0 8.478`,key:`1fwjs5`}],[`path`,{d:`M19.075 4.933a10 10 0 0 1 0 14.134`,key:`ehdyv1`}],[`path`,{d:`M4.925 19.067a10 10 0 0 1 0-14.134`,key:`1q22gi`}],[`path`,{d:`M7.753 16.239a6 6 0 0 1 0-8.478`,key:`r2q7qm`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]),Im=Z(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),Lm=Z(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),Rm=Z(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]),zm=Z(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),Bm=Z(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]),Vm=Z(`server-cog`,[[`path`,{d:`m10.852 14.772-.383.923`,key:`11vil6`}],[`path`,{d:`M13.148 14.772a3 3 0 1 0-2.296-5.544l-.383-.923`,key:`1v3clb`}],[`path`,{d:`m13.148 9.228.383-.923`,key:`t2zzyc`}],[`path`,{d:`m13.53 15.696-.382-.924a3 3 0 1 1-2.296-5.544`,key:`1bxfiv`}],[`path`,{d:`m14.772 10.852.923-.383`,key:`k9m8cz`}],[`path`,{d:`m14.772 13.148.923.383`,key:`1xvhww`}],[`path`,{d:`M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5`,key:`tn8das`}],[`path`,{d:`M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5`,key:`1g2pve`}],[`path`,{d:`M6 18h.01`,key:`uhywen`}],[`path`,{d:`M6 6h.01`,key:`1utrut`}],[`path`,{d:`m9.228 10.852-.923-.383`,key:`1wtb30`}],[`path`,{d:`m9.228 13.148-.923.383`,key:`1a830x`}]]),Hm=Z(`server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]),Um=Z(`settings-2`,[[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`path`,{d:`M19 7h-9`,key:`6i9tg`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]),Wm=Z(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),Gm=Z(`sliders-horizontal`,[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]),Km=Z(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]),qm=Z(`square`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]),Jm=Z(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),Ym=Z(`test-tube-diagonal`,[[`path`,{d:`M21 7 6.82 21.18a2.83 2.83 0 0 1-3.99-.01a2.83 2.83 0 0 1 0-4L17 3`,key:`1ub6xw`}],[`path`,{d:`m16 2 6 6`,key:`1gw87d`}],[`path`,{d:`M12 16H4`,key:`1cjfip`}]]),Xm=Z(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),Zm=Z(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Qm=Z(`unlink`,[[`path`,{d:`m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71`,key:`yqzxt4`}],[`path`,{d:`m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71`,key:`4qinb0`}],[`line`,{x1:`8`,x2:`8`,y1:`2`,y2:`5`,key:`1041cp`}],[`line`,{x1:`2`,x2:`5`,y1:`8`,y2:`8`,key:`14m1p5`}],[`line`,{x1:`16`,x2:`16`,y1:`19`,y2:`22`,key:`rzdirn`}],[`line`,{x1:`19`,x2:`22`,y1:`16`,y2:`16`,key:`ox905f`}]]),$m=Z(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);function eh(e){return/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(e)||e.startsWith(`//`)}function th(e){return[`localhost`,`127.0.0.1`,`::1`,`[::1]`].includes(e)}function nh(e,t,n){let r=e.trim();if(!r)return{error:`status URL is empty`};let i;try{i=new URL(r,t)}catch{return{error:`status URL is invalid`}}let a=!eh(r),o=th(i.hostname);return!a&&!o?{error:`${n} must be relative or loopback`}:{source:{isLoopback:o,isRelative:a,url:r}}}function rh(e,t){return nh(e,t,`statusUrl`)}function ih(e,t){let n=nh(e,t,`Ops statusUrl`);return n.error?{error:`${n.error}; use showcase mode for public links.`}:n}function ah(e,t,n){let r=new URL(e,n);return r.searchParams.set(`goal_activation`,t),r.toString()}function oh(e,t){if(!t||!e.isLoopback)return null;try{let n=new URL(e.url,window.location.href),r=new URL(t,n.origin);return th(r.hostname)?r.toString():null}catch{return null}}function sh(e,t){return{detailUrl:oh(t,e.local_dashboard_api?.periodic_report_detail_url),indexUrl:oh(t,e.local_dashboard_api?.periodic_report_index_url)}}async function ch(e,t){let n=new URL(e);n.searchParams.set(`goal_id`,t),n.searchParams.set(`limit`,`100`),n.searchParams.set(`offset`,`0`);let r=await fetch(n,{cache:`no-store`});if(!r.ok)throw Error(`HTTP ${r.status} while loading published reports`);return bp.parse(await r.json()).periodic_reports}async function lh(e,t){let n=new URL(e);Object.entries(t).forEach(([e,t])=>n.searchParams.set(e,t));let r=await fetch(n,{cache:`no-store`});if(!r.ok)throw Error(`HTTP ${r.status} while loading published report detail`);return Sp.parse(await r.json()).projection}function uh(e,t,n){let r=e.find(e=>e.agentId===t&&e.available)??e.find(e=>e.agentId===n&&e.available)??e.find(e=>e.available);if(!r)throw Error(`Chat requires at least one available route`);return r}function dh(e){return!!(e&&typeof e==`object`&&e.session_invalidated===!0)}var fh=``.replace(/\/+$/,``);function ph(e){return!fh||/^https?:\/\//.test(e)?e:new URL(e,`${fh}/`).toString()}var mh=J({todo_id:W().nullable(),role:W().nullable(),status:W(),priority:W().nullable(),text:W(),action_kind:W().nullable(),task_class:W().nullable(),claimed_by:W().nullable(),evidence:W().nullable()}),hh=J({goal_id:W(),title:W(),objective:W(),status:W(),waiting_on:W().nullable(),severity:W().nullable(),gate:W(),next_action:W(),top_todo:mh.nullable(),todos:q(mh),evidence:q(W()),quota:J({state:W().nullable(),spent_slots:G().nullable(),allowed_slots:G().nullable(),reason:W().nullable()})});J({ok:K(),schema_version:X(`loopx_chat_status_v0`),selected_goal_id:W().nullable(),goal_count:G(),goals:q(hh)});var gh=J({ok:X(!0),schema_version:Y([`loopx_chat_capabilities_v0`,`loopx_chat_capabilities_v1`]),agent_backend:W(),sandbox:W(),approval_policy:W(),todo_write:W(),goal_subagent_configuration:W().optional(),goal_id:W().nullable(),streaming:K().optional(),resume:K().optional(),interrupt:K().optional(),typed_actions:K().optional(),action_kinds:q(W()).optional(),adapters:q(J({agent_id:W(),display_name:W(),adapter_kind:W(),available:K(),streaming:K(),resume:K(),interrupt:K(),location:W().optional(),source:W().optional(),tool_calls:K().optional(),trust_scope:W().optional()})).optional(),lark_cli:J({available:K(),source:W(),version:W().nullable(),error_code:W().nullable()}).optional()}),_h=J({kind:X(`todo`),text:W(),priority:Y([`P0`,`P1`,`P2`]),rationale:W()}),vh=J({operation:Y([`merge`,`release`,`deploy`,`delete`,`payment`]),target:W().min(1).max(160),summary:W().max(300)}),yh=J({schema_version:X(`loopx_chat_agent_response_v0`),message:W(),proposals:q(_h),protected_action:vh.nullable().optional().default(null),gate:J({kind:W(),summary:W(),next_action:W()}).nullable()}),bh=J({closed:X(!0),ok:X(!0),session_id:W().min(1)});J({dry_run:X(!0),ok:X(!0),preview_id:W().min(1),todo:J({goal_id:W().min(1),text:W(),todo_id:W().optional()})});var xh=J({schema_version:X(`loopx_chat_todo_receipt_v0`),receipt_id:W().min(1),preview_id:W().min(1),goal_id:W().min(1),todo_id:W().min(1),status:X(`applied`),outcome:Y([`todo_added`,`todo_already_exists`]),already_exists:K(),preview_revision:W().nullable()});J({applied:X(!0),ok:X(!0),receipt:xh,todo:J({text:W(),todo_id:W()})});var Sh=J({model_config:J({model:W(),reasoning_effort:W().optional()}).optional(),mode:W(),spawn_allowed:K(),max_children:G().int().nonnegative(),allowed_domains:q(W()).optional().default([])}).passthrough(),Ch=J({ok:X(!0),dry_run:K(),execute:K(),written:K(),changed:K(),goal_id:W().min(1),changed_fields:q(W()),before:J({orchestration:Sh}).passthrough(),after:J({orchestration:Sh}).passthrough(),preview_id:W().min(1),feature_summary:J({multi_subagent:Y([`off`,`enabled`])}).passthrough(),global_sync:J({required:K(),executed:K(),readback:J({status:W(),verified:K()}).passthrough()}).passthrough()}),wh=J({id:W().min(1),outcome:Y([`approved`,`rejected`,`cancelled`]),projectionVerified:K().nullable(),proposal:_h,receipt:xh.nullable()}).superRefine((e,t)=>{e.outcome===`approved`&&!e.receipt&&t.addIssue({code:`custom`,message:`approved decision history requires a Todo receipt`,path:[`receipt`]}),e.outcome!==`approved`&&e.receipt&&t.addIssue({code:`custom`,message:`zero-write decision history must not include a Todo receipt`,path:[`receipt`]})});J({schema_version:X(`loopx_chat_decision_history_v0`),goal_id:W().min(1),decisions:q(wh).max(24)});var Th=class extends Error{payload;constructor(e,t){super(e),this.payload=t}},Eh=Y([`goal.create`,`goal.update`,`goal.lifecycle`,`todo.create`,`todo.update`,`agent.bind`,`heartbeat.bind`,`monitor.create`,`monitor.update`,`gate.resolve`,`run.correct`,`operation.execute`]),Dh=J({schema_version:X(`loopx_operation_envelope_v0`),lifecycle_state:Y([`prepared`,`awaiting_confirmation`,`claimed`,`outcome_observed`]),operation_id:W().min(1),confirmation_digest:W().min(1),payload_digest:W().min(1),projection_digest:W().min(1),expires_at:W().min(1),delivery:gd(W(),id()).nullable(),confirmation:gd(W(),id()).nullable(),claim:gd(W(),id()).nullable(),outcome:gd(W(),id()).nullable(),result_delivery:gd(W(),id()).nullable().optional()}).passthrough(),Oh=J({schema_version:X(`loopx_chat_action_proposal_v1`),proposal_id:W().min(1),action_kind:Eh,summary:W().min(1),normalized_parameters:gd(W(),id()),context:gd(W(),id()),expected_state_fingerprint:W().min(1),permission_classification:W().min(1),validation_evidence:q(W().refine(e=>e.trim().length>0,`Validation evidence must be non-blank text`)),available_transitions:q(Y([`apply`,`cancel`,`regenerate`,`reject`,`defer`])),status:Y([`preview_ready`,`applying`,`gated`,`failed`,`rejected`,`deferred`,`cancelled`,`stale`,`applied`]),receipt:gd(W(),id()).nullable(),stale:gd(W(),id()).nullable(),gate:gd(W(),id()).nullable().optional(),error:gd(W(),id()).nullable().optional(),checkpoint:gd(W(),id()).nullable().optional(),regenerated_from:W().nullable().optional(),operation:Dh.nullable().optional(),created_at:W(),updated_at:W()}),kh=J({ok:X(!0),proposal:Oh});async function Ah(e){let t=await Ih(`/api/actions/preview`,{method:`POST`,body:JSON.stringify({action_kind:e.actionKind,context:e.context,idempotency_key:e.idempotencyKey,normalized_parameters:e.normalizedParameters,summary:e.summary})});return kh.parse(t).proposal}var jh=J({ok:X(!0),schema_version:X(`loopx_chat_action_list_v1`),proposals:q(Oh)});async function Mh(e={}){let t=new URLSearchParams;e.contextKind&&t.set(`context_kind`,e.contextKind),e.goalId&&t.set(`goal_id`,e.goalId);let n=t.size>0?`?${t.toString()}`:``;return jh.parse(await Ih(`/api/actions${n}`)).proposals}async function Nh(e){let t=await Ih(`/api/actions/${encodeURIComponent(e)}/apply`,{method:`POST`,body:`{}`});return J({ok:X(!0),proposal:Oh,turn:gd(W(),id()).nullable().optional()}).parse(t)}async function Ph(e){return kh.parse(await Ih(`/api/actions/${encodeURIComponent(e)}/cancel`,{method:`POST`,body:`{}`})).proposal}async function Fh(e,t){return kh.parse(await Ih(`/api/actions/${encodeURIComponent(e)}/${t}`,{method:`POST`,body:`{}`})).proposal}async function Ih(e,t){let n;try{n=await fetch(ph(e),{cache:`no-store`,...t,headers:{"Content-Type":`application/json`,...t?.headers}})}catch{throw new Th(`无法连接 LoopX Chat 服务。请确认 Dashboard 与 Chat 服务已启动且来自同一版本。`,{error_code:`chat_api_unavailable`})}let r=await n.text(),i=null;if(r.trim())try{i=JSON.parse(r)}catch{i=null}let a=i&&typeof i==`object`&&!Array.isArray(i)?i:{};if(!n.ok){let e=(a.proposal&&typeof a.proposal==`object`?a.proposal:null)?.status===`stale`?`来源状态已变化,请重新生成预览。`:null,t=n.status>=500?`LoopX Chat 服务暂时不可用(HTTP ${n.status})。请确认 Dashboard 与 Chat 服务已启动且来自同一版本。`:`LoopX Chat 请求失败(HTTP ${n.status})。`;throw new Th(e??String(a.error||t),Object.keys(a).length?a:{error_code:`chat_api_unavailable`,http_status:n.status})}if(i===null)throw new Th(`LoopX Chat 服务返回了无法识别的响应(HTTP ${n.status})。请确认 Dashboard 与 Chat 服务来自同一版本。`,{error_code:`invalid_chat_api_response`,http_status:n.status});return i}async function Lh(){return gh.parse(await Ih(`/api/chat/capabilities`))}async function Rh(e){return Ih(`/api/chat/projection-messages`,{method:`POST`,body:JSON.stringify({answer:e.answer,context_kind:e.contextKind,goal_id:e.goalId,question:e.question})})}async function zh(e,t=`codex`,n=`resume_latest`,r=`goal`){return Ih(`/api/chat/sessions`,{method:`POST`,body:JSON.stringify({goal_id:e,agent_id:t,mode:n,context_kind:r})})}async function Bh(e){return Ih(`/api/chat/sessions/${e}`)}async function Vh(e){let t=new URLSearchParams;return e.agentId&&t.set(`agent_id`,e.agentId),e.channelId&&t.set(`channel_id`,e.channelId),e.goalId&&t.set(`goal_id`,e.goalId),Ih(`/api/chat/sessions?${t.toString()}`)}function Hh(e){let t=new Map;for(let n of e)for(let e of n.messages)t.set(e.message_id,e);return[...t.values()].sort((e,t)=>e.created_at.localeCompare(t.created_at)||e.message_id.localeCompare(t.message_id))}async function Uh(e){let t=await Vh(e),n=await Promise.all(t.sessions.map(e=>Bh(e.session_id)));return{messages:Hh(n),sessions:t.sessions,snapshots:n}}async function Wh(e,t,n,r=[]){return Ih(`/api/chat/sessions/${e}/turns`,{method:`POST`,body:JSON.stringify({message:t,client_turn_id:n,...r.length?{attachments:r.map(e=>({data_url:e.dataUrl,id:e.id,mime_type:e.mimeType,name:e.name,size:e.size}))}:{}})})}function Gh(e){let t=e.split(` +Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.`)}for(let n of e.seen.entries()){let r=n[1];if(t===n[0]){a(n);continue}if(e.external){let r=e.external.registry.get(n[0])?.id;if(t!==n[0]&&r){a(n);continue}}if(e.metadataRegistry.get(n[0])?.id){a(n);continue}if(r.cycle){a(n);continue}if(r.count>1&&e.reused===`ref`){a(n);continue}}}function kl(e,t){let n=e.seen.get(t);if(!n)throw Error(`Unprocessed schema. This is a bug in Zod.`);let r=t=>{let n=e.seen.get(t);if(n.ref===null)return;let i=n.def??n.schema,a={...i},o=n.ref;if(n.ref=null,o){r(o);let n=e.seen.get(o),s=n.schema;if(s.$ref&&(e.target===`draft-07`||e.target===`draft-04`||e.target===`openapi-3.0`)?(i.allOf=i.allOf??[],i.allOf.push(s)):Object.assign(i,s),Object.assign(i,a),t._zod.parent===o)for(let e in i)e!==`$ref`&&e!==`allOf`&&(e in a||delete i[e]);if(s.$ref&&n.def)for(let e in i)e!==`$ref`&&e!==`allOf`&&e in n.def&&JSON.stringify(i[e])===JSON.stringify(n.def[e])&&delete i[e]}let s=t._zod.parent;if(s&&s!==o){r(s);let t=e.seen.get(s);if(t?.schema.$ref&&(i.$ref=t.schema.$ref,t.def))for(let e in i)e!==`$ref`&&e!==`allOf`&&e in t.def&&JSON.stringify(i[e])===JSON.stringify(t.def[e])&&delete i[e]}e.override({zodSchema:t,jsonSchema:i,path:n.path??[]})};for(let t of[...e.seen.entries()].reverse())r(t[0]);let i={};if(e.target===`draft-2020-12`?i.$schema=`https://json-schema.org/draft/2020-12/schema`:e.target===`draft-07`?i.$schema=`http://json-schema.org/draft-07/schema#`:e.target===`draft-04`?i.$schema=`http://json-schema.org/draft-04/schema#`:e.target,e.external?.uri){let n=e.external.registry.get(t)?.id;if(!n)throw Error("Schema is missing an `id` property");i.$id=e.external.uri(n)}Object.assign(i,n.def??n.schema);let a=e.metadataRegistry.get(t)?.id;a!==void 0&&i.id===a&&delete i.id;let o=e.external?.defs??{};for(let t of e.seen.entries()){let e=t[1];e.def&&e.defId&&(e.def.id===e.defId&&delete e.def.id,o[e.defId]=e.def)}e.external||Object.keys(o).length>0&&(e.target===`draft-2020-12`?i.$defs=o:i.definitions=o);try{let n=JSON.parse(JSON.stringify(i));return Object.defineProperty(n,"~standard",{value:{...t[`~standard`],jsonSchema:{input:Ml(t,`input`,e.processors),output:Ml(t,`output`,e.processors)}},enumerable:!1,writable:!1}),n}catch{throw Error(`Error converting schema to JSON.`)}}function Al(e,t){let n=t??{seen:new Set};if(n.seen.has(e))return!1;n.seen.add(e);let r=e._zod.def;if(r.type===`transform`)return!0;if(r.type===`array`)return Al(r.element,n);if(r.type===`set`)return Al(r.valueType,n);if(r.type===`lazy`)return Al(r.getter(),n);if(r.type===`promise`||r.type===`optional`||r.type===`nonoptional`||r.type===`nullable`||r.type===`readonly`||r.type==="default"||r.type===`prefault`)return Al(r.innerType,n);if(r.type===`intersection`)return Al(r.left,n)||Al(r.right,n);if(r.type===`record`||r.type===`map`)return Al(r.keyType,n)||Al(r.valueType,n);if(r.type===`pipe`)return e._zod.traits.has(`$ZodCodec`)?!0:Al(r.in,n)||Al(r.out,n);if(r.type===`object`){for(let e in r.shape)if(Al(r.shape[e],n))return!0;return!1}if(r.type===`union`){for(let e of r.options)if(Al(e,n))return!0;return!1}if(r.type===`tuple`){for(let e of r.items)if(Al(e,n))return!0;return!!(r.rest&&Al(r.rest,n))}return!1}var jl=(e,t={})=>n=>{let r=El({...n,processors:t});return Dl(e,r),Ol(r,e),kl(r,e)},Ml=(e,t,n={})=>r=>{let{libraryOptions:i,target:a}=r??{},o=El({...i??{},target:a,io:t,processors:n});return Dl(e,o),Ol(o,e),kl(o,e)},Nl={guid:`uuid`,url:`uri`,datetime:`date-time`,json_string:`json-string`,regex:``},Pl=(e,t,n,r)=>{let i=n;i.type=`string`;let{minimum:a,maximum:o,format:s,patterns:c,contentEncoding:l}=e._zod.bag;if(typeof a==`number`&&(i.minLength=a),typeof o==`number`&&(i.maxLength=o),s&&(i.format=Nl[s]??s,i.format===``&&delete i.format,s===`time`&&delete i.format),l&&(i.contentEncoding=l),c&&c.size>0){let e=[...c];e.length===1?i.pattern=e[0].source:e.length>1&&(i.allOf=[...e.map(e=>({...t.target===`draft-07`||t.target===`draft-04`||t.target===`openapi-3.0`?{type:`string`}:{},pattern:e.source}))])}},Fl=(e,t,n,r)=>{let i=n,{minimum:a,maximum:o,format:s,multipleOf:c,exclusiveMaximum:l,exclusiveMinimum:u}=e._zod.bag;i.type=typeof s==`string`&&s.includes(`int`)?`integer`:`number`;let d=typeof u==`number`&&u>=(a??-1/0),f=typeof l==`number`&&l<=(o??1/0),p=t.target===`draft-04`||t.target===`openapi-3.0`;d?p?(i.minimum=u,i.exclusiveMinimum=!0):i.exclusiveMinimum=u:typeof a==`number`&&(i.minimum=a),f?p?(i.maximum=l,i.exclusiveMaximum=!0):i.exclusiveMaximum=l:typeof o==`number`&&(i.maximum=o),typeof c==`number`&&(i.multipleOf=c)},Il=(e,t,n,r)=>{n.type=`boolean`},Ll=(e,t,n,r)=>{t.target===`openapi-3.0`?(n.type=`string`,n.nullable=!0,n.enum=[null]):n.type=`null`},Rl=(e,t,n,r)=>{n.not={}},zl=(e,t,n,r)=>{let i=e._zod.def,a=ra(i.entries);a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),n.enum=a},Bl=(e,t,n,r)=>{let i=e._zod.def,a=[];for(let e of i.values)if(e===void 0){if(t.unrepresentable===`throw`)throw Error("Literal `undefined` cannot be represented in JSON Schema")}else if(typeof e==`bigint`){if(t.unrepresentable===`throw`)throw Error(`BigInt literals cannot be represented in JSON Schema`);a.push(Number(e))}else a.push(e);if(a.length!==0){if(a.length===1){let e=a[0];n.type=e===null?`null`:typeof e,t.target===`draft-04`||t.target===`openapi-3.0`?n.enum=[e]:n.const=e}else a.every(e=>typeof e==`number`)&&(n.type=`number`),a.every(e=>typeof e==`string`)&&(n.type=`string`),a.every(e=>typeof e==`boolean`)&&(n.type=`boolean`),a.every(e=>e===null)&&(n.type=`null`),n.enum=a}},Vl=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Custom types cannot be represented in JSON Schema`)},Hl=(e,t,n,r)=>{if(t.unrepresentable===`throw`)throw Error(`Transforms cannot be represented in JSON Schema`)},Ul=(e,t,n,r)=>{let i=n,a=e._zod.def,{minimum:o,maximum:s}=e._zod.bag;typeof o==`number`&&(i.minItems=o),typeof s==`number`&&(i.maxItems=s),i.type=`array`,i.items=Dl(a.element,t,{...r,path:[...r.path,`items`]})},Wl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`,i.properties={};let o=a.shape;for(let e in o)i.properties[e]=Dl(o[e],t,{...r,path:[...r.path,`properties`,e]});let s=new Set(Object.keys(o)),c=new Set([...s].filter(e=>{let n=a.shape[e]._zod;return t.io===`input`?n.optin===void 0:n.optout===void 0}));c.size>0&&(i.required=Array.from(c)),a.catchall?._zod.def.type===`never`?i.additionalProperties=!1:a.catchall?a.catchall&&(i.additionalProperties=Dl(a.catchall,t,{...r,path:[...r.path,`additionalProperties`]})):t.io===`output`&&(i.additionalProperties=!1)},Gl=(e,t,n,r)=>{let i=e._zod.def,a=i.inclusive===!1,o=i.options.map((e,n)=>Dl(e,t,{...r,path:[...r.path,a?`oneOf`:`anyOf`,n]}));a?n.oneOf=o:n.anyOf=o},Kl=(e,t,n,r)=>{let i=e._zod.def,a=Dl(i.left,t,{...r,path:[...r.path,`allOf`,0]}),o=Dl(i.right,t,{...r,path:[...r.path,`allOf`,1]}),s=e=>`allOf`in e&&Object.keys(e).length===1;n.allOf=[...s(a)?a.allOf:[a],...s(o)?o.allOf:[o]]},ql=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`array`;let o=t.target===`draft-2020-12`?`prefixItems`:`items`,s=t.target===`draft-2020-12`||t.target===`openapi-3.0`?`items`:`additionalItems`,c=a.items.map((e,n)=>Dl(e,t,{...r,path:[...r.path,o,n]})),l=a.rest?Dl(a.rest,t,{...r,path:[...r.path,s,...t.target===`openapi-3.0`?[a.items.length]:[]]}):null;t.target===`draft-2020-12`?(i.prefixItems=c,l&&(i.items=l)):t.target===`openapi-3.0`?(i.items={anyOf:c},l&&i.items.anyOf.push(l),i.minItems=c.length,l||(i.maxItems=c.length)):(i.items=c,l&&(i.additionalItems=l));let{minimum:u,maximum:d}=e._zod.bag;typeof u==`number`&&(i.minItems=u),typeof d==`number`&&(i.maxItems=d)},Jl=(e,t,n,r)=>{let i=n,a=e._zod.def;i.type=`object`;let o=a.keyType,s=o._zod.bag?.patterns;if(a.mode===`loose`&&s&&s.size>0){let e=Dl(a.valueType,t,{...r,path:[...r.path,`patternProperties`,`*`]});i.patternProperties={};for(let t of s)i.patternProperties[t.source]=e}else(t.target===`draft-07`||t.target===`draft-2020-12`)&&(i.propertyNames=Dl(a.keyType,t,{...r,path:[...r.path,`propertyNames`]})),i.additionalProperties=Dl(a.valueType,t,{...r,path:[...r.path,`additionalProperties`]});let c=o._zod.values;if(c){let e=[...c].filter(e=>typeof e==`string`||typeof e==`number`);e.length>0&&(i.required=e)}},Yl=(e,t,n,r)=>{let i=e._zod.def,a=Dl(i.innerType,t,r),o=t.seen.get(e);t.target===`openapi-3.0`?(o.ref=i.innerType,n.nullable=!0):n.anyOf=[a,{type:`null`}]},Xl=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},Zl=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.default=JSON.parse(JSON.stringify(i.defaultValue))},Ql=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,t.io===`input`&&(n._prefault=JSON.parse(JSON.stringify(i.defaultValue)))},$l=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType;let o;try{o=i.catchValue(void 0)}catch{throw Error(`Dynamic catch values are not supported in JSON Schema`)}n.default=o},eu=(e,t,n,r)=>{let i=e._zod.def,a=i.in._zod.traits.has(`$ZodTransform`),o=t.io===`input`?a?i.out:i.in:i.out;Dl(o,t,r);let s=t.seen.get(e);s.ref=o},tu=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType,n.readOnly=!0},nu=(e,t,n,r)=>{let i=e._zod.def;Dl(i.innerType,t,r);let a=t.seen.get(e);a.ref=i.innerType},ru=H(`ZodISODateTime`,(e,t)=>{gs.init(e,t),ju.init(e,t)});function iu(e){return Kc(ru,e)}var au=H(`ZodISODate`,(e,t)=>{_s.init(e,t),ju.init(e,t)});function ou(e){return qc(au,e)}var su=H(`ZodISOTime`,(e,t)=>{vs.init(e,t),ju.init(e,t)});function cu(e){return Jc(su,e)}var lu=H(`ZodISODuration`,(e,t)=>{ys.init(e,t),ju.init(e,t)});function uu(e){return Yc(lu,e)}var du=(e,t)=>{Ba.init(e,t),e.name=`ZodError`,Object.defineProperties(e,{format:{value:t=>Ua(e,t)},flatten:{value:t=>Ha(e,t)},addIssue:{value:t=>{e.issues.push(t),e.message=JSON.stringify(e.issues,ia,2)}},addIssues:{value:t=>{e.issues.push(...t),e.message=JSON.stringify(e.issues,ia,2)}},isEmpty:{get(){return e.issues.length===0}}})},fu=H(`ZodError`,du),pu=H(`ZodError`,du,{Parent:Error}),mu=Wa(pu),hu=Ga(pu),gu=Ka(pu),_u=Ja(pu),vu=Xa(pu),yu=Za(pu),bu=Qa(pu),xu=$a(pu),Su=eo(pu),Cu=to(pu),wu=no(pu),Tu=ro(pu),Eu=new WeakMap;function Du(e,t,n){let r=Object.getPrototypeOf(e),i=Eu.get(r);if(i||(i=new Set,Eu.set(r,i)),!i.has(t)){i.add(t);for(let e in n){let t=n[e];Object.defineProperty(r,e,{configurable:!0,enumerable:!1,get(){let n=t.bind(this);return Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:n}),n},set(t){Object.defineProperty(this,e,{configurable:!0,writable:!0,enumerable:!0,value:t})}})}}}var Ou=H(`ZodType`,(e,t)=>(ns.init(e,t),Object.assign(e[`~standard`],{jsonSchema:{input:Ml(e,`input`),output:Ml(e,`output`)}}),e.toJSONSchema=jl(e,{}),e.def=t,e.type=t.type,Object.defineProperty(e,"_def",{value:t}),e.parse=(t,n)=>mu(e,t,n,{callee:e.parse}),e.safeParse=(t,n)=>gu(e,t,n),e.parseAsync=async(t,n)=>hu(e,t,n,{callee:e.parseAsync}),e.safeParseAsync=async(t,n)=>_u(e,t,n),e.spa=e.safeParseAsync,e.encode=(t,n)=>vu(e,t,n),e.decode=(t,n)=>yu(e,t,n),e.encodeAsync=async(t,n)=>bu(e,t,n),e.decodeAsync=async(t,n)=>xu(e,t,n),e.safeEncode=(t,n)=>Su(e,t,n),e.safeDecode=(t,n)=>Cu(e,t,n),e.safeEncodeAsync=async(t,n)=>wu(e,t,n),e.safeDecodeAsync=async(t,n)=>Tu(e,t,n),Du(e,`ZodType`,{check(...e){let t=this.def;return this.clone(fa(t,{checks:[...t.checks??[],...e.map(e=>typeof e==`function`?{_zod:{check:e,def:{check:`custom`},onattach:[]}}:e)]}),{parent:!0})},with(...e){return this.check(...e)},clone(e,t){return Sa(this,e,t)},brand(){return this},register(e,t){return e.add(this,t),this},refine(e,t){return this.check(Bd(e,t))},superRefine(e,t){return this.check(Vd(e,t))},overwrite(e){return this.check(gl(e))},optional(){return Sd(this)},exactOptional(){return wd(this)},nullable(){return Ed(this)},nullish(){return Sd(Ed(this))},nonoptional(e){return Md(this,e)},array(){return q(this)},or(e){return ud([this,e])},and(e){return fd(this,e)},transform(e){return Id(this,bd(e))},default(e){return Od(this,e)},prefault(e){return Ad(this,e)},catch(e){return Pd(this,e)},pipe(e){return Id(this,e)},readonly(){return Rd(this)},describe(e){let t=this.clone();return Sc.add(t,{description:e}),t},meta(...e){if(e.length===0)return Sc.get(this);let t=this.clone();return Sc.add(t,e[0]),t},isOptional(){return this.safeParse(void 0).success},isNullable(){return this.safeParse(null).success},apply(e){return e(this)}}),Object.defineProperty(e,"description",{get(){return Sc.get(e)?.description},configurable:!0}),e)),ku=H(`_ZodString`,(e,t)=>{rs.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Pl(e,t,n,r);let n=e._zod.bag;e.format=n.format??null,e.minLength=n.minimum??null,e.maxLength=n.maximum??null,Du(e,`_ZodString`,{regex(...e){return this.check(ul(...e))},includes(...e){return this.check(pl(...e))},startsWith(...e){return this.check(ml(...e))},endsWith(...e){return this.check(hl(...e))},min(...e){return this.check(cl(...e))},max(...e){return this.check(sl(...e))},length(...e){return this.check(ll(...e))},nonempty(...e){return this.check(cl(1,...e))},lowercase(e){return this.check(dl(e))},uppercase(e){return this.check(fl(e))},trim(){return this.check(vl())},normalize(...e){return this.check(_l(...e))},toLowerCase(){return this.check(yl())},toUpperCase(){return this.check(bl())},slugify(){return this.check(xl())}})}),Au=H(`ZodString`,(e,t)=>{rs.init(e,t),ku.init(e,t),e.email=t=>e.check(wc(Mu,t)),e.url=t=>e.check(Ac(Fu,t)),e.jwt=t=>e.check(Gc(Xu,t)),e.emoji=t=>e.check(jc(Iu,t)),e.guid=t=>e.check(Tc(Nu,t)),e.uuid=t=>e.check(Ec(Pu,t)),e.uuidv4=t=>e.check(Dc(Pu,t)),e.uuidv6=t=>e.check(Oc(Pu,t)),e.uuidv7=t=>e.check(kc(Pu,t)),e.nanoid=t=>e.check(Mc(Lu,t)),e.guid=t=>e.check(Tc(Nu,t)),e.cuid=t=>e.check(Nc(Ru,t)),e.cuid2=t=>e.check(Pc(zu,t)),e.ulid=t=>e.check(Fc(Bu,t)),e.base64=t=>e.check(Hc(qu,t)),e.base64url=t=>e.check(Uc(Ju,t)),e.xid=t=>e.check(Ic(Vu,t)),e.ksuid=t=>e.check(Lc(Hu,t)),e.ipv4=t=>e.check(Rc(Uu,t)),e.ipv6=t=>e.check(zc(Wu,t)),e.cidrv4=t=>e.check(Bc(Gu,t)),e.cidrv6=t=>e.check(Vc(Ku,t)),e.e164=t=>e.check(Wc(Yu,t)),e.datetime=t=>e.check(iu(t)),e.date=t=>e.check(ou(t)),e.time=t=>e.check(cu(t)),e.duration=t=>e.check(uu(t))});function W(e){return Cc(Au,e)}var ju=H(`ZodStringFormat`,(e,t)=>{is.init(e,t),ku.init(e,t)}),Mu=H(`ZodEmail`,(e,t)=>{ss.init(e,t),ju.init(e,t)}),Nu=H(`ZodGUID`,(e,t)=>{as.init(e,t),ju.init(e,t)}),Pu=H(`ZodUUID`,(e,t)=>{os.init(e,t),ju.init(e,t)}),Fu=H(`ZodURL`,(e,t)=>{cs.init(e,t),ju.init(e,t)}),Iu=H(`ZodEmoji`,(e,t)=>{ls.init(e,t),ju.init(e,t)}),Lu=H(`ZodNanoID`,(e,t)=>{us.init(e,t),ju.init(e,t)}),Ru=H(`ZodCUID`,(e,t)=>{ds.init(e,t),ju.init(e,t)}),zu=H(`ZodCUID2`,(e,t)=>{fs.init(e,t),ju.init(e,t)}),Bu=H(`ZodULID`,(e,t)=>{ps.init(e,t),ju.init(e,t)}),Vu=H(`ZodXID`,(e,t)=>{ms.init(e,t),ju.init(e,t)}),Hu=H(`ZodKSUID`,(e,t)=>{hs.init(e,t),ju.init(e,t)}),Uu=H(`ZodIPv4`,(e,t)=>{bs.init(e,t),ju.init(e,t)}),Wu=H(`ZodIPv6`,(e,t)=>{xs.init(e,t),ju.init(e,t)}),Gu=H(`ZodCIDRv4`,(e,t)=>{Ss.init(e,t),ju.init(e,t)}),Ku=H(`ZodCIDRv6`,(e,t)=>{Cs.init(e,t),ju.init(e,t)}),qu=H(`ZodBase64`,(e,t)=>{Ts.init(e,t),ju.init(e,t)}),Ju=H(`ZodBase64URL`,(e,t)=>{Ds.init(e,t),ju.init(e,t)}),Yu=H(`ZodE164`,(e,t)=>{Os.init(e,t),ju.init(e,t)}),Xu=H(`ZodJWT`,(e,t)=>{As.init(e,t),ju.init(e,t)}),Zu=H(`ZodNumber`,(e,t)=>{js.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Fl(e,t,n,r),Du(e,`ZodNumber`,{gt(e,t){return this.check(il(e,t))},gte(e,t){return this.check(al(e,t))},min(e,t){return this.check(al(e,t))},lt(e,t){return this.check(nl(e,t))},lte(e,t){return this.check(rl(e,t))},max(e,t){return this.check(rl(e,t))},int(e){return this.check($u(e))},safe(e){return this.check($u(e))},positive(e){return this.check(il(0,e))},nonnegative(e){return this.check(al(0,e))},negative(e){return this.check(nl(0,e))},nonpositive(e){return this.check(rl(0,e))},multipleOf(e,t){return this.check(ol(e,t))},step(e,t){return this.check(ol(e,t))},finite(){return this}});let n=e._zod.bag;e.minValue=Math.max(n.minimum??-1/0,n.exclusiveMinimum??-1/0)??null,e.maxValue=Math.min(n.maximum??1/0,n.exclusiveMaximum??1/0)??null,e.isInt=(n.format??``).includes(`int`)||Number.isSafeInteger(n.multipleOf??.5),e.isFinite=!0,e.format=n.format??null});function G(e){return Xc(Zu,e)}var Qu=H(`ZodNumberFormat`,(e,t)=>{Ms.init(e,t),Zu.init(e,t)});function $u(e){return Zc(Qu,e)}var ed=H(`ZodBoolean`,(e,t)=>{Ns.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Il(e,t,n,r)});function K(e){return Qc(ed,e)}var td=H(`ZodNull`,(e,t)=>{Ps.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ll(e,t,n,r)});function nd(e){return $c(td,e)}var rd=H(`ZodUnknown`,(e,t)=>{Fs.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(e,t,n)=>void 0});function id(){return el(rd)}var ad=H(`ZodNever`,(e,t)=>{Is.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Rl(e,t,n,r)});function od(e){return tl(ad,e)}var sd=H(`ZodArray`,(e,t)=>{Rs.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ul(e,t,n,r),e.element=t.element,Du(e,`ZodArray`,{min(e,t){return this.check(cl(e,t))},nonempty(e){return this.check(cl(1,e))},max(e,t){return this.check(sl(e,t))},length(e,t){return this.check(ll(e,t))},unwrap(){return this.element}})});function q(e,t){return Sl(sd,e,t)}var cd=H(`ZodObject`,(e,t)=>{Us.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Wl(e,t,n,r),ua(e,`shape`,()=>t.shape),Du(e,`ZodObject`,{keyof(){return Y(Object.keys(this._zod.def.shape))},catchall(e){return this.clone({...this._zod.def,catchall:e})},passthrough(){return this.clone({...this._zod.def,catchall:id()})},loose(){return this.clone({...this._zod.def,catchall:id()})},strict(){return this.clone({...this._zod.def,catchall:od()})},strip(){return this.clone({...this._zod.def,catchall:void 0})},extend(e){return Da(this,e)},safeExtend(e){return Oa(this,e)},merge(e){return ka(this,e)},pick(e){return Ta(this,e)},omit(e){return Ea(this,e)},partial(...e){return Aa(xd,this,e[0])},required(...e){return ja(jd,this,e[0])}})});function J(e,t){return new cd({type:`object`,shape:e??{},...U(t)})}var ld=H(`ZodUnion`,(e,t)=>{Gs.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Gl(e,t,n,r),e.options=t.options});function ud(e,t){return new ld({type:`union`,options:e,...U(t)})}var dd=H(`ZodIntersection`,(e,t)=>{Ks.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Kl(e,t,n,r)});function fd(e,t){return new dd({type:`intersection`,left:e,right:t})}var pd=H(`ZodTuple`,(e,t)=>{Ys.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>ql(e,t,n,r),e.rest=t=>e.clone({...e._zod.def,rest:t})});function md(e,t,n){let r=t instanceof ns;return new pd({type:`tuple`,items:e,rest:r?t:null,...U(r?n:t)})}var hd=H(`ZodRecord`,(e,t)=>{$s.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Jl(e,t,n,r),e.keyType=t.keyType,e.valueType=t.valueType});function gd(e,t,n){return!t||!t._zod?new hd({type:`record`,keyType:W(),valueType:e,...U(t)}):new hd({type:`record`,keyType:e,valueType:t,...U(n)})}var _d=H(`ZodEnum`,(e,t)=>{ec.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>zl(e,t,n,r),e.enum=t.entries,e.options=Object.values(t.entries);let n=new Set(Object.keys(t.entries));e.extract=(e,r)=>{let i={};for(let r of e)if(n.has(r))i[r]=t.entries[r];else throw Error(`Key ${r} not found in enum`);return new _d({...t,checks:[],...U(r),entries:i})},e.exclude=(e,r)=>{let i={...t.entries};for(let t of e)if(n.has(t))delete i[t];else throw Error(`Key ${t} not found in enum`);return new _d({...t,checks:[],...U(r),entries:i})}});function Y(e,t){return new _d({type:`enum`,entries:Array.isArray(e)?Object.fromEntries(e.map(e=>[e,e])):e,...U(t)})}var vd=H(`ZodLiteral`,(e,t)=>{tc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Bl(e,t,n,r),e.values=new Set(t.values),Object.defineProperty(e,"value",{get(){if(t.values.length>1)throw Error("This schema contains multiple valid literal values. Use `.values` instead.");return t.values[0]}})});function X(e,t){return new vd({type:`literal`,values:Array.isArray(e)?e:[e],...U(t)})}var yd=H(`ZodTransform`,(e,t)=>{nc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Hl(e,t,n,r),e._zod.parse=(n,r)=>{if(r.direction===`backward`)throw new ea(e.constructor.name);n.addIssue=r=>{if(typeof r==`string`)n.issues.push(Ra(r,n.value,t));else{let t=r;t.fatal&&(t.continue=!1),t.code??=`custom`,t.input??=n.value,t.inst??=e,n.issues.push(Ra(t))}};let i=t.transform(n.value,n);return i instanceof Promise?i.then(e=>(n.value=e,n.fallback=!0,n)):(n.value=i,n.fallback=!0,n)}});function bd(e){return new yd({type:`transform`,transform:e})}var xd=H(`ZodOptional`,(e,t)=>{ic.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Sd(e){return new xd({type:`optional`,innerType:e})}var Cd=H(`ZodExactOptional`,(e,t)=>{ac.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>nu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function wd(e){return new Cd({type:`optional`,innerType:e})}var Td=H(`ZodNullable`,(e,t)=>{oc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Yl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Ed(e){return new Td({type:`nullable`,innerType:e})}var Dd=H(`ZodDefault`,(e,t)=>{sc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Zl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeDefault=e.unwrap});function Od(e,t){return new Dd({type:`default`,innerType:e,get defaultValue(){return typeof t==`function`?t():ya(t)}})}var kd=H(`ZodPrefault`,(e,t)=>{lc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Ql(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Ad(e,t){return new kd({type:`prefault`,innerType:e,get defaultValue(){return typeof t==`function`?t():ya(t)}})}var jd=H(`ZodNonOptional`,(e,t)=>{uc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Xl(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Md(e,t){return new jd({type:`nonoptional`,innerType:e,...U(t)})}var Nd=H(`ZodCatch`,(e,t)=>{fc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>$l(e,t,n,r),e.unwrap=()=>e._zod.def.innerType,e.removeCatch=e.unwrap});function Pd(e,t){return new Nd({type:`catch`,innerType:e,catchValue:typeof t==`function`?t:()=>t})}var Fd=H(`ZodPipe`,(e,t)=>{pc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>eu(e,t,n,r),e.in=t.in,e.out=t.out});function Id(e,t){return new Fd({type:`pipe`,in:e,out:t})}var Ld=H(`ZodReadonly`,(e,t)=>{hc.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>tu(e,t,n,r),e.unwrap=()=>e._zod.def.innerType});function Rd(e){return new Ld({type:`readonly`,innerType:e})}var zd=H(`ZodCustom`,(e,t)=>{_c.init(e,t),Ou.init(e,t),e._zod.processJSONSchema=(t,n,r)=>Vl(e,t,n,r)});function Bd(e,t={}){return Cl(zd,e,t)}function Vd(e,t){return wl(e,t)}var Hd=e=>typeof e==`string`&&e.trim()?e.trim():null;function Ud(e){let t=e.decision_scope&&typeof e.decision_scope==`object`&&!Array.isArray(e.decision_scope)?e.decision_scope:{},n=Hd(t.kind),r=Hd(t.granularity),i=Hd(t.scope_key),a=Hd(e.superseded_by);return{interaction:e.task_class===`user_gate`?`decision`:`unknown`,lifecycle:a?`superseded`:e.status===`deferred`?`deferred`:e.done===!0||[`done`,`completed`,`closed`,`archived`].includes(String(e.status))?`closed`:e.status===`open`||e.status===`blocked`?`open`:`unknown`,reason:Hd(e.note),evidence:Hd(e.evidence),blocksAgent:Hd(e.blocks_agent),unblocksTodoId:Hd(e.unblocks_todo_id),decisionScope:n&&r&&i?{kind:n,granularity:r,scopeKey:i}:null,supersededBy:a}}function Wd(e,t,n,r){return{...e,sourceId:t,goalTitle:r??e.goalTitle,details:n?e.details:{...e.details??Ud({}),lifecycle:`unavailable`}}}function Gd(e,t){return t.find(t=>t.sourceId===e.sourceId&&t.goalId===e.goalId&&t.todoId===e.todoId)||{...e,details:{...e.details??Ud({}),lifecycle:`unavailable`}}}function Kd(e,t){let n=e.details?.supersededBy;if(!(!n||n===e.todoId||e.details?.lifecycle===`unavailable`))return t.find(t=>t.sourceId===e.sourceId&&t.goalId===e.goalId&&t.todoId===n)}function qd(e){return![`closed`,`deferred`,`superseded`,`unavailable`].includes(e.details?.lifecycle??`unknown`)}var Jd={ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,runtime_root:`$HOME/.codex/loopx`,goal_count:1,run_count:8440,status_contract:{schema_version:2,minimum_dashboard_schema_version:2,producer:`loopx status`,reload_hint:`scripts/macos-dashboard-launchagent.sh restart`},usage_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.471166+00:00`,sample_run_count:20,proxy_note:`run-history proxy; excludes token counts and raw thread logs`,totals:{runs_24h:20,runs_7d:20,quota_spend_slots_24h:11,quota_spend_slots_7d:11,automation_run_count_24h:11,automation_run_count_7d:11,progress_signal_run_count_24h:9,progress_signal_run_count_7d:9},goals:[{goal_id:`loopx-meta`,runs_24h:20,runs_7d:20,quota_spend_slots_24h:11,quota_spend_slots_7d:11,automation_run_count_24h:11,automation_run_count_7d:11,progress_signal_run_count_24h:9,progress_signal_run_count_7d:9,project_share_24h:1}]},event_ledger_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.360662+00:00`,sample_run_count:20,proxy_note:`append-only run-history projection; compact event-class counts only`,event_classes:[`accounting`,`decision`,`evidence`,`state`,`work`],totals:{events_24h:20,events_7d:20,by_class_24h:{accounting:11,decision:0,evidence:0,state:0,work:9},by_class_7d:{accounting:11,decision:0,evidence:0,state:0,work:9}},goals:[{goal_id:`loopx-meta`,events_24h:20,events_7d:20,by_class_24h:{accounting:11,decision:0,evidence:0,state:0,work:9},by_class_7d:{accounting:11,decision:0,evidence:0,state:0,work:9},latest_event_class:`accounting`,latest_event_at:`2026-07-06T14:37:32+08:00`}]},promotion_readiness_summary:{available:!0,source:`run_history_full_scan`,goal_id:`loopx-meta`,generated_at:`2026-07-05T20:02:02+08:00`,classification:`canary_promotion_readiness_smoke_group`,delivery_batch_scale:`multi_surface`,delivery_outcome:`primary_goal_outcome`,recommended_action:`Canary promotion-readiness smoke passed; promotion may proceed after doctor/status reports fresh evidence.`,json_exists:!0,markdown_exists:!0,freshness_window_hours:24,freshness_status:`fresh`,is_fresh:!0,requires_readiness_run:!1,age_seconds:67624,age_hours:18.78,freshness_reference_time:`2026-07-06T06:49:06.408527+00:00`,sample_run_count:0,proxy_note:`canary promotion-readiness projection from append-only run history; exact evidence stays in run artifacts`},promotion_gate:{ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,runtime_root:`$HOME/.codex/loopx`,gate:`promotion_readiness`,gate_state:`ready`,can_promote:!0,should_warn:!1,non_blocking:!0,recommended_action:`promotion readiness is fresh`,readiness:{available:!0,goal_id:`loopx-meta`,generated_at:`2026-07-05T20:02:02+08:00`,classification:`canary_promotion_readiness_smoke_group`,delivery_batch_scale:`multi_surface`,delivery_outcome:`primary_goal_outcome`,recommended_action:`Canary promotion-readiness smoke passed; promotion may proceed after doctor/status reports fresh evidence.`,json_exists:!0,markdown_exists:!0,runtime_root:`$HOME/.codex/loopx`,freshness_window_hours:24,freshness_status:`fresh`,is_fresh:!0,requires_readiness_run:!1,age_seconds:67624,age_hours:18.78,freshness_reference_time:`2026-07-06T06:49:06.471087+00:00`}},decision_freshness_summary:{available:!0,source:`run_history`,generated_at:`2026-07-06T06:49:06.471133+00:00`,sample_run_count:20,window_days:7,proxy_note:`checkpointed decision freshness projection; rebase old decisions at the decision point before reuse`,summary:{decision_count:0,stale_count:0,rebase_required_count:0,fresh_count:0},items:[]},todo_index:JSON.parse(`{"schema_version":"todo_index_v0","source":"live_loopx_status_public_slice","total_count":12,"current_projected_count":12,"rollout_event_count":94,"item_limit":12,"items":[{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo update recorded for todo_1596c3a678bb","schema_version":"todo_index_item_v0","todo_id":"todo_1596c3a678bb","role":"agent","status":"open","title":"todo update recorded for todo_1596c3a678bb","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:33:32Z","latest_event_status":"open","event_count":7,"event_kinds":["todo_update"]},{"goal_id":"loopx-meta","index":24,"done":false,"text":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","schema_version":"todo_index_item_v0","todo_id":"todo_15bc0926a494","role":"agent","status":"open","priority":"P0-REVENUE MONITOR","title":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"github_public_reply_metadata_monitor","claimed_by":"codex-value-explorer","evidence":"autonomous replan: bounded current value-explorer monitor lane with explicit expires_at.","note":"Set bounded watch expiry for metadata-only public reply monitor; no catch-up after expiry.","updated_at":"2026-07-05T06:27:15+08:00"},{"goal_id":"loopx-meta","index":17,"done":false,"text":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","schema_version":"todo_index_item_v0","todo_id":"todo_2bf560b48a0c","role":"agent","status":"open","priority":"P0","title":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"legacy_open_pr_rename_blocker","claimed_by":"codex-main-control"},{"goal_id":"loopx-meta","index":23,"done":false,"text":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","schema_version":"todo_index_item_v0","todo_id":"todo_3ed1c4a69164","role":"agent","status":"open","priority":"P0","title":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"skillsbench_local_verifier_reward_collection","claimed_by":"codex-main-control","required_capabilities":["benchmark_runner"]},{"goal_id":"loopx-meta","index":32,"done":false,"text":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","schema_version":"todo_index_item_v0","todo_id":"todo_44907a5f355d","role":"agent","status":"blocked","priority":"P0","title":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_raw_new_rerun","claimed_by":"codex-main-control","evidence":"Public-safe redacted live LoopX text; inspect local status for the full row.","note":"Do not spend a full citation-check loopx rerun yet: #865 fixed scored output paths and #874 added bootstrap preflight attribution, but citation-check itself still preflights as apt+verifier bootstrap risk on ECS.","updated_at":"2026-06-29T00:49:36+08:00"},{"goal_id":"loopx-meta","index":39,"done":false,"text":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","schema_version":"todo_index_item_v0","todo_id":"todo_4762c790e583","role":"agent","status":"blocked","priority":"P0","title":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_remote_rerun","claimed_by":"codex-main-control","evidence":"A prior benchmark adapter change was validated before the legacy surface was archived. Current research uses the RFC-linked benchmark workspace and toolkit boundary smokes.","note":"2026-06-29: fixed host-local ACP idle/no-output root cause in PR #894. ACP protocol tool_call_count=0 is now distinguished from reverse-channel task-facing bridge activity; repeated codex_exec_bridge_idle_timeout withou…","updated_at":"2026-06-29T19:40:32+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_584f55f8f3b4","schema_version":"todo_index_item_v0","todo_id":"todo_584f55f8f3b4","role":"agent","status":"open","title":"todo add recorded for todo_584f55f8f3b4","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:48:49Z","latest_event_status":"open","event_count":3,"event_kinds":["todo_add","todo_update"]},{"goal_id":"loopx-meta","index":40,"done":false,"text":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","schema_version":"todo_index_item_v0","todo_id":"todo_62debf065fec","role":"agent","status":"blocked","priority":"P0 MONITOR","title":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"monitor_skillsbench_batch","claimed_by":"codex-main-control","evidence":"Observed 2026-06-30T02:52+08: active-state target_key=skillsbench-goal-baseline-30case-20260629T1826Z-r10; local ps/tmux/recent artifact search found no r10 batch process or compact artifact; no raw task/log/trajectory …","updated_at":"2026-06-30T02:54:54+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_93bc6439c521","schema_version":"todo_index_item_v0","todo_id":"todo_93bc6439c521","role":"agent","status":"open","title":"todo add recorded for todo_93bc6439c521","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_claim","latest_event_at":"2026-07-06T06:32:52Z","latest_event_status":"open","event_count":2,"event_kinds":["todo_add","todo_claim"]},{"goal_id":"loopx-meta","index":27,"done":false,"text":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","schema_version":"todo_index_item_v0","todo_id":"todo_aad7e9716927","role":"agent","status":"blocked","priority":"P0","title":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"run_goal_start_product_mode_matrix","claimed_by":"codex-main-control","evidence":"driver.status shows DONE raw then RUN loopx-goal-start with no running driver; raw benchmark_run.compact first_blocker=skillsbench_codex_acp_provider_zero_activity; source guard requires --host-local-acp-launch for Loop…","note":"Remote run group skillsbench-raw-new-goal-start-20260627T0420Z produced a material closeout for citation-check raw only; raw compact attribution is skillsbench_codex_acp_provider_zero_activity with official score missin…","updated_at":"2026-06-27T13:05:47+08:00"},{"goal_id":"loopx-meta","index":21,"done":false,"text":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","schema_version":"todo_index_item_v0","todo_id":"todo_aec1873c7f28","role":"agent","status":"open","priority":"P0 MONITOR","title":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","claimed_by":"codex-main-control","note":"2026-06-23 projection fix: this is monitor context for the powerlifting run, not an advancement next action; current executable path is SkillsBench build cache/prewarm repair.","updated_at":"2026-06-23T10:37:43+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_c02cb7d19607","schema_version":"todo_index_item_v0","todo_id":"todo_c02cb7d19607","role":"agent","status":"open","title":"todo add recorded for todo_c02cb7d19607","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_add","latest_event_at":"2026-07-06T03:47:54Z","latest_event_status":"open","event_count":1,"event_kinds":["todo_add"]}]}`),agent_management_projection:{schema_version:`agent_management_projection_v0`,mode:`read_only`,goal_id:`loopx-meta`,generated_at:`2026-07-06T06:49:06Z`,style_hint:null,truth_contract:{todo_is_runtime_work_item:!0,projection_is_writable:!1,introduces_task_runtime:!1,write_api:!1},source_summary:{registered_agent_count:4,projected_agent_count:4,todo_source:`live_loopx_status_public_slice`,public_safe_export:!0},agents:[{agent_id:`codex-main-control`,agent_model:`peer_v1`,profile_role:`release-validation`,state:`blocked`,next_action:`Continue projected todo todo_2bf560b48a0c.`,last_activity_at:`2026-06-29T00:49:36+08:00`,evidence_refs:[`todo:todo_e72afc24f04a:evidence`],goal_ids:[`loopx-meta`],stale_claim_hint:{state:`activity_missing`,claimed_by:`codex-main-control`,reason:`claimed open todo has no projected activity timestamp`,recommended_operator_action:`inspect evidence before considering reassignment`},current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_2bf560b48a0c`,goal_id:`loopx-meta`,role:`agent`,status:`open`,priority:`P0`,title:`Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harn…`,task_class:`blocker`,action_kind:`legacy_open_pr_rename_blocker`,claimed_by:`codex-main-control`}},{agent_id:`codex-product-capability`,agent_model:`peer_v1`,profile_role:`product-validation`,state:`monitoring`,next_action:`Continue projected todo todo_ded745761822.`,last_activity_at:`2026-07-06T06:29:53Z`,evidence_refs:[`todo:todo_ded745761822:evidence`],goal_ids:[`loopx-meta`],current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_ded745761822`,goal_id:`loopx-meta`,role:`agent`,status:`open`,priority:`P0-LOCAL`,title:`Public-safe redacted live LoopX text; inspect local status for the full row.`,task_class:`continuous_monitor`,action_kind:`Public-safe redacted live LoopX text; inspect local status for the full row.`,claimed_by:`codex-product-capability`,updated_at:`2026-07-04T20:22:45+08:00`}},{agent_id:`codex-side-bypass`,agent_model:`peer_v1`,profile_role:`implementation-validation`,state:`waiting`,next_action:`Inspect status projection before taking work.`,last_activity_at:`2026-07-06T06:32:16Z`,evidence_refs:[`rollout_event:todo_complete:todo_22c946938115`],goal_ids:[`loopx-meta`]},{agent_id:`codex-value-explorer`,agent_model:`peer_v1`,profile_role:`value-exploration`,state:`monitoring`,next_action:`Continue projected todo todo_584f55f8f3b4.`,last_activity_at:`2026-07-06T09:39:59+08:00`,evidence_refs:[`rollout_event:todo_update:todo_584f55f8f3b4`],goal_ids:[`loopx-meta`],current_todo:{schema_version:`todo_row_v0`,todo_id:`todo_584f55f8f3b4`,goal_id:`loopx-meta`,role:`agent`,status:`open`,title:`todo add recorded for todo_584f55f8f3b4`}}]},contract:{ok:!0,summary:{errors:0,warnings:1,checks:6},errors:[],warnings:["loopx-meta: duplicate index rows raw=8444 unique=8440 unexpected=3 artifact_identity_collisions=2 artifact_collision_rows=3 reward_overlays=1; inspect with `loopx history --goal-id loopx-meta inspect-index-duplicates`; artifact identity collisions need review…"],checks:[`registry goals checked: 12`,`registry boundary: shared_local_registry push_allowed=False tracked=False ignored=False`,`user-gate scopes checked: 6 open multi-agent gates`,`runtime root resolved: $HOME/.codex/loopx`,`run-history goals=28 runs=10210`,`public boundary scan clean: 1218 files`]},global_registry:{available:!0,ok:!0,registry:`$HOME/.codex/loopx/registry.global.json`,current_registry:`$HOME/.codex/loopx/registry.global.json`,current_registry_is_global:!0,global_goal_count:12,current_goal_count:12,source_registry_count:7,summary:{high:0,action:8,info:0,checks:2,findings:8},findings:[{kind:`source_registry_missing`,severity:`action`,message:"`cc-test` source registry is missing",recommended_action:"reconnect `cc-test` from its project or archive it if the project is obsolete",goal_id:`cc-test`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-test` active state file is missing",recommended_action:"repair `cc-test` state_file or reconnect the project",goal_id:`cc-test`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`cc-tmp` source registry is missing",recommended_action:"reconnect `cc-tmp` from its project or archive it if the project is obsolete",goal_id:`cc-tmp`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-tmp` active state file is missing",recommended_action:"repair `cc-tmp` state_file or reconnect the project",goal_id:`cc-tmp`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`cc-tmp-xdrchpuaul` source registry is missing",recommended_action:"reconnect `cc-tmp-xdrchpuaul` from its project or archive it if the project is obsolete",goal_id:`cc-tmp-xdrchpuaul`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`cc-tmp-xdrchpuaul` active state file is missing",recommended_action:"repair `cc-tmp-xdrchpuaul` state_file or reconnect the project",goal_id:`cc-tmp-xdrchpuaul`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`source_registry_missing`,severity:`action`,message:"`loopx-auto-research-e2e-probe-20260628-2225-goal` source registry is missing",recommended_action:"reconnect `loopx-auto-research-e2e-probe-20260628-2225-goal` from its project or archive it if the project is obsolete",goal_id:`loopx-auto-research-e2e-probe-20260628-2225-goal`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`},{kind:`state_file_missing`,severity:`action`,message:"`loopx-auto-research-e2e-probe-20260628-2225-goal` active state file is missing",recommended_action:"repair `loopx-auto-research-e2e-probe-20260628-2225-goal` state_file or reconnect the project",goal_id:`loopx-auto-research-e2e-probe-20260628-2225-goal`,path:`Public-safe redacted live LoopX text; inspect local status for the full row.`}],checks:[`global registry goals checked: 12`,`global source registries checked: 7`]},attention_queue:JSON.parse(`{"available":true,"item_count":1,"needs_user_or_controller":0,"needs_controller":0,"needs_codex":1,"watching_external_evidence":0,"items":[{"goal_id":"loopx-meta","status":"skillsbench_codex_cli_goal_tail4_keepalive_relaunched","lifecycle_phase":"adapter_inspected","lifecycle_flags":["adapter_inspected"],"waiting_on":"codex","severity":"action","recommended_action":"Monitor run_group skillsbench-codex-cli-goal-xhigh-tail4-keepalive-20260706T143132CST using public compact/public artifacts only; once benchmark_run.compact.json lands for each case, classify launcher/case/solver/verifi…","source":"latest_run","quota":{"compute":1.0,"window_hours":24,"slot_minutes":1,"allowed_slots":1440,"spent_slots":97,"state":"eligible","reason":"1 compute quota; eligible for the next automatic agent turn"},"agent_todos":{"source_section":"Agent Todo","total_count":12,"open_count":12,"done_count":0,"items":[{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo update recorded for todo_1596c3a678bb","schema_version":"todo_index_item_v0","todo_id":"todo_1596c3a678bb","role":"agent","status":"open","title":"todo update recorded for todo_1596c3a678bb","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:33:32Z","latest_event_status":"open","event_count":7,"event_kinds":["todo_update"]},{"goal_id":"loopx-meta","index":24,"done":false,"text":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","schema_version":"todo_index_item_v0","todo_id":"todo_15bc0926a494","role":"agent","status":"open","priority":"P0-REVENUE MONITOR","title":"Monitor ArcticDB #3179 LoopX comment https://github.com/man-group/ArcticDB/issues/3179#issuecomment-4797835630 for metadata-only maintainer reply signal; do not read private material or reply again without owner approva…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"github_public_reply_metadata_monitor","claimed_by":"codex-value-explorer","evidence":"autonomous replan: bounded current value-explorer monitor lane with explicit expires_at.","note":"Set bounded watch expiry for metadata-only public reply monitor; no catch-up after expiry.","updated_at":"2026-07-05T06:27:15+08:00"},{"goal_id":"loopx-meta","index":17,"done":false,"text":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","schema_version":"todo_index_item_v0","todo_id":"todo_2bf560b48a0c","role":"agent","status":"open","priority":"P0","title":"Block direct merge of legacy PR #199 until it is rebased/rewritten onto LoopX: rename goal_harness paths/imports and goal-harness CLI strings to loopx, rerun launch-artifact-handle smoke, and verify it does not reintrod…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"legacy_open_pr_rename_blocker","claimed_by":"codex-main-control"},{"goal_id":"loopx-meta","index":23,"done":false,"text":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","schema_version":"todo_index_item_v0","todo_id":"todo_3ed1c4a69164","role":"agent","status":"open","priority":"P0","title":"Fix or bypass local SkillsBench Docker verifier reward collection before using local fallback for canonical base/test comparison; organize-messy-files base on merged #668 reached final verifier but produced empty verifi…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"blocker","action_kind":"skillsbench_local_verifier_reward_collection","claimed_by":"codex-main-control","required_capabilities":["benchmark_runner"]},{"goal_id":"loopx-meta","index":32,"done":false,"text":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","schema_version":"todo_index_item_v0","todo_id":"todo_44907a5f355d","role":"agent","status":"blocked","priority":"P0","title":"Rerun SkillsBench raw vs loopx-goal-start-product-mode on citation-check and powerlifting with PR #779 merged; inspect compact public counters for soft_verify_exception_continued, probe_operation_count, task-facing solv…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_raw_new_rerun","claimed_by":"codex-main-control","evidence":"Public-safe redacted live LoopX text; inspect local status for the full row.","note":"Do not spend a full citation-check loopx rerun yet: #865 fixed scored output paths and #874 added bootstrap preflight attribution, but citation-check itself still preflights as apt+verifier bootstrap risk on ECS.","updated_at":"2026-06-29T00:49:36+08:00"},{"goal_id":"loopx-meta","index":39,"done":false,"text":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","schema_version":"todo_index_item_v0","todo_id":"todo_4762c790e583","role":"agent","status":"blocked","priority":"P0","title":"Run the next SkillsBench loopx-goal-start-product-mode reverse-channel case on latest main (no local Docker), prioritizing a currently bad or uncertain case, then update the public case ledger and true LoopX issue analy…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"skillsbench_goal_start_remote_rerun","claimed_by":"codex-main-control","evidence":"A prior benchmark adapter change was validated before the legacy surface was archived. Current research uses the RFC-linked benchmark workspace and toolkit boundary smokes.","note":"2026-06-29: fixed host-local ACP idle/no-output root cause in PR #894. ACP protocol tool_call_count=0 is now distinguished from reverse-channel task-facing bridge activity; repeated codex_exec_bridge_idle_timeout withou…","updated_at":"2026-06-29T19:40:32+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_584f55f8f3b4","schema_version":"todo_index_item_v0","todo_id":"todo_584f55f8f3b4","role":"agent","status":"open","title":"todo add recorded for todo_584f55f8f3b4","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_update","latest_event_at":"2026-07-06T06:48:49Z","latest_event_status":"open","event_count":3,"event_kinds":["todo_add","todo_update"]},{"goal_id":"loopx-meta","index":40,"done":false,"text":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","schema_version":"todo_index_item_v0","todo_id":"todo_62debf065fec","role":"agent","status":"blocked","priority":"P0 MONITOR","title":"Monitor r10 SkillsBench 30-case codex-app-server-goal-baseline batch, summarize completed compact results into the common case ledger, and stop/repair if setup/bootstrap creates new non-solver blockers.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","action_kind":"monitor_skillsbench_batch","claimed_by":"codex-main-control","evidence":"Observed 2026-06-30T02:52+08: active-state target_key=skillsbench-goal-baseline-30case-20260629T1826Z-r10; local ps/tmux/recent artifact search found no r10 batch process or compact artifact; no raw task/log/trajectory …","updated_at":"2026-06-30T02:54:54+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_93bc6439c521","schema_version":"todo_index_item_v0","todo_id":"todo_93bc6439c521","role":"agent","status":"open","title":"todo add recorded for todo_93bc6439c521","source":"rollout_event_log","agent_id":"codex-main-control","latest_event_kind":"todo_claim","latest_event_at":"2026-07-06T06:32:52Z","latest_event_status":"open","event_count":2,"event_kinds":["todo_add","todo_claim"]},{"goal_id":"loopx-meta","index":27,"done":false,"text":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","schema_version":"todo_index_item_v0","todo_id":"todo_aad7e9716927","role":"agent","status":"blocked","priority":"P0","title":"Run the SkillsBench two-arm comparison after the goal-start route is countable: raw Codex vs new loopx-goal-start-product-mode, reporting task_score/control_score/time and compact public-safe LoopX todo rollout evidence.","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"advancement_task","action_kind":"run_goal_start_product_mode_matrix","claimed_by":"codex-main-control","evidence":"driver.status shows DONE raw then RUN loopx-goal-start with no running driver; raw benchmark_run.compact first_blocker=skillsbench_codex_acp_provider_zero_activity; source guard requires --host-local-acp-launch for Loop…","note":"Remote run group skillsbench-raw-new-goal-start-20260627T0420Z produced a material closeout for citation-check raw only; raw compact attribution is skillsbench_codex_acp_provider_zero_activity with official score missin…","updated_at":"2026-06-27T13:05:47+08:00"},{"goal_id":"loopx-meta","index":21,"done":false,"text":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","schema_version":"todo_index_item_v0","todo_id":"todo_aec1873c7f28","role":"agent","status":"open","priority":"P0 MONITOR","title":"Observe remote official SkillsBench powerlifting-coef-calc base/test runtime-layer mountfix pair skillsbench-powerlifting-coef-calc-remote-canonical-runtime-mountfix-pair-20260623T022028Z: use compact/public artifacts o…","archive_state":"active","source_section":"Agent Todo","source":"attention_queue","task_class":"continuous_monitor","claimed_by":"codex-main-control","note":"2026-06-23 projection fix: this is monitor context for the powerlifting run, not an advancement next action; current executable path is SkillsBench build cache/prewarm repair.","updated_at":"2026-06-23T10:37:43+08:00"},{"goal_id":"loopx-meta","index":0,"done":false,"text":"todo add recorded for todo_c02cb7d19607","schema_version":"todo_index_item_v0","todo_id":"todo_c02cb7d19607","role":"agent","status":"open","title":"todo add recorded for todo_c02cb7d19607","source":"rollout_event_log","agent_id":"codex-value-explorer","latest_event_kind":"todo_add","latest_event_at":"2026-07-06T03:47:54Z","latest_event_status":"open","event_count":1,"event_kinds":["todo_add"]}]}}]}`),run_history:{available:!0,goal_count:1,run_count:5,goals:[{id:`loopx-meta`,domain:`loopx-platform`,status:`active-read-only`,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`],registry_member:!0,legacy_runtime_goal:!1,adapter_kind:`harness_self_improvement`,adapter_status:`connected-read-only`,index_exists:!0,raw_index_records:8444,unique_runs:8440,quota:{compute:1,window_hours:24,slot_minutes:1,allowed_slots:1440,spent_slots:97,state:`waiting`,reason:`no active Codex-ready work is currently selected`},latest_runs:[{generated_at:`2026-07-06T14:37:32+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-value-explorer`,recommended_action:`审阅 PR #1524 的 Agent Management 面板视觉方向:workspace hint 与 stale claim hint 是否符合预期;确认后允许 codex-value-explorer 自合并。`,health_check:`quota safe-bypass operator gate; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:55+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-main-control`,recommended_action:`[P1] Repair SkillsBench post-run debug gate consistency for countable codex-cli-goal official-zero runs: when attempt_accounting is countable and case_closeout_complete=true, do not project first_blocker=loopx_closeout_…`,health_check:`quota should-run eligible; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:54+08:00`,goal_id:`loopx-meta`,classification:`skillsbench_codex_cli_goal_tail4_keepalive_relaunched`,agent_id:`codex-main-control`,progress_scope:`goal`,delivery_batch_scale:`single_surface`,delivery_outcome:`outcome_progress`,recommended_action:`Monitor run_group skillsbench-codex-cli-goal-xhigh-tail4-keepalive-20260706T143132CST using public compact/public artifacts only; once benchmark_run.compact.json lands for each case, classify launcher/case/solver/verifi…`,health_check:`state_file 1/1; registry_goal 1/1; authority_sources 10`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:33:34+08:00`,goal_id:`loopx-meta`,classification:`quota_slot_spent`,agent_id:`codex-side-bypass`,recommended_action:`[P0] Rerun real KNN visible auto-research after the successor-link fix and verify evaluator completion projects a second-round hypothesis/frontier or explicit completion gate without manual intervention; keep evidence p…`,health_check:`quota should-run eligible; quota slot spend event public-safe`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]},{generated_at:`2026-07-06T14:32:57+08:00`,goal_id:`loopx-meta`,classification:`auto_research_successor_link_fix_merged`,agent_id:`codex-side-bypass`,progress_scope:`agent_lane`,delivery_batch_scale:`implementation`,delivery_outcome:`outcome_progress`,recommended_action:`[P0] Rerun real KNN visible auto-research after the successor-link fix and verify evaluator completion projects a second-round hypothesis/frontier or explicit completion gate without manual intervention; keep evidence p…`,health_check:`state_file 1/1; registry_goal 1/1; authority_sources 0`,json_exists:!0,markdown_exists:!0,lifecycle_phase:`adapter_inspected`,lifecycle_flags:[`adapter_inspected`]}]}]}},Yd=W().nullable(),Xd=J({schema_version:X(`goal_acceptance_observation_projection_v0`),goal_id:W(),read_only:X(!0),acceptance_assessed:X(!1),coverage:Y([`partial`,`unavailable`]),missing_sources:q(W()),truncated:K(),historical_progress:q(J({kind:W(),observed_at:Yd,source:W(),evidence_refs:q(W())})),acceptance_gaps:q(J({kind:W(),owner:Yd,reason:Yd,evidence_required:Yd,observed_at:Yd,source:W()})),guards:q(J({kind:W(),todo_id:Yd,blocks_agent:Yd,owner:Yd,reason:Yd,evidence_required:Yd,decision_scope:Yd})),next_action:Yd,next_action_source:Yd}),Zd=ud([W(),G(),K(),nd()]),Qd=gd(W(),Zd),$d=J({todo_id:W().optional(),priority:W().optional(),status:W(),title:W(),claimed_by:W().optional(),task_class:W().optional(),action_kind:W().optional()}),ef=J({gate_id:W(),kind:W(),status:W(),blocks:q(W()).optional()}),tf=J({todo_id:W().optional(),owner_agent:W().optional(),status:W().optional(),lease_until:W().optional(),write_scope:q(W()).optional()}),nf=J({generated_at:W().optional(),classification:W().optional(),summary:W().optional()}),rf=J({kind:W().optional().default(`warning`),message:ud([W(),q(W())]).optional().default(`compact source warning`)}).passthrough(),af=J({schema_version:X(`goal_channel_projection_v0`),mode:X(`read_only`),goal_id:W(),display_name:W(),generated_at:W().optional().nullable(),latest_status:W(),waiting_on:W(),next_action:W(),source_refs:gd(W(),Zd),decision_frame:J({user_action_required:K(),agent_action_required:K(),quiet_noop_allowed:K()}),quota:Qd,user_todos:q($d).default([]),agent_todos:q($d).default([]),open_gates:q(ef).default([]),active_leases:q(tf).default([]),artifacts:q(Qd).default([]),recent_events:q(nf).default([]),source_warnings:q(rf).default([]),truth_contract:J({event_ledger_is_source_of_truth:K(),projection_is_writable:K(),recompute_rule:W(),write_authority:W()})}),of=J({compute:G().optional().default(1),window_hours:G().optional().default(24),slot_minutes:G().optional().default(1),allowed_slots:G().optional().nullable(),spent_slots:G().optional().default(0),state:W().optional().nullable(),next_eligible_at:W().optional().nullable(),reason:W().optional().nullable(),blocked_action_scope:W().optional().nullable(),focus_wait:K().optional().nullable(),handoff_outcome_floor_block:K().optional().nullable(),safe_bypass_allowed:K().optional().default(!1),safe_bypass_kind:W().optional().nullable(),safe_bypass_policy:W().optional().nullable(),post_handoff_outcome_gap_streak:G().optional().nullable(),outcome_gap_threshold:G().optional().nullable(),must_advance:q(W()).optional().default([]),avoid:q(W()).optional().default([])}).transform(e=>{let t=Math.max(1,e.slot_minutes),n=Math.round(e.window_hours*60*e.compute/t);return{...e,slot_minutes:t,allowed_slots:e.allowed_slots??n}}),sf=J({self_repair:J({enabled:K().optional().default(!1),allow_health_blocker_repair:K().optional().default(!1),allow_waiting_projection_repair:K().optional().default(!1)}).optional().nullable()}).passthrough(),cf=J({model_config:J({model:W(),reasoning_effort:W().optional()}).optional(),mode:W().optional().default(`default`),orchestration_mode:W().optional().nullable(),spawn_allowed:K().optional().default(!1),allowed:K().optional().nullable(),max_children:G().optional().default(0),allowed_domains:q(W()).optional().default([])}).passthrough(),lf=J({label:W().optional().nullable(),path:W(),anchor:W().optional().nullable(),exists:K().optional().default(!1),resolved_path:W().optional().nullable()}),uf=J({index:G(),done:K(),text:W(),schema_version:W().optional().nullable(),todo_id:W().optional().nullable(),role:W().optional().nullable(),status:W().optional().nullable(),resume_when:W().optional().nullable(),resume_ready:K().optional().nullable(),resume_condition:gd(W(),id()).optional().nullable(),priority:W().optional().nullable(),title:W().optional().nullable(),archive_state:W().optional().nullable(),source_section:W().optional().nullable(),task_class:W().optional().nullable(),task_domain:W().optional().nullable(),action_kind:W().optional().nullable(),claimed_by:W().optional().nullable(),required_capabilities:q(W()).optional(),note:W().optional().nullable(),evidence:W().optional().nullable(),updated_at:W().optional().nullable(),review_materials:q(lf).optional().default([])}).passthrough(),df=J({source_section:W().optional().nullable(),total_count:G().optional().default(0),open_count:G().optional().default(0),done_count:G().optional().default(0),advancement_done_count:G().optional(),items:q(uf).optional().default([]),deferred_items:q(uf).optional()}),ff=uf.extend({goal_id:W(),source:W().optional().nullable(),event_count:G().optional().default(0),event_kinds:q(W()).optional().default([]),latest_event_kind:W().optional().nullable(),latest_event_at:W().optional().nullable(),latest_event_status:W().optional().nullable(),agent_id:W().optional().nullable()}).passthrough(),pf=J({schema_version:W().optional().nullable(),source:W().optional().nullable(),total_count:G().optional().default(0),current_projected_count:G().optional().default(0),rollout_event_count:G().optional().default(0),item_limit:G().optional().nullable(),items:q(ff).optional().default([])}),mf=J({kind:W().optional().nullable(),label:W().optional().nullable(),path_safe:K().optional().default(!1),branch:W().optional().nullable(),write_scope:q(W()).optional().default([])}).passthrough(),hf=J({state:W().optional().nullable(),claimed_by:W().optional().nullable(),last_activity_at:W().optional().nullable(),threshold_hours:G().optional().nullable(),reason:W().optional().nullable(),recommended_operator_action:W().optional().nullable()}).passthrough(),gf=J({schema_version:W().optional().nullable(),todo_id:W().optional().nullable(),goal_id:W().optional().nullable(),role:W().optional().nullable(),status:W().optional().nullable(),priority:W().optional().nullable(),title:W().optional().nullable(),task_class:W().optional().nullable(),action_kind:W().optional().nullable(),claimed_by:W().optional().nullable(),required_write_scopes:q(W()).optional().default([]),workspace_ref:mf.optional().nullable()}).passthrough(),_f=J({schema_version:W().optional().nullable(),from_agent:W().optional().nullable(),to_agent:W().optional().nullable(),intent:W().optional().nullable(),summary:W().optional().nullable(),blocker:W().optional().nullable(),suggested_next_action:W().optional().nullable(),evidence_refs:q(W()).optional().default([]),updated_at:W().optional().nullable()}).passthrough(),vf=J({agent_id:W(),role:W().optional().nullable(),state:W().optional().nullable(),current_todo:gf.optional().nullable(),next_action:W().optional().nullable(),last_activity_at:W().optional().nullable(),evidence_refs:q(W()).optional().default([]),handoff_refs:q(W()).optional().default([]),handoff_note:_f.optional().nullable(),workspace_ref:mf.optional().nullable(),stale_claim_hint:hf.optional().nullable(),blocked_on:gf.optional().nullable(),goal_ids:q(W()).optional().default([])}).passthrough(),yf=J({schema_version:W().optional().nullable(),mode:W().optional().nullable(),goal_id:W().optional().nullable(),generated_at:W().optional().nullable(),style_hint:J({preferred:W().optional().nullable(),license_boundary:W().optional().nullable()}).optional().nullable(),truth_contract:J({todo_is_runtime_work_item:K().optional().default(!0),projection_is_writable:K().optional().default(!1),introduces_task_runtime:K().optional().default(!1),write_api:K().optional().default(!1)}).optional().nullable(),source_summary:J({registered_agent_count:G().optional().default(0),projected_agent_count:G().optional().default(0),todo_source:W().optional().nullable()}).optional().nullable(),agents:q(vf).optional().default([])}).passthrough(),bf=J({goal_id:W(),configured:K().optional().default(!1),enabled:K().optional().default(!1),human_gate_auto_notify_enabled:K().optional().default(!1),target_ref:W().optional().nullable(),receipt_count:G().optional().default(0),last_notified_at:W().optional().nullable()}).passthrough(),xf=J({schema_version:W().optional().nullable(),generated_at:W().optional().nullable(),goals:q(bf).optional().default([])}).passthrough(),Sf=J({source_section:W().optional().nullable(),open:G().optional().default(0),done:G().optional().default(0),total:G().optional().default(0),advancement_done_count:G().optional(),next:W().optional().nullable(),next_index:G().optional().nullable(),items:q(uf).optional().default([]),recent_completed_advancement_items:q(uf).optional().default([])}),Cf=J({goal_id:W(),status:W().optional().nullable(),waiting_on:W().optional().nullable(),severity:W().optional().nullable(),index:G().optional().nullable(),text:W(),source:W().optional().nullable()}),wf=J({source:W().optional().nullable(),open_count:G().optional().default(0),items:q(Cf).optional().default([])}),Tf=J({goal_id:W(),status:W().optional().nullable(),waiting_on:W().optional().nullable(),quota_state:W().optional().nullable(),priority:W().optional().nullable(),todo_index:G().optional().nullable(),text:W(),source:W().optional().nullable()}),Ef=J({source:W().optional().nullable(),open_count:G().optional().default(0),items:q(Tf).optional().default([])}),Df=J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),summary:W().optional().nullable()}),Of=J({kind:W().optional().nullable(),source:W().optional().nullable(),severity:W().optional().nullable(),requires_refresh_state:K().optional().default(!1),reason:W().optional().nullable(),active_state_updated_at:W().optional().nullable(),latest_run_generated_at:W().optional().nullable(),latest_run_state_updated_at:W().optional().nullable(),latest_run_classification:W().optional().nullable(),recommended_action:W().optional().nullable()}),kf=J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),delivery_batch_scale:W().optional().nullable(),delivery_outcome:W().optional().nullable(),health_check:W().optional().nullable(),json_exists:K().optional().nullable(),markdown_exists:K().optional().nullable()}),Af=J({project_asset_backed:K().optional(),same_source_should_run:K().optional(),codex_ready:K().optional(),handoff_has_next_action:K().optional(),handoff_has_stop_condition:K().optional(),handoff_sanitized_surface:K().optional()}).catchall(K()),jf=J({ready:K().optional().default(!1),codex_ready:K().optional().default(!1),source:W().optional().nullable(),quota_state:W().optional().nullable(),checks:Af.optional().default({}),handoff_status:W().optional().nullable(),handoff_ready_at:W().optional().nullable(),handoff_ready_classification:W().optional().nullable(),post_handoff_run_seen:K().optional().default(!1),post_handoff_latest_run:kf.optional().nullable(),post_handoff_recent_runs:q(kf).optional().default([]),post_handoff_small_scale_streak:G().int().nonnegative().optional().default(0),post_handoff_outcome_gap_streak:G().int().nonnegative().optional().default(0),next_probe:W().optional().nullable()}),Mf=J({schema_version:W().optional().nullable(),kind:W().optional().nullable(),missing_roles:q(W()).optional().default([]),source:W().optional().nullable(),recommended_action:W().optional().nullable()}),Nf=J({owner:W(),gate:W(),next_action:W(),stop_condition:W(),user_todos:Sf.optional().nullable(),agent_todos:Sf.optional().nullable(),quota:of.optional().nullable(),control_plane:sf.optional().nullable(),orchestration:cf.optional().nullable(),latest_validation:Df.optional().nullable(),stale_latest_run_warning:Of.optional().nullable(),todo_projection_gap:Mf.optional().nullable()}),Pf=J({goal_id:W(),activation_state:Y([`active`,`stopped`]).optional().default(`active`),status:W(),waiting_on:W(),severity:W(),recommended_action:W(),project_asset:Nf.optional().nullable(),handoff_readiness:jf.optional().nullable(),source:W().optional(),operator_question:W().optional().nullable(),agent_command:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),controller_stage:W().optional().nullable(),missing_gates:q(W()).optional().default([]),next_handoff_condition:W().optional().nullable(),quota:of.optional().nullable(),control_plane:sf.optional().nullable(),user_todos:df.optional().nullable(),agent_todos:df.optional().nullable(),stale_latest_run_warning:Of.optional().nullable(),dependency_blockers:wf.optional().nullable(),todo_state_file:W().optional().nullable(),goal_channel_projection:af.optional().nullable()}),Ff=J({recorded_at:W().optional().nullable(),decision:W().optional().nullable(),reward:W().optional().nullable(),reason_summary:W().optional().nullable(),follow_up:W().optional().nullable()}),If=J({recorded_at:W().optional().nullable(),gate:W().optional().nullable(),decision:W().optional().nullable(),operator_question:W().optional().nullable(),reason_summary:W().optional().nullable(),follow_up:W().optional().nullable(),agent_command:W().optional().nullable()}),Lf=J({version:W().optional().nullable(),goal_id:W().optional().nullable(),run_id:W().optional().nullable(),gate_id:W().optional().nullable(),created_state_ref:W().optional().nullable(),created_policy_version:W().optional().nullable(),interrupt_payload:J({question:W().optional().nullable(),choices:q(W()).optional().default([])}).optional().nullable(),allowed_decisions:q(W()).optional().default([]),operator_decision:W().optional().nullable(),latest_state_ref:W().optional().nullable(),freshness_check:W().optional().nullable(),precondition_check:W().optional().nullable(),migration_or_rebase_result:W().optional().nullable(),resulting_action:W().optional().nullable(),validation_after_resume:W().optional().nullable()}),Rf=J({id:W().optional().nullable(),ok:K().optional().nullable(),review:W().optional().nullable()}),zf=J({classification:W().optional().nullable(),read_only_observer_ready:K().optional().nullable(),decision_advisor_ready:K().optional().nullable(),write_controller_ready:K().optional().nullable(),missing_gates:q(W()).optional().default([]),review_judgment:W().optional().nullable(),next_handoff_condition:W().optional().nullable(),gates:q(Rf).optional().default([])}),Bf=J({declared:K().optional().default(!1),required:K().optional().default(!1),path:W().optional().nullable(),path_exists:K().optional().nullable(),read_status:W().optional().nullable(),default_entry_count:G().optional().default(0),default_entries_checked:G().optional().default(0),default_entries_present:G().optional().default(0),topic_authority_count:G().optional().default(0),project_material_count:G().optional().default(0),project_material_repository_count:G().optional().default(0),project_material_owner_review_required_count:G().optional().default(0),project_material_stale_count:G().optional().default(0),project_material_current_authority_count:G().optional().default(0),deprecated_source_count:G().optional().default(0),conflict_risk:W().optional().nullable()}),Vf=J({adapter_kind:W().optional().nullable(),adapter_status:W().optional().nullable(),authority_source_count:G().optional().nullable(),authority_registry_declared:K().optional().nullable(),authority_registry_path_exists:K().optional().nullable(),authority_registry_default_entry_count:G().optional().nullable(),authority_registry_default_entries_present:G().optional().nullable(),topic_authority_count:G().optional().nullable(),project_material_count:G().optional().nullable(),project_material_repository_count:G().optional().nullable(),project_material_owner_review_required_count:G().optional().nullable(),project_material_stale_count:G().optional().nullable(),project_material_current_authority_count:G().optional().nullable(),authority_registry_conflict_risk:W().optional().nullable(),guard_count:G().optional().nullable(),sections_found:G().optional().nullable(),sections_checked:G().optional().nullable(),files_present:G().optional().nullable(),files_checked:G().optional().nullable()}),Hf=J({generated_at:W(),goal_id:W(),classification:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),recommended_action:W().optional().nullable(),health_check:W().optional().nullable(),active_task_count:G().optional().nullable(),active_priorities:gd(W(),id()).optional().nullable(),cache_check:W().optional().nullable(),json_exists:K().optional().default(!1),markdown_exists:K().optional().default(!1),human_reward:Ff.optional().nullable(),operator_gate:If.optional().nullable(),operator_gate_resume_contract:Lf.optional().nullable(),controller_readiness:zf.optional().nullable(),project_map:Vf.optional().nullable()}),Uf=J({acceptance_observation:Xd.optional().nullable().catch(null),id:W(),activation_state:Y([`active`,`stopped`]).optional().default(`active`),display_name:W().optional().nullable(),domain:W().optional().nullable(),status:W().optional().nullable(),lifecycle_phase:W().optional().nullable(),lifecycle_flags:q(W()).optional().default([]),registry_member:K().optional().default(!1),legacy_runtime_goal:K().optional().default(!1),adapter_kind:W().optional().nullable(),adapter_status:W().optional().nullable(),authority_registry:Bf.optional().nullable(),quota:of.optional().nullable(),control_plane:sf.optional().nullable(),spawn_policy:cf.optional().nullable(),orchestration:cf.optional().nullable(),coordination:J({agent_model:W().optional().nullable(),registered_agents:q(W()).optional().default([])}).optional().nullable(),index_exists:K().optional().default(!1),raw_index_records:G().optional().default(0),unique_runs:G().optional().default(0),latest_runs:q(Hf).optional().default([])}),Wf=J({available:K(),goal_count:G().optional().default(0),run_count:G().optional().default(0),goals:q(Uf).optional().default([]),recent_runs:q(Hf).optional().default([])}),Gf=J({kind:W(),severity:W(),message:W(),recommended_action:W(),goal_id:W().optional().nullable(),path:W().optional().nullable(),goal_ids:q(W()).optional().default([])}),Kf=J({available:K(),ok:K(),registry:W(),current_registry:W().optional().nullable(),current_registry_is_global:K().optional().default(!1),global_goal_count:G().optional().default(0),current_goal_count:G().optional().default(0),source_registry_count:G().optional().default(0),summary:J({high:G().optional().default(0),action:G().optional().default(0),info:G().optional().default(0),checks:G().optional().default(0),findings:G().optional().default(0)}),findings:q(Gf).optional().default([]),checks:q(W()).optional().default([])}),qf=J({runs_24h:G().optional().default(0),runs_7d:G().optional().default(0),quota_spend_slots_24h:G().optional().default(0),quota_spend_slots_7d:G().optional().default(0),automation_run_count_24h:G().optional().default(0),automation_run_count_7d:G().optional().default(0),progress_signal_run_count_24h:G().optional().default(0),progress_signal_run_count_7d:G().optional().default(0),input_tokens_24h:G().optional(),input_tokens_7d:G().optional(),output_tokens_24h:G().optional(),output_tokens_7d:G().optional(),cache_tokens_24h:G().optional(),cache_tokens_7d:G().optional(),cost_usd_24h:G().optional(),cost_usd_7d:G().optional(),duration_ms_24h:G().optional(),duration_ms_7d:G().optional()}),Jf=qf.extend({goal_id:W(),project_share_24h:G().optional().default(0)}),Yf=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),totals:qf.optional().default({runs_24h:0,runs_7d:0,quota_spend_slots_24h:0,quota_spend_slots_7d:0,automation_run_count_24h:0,automation_run_count_7d:0,progress_signal_run_count_24h:0,progress_signal_run_count_7d:0}),goals:q(Jf).optional().default([])}).optional().nullable(),Xf=J({accounting:G().optional().default(0),decision:G().optional().default(0),evidence:G().optional().default(0),state:G().optional().default(0),work:G().optional().default(0)}),Zf={accounting:0,decision:0,evidence:0,state:0,work:0},Qf=J({events_24h:G().optional().default(0),events_7d:G().optional().default(0),by_class_24h:Xf.optional().default(Zf),by_class_7d:Xf.optional().default(Zf)}),$f=Qf.extend({goal_id:W(),latest_event_class:W().optional().nullable(),latest_event_at:W().optional().nullable()}),ep={events_24h:0,events_7d:0,by_class_24h:Zf,by_class_7d:Zf},tp=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),event_classes:q(W()).optional().default([`accounting`,`decision`,`evidence`,`state`,`work`]),totals:Qf.optional().default(ep),goals:q($f).optional().default([])}).optional().nullable(),np=J({available:K().optional().default(!1),source:W().optional().default(`run_history`),goal_id:W().optional().nullable(),generated_at:W().optional().nullable(),classification:W().optional().nullable(),delivery_batch_scale:W().optional().nullable(),delivery_outcome:W().optional().nullable(),recommended_action:W().optional().nullable(),json_exists:K().optional().default(!1),markdown_exists:K().optional().default(!1),freshness_window_hours:G().optional().default(24),freshness_status:W().optional().nullable(),is_fresh:K().optional().default(!1),requires_readiness_run:K().optional().default(!0),age_seconds:G().optional().nullable(),age_hours:G().optional().nullable(),freshness_reference_time:W().optional().nullable(),sample_run_count:G().optional().default(0),proxy_note:W().optional().nullable(),reason:W().optional().nullable()}).optional().nullable(),rp=J({ok:K().optional().default(!0),registry:W().optional().nullable(),runtime_root:W().optional().nullable(),gate:W().optional().default(`promotion_readiness`),gate_state:W().optional().default(`warning`),can_promote:K().optional().default(!1),should_warn:K().optional().default(!0),non_blocking:K().optional().default(!0),recommended_action:W().optional().nullable(),warning_message:W().optional().nullable(),readiness:np.default(null)}).optional().nullable(),ip=J({decision_count:G().optional().default(0),stale_count:G().optional().default(0),rebase_required_count:G().optional().default(0),fresh_count:G().optional().default(0)}),ap=J({goal_id:W(),decision_kind:W().optional().nullable(),decision_at:W().optional().nullable(),classification:W().optional().nullable(),age_days:G().optional().nullable(),stale_by_age:K().optional().default(!1),newer_event_count_7d:G().optional().default(0),newer_event_classes_7d:Xf.optional().default(Zf),freshness_state:W().optional().nullable(),requires_decision_point_rebase:K().optional().default(!1),reason:W().optional().nullable()}),op=J({available:K().optional().default(!0),source:W().optional().default(`run_history`),generated_at:W().optional().nullable(),sample_run_count:G().optional().default(0),window_days:G().optional().default(7),proxy_note:W().optional().nullable(),summary:ip.optional().default({decision_count:0,stale_count:0,rebase_required_count:0,fresh_count:0}),items:q(ap).optional().default([])}).optional().nullable(),sp=J({schema_version:G().optional().default(0),minimum_dashboard_schema_version:G().optional().default(2),producer:W().optional().nullable(),reload_hint:W().optional().nullable()}).optional().default({schema_version:0,minimum_dashboard_schema_version:2,producer:null,reload_hint:`scripts/macos-dashboard-launchagent.sh restart`}),cp=J({schema_version:X(`loopx_goal_projection_scope_v0`),scope:Y([`all`,`active`,`stopped`]),complete:K(),projected_goal_count:G().int().nonnegative(),registry_goal_count:G().int().nonnegative(),registry_revision:W().optional().nullable()}),lp=J({source:W().optional().default(`serve-status`),status_url:W().optional().nullable(),health_url:W().optional().nullable(),review_material_url:W().optional().nullable(),presentation_surfaces_url:W().optional().nullable(),presentation_detail_url:W().optional().nullable(),periodic_report_index_url:W().optional().nullable(),periodic_report_detail_url:W().optional().nullable(),ssh_hosts_url:W().optional().nullable(),reward_dry_run_url:W().optional().nullable(),reward_append_url:W().optional().nullable(),reward_write_enabled:K().optional().default(!1),configure_goal_dry_run_url:W().optional().nullable(),configure_goal_apply_url:W().optional().nullable(),control_plane_write_enabled:K().optional().default(!1)}).optional().nullable(),up=J({extension_id:W().min(1),surface_id:W().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/),extension_revision:W().min(1),payload_sha256:W().regex(/^[0-9a-f]{64}$/)}).strict(),dp=J({extension_id:W().min(1),extension_revision:W().min(1),surface_id:W().regex(/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/),surface_kind:W().regex(/^[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/),title:W().min(1),view_schema:W().regex(/^[a-z][a-z0-9_]*_v\d+$/),visibility:Y([`public-safe`,`owner-only`]),goal_id:W().min(1).nullable(),generated_at:W().min(1).nullable(),review_due_at:W().min(1).nullable(),diagnostic:W().min(1).nullable(),empty_state_title:W().min(1),empty_state_detail:W().min(1)}),fp=ud([dp.extend({state:Y([`ready`,`review_due`]),goal_id:W().min(1),generated_at:W().min(1),detail_ref:up}).strict(),dp.extend({state:X(`empty`),detail_ref:od().optional()}).strict(),dp.extend({state:X(`invalid`),diagnostic:W().min(1),detail_ref:od().optional()}).strict()]),pp=J({schema_version:X(`extension_presentation_surfaces_v0`),count:G().int().nonnegative(),ready_count:G().int().nonnegative(),review_due_count:G().int().nonnegative(),empty_count:G().int().nonnegative(),invalid_count:G().int().nonnegative(),items:q(fp)}).strict(),mp={schema_version:`extension_presentation_surfaces_v0`,count:0,ready_count:0,review_due_count:0,empty_count:0,invalid_count:0,items:[]};J({ok:X(!0),presentation_surfaces:pp}).strict();var hp=J({goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),content_sha256:W().regex(/^sha256:[0-9a-f]{64}$/)}).strict(),gp=J({goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),publication_id:W().min(1),delivered_at:W().min(1),predecessor_publication_id:W().min(1).nullable().optional(),detail_ref:hp}).strict(),_p=J({schema_version:X(`periodic_report_workspace_index_v0`),count:G().int().nonnegative(),items:q(gp)}),vp=_p.extend({returned_count:G().int().nonnegative(),total_count:G().int().nonnegative(),limit:G().int().nonnegative(),offset:G().int().nonnegative(),truncated:K()}).strict(),yp=_p.strict().transform(e=>({...e,returned_count:e.count,total_count:e.count,limit:e.count,offset:0,truncated:!1})),bp=J({ok:X(!0),periodic_reports:ud([vp,yp])}).strict(),xp=J({schema_version:X(`periodic_report_workspace_projection_v0`),goal_id:W().min(1),agent_id:W().min(1),generation_id:W().min(1),generated_at:W().min(1),title:W().min(1),summary:W().min(1),content_sha256:W().regex(/^sha256:[0-9a-f]{64}$/),period_window:J({start_at:W().min(1),end_at:W().min(1)}).strict(),interaction:J({attention_kind:X(`progress`),interaction:X(`inform`),delivery:X(`surface`),form:X(`milestone_report`),writable:X(!1)}).strict(),delta:J({added_count:G().int().nonnegative(),changed_count:G().int().nonnegative(),item_count:G().int().positive(),items:q(J({fact_id:W().min(1),source_ref:W().min(1),title:W().min(1),summary:W().min(1),status:W().min(1),content_kind:W().min(1),change_kind:Y([`added`,`changed`]),previous_status:W().min(1).optional()}).strict())}).strict(),publication:J({publication_id:W().min(1),delivered_at:W().min(1),predecessor_publication_id:W().min(1).nullable().optional(),cursor_id:W().min(1)}).strict(),truth_contract:J({published_cursor_is_source_of_truth:X(!0),generation_receipt_is_delivery_receipt:X(!1),projection_is_writable:X(!1),browser_write_api:X(!1)}).strict()}).strict(),Sp=J({ok:X(!0),projection:xp}).strict(),Cp=J({ok:K(),registry:W(),runtime_root:W(),goal_count:G(),run_count:G(),status_contract:sp,goal_projection:cp.optional().nullable().default(null),local_dashboard_api:lp,contract:J({ok:K(),summary:J({errors:G(),warnings:G(),checks:G()}),errors:q(W()),warnings:q(W()),checks:q(W()).optional().default([])}),global_registry:Kf.optional().default({available:!1,ok:!0,registry:``,current_registry:null,current_registry_is_global:!1,global_goal_count:0,current_goal_count:0,source_registry_count:0,summary:{high:0,action:0,info:0,checks:0,findings:0},findings:[],checks:[]}),attention_queue:J({available:K(),item_count:G(),needs_user_or_controller:G(),needs_controller:G().optional().default(0),needs_codex:G(),watching_external_evidence:G(),autonomous_backlog_candidates:Ef.optional().nullable(),items:q(Pf)}),run_history:Wf.optional().default({available:!1,goal_count:0,run_count:0,goals:[],recent_runs:[]}),event_ledger_summary:tp.default(null),promotion_readiness_summary:np.default(null),promotion_gate:rp.default(null),decision_freshness_summary:op.default(null),usage_summary:Yf.default(null),todo_index:pf.optional().nullable().default(null),agent_management_projection:yf.optional().nullable().default(null),goal_channel_notification_projection:xf.optional().nullable().default(null),presentation_surfaces:pp.optional().default(mp)});J({ok:K(),dry_run:K().optional().default(!0),appended:K().optional().default(!1),goal_id:W().optional().nullable(),raw_index_records_before:G().optional().nullable(),preview_id:W().optional().nullable(),selected_run:J({generated_at:W().optional().nullable(),classification:W().optional().nullable(),recommended_action:W().optional().nullable(),json_exists:K().optional().nullable(),markdown_exists:K().optional().nullable()}).optional().nullable(),human_reward:Ff.optional().nullable(),active_state_summary:W().optional().nullable(),project_agent_visibility:J({source_of_truth:W().optional().nullable(),history_command:W().optional().nullable(),active_state_role:W().optional().nullable(),review_packet_role:W().optional().nullable()}).optional().nullable(),error:W().optional().nullable()});function wp(e,t,n){let r=e.run_history.goals.map(e=>e.id===t&&e.activation_state!==n?{...e,activation_state:n}:e),i=e.attention_queue.items.map(e=>e.goal_id===t&&e.activation_state!==n?{...e,activation_state:n}:e),a=r.some((t,n)=>t!==e.run_history.goals[n]),o=i.some((t,n)=>t!==e.attention_queue.items[n]);return!a&&!o?e:{...e,attention_queue:o?{...e.attention_queue,items:i}:e.attention_queue,run_history:a?{...e.run_history,goals:r}:e.run_history}}function Tp(e,t){let n=e.run_history.goals.filter(e=>e.id!==t),r=e.attention_queue.items.filter(e=>e.goal_id!==t);return n.length===e.run_history.goals.length&&r.length===e.attention_queue.items.length?e:{...e,attention_queue:{...e.attention_queue,items:r},run_history:{...e.run_history,goals:n}}}function Ep(e){return Cp.parse(e)}function Dp(e){return e instanceof fu?e.issues.map(e=>`${e.path.join(`.`)||`root`}: ${e.message}`).join(`; `):e instanceof Error?e.message:String(e)}var Op=Ep(Jd),kp=J({ok:X(!0),schema_version:X(`loopx_workspace_directory_v1`),registry_revision:W(),goals:q(J({id:W(),display_name:W(),activation_state:Y([`active`,`stopped`]),registry_member:X(!0)}))});function Ap(e,t,n){let r=new URL(e,n);r.searchParams.delete(`goal_activation`),r.searchParams.delete(`goal_id`),r.searchParams.delete(`view`);for(let[e,n]of Object.entries(t))r.searchParams.set(e,n);return r.toString()}async function jp(e,t){let n=await fetch(Ap(e,{view:`workspace-directory`},t),{cache:`no-store`,signal:AbortSignal.timeout(5e3)});if(!n.ok)return null;let r=kp.safeParse(await n.json());return r.success?r.data:null}function Mp(e){return Ep({ok:!0,registry:``,runtime_root:``,goal_count:e.goals.length,run_count:0,local_dashboard_api:{},contract:{ok:!0,summary:{errors:0,warnings:0,checks:0},errors:[],warnings:[]},attention_queue:{available:!1,item_count:0,needs_user_or_controller:0,needs_codex:0,watching_external_evidence:0,items:[]},run_history:{available:!1,goal_count:e.goals.length,run_count:0,goals:e.goals,recent_runs:[]}})}async function Np(e,t){if(!e.body)return`service`;let n=e.body.getReader(),r=()=>{n.cancel().catch(()=>{})};t.addEventListener(`abort`,r,{once:!0});let i=new Uint8Array(16384),a=0;try{for(t.throwIfAborted();;){let{done:e,value:r}=await n.read();if(t.throwIfAborted(),e)break;if(a+r.byteLength>i.byteLength)return`service`;i.set(r,a),a+=r.byteLength}let e=JSON.parse(new TextDecoder().decode(i.subarray(0,a)));return typeof e==`object`&&e&&!Array.isArray(e)&&`error_code`in e&&e.error_code===`workspace_status_access_denied`?`access`:`service`}catch{return t.throwIfAborted(),`service`}finally{t.removeEventListener(`abort`,r),r(),n.releaseLock()}}async function Pp(e,t,n,r,i,a,o){let s=[...n.goals],c=new Map;async function l(){for(;s.length&&i()&&!o?.aborted;){let l=s.findIndex(e=>e.id===a()),u=l>=0?l:s.findIndex(e=>e.activation_state===`active`);if(u<0)return;let d=s.splice(u,1)[0],f=(c.get(d.id)??0)+1;c.set(d.id,f);let p=new AbortController,m=!1,h=()=>p.abort();o?.addEventListener(`abort`,h,{once:!0});let g=setTimeout(()=>{m=!0,p.abort()},3e4),_=null;try{let a=await fetch(Ap(e,{goal_id:d.id},t),{cache:`no-store`,signal:p.signal});if(!a.ok)_=a.status===409?`revision`:a.status>=500?await Np(a,p.signal):`scope`,p.signal.throwIfAborted();else{let e=await a.json();if(e.workspace_registry_revision!==n.registry_revision)_=`revision`;else{let t=Ep(e);!t.run_history.goals.some(e=>e.id===d.id)||t.run_history.goals.some(e=>e.id!==d.id)?_=`scope`:i()&&!o?.aborted&&r(d.id,t,null)}}}catch(e){_=m?`timeout`:e instanceof TypeError?`network`:`invalid`}finally{clearTimeout(g),o?.removeEventListener(`abort`,h)}if(!i()||o?.aborted)return;_&&[`timeout`,`network`,`service`].includes(_)&&f<3?(await new Promise(e=>setTimeout(e,f*1e3)),s.push(d)):_&&r(d.id,null,_)}}await Promise.all([l(),l()])}var Fp=(...e)=>e.filter((e,t,n)=>!!e&&e.trim()!==``&&n.indexOf(e)===t).join(` `).trim(),Ip=e=>e.replace(/([a-z0-9])([A-Z])/g,`$1-$2`).toLowerCase(),Lp=e=>e.replace(/^([A-Z])|[\s-_]+(\w)/g,(e,t,n)=>n?n.toUpperCase():t.toLowerCase()),Rp=e=>{let t=Lp(e);return t.charAt(0).toUpperCase()+t.slice(1)},zp={xmlns:`http://www.w3.org/2000/svg`,width:24,height:24,viewBox:`0 0 24 24`,fill:`none`,stroke:`currentColor`,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`},Bp=e=>{for(let t in e)if(t.startsWith(`aria-`)||t===`role`||t===`title`)return!0;return!1},Vp=(0,z.createContext)({}),Hp=()=>(0,z.useContext)(Vp),Up=(0,z.forwardRef)(({color:e,size:t,strokeWidth:n,absoluteStrokeWidth:r,className:i=``,children:a,iconNode:o,...s},c)=>{let{size:l=24,strokeWidth:u=2,absoluteStrokeWidth:d=!1,color:f=`currentColor`,className:p=``}=Hp()??{},m=r??d?Number(n??u)*24/Number(t??l):n??u;return(0,z.createElement)(`svg`,{ref:c,...zp,width:t??l??zp.width,height:t??l??zp.height,stroke:e??f,strokeWidth:m,className:Fp(`lucide`,p,i),...!a&&!Bp(s)&&{"aria-hidden":`true`},...s},[...o.map(([e,t])=>(0,z.createElement)(e,t)),...Array.isArray(a)?a:[a]])}),Z=(e,t)=>{let n=(0,z.forwardRef)(({className:n,...r},i)=>(0,z.createElement)(Up,{ref:i,iconNode:t,className:Fp(`lucide-${Ip(Rp(e))}`,`lucide-${e}`,n),...r}));return n.displayName=Rp(e),n},Wp=Z(`activity`,[[`path`,{d:`M22 12h-2.48a2 2 0 0 0-1.93 1.46l-2.35 8.36a.25.25 0 0 1-.48 0L9.24 2.18a.25.25 0 0 0-.48 0l-2.35 8.36A2 2 0 0 1 4.49 12H2`,key:`169zse`}]]),Gp=Z(`arrow-down`,[[`path`,{d:`M12 5v14`,key:`s699le`}],[`path`,{d:`m19 12-7 7-7-7`,key:`1idqje`}]]),Kp=Z(`arrow-left`,[[`path`,{d:`m12 19-7-7 7-7`,key:`1l729n`}],[`path`,{d:`M19 12H5`,key:`x3x0zl`}]]),qp=Z(`arrow-right`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`m12 5 7 7-7 7`,key:`xquz4c`}]]),Jp=Z(`arrow-up-down`,[[`path`,{d:`m21 16-4 4-4-4`,key:`f6ql7i`}],[`path`,{d:`M17 20V4`,key:`1ejh1v`}],[`path`,{d:`m3 8 4-4 4 4`,key:`11wl7u`}],[`path`,{d:`M7 4v16`,key:`1glfcx`}]]),Yp=Z(`arrow-up`,[[`path`,{d:`m5 12 7-7 7 7`,key:`hav0vg`}],[`path`,{d:`M12 19V5`,key:`x0mq9r`}]]),Xp=Z(`badge-check`,[[`path`,{d:`M3.85 8.62a4 4 0 0 1 4.78-4.77 4 4 0 0 1 6.74 0 4 4 0 0 1 4.78 4.78 4 4 0 0 1 0 6.74 4 4 0 0 1-4.77 4.78 4 4 0 0 1-6.75 0 4 4 0 0 1-4.78-4.77 4 4 0 0 1 0-6.76Z`,key:`3c2336`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),Zp=Z(`bell`,[[`path`,{d:`M10.268 21a2 2 0 0 0 3.464 0`,key:`vwvbt9`}],[`path`,{d:`M3.262 15.326A1 1 0 0 0 4 17h16a1 1 0 0 0 .74-1.673C19.41 13.956 18 12.499 18 8A6 6 0 0 0 6 8c0 4.499-1.411 5.956-2.738 7.326`,key:`11g9vi`}]]),Qp=Z(`bot`,[[`path`,{d:`M12 8V4H8`,key:`hb8ula`}],[`rect`,{width:`16`,height:`12`,x:`4`,y:`8`,rx:`2`,key:`enze0r`}],[`path`,{d:`M2 14h2`,key:`vft8re`}],[`path`,{d:`M20 14h2`,key:`4cs60a`}],[`path`,{d:`M15 13v2`,key:`1xurst`}],[`path`,{d:`M9 13v2`,key:`rq6x2g`}]]),$p=Z(`braces`,[[`path`,{d:`M8 3H7a2 2 0 0 0-2 2v5a2 2 0 0 1-2 2 2 2 0 0 1 2 2v5c0 1.1.9 2 2 2h1`,key:`ezmyqa`}],[`path`,{d:`M16 21h1a2 2 0 0 0 2-2v-5c0-1.1.9-2 2-2a2 2 0 0 1-2-2V5a2 2 0 0 0-2-2h-1`,key:`e1hn23`}]]),em=Z(`calendar-clock`,[[`path`,{d:`M16 14v2.2l1.6 1`,key:`fo4ql5`}],[`path`,{d:`M16 2v4`,key:`4m81vk`}],[`path`,{d:`M21 7.5V6a2 2 0 0 0-2-2H5a2 2 0 0 0-2 2v14a2 2 0 0 0 2 2h3.5`,key:`1osxxc`}],[`path`,{d:`M3 10h5`,key:`r794hk`}],[`path`,{d:`M8 2v4`,key:`1cmpym`}],[`circle`,{cx:`16`,cy:`16`,r:`6`,key:`qoo3c4`}]]),tm=Z(`check`,[[`path`,{d:`M20 6 9 17l-5-5`,key:`1gmf2c`}]]),nm=Z(`chevron-down`,[[`path`,{d:`m6 9 6 6 6-6`,key:`qrunsl`}]]),rm=Z(`chevron-right`,[[`path`,{d:`m9 18 6-6-6-6`,key:`mthhwq`}]]),im=Z(`chevron-up`,[[`path`,{d:`m18 15-6-6-6 6`,key:`153udz`}]]),am=Z(`circle-alert`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`line`,{x1:`12`,x2:`12`,y1:`8`,y2:`12`,key:`1pkeuh`}],[`line`,{x1:`12`,x2:`12.01`,y1:`16`,y2:`16`,key:`4dfq90`}]]),om=Z(`circle-check`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),sm=Z(`clipboard-check`,[[`rect`,{width:`8`,height:`4`,x:`8`,y:`2`,rx:`1`,ry:`1`,key:`tgr4d6`}],[`path`,{d:`M16 4h2a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H6a2 2 0 0 1-2-2V6a2 2 0 0 1 2-2h2`,key:`116196`}],[`path`,{d:`m9 14 2 2 4-4`,key:`df797q`}]]),cm=Z(`code-xml`,[[`path`,{d:`m18 16 4-4-4-4`,key:`1inbqp`}],[`path`,{d:`m6 8-4 4 4 4`,key:`15zrgr`}],[`path`,{d:`m14.5 4-5 16`,key:`e7oirm`}]]),lm=Z(`copy`,[[`rect`,{width:`14`,height:`14`,x:`8`,y:`8`,rx:`2`,ry:`2`,key:`17jyea`}],[`path`,{d:`M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2`,key:`zix9uf`}]]),um=Z(`database`,[[`ellipse`,{cx:`12`,cy:`5`,rx:`9`,ry:`3`,key:`msslwz`}],[`path`,{d:`M3 5V19A9 3 0 0 0 21 19V5`,key:`1wlel7`}],[`path`,{d:`M3 12A9 3 0 0 0 21 12`,key:`mv7ke4`}]]),dm=Z(`download`,[[`path`,{d:`M12 15V3`,key:`m9g1x1`}],[`path`,{d:`M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4`,key:`ih7n3h`}],[`path`,{d:`m7 10 5 5 5-5`,key:`brsn70`}]]),fm=Z(`ellipsis`,[[`circle`,{cx:`12`,cy:`12`,r:`1`,key:`41hilf`}],[`circle`,{cx:`19`,cy:`12`,r:`1`,key:`1wjl8i`}],[`circle`,{cx:`5`,cy:`12`,r:`1`,key:`1pcz8c`}]]),pm=Z(`external-link`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`M10 14 21 3`,key:`gplh6r`}],[`path`,{d:`M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6`,key:`a6xqqp`}]]),mm=Z(`eye`,[[`path`,{d:`M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0`,key:`1nclc0`}],[`circle`,{cx:`12`,cy:`12`,r:`3`,key:`1v7zrd`}]]),hm=Z(`file-braces`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 12a1 1 0 0 0-1 1v1a1 1 0 0 1-1 1 1 1 0 0 1 1 1v1a1 1 0 0 0 1 1`,key:`1oajmo`}],[`path`,{d:`M14 18a1 1 0 0 0 1-1v-1a1 1 0 0 1 1-1 1 1 0 0 1-1-1v-1a1 1 0 0 0-1-1`,key:`mpwhp6`}]]),gm=Z(`file-check-corner`,[[`path`,{d:`M10.5 22H6a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.706.706l3.588 3.588A2.4 2.4 0 0 1 20 8v6`,key:`g5mvt7`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`m14 20 2 2 4-4`,key:`15kota`}]]),_m=Z(`file-text`,[[`path`,{d:`M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z`,key:`1oefj6`}],[`path`,{d:`M14 2v5a1 1 0 0 0 1 1h5`,key:`wfsgrz`}],[`path`,{d:`M10 9H8`,key:`b1mrlr`}],[`path`,{d:`M16 13H8`,key:`t4e002`}],[`path`,{d:`M16 17H8`,key:`z1uh3a`}]]),vm=Z(`git-branch`,[[`path`,{d:`M15 6a9 9 0 0 0-9 9V3`,key:`1cii5b`}],[`circle`,{cx:`18`,cy:`6`,r:`3`,key:`1h7g24`}],[`circle`,{cx:`6`,cy:`18`,r:`3`,key:`fqmcym`}]]),ym=Z(`git-compare-arrows`,[[`circle`,{cx:`5`,cy:`6`,r:`3`,key:`1qnov2`}],[`path`,{d:`M12 6h5a2 2 0 0 1 2 2v7`,key:`1yj91y`}],[`path`,{d:`m15 9-3-3 3-3`,key:`1lwv8l`}],[`circle`,{cx:`19`,cy:`18`,r:`3`,key:`1qljk2`}],[`path`,{d:`M12 18H7a2 2 0 0 1-2-2V9`,key:`16sdep`}],[`path`,{d:`m9 15 3 3-3 3`,key:`1m3kbl`}]]),bm=Z(`info`,[[`circle`,{cx:`12`,cy:`12`,r:`10`,key:`1mglay`}],[`path`,{d:`M12 16v-4`,key:`1dtifu`}],[`path`,{d:`M12 8h.01`,key:`e9boi3`}]]),xm=Z(`languages`,[[`path`,{d:`m5 8 6 6`,key:`1wu5hv`}],[`path`,{d:`m4 14 6-6 2-3`,key:`1k1g8d`}],[`path`,{d:`M2 5h12`,key:`or177f`}],[`path`,{d:`M7 2h1`,key:`1t2jsx`}],[`path`,{d:`m22 22-5-10-5 10`,key:`don7ne`}],[`path`,{d:`M14 18h6`,key:`1m8k6r`}]]),Sm=Z(`layout-dashboard`,[[`rect`,{width:`7`,height:`9`,x:`3`,y:`3`,rx:`1`,key:`10lvy0`}],[`rect`,{width:`7`,height:`5`,x:`14`,y:`3`,rx:`1`,key:`16une8`}],[`rect`,{width:`7`,height:`9`,x:`14`,y:`12`,rx:`1`,key:`1hutg5`}],[`rect`,{width:`7`,height:`5`,x:`3`,y:`16`,rx:`1`,key:`ldoo1y`}]]),Cm=Z(`list-plus`,[[`path`,{d:`M16 5H3`,key:`m91uny`}],[`path`,{d:`M11 12H3`,key:`51ecnj`}],[`path`,{d:`M16 19H3`,key:`zzsher`}],[`path`,{d:`M18 9v6`,key:`1twb98`}],[`path`,{d:`M21 12h-6`,key:`bt1uis`}]]),wm=Z(`loader-circle`,[[`path`,{d:`M21 12a9 9 0 1 1-6.219-8.56`,key:`13zald`}]]),Tm=Z(`maximize-2`,[[`path`,{d:`M15 3h6v6`,key:`1q9fwt`}],[`path`,{d:`m21 3-7 7`,key:`1l2asr`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M9 21H3v-6`,key:`wtvkvv`}]]),Em=Z(`menu`,[[`path`,{d:`M4 5h16`,key:`1tepv9`}],[`path`,{d:`M4 12h16`,key:`1lakjw`}],[`path`,{d:`M4 19h16`,key:`1djgab`}]]),Dm=Z(`message-circle-question-mark`,[[`path`,{d:`M2.992 16.342a2 2 0 0 1 .094 1.167l-1.065 3.29a1 1 0 0 0 1.236 1.168l3.413-.998a2 2 0 0 1 1.099.092 10 10 0 1 0-4.777-4.719`,key:`1sd12s`}],[`path`,{d:`M9.09 9a3 3 0 0 1 5.83 1c0 2-3 3-3 3`,key:`1u773s`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),Om=Z(`message-square-text`,[[`path`,{d:`M22 17a2 2 0 0 1-2 2H6.828a2 2 0 0 0-1.414.586l-2.202 2.202A.71.71 0 0 1 2 21.286V5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2z`,key:`18887p`}],[`path`,{d:`M7 11h10`,key:`1twpyw`}],[`path`,{d:`M7 15h6`,key:`d9of3u`}],[`path`,{d:`M7 7h8`,key:`af5zfr`}]]),km=Z(`minimize-2`,[[`path`,{d:`m14 10 7-7`,key:`oa77jy`}],[`path`,{d:`M20 10h-6V4`,key:`mjg0md`}],[`path`,{d:`m3 21 7-7`,key:`tjx5ai`}],[`path`,{d:`M4 14h6v6`,key:`rmj7iw`}]]),Am=Z(`moon`,[[`path`,{d:`M20.985 12.486a9 9 0 1 1-9.473-9.472c.405-.022.617.46.402.803a6 6 0 0 0 8.268 8.268c.344-.215.825-.004.803.401`,key:`kfwtm`}]]),jm=Z(`palette`,[[`path`,{d:`M12 22a1 1 0 0 1 0-20 10 9 0 0 1 10 9 5 5 0 0 1-5 5h-2.25a1.75 1.75 0 0 0-1.4 2.8l.3.4a1.75 1.75 0 0 1-1.4 2.8z`,key:`e79jfc`}],[`circle`,{cx:`13.5`,cy:`6.5`,r:`.5`,fill:`currentColor`,key:`1okk4w`}],[`circle`,{cx:`17.5`,cy:`10.5`,r:`.5`,fill:`currentColor`,key:`f64h9f`}],[`circle`,{cx:`6.5`,cy:`12.5`,r:`.5`,fill:`currentColor`,key:`qy21gx`}],[`circle`,{cx:`8.5`,cy:`7.5`,r:`.5`,fill:`currentColor`,key:`fotxhn`}]]),Mm=Z(`paperclip`,[[`path`,{d:`m16 6-8.414 8.586a2 2 0 0 0 2.829 2.829l8.414-8.586a4 4 0 1 0-5.657-5.657l-8.379 8.551a6 6 0 1 0 8.485 8.485l8.379-8.551`,key:`1miecu`}]]),Nm=Z(`pause`,[[`rect`,{x:`14`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`kaeet6`}],[`rect`,{x:`5`,y:`3`,width:`5`,height:`18`,rx:`1`,key:`1wsw3u`}]]),Pm=Z(`play`,[[`path`,{d:`M5 5a2 2 0 0 1 3.008-1.728l11.997 6.998a2 2 0 0 1 .003 3.458l-12 7A2 2 0 0 1 5 19z`,key:`10ikf1`}]]),Fm=Z(`plus`,[[`path`,{d:`M5 12h14`,key:`1ays0h`}],[`path`,{d:`M12 5v14`,key:`s699le`}]]),Im=Z(`radio`,[[`path`,{d:`M16.247 7.761a6 6 0 0 1 0 8.478`,key:`1fwjs5`}],[`path`,{d:`M19.075 4.933a10 10 0 0 1 0 14.134`,key:`ehdyv1`}],[`path`,{d:`M4.925 19.067a10 10 0 0 1 0-14.134`,key:`1q22gi`}],[`path`,{d:`M7.753 16.239a6 6 0 0 1 0-8.478`,key:`r2q7qm`}],[`circle`,{cx:`12`,cy:`12`,r:`2`,key:`1c9p78`}]]),Lm=Z(`refresh-cw`,[[`path`,{d:`M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8`,key:`v9h5vc`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}],[`path`,{d:`M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16`,key:`3uifl3`}],[`path`,{d:`M8 16H3v5`,key:`1cv678`}]]),Rm=Z(`rotate-ccw`,[[`path`,{d:`M3 12a9 9 0 1 0 9-9 9.75 9.75 0 0 0-6.74 2.74L3 8`,key:`1357e3`}],[`path`,{d:`M3 3v5h5`,key:`1xhq8a`}]]),zm=Z(`rotate-cw`,[[`path`,{d:`M21 12a9 9 0 1 1-9-9c2.52 0 4.93 1 6.74 2.74L21 8`,key:`1p45f6`}],[`path`,{d:`M21 3v5h-5`,key:`1q7to0`}]]),Bm=Z(`search`,[[`path`,{d:`m21 21-4.34-4.34`,key:`14j7rj`}],[`circle`,{cx:`11`,cy:`11`,r:`8`,key:`4ej97u`}]]),Vm=Z(`send`,[[`path`,{d:`M14.536 21.686a.5.5 0 0 0 .937-.024l6.5-19a.496.496 0 0 0-.635-.635l-19 6.5a.5.5 0 0 0-.024.937l7.93 3.18a2 2 0 0 1 1.112 1.11z`,key:`1ffxy3`}],[`path`,{d:`m21.854 2.147-10.94 10.939`,key:`12cjpa`}]]),Hm=Z(`server-cog`,[[`path`,{d:`m10.852 14.772-.383.923`,key:`11vil6`}],[`path`,{d:`M13.148 14.772a3 3 0 1 0-2.296-5.544l-.383-.923`,key:`1v3clb`}],[`path`,{d:`m13.148 9.228.383-.923`,key:`t2zzyc`}],[`path`,{d:`m13.53 15.696-.382-.924a3 3 0 1 1-2.296-5.544`,key:`1bxfiv`}],[`path`,{d:`m14.772 10.852.923-.383`,key:`k9m8cz`}],[`path`,{d:`m14.772 13.148.923.383`,key:`1xvhww`}],[`path`,{d:`M4.5 10H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v4a2 2 0 0 1-2 2h-.5`,key:`tn8das`}],[`path`,{d:`M4.5 14H4a2 2 0 0 0-2 2v4a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-4a2 2 0 0 0-2-2h-.5`,key:`1g2pve`}],[`path`,{d:`M6 18h.01`,key:`uhywen`}],[`path`,{d:`M6 6h.01`,key:`1utrut`}],[`path`,{d:`m9.228 10.852-.923-.383`,key:`1wtb30`}],[`path`,{d:`m9.228 13.148-.923.383`,key:`1a830x`}]]),Um=Z(`server`,[[`rect`,{width:`20`,height:`8`,x:`2`,y:`2`,rx:`2`,ry:`2`,key:`ngkwjq`}],[`rect`,{width:`20`,height:`8`,x:`2`,y:`14`,rx:`2`,ry:`2`,key:`iecqi9`}],[`line`,{x1:`6`,x2:`6.01`,y1:`6`,y2:`6`,key:`16zg32`}],[`line`,{x1:`6`,x2:`6.01`,y1:`18`,y2:`18`,key:`nzw8ys`}]]),Wm=Z(`settings-2`,[[`path`,{d:`M14 17H5`,key:`gfn3mx`}],[`path`,{d:`M19 7h-9`,key:`6i9tg`}],[`circle`,{cx:`17`,cy:`17`,r:`3`,key:`18b49y`}],[`circle`,{cx:`7`,cy:`7`,r:`3`,key:`dfmy0x`}]]),Gm=Z(`shield-check`,[[`path`,{d:`M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z`,key:`oel41y`}],[`path`,{d:`m9 12 2 2 4-4`,key:`dzmm74`}]]),Km=Z(`sliders-horizontal`,[[`path`,{d:`M10 5H3`,key:`1qgfaw`}],[`path`,{d:`M12 19H3`,key:`yhmn1j`}],[`path`,{d:`M14 3v4`,key:`1sua03`}],[`path`,{d:`M16 17v4`,key:`1q0r14`}],[`path`,{d:`M21 12h-9`,key:`1o4lsq`}],[`path`,{d:`M21 19h-5`,key:`1rlt1p`}],[`path`,{d:`M21 5h-7`,key:`1oszz2`}],[`path`,{d:`M8 10v4`,key:`tgpxqk`}],[`path`,{d:`M8 12H3`,key:`a7s4jb`}]]),qm=Z(`sparkles`,[[`path`,{d:`M11.017 2.814a1 1 0 0 1 1.966 0l1.051 5.558a2 2 0 0 0 1.594 1.594l5.558 1.051a1 1 0 0 1 0 1.966l-5.558 1.051a2 2 0 0 0-1.594 1.594l-1.051 5.558a1 1 0 0 1-1.966 0l-1.051-5.558a2 2 0 0 0-1.594-1.594l-5.558-1.051a1 1 0 0 1 0-1.966l5.558-1.051a2 2 0 0 0 1.594-1.594z`,key:`1s2grr`}],[`path`,{d:`M20 2v4`,key:`1rf3ol`}],[`path`,{d:`M22 4h-4`,key:`gwowj6`}],[`circle`,{cx:`4`,cy:`20`,r:`2`,key:`6kqj1y`}]]),Jm=Z(`square`,[[`rect`,{width:`18`,height:`18`,x:`3`,y:`3`,rx:`2`,key:`afitv7`}]]),Ym=Z(`sun`,[[`circle`,{cx:`12`,cy:`12`,r:`4`,key:`4exip2`}],[`path`,{d:`M12 2v2`,key:`tus03m`}],[`path`,{d:`M12 20v2`,key:`1lh1kg`}],[`path`,{d:`m4.93 4.93 1.41 1.41`,key:`149t6j`}],[`path`,{d:`m17.66 17.66 1.41 1.41`,key:`ptbguv`}],[`path`,{d:`M2 12h2`,key:`1t8f8n`}],[`path`,{d:`M20 12h2`,key:`1q8mjw`}],[`path`,{d:`m6.34 17.66-1.41 1.41`,key:`1m8zz5`}],[`path`,{d:`m19.07 4.93-1.41 1.41`,key:`1shlcs`}]]),Xm=Z(`test-tube-diagonal`,[[`path`,{d:`M21 7 6.82 21.18a2.83 2.83 0 0 1-3.99-.01a2.83 2.83 0 0 1 0-4L17 3`,key:`1ub6xw`}],[`path`,{d:`m16 2 6 6`,key:`1gw87d`}],[`path`,{d:`M12 16H4`,key:`1cjfip`}]]),Zm=Z(`trash-2`,[[`path`,{d:`M10 11v6`,key:`nco0om`}],[`path`,{d:`M14 11v6`,key:`outv1u`}],[`path`,{d:`M19 6v14a2 2 0 0 1-2 2H7a2 2 0 0 1-2-2V6`,key:`miytrc`}],[`path`,{d:`M3 6h18`,key:`d0wm0j`}],[`path`,{d:`M8 6V4a2 2 0 0 1 2-2h4a2 2 0 0 1 2 2v2`,key:`e791ji`}]]),Qm=Z(`triangle-alert`,[[`path`,{d:`m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3`,key:`wmoenq`}],[`path`,{d:`M12 9v4`,key:`juzpu7`}],[`path`,{d:`M12 17h.01`,key:`p32p05`}]]),$m=Z(`unlink`,[[`path`,{d:`m18.84 12.25 1.72-1.71h-.02a5.004 5.004 0 0 0-.12-7.07 5.006 5.006 0 0 0-6.95 0l-1.72 1.71`,key:`yqzxt4`}],[`path`,{d:`m5.17 11.75-1.71 1.71a5.004 5.004 0 0 0 .12 7.07 5.006 5.006 0 0 0 6.95 0l1.71-1.71`,key:`4qinb0`}],[`line`,{x1:`8`,x2:`8`,y1:`2`,y2:`5`,key:`1041cp`}],[`line`,{x1:`2`,x2:`5`,y1:`8`,y2:`8`,key:`14m1p5`}],[`line`,{x1:`16`,x2:`16`,y1:`19`,y2:`22`,key:`rzdirn`}],[`line`,{x1:`19`,x2:`22`,y1:`16`,y2:`16`,key:`ox905f`}]]),eh=Z(`x`,[[`path`,{d:`M18 6 6 18`,key:`1bl5f8`}],[`path`,{d:`m6 6 12 12`,key:`d8bk6v`}]]);function th(e){return/^[a-zA-Z][a-zA-Z\d+\-.]*:/.test(e)||e.startsWith(`//`)}function nh(e){return[`localhost`,`127.0.0.1`,`::1`,`[::1]`].includes(e)}function rh(e,t,n){let r=e.trim();if(!r)return{error:`status URL is empty`};let i;try{i=new URL(r,t)}catch{return{error:`status URL is invalid`}}let a=!th(r),o=nh(i.hostname);return!a&&!o?{error:`${n} must be relative or loopback`}:{source:{isLoopback:o,isRelative:a,url:r}}}function ih(e,t){return rh(e,t,`statusUrl`)}function ah(e,t){let n=rh(e,t,`Ops statusUrl`);return n.error?{error:`${n.error}; use showcase mode for public links.`}:n}function oh(e,t,n){let r=new URL(e,n);return r.searchParams.set(`goal_activation`,t),r.toString()}function sh(e,t){if(!t||!e.isLoopback)return null;try{let n=new URL(e.url,window.location.href),r=new URL(t,n.origin);return nh(r.hostname)?r.toString():null}catch{return null}}function ch(e,t){return{detailUrl:sh(t,e.local_dashboard_api?.periodic_report_detail_url),indexUrl:sh(t,e.local_dashboard_api?.periodic_report_index_url)}}async function lh(e,t){let n=new URL(e);n.searchParams.set(`goal_id`,t),n.searchParams.set(`limit`,`100`),n.searchParams.set(`offset`,`0`);let r=await fetch(n,{cache:`no-store`});if(!r.ok)throw Error(`HTTP ${r.status} while loading published reports`);return bp.parse(await r.json()).periodic_reports}async function uh(e,t){let n=new URL(e);Object.entries(t).forEach(([e,t])=>n.searchParams.set(e,t));let r=await fetch(n,{cache:`no-store`});if(!r.ok)throw Error(`HTTP ${r.status} while loading published report detail`);return Sp.parse(await r.json()).projection}function dh(e,t,n){let r=e.find(e=>e.agentId===t&&e.available)??e.find(e=>e.agentId===n&&e.available)??e.find(e=>e.available);if(!r)throw Error(`Chat requires at least one available route`);return r}function fh(e){return!!(e&&typeof e==`object`&&e.session_invalidated===!0)}var ph=``.replace(/\/+$/,``);function mh(e){return!ph||/^https?:\/\//.test(e)?e:new URL(e,`${ph}/`).toString()}var hh=J({todo_id:W().nullable(),role:W().nullable(),status:W(),priority:W().nullable(),text:W(),action_kind:W().nullable(),task_class:W().nullable(),claimed_by:W().nullable(),evidence:W().nullable()}),gh=J({goal_id:W(),title:W(),objective:W(),status:W(),waiting_on:W().nullable(),severity:W().nullable(),gate:W(),next_action:W(),top_todo:hh.nullable(),todos:q(hh),evidence:q(W()),quota:J({state:W().nullable(),spent_slots:G().nullable(),allowed_slots:G().nullable(),reason:W().nullable()})});J({ok:K(),schema_version:X(`loopx_chat_status_v0`),selected_goal_id:W().nullable(),goal_count:G(),goals:q(gh)});var _h=J({ok:X(!0),schema_version:Y([`loopx_chat_capabilities_v0`,`loopx_chat_capabilities_v1`]),agent_backend:W(),sandbox:W(),approval_policy:W(),todo_write:W(),goal_subagent_configuration:W().optional(),goal_id:W().nullable(),streaming:K().optional(),resume:K().optional(),interrupt:K().optional(),typed_actions:K().optional(),action_kinds:q(W()).optional(),adapters:q(J({agent_id:W(),display_name:W(),adapter_kind:W(),available:K(),streaming:K(),resume:K(),interrupt:K(),location:W().optional(),source:W().optional(),tool_calls:K().optional(),trust_scope:W().optional()})).optional(),lark_cli:J({available:K(),source:W(),version:W().nullable(),error_code:W().nullable()}).optional()}),vh=J({kind:X(`todo`),text:W(),priority:Y([`P0`,`P1`,`P2`]),rationale:W()}),yh=J({operation:Y([`merge`,`release`,`deploy`,`delete`,`payment`]),target:W().min(1).max(160),summary:W().max(300)}),bh=J({schema_version:X(`loopx_chat_agent_response_v0`),message:W(),proposals:q(vh),protected_action:yh.nullable().optional().default(null),gate:J({kind:W(),summary:W(),next_action:W()}).nullable()}),xh=J({closed:X(!0),ok:X(!0),session_id:W().min(1)});J({dry_run:X(!0),ok:X(!0),preview_id:W().min(1),todo:J({goal_id:W().min(1),text:W(),todo_id:W().optional()})});var Sh=J({schema_version:X(`loopx_chat_todo_receipt_v0`),receipt_id:W().min(1),preview_id:W().min(1),goal_id:W().min(1),todo_id:W().min(1),status:X(`applied`),outcome:Y([`todo_added`,`todo_already_exists`]),already_exists:K(),preview_revision:W().nullable()});J({applied:X(!0),ok:X(!0),receipt:Sh,todo:J({text:W(),todo_id:W()})});var Ch=J({model_config:J({model:W(),reasoning_effort:W().optional()}).optional(),mode:W(),spawn_allowed:K(),max_children:G().int().nonnegative(),allowed_domains:q(W()).optional().default([])}).passthrough(),wh=J({ok:X(!0),dry_run:K(),execute:K(),written:K(),changed:K(),goal_id:W().min(1),changed_fields:q(W()),before:J({orchestration:Ch}).passthrough(),after:J({orchestration:Ch}).passthrough(),preview_id:W().min(1),feature_summary:J({multi_subagent:Y([`off`,`enabled`])}).passthrough(),global_sync:J({required:K(),executed:K(),readback:J({status:W(),verified:K()}).passthrough()}).passthrough()}),Th=J({id:W().min(1),outcome:Y([`approved`,`rejected`,`cancelled`]),projectionVerified:K().nullable(),proposal:vh,receipt:Sh.nullable()}).superRefine((e,t)=>{e.outcome===`approved`&&!e.receipt&&t.addIssue({code:`custom`,message:`approved decision history requires a Todo receipt`,path:[`receipt`]}),e.outcome!==`approved`&&e.receipt&&t.addIssue({code:`custom`,message:`zero-write decision history must not include a Todo receipt`,path:[`receipt`]})});J({schema_version:X(`loopx_chat_decision_history_v0`),goal_id:W().min(1),decisions:q(Th).max(24)});var Eh=class extends Error{payload;constructor(e,t){super(e),this.payload=t}},Dh=Y([`goal.create`,`goal.update`,`goal.lifecycle`,`todo.create`,`todo.update`,`agent.bind`,`heartbeat.bind`,`monitor.create`,`monitor.update`,`gate.resolve`,`run.correct`,`operation.execute`]),Oh=J({schema_version:X(`loopx_operation_envelope_v0`),lifecycle_state:Y([`prepared`,`awaiting_confirmation`,`claimed`,`outcome_observed`]),operation_id:W().min(1),confirmation_digest:W().min(1),payload_digest:W().min(1),projection_digest:W().min(1),expires_at:W().min(1),delivery:gd(W(),id()).nullable(),confirmation:gd(W(),id()).nullable(),claim:gd(W(),id()).nullable(),outcome:gd(W(),id()).nullable(),result_delivery:gd(W(),id()).nullable().optional()}).passthrough(),kh=J({schema_version:X(`loopx_chat_action_proposal_v1`),proposal_id:W().min(1),action_kind:Dh,summary:W().min(1),normalized_parameters:gd(W(),id()),context:gd(W(),id()),expected_state_fingerprint:W().min(1),permission_classification:W().min(1),validation_evidence:q(W().refine(e=>e.trim().length>0,`Validation evidence must be non-blank text`)),available_transitions:q(Y([`apply`,`cancel`,`regenerate`,`reject`,`defer`])),status:Y([`preview_ready`,`applying`,`gated`,`failed`,`rejected`,`deferred`,`cancelled`,`stale`,`applied`]),receipt:gd(W(),id()).nullable(),stale:gd(W(),id()).nullable(),gate:gd(W(),id()).nullable().optional(),error:gd(W(),id()).nullable().optional(),checkpoint:gd(W(),id()).nullable().optional(),regenerated_from:W().nullable().optional(),operation:Oh.nullable().optional(),created_at:W(),updated_at:W()}),Ah=J({ok:X(!0),proposal:kh});async function jh(e){let t=await Lh(`/api/actions/preview`,{method:`POST`,body:JSON.stringify({action_kind:e.actionKind,context:e.context,idempotency_key:e.idempotencyKey,normalized_parameters:e.normalizedParameters,summary:e.summary})});return Ah.parse(t).proposal}var Mh=J({ok:X(!0),schema_version:X(`loopx_chat_action_list_v1`),proposals:q(kh)});async function Nh(e={}){let t=new URLSearchParams;e.contextKind&&t.set(`context_kind`,e.contextKind),e.goalId&&t.set(`goal_id`,e.goalId);let n=t.size>0?`?${t.toString()}`:``;return Mh.parse(await Lh(`/api/actions${n}`)).proposals}async function Ph(e){let t=await Lh(`/api/actions/${encodeURIComponent(e)}/apply`,{method:`POST`,body:`{}`});return J({ok:X(!0),proposal:kh,turn:gd(W(),id()).nullable().optional()}).parse(t)}async function Fh(e){return Ah.parse(await Lh(`/api/actions/${encodeURIComponent(e)}/cancel`,{method:`POST`,body:`{}`})).proposal}async function Ih(e,t){return Ah.parse(await Lh(`/api/actions/${encodeURIComponent(e)}/${t}`,{method:`POST`,body:`{}`})).proposal}async function Lh(e,t){let n;try{n=await fetch(mh(e),{cache:`no-store`,...t,headers:{"Content-Type":`application/json`,...t?.headers}})}catch{throw new Eh(`无法连接 LoopX Chat 服务。请确认 Dashboard 与 Chat 服务已启动且来自同一版本。`,{error_code:`chat_api_unavailable`})}let r=await n.text(),i=null;if(r.trim())try{i=JSON.parse(r)}catch{i=null}let a=i&&typeof i==`object`&&!Array.isArray(i)?i:{};if(!n.ok){let e=(a.proposal&&typeof a.proposal==`object`?a.proposal:null)?.status===`stale`?`来源状态已变化,请重新生成预览。`:null,t=n.status>=500?`LoopX Chat 服务暂时不可用(HTTP ${n.status})。请确认 Dashboard 与 Chat 服务已启动且来自同一版本。`:`LoopX Chat 请求失败(HTTP ${n.status})。`;throw new Eh(e??String(a.error||t),Object.keys(a).length?a:{error_code:`chat_api_unavailable`,http_status:n.status})}if(i===null)throw new Eh(`LoopX Chat 服务返回了无法识别的响应(HTTP ${n.status})。请确认 Dashboard 与 Chat 服务来自同一版本。`,{error_code:`invalid_chat_api_response`,http_status:n.status});return i}async function Rh(){return _h.parse(await Lh(`/api/chat/capabilities`))}async function zh(e){return Lh(`/api/chat/projection-messages`,{method:`POST`,body:JSON.stringify({answer:e.answer,context_kind:e.contextKind,goal_id:e.goalId,question:e.question})})}async function Bh(e,t=`codex`,n=`resume_latest`,r=`goal`){return Lh(`/api/chat/sessions`,{method:`POST`,body:JSON.stringify({goal_id:e,agent_id:t,mode:n,context_kind:r})})}async function Vh(e){return Lh(`/api/chat/sessions/${e}`)}async function Hh(e){let t=new URLSearchParams;return e.agentId&&t.set(`agent_id`,e.agentId),e.channelId&&t.set(`channel_id`,e.channelId),e.goalId&&t.set(`goal_id`,e.goalId),Lh(`/api/chat/sessions?${t.toString()}`)}function Uh(e){let t=new Map;for(let n of e)for(let e of n.messages)t.set(e.message_id,e);return[...t.values()].sort((e,t)=>e.created_at.localeCompare(t.created_at)||e.message_id.localeCompare(t.message_id))}async function Wh(e){let t=await Hh(e),n=await Promise.all(t.sessions.map(e=>Vh(e.session_id)));return{messages:Uh(n),sessions:t.sessions,snapshots:n}}async function Gh(e,t,n,r=[]){return Lh(`/api/chat/sessions/${e}/turns`,{method:`POST`,body:JSON.stringify({message:t,client_turn_id:n,...r.length?{attachments:r.map(e=>({data_url:e.dataUrl,id:e.id,mime_type:e.mimeType,name:e.name,size:e.size}))}:{}})})}function Kh(e){let t=e.split(` `).filter(e=>e.startsWith(`data:`)).map(e=>e.slice(5).trimStart()).join(` -`);if(!t)return null;try{let e=JSON.parse(t);return!e.kind||!e.payload||typeof e.payload!=`object`?null:{event_id:String(e.event_id??``),sequence:Number(e.sequence??0),kind:String(e.kind),created_at:String(e.created_at??``),payload:e.payload}}catch{return null}}async function Kh(e,t,n){let r=``,i=0,a=!1;for(;!a&&i<4;){let o=typeof window>`u`?`http://127.0.0.1`:window.location.origin,s=new URL(ph(e),o);r&&s.searchParams.set(`after`,r);try{let e=await fetch(s,{cache:`no-store`,headers:{Accept:`text/event-stream`},signal:n});if(!e.ok||!e.body)throw new Th(`SSE HTTP ${e.status}`,{status:e.status});let o=e.body.getReader(),c=new TextDecoder,l=``;for(;;){let{done:e,value:n}=await o.read();l+=c.decode(n,{stream:!e}).replaceAll(`\r +`);if(!t)return null;try{let e=JSON.parse(t);return!e.kind||!e.payload||typeof e.payload!=`object`?null:{event_id:String(e.event_id??``),sequence:Number(e.sequence??0),kind:String(e.kind),created_at:String(e.created_at??``),payload:e.payload}}catch{return null}}async function qh(e,t,n){let r=``,i=0,a=!1;for(;!a&&i<4;){let o=typeof window>`u`?`http://127.0.0.1`:window.location.origin,s=new URL(mh(e),o);r&&s.searchParams.set(`after`,r);try{let e=await fetch(s,{cache:`no-store`,headers:{Accept:`text/event-stream`},signal:n});if(!e.ok||!e.body)throw new Eh(`SSE HTTP ${e.status}`,{status:e.status});let o=e.body.getReader(),c=new TextDecoder,l=``;for(;;){let{done:e,value:n}=await o.read();l+=c.decode(n,{stream:!e}).replaceAll(`\r `,` `);let i=l.indexOf(` -`);for(;i>=0;){let e=l.slice(0,i);l=l.slice(i+2);let n=Gh(e);n&&(n.event_id&&(r=n.event_id),t(n),a=[`turn.completed`,`turn.interrupted`,`turn.failed`].includes(n.kind)),i=l.indexOf(` +`);for(;i>=0;){let e=l.slice(0,i);l=l.slice(i+2);let n=Kh(e);n&&(n.event_id&&(r=n.event_id),t(n),a=[`turn.completed`,`turn.interrupted`,`turn.failed`].includes(n.kind)),i=l.indexOf(` -`)}if(e||a)break}i=a?i:i+1}catch(e){if(n?.aborted||(i+=1,i>=4))throw e;await new Promise(e=>globalThis.setTimeout(e,250*2**(i-1)))}}if(!a)throw new Th(`Agent 事件流连接已断开。`,{reconnect_attempts:i})}async function qh(e,t){return Ih(`/api/chat/sessions/${e}/turns/${t}/interrupt`,{method:`POST`,body:`{}`})}async function Jh(e,t,n={}){let r=await Wh(e,t,n.clientTurnId??crypto.randomUUID(),n.attachments);return n.onPhase?.(`turn.accepted`,r.turn_id),Yh(e,r.turn_id,r.events_url,n)}async function Yh(e,t,n,r={}){let i=null,a={failure:null,interrupted:null};try{await Kh(n,e=>{r.onPhase?.(e.kind,t),(e.kind===`answer.delta`||e.kind===`assistant.delta`)&&r.onDelta?.(String(e.payload.text??``)),e.kind===`agent.phase`&&r.onActivity?.(String(e.payload.label??`Agent 正在处理`)),e.kind===`turn.completed`&&(i=e.payload.response),e.kind===`turn.failed`&&(a.failure=e.payload),e.kind===`turn.interrupted`&&(a.interrupted=e.payload)},r.signal)}catch(i){throw i instanceof Th&&!r.signal?.aborted?new Th(i.message,{...i.payload,events_url:n,reconnectable:!0,session_id:e,turn_id:t}):i}if(a.failure)throw new Th(String(a.failure.message||`Agent 回合失败。`),a.failure);if(a.interrupted)throw new Th(`Agent 回合已中断。`,{...a.interrupted,error_code:`turn_interrupted`,session_id:e,turn_id:t});return{response:yh.parse(i),sessionId:e,turnId:t}}async function Xh(e,t,n={}){return Yh(e,t,`/api/chat/sessions/${e}/turns/${t}/events`,n)}async function Zh(e){let t=bh.parse(await Ih(`/api/chat/sessions/${e}`,{keepalive:!0,method:`DELETE`}));if(t.session_id!==e)throw new Th(`Agent 会话关闭回执与本次请求不一致。`,{session_id:t.session_id});return t}async function Qh(e){return Ih(`/api/chat/sessions/${e}/resume`,{method:`POST`,body:`{}`})}function $h(e){return{goal_id:e.goalId,enabled:e.enabled,...e.modelConfig===void 0?{}:{model_config:e.modelConfig},...e.enabled?{max_children:e.maxChildren,allowed_domains:e.allowedDomains}:{}}}function eg(e,t){let n=e.after.orchestration,r=[...new Set(t.allowedDomains)],i=e.feature_summary.multi_subagent===`enabled`;if(!(e.goal_id===t.goalId&&i===t.enabled&&(t.modelConfig===void 0||JSON.stringify(n.model_config??null)===JSON.stringify(t.modelConfig))&&(t.enabled?n.max_children===t.maxChildren&&JSON.stringify(n.allowed_domains)===JSON.stringify(r):n.spawn_allowed===!1&&n.max_children===0)))throw new Th(`Goal 子代理配置回执与本次请求不一致,界面已停止更新。`,{after:e.after,goal_id:e.goal_id});return e}async function tg(e){let t=Ch.parse(await Ih(`/api/chat/goal-subagents/dry-run`,{method:`POST`,body:JSON.stringify($h(e))}));if(!t.dry_run||t.execute||t.written)throw new Th(`Goal 子代理预览返回了非预览回执,已停止进入确认状态。`,{result:t});return eg(t,e)}async function ng(e,t){let n=Ch.parse(await Ih(`/api/chat/goal-subagents/apply`,{method:`POST`,body:JSON.stringify({...$h(e),preview_id:t})}));if(n.preview_id!==t||n.dry_run||!n.execute)throw new Th(`Goal 子代理写入回执与本次确认不一致,界面已停止更新。`,{result:n});if(n.changed&&(!n.written||!n.global_sync.executed||!n.global_sync.readback.verified))throw new Th(`Goal 子代理设置未通过共享状态读回验证。`,{result:n});return eg(n,e)}var rg=J({ok:X(!0),targets:q(J({enabled:K(),provider:W(),target_name:W()}))});async function ig(){return rg.parse(await Ih(`/api/chat/goal-channel/targets`)).targets}var ag=J({ok:K(),blocker:W().optional(),public_summary:W().optional(),status:W().optional()});async function og(e){return ag.parse(await Ih(`/api/chat/goal-channel/setup`,{method:`POST`,body:JSON.stringify({execute:e.execute,goal_id:e.goalId,target:e.target})}))}async function sg(e){return ag.parse(await Ih(`/api/chat/goal-channel/configure`,{method:`POST`,body:JSON.stringify({auto_notify_human_gates:e.autoNotify,goal_id:e.goalId})}))}var cg=J({schema_version:X(`periodic_report_schedule_v0`),schedule_id:W(),rrule:W(),timezone:W()});J({schema_version:X(`periodic_report_machine_defaults_v0`),enabled:K(),inheritance:X(`live_machine_default`),profile_preset:W().optional(),route_ref:W().optional(),timezone:W(),schedule:cg.nullable().optional()});var lg=J({schema_version:X(`loopx_machine_configuration_v0`),namespaces:gd(W(),gd(W(),id()))}),ug=J({namespace:W(),title:W(),description:W(),schema_versions:q(W()).min(1),configuration_template:gd(W(),id()),template_status:Y([`ready`,`schema_only`])}),dg=J({schema_version:X(`machine_configuration_catalog_v0`),namespaces:q(ug)}),fg=J({key:W(),label:W(),description:W(),input_kind:Y([`boolean`,`number`,`select`,`string_list`,`text`,`periodic_report_schedule`]),nullable:K().optional(),required:K(),minimum:G().int().optional(),maximum:G().int().optional(),options:q(W()).optional()}),pg=J({schema_version:X(`capability_configuration_editor_v0`),editable:K(),supported_scopes:q(Y([`goal`,`machine`])),writable_scopes:q(Y([`goal`,`machine`])),fields:q(fg),read_only_reason:W().optional()}),mg=J({schema_version:X(`capability_configuration_catalog_v0`),capabilities:q(J({capability_id:W(),display_name:W(),description:W(),available_scopes:q(Y([`goal`,`machine`])),machine_namespace:W().optional(),goal_feature_id:W().optional(),effective_value_policy:X(`goal_override_over_live_machine_default`).optional(),availability:W().optional(),default:gd(W(),id()).optional(),current:gd(W(),id()).optional(),machine_current:gd(W(),id()).optional(),effective_configuration:J({schema_version:X(`capability_configuration_resolution_v0`),capability_id:W(),source:Y([`goal_override`,`machine_default`,`capability_default`,`not_configured`]),configuration:gd(W(),id()).nullable(),inherited:K(),goal_override_present:K(),machine_default_present:K(),effective_revision:W()}).optional(),documentation:gd(W(),id()).optional(),context_contribution:J({supported_phases:q(Y([`before_plan`,`before_delegate`,`after_delegate_result`])),target:X(`coordinator`),activation:X(`with_capability`),receipt_required:X(!0)}).optional(),configuration_editor:pg}))}),hg=J({ok:X(!0),schema_version:X(`goal_configuration_inspection_v0`),status:X(`configured`),goal_id:W(),revision:W(),available_capabilities:q(W()),capability_catalog:mg}),gg=J({ok:X(!0),goal_id:W(),capability_id:W(),changed_fields:q(W()),goal_configuration:gd(W(),id()).nullable(),capability_catalog:mg}),_g=gg.extend({schema_version:X(`goal_configuration_update_plan_v0`),status:X(`preview`),action:Y([`create`,`update`,`delete`,`unchanged`]),current_revision:W(),desired_revision:W(),base_revision:W(),plan_revision:W(),writes_required:G().int().nonnegative()}),vg=ud([gg.extend({schema_version:X(`goal_configuration_transaction_v0`),status:Y([`applied`,`unchanged`]),plan_revision:W(),applied_revision:W(),readback_verified:X(!0)}),J({ok:X(!1),schema_version:X(`goal_configuration_transaction_v0`),status:X(`partial_write`),goal_id:W(),capability_id:W(),plan_revision:W(),applied_revision:W().nullable(),source_written:X(!0),shared_sync_pending:X(!0),readback_verified:K(),changed_fields:q(W()),goal_configuration:gd(W(),id()).nullable(),capability_catalog:mg,error:W(),recommended_action:W()})]),yg=J({ok:X(!0),available_namespaces:q(W()),namespace_catalog:dg.optional().default({schema_version:`machine_configuration_catalog_v0`,namespaces:[]}),capability_catalog:mg,changed_namespaces:q(W()).optional().default([]),machine_configuration:lg.nullable().optional()}),bg=yg.extend({schema_version:X(`machine_configuration_inspection_v0`),status:Y([`configured`,`absent`]),revision:W()}),xg=yg.extend({schema_version:X(`machine_configuration_update_plan_v0`),status:X(`preview`),action:Y([`create`,`update`,`delete`,`unchanged`]),current_revision:W(),desired_revision:W(),plan_revision:W(),writes_required:G().int().nonnegative(),machine_configuration:lg.nullable()}),Sg=yg.extend({schema_version:X(`machine_configuration_transaction_v0`),status:Y([`applied`,`unchanged`]),plan_revision:W(),transaction_id:W().nullable(),readback_verified:X(!0),rollback_available:K(),applied_revision:W().optional(),prior_revision:W().optional()}),Cg=yg.extend({schema_version:X(`machine_configuration_rollback_plan_v0`),status:X(`preview`),action:Y([`delete`,`restore`,`unchanged`,`blocked`]),reason:W(),transaction_id:W(),plan_revision:W(),rollback_allowed:K(),writes_required:G().int().nonnegative()}),wg=yg.extend({schema_version:X(`machine_configuration_rollback_receipt_v0`),status:Y([`rolled_back`,`unchanged`]),transaction_id:W(),plan_revision:W(),rollback_id:W().nullable(),readback_verified:X(!0)});async function Tg(){return bg.parse(await Ih(`/api/chat/machine-configuration`))}async function Eg(e){let t=new URLSearchParams({goal_id:e});return hg.parse(await Ih(`/api/chat/goal-configuration?${t.toString()}`))}async function Dg(e,t,n){return _g.parse(await Ih(`/api/chat/goal-configuration/preview`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n})}))}async function Og(e,t,n,r){return vg.parse(await Ih(`/api/chat/goal-configuration/apply`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n,expected_plan_revision:r})}))}async function kg(e,t){return xg.parse(await Ih(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,namespace_configuration:t})}))}async function Ag(e,t,n){return Sg.parse(await Ih(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:n,namespace:e,namespace_configuration:t})}))}async function jg(e){return xg.parse(await Ih(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,operation:`remove`})}))}async function Mg(e,t){return Sg.parse(await Ih(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:t,namespace:e,operation:`remove`})}))}async function Ng(e){return Cg.parse(await Ih(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!1,transaction_id:e})}))}async function Pg(e,t){return wg.parse(await Ih(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!0,expected_plan_revision:t,transaction_id:e})}))}var Fg=J({ok:X(!0),goals:q(J({goal_id:W(),repository:J({branch:W(),identity:W(),label:W(),read_only:X(!0)})}))});async function Ig(){return Fg.parse(await Ih(`/api/chat/goals/contexts`)).goals}var Lg=J({ok:X(!0),apps:q(J({active:K(),app_ref:W(),brand:W(),health_error_code:W().nullable().default(null),label:W(),ready:K(),reply_ready:K().default(!1)}))});async function Rg(){return Lg.parse(await Ih(`/api/chat/lark/apps`)).apps}var zg=J({ok:X(!0),app_ref:W(),error:W().nullable(),setup_id:W(),status:Y([`starting`,`waiting_for_feishu`,`ready`,`failed`,`cancelled`]),verification_url:W().url().nullable()});async function Bg(e){return zg.parse(await Ih(`/api/chat/lark/app-setups`,{method:`POST`,body:JSON.stringify({app_ref:e.appRef,brand:e.brand})}))}async function Vg(e){return zg.parse(await Ih(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`))}async function Hg(e){return zg.parse(await Ih(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`,{method:`DELETE`}))}var Ug=[`invalid_event`,`binding_unavailable`,`chat_mismatch`,`topic_mismatch`,`route_ambiguous`,`self_message`,`invalid_routing_state`,`not_addressed`],Wg=J({ok:X(!0),chats:q(J({chat_id:W(),chat_name:W()}))});async function Gg(e,t){let n=new URLSearchParams({app_ref:e});return t&&n.set(`query`,t),Wg.parse(await Ih(`/api/chat/lark/chats?${n.toString()}`)).chats}var Kg=J({ok:X(!0),connections:q(J({conversation_kind:Y([`goal`,`manager`]).default(`goal`),agent_id:W().nullable().default(null),connection_id:W(),app_label:W(),app_ref:W(),capture_scope:Y([`addressed_only`,`configured_chat_all`]).default(`addressed_only`),chat_name:W(),enabled:K(),goal_id:W(),goal_title:W(),health_error_code:W().nullable().default(null),history_permission_guidance:J({action:X(`enable_application_scopes_and_publish`),api_document_url:W().url(),capability:X(`group_history_pagination`),identity:X(`bot`),required_scopes:md([X(`im:message.group_msg`),X(`im:message.group_msg.include_bot:read`)]),schema_version:X(`lark_bot_group_history_permission_guidance_v0`)}).nullable().default(null),incoming_mode:Y([`mentions`,`all`]),ingress_mode:Y([`live_steering`,`session_queue`,`async_inbox`,`direct_session`]).default(`async_inbox`),event_count:G().int().nonnegative().default(0),last_event_reason:Y(Ug).nullable().default(null).catch(null),last_event_status:W().nullable().default(null),listener_error_code:W().nullable().default(null),listener_status:Y([`starting`,`listening`,`retrying`,`stopped`]).nullable().default(null),replied_count:G().int().nonnegative().default(0),reply_ready:K().default(!1),reply_mode:X(`topic_reply`),session_bound:K().default(!1),target_ref:W(),topic_name:W(),topic_setup_required:K()}))});async function qg(){return Kg.parse(await Ih(`/api/chat/lark/connections`)).connections}async function Jg(e){return ag.parse(await Ih(`/api/chat/lark/connections`,{method:`POST`,body:JSON.stringify({...e.agentBindings?{agent_bindings:e.agentBindings.map(e=>({agent_id:e.agentId,app_ref:e.appRef}))}:{},...e.agentId?{agent_id:e.agentId}:{},...e.appRef?{app_ref:e.appRef}:{},...e.connectionId?{connection_id:e.connectionId}:{},conversation_kind:e.conversationKind??`goal`,capture_scope:e.captureScope,chat_id:e.chatId,chat_name:e.chatName,execute:e.execute,goal_id:e.goalId,incoming_mode:e.incomingMode,ingress_mode:e.ingressMode,reply_mode:e.replyMode})}))}async function Yg(e,t){let n=new URLSearchParams({goal_id:e,connection_id:t});return ag.parse(await Ih(`/api/chat/lark/connections?${n.toString()}`,{method:`DELETE`}))}function Xg(e){return{loadedUrl:null,projectionRevision:0,requestedUrl:e,selectionRevision:0,requestGeneration:0}}function Zg(e,t){return e.selectionRevision+=1,e.requestedUrl=t,e.selectionRevision}function Qg(e,t,n){if(n.background)return e.requestedUrl!==null||e.loadedUrl!==t?null:(e.requestGeneration+=1,{background:!0,projectionRevision:e.projectionRevision,selectionRevision:e.selectionRevision,url:t,generation:e.requestGeneration});let r=n.selectionRevision??e.selectionRevision+1;return n.selectionRevision!==void 0&&e.selectionRevision!==r?null:(e.selectionRevision=r,e.projectionRevision+=1,e.requestedUrl=t,e.requestGeneration+=1,{background:!1,projectionRevision:e.projectionRevision,selectionRevision:r,url:t,generation:e.requestGeneration})}function $g(e,t){return t.generation===e.requestGeneration&&e.projectionRevision===t.projectionRevision&&e.selectionRevision===t.selectionRevision}function e_(e,t){return $g(e,t)&&(!t.background||e.requestedUrl===null&&e.loadedUrl===t.url)}function t_(e,t,n){return t.get(e)===n}function n_(e,t,n,r){return e.filter(e=>t_(r(e),n,t))}function r_(e,t,n){let r=new Set,i=[];for(let a of[...e,...t]){let e=n(a);e==null||r.has(e)||(r.add(e),i.push(a))}return i}var i_=[`runs_24h`,`runs_7d`,`quota_spend_slots_24h`,`quota_spend_slots_7d`,`automation_run_count_24h`,`automation_run_count_7d`,`progress_signal_run_count_24h`,`progress_signal_run_count_7d`],a_=[`input_tokens_24h`,`input_tokens_7d`,`output_tokens_24h`,`output_tokens_7d`,`cache_tokens_24h`,`cache_tokens_7d`,`cost_usd_24h`,`cost_usd_7d`,`duration_ms_24h`,`duration_ms_7d`],o_=[`accounting`,`decision`,`evidence`,`state`,`work`],s_={accounting:0,decision:0,evidence:0,state:0,work:0},c_={runs_24h:0,runs_7d:0,quota_spend_slots_24h:0,quota_spend_slots_7d:0,automation_run_count_24h:0,automation_run_count_7d:0,progress_signal_run_count_24h:0,progress_signal_run_count_7d:0};function l_(e,t){let n={...e};for(let r of i_)n[r]=(Number(e[r])||0)+(Number(t[r])||0);for(let r of a_)(e[r]!==void 0||t[r]!==void 0)&&(n[r]=(e[r]??0)+(t[r]??0));return n}function u_(e,t){return!e.length||t<=0?e:e.map(e=>({...e,project_share_24h:Math.round((Number(e.runs_24h)||0)/t*1e3)/1e3}))}function d_(e,t){let n={...e};for(let r of o_)n[r]=(e[r]??0)+(t[r]??0);return n}function f_(e){let t={events_24h:0,events_7d:0,by_class_24h:{...s_},by_class_7d:{...s_}};for(let n of e)t.events_24h+=n.events_24h,t.events_7d+=n.events_7d,t.by_class_24h=d_(t.by_class_24h,n.by_class_24h),t.by_class_7d=d_(t.by_class_7d,n.by_class_7d);return t}function p_(e,t,n){if(!e&&!t)return null;let r=n_(e?.goals??[],`active`,n,e=>e.goal_id),i=n_(t?.goals??[],`stopped`,n,e=>e.goal_id),a=r_(r,i,e=>e.goal_id),o=f_(r),s=f_(i),c={events_24h:o.events_24h+s.events_24h,events_7d:o.events_7d+s.events_7d,by_class_24h:d_(o.by_class_24h,s.by_class_24h),by_class_7d:d_(o.by_class_7d,s.by_class_7d)};return{...e??t,goals:a,sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),totals:c}}function m_(e,t,n){if(!e&&!t)return null;let r=r_([...n_(e?.items??[],`active`,n,e=>e.goal_id),...n_(t?.items??[],`stopped`,n,e=>e.goal_id)],[],e=>`${e.goal_id}:${e.decision_kind??``}:${e.decision_at??``}`),i={decision_count:(e?.summary.decision_count??0)+(t?.summary.decision_count??0),stale_count:r.filter(e=>e.stale_by_age).length,rebase_required_count:(e?.summary.rebase_required_count??0)+(t?.summary.rebase_required_count??0),fresh_count:(e?.summary.fresh_count??0)+(t?.summary.fresh_count??0)};return{...e??t,items:r,sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),summary:i}}function h_(e,t){return r_([...e,...t].sort((e,t)=>t.generated_at.localeCompare(e.generated_at)),[],e=>`${e.goal_id}:${e.generated_at}:${e.classification??``}`)}function g_(e,t,n){let r=r_(n_(e.items,`active`,n,e=>e.goal_id),n_(t.items,`stopped`,n,e=>e.goal_id),e=>e.goal_id);return{...e,item_count:r.length,items:r,needs_controller:r.filter(e=>e.waiting_on===`controller`).length,needs_codex:r.filter(e=>e.waiting_on===`codex`).length,needs_user_or_controller:r.filter(e=>[`user_or_controller`,`controller`].includes(e.waiting_on)).length,watching_external_evidence:r.filter(e=>e.waiting_on===`external_evidence`).length}}function __(e){let t=e.todo_id?.trim()||``;return t?`${e.goal_id}:${t}`:`${e.goal_id}:synthetic:${e.role??``}:${e.index??``}:${e.text??``}`}function v_(e){let t={...c_};for(let n of e){for(let e of i_)t[e]+=Number(n[e])||0;for(let e of a_)n[e]!==void 0&&(t[e]=(t[e]??0)+n[e])}return t}function y_(e,t,n){if(!e&&!t)return null;let r=n_(e?.items??[],`active`,n,e=>e.goal_id),i=n_(t?.items??[],`stopped`,n,e=>e.goal_id),a=r_(r,i,__);return{...e??t,current_projected_count:r.length+i.length,items:a,rollout_event_count:a.reduce((e,t)=>e+(t.event_count??0),0),total_count:a.length}}function b_(e,t,n){if(!e&&!t)return null;let r=n_(e?.goals??[],`active`,n,e=>e.goal_id),i=n_(t?.goals??[],`stopped`,n,e=>e.goal_id),a=r_(r,i,e=>e.goal_id),o=l_(v_(r),v_(i));return{...e??t,goals:u_(a,Number(o.runs_24h)||0),sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),totals:o}}function x_(e,t,n){if(!e&&!t)return null;let r=(e?.agents??[]).filter(e=>e.goal_ids.some(e=>t_(e,n,`active`))||(e.current_todo?.goal_id?t_(e.current_todo.goal_id,n,`active`):!1)),i=(t?.agents??[]).filter(e=>e.goal_ids.some(e=>t_(e,n,`stopped`))||(e.current_todo?.goal_id?t_(e.current_todo.goal_id,n,`stopped`):!1)),a=r_(r,i,e=>e.agent_id).map(e=>{let t=i.find(t=>t.agent_id===e.agent_id);return t?{...e,goal_ids:Array.from(new Set([...e.goal_ids??[],...t.goal_ids]))}:e});return{...e??t,agents:a,source_summary:(e??t)?.source_summary?{...(e??t).source_summary,projected_agent_count:a.length,registered_agent_count:new Set(a.map(e=>e.agent_id)).size}:(e??t)?.source_summary}}function S_(e,t,n){if(!e&&!t)return null;let r=r_(n_(e?.goals??[],`active`,n,e=>e.goal_id),n_(t?.goals??[],`stopped`,n,e=>e.goal_id),e=>e.goal_id);return{...e??t,goals:r}}function C_(e,t){let n=t.goal_projection?.scope;if(n!==`active`&&n!==`stopped`)return t;let r=n,i=t.run_history.goals,a=e.run_history.goals,o=r_(r===`active`?i:a.filter(e=>e.activation_state!==`stopped`),r===`stopped`?i:a.filter(e=>e.activation_state===`stopped`),e=>e.id),s=new Map(o.map(e=>[e.id,e.activation_state])),c=r===`active`?t:e,l=r===`stopped`?t:e,u=e.goal_projection?.registry_revision??null,d=t.goal_projection?.registry_revision??null,f=u===null||d===null||u===d;return{...e,agent_management_projection:x_(c.agent_management_projection,l.agent_management_projection,s),attention_queue:g_(c.attention_queue,l.attention_queue,s),decision_freshness_summary:m_(c.decision_freshness_summary,l.decision_freshness_summary,s),event_ledger_summary:p_(c.event_ledger_summary,l.event_ledger_summary,s),goal_channel_notification_projection:S_(c.goal_channel_notification_projection,l.goal_channel_notification_projection,s),goal_projection:{schema_version:`loopx_goal_projection_scope_v0`,...t.goal_projection,complete:f,projected_goal_count:o.length,registry_goal_count:t.goal_projection?.registry_goal_count??0,scope:`all`},run_history:{...e.run_history,goal_count:o.length,goals:o,recent_runs:h_(c.run_history.recent_runs,l.run_history.recent_runs),run_count:c.run_history.run_count+l.run_history.run_count},todo_index:y_(c.todo_index,l.todo_index,s),usage_summary:b_(c.usage_summary,l.usage_summary,s)}}function w_(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`){if(Array.isArray(e)){var i=e.length;for(t=0;ttypeof e==`boolean`?`${e}`:e===0?`0`:e,D_=T_,O_=(e,t)=>n=>{if(t?.variants==null)return D_(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=E_(t)||E_(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return D_(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)},k_=(e,t)=>{let n=Array(e.length+t.length);for(let t=0;t({classGroupId:e,validator:t}),j_=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),M_=`-`,N_=[],P_=`arbitrary..`,F_=e=>{let t=R_(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:e=>{if(e.startsWith(`[`)&&e.endsWith(`]`))return L_(e);let n=e.split(M_);return I_(n,+(n[0]===``&&n.length>1),t)},getConflictingClassGroupIds:(e,t)=>{if(t){let t=r[e],i=n[e];return t?i?k_(i,t):t:i||N_}return n[e]||N_}}},I_=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;let r=e[t],i=n.nextPart.get(r);if(i){let n=I_(e,t+1,i);if(n)return n}let a=n.validators;if(a===null)return;let o=t===0?e.join(M_):e.slice(t).join(M_),s=a.length;for(let e=0;ee.slice(1,-1).indexOf(`:`)===-1?void 0:(()=>{let t=e.slice(1,-1),n=t.indexOf(`:`),r=t.slice(0,n);return r?P_+r:void 0})(),R_=e=>{let{theme:t,classGroups:n}=e;return z_(n,t)},z_=(e,t)=>{let n=j_();for(let r in e){let i=e[r];B_(i,n,r,t)}return n},B_=(e,t,n,r)=>{let i=e.length;for(let a=0;a{if(typeof e==`string`){H_(e,t,n);return}if(typeof e==`function`){U_(e,t,n,r);return}W_(e,t,n,r)},H_=(e,t,n)=>{let r=e===``?t:G_(t,e);r.classGroupId=n},U_=(e,t,n,r)=>{if(K_(e)){B_(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(A_(n,e))},W_=(e,t,n,r)=>{let i=Object.entries(e),a=i.length;for(let e=0;e{let n=e,r=t.split(M_),i=r.length;for(let e=0;e`isThemeGetter`in e&&e.isThemeGetter===!0,q_=e=>{if(e<1)return{get:()=>void 0,set:()=>{}};let t=0,n=Object.create(null),r=Object.create(null),i=(i,a)=>{n[i]=a,t++,t>e&&(t=0,r=n,n=Object.create(null))};return{get(e){let t=n[e];if(t!==void 0)return t;if((t=r[e])!==void 0)return i(e,t),t},set(e,t){e in n?n[e]=t:i(e,t)}}},J_=`!`,Y_=`:`,X_=[],Z_=(e,t,n,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:i}),Q_=e=>{let{prefix:t,experimentalParseClassName:n}=e,r=e=>{let t=[],n=0,r=0,i=0,a,o=e.length;for(let s=0;si?a-i:void 0;return Z_(t,l,c,u)};if(t){let e=t+Y_,n=r;r=t=>t.startsWith(e)?n(t.slice(e.length)):Z_(X_,!1,t,void 0,!0)}if(n){let e=r;r=t=>n({className:t,parseClassName:e})}return r},$_=e=>{let t=new Map;return e.orderSensitiveModifiers.forEach((e,n)=>{t.set(e,1e6+n)}),e=>{let n=[],r=[];for(let i=0;i0&&(r.sort(),n.push(...r),r=[]),n.push(a)):r.push(a)}return r.length>0&&(r.sort(),n.push(...r)),n}},ev=e=>({cache:q_(e.cacheSize),parseClassName:Q_(e),sortModifiers:$_(e),postfixLookupClassGroupIds:tv(e),...F_(e)}),tv=e=>{let t=Object.create(null),n=e.postfixLookupClassGroups;if(n)for(let e=0;e{let{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i,sortModifiers:a,postfixLookupClassGroupIds:o}=t,s=[],c=e.trim().split(nv),l=``;for(let e=c.length-1;e>=0;--e){let t=c[e],{isExternal:u,modifiers:d,hasImportantModifier:f,baseClassName:p,maybePostfixModifierPosition:m}=n(t);if(u){l=t+(l.length>0?` `+l:l);continue}let h=!!m,g;if(h){g=r(p.substring(0,m));let e=g&&o[g]?r(p):void 0;e&&e!==g&&(g=e,h=!1)}else g=r(p);if(!g){if(!h){l=t+(l.length>0?` `+l:l);continue}if(g=r(p),!g){l=t+(l.length>0?` `+l:l);continue}h=!1}let _=d.length===0?``:d.length===1?d[0]:a(d).join(`:`),v=f?_+J_:_,y=v+g;if(s.indexOf(y)>-1)continue;s.push(y);let b=i(g,h);for(let e=0;e0?` `+l:l)}return l},iv=(...e)=>{let t=0,n,r,i=``;for(;t{if(typeof e==`string`)return e;let t,n=``;for(let r=0;r{let n,r,i,a,o=o=>(n=ev(t.reduce((e,t)=>t(e),e())),r=n.cache.get,i=n.cache.set,a=s,s(o)),s=e=>{let t=r(e);if(t)return t;let a=rv(e,n);return i(e,a),a};return a=o,(...e)=>a(iv(...e))},sv=[],cv=e=>{let t=t=>t[e]||sv;return t.isThemeGetter=!0,t},lv=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,uv=/^\((?:(\w[\w-]*):)?(.+)\)$/i,dv=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,fv=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,pv=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,mv=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,hv=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,gv=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,_v=e=>dv.test(e),vv=e=>!!e&&!Number.isNaN(Number(e)),yv=e=>!!e&&Number.isInteger(Number(e)),bv=e=>e.endsWith(`%`)&&vv(e.slice(0,-1)),xv=e=>fv.test(e),Sv=()=>!0,Cv=e=>pv.test(e)&&!mv.test(e),wv=()=>!1,Tv=e=>hv.test(e),Ev=e=>gv.test(e),Dv=e=>!Q(e)&&!$(e),Ov=e=>e.startsWith(`@container`)&&(e[10]===`/`&&e[11]!==void 0||e[11]===`s`&&e[16]!==void 0&&e.startsWith(`-size/`,10)||e[11]===`n`&&e[18]!==void 0&&e.startsWith(`-normal/`,10)),kv=e=>Wv(e,Jv,wv),Q=e=>lv.test(e),Av=e=>Wv(e,Yv,Cv),jv=e=>Wv(e,Xv,vv),Mv=e=>Wv(e,Qv,Sv),Nv=e=>Wv(e,Zv,wv),Pv=e=>Wv(e,Kv,wv),Fv=e=>Wv(e,qv,Ev),Iv=e=>Wv(e,$v,Tv),$=e=>uv.test(e),Lv=e=>Gv(e,Yv),Rv=e=>Gv(e,Zv),zv=e=>Gv(e,Kv),Bv=e=>Gv(e,Jv),Vv=e=>Gv(e,qv),Hv=e=>Gv(e,$v,!0),Uv=e=>Gv(e,Qv,!0),Wv=(e,t,n)=>{let r=lv.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},Gv=(e,t,n=!1)=>{let r=uv.exec(e);return r?r[1]?t(r[1]):n:!1},Kv=e=>e===`position`||e===`percentage`,qv=e=>e===`image`||e===`url`,Jv=e=>e===`length`||e===`size`||e===`bg-size`,Yv=e=>e===`length`,Xv=e=>e===`number`,Zv=e=>e===`family-name`,Qv=e=>e===`number`||e===`weight`,$v=e=>e===`shadow`,ey=ov(()=>{let e=cv(`color`),t=cv(`font`),n=cv(`text`),r=cv(`font-weight`),i=cv(`tracking`),a=cv(`leading`),o=cv(`breakpoint`),s=cv(`container`),c=cv(`spacing`),l=cv(`radius`),u=cv(`shadow`),d=cv(`inset-shadow`),f=cv(`text-shadow`),p=cv(`drop-shadow`),m=cv(`blur`),h=cv(`perspective`),g=cv(`aspect`),_=cv(`ease`),v=cv(`animate`),y=()=>[`auto`,`avoid`,`all`,`avoid-page`,`page`,`left`,`right`,`column`],b=()=>[`center`,`top`,`bottom`,`left`,`right`,`top-left`,`left-top`,`top-right`,`right-top`,`bottom-right`,`right-bottom`,`bottom-left`,`left-bottom`],x=()=>[...b(),$,Q],S=()=>[`auto`,`hidden`,`clip`,`visible`,`scroll`],C=()=>[`auto`,`contain`,`none`],w=()=>[$,Q,c],T=()=>[_v,`full`,`auto`,...w()],E=()=>[yv,`none`,`subgrid`,$,Q],D=()=>[`auto`,{span:[`full`,yv,$,Q]},yv,$,Q],O=()=>[yv,`auto`,$,Q],ee=()=>[`auto`,`min`,`max`,`fr`,$,Q],te=()=>[`start`,`end`,`center`,`between`,`around`,`evenly`,`stretch`,`baseline`,`center-safe`,`end-safe`],ne=()=>[`start`,`end`,`center`,`stretch`,`center-safe`,`end-safe`],k=()=>[`auto`,...w()],A=()=>[_v,`auto`,`full`,`dvw`,`dvh`,`lvw`,`lvh`,`svw`,`svh`,`min`,`max`,`fit`,...w()],j=()=>[_v,`screen`,`full`,`dvw`,`lvw`,`svw`,`min`,`max`,`fit`,...w()],M=()=>[_v,`screen`,`full`,`lh`,`dvh`,`lvh`,`svh`,`min`,`max`,`fit`,...w()],N=()=>[e,$,Q],P=()=>[...b(),zv,Pv,{position:[$,Q]}],F=()=>[`no-repeat`,{repeat:[``,`x`,`y`,`space`,`round`]}],re=()=>[`auto`,`cover`,`contain`,Bv,kv,{size:[$,Q]}],ie=()=>[bv,Lv,Av],I=()=>[``,`none`,`full`,l,$,Q],ae=()=>[``,vv,Lv,Av],L=()=>[`solid`,`dashed`,`dotted`,`double`],oe=()=>[`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`],se=()=>[vv,bv,zv,Pv],ce=()=>[``,`none`,m,$,Q],le=()=>[`none`,vv,$,Q],ue=()=>[`none`,vv,$,Q],de=()=>[vv,$,Q],fe=()=>[_v,`full`,...w()];return{cacheSize:500,theme:{animate:[`spin`,`ping`,`pulse`,`bounce`],aspect:[`video`],blur:[xv],breakpoint:[xv],color:[Sv],container:[xv],"drop-shadow":[xv],ease:[`in`,`out`,`in-out`],font:[Dv],"font-weight":[`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`],"inset-shadow":[xv],leading:[`none`,`tight`,`snug`,`normal`,`relaxed`,`loose`],perspective:[`dramatic`,`near`,`normal`,`midrange`,`distant`,`none`],radius:[xv],shadow:[xv],spacing:[`px`,vv],text:[xv],"text-shadow":[xv],tracking:[`tighter`,`tight`,`normal`,`wide`,`wider`,`widest`]},classGroups:{aspect:[{aspect:[`auto`,`square`,_v,Q,$,g]}],container:[`container`],"container-type":[{"@container":[``,`normal`,`size`,$,Q]}],"container-named":[Ov],columns:[{columns:[vv,Q,$,s]}],"break-after":[{"break-after":y()}],"break-before":[{"break-before":y()}],"break-inside":[{"break-inside":[`auto`,`avoid`,`avoid-page`,`avoid-column`]}],"box-decoration":[{"box-decoration":[`slice`,`clone`]}],box:[{box:[`border`,`content`]}],display:[`block`,`inline-block`,`inline`,`flex`,`inline-flex`,`table`,`inline-table`,`table-caption`,`table-cell`,`table-column`,`table-column-group`,`table-footer-group`,`table-header-group`,`table-row-group`,`table-row`,`flow-root`,`grid`,`inline-grid`,`contents`,`list-item`,`hidden`],sr:[`sr-only`,`not-sr-only`],float:[{float:[`right`,`left`,`none`,`start`,`end`]}],clear:[{clear:[`left`,`right`,`both`,`none`,`start`,`end`]}],isolation:[`isolate`,`isolation-auto`],"object-fit":[{object:[`contain`,`cover`,`fill`,`none`,`scale-down`]}],"object-position":[{object:x()}],overflow:[{overflow:S()}],"overflow-x":[{"overflow-x":S()}],"overflow-y":[{"overflow-y":S()}],overscroll:[{overscroll:C()}],"overscroll-x":[{"overscroll-x":C()}],"overscroll-y":[{"overscroll-y":C()}],position:[`static`,`fixed`,`absolute`,`relative`,`sticky`],inset:[{inset:T()}],"inset-x":[{"inset-x":T()}],"inset-y":[{"inset-y":T()}],start:[{"inset-s":T(),start:T()}],end:[{"inset-e":T(),end:T()}],"inset-bs":[{"inset-bs":T()}],"inset-be":[{"inset-be":T()}],top:[{top:T()}],right:[{right:T()}],bottom:[{bottom:T()}],left:[{left:T()}],visibility:[`visible`,`invisible`,`collapse`],z:[{z:[yv,`auto`,$,Q]}],basis:[{basis:[_v,`full`,`auto`,s,...w()]}],"flex-direction":[{flex:[`row`,`row-reverse`,`col`,`col-reverse`]}],"flex-wrap":[{flex:[`nowrap`,`wrap`,`wrap-reverse`]}],flex:[{flex:[vv,_v,`auto`,`initial`,`none`,Q]}],grow:[{grow:[``,vv,$,Q]}],shrink:[{shrink:[``,vv,$,Q]}],order:[{order:[yv,`first`,`last`,`none`,$,Q]}],"grid-cols":[{"grid-cols":E()}],"col-start-end":[{col:D()}],"col-start":[{"col-start":O()}],"col-end":[{"col-end":O()}],"grid-rows":[{"grid-rows":E()}],"row-start-end":[{row:D()}],"row-start":[{"row-start":O()}],"row-end":[{"row-end":O()}],"grid-flow":[{"grid-flow":[`row`,`col`,`dense`,`row-dense`,`col-dense`]}],"auto-cols":[{"auto-cols":ee()}],"auto-rows":[{"auto-rows":ee()}],gap:[{gap:w()}],"gap-x":[{"gap-x":w()}],"gap-y":[{"gap-y":w()}],"justify-content":[{justify:[...te(),`normal`]}],"justify-items":[{"justify-items":[...ne(),`normal`]}],"justify-self":[{"justify-self":[`auto`,...ne()]}],"align-content":[{content:[`normal`,...te()]}],"align-items":[{items:[...ne(),{baseline:[``,`last`]}]}],"align-self":[{self:[`auto`,...ne(),{baseline:[``,`last`]}]}],"place-content":[{"place-content":te()}],"place-items":[{"place-items":[...ne(),`baseline`]}],"place-self":[{"place-self":[`auto`,...ne()]}],p:[{p:w()}],px:[{px:w()}],py:[{py:w()}],ps:[{ps:w()}],pe:[{pe:w()}],pbs:[{pbs:w()}],pbe:[{pbe:w()}],pt:[{pt:w()}],pr:[{pr:w()}],pb:[{pb:w()}],pl:[{pl:w()}],m:[{m:k()}],mx:[{mx:k()}],my:[{my:k()}],ms:[{ms:k()}],me:[{me:k()}],mbs:[{mbs:k()}],mbe:[{mbe:k()}],mt:[{mt:k()}],mr:[{mr:k()}],mb:[{mb:k()}],ml:[{ml:k()}],"space-x":[{"space-x":w()}],"space-x-reverse":[`space-x-reverse`],"space-y":[{"space-y":w()}],"space-y-reverse":[`space-y-reverse`],size:[{size:A()}],"inline-size":[{inline:[`auto`,...j()]}],"min-inline-size":[{"min-inline":[`auto`,...j()]}],"max-inline-size":[{"max-inline":[`none`,...j()]}],"block-size":[{block:[`auto`,...M()]}],"min-block-size":[{"min-block":[`auto`,...M()]}],"max-block-size":[{"max-block":[`none`,...M()]}],w:[{w:[s,`screen`,...A()]}],"min-w":[{"min-w":[s,`screen`,`none`,...A()]}],"max-w":[{"max-w":[s,`screen`,`none`,`prose`,{screen:[o]},...A()]}],h:[{h:[`screen`,`lh`,...A()]}],"min-h":[{"min-h":[`screen`,`lh`,`none`,...A()]}],"max-h":[{"max-h":[`screen`,`lh`,...A()]}],"font-size":[{text:[`base`,n,Lv,Av]}],"font-smoothing":[`antialiased`,`subpixel-antialiased`],"font-style":[`italic`,`not-italic`],"font-weight":[{font:[r,Uv,Mv]}],"font-stretch":[{"font-stretch":[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`,bv,Q]}],"font-family":[{font:[Rv,Nv,t]}],"font-features":[{"font-features":[Q]}],"fvn-normal":[`normal-nums`],"fvn-ordinal":[`ordinal`],"fvn-slashed-zero":[`slashed-zero`],"fvn-figure":[`lining-nums`,`oldstyle-nums`],"fvn-spacing":[`proportional-nums`,`tabular-nums`],"fvn-fraction":[`diagonal-fractions`,`stacked-fractions`],tracking:[{tracking:[i,$,Q]}],"line-clamp":[{"line-clamp":[vv,`none`,$,jv]}],leading:[{leading:[a,...w()]}],"list-image":[{"list-image":[`none`,$,Q]}],"list-style-position":[{list:[`inside`,`outside`]}],"list-style-type":[{list:[`disc`,`decimal`,`none`,$,Q]}],"text-alignment":[{text:[`left`,`center`,`right`,`justify`,`start`,`end`]}],"placeholder-color":[{placeholder:N()}],"text-color":[{text:N()}],"text-decoration":[`underline`,`overline`,`line-through`,`no-underline`],"text-decoration-style":[{decoration:[...L(),`wavy`]}],"text-decoration-thickness":[{decoration:[vv,`from-font`,`auto`,$,Av]}],"text-decoration-color":[{decoration:N()}],"underline-offset":[{"underline-offset":[vv,`auto`,$,Q]}],"text-transform":[`uppercase`,`lowercase`,`capitalize`,`normal-case`],"text-overflow":[`truncate`,`text-ellipsis`,`text-clip`],"text-wrap":[{text:[`wrap`,`nowrap`,`balance`,`pretty`]}],indent:[{indent:w()}],"tab-size":[{tab:[yv,$,Q]}],"vertical-align":[{align:[`baseline`,`top`,`middle`,`bottom`,`text-top`,`text-bottom`,`sub`,`super`,$,Q]}],whitespace:[{whitespace:[`normal`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]}],break:[{break:[`normal`,`words`,`all`,`keep`]}],wrap:[{wrap:[`break-word`,`anywhere`,`normal`]}],hyphens:[{hyphens:[`none`,`manual`,`auto`]}],content:[{content:[`none`,$,Q]}],"bg-attachment":[{bg:[`fixed`,`local`,`scroll`]}],"bg-clip":[{"bg-clip":[`border`,`padding`,`content`,`text`]}],"bg-origin":[{"bg-origin":[`border`,`padding`,`content`]}],"bg-position":[{bg:P()}],"bg-repeat":[{bg:F()}],"bg-size":[{bg:re()}],"bg-image":[{bg:[`none`,{linear:[{to:[`t`,`tr`,`r`,`br`,`b`,`bl`,`l`,`tl`]},yv,$,Q],radial:[``,$,Q],conic:[yv,$,Q]},Vv,Fv]}],"bg-color":[{bg:N()}],"gradient-from-pos":[{from:ie()}],"gradient-via-pos":[{via:ie()}],"gradient-to-pos":[{to:ie()}],"gradient-from":[{from:N()}],"gradient-via":[{via:N()}],"gradient-to":[{to:N()}],rounded:[{rounded:I()}],"rounded-s":[{"rounded-s":I()}],"rounded-e":[{"rounded-e":I()}],"rounded-t":[{"rounded-t":I()}],"rounded-r":[{"rounded-r":I()}],"rounded-b":[{"rounded-b":I()}],"rounded-l":[{"rounded-l":I()}],"rounded-ss":[{"rounded-ss":I()}],"rounded-se":[{"rounded-se":I()}],"rounded-ee":[{"rounded-ee":I()}],"rounded-es":[{"rounded-es":I()}],"rounded-tl":[{"rounded-tl":I()}],"rounded-tr":[{"rounded-tr":I()}],"rounded-br":[{"rounded-br":I()}],"rounded-bl":[{"rounded-bl":I()}],"border-w":[{border:ae()}],"border-w-x":[{"border-x":ae()}],"border-w-y":[{"border-y":ae()}],"border-w-s":[{"border-s":ae()}],"border-w-e":[{"border-e":ae()}],"border-w-bs":[{"border-bs":ae()}],"border-w-be":[{"border-be":ae()}],"border-w-t":[{"border-t":ae()}],"border-w-r":[{"border-r":ae()}],"border-w-b":[{"border-b":ae()}],"border-w-l":[{"border-l":ae()}],"divide-x":[{"divide-x":ae()}],"divide-x-reverse":[`divide-x-reverse`],"divide-y":[{"divide-y":ae()}],"divide-y-reverse":[`divide-y-reverse`],"border-style":[{border:[...L(),`hidden`,`none`]}],"divide-style":[{divide:[...L(),`hidden`,`none`]}],"border-color":[{border:N()}],"border-color-x":[{"border-x":N()}],"border-color-y":[{"border-y":N()}],"border-color-s":[{"border-s":N()}],"border-color-e":[{"border-e":N()}],"border-color-bs":[{"border-bs":N()}],"border-color-be":[{"border-be":N()}],"border-color-t":[{"border-t":N()}],"border-color-r":[{"border-r":N()}],"border-color-b":[{"border-b":N()}],"border-color-l":[{"border-l":N()}],"divide-color":[{divide:N()}],"outline-style":[{outline:[...L(),`none`,`hidden`]}],"outline-offset":[{"outline-offset":[vv,$,Q]}],"outline-w":[{outline:[``,vv,Lv,Av]}],"outline-color":[{outline:N()}],shadow:[{shadow:[``,`none`,u,Hv,Iv]}],"shadow-color":[{shadow:N()}],"inset-shadow":[{"inset-shadow":[`none`,d,Hv,Iv]}],"inset-shadow-color":[{"inset-shadow":N()}],"ring-w":[{ring:ae()}],"ring-w-inset":[`ring-inset`],"ring-color":[{ring:N()}],"ring-offset-w":[{"ring-offset":[vv,Av]}],"ring-offset-color":[{"ring-offset":N()}],"inset-ring-w":[{"inset-ring":ae()}],"inset-ring-color":[{"inset-ring":N()}],"text-shadow":[{"text-shadow":[`none`,f,Hv,Iv]}],"text-shadow-color":[{"text-shadow":N()}],opacity:[{opacity:[vv,$,Q]}],"mix-blend":[{"mix-blend":[...oe(),`plus-darker`,`plus-lighter`]}],"bg-blend":[{"bg-blend":oe()}],"mask-clip":[{"mask-clip":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]},`mask-no-clip`],"mask-composite":[{mask:[`add`,`subtract`,`intersect`,`exclude`]}],"mask-image-linear-pos":[{"mask-linear":[vv]}],"mask-image-linear-from-pos":[{"mask-linear-from":se()}],"mask-image-linear-to-pos":[{"mask-linear-to":se()}],"mask-image-linear-from-color":[{"mask-linear-from":N()}],"mask-image-linear-to-color":[{"mask-linear-to":N()}],"mask-image-t-from-pos":[{"mask-t-from":se()}],"mask-image-t-to-pos":[{"mask-t-to":se()}],"mask-image-t-from-color":[{"mask-t-from":N()}],"mask-image-t-to-color":[{"mask-t-to":N()}],"mask-image-r-from-pos":[{"mask-r-from":se()}],"mask-image-r-to-pos":[{"mask-r-to":se()}],"mask-image-r-from-color":[{"mask-r-from":N()}],"mask-image-r-to-color":[{"mask-r-to":N()}],"mask-image-b-from-pos":[{"mask-b-from":se()}],"mask-image-b-to-pos":[{"mask-b-to":se()}],"mask-image-b-from-color":[{"mask-b-from":N()}],"mask-image-b-to-color":[{"mask-b-to":N()}],"mask-image-l-from-pos":[{"mask-l-from":se()}],"mask-image-l-to-pos":[{"mask-l-to":se()}],"mask-image-l-from-color":[{"mask-l-from":N()}],"mask-image-l-to-color":[{"mask-l-to":N()}],"mask-image-x-from-pos":[{"mask-x-from":se()}],"mask-image-x-to-pos":[{"mask-x-to":se()}],"mask-image-x-from-color":[{"mask-x-from":N()}],"mask-image-x-to-color":[{"mask-x-to":N()}],"mask-image-y-from-pos":[{"mask-y-from":se()}],"mask-image-y-to-pos":[{"mask-y-to":se()}],"mask-image-y-from-color":[{"mask-y-from":N()}],"mask-image-y-to-color":[{"mask-y-to":N()}],"mask-image-radial":[{"mask-radial":[$,Q]}],"mask-image-radial-from-pos":[{"mask-radial-from":se()}],"mask-image-radial-to-pos":[{"mask-radial-to":se()}],"mask-image-radial-from-color":[{"mask-radial-from":N()}],"mask-image-radial-to-color":[{"mask-radial-to":N()}],"mask-image-radial-shape":[{"mask-radial":[`circle`,`ellipse`]}],"mask-image-radial-size":[{"mask-radial":[{closest:[`side`,`corner`],farthest:[`side`,`corner`]}]}],"mask-image-radial-pos":[{"mask-radial-at":b()}],"mask-image-conic-pos":[{"mask-conic":[vv]}],"mask-image-conic-from-pos":[{"mask-conic-from":se()}],"mask-image-conic-to-pos":[{"mask-conic-to":se()}],"mask-image-conic-from-color":[{"mask-conic-from":N()}],"mask-image-conic-to-color":[{"mask-conic-to":N()}],"mask-mode":[{mask:[`alpha`,`luminance`,`match`]}],"mask-origin":[{"mask-origin":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]}],"mask-position":[{mask:P()}],"mask-repeat":[{mask:F()}],"mask-size":[{mask:re()}],"mask-type":[{"mask-type":[`alpha`,`luminance`]}],"mask-image":[{mask:[`none`,$,Q]}],filter:[{filter:[``,`none`,$,Q]}],blur:[{blur:ce()}],brightness:[{brightness:[vv,$,Q]}],contrast:[{contrast:[vv,$,Q]}],"drop-shadow":[{"drop-shadow":[``,`none`,p,Hv,Iv]}],"drop-shadow-color":[{"drop-shadow":N()}],grayscale:[{grayscale:[``,vv,$,Q]}],"hue-rotate":[{"hue-rotate":[vv,$,Q]}],invert:[{invert:[``,vv,$,Q]}],saturate:[{saturate:[vv,$,Q]}],sepia:[{sepia:[``,vv,$,Q]}],"backdrop-filter":[{"backdrop-filter":[``,`none`,$,Q]}],"backdrop-blur":[{"backdrop-blur":ce()}],"backdrop-brightness":[{"backdrop-brightness":[vv,$,Q]}],"backdrop-contrast":[{"backdrop-contrast":[vv,$,Q]}],"backdrop-grayscale":[{"backdrop-grayscale":[``,vv,$,Q]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[vv,$,Q]}],"backdrop-invert":[{"backdrop-invert":[``,vv,$,Q]}],"backdrop-opacity":[{"backdrop-opacity":[vv,$,Q]}],"backdrop-saturate":[{"backdrop-saturate":[vv,$,Q]}],"backdrop-sepia":[{"backdrop-sepia":[``,vv,$,Q]}],"border-collapse":[{border:[`collapse`,`separate`]}],"border-spacing":[{"border-spacing":w()}],"border-spacing-x":[{"border-spacing-x":w()}],"border-spacing-y":[{"border-spacing-y":w()}],"table-layout":[{table:[`auto`,`fixed`]}],caption:[{caption:[`top`,`bottom`]}],transition:[{transition:[``,`all`,`colors`,`opacity`,`shadow`,`transform`,`none`,$,Q]}],"transition-behavior":[{transition:[`normal`,`discrete`]}],duration:[{duration:[vv,`initial`,$,Q]}],ease:[{ease:[`linear`,`initial`,_,$,Q]}],delay:[{delay:[vv,$,Q]}],animate:[{animate:[`none`,v,$,Q]}],backface:[{backface:[`hidden`,`visible`]}],perspective:[{perspective:[h,$,Q]}],"perspective-origin":[{"perspective-origin":x()}],rotate:[{rotate:le()}],"rotate-x":[{"rotate-x":le()}],"rotate-y":[{"rotate-y":le()}],"rotate-z":[{"rotate-z":le()}],scale:[{scale:ue()}],"scale-x":[{"scale-x":ue()}],"scale-y":[{"scale-y":ue()}],"scale-z":[{"scale-z":ue()}],"scale-3d":[`scale-3d`],skew:[{skew:de()}],"skew-x":[{"skew-x":de()}],"skew-y":[{"skew-y":de()}],transform:[{transform:[$,Q,``,`none`,`gpu`,`cpu`]}],"transform-origin":[{origin:x()}],"transform-style":[{transform:[`3d`,`flat`]}],translate:[{translate:fe()}],"translate-x":[{"translate-x":fe()}],"translate-y":[{"translate-y":fe()}],"translate-z":[{"translate-z":fe()}],"translate-none":[`translate-none`],zoom:[{zoom:[yv,$,Q]}],accent:[{accent:N()}],appearance:[{appearance:[`none`,`auto`]}],"caret-color":[{caret:N()}],"color-scheme":[{scheme:[`normal`,`dark`,`light`,`light-dark`,`only-dark`,`only-light`]}],cursor:[{cursor:[`auto`,`default`,`pointer`,`wait`,`text`,`move`,`help`,`not-allowed`,`none`,`context-menu`,`progress`,`cell`,`crosshair`,`vertical-text`,`alias`,`copy`,`no-drop`,`grab`,`grabbing`,`all-scroll`,`col-resize`,`row-resize`,`n-resize`,`e-resize`,`s-resize`,`w-resize`,`ne-resize`,`nw-resize`,`se-resize`,`sw-resize`,`ew-resize`,`ns-resize`,`nesw-resize`,`nwse-resize`,`zoom-in`,`zoom-out`,$,Q]}],"field-sizing":[{"field-sizing":[`fixed`,`content`]}],"pointer-events":[{"pointer-events":[`auto`,`none`]}],resize:[{resize:[`none`,``,`y`,`x`]}],"scroll-behavior":[{scroll:[`auto`,`smooth`]}],"scrollbar-thumb-color":[{"scrollbar-thumb":N()}],"scrollbar-track-color":[{"scrollbar-track":N()}],"scrollbar-gutter":[{"scrollbar-gutter":[`auto`,`stable`,`both`]}],"scrollbar-w":[{scrollbar:[`auto`,`thin`,`none`]}],"scroll-m":[{"scroll-m":w()}],"scroll-mx":[{"scroll-mx":w()}],"scroll-my":[{"scroll-my":w()}],"scroll-ms":[{"scroll-ms":w()}],"scroll-me":[{"scroll-me":w()}],"scroll-mbs":[{"scroll-mbs":w()}],"scroll-mbe":[{"scroll-mbe":w()}],"scroll-mt":[{"scroll-mt":w()}],"scroll-mr":[{"scroll-mr":w()}],"scroll-mb":[{"scroll-mb":w()}],"scroll-ml":[{"scroll-ml":w()}],"scroll-p":[{"scroll-p":w()}],"scroll-px":[{"scroll-px":w()}],"scroll-py":[{"scroll-py":w()}],"scroll-ps":[{"scroll-ps":w()}],"scroll-pe":[{"scroll-pe":w()}],"scroll-pbs":[{"scroll-pbs":w()}],"scroll-pbe":[{"scroll-pbe":w()}],"scroll-pt":[{"scroll-pt":w()}],"scroll-pr":[{"scroll-pr":w()}],"scroll-pb":[{"scroll-pb":w()}],"scroll-pl":[{"scroll-pl":w()}],"snap-align":[{snap:[`start`,`end`,`center`,`align-none`]}],"snap-stop":[{snap:[`normal`,`always`]}],"snap-type":[{snap:[`none`,`x`,`y`,`both`]}],"snap-strictness":[{snap:[`mandatory`,`proximity`]}],touch:[{touch:[`auto`,`none`,`manipulation`]}],"touch-x":[{"touch-pan":[`x`,`left`,`right`]}],"touch-y":[{"touch-pan":[`y`,`up`,`down`]}],"touch-pz":[`touch-pinch-zoom`],select:[{select:[`none`,`text`,`all`,`auto`]}],"will-change":[{"will-change":[`auto`,`scroll`,`contents`,`transform`,$,Q]}],fill:[{fill:[`none`,...N()]}],"stroke-w":[{stroke:[vv,Lv,Av,jv]}],stroke:[{stroke:[`none`,...N()]}],"forced-color-adjust":[{"forced-color-adjust":[`auto`,`none`]}]},conflictingClassGroups:{"container-named":[`container-type`],overflow:[`overflow-x`,`overflow-y`],overscroll:[`overscroll-x`,`overscroll-y`],inset:[`inset-x`,`inset-y`,`inset-bs`,`inset-be`,`start`,`end`,`top`,`right`,`bottom`,`left`],"inset-x":[`right`,`left`],"inset-y":[`top`,`bottom`],flex:[`basis`,`grow`,`shrink`],gap:[`gap-x`,`gap-y`],p:[`px`,`py`,`ps`,`pe`,`pbs`,`pbe`,`pt`,`pr`,`pb`,`pl`],px:[`pr`,`pl`],py:[`pt`,`pb`],m:[`mx`,`my`,`ms`,`me`,`mbs`,`mbe`,`mt`,`mr`,`mb`,`ml`],mx:[`mr`,`ml`],my:[`mt`,`mb`],size:[`w`,`h`],"font-size":[`leading`],"fvn-normal":[`fvn-ordinal`,`fvn-slashed-zero`,`fvn-figure`,`fvn-spacing`,`fvn-fraction`],"fvn-ordinal":[`fvn-normal`],"fvn-slashed-zero":[`fvn-normal`],"fvn-figure":[`fvn-normal`],"fvn-spacing":[`fvn-normal`],"fvn-fraction":[`fvn-normal`],"line-clamp":[`display`,`overflow`],rounded:[`rounded-s`,`rounded-e`,`rounded-t`,`rounded-r`,`rounded-b`,`rounded-l`,`rounded-ss`,`rounded-se`,`rounded-ee`,`rounded-es`,`rounded-tl`,`rounded-tr`,`rounded-br`,`rounded-bl`],"rounded-s":[`rounded-ss`,`rounded-es`],"rounded-e":[`rounded-se`,`rounded-ee`],"rounded-t":[`rounded-tl`,`rounded-tr`],"rounded-r":[`rounded-tr`,`rounded-br`],"rounded-b":[`rounded-br`,`rounded-bl`],"rounded-l":[`rounded-tl`,`rounded-bl`],"border-spacing":[`border-spacing-x`,`border-spacing-y`],"border-w":[`border-w-x`,`border-w-y`,`border-w-s`,`border-w-e`,`border-w-bs`,`border-w-be`,`border-w-t`,`border-w-r`,`border-w-b`,`border-w-l`],"border-w-x":[`border-w-r`,`border-w-l`],"border-w-y":[`border-w-t`,`border-w-b`],"border-color":[`border-color-x`,`border-color-y`,`border-color-s`,`border-color-e`,`border-color-bs`,`border-color-be`,`border-color-t`,`border-color-r`,`border-color-b`,`border-color-l`],"border-color-x":[`border-color-r`,`border-color-l`],"border-color-y":[`border-color-t`,`border-color-b`],translate:[`translate-x`,`translate-y`,`translate-none`],"translate-none":[`translate`,`translate-x`,`translate-y`,`translate-z`],"scroll-m":[`scroll-mx`,`scroll-my`,`scroll-ms`,`scroll-me`,`scroll-mbs`,`scroll-mbe`,`scroll-mt`,`scroll-mr`,`scroll-mb`,`scroll-ml`],"scroll-mx":[`scroll-mr`,`scroll-ml`],"scroll-my":[`scroll-mt`,`scroll-mb`],"scroll-p":[`scroll-px`,`scroll-py`,`scroll-ps`,`scroll-pe`,`scroll-pbs`,`scroll-pbe`,`scroll-pt`,`scroll-pr`,`scroll-pb`,`scroll-pl`],"scroll-px":[`scroll-pr`,`scroll-pl`],"scroll-py":[`scroll-pt`,`scroll-pb`],touch:[`touch-x`,`touch-y`,`touch-pz`],"touch-x":[`touch`],"touch-y":[`touch`],"touch-pz":[`touch`]},conflictingClassGroupModifiers:{"font-size":[`leading`]},postfixLookupClassGroups:[`container-type`],orderSensitiveModifiers:[`*`,`**`,`after`,`backdrop`,`before`,`details-content`,`file`,`first-letter`,`first-line`,`marker`,`placeholder`,`selection`]}});function ty(...e){return ey(T_(e))}var ny=O_(`inline-flex h-9 shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md border px-3 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 disabled:pointer-events-none disabled:opacity-50 dark:focus-visible:ring-zinc-500`,{variants:{variant:{primary:`border-slate-900 bg-slate-950 text-white hover:bg-slate-800 dark:border-zinc-100 dark:bg-zinc-50 dark:text-zinc-950 dark:hover:bg-zinc-200`,secondary:`border-slate-200 bg-white text-slate-900 hover:bg-slate-50 dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-100 dark:hover:bg-zinc-900`,ghost:`border-transparent bg-transparent text-slate-700 hover:bg-slate-100 dark:text-zinc-300 dark:hover:bg-zinc-900`},size:{sm:`h-8 px-2 text-xs`,md:`h-9 px-3 text-sm`,icon:`h-9 w-9 px-0`}},defaultVariants:{variant:`secondary`,size:`md`}});function ry({className:e,variant:t,size:n,...r}){return(0,B.jsx)(`button`,{className:ty(ny({variant:t,size:n}),e),type:`button`,...r})}function iy({className:e,...t}){return(0,B.jsx)(`section`,{className:ty(`rounded-lg border border-slate-200/80 bg-white/95 text-slate-950 shadow-[0_1px_2px_rgba(15,23,42,0.04)] dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-50`,e),...t})}function ay({className:e,...t}){return(0,B.jsx)(`div`,{className:ty(`p-4 pt-0`,e),...t})}var oy=[`codex`,`claude`,`kiro`,`trae`,`coco`,`openai`,`anthropic`],sy=new Set([`acp`,`status_projection`]);function cy(e){let t=e.trim().toLowerCase().replace(/_/gu,`-`);for(let e of oy)if(t===e||t.startsWith(`${e}-`))return e;return t}function ly(e,t){let n=t?.trim().toLowerCase()??``;return n.length>0&&!sy.has(n)?cy(n):cy(e)}var uy={stop:`ready_stop`,resume:`resume_review`,delete:`delete_review`},dy=e=>typeof e==`string`&&e.trim().length>0;function fy(e){let t={schemaVersion:`action_review_plan_v0`,proposalId:e.proposal_id,sourceFingerprint:e.expected_state_fingerprint},n=(e,n)=>({...t,interaction:e,reason:n,canApply:!1}),r=e.action_kind===`goal.lifecycle`;if(r&&e.gate!=null||e.status===`gated`)return n(`gated`,`authority_gate`);if(r&&e.stale!=null||e.status===`stale`)return n(`refresh`,`stale_proposal`);if(e.status===`applied`)return e.receipt?.projection_verified===!0&&(e.action_kind!==`operation.execute`||e.operation?.result_delivery!=null)?n(`completed`,`readback_verified`):n(`repair`,`readback_unverified`);if(e.status===`applying`)return n(`pending`,`apply_pending`);if(e.status===`failed`||e.error!=null)return n(`repair`,`apply_failed`);if(e.status!==`preview_ready`&&e.status!==`deferred`)return n(`inactive`,`inactive_proposal`);let i=(e,n=!0)=>({...t,interaction:`review`,reason:e,canApply:n});if(e.action_kind!==`goal.lifecycle`)return i(e.permission_classification===`protected`?`protected_action`:`action_review`);if(!(dy(e.proposal_id)&&dy(e.expected_state_fingerprint)&&Oh.shape.validation_evidence.safeParse(e.validation_evidence).success&&e.validation_evidence.length>0&&e.available_transitions.includes(`apply`)))return n(`refresh`,`incomplete_proposal`);let{operation:a,goal_id:o}=e.normalized_parameters;if(!dy(o)||e.context.goal_id!=null&&e.context.goal_id!==o)return n(`refresh`,`incomplete_proposal`);if(a!==`stop`&&a!==`resume`&&a!==`delete`)return i(`unknown_action`,!1);if(e.permission_classification===`protected`)return i(`protected_action`);if(e.permission_classification!==`durable_write`)return i(`unknown_permission`,!1);let s=uy[a];return s===`ready_stop`&&e.status===`preview_ready`?{...t,interaction:`direct`,reason:s,canApply:!0}:i(s===`ready_stop`?`action_review`:s)}function py(e){if(e.error_code===`action_stale`||e.error_code===`action_conflict`)return!0;let t=e.proposal;return typeof t==`object`&&!!t&&`status`in t&&t.status===`stale`}function my(e){return{blockingTodoCount:e.blockingTodoCount,goalNotifications:e.goalNotifications,goals:e.goals,openUserTodoCount:e.openUserTodoCount,systemHealth:e.systemHealth,attentionHistory:e.attentionHistory,userTodos:e.userTodos,workers:e.workers}}function hy(e,t){return e.goals.find(e=>e.goalId===t)?.title??t}function gy(e){return e.activationState===`stopped`||e.state===`已停止`?`stopped`:e.state===`已完成`?`history`:e.needsYou||e.state===`等你`?`needs_you`:e.state===`推进中`||e.state===`需修复`?`running`:e.state===`安静运行`?`observing`:`scheduled`}function _y(e){let t=e;return t>=1e6?`${(t/1e6).toFixed(1)}M`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}function vy(e){return`$${e.toFixed(2)}`}function yy(e){let t=e;return t>=36e5?`${(t/36e5).toFixed(1)}h`:t>=6e4?`${(t/6e4).toFixed(1)}m`:t>=1e3?`${Math.round(t/1e3)}s`:`${t}ms`}function by(e,t,n){return e==null?t:n(e)}function xy(e){return!!(e&&[e.tokens24h,e.tokens7d,e.costUsd24h,e.costUsd7d,e.durationMs24h,e.durationMs7d].some(e=>e!=null))}function Sy(e,t){if(!xy(e))return null;let n=(e,n,r,i)=>{let a=[n==null?null:`${_y(n)} ${t.tokens}`,r==null?null:`${t.cost}: ${vy(r)}`,i==null?null:`${t.duration}: ${yy(i)}`].filter(e=>e!==null);return a.length?`${e} ${a.join(` · `)}`:null};return n(t.period7d,e.tokens7d,e.costUsd7d,e.durationMs7d)??n(t.period24h,e.tokens24h,e.costUsd24h,e.durationMs24h)}function Cy({ariaLabel:e,className:t,icon:n,onChange:r,options:i,prefixLabel:a,value:o}){let s=(0,z.useId)(),c=(0,z.useRef)(null),l=(0,z.useRef)(null),u=(0,z.useRef)(new Map),[d,f]=(0,z.useState)(!1),[p,m]=(0,z.useState)(o),h=i.find(e=>e.value===o)??i[0],g=i.filter(e=>!e.disabled);(0,z.useEffect)(()=>{if(!d)return;let e=e=>{c.current?.contains(e.target)||f(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[d]),(0,z.useEffect)(()=>{d&&u.current.get(p)?.focus()},[p,d]);function _(e){m(e)}function v(e=`selected`){let t=e===`last`?g.at(-1):g[0],n=e===`selected`&&h&&!h.disabled?h:t;n&&(f(!0),_(n.value))}function y({restoreFocus:e=!1}={}){f(!1),e&&l.current?.focus()}function b(e){e.disabled||(r(e.value),y({restoreFocus:!0}))}function x(e){if(!g.length)return;let t=g.findIndex(e=>e.value===p),n=t<0?0:(t+e+g.length)%g.length;_(g[n].value)}function S(e){e.key===`ArrowDown`||e.key===`Enter`||e.key===` `?(e.preventDefault(),v(`selected`)):e.key===`ArrowUp`&&(e.preventDefault(),v(`last`))}function C(e,t){if(e.key===`ArrowDown`)e.preventDefault(),x(1);else if(e.key===`ArrowUp`)e.preventDefault(),x(-1);else if(e.key===`Home`)e.preventDefault(),g[0]&&_(g[0].value);else if(e.key===`End`){e.preventDefault();let t=g.at(-1);t&&_(t.value)}else e.key===`Enter`||e.key===` `?(e.preventDefault(),b(t)):e.key===`Escape`?(e.preventDefault(),y({restoreFocus:!0})):e.key===`Tab`&&y()}let w;return(0,B.jsxs)(`div`,{className:`personal-select${t?` ${t}`:``}`,ref:c,children:[(0,B.jsxs)(`button`,{"aria-controls":s,"aria-expanded":d,"aria-haspopup":`listbox`,"aria-label":e,className:`personal-select-trigger`,"data-value":o,onClick:()=>d?y():v(),onKeyDown:S,ref:l,role:`combobox`,type:`button`,children:[n?(0,B.jsx)(`span`,{className:`personal-select-icon`,children:n}):null,(0,B.jsxs)(`span`,{className:`personal-select-value`,children:[a?(0,B.jsx)(`small`,{children:a}):null,(0,B.jsx)(`span`,{children:h?.label??o})]}),(0,B.jsx)(tm,{"aria-hidden":!0,className:d?`is-open`:void 0,size:14})]}),d?(0,B.jsx)(`div`,{"aria-label":e,className:`personal-select-listbox`,id:s,role:`listbox`,children:i.map(e=>{let t=e.group&&e.group!==w;return w=e.group,(0,B.jsxs)(`div`,{className:`personal-select-option-wrap`,children:[t?(0,B.jsx)(`div`,{className:`personal-select-group-label`,children:e.group}):null,(0,B.jsxs)(`button`,{"aria-disabled":e.disabled||void 0,"aria-selected":e.value===o,className:`personal-select-option`,disabled:e.disabled,id:`${s}-${e.value.replace(/[^a-z0-9_-]/gi,`-`)}`,onClick:()=>b(e),onFocus:()=>m(e.value),onKeyDown:t=>C(t,e),ref:t=>{t?u.current.set(e.value,t):u.current.delete(e.value)},role:`option`,tabIndex:e.value===p?0:-1,type:`button`,children:[(0,B.jsx)(`span`,{children:e.label}),e.value===o?(0,B.jsx)(em,{"aria-hidden":!0,size:15}):null]})]},e.value)})}):null]})}function wy({agents:e,managerChatOpen:t,mobileNavigationOpen:n,onOpenGoalCapabilities:r,onOpenGoalDetail:i,onOpenManagerChat:a,onRefresh:o,onOpenNavigation:s,onSelectGoalTab:c,onSelectAgent:l,onReturnManagerHome:u,refreshState:d,readOnlySourceLabel:f,selectedAgentId:p,selectedGoal:m,selectedGoalTab:h}){let{locale:g,t:_}=Ji(),[v,y]=(0,z.useState)(!1),b=(0,z.useRef)(null),x=(0,z.useRef)(null);(0,z.useEffect)(()=>{if(!v)return;function e(e){x.current?.contains(e.target)||y(!1)}function t(e){e.key===`Escape`&&(y(!1),b.current?.focus())}return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t)}},[v]),(0,z.useEffect)(()=>y(!1),[m?.goalId]);function S(e){y(!1),e?.()}let C=m?Sy(m.usage,{cost:_(`drawer.costShort`),duration:_(`drawer.durationShort`),period24h:_(`drawer.period24h`),period7d:_(`drawer.period7d`),tokens:_(`drawer.tokensShort`)}):null;return(0,B.jsxs)(`header`,{className:`personal-channel-header`,children:[(0,B.jsx)(`button`,{"aria-expanded":n??!1,"aria-label":_(`header.openGoalNavigation`),className:`personal-icon-button personal-mobile-menu`,onClick:s,type:`button`,children:(0,B.jsx)(Tm,{size:18})}),(0,B.jsxs)(`div`,{className:`personal-channel-title`,children:[(0,B.jsx)(`h1`,{children:m?.title??_(`header.manager`)}),m?(0,B.jsx)(`p`,{children:m.loadState?_(m.loadState===`error`?`startup.goalError`:`startup.goalLoading`):`${m.agentLaneCount&&m.agentLaneCount>1?_(`header.workAgentCount`,{count:m.agentLaneCount}):m.agentLabel??m.agentId} · ${m.loadState?_(m.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(m.state,g)}${C?` · ${C}`:``} · ${m.nextSentence}`}):null]}),m?(0,B.jsxs)(`nav`,{"aria-label":_(`header.goalView`),className:`personal-goal-tabs`,children:[(0,B.jsx)(`button`,{"aria-current":h===`chat`?`page`:void 0,onClick:()=>c(`chat`),type:`button`,children:_(`header.chat`)}),(0,B.jsx)(`button`,{"aria-current":h===`tasks`?`page`:void 0,onClick:()=>c(`tasks`),type:`button`,children:_(`header.tasks`)}),(0,B.jsx)(`button`,{"aria-current":h===`files`?`page`:void 0,onClick:()=>c(`files`),type:`button`,children:_(`header.files`)})]}):(0,B.jsxs)(`nav`,{"aria-label":_(`header.managerView`),className:`personal-goal-tabs`,children:[(0,B.jsx)(`button`,{"aria-current":t?void 0:`page`,onClick:u,type:`button`,children:_(`header.managerOverview`)}),(0,B.jsx)(`button`,{"aria-current":t?`page`:void 0,onClick:a,type:`button`,children:_(`header.chat`)})]}),(0,B.jsxs)(`div`,{className:`personal-channel-actions`,children:[m&&i&&r?(0,B.jsxs)(`div`,{className:`personal-goal-tools`,ref:x,children:[(0,B.jsxs)(`button`,{"aria-expanded":v,"aria-haspopup":`menu`,"aria-label":_(`header.goalSettingsDescription`),className:`personal-goal-tools-trigger`,onClick:()=>y(e=>!e),ref:b,title:_(`header.goalSettingsDescription`),type:`button`,children:[(0,B.jsx)(Gm,{"aria-hidden":!0,size:16}),(0,B.jsx)(`span`,{children:_(`header.goalSettings`)}),(0,B.jsx)(tm,{"aria-hidden":!0,size:13})]}),v?(0,B.jsxs)(`fieldset`,{"aria-label":_(`header.goalSettings`),className:`personal-goal-tools-menu`,children:[(0,B.jsxs)(`button`,{onClick:()=>S(i),type:`button`,children:[(0,B.jsx)(ym,{"aria-hidden":!0,size:17}),(0,B.jsx)(`span`,{children:(0,B.jsx)(`strong`,{children:_(`header.goalDetails`)})})]}),(0,B.jsxs)(`button`,{onClick:()=>S(r),type:`button`,children:[(0,B.jsx)(Gm,{"aria-hidden":!0,size:17}),(0,B.jsx)(`span`,{children:(0,B.jsx)(`strong`,{children:_(`header.goalCapabilities`)})})]})]}):null]}):null,f?(0,B.jsxs)(`span`,{className:`personal-read-only-source`,title:_(`header.readOnlySourceDescription`,{source:f}),children:[(0,B.jsx)(pm,{size:15}),f,(0,B.jsx)(`small`,{children:_(`common.readOnly`)})]}):(0,B.jsx)(Cy,{ariaLabel:_(`header.selectChatRuntime`),className:`personal-agent-select`,icon:(0,B.jsx)(Zp,{size:16}),onChange:l,options:e.map(e=>({disabled:!e.available,label:`${e.label}${e.available?``:` · ${_(`header.agentUnavailable`)}`}`,value:e.agentId})),prefixLabel:_(`header.chatRuntime`),value:p}),(0,B.jsxs)(`span`,{className:`personal-live-indicator`,children:[(0,B.jsx)(`i`,{}),_(`header.live`)]}),o?(0,B.jsxs)(`span`,{className:`personal-refresh-control is-${d??`idle`}`,children:[d===`loading`?(0,B.jsx)(`small`,{children:_(`header.refreshing`)}):d===`done`?(0,B.jsx)(`small`,{children:_(`header.refreshDone`)}):d===`error`?(0,B.jsx)(`small`,{children:_(`header.refreshFailed`)}):null,(0,B.jsx)(`button`,{"aria-label":_(d===`loading`?`header.refreshing`:`header.refresh`),className:`personal-icon-button`,disabled:d===`loading`,onClick:o,type:`button`,children:(0,B.jsx)(Im,{className:d===`loading`?`is-spinning`:void 0,size:17})})]}):null]})]})}function Ty({attention:e,onSelect:t}){let{t:n}=Ji(),r=Zi(e.updatedAt,n);return(0,B.jsxs)(`button`,{className:`personal-timeline-row personal-attention-row`,"data-testid":`personal-browse-row`,onClick:t,type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-row-icon is-attention`,children:(0,B.jsx)(im,{size:18})}),(0,B.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,B.jsxs)(`small`,{children:[e.goalTitle??e.goalId,` · `,n(`home.lane.needsYou`),r?` · ${n(`tasks.waitingAge`,{age:r})}`:``]}),(0,B.jsx)(`strong`,{children:e.text})]}),(0,B.jsx)(`span`,{className:`personal-priority-dot is-${e.priority??(e.blocking?`high`:`medium`)}`}),(0,B.jsx)(`span`,{className:`personal-row-status ${e.blocking?`is-blocking`:`is-pending`}`,children:e.blocking?n(`tasks.blocked`):n(`tasks.pending`)}),(0,B.jsx)(nm,{size:17})]})}var Ey=/(`[^`\n]+`)|(\*\*[^*\n]+(\*[^*\n]*)?\*\*)|(\[[^\]\n]{1,120}\]\(https?:\/\/[^)\s]+\))/g;function Dy(e,t){let n=[],r=0,i=0;for(let a of e.matchAll(Ey)){let o=a.index??0;o>r&&n.push(e.slice(r,o));let s=a[0],c=`${t}-i${i++}`;if(s.startsWith("`"))n.push((0,B.jsx)(`code`,{className:`personal-md-code`,children:s.slice(1,-1)},c));else if(s.startsWith(`**`))n.push((0,B.jsx)(`strong`,{children:s.slice(2,-2)},c));else{let e=s.indexOf(`](`),t=s.slice(1,e),r=s.slice(e+2,-1);n.push((0,B.jsx)(`a`,{className:`personal-md-link`,href:r,rel:`noreferrer`,target:`_blank`,children:t},c))}r=o+s.length}return r=4))throw e;await new Promise(e=>globalThis.setTimeout(e,250*2**(i-1)))}}if(!a)throw new Eh(`Agent 事件流连接已断开。`,{reconnect_attempts:i})}async function Jh(e,t){return Lh(`/api/chat/sessions/${e}/turns/${t}/interrupt`,{method:`POST`,body:`{}`})}async function Yh(e,t,n={}){let r=await Gh(e,t,n.clientTurnId??crypto.randomUUID(),n.attachments);return n.onPhase?.(`turn.accepted`,r.turn_id),Xh(e,r.turn_id,r.events_url,n)}async function Xh(e,t,n,r={}){let i=null,a={failure:null,interrupted:null};try{await qh(n,e=>{r.onPhase?.(e.kind,t),(e.kind===`answer.delta`||e.kind===`assistant.delta`)&&r.onDelta?.(String(e.payload.text??``)),e.kind===`agent.phase`&&r.onActivity?.(String(e.payload.label??`Agent 正在处理`)),e.kind===`turn.completed`&&(i=e.payload.response),e.kind===`turn.failed`&&(a.failure=e.payload),e.kind===`turn.interrupted`&&(a.interrupted=e.payload)},r.signal)}catch(i){throw i instanceof Eh&&!r.signal?.aborted?new Eh(i.message,{...i.payload,events_url:n,reconnectable:!0,session_id:e,turn_id:t}):i}if(a.failure)throw new Eh(String(a.failure.message||`Agent 回合失败。`),a.failure);if(a.interrupted)throw new Eh(`Agent 回合已中断。`,{...a.interrupted,error_code:`turn_interrupted`,session_id:e,turn_id:t});return{response:bh.parse(i),sessionId:e,turnId:t}}async function Zh(e,t,n={}){return Xh(e,t,`/api/chat/sessions/${e}/turns/${t}/events`,n)}async function Qh(e){let t=xh.parse(await Lh(`/api/chat/sessions/${e}`,{keepalive:!0,method:`DELETE`}));if(t.session_id!==e)throw new Eh(`Agent 会话关闭回执与本次请求不一致。`,{session_id:t.session_id});return t}async function $h(e){return Lh(`/api/chat/sessions/${e}/resume`,{method:`POST`,body:`{}`})}function eg(e){return{goal_id:e.goalId,enabled:e.enabled,...e.modelConfig===void 0?{}:{model_config:e.modelConfig},...e.enabled?{max_children:e.maxChildren,allowed_domains:e.allowedDomains}:{}}}function tg(e,t){let n=e.after.orchestration,r=[...new Set(t.allowedDomains)],i=e.feature_summary.multi_subagent===`enabled`;if(!(e.goal_id===t.goalId&&i===t.enabled&&(t.modelConfig===void 0||JSON.stringify(n.model_config??null)===JSON.stringify(t.modelConfig))&&(t.enabled?n.max_children===t.maxChildren&&JSON.stringify(n.allowed_domains)===JSON.stringify(r):n.spawn_allowed===!1&&n.max_children===0)))throw new Eh(`Goal 子代理配置回执与本次请求不一致,界面已停止更新。`,{after:e.after,goal_id:e.goal_id});return e}async function ng(e){let t=wh.parse(await Lh(`/api/chat/goal-subagents/dry-run`,{method:`POST`,body:JSON.stringify(eg(e))}));if(!t.dry_run||t.execute||t.written)throw new Eh(`Goal 子代理预览返回了非预览回执,已停止进入确认状态。`,{result:t});return tg(t,e)}async function rg(e,t){let n=wh.parse(await Lh(`/api/chat/goal-subagents/apply`,{method:`POST`,body:JSON.stringify({...eg(e),preview_id:t})}));if(n.preview_id!==t||n.dry_run||!n.execute)throw new Eh(`Goal 子代理写入回执与本次确认不一致,界面已停止更新。`,{result:n});if(n.changed&&(!n.written||!n.global_sync.executed||!n.global_sync.readback.verified))throw new Eh(`Goal 子代理设置未通过共享状态读回验证。`,{result:n});return tg(n,e)}var ig=J({ok:X(!0),targets:q(J({enabled:K(),provider:W(),target_name:W()}))});async function ag(){return ig.parse(await Lh(`/api/chat/goal-channel/targets`)).targets}var og=J({ok:K(),blocker:W().optional(),public_summary:W().optional(),status:W().optional()});async function sg(e){return og.parse(await Lh(`/api/chat/goal-channel/setup`,{method:`POST`,body:JSON.stringify({execute:e.execute,goal_id:e.goalId,target:e.target})}))}async function cg(e){return og.parse(await Lh(`/api/chat/goal-channel/configure`,{method:`POST`,body:JSON.stringify({auto_notify_human_gates:e.autoNotify,goal_id:e.goalId})}))}var lg=J({schema_version:X(`periodic_report_schedule_v0`),schedule_id:W(),rrule:W(),timezone:W()});J({schema_version:X(`periodic_report_machine_defaults_v0`),enabled:K(),inheritance:X(`live_machine_default`),profile_preset:W().optional(),route_ref:W().optional(),timezone:W(),schedule:lg.nullable().optional()});var ug=J({schema_version:X(`loopx_machine_configuration_v0`),namespaces:gd(W(),gd(W(),id()))}),dg=J({namespace:W(),title:W(),description:W(),schema_versions:q(W()).min(1),configuration_template:gd(W(),id()),template_status:Y([`ready`,`schema_only`])}),fg=J({schema_version:X(`machine_configuration_catalog_v0`),namespaces:q(dg)}),pg=J({key:W(),label:W(),description:W(),input_kind:Y([`boolean`,`number`,`select`,`string_list`,`text`,`periodic_report_schedule`]),nullable:K().optional(),required:K(),minimum:G().int().optional(),maximum:G().int().optional(),options:q(W()).optional()}),mg=J({schema_version:X(`capability_configuration_editor_v0`),editable:K(),supported_scopes:q(Y([`goal`,`machine`])),writable_scopes:q(Y([`goal`,`machine`])),fields:q(pg),read_only_reason:W().optional()}),hg=J({schema_version:X(`capability_configuration_catalog_v0`),capabilities:q(J({capability_id:W(),display_name:W(),description:W(),available_scopes:q(Y([`goal`,`machine`])),machine_namespace:W().optional(),goal_feature_id:W().optional(),effective_value_policy:X(`goal_override_over_live_machine_default`).optional(),availability:W().optional(),default:gd(W(),id()).optional(),current:gd(W(),id()).optional(),machine_current:gd(W(),id()).optional(),effective_configuration:J({schema_version:X(`capability_configuration_resolution_v0`),capability_id:W(),source:Y([`goal_override`,`machine_default`,`capability_default`,`not_configured`]),configuration:gd(W(),id()).nullable(),inherited:K(),goal_override_present:K(),machine_default_present:K(),effective_revision:W()}).optional(),documentation:gd(W(),id()).optional(),context_contribution:J({supported_phases:q(Y([`before_plan`,`before_delegate`,`after_delegate_result`])),target:X(`coordinator`),activation:X(`with_capability`),receipt_required:X(!0)}).optional(),configuration_editor:mg}))}),gg=J({ok:X(!0),schema_version:X(`goal_configuration_inspection_v0`),status:X(`configured`),goal_id:W(),revision:W(),available_capabilities:q(W()),capability_catalog:hg}),_g=J({ok:X(!0),goal_id:W(),capability_id:W(),changed_fields:q(W()),goal_configuration:gd(W(),id()).nullable(),capability_catalog:hg}),vg=_g.extend({schema_version:X(`goal_configuration_update_plan_v0`),status:X(`preview`),action:Y([`create`,`update`,`delete`,`unchanged`]),current_revision:W(),desired_revision:W(),base_revision:W(),plan_revision:W(),writes_required:G().int().nonnegative()}),yg=ud([_g.extend({schema_version:X(`goal_configuration_transaction_v0`),status:Y([`applied`,`unchanged`]),plan_revision:W(),applied_revision:W(),readback_verified:X(!0)}),J({ok:X(!1),schema_version:X(`goal_configuration_transaction_v0`),status:X(`partial_write`),goal_id:W(),capability_id:W(),plan_revision:W(),applied_revision:W().nullable(),source_written:X(!0),shared_sync_pending:X(!0),readback_verified:K(),changed_fields:q(W()),goal_configuration:gd(W(),id()).nullable(),capability_catalog:hg,error:W(),recommended_action:W()})]),bg=J({ok:X(!0),available_namespaces:q(W()),namespace_catalog:fg.optional().default({schema_version:`machine_configuration_catalog_v0`,namespaces:[]}),capability_catalog:hg,changed_namespaces:q(W()).optional().default([]),machine_configuration:ug.nullable().optional()}),xg=bg.extend({schema_version:X(`machine_configuration_inspection_v0`),status:Y([`configured`,`absent`]),revision:W()}),Sg=bg.extend({schema_version:X(`machine_configuration_update_plan_v0`),status:X(`preview`),action:Y([`create`,`update`,`delete`,`unchanged`]),current_revision:W(),desired_revision:W(),plan_revision:W(),writes_required:G().int().nonnegative(),machine_configuration:ug.nullable()}),Cg=bg.extend({schema_version:X(`machine_configuration_transaction_v0`),status:Y([`applied`,`unchanged`]),plan_revision:W(),transaction_id:W().nullable(),readback_verified:X(!0),rollback_available:K(),applied_revision:W().optional(),prior_revision:W().optional()}),wg=bg.extend({schema_version:X(`machine_configuration_rollback_plan_v0`),status:X(`preview`),action:Y([`delete`,`restore`,`unchanged`,`blocked`]),reason:W(),transaction_id:W(),plan_revision:W(),rollback_allowed:K(),writes_required:G().int().nonnegative()}),Tg=bg.extend({schema_version:X(`machine_configuration_rollback_receipt_v0`),status:Y([`rolled_back`,`unchanged`]),transaction_id:W(),plan_revision:W(),rollback_id:W().nullable(),readback_verified:X(!0)});async function Eg(){return xg.parse(await Lh(`/api/chat/machine-configuration`))}async function Dg(e){let t=new URLSearchParams({goal_id:e});return gg.parse(await Lh(`/api/chat/goal-configuration?${t.toString()}`))}async function Og(e,t,n){return vg.parse(await Lh(`/api/chat/goal-configuration/preview`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n})}))}async function kg(e,t,n,r){return yg.parse(await Lh(`/api/chat/goal-configuration/apply`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n,expected_plan_revision:r})}))}async function Ag(e,t){return Sg.parse(await Lh(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,namespace_configuration:t})}))}async function jg(e,t,n){return Cg.parse(await Lh(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:n,namespace:e,namespace_configuration:t})}))}async function Mg(e){return Sg.parse(await Lh(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,operation:`remove`})}))}async function Ng(e,t){return Cg.parse(await Lh(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:t,namespace:e,operation:`remove`})}))}async function Pg(e){return wg.parse(await Lh(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!1,transaction_id:e})}))}async function Fg(e,t){return Tg.parse(await Lh(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!0,expected_plan_revision:t,transaction_id:e})}))}var Ig=J({ok:X(!0),goals:q(J({goal_id:W(),repository:J({branch:W(),identity:W(),label:W(),read_only:X(!0)})}))});async function Lg(){return Ig.parse(await Lh(`/api/chat/goals/contexts`)).goals}var Rg=J({ok:X(!0),apps:q(J({active:K(),app_ref:W(),brand:W(),health_error_code:W().nullable().default(null),label:W(),ready:K(),reply_ready:K().default(!1)}))});async function zg(){return Rg.parse(await Lh(`/api/chat/lark/apps`)).apps}var Bg=J({ok:X(!0),app_ref:W(),error:W().nullable(),setup_id:W(),status:Y([`starting`,`waiting_for_feishu`,`ready`,`failed`,`cancelled`]),verification_url:W().url().nullable()});async function Vg(e){return Bg.parse(await Lh(`/api/chat/lark/app-setups`,{method:`POST`,body:JSON.stringify({app_ref:e.appRef,brand:e.brand})}))}async function Hg(e){return Bg.parse(await Lh(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`))}async function Ug(e){return Bg.parse(await Lh(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`,{method:`DELETE`}))}var Wg=[`invalid_event`,`binding_unavailable`,`chat_mismatch`,`topic_mismatch`,`route_ambiguous`,`self_message`,`invalid_routing_state`,`not_addressed`],Gg=J({ok:X(!0),chats:q(J({chat_id:W(),chat_name:W()}))});async function Kg(e,t){let n=new URLSearchParams({app_ref:e});return t&&n.set(`query`,t),Gg.parse(await Lh(`/api/chat/lark/chats?${n.toString()}`)).chats}var qg=J({ok:X(!0),connections:q(J({conversation_kind:Y([`goal`,`manager`]).default(`goal`),agent_id:W().nullable().default(null),connection_id:W(),app_label:W(),app_ref:W(),capture_scope:Y([`addressed_only`,`configured_chat_all`]).default(`addressed_only`),chat_name:W(),enabled:K(),goal_id:W(),goal_title:W(),health_error_code:W().nullable().default(null),history_permission_guidance:J({action:X(`enable_application_scopes_and_publish`),api_document_url:W().url(),capability:X(`group_history_pagination`),identity:X(`bot`),required_scopes:md([X(`im:message.group_msg`),X(`im:message.group_msg.include_bot:read`)]),schema_version:X(`lark_bot_group_history_permission_guidance_v0`)}).nullable().default(null),incoming_mode:Y([`mentions`,`all`]),ingress_mode:Y([`live_steering`,`session_queue`,`async_inbox`,`direct_session`]).default(`async_inbox`),event_count:G().int().nonnegative().default(0),last_event_reason:Y(Wg).nullable().default(null).catch(null),last_event_status:W().nullable().default(null),listener_error_code:W().nullable().default(null),listener_status:Y([`starting`,`listening`,`retrying`,`stopped`]).nullable().default(null),replied_count:G().int().nonnegative().default(0),reply_ready:K().default(!1),reply_mode:X(`topic_reply`),session_bound:K().default(!1),target_ref:W(),topic_name:W(),topic_setup_required:K()}))});async function Jg(){return qg.parse(await Lh(`/api/chat/lark/connections`)).connections}async function Yg(e){return og.parse(await Lh(`/api/chat/lark/connections`,{method:`POST`,body:JSON.stringify({...e.agentBindings?{agent_bindings:e.agentBindings.map(e=>({agent_id:e.agentId,app_ref:e.appRef}))}:{},...e.agentId?{agent_id:e.agentId}:{},...e.appRef?{app_ref:e.appRef}:{},...e.connectionId?{connection_id:e.connectionId}:{},conversation_kind:e.conversationKind??`goal`,capture_scope:e.captureScope,chat_id:e.chatId,chat_name:e.chatName,execute:e.execute,goal_id:e.goalId,incoming_mode:e.incomingMode,ingress_mode:e.ingressMode,reply_mode:e.replyMode})}))}async function Xg(e,t){let n=new URLSearchParams({goal_id:e,connection_id:t});return og.parse(await Lh(`/api/chat/lark/connections?${n.toString()}`,{method:`DELETE`}))}function Zg(e){return{loadedUrl:null,projectionRevision:0,requestedUrl:e,selectionRevision:0,requestGeneration:0}}function Qg(e,t){return e.selectionRevision+=1,e.requestedUrl=t,e.selectionRevision}function $g(e,t,n){if(n.background)return e.requestedUrl!==null||e.loadedUrl!==t?null:(e.requestGeneration+=1,{background:!0,projectionRevision:e.projectionRevision,selectionRevision:e.selectionRevision,url:t,generation:e.requestGeneration});let r=n.selectionRevision??e.selectionRevision+1;return n.selectionRevision!==void 0&&e.selectionRevision!==r?null:(e.selectionRevision=r,e.projectionRevision+=1,e.requestedUrl=t,e.requestGeneration+=1,{background:!1,projectionRevision:e.projectionRevision,selectionRevision:r,url:t,generation:e.requestGeneration})}function e_(e,t){return t.generation===e.requestGeneration&&e.projectionRevision===t.projectionRevision&&e.selectionRevision===t.selectionRevision}function t_(e,t){return e_(e,t)&&(!t.background||e.requestedUrl===null&&e.loadedUrl===t.url)}function n_(e,t,n){return t.get(e)===n}function r_(e,t,n,r){return e.filter(e=>n_(r(e),n,t))}function i_(e,t,n){let r=new Set,i=[];for(let a of[...e,...t]){let e=n(a);e==null||r.has(e)||(r.add(e),i.push(a))}return i}var a_=[`runs_24h`,`runs_7d`,`quota_spend_slots_24h`,`quota_spend_slots_7d`,`automation_run_count_24h`,`automation_run_count_7d`,`progress_signal_run_count_24h`,`progress_signal_run_count_7d`],o_=[`input_tokens_24h`,`input_tokens_7d`,`output_tokens_24h`,`output_tokens_7d`,`cache_tokens_24h`,`cache_tokens_7d`,`cost_usd_24h`,`cost_usd_7d`,`duration_ms_24h`,`duration_ms_7d`],s_=[`accounting`,`decision`,`evidence`,`state`,`work`],c_={accounting:0,decision:0,evidence:0,state:0,work:0},l_={runs_24h:0,runs_7d:0,quota_spend_slots_24h:0,quota_spend_slots_7d:0,automation_run_count_24h:0,automation_run_count_7d:0,progress_signal_run_count_24h:0,progress_signal_run_count_7d:0};function u_(e,t){let n={...e};for(let r of a_)n[r]=(Number(e[r])||0)+(Number(t[r])||0);for(let r of o_)(e[r]!==void 0||t[r]!==void 0)&&(n[r]=(e[r]??0)+(t[r]??0));return n}function d_(e,t){return!e.length||t<=0?e:e.map(e=>({...e,project_share_24h:Math.round((Number(e.runs_24h)||0)/t*1e3)/1e3}))}function f_(e,t){let n={...e};for(let r of s_)n[r]=(e[r]??0)+(t[r]??0);return n}function p_(e){let t={events_24h:0,events_7d:0,by_class_24h:{...c_},by_class_7d:{...c_}};for(let n of e)t.events_24h+=n.events_24h,t.events_7d+=n.events_7d,t.by_class_24h=f_(t.by_class_24h,n.by_class_24h),t.by_class_7d=f_(t.by_class_7d,n.by_class_7d);return t}function m_(e,t,n){if(!e&&!t)return null;let r=r_(e?.goals??[],`active`,n,e=>e.goal_id),i=r_(t?.goals??[],`stopped`,n,e=>e.goal_id),a=i_(r,i,e=>e.goal_id),o=p_(r),s=p_(i),c={events_24h:o.events_24h+s.events_24h,events_7d:o.events_7d+s.events_7d,by_class_24h:f_(o.by_class_24h,s.by_class_24h),by_class_7d:f_(o.by_class_7d,s.by_class_7d)};return{...e??t,goals:a,sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),totals:c}}function h_(e,t,n){if(!e&&!t)return null;let r=i_([...r_(e?.items??[],`active`,n,e=>e.goal_id),...r_(t?.items??[],`stopped`,n,e=>e.goal_id)],[],e=>`${e.goal_id}:${e.decision_kind??``}:${e.decision_at??``}`),i={decision_count:(e?.summary.decision_count??0)+(t?.summary.decision_count??0),stale_count:r.filter(e=>e.stale_by_age).length,rebase_required_count:(e?.summary.rebase_required_count??0)+(t?.summary.rebase_required_count??0),fresh_count:(e?.summary.fresh_count??0)+(t?.summary.fresh_count??0)};return{...e??t,items:r,sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),summary:i}}function g_(e,t){return i_([...e,...t].sort((e,t)=>t.generated_at.localeCompare(e.generated_at)),[],e=>`${e.goal_id}:${e.generated_at}:${e.classification??``}`)}function __(e,t,n){let r=i_(r_(e.items,`active`,n,e=>e.goal_id),r_(t.items,`stopped`,n,e=>e.goal_id),e=>e.goal_id);return{...e,item_count:r.length,items:r,needs_controller:r.filter(e=>e.waiting_on===`controller`).length,needs_codex:r.filter(e=>e.waiting_on===`codex`).length,needs_user_or_controller:r.filter(e=>[`user_or_controller`,`controller`].includes(e.waiting_on)).length,watching_external_evidence:r.filter(e=>e.waiting_on===`external_evidence`).length}}function v_(e){let t=e.todo_id?.trim()||``;return t?`${e.goal_id}:${t}`:`${e.goal_id}:synthetic:${e.role??``}:${e.index??``}:${e.text??``}`}function y_(e){let t={...l_};for(let n of e){for(let e of a_)t[e]+=Number(n[e])||0;for(let e of o_)n[e]!==void 0&&(t[e]=(t[e]??0)+n[e])}return t}function b_(e,t,n){if(!e&&!t)return null;let r=r_(e?.items??[],`active`,n,e=>e.goal_id),i=r_(t?.items??[],`stopped`,n,e=>e.goal_id),a=i_(r,i,v_);return{...e??t,current_projected_count:r.length+i.length,items:a,rollout_event_count:a.reduce((e,t)=>e+(t.event_count??0),0),total_count:a.length}}function x_(e,t,n){if(!e&&!t)return null;let r=r_(e?.goals??[],`active`,n,e=>e.goal_id),i=r_(t?.goals??[],`stopped`,n,e=>e.goal_id),a=i_(r,i,e=>e.goal_id),o=u_(y_(r),y_(i));return{...e??t,goals:d_(a,Number(o.runs_24h)||0),sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),totals:o}}function S_(e,t,n){if(!e&&!t)return null;let r=(e?.agents??[]).filter(e=>e.goal_ids.some(e=>n_(e,n,`active`))||(e.current_todo?.goal_id?n_(e.current_todo.goal_id,n,`active`):!1)),i=(t?.agents??[]).filter(e=>e.goal_ids.some(e=>n_(e,n,`stopped`))||(e.current_todo?.goal_id?n_(e.current_todo.goal_id,n,`stopped`):!1)),a=i_(r,i,e=>e.agent_id).map(e=>{let t=i.find(t=>t.agent_id===e.agent_id);return t?{...e,goal_ids:Array.from(new Set([...e.goal_ids??[],...t.goal_ids]))}:e});return{...e??t,agents:a,source_summary:(e??t)?.source_summary?{...(e??t).source_summary,projected_agent_count:a.length,registered_agent_count:new Set(a.map(e=>e.agent_id)).size}:(e??t)?.source_summary}}function C_(e,t,n){if(!e&&!t)return null;let r=i_(r_(e?.goals??[],`active`,n,e=>e.goal_id),r_(t?.goals??[],`stopped`,n,e=>e.goal_id),e=>e.goal_id);return{...e??t,goals:r}}function w_(e,t){let n=t.goal_projection?.scope;if(n!==`active`&&n!==`stopped`)return t;let r=n,i=t.run_history.goals,a=e.run_history.goals,o=i_(r===`active`?i:a.filter(e=>e.activation_state!==`stopped`),r===`stopped`?i:a.filter(e=>e.activation_state===`stopped`),e=>e.id),s=new Map(o.map(e=>[e.id,e.activation_state])),c=r===`active`?t:e,l=r===`stopped`?t:e,u=e.goal_projection?.registry_revision??null,d=t.goal_projection?.registry_revision??null,f=u===null||d===null||u===d;return{...e,agent_management_projection:S_(c.agent_management_projection,l.agent_management_projection,s),attention_queue:__(c.attention_queue,l.attention_queue,s),decision_freshness_summary:h_(c.decision_freshness_summary,l.decision_freshness_summary,s),event_ledger_summary:m_(c.event_ledger_summary,l.event_ledger_summary,s),goal_channel_notification_projection:C_(c.goal_channel_notification_projection,l.goal_channel_notification_projection,s),goal_projection:{schema_version:`loopx_goal_projection_scope_v0`,...t.goal_projection,complete:f,projected_goal_count:o.length,registry_goal_count:t.goal_projection?.registry_goal_count??0,scope:`all`},run_history:{...e.run_history,goal_count:o.length,goals:o,recent_runs:g_(c.run_history.recent_runs,l.run_history.recent_runs),run_count:c.run_history.run_count+l.run_history.run_count},todo_index:b_(c.todo_index,l.todo_index,s),usage_summary:x_(c.usage_summary,l.usage_summary,s)}}function T_(e){var t,n,r=``;if(typeof e==`string`||typeof e==`number`)r+=e;else if(typeof e==`object`){if(Array.isArray(e)){var i=e.length;for(t=0;ttypeof e==`boolean`?`${e}`:e===0?`0`:e,O_=E_,k_=(e,t)=>n=>{if(t?.variants==null)return O_(e,n?.class,n?.className);let{variants:r,defaultVariants:i}=t,a=Object.keys(r).map(e=>{let t=n?.[e],a=i?.[e];if(t===null)return null;let o=D_(t)||D_(a);return r[e][o]}),o=n&&Object.entries(n).reduce((e,t)=>{let[n,r]=t;return r===void 0||(e[n]=r),e},{});return O_(e,a,t?.compoundVariants?.reduce((e,t)=>{let{class:n,className:r,...a}=t;return Object.entries(a).every(e=>{let[t,n]=e;return Array.isArray(n)?n.includes({...i,...o}[t]):{...i,...o}[t]===n})?[...e,n,r]:e},[]),n?.class,n?.className)},A_=(e,t)=>{let n=Array(e.length+t.length);for(let t=0;t({classGroupId:e,validator:t}),M_=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),N_=`-`,P_=[],F_=`arbitrary..`,I_=e=>{let t=z_(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:e=>{if(e.startsWith(`[`)&&e.endsWith(`]`))return R_(e);let n=e.split(N_);return L_(n,+(n[0]===``&&n.length>1),t)},getConflictingClassGroupIds:(e,t)=>{if(t){let t=r[e],i=n[e];return t?i?A_(i,t):t:i||P_}return n[e]||P_}}},L_=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;let r=e[t],i=n.nextPart.get(r);if(i){let n=L_(e,t+1,i);if(n)return n}let a=n.validators;if(a===null)return;let o=t===0?e.join(N_):e.slice(t).join(N_),s=a.length;for(let e=0;ee.slice(1,-1).indexOf(`:`)===-1?void 0:(()=>{let t=e.slice(1,-1),n=t.indexOf(`:`),r=t.slice(0,n);return r?F_+r:void 0})(),z_=e=>{let{theme:t,classGroups:n}=e;return B_(n,t)},B_=(e,t)=>{let n=M_();for(let r in e){let i=e[r];V_(i,n,r,t)}return n},V_=(e,t,n,r)=>{let i=e.length;for(let a=0;a{if(typeof e==`string`){U_(e,t,n);return}if(typeof e==`function`){W_(e,t,n,r);return}G_(e,t,n,r)},U_=(e,t,n)=>{let r=e===``?t:K_(t,e);r.classGroupId=n},W_=(e,t,n,r)=>{if(q_(e)){V_(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(j_(n,e))},G_=(e,t,n,r)=>{let i=Object.entries(e),a=i.length;for(let e=0;e{let n=e,r=t.split(N_),i=r.length;for(let e=0;e`isThemeGetter`in e&&e.isThemeGetter===!0,J_=e=>{if(e<1)return{get:()=>void 0,set:()=>{}};let t=0,n=Object.create(null),r=Object.create(null),i=(i,a)=>{n[i]=a,t++,t>e&&(t=0,r=n,n=Object.create(null))};return{get(e){let t=n[e];if(t!==void 0)return t;if((t=r[e])!==void 0)return i(e,t),t},set(e,t){e in n?n[e]=t:i(e,t)}}},Y_=`!`,X_=`:`,Z_=[],Q_=(e,t,n,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:i}),$_=e=>{let{prefix:t,experimentalParseClassName:n}=e,r=e=>{let t=[],n=0,r=0,i=0,a,o=e.length;for(let s=0;si?a-i:void 0;return Q_(t,l,c,u)};if(t){let e=t+X_,n=r;r=t=>t.startsWith(e)?n(t.slice(e.length)):Q_(Z_,!1,t,void 0,!0)}if(n){let e=r;r=t=>n({className:t,parseClassName:e})}return r},ev=e=>{let t=new Map;return e.orderSensitiveModifiers.forEach((e,n)=>{t.set(e,1e6+n)}),e=>{let n=[],r=[];for(let i=0;i0&&(r.sort(),n.push(...r),r=[]),n.push(a)):r.push(a)}return r.length>0&&(r.sort(),n.push(...r)),n}},tv=e=>({cache:J_(e.cacheSize),parseClassName:$_(e),sortModifiers:ev(e),postfixLookupClassGroupIds:nv(e),...I_(e)}),nv=e=>{let t=Object.create(null),n=e.postfixLookupClassGroups;if(n)for(let e=0;e{let{parseClassName:n,getClassGroupId:r,getConflictingClassGroupIds:i,sortModifiers:a,postfixLookupClassGroupIds:o}=t,s=[],c=e.trim().split(rv),l=``;for(let e=c.length-1;e>=0;--e){let t=c[e],{isExternal:u,modifiers:d,hasImportantModifier:f,baseClassName:p,maybePostfixModifierPosition:m}=n(t);if(u){l=t+(l.length>0?` `+l:l);continue}let h=!!m,g;if(h){g=r(p.substring(0,m));let e=g&&o[g]?r(p):void 0;e&&e!==g&&(g=e,h=!1)}else g=r(p);if(!g){if(!h){l=t+(l.length>0?` `+l:l);continue}if(g=r(p),!g){l=t+(l.length>0?` `+l:l);continue}h=!1}let _=d.length===0?``:d.length===1?d[0]:a(d).join(`:`),v=f?_+Y_:_,y=v+g;if(s.indexOf(y)>-1)continue;s.push(y);let b=i(g,h);for(let e=0;e0?` `+l:l)}return l},av=(...e)=>{let t=0,n,r,i=``;for(;t{if(typeof e==`string`)return e;let t,n=``;for(let r=0;r{let n,r,i,a,o=o=>(n=tv(t.reduce((e,t)=>t(e),e())),r=n.cache.get,i=n.cache.set,a=s,s(o)),s=e=>{let t=r(e);if(t)return t;let a=iv(e,n);return i(e,a),a};return a=o,(...e)=>a(av(...e))},cv=[],lv=e=>{let t=t=>t[e]||cv;return t.isThemeGetter=!0,t},uv=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,dv=/^\((?:(\w[\w-]*):)?(.+)\)$/i,fv=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,pv=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,mv=/\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\b(calc|min|max|clamp)\(.+\)|^0$/,hv=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,gv=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,_v=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,vv=e=>fv.test(e),yv=e=>!!e&&!Number.isNaN(Number(e)),bv=e=>!!e&&Number.isInteger(Number(e)),xv=e=>e.endsWith(`%`)&&yv(e.slice(0,-1)),Sv=e=>pv.test(e),Cv=()=>!0,wv=e=>mv.test(e)&&!hv.test(e),Tv=()=>!1,Ev=e=>gv.test(e),Dv=e=>_v.test(e),Ov=e=>!Q(e)&&!$(e),kv=e=>e.startsWith(`@container`)&&(e[10]===`/`&&e[11]!==void 0||e[11]===`s`&&e[16]!==void 0&&e.startsWith(`-size/`,10)||e[11]===`n`&&e[18]!==void 0&&e.startsWith(`-normal/`,10)),Av=e=>Gv(e,Yv,Tv),Q=e=>uv.test(e),jv=e=>Gv(e,Xv,wv),Mv=e=>Gv(e,Zv,yv),Nv=e=>Gv(e,$v,Cv),Pv=e=>Gv(e,Qv,Tv),Fv=e=>Gv(e,qv,Tv),Iv=e=>Gv(e,Jv,Dv),Lv=e=>Gv(e,ey,Ev),$=e=>dv.test(e),Rv=e=>Kv(e,Xv),zv=e=>Kv(e,Qv),Bv=e=>Kv(e,qv),Vv=e=>Kv(e,Yv),Hv=e=>Kv(e,Jv),Uv=e=>Kv(e,ey,!0),Wv=e=>Kv(e,$v,!0),Gv=(e,t,n)=>{let r=uv.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},Kv=(e,t,n=!1)=>{let r=dv.exec(e);return r?r[1]?t(r[1]):n:!1},qv=e=>e===`position`||e===`percentage`,Jv=e=>e===`image`||e===`url`,Yv=e=>e===`length`||e===`size`||e===`bg-size`,Xv=e=>e===`length`,Zv=e=>e===`number`,Qv=e=>e===`family-name`,$v=e=>e===`number`||e===`weight`,ey=e=>e===`shadow`,ty=sv(()=>{let e=lv(`color`),t=lv(`font`),n=lv(`text`),r=lv(`font-weight`),i=lv(`tracking`),a=lv(`leading`),o=lv(`breakpoint`),s=lv(`container`),c=lv(`spacing`),l=lv(`radius`),u=lv(`shadow`),d=lv(`inset-shadow`),f=lv(`text-shadow`),p=lv(`drop-shadow`),m=lv(`blur`),h=lv(`perspective`),g=lv(`aspect`),_=lv(`ease`),v=lv(`animate`),y=()=>[`auto`,`avoid`,`all`,`avoid-page`,`page`,`left`,`right`,`column`],b=()=>[`center`,`top`,`bottom`,`left`,`right`,`top-left`,`left-top`,`top-right`,`right-top`,`bottom-right`,`right-bottom`,`bottom-left`,`left-bottom`],x=()=>[...b(),$,Q],S=()=>[`auto`,`hidden`,`clip`,`visible`,`scroll`],C=()=>[`auto`,`contain`,`none`],w=()=>[$,Q,c],T=()=>[vv,`full`,`auto`,...w()],E=()=>[bv,`none`,`subgrid`,$,Q],D=()=>[`auto`,{span:[`full`,bv,$,Q]},bv,$,Q],O=()=>[bv,`auto`,$,Q],ee=()=>[`auto`,`min`,`max`,`fr`,$,Q],te=()=>[`start`,`end`,`center`,`between`,`around`,`evenly`,`stretch`,`baseline`,`center-safe`,`end-safe`],ne=()=>[`start`,`end`,`center`,`stretch`,`center-safe`,`end-safe`],k=()=>[`auto`,...w()],A=()=>[vv,`auto`,`full`,`dvw`,`dvh`,`lvw`,`lvh`,`svw`,`svh`,`min`,`max`,`fit`,...w()],j=()=>[vv,`screen`,`full`,`dvw`,`lvw`,`svw`,`min`,`max`,`fit`,...w()],M=()=>[vv,`screen`,`full`,`lh`,`dvh`,`lvh`,`svh`,`min`,`max`,`fit`,...w()],N=()=>[e,$,Q],P=()=>[...b(),Bv,Fv,{position:[$,Q]}],F=()=>[`no-repeat`,{repeat:[``,`x`,`y`,`space`,`round`]}],re=()=>[`auto`,`cover`,`contain`,Vv,Av,{size:[$,Q]}],ie=()=>[xv,Rv,jv],I=()=>[``,`none`,`full`,l,$,Q],ae=()=>[``,yv,Rv,jv],L=()=>[`solid`,`dashed`,`dotted`,`double`],oe=()=>[`normal`,`multiply`,`screen`,`overlay`,`darken`,`lighten`,`color-dodge`,`color-burn`,`hard-light`,`soft-light`,`difference`,`exclusion`,`hue`,`saturation`,`color`,`luminosity`],se=()=>[yv,xv,Bv,Fv],ce=()=>[``,`none`,m,$,Q],le=()=>[`none`,yv,$,Q],ue=()=>[`none`,yv,$,Q],de=()=>[yv,$,Q],fe=()=>[vv,`full`,...w()];return{cacheSize:500,theme:{animate:[`spin`,`ping`,`pulse`,`bounce`],aspect:[`video`],blur:[Sv],breakpoint:[Sv],color:[Cv],container:[Sv],"drop-shadow":[Sv],ease:[`in`,`out`,`in-out`],font:[Ov],"font-weight":[`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`],"inset-shadow":[Sv],leading:[`none`,`tight`,`snug`,`normal`,`relaxed`,`loose`],perspective:[`dramatic`,`near`,`normal`,`midrange`,`distant`,`none`],radius:[Sv],shadow:[Sv],spacing:[`px`,yv],text:[Sv],"text-shadow":[Sv],tracking:[`tighter`,`tight`,`normal`,`wide`,`wider`,`widest`]},classGroups:{aspect:[{aspect:[`auto`,`square`,vv,Q,$,g]}],container:[`container`],"container-type":[{"@container":[``,`normal`,`size`,$,Q]}],"container-named":[kv],columns:[{columns:[yv,Q,$,s]}],"break-after":[{"break-after":y()}],"break-before":[{"break-before":y()}],"break-inside":[{"break-inside":[`auto`,`avoid`,`avoid-page`,`avoid-column`]}],"box-decoration":[{"box-decoration":[`slice`,`clone`]}],box:[{box:[`border`,`content`]}],display:[`block`,`inline-block`,`inline`,`flex`,`inline-flex`,`table`,`inline-table`,`table-caption`,`table-cell`,`table-column`,`table-column-group`,`table-footer-group`,`table-header-group`,`table-row-group`,`table-row`,`flow-root`,`grid`,`inline-grid`,`contents`,`list-item`,`hidden`],sr:[`sr-only`,`not-sr-only`],float:[{float:[`right`,`left`,`none`,`start`,`end`]}],clear:[{clear:[`left`,`right`,`both`,`none`,`start`,`end`]}],isolation:[`isolate`,`isolation-auto`],"object-fit":[{object:[`contain`,`cover`,`fill`,`none`,`scale-down`]}],"object-position":[{object:x()}],overflow:[{overflow:S()}],"overflow-x":[{"overflow-x":S()}],"overflow-y":[{"overflow-y":S()}],overscroll:[{overscroll:C()}],"overscroll-x":[{"overscroll-x":C()}],"overscroll-y":[{"overscroll-y":C()}],position:[`static`,`fixed`,`absolute`,`relative`,`sticky`],inset:[{inset:T()}],"inset-x":[{"inset-x":T()}],"inset-y":[{"inset-y":T()}],start:[{"inset-s":T(),start:T()}],end:[{"inset-e":T(),end:T()}],"inset-bs":[{"inset-bs":T()}],"inset-be":[{"inset-be":T()}],top:[{top:T()}],right:[{right:T()}],bottom:[{bottom:T()}],left:[{left:T()}],visibility:[`visible`,`invisible`,`collapse`],z:[{z:[bv,`auto`,$,Q]}],basis:[{basis:[vv,`full`,`auto`,s,...w()]}],"flex-direction":[{flex:[`row`,`row-reverse`,`col`,`col-reverse`]}],"flex-wrap":[{flex:[`nowrap`,`wrap`,`wrap-reverse`]}],flex:[{flex:[yv,vv,`auto`,`initial`,`none`,Q]}],grow:[{grow:[``,yv,$,Q]}],shrink:[{shrink:[``,yv,$,Q]}],order:[{order:[bv,`first`,`last`,`none`,$,Q]}],"grid-cols":[{"grid-cols":E()}],"col-start-end":[{col:D()}],"col-start":[{"col-start":O()}],"col-end":[{"col-end":O()}],"grid-rows":[{"grid-rows":E()}],"row-start-end":[{row:D()}],"row-start":[{"row-start":O()}],"row-end":[{"row-end":O()}],"grid-flow":[{"grid-flow":[`row`,`col`,`dense`,`row-dense`,`col-dense`]}],"auto-cols":[{"auto-cols":ee()}],"auto-rows":[{"auto-rows":ee()}],gap:[{gap:w()}],"gap-x":[{"gap-x":w()}],"gap-y":[{"gap-y":w()}],"justify-content":[{justify:[...te(),`normal`]}],"justify-items":[{"justify-items":[...ne(),`normal`]}],"justify-self":[{"justify-self":[`auto`,...ne()]}],"align-content":[{content:[`normal`,...te()]}],"align-items":[{items:[...ne(),{baseline:[``,`last`]}]}],"align-self":[{self:[`auto`,...ne(),{baseline:[``,`last`]}]}],"place-content":[{"place-content":te()}],"place-items":[{"place-items":[...ne(),`baseline`]}],"place-self":[{"place-self":[`auto`,...ne()]}],p:[{p:w()}],px:[{px:w()}],py:[{py:w()}],ps:[{ps:w()}],pe:[{pe:w()}],pbs:[{pbs:w()}],pbe:[{pbe:w()}],pt:[{pt:w()}],pr:[{pr:w()}],pb:[{pb:w()}],pl:[{pl:w()}],m:[{m:k()}],mx:[{mx:k()}],my:[{my:k()}],ms:[{ms:k()}],me:[{me:k()}],mbs:[{mbs:k()}],mbe:[{mbe:k()}],mt:[{mt:k()}],mr:[{mr:k()}],mb:[{mb:k()}],ml:[{ml:k()}],"space-x":[{"space-x":w()}],"space-x-reverse":[`space-x-reverse`],"space-y":[{"space-y":w()}],"space-y-reverse":[`space-y-reverse`],size:[{size:A()}],"inline-size":[{inline:[`auto`,...j()]}],"min-inline-size":[{"min-inline":[`auto`,...j()]}],"max-inline-size":[{"max-inline":[`none`,...j()]}],"block-size":[{block:[`auto`,...M()]}],"min-block-size":[{"min-block":[`auto`,...M()]}],"max-block-size":[{"max-block":[`none`,...M()]}],w:[{w:[s,`screen`,...A()]}],"min-w":[{"min-w":[s,`screen`,`none`,...A()]}],"max-w":[{"max-w":[s,`screen`,`none`,`prose`,{screen:[o]},...A()]}],h:[{h:[`screen`,`lh`,...A()]}],"min-h":[{"min-h":[`screen`,`lh`,`none`,...A()]}],"max-h":[{"max-h":[`screen`,`lh`,...A()]}],"font-size":[{text:[`base`,n,Rv,jv]}],"font-smoothing":[`antialiased`,`subpixel-antialiased`],"font-style":[`italic`,`not-italic`],"font-weight":[{font:[r,Wv,Nv]}],"font-stretch":[{"font-stretch":[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`,xv,Q]}],"font-family":[{font:[zv,Pv,t]}],"font-features":[{"font-features":[Q]}],"fvn-normal":[`normal-nums`],"fvn-ordinal":[`ordinal`],"fvn-slashed-zero":[`slashed-zero`],"fvn-figure":[`lining-nums`,`oldstyle-nums`],"fvn-spacing":[`proportional-nums`,`tabular-nums`],"fvn-fraction":[`diagonal-fractions`,`stacked-fractions`],tracking:[{tracking:[i,$,Q]}],"line-clamp":[{"line-clamp":[yv,`none`,$,Mv]}],leading:[{leading:[a,...w()]}],"list-image":[{"list-image":[`none`,$,Q]}],"list-style-position":[{list:[`inside`,`outside`]}],"list-style-type":[{list:[`disc`,`decimal`,`none`,$,Q]}],"text-alignment":[{text:[`left`,`center`,`right`,`justify`,`start`,`end`]}],"placeholder-color":[{placeholder:N()}],"text-color":[{text:N()}],"text-decoration":[`underline`,`overline`,`line-through`,`no-underline`],"text-decoration-style":[{decoration:[...L(),`wavy`]}],"text-decoration-thickness":[{decoration:[yv,`from-font`,`auto`,$,jv]}],"text-decoration-color":[{decoration:N()}],"underline-offset":[{"underline-offset":[yv,`auto`,$,Q]}],"text-transform":[`uppercase`,`lowercase`,`capitalize`,`normal-case`],"text-overflow":[`truncate`,`text-ellipsis`,`text-clip`],"text-wrap":[{text:[`wrap`,`nowrap`,`balance`,`pretty`]}],indent:[{indent:w()}],"tab-size":[{tab:[bv,$,Q]}],"vertical-align":[{align:[`baseline`,`top`,`middle`,`bottom`,`text-top`,`text-bottom`,`sub`,`super`,$,Q]}],whitespace:[{whitespace:[`normal`,`nowrap`,`pre`,`pre-line`,`pre-wrap`,`break-spaces`]}],break:[{break:[`normal`,`words`,`all`,`keep`]}],wrap:[{wrap:[`break-word`,`anywhere`,`normal`]}],hyphens:[{hyphens:[`none`,`manual`,`auto`]}],content:[{content:[`none`,$,Q]}],"bg-attachment":[{bg:[`fixed`,`local`,`scroll`]}],"bg-clip":[{"bg-clip":[`border`,`padding`,`content`,`text`]}],"bg-origin":[{"bg-origin":[`border`,`padding`,`content`]}],"bg-position":[{bg:P()}],"bg-repeat":[{bg:F()}],"bg-size":[{bg:re()}],"bg-image":[{bg:[`none`,{linear:[{to:[`t`,`tr`,`r`,`br`,`b`,`bl`,`l`,`tl`]},bv,$,Q],radial:[``,$,Q],conic:[bv,$,Q]},Hv,Iv]}],"bg-color":[{bg:N()}],"gradient-from-pos":[{from:ie()}],"gradient-via-pos":[{via:ie()}],"gradient-to-pos":[{to:ie()}],"gradient-from":[{from:N()}],"gradient-via":[{via:N()}],"gradient-to":[{to:N()}],rounded:[{rounded:I()}],"rounded-s":[{"rounded-s":I()}],"rounded-e":[{"rounded-e":I()}],"rounded-t":[{"rounded-t":I()}],"rounded-r":[{"rounded-r":I()}],"rounded-b":[{"rounded-b":I()}],"rounded-l":[{"rounded-l":I()}],"rounded-ss":[{"rounded-ss":I()}],"rounded-se":[{"rounded-se":I()}],"rounded-ee":[{"rounded-ee":I()}],"rounded-es":[{"rounded-es":I()}],"rounded-tl":[{"rounded-tl":I()}],"rounded-tr":[{"rounded-tr":I()}],"rounded-br":[{"rounded-br":I()}],"rounded-bl":[{"rounded-bl":I()}],"border-w":[{border:ae()}],"border-w-x":[{"border-x":ae()}],"border-w-y":[{"border-y":ae()}],"border-w-s":[{"border-s":ae()}],"border-w-e":[{"border-e":ae()}],"border-w-bs":[{"border-bs":ae()}],"border-w-be":[{"border-be":ae()}],"border-w-t":[{"border-t":ae()}],"border-w-r":[{"border-r":ae()}],"border-w-b":[{"border-b":ae()}],"border-w-l":[{"border-l":ae()}],"divide-x":[{"divide-x":ae()}],"divide-x-reverse":[`divide-x-reverse`],"divide-y":[{"divide-y":ae()}],"divide-y-reverse":[`divide-y-reverse`],"border-style":[{border:[...L(),`hidden`,`none`]}],"divide-style":[{divide:[...L(),`hidden`,`none`]}],"border-color":[{border:N()}],"border-color-x":[{"border-x":N()}],"border-color-y":[{"border-y":N()}],"border-color-s":[{"border-s":N()}],"border-color-e":[{"border-e":N()}],"border-color-bs":[{"border-bs":N()}],"border-color-be":[{"border-be":N()}],"border-color-t":[{"border-t":N()}],"border-color-r":[{"border-r":N()}],"border-color-b":[{"border-b":N()}],"border-color-l":[{"border-l":N()}],"divide-color":[{divide:N()}],"outline-style":[{outline:[...L(),`none`,`hidden`]}],"outline-offset":[{"outline-offset":[yv,$,Q]}],"outline-w":[{outline:[``,yv,Rv,jv]}],"outline-color":[{outline:N()}],shadow:[{shadow:[``,`none`,u,Uv,Lv]}],"shadow-color":[{shadow:N()}],"inset-shadow":[{"inset-shadow":[`none`,d,Uv,Lv]}],"inset-shadow-color":[{"inset-shadow":N()}],"ring-w":[{ring:ae()}],"ring-w-inset":[`ring-inset`],"ring-color":[{ring:N()}],"ring-offset-w":[{"ring-offset":[yv,jv]}],"ring-offset-color":[{"ring-offset":N()}],"inset-ring-w":[{"inset-ring":ae()}],"inset-ring-color":[{"inset-ring":N()}],"text-shadow":[{"text-shadow":[`none`,f,Uv,Lv]}],"text-shadow-color":[{"text-shadow":N()}],opacity:[{opacity:[yv,$,Q]}],"mix-blend":[{"mix-blend":[...oe(),`plus-darker`,`plus-lighter`]}],"bg-blend":[{"bg-blend":oe()}],"mask-clip":[{"mask-clip":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]},`mask-no-clip`],"mask-composite":[{mask:[`add`,`subtract`,`intersect`,`exclude`]}],"mask-image-linear-pos":[{"mask-linear":[yv]}],"mask-image-linear-from-pos":[{"mask-linear-from":se()}],"mask-image-linear-to-pos":[{"mask-linear-to":se()}],"mask-image-linear-from-color":[{"mask-linear-from":N()}],"mask-image-linear-to-color":[{"mask-linear-to":N()}],"mask-image-t-from-pos":[{"mask-t-from":se()}],"mask-image-t-to-pos":[{"mask-t-to":se()}],"mask-image-t-from-color":[{"mask-t-from":N()}],"mask-image-t-to-color":[{"mask-t-to":N()}],"mask-image-r-from-pos":[{"mask-r-from":se()}],"mask-image-r-to-pos":[{"mask-r-to":se()}],"mask-image-r-from-color":[{"mask-r-from":N()}],"mask-image-r-to-color":[{"mask-r-to":N()}],"mask-image-b-from-pos":[{"mask-b-from":se()}],"mask-image-b-to-pos":[{"mask-b-to":se()}],"mask-image-b-from-color":[{"mask-b-from":N()}],"mask-image-b-to-color":[{"mask-b-to":N()}],"mask-image-l-from-pos":[{"mask-l-from":se()}],"mask-image-l-to-pos":[{"mask-l-to":se()}],"mask-image-l-from-color":[{"mask-l-from":N()}],"mask-image-l-to-color":[{"mask-l-to":N()}],"mask-image-x-from-pos":[{"mask-x-from":se()}],"mask-image-x-to-pos":[{"mask-x-to":se()}],"mask-image-x-from-color":[{"mask-x-from":N()}],"mask-image-x-to-color":[{"mask-x-to":N()}],"mask-image-y-from-pos":[{"mask-y-from":se()}],"mask-image-y-to-pos":[{"mask-y-to":se()}],"mask-image-y-from-color":[{"mask-y-from":N()}],"mask-image-y-to-color":[{"mask-y-to":N()}],"mask-image-radial":[{"mask-radial":[$,Q]}],"mask-image-radial-from-pos":[{"mask-radial-from":se()}],"mask-image-radial-to-pos":[{"mask-radial-to":se()}],"mask-image-radial-from-color":[{"mask-radial-from":N()}],"mask-image-radial-to-color":[{"mask-radial-to":N()}],"mask-image-radial-shape":[{"mask-radial":[`circle`,`ellipse`]}],"mask-image-radial-size":[{"mask-radial":[{closest:[`side`,`corner`],farthest:[`side`,`corner`]}]}],"mask-image-radial-pos":[{"mask-radial-at":b()}],"mask-image-conic-pos":[{"mask-conic":[yv]}],"mask-image-conic-from-pos":[{"mask-conic-from":se()}],"mask-image-conic-to-pos":[{"mask-conic-to":se()}],"mask-image-conic-from-color":[{"mask-conic-from":N()}],"mask-image-conic-to-color":[{"mask-conic-to":N()}],"mask-mode":[{mask:[`alpha`,`luminance`,`match`]}],"mask-origin":[{"mask-origin":[`border`,`padding`,`content`,`fill`,`stroke`,`view`]}],"mask-position":[{mask:P()}],"mask-repeat":[{mask:F()}],"mask-size":[{mask:re()}],"mask-type":[{"mask-type":[`alpha`,`luminance`]}],"mask-image":[{mask:[`none`,$,Q]}],filter:[{filter:[``,`none`,$,Q]}],blur:[{blur:ce()}],brightness:[{brightness:[yv,$,Q]}],contrast:[{contrast:[yv,$,Q]}],"drop-shadow":[{"drop-shadow":[``,`none`,p,Uv,Lv]}],"drop-shadow-color":[{"drop-shadow":N()}],grayscale:[{grayscale:[``,yv,$,Q]}],"hue-rotate":[{"hue-rotate":[yv,$,Q]}],invert:[{invert:[``,yv,$,Q]}],saturate:[{saturate:[yv,$,Q]}],sepia:[{sepia:[``,yv,$,Q]}],"backdrop-filter":[{"backdrop-filter":[``,`none`,$,Q]}],"backdrop-blur":[{"backdrop-blur":ce()}],"backdrop-brightness":[{"backdrop-brightness":[yv,$,Q]}],"backdrop-contrast":[{"backdrop-contrast":[yv,$,Q]}],"backdrop-grayscale":[{"backdrop-grayscale":[``,yv,$,Q]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[yv,$,Q]}],"backdrop-invert":[{"backdrop-invert":[``,yv,$,Q]}],"backdrop-opacity":[{"backdrop-opacity":[yv,$,Q]}],"backdrop-saturate":[{"backdrop-saturate":[yv,$,Q]}],"backdrop-sepia":[{"backdrop-sepia":[``,yv,$,Q]}],"border-collapse":[{border:[`collapse`,`separate`]}],"border-spacing":[{"border-spacing":w()}],"border-spacing-x":[{"border-spacing-x":w()}],"border-spacing-y":[{"border-spacing-y":w()}],"table-layout":[{table:[`auto`,`fixed`]}],caption:[{caption:[`top`,`bottom`]}],transition:[{transition:[``,`all`,`colors`,`opacity`,`shadow`,`transform`,`none`,$,Q]}],"transition-behavior":[{transition:[`normal`,`discrete`]}],duration:[{duration:[yv,`initial`,$,Q]}],ease:[{ease:[`linear`,`initial`,_,$,Q]}],delay:[{delay:[yv,$,Q]}],animate:[{animate:[`none`,v,$,Q]}],backface:[{backface:[`hidden`,`visible`]}],perspective:[{perspective:[h,$,Q]}],"perspective-origin":[{"perspective-origin":x()}],rotate:[{rotate:le()}],"rotate-x":[{"rotate-x":le()}],"rotate-y":[{"rotate-y":le()}],"rotate-z":[{"rotate-z":le()}],scale:[{scale:ue()}],"scale-x":[{"scale-x":ue()}],"scale-y":[{"scale-y":ue()}],"scale-z":[{"scale-z":ue()}],"scale-3d":[`scale-3d`],skew:[{skew:de()}],"skew-x":[{"skew-x":de()}],"skew-y":[{"skew-y":de()}],transform:[{transform:[$,Q,``,`none`,`gpu`,`cpu`]}],"transform-origin":[{origin:x()}],"transform-style":[{transform:[`3d`,`flat`]}],translate:[{translate:fe()}],"translate-x":[{"translate-x":fe()}],"translate-y":[{"translate-y":fe()}],"translate-z":[{"translate-z":fe()}],"translate-none":[`translate-none`],zoom:[{zoom:[bv,$,Q]}],accent:[{accent:N()}],appearance:[{appearance:[`none`,`auto`]}],"caret-color":[{caret:N()}],"color-scheme":[{scheme:[`normal`,`dark`,`light`,`light-dark`,`only-dark`,`only-light`]}],cursor:[{cursor:[`auto`,`default`,`pointer`,`wait`,`text`,`move`,`help`,`not-allowed`,`none`,`context-menu`,`progress`,`cell`,`crosshair`,`vertical-text`,`alias`,`copy`,`no-drop`,`grab`,`grabbing`,`all-scroll`,`col-resize`,`row-resize`,`n-resize`,`e-resize`,`s-resize`,`w-resize`,`ne-resize`,`nw-resize`,`se-resize`,`sw-resize`,`ew-resize`,`ns-resize`,`nesw-resize`,`nwse-resize`,`zoom-in`,`zoom-out`,$,Q]}],"field-sizing":[{"field-sizing":[`fixed`,`content`]}],"pointer-events":[{"pointer-events":[`auto`,`none`]}],resize:[{resize:[`none`,``,`y`,`x`]}],"scroll-behavior":[{scroll:[`auto`,`smooth`]}],"scrollbar-thumb-color":[{"scrollbar-thumb":N()}],"scrollbar-track-color":[{"scrollbar-track":N()}],"scrollbar-gutter":[{"scrollbar-gutter":[`auto`,`stable`,`both`]}],"scrollbar-w":[{scrollbar:[`auto`,`thin`,`none`]}],"scroll-m":[{"scroll-m":w()}],"scroll-mx":[{"scroll-mx":w()}],"scroll-my":[{"scroll-my":w()}],"scroll-ms":[{"scroll-ms":w()}],"scroll-me":[{"scroll-me":w()}],"scroll-mbs":[{"scroll-mbs":w()}],"scroll-mbe":[{"scroll-mbe":w()}],"scroll-mt":[{"scroll-mt":w()}],"scroll-mr":[{"scroll-mr":w()}],"scroll-mb":[{"scroll-mb":w()}],"scroll-ml":[{"scroll-ml":w()}],"scroll-p":[{"scroll-p":w()}],"scroll-px":[{"scroll-px":w()}],"scroll-py":[{"scroll-py":w()}],"scroll-ps":[{"scroll-ps":w()}],"scroll-pe":[{"scroll-pe":w()}],"scroll-pbs":[{"scroll-pbs":w()}],"scroll-pbe":[{"scroll-pbe":w()}],"scroll-pt":[{"scroll-pt":w()}],"scroll-pr":[{"scroll-pr":w()}],"scroll-pb":[{"scroll-pb":w()}],"scroll-pl":[{"scroll-pl":w()}],"snap-align":[{snap:[`start`,`end`,`center`,`align-none`]}],"snap-stop":[{snap:[`normal`,`always`]}],"snap-type":[{snap:[`none`,`x`,`y`,`both`]}],"snap-strictness":[{snap:[`mandatory`,`proximity`]}],touch:[{touch:[`auto`,`none`,`manipulation`]}],"touch-x":[{"touch-pan":[`x`,`left`,`right`]}],"touch-y":[{"touch-pan":[`y`,`up`,`down`]}],"touch-pz":[`touch-pinch-zoom`],select:[{select:[`none`,`text`,`all`,`auto`]}],"will-change":[{"will-change":[`auto`,`scroll`,`contents`,`transform`,$,Q]}],fill:[{fill:[`none`,...N()]}],"stroke-w":[{stroke:[yv,Rv,jv,Mv]}],stroke:[{stroke:[`none`,...N()]}],"forced-color-adjust":[{"forced-color-adjust":[`auto`,`none`]}]},conflictingClassGroups:{"container-named":[`container-type`],overflow:[`overflow-x`,`overflow-y`],overscroll:[`overscroll-x`,`overscroll-y`],inset:[`inset-x`,`inset-y`,`inset-bs`,`inset-be`,`start`,`end`,`top`,`right`,`bottom`,`left`],"inset-x":[`right`,`left`],"inset-y":[`top`,`bottom`],flex:[`basis`,`grow`,`shrink`],gap:[`gap-x`,`gap-y`],p:[`px`,`py`,`ps`,`pe`,`pbs`,`pbe`,`pt`,`pr`,`pb`,`pl`],px:[`pr`,`pl`],py:[`pt`,`pb`],m:[`mx`,`my`,`ms`,`me`,`mbs`,`mbe`,`mt`,`mr`,`mb`,`ml`],mx:[`mr`,`ml`],my:[`mt`,`mb`],size:[`w`,`h`],"font-size":[`leading`],"fvn-normal":[`fvn-ordinal`,`fvn-slashed-zero`,`fvn-figure`,`fvn-spacing`,`fvn-fraction`],"fvn-ordinal":[`fvn-normal`],"fvn-slashed-zero":[`fvn-normal`],"fvn-figure":[`fvn-normal`],"fvn-spacing":[`fvn-normal`],"fvn-fraction":[`fvn-normal`],"line-clamp":[`display`,`overflow`],rounded:[`rounded-s`,`rounded-e`,`rounded-t`,`rounded-r`,`rounded-b`,`rounded-l`,`rounded-ss`,`rounded-se`,`rounded-ee`,`rounded-es`,`rounded-tl`,`rounded-tr`,`rounded-br`,`rounded-bl`],"rounded-s":[`rounded-ss`,`rounded-es`],"rounded-e":[`rounded-se`,`rounded-ee`],"rounded-t":[`rounded-tl`,`rounded-tr`],"rounded-r":[`rounded-tr`,`rounded-br`],"rounded-b":[`rounded-br`,`rounded-bl`],"rounded-l":[`rounded-tl`,`rounded-bl`],"border-spacing":[`border-spacing-x`,`border-spacing-y`],"border-w":[`border-w-x`,`border-w-y`,`border-w-s`,`border-w-e`,`border-w-bs`,`border-w-be`,`border-w-t`,`border-w-r`,`border-w-b`,`border-w-l`],"border-w-x":[`border-w-r`,`border-w-l`],"border-w-y":[`border-w-t`,`border-w-b`],"border-color":[`border-color-x`,`border-color-y`,`border-color-s`,`border-color-e`,`border-color-bs`,`border-color-be`,`border-color-t`,`border-color-r`,`border-color-b`,`border-color-l`],"border-color-x":[`border-color-r`,`border-color-l`],"border-color-y":[`border-color-t`,`border-color-b`],translate:[`translate-x`,`translate-y`,`translate-none`],"translate-none":[`translate`,`translate-x`,`translate-y`,`translate-z`],"scroll-m":[`scroll-mx`,`scroll-my`,`scroll-ms`,`scroll-me`,`scroll-mbs`,`scroll-mbe`,`scroll-mt`,`scroll-mr`,`scroll-mb`,`scroll-ml`],"scroll-mx":[`scroll-mr`,`scroll-ml`],"scroll-my":[`scroll-mt`,`scroll-mb`],"scroll-p":[`scroll-px`,`scroll-py`,`scroll-ps`,`scroll-pe`,`scroll-pbs`,`scroll-pbe`,`scroll-pt`,`scroll-pr`,`scroll-pb`,`scroll-pl`],"scroll-px":[`scroll-pr`,`scroll-pl`],"scroll-py":[`scroll-pt`,`scroll-pb`],touch:[`touch-x`,`touch-y`,`touch-pz`],"touch-x":[`touch`],"touch-y":[`touch`],"touch-pz":[`touch`]},conflictingClassGroupModifiers:{"font-size":[`leading`]},postfixLookupClassGroups:[`container-type`],orderSensitiveModifiers:[`*`,`**`,`after`,`backdrop`,`before`,`details-content`,`file`,`first-letter`,`first-line`,`marker`,`placeholder`,`selection`]}});function ny(...e){return ty(E_(e))}var ry=k_(`inline-flex h-9 shrink-0 items-center justify-center gap-2 whitespace-nowrap rounded-md border px-3 text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-slate-400 disabled:pointer-events-none disabled:opacity-50 dark:focus-visible:ring-zinc-500`,{variants:{variant:{primary:`border-slate-900 bg-slate-950 text-white hover:bg-slate-800 dark:border-zinc-100 dark:bg-zinc-50 dark:text-zinc-950 dark:hover:bg-zinc-200`,secondary:`border-slate-200 bg-white text-slate-900 hover:bg-slate-50 dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-100 dark:hover:bg-zinc-900`,ghost:`border-transparent bg-transparent text-slate-700 hover:bg-slate-100 dark:text-zinc-300 dark:hover:bg-zinc-900`},size:{sm:`h-8 px-2 text-xs`,md:`h-9 px-3 text-sm`,icon:`h-9 w-9 px-0`}},defaultVariants:{variant:`secondary`,size:`md`}});function iy({className:e,variant:t,size:n,...r}){return(0,B.jsx)(`button`,{className:ny(ry({variant:t,size:n}),e),type:`button`,...r})}function ay({className:e,...t}){return(0,B.jsx)(`section`,{className:ny(`rounded-lg border border-slate-200/80 bg-white/95 text-slate-950 shadow-[0_1px_2px_rgba(15,23,42,0.04)] dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-50`,e),...t})}function oy({className:e,...t}){return(0,B.jsx)(`div`,{className:ny(`p-4 pt-0`,e),...t})}var sy=[`codex`,`claude`,`kiro`,`trae`,`coco`,`openai`,`anthropic`],cy=new Set([`acp`,`status_projection`]);function ly(e){let t=e.trim().toLowerCase().replace(/_/gu,`-`);for(let e of sy)if(t===e||t.startsWith(`${e}-`))return e;return t}function uy(e,t){let n=t?.trim().toLowerCase()??``;return n.length>0&&!cy.has(n)?ly(n):ly(e)}var dy={stop:`ready_stop`,resume:`resume_review`,delete:`delete_review`},fy=e=>typeof e==`string`&&e.trim().length>0;function py(e){let t={schemaVersion:`action_review_plan_v0`,proposalId:e.proposal_id,sourceFingerprint:e.expected_state_fingerprint},n=(e,n)=>({...t,interaction:e,reason:n,canApply:!1}),r=e.action_kind===`goal.lifecycle`;if(r&&e.gate!=null||e.status===`gated`)return n(`gated`,`authority_gate`);if(r&&e.stale!=null||e.status===`stale`)return n(`refresh`,`stale_proposal`);if(e.status===`applied`)return e.receipt?.projection_verified===!0&&(e.action_kind!==`operation.execute`||e.operation?.result_delivery!=null)?n(`completed`,`readback_verified`):n(`repair`,`readback_unverified`);if(e.status===`applying`)return n(`pending`,`apply_pending`);if(e.status===`failed`||e.error!=null)return n(`repair`,`apply_failed`);if(e.status!==`preview_ready`&&e.status!==`deferred`)return n(`inactive`,`inactive_proposal`);let i=(e,n=!0)=>({...t,interaction:`review`,reason:e,canApply:n});if(e.action_kind!==`goal.lifecycle`)return i(e.permission_classification===`protected`?`protected_action`:`action_review`);if(!(fy(e.proposal_id)&&fy(e.expected_state_fingerprint)&&kh.shape.validation_evidence.safeParse(e.validation_evidence).success&&e.validation_evidence.length>0&&e.available_transitions.includes(`apply`)))return n(`refresh`,`incomplete_proposal`);let{operation:a,goal_id:o}=e.normalized_parameters;if(!fy(o)||e.context.goal_id!=null&&e.context.goal_id!==o)return n(`refresh`,`incomplete_proposal`);if(a!==`stop`&&a!==`resume`&&a!==`delete`)return i(`unknown_action`,!1);if(e.permission_classification===`protected`)return i(`protected_action`);if(e.permission_classification!==`durable_write`)return i(`unknown_permission`,!1);let s=dy[a];return s===`ready_stop`&&e.status===`preview_ready`?{...t,interaction:`direct`,reason:s,canApply:!0}:i(s===`ready_stop`?`action_review`:s)}function my(e){if(e.error_code===`action_stale`||e.error_code===`action_conflict`)return!0;let t=e.proposal;return typeof t==`object`&&!!t&&`status`in t&&t.status===`stale`}function hy(e){return{blockingTodoCount:e.blockingTodoCount,goalNotifications:e.goalNotifications,goals:e.goals,openUserTodoCount:e.openUserTodoCount,systemHealth:e.systemHealth,attentionHistory:e.attentionHistory,userTodos:e.userTodos,workers:e.workers}}function gy(e,t){return e.goals.find(e=>e.goalId===t)?.title??t}function _y(e){return e.activationState===`stopped`||e.state===`已停止`?`stopped`:e.state===`已完成`?`history`:e.needsYou||e.state===`等你`?`needs_you`:e.state===`推进中`||e.state===`需修复`?`running`:e.state===`安静运行`?`observing`:`scheduled`}function vy(e){let t=e;return t>=1e6?`${(t/1e6).toFixed(1)}M`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}function yy(e){return`$${e.toFixed(2)}`}function by(e){let t=e;return t>=36e5?`${(t/36e5).toFixed(1)}h`:t>=6e4?`${(t/6e4).toFixed(1)}m`:t>=1e3?`${Math.round(t/1e3)}s`:`${t}ms`}function xy(e,t,n){return e==null?t:n(e)}function Sy(e){return!!(e&&[e.tokens24h,e.tokens7d,e.costUsd24h,e.costUsd7d,e.durationMs24h,e.durationMs7d].some(e=>e!=null))}function Cy(e,t){if(!Sy(e))return null;let n=(e,n,r,i)=>{let a=[n==null?null:`${vy(n)} ${t.tokens}`,r==null?null:`${t.cost}: ${yy(r)}`,i==null?null:`${t.duration}: ${by(i)}`].filter(e=>e!==null);return a.length?`${e} ${a.join(` · `)}`:null};return n(t.period7d,e.tokens7d,e.costUsd7d,e.durationMs7d)??n(t.period24h,e.tokens24h,e.costUsd24h,e.durationMs24h)}function wy({ariaLabel:e,className:t,icon:n,onChange:r,options:i,prefixLabel:a,value:o}){let s=(0,z.useId)(),c=(0,z.useRef)(null),l=(0,z.useRef)(null),u=(0,z.useRef)(new Map),[d,f]=(0,z.useState)(!1),[p,m]=(0,z.useState)(o),h=i.find(e=>e.value===o)??i[0],g=i.filter(e=>!e.disabled);(0,z.useEffect)(()=>{if(!d)return;let e=e=>{c.current?.contains(e.target)||f(!1)};return document.addEventListener(`pointerdown`,e),()=>document.removeEventListener(`pointerdown`,e)},[d]),(0,z.useEffect)(()=>{d&&u.current.get(p)?.focus()},[p,d]);function _(e){m(e)}function v(e=`selected`){let t=e===`last`?g.at(-1):g[0],n=e===`selected`&&h&&!h.disabled?h:t;n&&(f(!0),_(n.value))}function y({restoreFocus:e=!1}={}){f(!1),e&&l.current?.focus()}function b(e){e.disabled||(r(e.value),y({restoreFocus:!0}))}function x(e){if(!g.length)return;let t=g.findIndex(e=>e.value===p),n=t<0?0:(t+e+g.length)%g.length;_(g[n].value)}function S(e){e.key===`ArrowDown`||e.key===`Enter`||e.key===` `?(e.preventDefault(),v(`selected`)):e.key===`ArrowUp`&&(e.preventDefault(),v(`last`))}function C(e,t){if(e.key===`ArrowDown`)e.preventDefault(),x(1);else if(e.key===`ArrowUp`)e.preventDefault(),x(-1);else if(e.key===`Home`)e.preventDefault(),g[0]&&_(g[0].value);else if(e.key===`End`){e.preventDefault();let t=g.at(-1);t&&_(t.value)}else e.key===`Enter`||e.key===` `?(e.preventDefault(),b(t)):e.key===`Escape`?(e.preventDefault(),y({restoreFocus:!0})):e.key===`Tab`&&y()}let w;return(0,B.jsxs)(`div`,{className:`personal-select${t?` ${t}`:``}`,ref:c,children:[(0,B.jsxs)(`button`,{"aria-controls":s,"aria-expanded":d,"aria-haspopup":`listbox`,"aria-label":e,className:`personal-select-trigger`,"data-value":o,onClick:()=>d?y():v(),onKeyDown:S,ref:l,role:`combobox`,type:`button`,children:[n?(0,B.jsx)(`span`,{className:`personal-select-icon`,children:n}):null,(0,B.jsxs)(`span`,{className:`personal-select-value`,children:[a?(0,B.jsx)(`small`,{children:a}):null,(0,B.jsx)(`span`,{children:h?.label??o})]}),(0,B.jsx)(nm,{"aria-hidden":!0,className:d?`is-open`:void 0,size:14})]}),d?(0,B.jsx)(`div`,{"aria-label":e,className:`personal-select-listbox`,id:s,role:`listbox`,children:i.map(e=>{let t=e.group&&e.group!==w;return w=e.group,(0,B.jsxs)(`div`,{className:`personal-select-option-wrap`,children:[t?(0,B.jsx)(`div`,{className:`personal-select-group-label`,children:e.group}):null,(0,B.jsxs)(`button`,{"aria-disabled":e.disabled||void 0,"aria-selected":e.value===o,className:`personal-select-option`,disabled:e.disabled,id:`${s}-${e.value.replace(/[^a-z0-9_-]/gi,`-`)}`,onClick:()=>b(e),onFocus:()=>m(e.value),onKeyDown:t=>C(t,e),ref:t=>{t?u.current.set(e.value,t):u.current.delete(e.value)},role:`option`,tabIndex:e.value===p?0:-1,type:`button`,children:[(0,B.jsx)(`span`,{children:e.label}),e.value===o?(0,B.jsx)(tm,{"aria-hidden":!0,size:15}):null]})]},e.value)})}):null]})}function Ty({agents:e,managerChatOpen:t,mobileNavigationOpen:n,onOpenGoalCapabilities:r,onOpenGoalDetail:i,onOpenManagerChat:a,onRefresh:o,onOpenNavigation:s,onSelectGoalTab:c,onSelectAgent:l,onReturnManagerHome:u,refreshState:d,readOnlySourceLabel:f,selectedAgentId:p,selectedGoal:m,selectedGoalTab:h}){let{locale:g,t:_}=Ji(),[v,y]=(0,z.useState)(!1),b=(0,z.useRef)(null),x=(0,z.useRef)(null);(0,z.useEffect)(()=>{if(!v)return;function e(e){x.current?.contains(e.target)||y(!1)}function t(e){e.key===`Escape`&&(y(!1),b.current?.focus())}return document.addEventListener(`pointerdown`,e),document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`pointerdown`,e),document.removeEventListener(`keydown`,t)}},[v]),(0,z.useEffect)(()=>y(!1),[m?.goalId]);function S(e){y(!1),e?.()}let C=m?Cy(m.usage,{cost:_(`drawer.costShort`),duration:_(`drawer.durationShort`),period24h:_(`drawer.period24h`),period7d:_(`drawer.period7d`),tokens:_(`drawer.tokensShort`)}):null;return(0,B.jsxs)(`header`,{className:`personal-channel-header`,children:[(0,B.jsx)(`button`,{"aria-expanded":n??!1,"aria-label":_(`header.openGoalNavigation`),className:`personal-icon-button personal-mobile-menu`,onClick:s,type:`button`,children:(0,B.jsx)(Em,{size:18})}),(0,B.jsxs)(`div`,{className:`personal-channel-title`,children:[(0,B.jsx)(`h1`,{children:m?.title??_(`header.manager`)}),m?(0,B.jsx)(`p`,{children:m.loadState?_(m.loadState===`error`?`startup.goalError`:`startup.goalLoading`):`${m.agentLaneCount&&m.agentLaneCount>1?_(`header.workAgentCount`,{count:m.agentLaneCount}):m.agentLabel??m.agentId} · ${m.loadState?_(m.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(m.state,g)}${C?` · ${C}`:``} · ${m.nextSentence}`}):null]}),m?(0,B.jsxs)(`nav`,{"aria-label":_(`header.goalView`),className:`personal-goal-tabs`,children:[(0,B.jsx)(`button`,{"aria-current":h===`chat`?`page`:void 0,onClick:()=>c(`chat`),type:`button`,children:_(`header.chat`)}),(0,B.jsx)(`button`,{"aria-current":h===`tasks`?`page`:void 0,onClick:()=>c(`tasks`),type:`button`,children:_(`header.tasks`)}),(0,B.jsx)(`button`,{"aria-current":h===`files`?`page`:void 0,onClick:()=>c(`files`),type:`button`,children:_(`header.files`)})]}):(0,B.jsxs)(`nav`,{"aria-label":_(`header.managerView`),className:`personal-goal-tabs`,children:[(0,B.jsx)(`button`,{"aria-current":t?void 0:`page`,onClick:u,type:`button`,children:_(`header.managerOverview`)}),(0,B.jsx)(`button`,{"aria-current":t?`page`:void 0,onClick:a,type:`button`,children:_(`header.chat`)})]}),(0,B.jsxs)(`div`,{className:`personal-channel-actions`,children:[m&&i&&r?(0,B.jsxs)(`div`,{className:`personal-goal-tools`,ref:x,children:[(0,B.jsxs)(`button`,{"aria-expanded":v,"aria-haspopup":`menu`,"aria-label":_(`header.goalSettingsDescription`),className:`personal-goal-tools-trigger`,onClick:()=>y(e=>!e),ref:b,title:_(`header.goalSettingsDescription`),type:`button`,children:[(0,B.jsx)(Km,{"aria-hidden":!0,size:16}),(0,B.jsx)(`span`,{children:_(`header.goalSettings`)}),(0,B.jsx)(nm,{"aria-hidden":!0,size:13})]}),v?(0,B.jsxs)(`fieldset`,{"aria-label":_(`header.goalSettings`),className:`personal-goal-tools-menu`,children:[(0,B.jsxs)(`button`,{onClick:()=>S(i),type:`button`,children:[(0,B.jsx)(bm,{"aria-hidden":!0,size:17}),(0,B.jsx)(`span`,{children:(0,B.jsx)(`strong`,{children:_(`header.goalDetails`)})})]}),(0,B.jsxs)(`button`,{onClick:()=>S(r),type:`button`,children:[(0,B.jsx)(Km,{"aria-hidden":!0,size:17}),(0,B.jsx)(`span`,{children:(0,B.jsx)(`strong`,{children:_(`header.goalCapabilities`)})})]})]}):null]}):null,f?(0,B.jsxs)(`span`,{className:`personal-read-only-source`,title:_(`header.readOnlySourceDescription`,{source:f}),children:[(0,B.jsx)(mm,{size:15}),f,(0,B.jsx)(`small`,{children:_(`common.readOnly`)})]}):(0,B.jsx)(wy,{ariaLabel:_(`header.selectChatRuntime`),className:`personal-agent-select`,icon:(0,B.jsx)(Qp,{size:16}),onChange:l,options:e.map(e=>({disabled:!e.available,label:`${e.label}${e.available?``:` · ${_(`header.agentUnavailable`)}`}`,value:e.agentId})),prefixLabel:_(`header.chatRuntime`),value:p}),(0,B.jsxs)(`span`,{className:`personal-live-indicator`,children:[(0,B.jsx)(`i`,{}),_(`header.live`)]}),o?(0,B.jsxs)(`span`,{className:`personal-refresh-control is-${d??`idle`}`,children:[d===`loading`?(0,B.jsx)(`small`,{children:_(`header.refreshing`)}):d===`done`?(0,B.jsx)(`small`,{children:_(`header.refreshDone`)}):d===`error`?(0,B.jsx)(`small`,{children:_(`header.refreshFailed`)}):null,(0,B.jsx)(`button`,{"aria-label":_(d===`loading`?`header.refreshing`:`header.refresh`),className:`personal-icon-button`,disabled:d===`loading`,onClick:o,type:`button`,children:(0,B.jsx)(Lm,{className:d===`loading`?`is-spinning`:void 0,size:17})})]}):null]})]})}function Ey({attention:e,onSelect:t}){let{t:n}=Ji(),r=Zi(e.updatedAt,n);return(0,B.jsxs)(`button`,{className:`personal-timeline-row personal-attention-row`,"data-testid":`personal-browse-row`,onClick:t,type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-row-icon is-attention`,children:(0,B.jsx)(am,{size:18})}),(0,B.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,B.jsxs)(`small`,{children:[e.goalTitle??e.goalId,` · `,n(`home.lane.needsYou`),r?` · ${n(`tasks.waitingAge`,{age:r})}`:``]}),(0,B.jsx)(`strong`,{children:e.text})]}),(0,B.jsx)(`span`,{className:`personal-priority-dot is-${e.priority??(e.blocking?`high`:`medium`)}`}),(0,B.jsx)(`span`,{className:`personal-row-status ${e.blocking?`is-blocking`:`is-pending`}`,children:e.blocking?n(`tasks.blocked`):n(`tasks.pending`)}),(0,B.jsx)(rm,{size:17})]})}var Dy=/(`[^`\n]+`)|(\*\*[^*\n]+(\*[^*\n]*)?\*\*)|(\[[^\]\n]{1,120}\]\(https?:\/\/[^)\s]+\))/g;function Oy(e,t){let n=[],r=0,i=0;for(let a of e.matchAll(Dy)){let o=a.index??0;o>r&&n.push(e.slice(r,o));let s=a[0],c=`${t}-i${i++}`;if(s.startsWith("`"))n.push((0,B.jsx)(`code`,{className:`personal-md-code`,children:s.slice(1,-1)},c));else if(s.startsWith(`**`))n.push((0,B.jsx)(`strong`,{children:s.slice(2,-2)},c));else{let e=s.indexOf(`](`),t=s.slice(1,e),r=s.slice(e+2,-1);n.push((0,B.jsx)(`a`,{className:`personal-md-link`,href:r,rel:`noreferrer`,target:`_blank`,children:t},c))}r=o+s.length}return r{r.length>0&&(n.push({type:`paragraph`,lines:r}),r=[])},a=0;for(;a{let n=`b${t}`;if(e.type===`code`)return(0,B.jsx)(`pre`,{className:`personal-md-pre`,children:(0,B.jsx)(`code`,{children:e.text})},n);if(e.type===`heading`)return(0,B.jsx)(`p`,{className:`personal-md-heading is-h${e.level}`,children:Dy(e.text,n)},n);if(e.type===`list`){let t=e.items.map((e,t)=>(0,B.jsx)(`li`,{children:Dy(e,`${n}-${t}`)},`${n}-${t}`));return e.ordered?(0,B.jsx)(`ol`,{className:`personal-md-list`,children:t},n):(0,B.jsx)(`ul`,{className:`personal-md-list`,children:t},n)}return(0,B.jsx)(`p`,{children:e.lines.map((e,t)=>(0,B.jsxs)(z.Fragment,{children:[t>0?(0,B.jsx)(`br`,{}):null,Dy(e,`${n}-${t}`)]},`${n}-${t}`))},n)})})}function My({onSelect:e,output:t}){let{t:n}=Ji(),r=t.kind===`report`?gm:hm;return(0,B.jsxs)(`button`,{className:`personal-timeline-row personal-output-row`,"data-output-kind":t.kind,"data-testid":`personal-browse-row`,onClick:e,type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-row-icon is-output`,children:(0,B.jsx)(r,{size:18})}),(0,B.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,B.jsxs)(`small`,{children:[t.goalTitle??t.goalId,` · `,t.agentLabel??`LoopX`]}),(0,B.jsx)(`strong`,{children:t.title}),t.summary?(0,B.jsx)(`span`,{children:t.summary}):null,t.report?(0,B.jsxs)(`small`,{children:[n(`files.reportDelta`,{added:t.report.addedCount,changed:t.report.changedCount}),` · `,n(`files.verifiedReport`)]}):null]}),t.createdAt?(0,B.jsx)(`time`,{children:t.createdAt}):null,(0,B.jsx)(nm,{size:17})]})}var Ny={completed:`runs.completed`,failed:`runs.failed`,interrupted:`runs.interrupted`,queued:`runs.queued`,running:`runs.running`,waiting:`runs.waiting`};function Py({onSelect:e,run:t}){let{t:n}=Ji(),r=t.totalSteps>0?Math.min(100,t.completedSteps/t.totalSteps*100):0;return(0,B.jsxs)(`button`,{"aria-label":`${n(`tasks.viewExecution`)}:${t.title}`,className:`personal-timeline-row personal-run-row`,"data-testid":`personal-browse-row`,onClick:e,type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-row-icon is-run`,children:(0,B.jsx)(Zp,{size:18})}),(0,B.jsxs)(`span`,{className:`personal-run-identity`,children:[(0,B.jsx)(`small`,{children:t.goalTitle}),(0,B.jsx)(`strong`,{children:t.agentLabel})]}),(0,B.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,B.jsx)(`strong`,{children:t.title}),(0,B.jsx)(`small`,{children:t.latestActivity})]}),(0,B.jsxs)(`span`,{className:`personal-run-progress`,"aria-label":`${t.completedSteps}/${t.totalSteps}`,children:[(0,B.jsxs)(`small`,{children:[t.completedSteps,`/`,t.totalSteps]}),(0,B.jsx)(`i`,{children:(0,B.jsx)(`b`,{style:{width:`${r}%`}})})]}),(0,B.jsxs)(`span`,{className:`personal-row-status is-${t.status}`,children:[t.status===`running`?(0,B.jsx)(Cm,{className:`personal-spin`,size:14}):null,n(Ny[t.status])]}),t.sessionId?(0,B.jsx)(`span`,{className:`personal-run-open-label`,children:n(`tasks.viewExecution`)}):null,(0,B.jsx)(nm,{size:17})]})}function Fy({onSelect:e,schedule:t}){let{t:n}=Ji(),r=t.scheduleKind===`heartbeat`;return(0,B.jsxs)(`button`,{"aria-label":`${r?`Heartbeat`:n(`tasks.scheduled`)}:${t.label};${t.status??`active`}`,className:`personal-schedule-row`,onClick:e,type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-schedule-icon`,children:r?(0,B.jsx)(Fm,{size:17}):(0,B.jsx)($p,{size:17})}),(0,B.jsxs)(`span`,{className:`personal-schedule-copy`,children:[(0,B.jsx)(`small`,{children:n(r?`schedule.heartbeat`:`schedule.monitor`)}),(0,B.jsx)(`strong`,{children:t.label}),(0,B.jsx)(`p`,{children:t.schedule??n(`schedule.summary`)})]}),(0,B.jsx)(`span`,{className:`personal-schedule-status is-${t.status??`active`}`,children:t.status===`paused`?n(`schedule.paused`):n(`schedule.active`)}),(0,B.jsx)(nm,{size:16})]})}function Iy({items:e,onSelect:t,selectedGoal:n}){let{t:r}=Ji();if(e.length===0)return(0,B.jsxs)(`div`,{className:`personal-timeline-empty`,children:[(0,B.jsx)(`span`,{children:(0,B.jsx)(Km,{size:20})}),(0,B.jsx)(`strong`,{children:r(n?`timeline.emptyGoal`:`timeline.emptyWorkspace`)}),(0,B.jsx)(`p`,{children:r(n?`timeline.emptyGoalDescription`:`timeline.emptyWorkspaceDescription`)})]});let i=[...e].reverse().find(e=>e.kind===`message`&&e.message.role!==`user`||e.kind===`proposal`&&[`applied`,`stale`,`error`,`gated`].includes(e.proposal.status)||e.kind===`run`&&e.run.status===`completed`),a=i?.kind===`message`?`${i.message.agentLabel??r(`header.manager`)}:${i.message.pending?r(`timeline.pending`):i.message.text}`:i?.kind===`proposal`?`${i.proposal.title}:${i.proposal.status}`:i?.kind===`run`?r(`timeline.runCompleted`,{run:i.run.title}):``,o=e.filter(e=>e.kind===`proposal`&&e.proposal.status===`gated`),s=e.filter(e=>e.kind!==`proposal`),c=e.filter(e=>e.kind===`proposal`&&e.proposal.status!==`gated`);function l(e){return e.kind===`attention`?(0,B.jsx)(Ty,{attention:e.attention,onSelect:()=>t({item:e.attention,kind:`attention`})},e.id):e.kind===`run`?(0,B.jsx)(Py,{onSelect:()=>t({item:e.run,kind:`run`}),run:e.run},e.id):e.kind===`output`?(0,B.jsx)(My,{onSelect:()=>t({item:e.output,kind:`output`}),output:e.output},e.id):e.kind===`schedule`?(0,B.jsx)(Fy,{onSelect:()=>t({item:e.schedule,kind:`schedule`}),schedule:e.schedule},e.id):e.kind===`proposal`?(0,B.jsxs)(`button`,{className:`personal-proposal-row is-${e.proposal.status}`,onClick:()=>t({item:e.proposal,kind:`proposal`}),type:`button`,children:[(0,B.jsx)(`span`,{children:(0,B.jsx)(Km,{size:17})}),(0,B.jsxs)(`span`,{children:[(0,B.jsxs)(`small`,{children:[e.proposal.actionKind,` · `,e.proposal.status]}),(0,B.jsx)(`strong`,{children:e.proposal.title}),(0,B.jsx)(`p`,{children:e.proposal.impact})]}),(0,B.jsx)(`b`,{children:e.proposal.status===`gated`&&e.proposal.actionKind!==`operation.execute`?r(`timeline.review`):e.proposal.primaryLabel??r(`timeline.reviewAndConfirm`)})]},e.id):(0,B.jsxs)(`article`,{className:`personal-message is-${e.message.role}`,children:[e.message.role===`user`?null:(0,B.jsx)(`span`,{className:`personal-message-avatar`,children:(0,B.jsx)(Zp,{size:17})}),(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`strong`,{children:e.message.role===`user`?r(`common.you`):e.message.agentLabel??r(`header.manager`)}),e.message.time?(0,B.jsx)(`time`,{children:e.message.time}):null]}),e.message.attachments?.length?(0,B.jsx)(`div`,{className:`personal-message-images`,children:e.message.attachments.map(e=>(0,B.jsx)(`img`,{alt:e.name,src:e.dataUrl},e.id))}):null,e.message.role===`user`?(0,B.jsx)(`p`,{children:e.message.text}):(0,B.jsx)(jy,{text:e.message.text}),e.message.pending?(0,B.jsx)(`span`,{className:`personal-message-pending`,children:r(`timeline.pending`)}):null]})]},e.id)}return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`p`,{"aria-atomic":`true`,"aria-live":`polite`,className:`personal-live-region`,role:`status`,children:a}),(0,B.jsxs)(`div`,{className:`personal-channel-timeline`,children:[s.map(l),o.length?(0,B.jsxs)(`details`,{className:`personal-gated-summary`,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(`span`,{children:(0,B.jsx)(Km,{size:16})}),(0,B.jsx)(`strong`,{children:r(`timeline.waitingConfirmation`)}),(0,B.jsx)(`small`,{children:r(`timeline.gateHistory`,{count:o.length})})]}),(0,B.jsx)(`div`,{children:o.map(l)})]}):null,c.map(l)]})]})}function Ly({goal:e}){let{t}=Ji(),n={connected:t(`acceptance.connected`),mapped:t(`acceptance.mapped`),refreshed:t(`acceptance.refreshed`),adapter_inspected:t(`acceptance.inspected`),run_recorded:t(`acceptance.recorded`),reward_judged:t(`acceptance.judged`),operator_approved:t(`acceptance.approved`),controller_ready:t(`acceptance.ready`),attention_queue:t(`acceptance.attentionSource`),agent_vision:t(`acceptance.visionSource`),todo_projection:t(`acceptance.todoSource`),current_run:t(`acceptance.runSource`)},r=e=>n[e]??t(`acceptance.unknown`),i=e.acceptanceObservation,a=e.loadState||!i||i.goal_id!==e.goalId||i.coverage===`unavailable`;return(0,B.jsxs)(`section`,{className:`personal-detail-card personal-goal-acceptance`,"aria-label":t(`acceptance.title`),children:[(0,B.jsxs)(`div`,{className:`personal-detail-card-title`,children:[(0,B.jsx)(`h3`,{children:t(`acceptance.title`)}),(0,B.jsx)(`em`,{children:t(`common.readOnly`)})]}),(0,B.jsx)(`p`,{role:`status`,children:t(a?`acceptance.unavailable`:`acceptance.partial`)}),!a&&i?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`h4`,{children:t(`acceptance.gaps`)}),i.acceptance_gaps.length?i.acceptance_gaps.map((e,n)=>(0,B.jsxs)(`div`,{className:`personal-acceptance-observation`,children:[(0,B.jsx)(`p`,{children:e.reason??t(`acceptance.reasonUnknown`)}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`common.owner`)}),(0,B.jsx)(`dd`,{children:e.owner??t(`acceptance.unknown`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`acceptance.required`)}),(0,B.jsx)(`dd`,{children:e.evidence_required??t(`acceptance.unknown`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`acceptance.observed`)}),(0,B.jsx)(`dd`,{children:e.observed_at??t(`acceptance.unknown`)})]})]})]},`${e.kind}:${e.owner}:${n}`)):(0,B.jsx)(`p`,{children:t(`acceptance.noGaps`)}),(0,B.jsx)(`h4`,{children:t(`acceptance.guards`)}),i.guards.length?i.guards.map((e,n)=>(0,B.jsxs)(`div`,{className:`personal-acceptance-observation`,children:[(0,B.jsx)(`p`,{children:e.reason??t(`acceptance.reasonUnknown`)}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`common.owner`)}),(0,B.jsx)(`dd`,{children:e.owner??t(`acceptance.unknown`)})]}),e.blocks_agent?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`common.agent`)}),(0,B.jsx)(`dd`,{children:e.blocks_agent})]}):null,e.todo_id?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`common.task`)}),(0,B.jsx)(`dd`,{children:e.todo_id})]}):null,(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`acceptance.required`)}),(0,B.jsx)(`dd`,{children:e.evidence_required??t(`acceptance.unknown`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`acceptance.scope`)}),(0,B.jsx)(`dd`,{children:e.decision_scope??t(`acceptance.unknown`)})]})]})]},`${e.todo_id}:${n}`)):(0,B.jsx)(`p`,{children:t(`acceptance.noGuards`)}),(0,B.jsx)(`h4`,{children:t(`acceptance.next`)}),(0,B.jsx)(`p`,{children:i.next_action??t(`acceptance.unknown`)}),(0,B.jsxs)(`details`,{children:[(0,B.jsxs)(`summary`,{children:[t(`acceptance.historical_progress`),` · `,i.historical_progress.length]}),(0,B.jsx)(`p`,{children:t(`acceptance.historical`)}),i.historical_progress.map(e=>(0,B.jsxs)(`p`,{children:[(0,B.jsx)(`strong`,{children:r(e.kind)}),` · `,e.observed_at??t(`acceptance.unknown`),` `,e.evidence_refs.join(`, `)]},e.kind))]}),i.missing_sources.length?(0,B.jsxs)(`p`,{children:[t(`acceptance.missing`),` `,i.missing_sources.map(r).join(`, `)]}):null,i.truncated?(0,B.jsx)(`p`,{children:t(`acceptance.truncated`)}):null]}):null]})}function Ry({item:e,successor:t,onSelect:n}){let{t:r}=Ji(),i=e.details;return(0,B.jsxs)(`section`,{className:`personal-detail-card`,"aria-label":r(`attentionDetail.title`),children:[(0,B.jsx)(`h3`,{children:r(`attentionDetail.title`)}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:r(`attentionDetail.request`)}),(0,B.jsx)(`dd`,{children:r(i?.interaction===`decision`?`attentionDetail.decision`:`attentionDetail.unknownRequest`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:r(`common.status`)}),(0,B.jsx)(`dd`,{children:r(`attentionDetail.${i?.lifecycle??`unknown`}`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:r(`drawer.reason`)}),(0,B.jsx)(`dd`,{children:i?.reason??e.explanation??r(`attentionDetail.unknownReason`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Todo`}),(0,B.jsx)(`dd`,{children:e.todoId})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:r(`attentionDetail.targetTodo`)}),(0,B.jsx)(`dd`,{children:i?.unblocksTodoId??r(`attentionDetail.notProvided`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:r(`attentionDetail.targetAgent`)}),(0,B.jsx)(`dd`,{children:i?.blocksAgent??r(`attentionDetail.notProvided`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:r(`attentionDetail.scope`)}),(0,B.jsx)(`dd`,{children:i?.decisionScope?`${i.decisionScope.kind} · ${i.decisionScope.granularity} · ${i.decisionScope.scopeKey}`:r(`attentionDetail.notProvided`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:r(`drawer.evidence`)}),(0,B.jsx)(`dd`,{children:i?.evidence??e.evidence??r(`drawer.decisionDefaultEvidence`)})]})]}),i?.supersededBy?(0,B.jsxs)(`p`,{children:[r(`attentionDetail.replacement`),`: `,i.supersededBy]}):null,t&&n?(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>n(t),type:`button`,children:r(`attentionDetail.openReplacement`)}):null,(0,B.jsx)(`p`,{children:r(`attentionDetail.boundary`)})]})}function zy(e){return e.replace(/\s+/gu,` `).trim()}function By(e,t){let n=RegExp(`(?:不要|不需要|无需|禁止|别|暂不|do not\\b|don't\\b|without\\b).{0,10}(?:${t.source})`,`iu`),r=RegExp(`(?:${t.source}).{0,10}(?:不要|不需要|无需|禁止|关闭)`,`iu`),i=RegExp(`disable\\b.{0,10}(?:${t.source})|(?:turn|switch|set)\\b.{0,10}(?:${t.source}).{0,10}\\boff\\b|(?:${t.source})\\s+(?:is\\s+)?disabled\\b`,`iu`);return n.test(e)||r.test(e)||i.test(e)}function Vy(e){return/(我现在该做什么|下一步|哪些\s*Goal\s*在等我|需要我|谁在等我|Agent\s*在做什么|当前进度|总结(?:今天)?进展)/iu.test(e)}function Hy(e){let t=/(怎么|如何|为什么|给.*建议|分析一下|解释|只读)/u.test(e),n=/(解决一下|修复一下|处理一下|执行一下|改一下|跑(?:一下)?测试|rebase|push|提交|推送)/iu.test(e);return!t&&n&&/(帮我|请|给我|直接|现在|开始|bytedcli|codebase|git|rebase|push|提交|推送)/iu.test(e)}function Uy(e){return zy(e).toLowerCase().match(/(?:^|[\s,,;;:((:]|到|至)(?todo_done:todo_[a-z0-9_-]{3,64}|pr_merged:(?:(?:[a-z0-9_.-]{1,80})\/(?:[a-z0-9_.-]{1,100}))?#[1-9][0-9]{0,8}|capacity_available:[a-z][a-z0-9_:-]{0,63}|resume_at:[1-9][0-9]{3}-[0-9]{2}-[0-9]{2}t[0-9]{2}:[0-9]{2}:[0-9]{2}(?:\.[0-9]{1,3})?(?:z|[+-][0-9]{2}:[0-9]{2}))(?=$|[\s,,。;;))])/iu)?.groups?.condition??null}function Wy(e,t){let n=zy(e),r=[],i=t.agents.find(e=>{let t=n.toLowerCase();return t.includes(e.agentId.toLowerCase())||t.includes(e.label.toLowerCase())}),a=t.todos.find(e=>n.includes(e.todoId)||n.includes(e.text)),o=/(刚刚|已经|已)(?:经)?\s*(新增|创建|添加)(?:的)?\s*(todo|待办|任务)/iu.test(n),s=!!t.goalId&&!By(n,/heartbeat|心跳/iu)&&/(heartbeat|心跳|每天推进|持续推进|daily progress)/iu.test(n);if(!t.goalId&&!By(n,/goal|目标/iu)&&/(创建|新建|设置|create|start|set up).{0,24}(goal|目标)/iu.test(n)&&r.push({actionKind:`goal.create`,confidence:.97,normalizedParameters:{heartbeat_enabled:!By(n,/heartbeat|心跳/iu)&&/(heartbeat|心跳|每天推进|持续推进|daily progress)/iu.test(n)}}),t.goalId&&s&&r.push({actionKind:`heartbeat.bind`,confidence:.96,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&!s&&!By(n,/定时|监控|监测|持续观察|scheduled check|monitor/iu)&&/(定时|监控|监测|每.{0,8}(分钟|小时|天)|持续观察|scheduled check|monitor|every.{0,12}(minute|hour|day)|daily)/iu.test(n)&&r.push({actionKind:`monitor.create`,confidence:.94,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&i&&!By(n,/绑定|负责|接管|管理/iu)&&/((让|交给).{0,20}(管理|负责|接管).{0,8}(goal|目标)|(绑定).{0,12}(goal|目标)|(goal|目标).{0,12}(交给|绑定|负责|接管))/iu.test(n)&&r.push({actionKind:`agent.bind`,confidence:.96,normalizedParameters:{agent_id:i.agentId,goal_id:t.goalId}}),t.goalId&&!o&&!By(n,RegExp(`todo|待办|任务`,`iu`))&&/(创建|新建|新增|添加|加一个|记一个).{0,16}(todo|待办|任务)|(todo|待办|任务).{0,12}(创建|新建|新增|添加)|(?:create|add)(?:\s+(?:a|an|new))?\s+(?:todo|task)|(?:todo|task).{0,12}(?:create|add)/iu.test(n)&&r.push({actionKind:`todo.create`,confidence:.94,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&Hy(n)&&r.push({actionKind:`todo.create`,confidence:.9,normalizedParameters:{goal_id:t.goalId,start_execution:!0}}),t.goalId&&a){let e=!By(n,/完成|做完|关闭/u)&&/完成|做完|关闭/u.test(n)?`complete`:!By(n,/阻塞|卡住/u)&&/阻塞|卡住/u.test(n)?`block`:!By(n,/暂缓|稍后|推迟/u)&&/暂缓|稍后|推迟/u.test(n)?`defer`:i&&!By(n,/交给|分配给|改派/u)&&/交给|分配给|改派/u.test(n)?`reassign`:null;if(e){let i=e===`defer`?Uy(n):null;if(e===`defer`&&!i)return{actionKind:`todo.update`,confidence:.97,missingFields:[`resume_when`],normalizedParameters:{goal_id:t.goalId,operation:e,todo_id:a.todoId},route:`clarify`};r.push({actionKind:`todo.update`,confidence:.97,normalizedParameters:{goal_id:t.goalId,operation:e,...i?{resume_when:i}:{},todo_id:a.todoId}})}}let c=[...new Map(r.map(e=>[e.actionKind,e])).values()];return c.length>1?{actionKind:null,confidence:.4,missingFields:[`single_intent`],normalizedParameters:{},route:`clarify`}:c.length===1?{...c[0],missingFields:[],route:`typed_action`}:!t.goalId&&Vy(n)?{actionKind:null,confidence:.98,missingFields:[],normalizedParameters:{},route:`projection`}:{actionKind:null,confidence:.75,missingFields:[],normalizedParameters:{},route:`agent_chat`}}function Gy(e,t,n){if(!e)return{};if(!t.trim())return{modelConfig:null};let r={model:t.trim()};return n&&(r.reasoning_effort=n),{modelConfig:r}}var Ky=[`a[href]`,`button:not([disabled])`,`textarea:not([disabled])`,`select:not([disabled])`,`input:not([disabled])`,`[tabindex]:not([tabindex='-1'])`].join(`,`),qy=[{key:`drawer.taskBlock`,operation:`block`},{key:`drawer.taskSuccessor`,operation:`successor_create`}],Jy=[{key:`drawer.decisionReject`,resolution:`reject`},{key:`drawer.decisionDefer`,resolution:`defer`}],Yy=Array.from({length:32},(e,t)=>t+1),Xy=/^[a-z][a-z0-9_.-]{0,63}$/u;function Zy(e){let t=String(e??``).trim().toLowerCase();return Xy.test(t)?t:null}function Qy(e,t){return e.enabled===t.enabled&&e.maxChildren===t.maxChildren&&JSON.stringify(e.modelConfig??null)===JSON.stringify(t.modelConfig??null)&&[...e.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)===[...t.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)}function $y({agents:e,attentionHistory:t=[],onSelectAttention:n,callbacks:r,goalNotifications:i=[],goals:a=[],inspectorExpanded:o=!1,larkConnections:s=[],onClose:c,onToggleInspectorSize:l,readOnly:u=!1,runs:d=[],selection:f}){let{locale:p,t:m}=Ji(),[h,g]=(0,z.useState)(``),[_,v]=(0,z.useState)(!1),[y,b]=(0,z.useState)(`idle`),[x,S]=(0,z.useState)(`record`),[C,w]=(0,z.useState)([]),[T,E]=(0,z.useState)(null),[D,O]=(0,z.useState)(2),[ee,te]=(0,z.useState)(``),[ne,k]=(0,z.useState)(``),[A,j]=(0,z.useState)(`idle`),[M,N]=(0,z.useState)(null),[P,F]=(0,z.useState)(null),re=(0,z.useRef)(null),ie=(0,z.useRef)(null),[I,ae]=(0,z.useState)(e.find(e=>e.available)?.agentId??`codex`),[L,oe]=(0,z.useState)(``),se=(0,z.useRef)(null),ce=(0,z.useRef)(null),le=(0,z.useRef)(null),ue=(0,z.useRef)(null),de=f.kind===`run`?`run:${f.item.runId}`:f.kind===`proposal`?`proposal:${f.item.previewId}`:f.kind===`todo`?`todo:${f.item.todoId}`:f.kind===`attention`?`attention:${f.item.todoId}`:f.kind===`output`?`output:${f.item.outputId}`:f.kind===`schedule`?`schedule:${f.item.scheduleId}`:`goal:${f.item.goalId}`;(0,z.useEffect)(()=>{b(`idle`),v(!1),S(`record`),oe(``);let e=f.kind===`goal`?f.item.subagentExecution:void 0;w(e?.allowedDomains??[]),te(e?.modelConfig?.model??``),k(e?.modelConfig?.reasoning_effort??``),O(e?.maxChildren?Math.min(e.maxChildren,32):2),E(null),j(`idle`),N(null),F(null),re.current=e??null,ie.current=null},[de]);let fe=f.kind===`goal`?f.item.subagentExecution:void 0;(0,z.useEffect)(()=>{let e=re.current,t=fe?!e||!Qy(e,fe):e!==null;if(re.current=fe??null,!P){t&&fe&&(w(fe.allowedDomains),te(fe.modelConfig?.model??``),k(fe.modelConfig?.reasoning_effort??``),O(fe.maxChildren||2),E(null),j(`idle`),N(null));return}let n=ie.current;(!fe||Qy(P,fe)||n&&!Qy(n,fe))&&(fe&&(w(fe.allowedDomains),te(fe.modelConfig?.model??``),k(fe.modelConfig?.reasoning_effort??``),O(fe.maxChildren||2)),ie.current=null,F(null))},[fe,P]),(0,z.useEffect)(()=>{let e=document.activeElement;e instanceof HTMLElement&&!ce.current?.contains(e)&&(le.current=e);let t=window.requestAnimationFrame(()=>ue.current?.focus());return()=>window.cancelAnimationFrame(t)},[de]);let pe=(0,z.useCallback)(()=>{let e=le.current;c(),window.requestAnimationFrame(()=>e?.focus())},[c]);(0,z.useEffect)(()=>{function e(e){if(e.key===`Escape`){e.preventDefault(),pe();return}if(e.key===`Tab`&&f.kind!==`todo`){let t=Array.from(ce.current?.querySelectorAll(Ky)??[]).filter(e=>!e.hasAttribute(`disabled`)&&e.getAttribute(`aria-hidden`)!==`true`);if(t.length===0)return;let n=t[0],r=t[t.length-1];e.shiftKey&&document.activeElement===n?(e.preventDefault(),r.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n.focus())}}return document.addEventListener(`keydown`,e),()=>{document.removeEventListener(`keydown`,e)}},[pe,f.kind]);let me=f.kind===`attention`?m(`drawer.titleAttention`):f.kind===`todo`?m(`drawer.taskDetails`):f.kind===`run`?m(`drawer.runDetails`):f.kind===`output`?m(`drawer.titleOutput`):f.kind===`proposal`?m(f.item.status===`applied`?`drawer.titleProposalApplied`:`drawer.titleProposalConfirm`):f.kind===`schedule`?f.item.scheduleKind===`heartbeat`?`Heartbeat`:m(`drawer.titleSchedule`):m(`drawer.goalDetails`),he=f.kind===`proposal`?f.item.goalId??`manager`:f.item.goalId,ge=f.kind===`attention`?f.item.goalTitle??m(`drawer.currentGoal`):f.kind===`todo`||f.kind===`run`?f.item.goalTitle:f.kind===`output`?f.item.goalTitle??m(`drawer.currentGoal`):f.kind===`goal`?f.item.title:f.kind===`schedule`?m(`drawer.goalAutoRun`):f.item.goalId?m(`drawer.goalChanges`):m(`drawer.managerChanges`),_e=f.kind===`goal`?d.find(e=>e.goalId===f.item.goalId&&!!e.sessionId)??d.find(e=>e.goalId===f.item.goalId):null,ve=f.kind===`run`&&(f.item.completedSteps>0||!!f.item.latestActivity||!!f.item.outputs?.length),ye=f.kind===`attention`?Zi(f.item.updatedAt,m):null,be=Uy(L);async function xe(){f.kind!==`run`||!h.trim()||(await r.onCorrectRun?.(f.item,h.trim()),g(``))}async function Se(e,t,n,i){if(t===`successor_create`){await r.onPreviewAction?.({actionKind:`todo.create`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-successor-${e.todoId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,text:m(`drawer.taskSuccessorText`,{task:e.text})},summary:m(`drawer.taskSuccessorSummary`,{task:e.text})});return}await r.onPreviewAction?.({actionKind:`todo.update`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-${e.todoId}-${t}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:e.claimedBy??I,goal_id:e.goalId,operation:t,...t===`block`?{note:m(`drawer.taskSuccessorNote`)}:{},...t===`defer`&&i?{resume_when:i}:{},todo_id:e.todoId},summary:`${n}:${e.text}`})}async function Ce(e,t,n){u||!qd(e)||await r.onPreviewAction?.({actionKind:`gate.resolve`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-decision-${e.todoId}-${t}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,decision:t,todo_id:e.todoId},summary:`${n}:${e.text}`})}let we=f.kind===`goal`?P??f.item.subagentExecution??{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0}:{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0},Te=A===`previewing`||A===`applying`,Ee=(()=>{if(f.kind!==`goal`)return[];let e=new Map;for(let t of we.allowedDomains){let n=Zy(t);n&&e.set(n,{matchingTodoCount:0,value:n})}if(we.domainCandidates)for(let t of we.domainCandidates){let n=Zy(t.domain);if(!n)continue;let r=e.get(n);e.set(n,{matchingTodoCount:(r?.matchingTodoCount??0)+t.matchingTodoCount,value:n})}else for(let t of f.item.agentTodos){if(t.done||t.taskClass!==`advancement_task`)continue;let n=Zy(t.taskDomain);if(!n)continue;let r=e.get(n);e.set(n,{matchingTodoCount:(r?.matchingTodoCount??0)+1,value:n})}return[...e.values()]})();function R(){w(we.allowedDomains),te(we.modelConfig?.model??``),k(we.modelConfig?.reasoning_effort??``),O(we.maxChildren||2),E(null),j(`idle`),N(null)}function De(){let e=[...new Set(C.map(e=>Zy(e)))];return e.every(e=>!!e)?e:null}function Oe(e,t){w(n=>t?[...n,e].filter((e,t,n)=>n.indexOf(e)===t):n.filter(t=>t!==e)),N(null),j(`idle`),E(null)}async function ke(e,t=e){if(f.kind!==`goal`||!r.onPreviewGoalSubagentConfiguration)return;let n=e?De():[];if(t&&!ee.trim()&&ne){j(`error`),E(m(`drawer.subagentModelRequired`));return}if(e&&!n){j(`error`),E(m(`drawer.subagentDomainInvalid`)),N(null);return}let i={allowedDomains:n??[],enabled:e,goalId:f.item.goalId,maxChildren:e?D:0,...Gy(t,ee,ne)};j(`previewing`),E(m(`drawer.subagentPreviewing`)),N(null);try{let e=await r.onPreviewGoalSubagentConfiguration(i);if(!e.changed){ie.current=fe??null,F({...e.configuration,domainCandidates:we.domainCandidates}),w(e.configuration.allowedDomains),te(e.configuration.modelConfig?.model??``),k(e.configuration.modelConfig?.reasoning_effort??``),O(e.configuration.maxChildren||2),j(`success`),E(m(`drawer.subagentNoChange`));return}N({...i,changed:e.changed,previewId:e.previewId}),j(`ready`),E(m(`drawer.subagentPreviewReady`))}catch(e){j(`error`),E(e instanceof Error?e.message:m(`drawer.subagentPreviewFailed`))}}async function Ae(){if(!(!M||!r.onApplyGoalSubagentConfiguration)){j(`applying`),E(m(`drawer.subagentApplying`));try{let e=await r.onApplyGoalSubagentConfiguration({allowedDomains:M.allowedDomains,enabled:M.enabled,goalId:M.goalId,maxChildren:M.maxChildren,modelConfig:M.modelConfig,previewId:M.previewId});ie.current=fe??null,F({...e,domainCandidates:we.domainCandidates}),w(e.allowedDomains),te(e.modelConfig?.model??``),k(e.modelConfig?.reasoning_effort??``),O(e.maxChildren||2),j(`success`),E(m(`drawer.subagentApplied`)),N(null);try{await r.onRefresh?.()}catch{j(`warning`),E(m(`drawer.subagentAppliedRefreshFailed`))}}catch(e){j(`error`),E(e instanceof Error?e.message:m(`drawer.subagentApplyFailed`))}}}return(0,B.jsxs)(`div`,{"aria-labelledby":`personal-drawer-title`,"aria-modal":f.kind===`todo`?void 0:`true`,className:`personal-context-drawer`,"data-context-kind":f.kind,ref:ce,role:`dialog`,children:[(0,B.jsxs)(`header`,{className:`personal-drawer-header${f.kind===`todo`?` is-task-inspector`:``}`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`h2`,{id:`personal-drawer-title`,ref:ue,tabIndex:-1,children:me}),(0,B.jsx)(`p`,{children:ge})]}),(0,B.jsxs)(`div`,{className:`personal-drawer-header-actions`,children:[f.kind===`todo`&&l?(0,B.jsx)(`button`,{"aria-label":m(o?`drawer.inspectorHalf`:`drawer.inspectorFull`),className:`personal-icon-button personal-inspector-size`,onClick:l,title:m(o?`drawer.inspectorHalfView`:`drawer.inspectorFullView`),type:`button`,children:o?(0,B.jsx)(Om,{size:17}):(0,B.jsx)(wm,{size:17})}):null,(0,B.jsxs)(`button`,{"aria-label":m(`drawer.closeDetail`,{context:ge}),className:`personal-icon-button personal-drawer-close`,onClick:pe,ref:se,type:`button`,children:[(0,B.jsx)(Gp,{className:`personal-mobile-back`,size:18}),(0,B.jsx)($m,{className:`personal-desktop-close`,size:18})]})]})]}),(0,B.jsxs)(`div`,{className:`personal-drawer-body`,children:[f.kind===`attention`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`section`,{className:`personal-detail-card is-attention`,children:[(0,B.jsx)(`small`,{children:f.item.blocking?m(`drawer.attentionBlocking`):m(`drawer.attentionWaiting`)}),(0,B.jsx)(`h3`,{children:f.item.text}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Goal`}),(0,B.jsx)(`dd`,{children:f.item.goalTitle??f.item.goalId})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.priority`)}),(0,B.jsx)(`dd`,{children:f.item.priority??`medium`})]}),ye?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`common.waiting`)}),(0,B.jsx)(`dd`,{children:m(`tasks.waitingAge`,{age:ye})})]}):null]})]}),(0,B.jsx)(Ry,{item:f.item,onSelect:n,successor:Kd(f.item,t)}),!u&&qd(f.item)?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void Ce(f.item,`approve`,m(`common.confirm`)),type:`button`,children:[(0,B.jsx)(em,{size:17}),m(`drawer.decisionReview`)]}),(0,B.jsxs)(`details`,{className:`personal-compact-menu`,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(dm,{size:17}),m(`drawer.decisionMore`)]}),(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`button`,{onClick:()=>void r.onExplainDecision?.(f.item),type:`button`,children:[(0,B.jsx)(Em,{size:16}),m(`drawer.explainDecision`)]}),Jy.map(e=>(0,B.jsx)(`button`,{onClick:()=>void Ce(f.item,e.resolution,m(e.key)),type:`button`,children:m(e.key)},e.resolution))]})]})]}):null]}):null,f.kind===`todo`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`section`,{className:`personal-task-inspector-summary`,children:[(0,B.jsxs)(`div`,{className:`personal-task-inspector-status`,children:[(0,B.jsxs)(`span`,{className:f.item.done?`is-done`:f.item.status===`blocked`?`is-blocked`:`is-open`,children:[(0,B.jsx)(`i`,{}),f.item.done?m(`drawer.taskStatusCompleted`):f.item.status===`deferred`?m(`drawer.taskStatusDeferred`):f.item.status===`blocked`?m(`drawer.taskStatusBlocked`):m(`drawer.taskStatusOpen`)]}),f.item.priority?(0,B.jsx)(`span`,{children:f.item.priority}):null,(0,B.jsx)(`span`,{children:f.item.taskClass===`advancement_task`?m(`drawer.taskAdvancement`):f.item.taskClass??m(`drawer.taskOrdinary`)})]}),(0,B.jsx)(`h3`,{children:f.item.text})]}),(0,B.jsxs)(`section`,{"aria-label":m(`drawer.taskInfo`),className:`personal-task-inspector-fields`,children:[(0,B.jsx)(`h4`,{children:m(`drawer.taskInfo`)}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Goal`}),(0,B.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`common.owner`)}),(0,B.jsx)(`dd`,{children:f.item.ownerLabel??f.item.claimedBy??m(`drawer.notAssigned`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`common.status`)}),(0,B.jsx)(`dd`,{children:f.item.done?m(`drawer.taskStatusCompleted`):f.item.status===`deferred`?m(`drawer.taskStatusDeferred`):f.item.status===`blocked`?m(`drawer.taskStatusBlocked`):m(`drawer.taskStatusOpen`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.priority`)}),(0,B.jsx)(`dd`,{children:f.item.priority??m(`drawer.notSet`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.dependencies`)}),(0,B.jsx)(`dd`,{children:f.item.dependencies?.join(` · `)||m(`common.none`)})]}),f.item.status===`deferred`||f.item.resumeWhen?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.resumeWhen`)}),(0,B.jsx)(`dd`,{children:f.item.resumeWhen||m(`drawer.notSet`)})]}):null,f.item.resumeWhen?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.resumeState`)}),(0,B.jsx)(`dd`,{children:f.item.resumeReady?m(`drawer.resumeReady`):m(`drawer.resumePending`)})]}):null,f.item.resumeReceiptId?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.resumeReceipt`)}),(0,B.jsx)(`dd`,{children:f.item.resumeReceiptId})]}):null,(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.nextTransition`)}),(0,B.jsx)(`dd`,{children:f.item.nextTransition??(f.item.done?m(`drawer.taskNextCompleted`):f.item.resumeReady?m(`drawer.taskNextResumeReady`):f.item.status===`deferred`?m(`drawer.taskNextDeferred`):m(`drawer.taskNextOpen`))})]})]})]}),!u&&!f.item.done?(0,B.jsxs)(`div`,{className:`personal-task-inspector-actions`,"aria-label":m(`drawer.taskActions`),children:[(0,B.jsxs)(`details`,{className:`personal-task-management`,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(dm,{size:16}),m(`drawer.taskManage`)]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:m(`drawer.reassign`)}),(0,B.jsxs)(`label`,{className:`personal-inline-agent-select`,children:[m(`drawer.reassign`),(0,B.jsx)(`select`,{"aria-label":m(`drawer.reassign`),onChange:e=>ae(e.target.value),value:I,children:e.filter(e=>e.available).map(e=>(0,B.jsx)(`option`,{value:e.agentId,children:e.label},e.agentId))}),(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onPreviewAction?.({actionKind:`todo.update`,context:{goal_id:f.item.goalId,kind:`todo`,todo_id:f.item.todoId},idempotencyKey:`workspace-todo-${f.item.todoId}-reassign-${I}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:I,goal_id:f.item.goalId,operation:`reassign`,todo_id:f.item.todoId},summary:m(`drawer.reassignSummary`,{task:f.item.text})}),type:`button`,children:m(`timeline.review`)})]}),(0,B.jsx)(`strong`,{children:m(`drawer.taskDeferUntil`)}),(0,B.jsxs)(`label`,{className:`personal-inline-agent-select personal-inline-resume-when`,children:[m(`drawer.taskDeferUntil`),(0,B.jsx)(`input`,{"aria-label":m(`drawer.taskDeferCondition`),"aria-invalid":!!L.trim()&&!be,onChange:e=>oe(e.target.value),placeholder:m(`drawer.taskDeferPlaceholder`),value:L}),(0,B.jsx)(`button`,{className:`personal-secondary-action`,disabled:!be,onClick:()=>void Se(f.item,`defer`,m(`drawer.taskDefer`),be??void 0),type:`button`,children:m(`drawer.taskDeferReview`)}),(0,B.jsx)(`small`,{children:L.trim()&&!be?m(`drawer.taskDeferInvalid`):m(`drawer.taskDeferSupported`)})]}),(0,B.jsx)(`div`,{className:`personal-task-management-secondary`,children:qy.map(e=>(0,B.jsx)(`button`,{onClick:()=>void Se(f.item,e.operation,m(e.key)),type:`button`,children:m(e.key)},e.operation))})]})]}),(0,B.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void Se(f.item,`complete`,m(`drawer.taskComplete`)),type:`button`,children:[(0,B.jsx)(em,{size:17}),m(`drawer.taskComplete`)]})]}):null,f.item.done?(0,B.jsxs)(`div`,{className:`personal-task-completed-note`,children:[(0,B.jsx)(em,{size:16}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:m(`drawer.taskCompletedTitle`)}),(0,B.jsx)(`small`,{children:m(`drawer.taskCompletedNote`)})]})]}):null]}):null,f.kind===`goal`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,B.jsx)(`small`,{children:Yi(f.item.state,p)}),(0,B.jsx)(`h3`,{children:f.item.title}),(0,B.jsx)(`p`,{children:f.item.agentSentence}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.tokens`)}),(0,B.jsxs)(`dd`,{children:[by(f.item.usage?.tokens24h,m(`drawer.usageNotMeasured`),_y),` / `,by(f.item.usage?.tokens7d,m(`drawer.usageNotMeasured`),_y)]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.cost`)}),(0,B.jsxs)(`dd`,{children:[by(f.item.usage?.costUsd24h,m(`drawer.usageNotMeasured`),vy),` / `,by(f.item.usage?.costUsd7d,m(`drawer.usageNotMeasured`),vy)]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.duration`)}),(0,B.jsxs)(`dd`,{children:[by(f.item.usage?.durationMs24h,m(`drawer.usageNotMeasured`),yy),` / `,by(f.item.usage?.durationMs7d,m(`drawer.usageNotMeasured`),yy)]})]})]})]}),(0,B.jsx)(Ly,{goal:f.item}),(()=>{let e=i.find(e=>e.goalId===f.item.goalId),t=s.find(e=>e.goal_id===f.item.goalId);return(0,B.jsxs)(B.Fragment,{children:[f.item.repository?(0,B.jsxs)(`section`,{className:`personal-detail-card personal-goal-repository`,children:[(0,B.jsxs)(`div`,{className:`personal-detail-card-title`,children:[(0,B.jsx)(`small`,{children:m(`drawer.repository`)}),(0,B.jsx)(`em`,{children:m(`common.readOnly`)})]}),(0,B.jsxs)(`h3`,{children:[(0,B.jsx)(_m,{size:16}),f.item.repository.label]}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.branch`)}),(0,B.jsx)(`dd`,{children:f.item.repository.branch||`detached`})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Role`}),(0,B.jsx)(`dd`,{children:m(`drawer.repositoryRole`)})]})]}),(0,B.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>{let e=navigator.clipboard?.writeText(f.item.repository?.identity??``);if(!e){b(`error`);return}e.then(()=>b(`copied`)).catch(()=>b(`error`))},type:`button`,children:[(0,B.jsx)(cm,{size:15}),m(y===`copied`?`drawer.copyRepositoryDone`:`drawer.copyRepository`)]}),y===`error`?(0,B.jsx)(`p`,{className:`personal-copy-feedback is-error`,role:`status`,children:m(`drawer.copyRepositoryError`)}):y===`copied`?(0,B.jsx)(`p`,{className:`personal-copy-feedback`,role:`status`,children:m(`drawer.copyRepositorySuccess`)}):null]}):null,u?(0,B.jsxs)(`section`,{className:`personal-detail-card personal-goal-notification`,children:[(0,B.jsx)(`small`,{children:m(`drawer.larkConnection`)}),(0,B.jsx)(`h3`,{children:m(`drawer.remoteDetailsUnavailable`)}),(0,B.jsx)(`p`,{children:m(`drawer.remoteDetailsDescription`)})]}):(0,B.jsxs)(`section`,{className:`personal-detail-card personal-goal-notification`,children:[(0,B.jsx)(`small`,{children:m(`drawer.larkConnection`)}),t?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`h3`,{children:[t.app_label,(0,B.jsx)(`span`,{className:`personal-connection-status`,children:m(`drawer.connected`)})]}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.group`)}),(0,B.jsx)(`dd`,{children:t.chat_name})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.topic`)}),(0,B.jsxs)(`dd`,{children:[`# `,t.topic_name]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.trigger`)}),(0,B.jsx)(`dd`,{children:t.incoming_mode===`mentions`?m(`lark.someoneMentions`):m(`lark.allMessages`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.replyMode`)}),(0,B.jsx)(`dd`,{children:m(`lark.topicReply`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.autoNotify`)}),(0,B.jsx)(`dd`,{children:e?.humanGateAutoNotifyEnabled?m(`common.on`):m(`common.off`)})]}),e?.lastNotifiedAt?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.lastNotification`)}),(0,B.jsx)(`dd`,{children:e.lastNotifiedAt})]}):null]})]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`h3`,{children:m(`drawer.larkNotConfigured`)}),(0,B.jsx)(`p`,{children:m(`drawer.larkNotConfiguredDescription`)})]}),(0,B.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onOpenNotificationSettings?.(f.item.goalId),type:`button`,children:[(0,B.jsx)(Xp,{size:16}),m(t?`drawer.larkConfigure`:`drawer.larkConnect`)]})]})]})})(),(0,B.jsxs)(`section`,{className:`personal-detail-card personal-goal-session`,children:[(0,B.jsx)(`small`,{children:m(`drawer.runDetails`)}),_e?.sessionId?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`h3`,{children:Xi(_e.sessionStatus??_e.status,m)}),(0,B.jsx)(`p`,{children:_e.title}),r.onOpenRunSession?(0,B.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onOpenRunSession?.(_e),type:`button`,children:[(0,B.jsx)(Nm,{size:16}),m(`drawer.runLatest`)]}):null]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`h3`,{children:m(`drawer.noRun`)}),(0,B.jsx)(`p`,{children:m(`drawer.noRunDescription`)})]})]}),u?null:(0,B.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,B.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onRequestScheduleConfig?.(`heartbeat`,f.item.goalId),type:`button`,children:[(0,B.jsx)(Fm,{size:16}),m(`drawer.setupHeartbeat`)]}),(0,B.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onRequestScheduleConfig?.(`monitor`,f.item.goalId),type:`button`,children:[(0,B.jsx)($p,{size:16}),m(`drawer.scheduleAdd`)]})]}),f.item.subagentExecution?(0,B.jsxs)(`section`,{className:`personal-detail-card personal-goal-subagents`,children:[(0,B.jsxs)(`div`,{className:`personal-subagent-heading`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`small`,{children:m(`drawer.subagentLabel`)}),(0,B.jsxs)(`h3`,{children:[(0,B.jsx)(Zp,{size:16}),m(`drawer.subagentTitle`)]})]}),(0,B.jsxs)(`button`,{"aria-checked":we.enabled,"aria-label":m(M&&A===`ready`?`drawer.subagentPending`:we.enabled?`drawer.subagentDisable`:`drawer.subagentEnable`),className:`personal-subagent-switch`,"data-pending":M&&A===`ready`?`true`:void 0,disabled:u||Te||!!M||!r.onPreviewGoalSubagentConfiguration,onClick:()=>void ke(!we.enabled),role:`switch`,type:`button`,children:[(0,B.jsx)(`span`,{}),m(M&&A===`ready`?`drawer.subagentPending`:we.enabled?`common.on`:`common.off`)]})]}),(0,B.jsx)(`p`,{children:m(`drawer.subagentDescription`)}),M&&A===`ready`?(0,B.jsxs)(`div`,{className:`personal-subagent-preview`,children:[(0,B.jsx)(`strong`,{children:m(M.enabled?`drawer.subagentConfirmEnable`:`drawer.subagentConfirmDisable`)}),(0,B.jsx)(`p`,{children:M.enabled?m(`drawer.subagentPreviewSummary`,{count:M.maxChildren,domains:M.allowedDomains.join(` · `)||m(`drawer.subagentDomainsUnrestricted`)}):m(`drawer.subagentDisableSummary`)}),M.modelConfig===void 0?null:(0,B.jsxs)(`p`,{children:[m(`drawer.subagentModel`),`: `,M.modelConfig?.model||m(`drawer.subagentModelDefault`),` · `,M.modelConfig?.reasoning_effort||m(`drawer.subagentModelDefault`)]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`button`,{className:`personal-primary-action`,onClick:()=>void Ae(),type:`button`,children:m(`common.confirm`)}),(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:R,type:`button`,children:m(`common.cancel`)})]})]}):null,T?(0,B.jsxs)(`p`,{className:`personal-subagent-feedback is-${A}`,role:`status`,children:[A===`previewing`||A===`applying`?(0,B.jsx)(Lm,{className:`personal-spin`,size:13}):null,T]}):null,(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.subagentModel`)}),(0,B.jsx)(`dd`,{children:we.modelConfig?.model||m(`drawer.subagentModelDefault`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.subagentEffort`)}),(0,B.jsx)(`dd`,{children:we.modelConfig?.reasoning_effort||m(`drawer.subagentModelDefault`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.subagentCurrentBoundary`)}),(0,B.jsx)(`dd`,{children:we.allowedDomains.join(` · `)||m(`drawer.subagentDomainsUnrestricted`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.subagentChildLimit`)}),(0,B.jsx)(`dd`,{children:we.maxChildren||0})]})]}),u?(0,B.jsx)(`p`,{className:`personal-subagent-read-only`,children:m(`drawer.subagentRemoteReadOnly`)}):(0,B.jsxs)(`div`,{className:`personal-subagent-fields`,children:[(0,B.jsxs)(`fieldset`,{className:`personal-subagent-domain-picker`,disabled:Te,children:[(0,B.jsx)(`legend`,{children:m(`drawer.subagentDomains`)}),Ee.length>0?(0,B.jsx)(`div`,{className:`personal-subagent-domain-options`,children:Ee.map(e=>{let t=C.includes(e.value);return(0,B.jsxs)(`label`,{className:`personal-subagent-domain-option${t?` is-selected`:``}`,children:[(0,B.jsx)(`input`,{"aria-label":e.value,checked:t,onChange:t=>Oe(e.value,t.target.checked),type:`checkbox`}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:e.value}),(0,B.jsx)(`small`,{children:m(`drawer.subagentDomainTodoCount`,{count:e.matchingTodoCount})})]})]},e.value)})}):(0,B.jsx)(`p`,{className:`personal-subagent-domain-empty`,children:m(`drawer.subagentDomainsEmpty`)}),(0,B.jsx)(`small`,{children:m(`drawer.subagentDomainsHint`)})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:m(`drawer.subagentModel`)}),(0,B.jsx)(`input`,{"aria-label":m(`drawer.subagentModel`),disabled:Te,value:ee,placeholder:`gpt-5.6-luna`,onChange:e=>{te(e.target.value),N(null),j(`idle`),E(null)}})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:m(`drawer.subagentEffort`)}),(0,B.jsxs)(`select`,{"aria-label":m(`drawer.subagentEffort`),disabled:Te,value:ne,onChange:e=>{k(e.target.value),N(null),j(`idle`),E(null)},children:[(0,B.jsx)(`option`,{value:``,children:m(`drawer.subagentModelDefault`)}),[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`,`ultra`].map(e=>(0,B.jsx)(`option`,{value:e,children:e},e))]})]}),(0,B.jsx)(`button`,{className:`personal-secondary-action`,disabled:Te,type:`button`,onClick:()=>{te(`gpt-5.6-luna`),k(`max`),N(null),j(`idle`),E(null)},children:m(`drawer.subagentLunaPreset`)}),(0,B.jsx)(`button`,{className:`personal-secondary-action`,disabled:Te,type:`button`,onClick:()=>{te(``),k(``),N(null),j(`idle`),E(null)},children:m(`drawer.subagentClearModel`)}),(0,B.jsx)(`p`,{children:m(`drawer.subagentModelHint`)}),(0,B.jsxs)(`label`,{className:`personal-subagent-limit-field`,children:[(0,B.jsx)(`span`,{children:m(`drawer.subagentMaxChildren`)}),(0,B.jsx)(`select`,{"aria-label":m(`drawer.subagentMaxChildren`),disabled:Te,onChange:e=>{O(Number(e.target.value)),N(null),j(`idle`),E(null)},value:D,children:Yy.map(e=>(0,B.jsx)(`option`,{value:e,children:e},e))})]}),(0,B.jsx)(`button`,{className:`personal-secondary-action`,disabled:Te,onClick:()=>void ke(we.enabled,!0),type:`button`,children:m(`drawer.subagentPreviewBoundary`)})]})]}):null]}):null,f.kind===`run`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`div`,{"aria-label":m(`drawer.runView`),className:`personal-run-drawer-tabs`,role:`tablist`,children:[(0,B.jsx)(`button`,{"aria-selected":x===`record`,onClick:()=>S(`record`),role:`tab`,type:`button`,children:m(`drawer.executionRecordAndResult`)}),(0,B.jsx)(`button`,{"aria-selected":x===`details`,onClick:()=>S(`details`),role:`tab`,type:`button`,children:m(`drawer.detailsAndActions`)})]}),x===`record`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`section`,{className:`personal-detail-card personal-session-summary`,children:[(0,B.jsxs)(`small`,{children:[f.item.agentLabel,` · `,Xi(f.item.sessionStatus??f.item.status,m)]}),(0,B.jsx)(`h3`,{children:f.item.title}),(0,B.jsx)(`p`,{children:f.item.latestActivity}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Goal`}),(0,B.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.progress`)}),(0,B.jsxs)(`dd`,{children:[f.item.completedSteps,`/`,f.item.totalSteps]})]})]})]}),(0,B.jsxs)(`section`,{"aria-label":m(`drawer.executionRecord`),className:`personal-session-message-record`,children:[(0,B.jsx)(`h3`,{children:m(`drawer.executionRecord`)}),f.item.sessionMessages?.length?(0,B.jsx)(`ol`,{children:f.item.sessionMessages.map(e=>(0,B.jsxs)(`li`,{className:`is-${e.role}`,children:[(0,B.jsx)(`i`,{}),(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`strong`,{children:e.role===`user`?m(`drawer.runRoleUser`):e.role===`assistant`?m(`drawer.runRoleAssistant`):m(`drawer.runRoleSystem`)}),e.createdAt?(0,B.jsx)(`time`,{children:new Date(e.createdAt).toLocaleTimeString(p,{hour:`2-digit`,minute:`2-digit`,hour12:!1})}):null]}),(0,B.jsx)(`p`,{children:e.text})]})]},e.messageId))}):(0,B.jsx)(`p`,{className:`personal-session-empty`,children:ve?m(`drawer.runRecordProjected`,{completed:f.item.completedSteps,outputs:f.item.outputs?.length?m(`drawer.runRecordProjectedOutputs`,{count:f.item.outputs.length}):``,total:f.item.totalSteps}):m(`drawer.runRecordEmpty`)}),f.item.status===`running`?(0,B.jsxs)(`div`,{className:`personal-session-active-step`,children:[(0,B.jsx)(`i`,{}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:m(`drawer.analysis`)}),(0,B.jsx)(`small`,{children:m(`drawer.agentWorking`)})]})]}):null]}),f.item.outputs?.length?(0,B.jsxs)(`section`,{className:`personal-execution-history`,"aria-labelledby":`personal-run-outputs-title`,children:[(0,B.jsx)(`h3`,{id:`personal-run-outputs-title`,children:m(`drawer.outputs`)}),(0,B.jsx)(`ol`,{children:f.item.outputs.map(e=>(0,B.jsx)(`li`,{children:(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:e.title}),(0,B.jsx)(`small`,{children:e.createdAt??e.kind??m(`files.emptySummary`)})]})},e.outputId))})]}):null]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,B.jsxs)(`small`,{children:[f.item.agentLabel,` · `,Xi(f.item.status,m)]}),(0,B.jsx)(`h3`,{children:f.item.title}),(0,B.jsx)(`p`,{children:f.item.latestActivity}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Goal`}),(0,B.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.progress`)}),(0,B.jsxs)(`dd`,{children:[f.item.completedSteps,`/`,f.item.totalSteps]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.sessionStatus`)}),(0,B.jsx)(`dd`,{children:Xi(f.item.sessionStatus??f.item.status,m)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.sessionRecoverable`)}),(0,B.jsx)(`dd`,{children:f.item.resumable===!1?m(`drawer.resumeNo`):m(`drawer.resumeYes`)})]})]})]}),f.item.sessionStatus===`resume_failed`&&!u?(0,B.jsxs)(`section`,{className:`personal-recovery-panel`,"aria-label":m(`drawer.recoveryFailed`),children:[(0,B.jsx)(`strong`,{children:m(`drawer.recoveryFailed`)}),(0,B.jsx)(`p`,{children:m(`drawer.recoveryDescription`)}),(0,B.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onRetryResumeRun?.(f.item),type:`button`,children:[(0,B.jsx)(Lm,{size:16}),m(`drawer.recoveryRetry`)]}),(0,B.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onStartNewRunSession?.(f.item),type:`button`,children:[(0,B.jsx)(Nm,{size:16}),m(`drawer.recoveryNewSession`)]})]}):null,u?null:(0,B.jsxs)(`section`,{className:`personal-correction-panel`,children:[(0,B.jsx)(`header`,{children:(0,B.jsxs)(`span`,{children:[(0,B.jsx)(Zp,{size:16}),m(`drawer.correctionLabel`,{agent:f.item.agentLabel})]})}),(0,B.jsx)(`p`,{children:m(`drawer.correctionDescription`)}),(0,B.jsxs)(`div`,{className:`personal-correction-composer`,children:[(0,B.jsx)(`textarea`,{"aria-label":m(`drawer.correctionTextarea`,{agent:f.item.agentLabel,goal:f.item.goalTitle,run:f.item.title}),onChange:e=>g(e.target.value),placeholder:m(`drawer.correctionPlaceholder`),rows:3,value:h}),(0,B.jsx)(`button`,{"aria-label":m(`drawer.correctionSend`),disabled:!h.trim(),onClick:()=>void xe(),type:`button`,children:(0,B.jsx)(Bm,{size:16})})]})]}),u?null:(0,B.jsxs)(`details`,{className:`personal-compact-menu personal-run-more`,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(dm,{size:17}),m(`drawer.moreRunActions`)]}),(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`button`,{disabled:!f.item.canInterrupt,onClick:()=>void r.onInterruptRun?.(f.item),type:`button`,children:[(0,B.jsx)(Mm,{size:16}),m(`drawer.runInterrupt`)]}),(0,B.jsxs)(`button`,{disabled:f.item.resumable===!1,onClick:()=>void r.onRetryResumeRun?.(f.item),type:`button`,children:[(0,B.jsx)(Lm,{size:16}),m(`drawer.recoveryRetry`)]}),(0,B.jsxs)(`button`,{onClick:()=>void r.onStartNewRunSession?.(f.item),type:`button`,children:[(0,B.jsx)(Nm,{size:16}),m(`drawer.runNewSession`)]}),(0,B.jsxs)(`button`,{onClick:()=>void r.onCloseRunSession?.(f.item),type:`button`,children:[(0,B.jsx)(qm,{size:16}),m(`drawer.runCloseSession`)]})]})]})]})]}):null,f.kind===`output`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,B.jsx)(`small`,{children:f.item.kind??`output`}),(0,B.jsx)(`h3`,{children:f.item.title}),(0,B.jsx)(`p`,{children:f.item.summary??m(`drawer.outputRecorded`)}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Goal`}),(0,B.jsx)(`dd`,{children:f.item.goalTitle??f.item.goalId})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.outputTodo`)}),(0,B.jsx)(`dd`,{children:f.item.todoId??m(`drawer.notLinked`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.outputRun`)}),(0,B.jsx)(`dd`,{children:f.item.runId??m(`drawer.notLinked`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Agent`}),(0,B.jsx)(`dd`,{children:f.item.agentLabel??f.item.agentId??`LoopX`})]})]})]}),f.item.report?(0,B.jsxs)(`section`,{className:`personal-report-detail`,"data-testid":`personal-periodic-report-detail`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsxs)(`span`,{children:[(0,B.jsxs)(`strong`,{children:[`+`,f.item.report.addedCount]}),m(`files.reportAdded`)]}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:f.item.report.changedCount}),m(`files.reportChanged`)]})]}),(0,B.jsxs)(`p`,{children:[f.item.report.periodStartAt,` → `,f.item.report.periodEndAt]}),(0,B.jsx)(`ol`,{children:f.item.report.items.map(e=>(0,B.jsxs)(`li`,{"data-change-kind":e.changeKind,children:[(0,B.jsxs)(`small`,{children:[e.changeKind,` · `,e.status]}),(0,B.jsx)(`strong`,{children:e.title}),(0,B.jsx)(`p`,{children:e.summary})]},e.sourceRef))}),(0,B.jsxs)(`footer`,{children:[(0,B.jsxs)(`span`,{children:[m(`files.reportPublication`),`: `,f.item.report.publicationId]}),(0,B.jsxs)(`span`,{children:[m(`files.reportGeneration`),`: `,f.item.report.generationId]})]})]}):null,f.item.safePreview?(0,B.jsx)(`pre`,{"aria-label":m(`drawer.outputSafePreview`),className:`personal-safe-preview`,children:f.item.safePreview}):(0,B.jsx)(`p`,{className:`personal-preview-unavailable`,children:m(`drawer.previewUnavailable`)}),(0,B.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,B.jsxs)(`button`,{className:`personal-primary-action`,disabled:!r.onOpenOutput,onClick:()=>{r.onOpenOutput?.(f.item),c()},type:`button`,children:[(0,B.jsx)(fm,{size:16}),m(`files.openConversation`)]}),(0,B.jsxs)(`button`,{className:`personal-secondary-action`,disabled:!r.onExportOutput,onClick:()=>void r.onExportOutput?.(f.item),type:`button`,children:[(0,B.jsx)(um,{size:16}),m(`files.exportSummary`)]})]})]}):null,f.kind===`proposal`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`section`,{className:`personal-proposal-card`,children:[(0,B.jsxs)(`small`,{children:[f.item.actionKind,` · `,f.item.status]}),(0,B.jsx)(`h3`,{children:f.item.title}),(0,B.jsx)(`p`,{children:f.item.impact}),f.item.reviewPlan?(0,B.jsx)(`p`,{className:`personal-proposal-explainer`,"data-action-review":f.item.reviewPlan.interaction,children:f.item.actionKind===`operation.execute`&&f.item.status===`gated`?m(`actionReview.operation_group_confirmation`):f.item.actionKind===`operation.execute`&&f.item.reviewPlan.reason===`readback_unverified`?m(`actionReview.operation_result_delivery_pending`):m(`actionReview.${f.item.reviewPlan.reason}`)}):null,f.item.status===`ready`?(0,B.jsx)(`p`,{className:`personal-proposal-explainer`,children:m(`drawer.proposalExplainer`)}):null,(0,B.jsx)(`dl`,{children:f.item.fields.map(e=>(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:e.label}),(0,B.jsx)(`dd`,{children:e.value})]},e.key))})]}),f.item.status===`applied`?(0,B.jsxs)(`p`,{className:`personal-proposal-state ${f.item.actionKind===`operation.execute`&&f.item.reviewPlan?.reason===`readback_unverified`?`is-gated`:`is-applied`}`,children:[(0,B.jsx)(em,{size:16}),f.item.actionKind===`operation.execute`?f.item.primaryLabel:m(`drawer.proposalApplied`)]}):null,f.item.status===`applied`&&f.item.actionKind!==`operation.execute`&&f.item.goalId?(0,B.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>{let e=f.item.goalId;c(),r.onOpenGoal?.(e)},type:`button`,children:[(0,B.jsx)(fm,{size:16}),f.item.actionKind===`goal.create`?m(`drawer.proposalEnterGoal`):m(`drawer.proposalViewGoal`)]}):null,f.item.status===`stale`?(0,B.jsx)(`p`,{className:`personal-proposal-state is-stale`,children:m(`drawer.proposalStale`)}):null,f.item.status===`error`?(0,B.jsxs)(`div`,{className:`personal-proposal-state is-error`,children:[(0,B.jsx)(`span`,{children:f.item.reviewPlan?.reason===`readback_unverified`?m(`actionReview.readback_unverified`):m(`drawer.proposalApplyFailed`)}),f.item.errorMessage?(0,B.jsx)(`small`,{children:f.item.errorMessage}):null,(0,B.jsx)(`small`,{children:m(`drawer.proposalApplyFailedHint`)})]}):null,f.item.status===`rejected`?(0,B.jsx)(`p`,{className:`personal-proposal-state is-error`,children:m(`drawer.proposalRejected`)}):null,f.item.status===`deferred`?(0,B.jsx)(`p`,{className:`personal-proposal-state is-gated`,children:m(`drawer.proposalDeferred`)}):null,f.item.status===`gated`?(0,B.jsxs)(`div`,{className:`personal-proposal-state is-gated`,children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:f.item.actionKind===`operation.execute`?f.item.primaryLabel:m(`drawer.gateRequiresHost`)}),f.item.actionKind===`operation.execute`?f.item.impact:m(`drawer.gateRequiresHostDescription`)]}),f.item.gate?.nextAction?(0,B.jsx)(`small`,{children:f.item.gate.nextAction}):null]}):null,f.item.status===`gated`&&f.item.actionKind===`gate.resolve`?(()=>{let e=e=>f.item.fields.find(t=>t.key===e)?.value,t=e(`goal_id`),n=e(`todo_id`);return!t||!n?null:(0,B.jsxs)(`section`,{className:`personal-detail-card personal-gate-cli-hint`,children:[(0,B.jsx)(`small`,{children:m(`drawer.gateApproveHint`)}),(0,B.jsxs)(`code`,{children:[`loopx todo complete --goal-id `,t,` --todo-id `,n,` --decision-outcome approve`]}),(0,B.jsx)(`small`,{children:m(`drawer.gateRejectHint`)})]})})():null,!u&&f.item.workspaceCandidates?.length?(0,B.jsx)(`div`,{className:`personal-workspace-candidates`,"aria-label":m(`drawer.workspaceCandidates`),children:f.item.workspaceCandidates.map(e=>(0,B.jsxs)(`button`,{onClick:()=>void r.onSelectWorkspaceCandidate?.(f.item,e.workspaceRef),type:`button`,children:[(0,B.jsx)(`strong`,{children:e.label}),(0,B.jsx)(`small`,{children:e.workspaceRef})]},e.workspaceRef))}):null,!u&&f.item.actionKind!==`operation.execute`&&f.item.status===`error`?(0,B.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`regenerate`),type:`button`,children:[(0,B.jsx)(Lm,{size:17}),m(`drawer.proposalRegenerate`)]}):!u&&f.item.actionKind!==`operation.execute`&&f.item.status!==`gated`?(0,B.jsxs)(`button`,{className:`personal-primary-action`,disabled:![`ready`,`deferred`].includes(f.item.status)||f.item.reviewPlan?.canApply===!1,onClick:()=>void r.onApplyProposal?.(f.item),type:`button`,children:[(0,B.jsx)(em,{size:17}),f.item.status===`applying`?m(`drawer.applying`):f.item.primaryLabel??m(`drawer.apply`)]}):null,!u&&f.item.actionKind!==`operation.execute`&&([`stale`,`gated`,`rejected`].includes(f.item.status)||f.item.status===`ready`&&f.item.reviewPlan?.canApply===!1)?(0,B.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`regenerate`),type:`button`,children:[(0,B.jsx)(Lm,{size:16}),m(`drawer.proposalRecheck`)]}):null,!u&&f.item.actionKind!==`operation.execute`&&[`ready`,`gated`].includes(f.item.status)?(0,B.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`defer`),type:`button`,children:m(`drawer.proposalDefer`)}),(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`reject`),type:`button`,children:m(`drawer.decisionReject`)})]}):null,[`applied`,`applying`].includes(f.item.status)?null:(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:c,type:`button`,children:m(`drawer.proposalClose`)})]}):null,f.kind===`schedule`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,B.jsxs)(`small`,{children:[f.item.scheduleKind===`heartbeat`?`Goal Heartbeat`:`continuous_monitor`,` · `,f.item.status??`active`]}),(0,B.jsx)(`h3`,{children:f.item.label}),(0,B.jsx)(`p`,{children:f.item.target??f.item.schedule??m(`drawer.scheduleDefaultTarget`)}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.scheduleTimezone`)}),(0,B.jsx)(`dd`,{children:f.item.timezone??m(`drawer.scheduleLocalTimezone`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.scheduleNext`)}),(0,B.jsx)(`dd`,{children:f.item.nextRunAt??m(`drawer.schedulePending`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.scheduleLast`)}),(0,B.jsx)(`dd`,{children:f.item.previousRunAt??m(`drawer.scheduleNeverRun`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.scheduleNotification`)}),(0,B.jsx)(`dd`,{children:f.item.notificationRule??m(`drawer.scheduleDefaultNotification`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.scheduleStopCondition`)}),(0,B.jsx)(`dd`,{children:f.item.stopCondition??m(`drawer.scheduleDefaultStop`)})]})]})]}),!u&&f.item.scheduleKind===`monitor`?(0,B.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`run_now`),type:`button`,children:[(0,B.jsx)(Nm,{size:16}),m(`drawer.scheduleRunNow`)]}):null,u?null:(0,B.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,B.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,f.item.status===`paused`?`resume`:`pause`),type:`button`,children:[f.item.status===`paused`?(0,B.jsx)(Nm,{size:16}):(0,B.jsx)(Mm,{size:16}),f.item.status===`paused`?m(`drawer.scheduleResume`):m(`drawer.schedulePause`)]}),(0,B.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`edit`),type:`button`,children:[(0,B.jsx)($p,{size:16}),m(`drawer.scheduleEdit`)]})]}),u?null:(0,B.jsxs)(`button`,{className:`personal-danger-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`stop`),type:`button`,children:[(0,B.jsx)(qm,{size:16}),m(`drawer.scheduleStop`,{kind:f.item.scheduleKind===`heartbeat`?` Heartbeat`:m(`drawer.titleSchedule`)})]}),(0,B.jsxs)(`section`,{className:`personal-execution-history`,"aria-labelledby":`personal-execution-history-title`,children:[(0,B.jsx)(`h3`,{id:`personal-execution-history-title`,children:m(`drawer.executionHistory`)}),f.item.executionHistory?.length?(0,B.jsx)(`ol`,{children:f.item.executionHistory.map((e,t)=>(0,B.jsxs)(`li`,{children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:e.label}),(0,B.jsx)(`small`,{children:e.timestamp})]}),(0,B.jsx)(`em`,{className:`is-${e.status}`,children:e.status})]},`${e.timestamp}:${e.runId??t}`))}):(0,B.jsx)(`p`,{children:m(`drawer.noExecutionHistory`)})]})]}):null,f.kind===`run`||f.kind===`proposal`||f.kind===`schedule`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`button`,{"aria-expanded":_,className:`personal-diagnostics-trigger`,onClick:()=>v(e=>!e),type:`button`,children:[(0,B.jsx)(`span`,{children:m(`drawer.advancedDiagnostics`)}),(0,B.jsx)(tm,{className:_?`is-open`:``,size:16})]}),_?(0,B.jsxs)(`div`,{className:`personal-diagnostics`,children:[(0,B.jsxs)(`code`,{children:[`goal_id: `,he]}),(0,B.jsxs)(`code`,{children:[`kind: `,f.kind]}),f.kind===`run`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`code`,{children:[`session_id: `,f.item.sessionId??m(`drawer.notLinked`)]}),(0,B.jsxs)(`code`,{children:[`turn_id: `,f.item.turnId??m(`common.none`)]}),(0,B.jsxs)(`code`,{children:[`adapter: `,f.item.agentId]}),(0,B.jsxs)(`code`,{children:[`status: `,f.item.sessionStatus??f.item.status]})]}):f.kind===`proposal`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`code`,{children:[`action: `,f.item.actionKind]}),(0,B.jsxs)(`code`,{children:[`status: `,f.item.status]})]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`code`,{children:[`schedule_id: `,f.item.scheduleId]}),(0,B.jsxs)(`code`,{children:[`status: `,f.item.status??`active`]})]})]}):null]}):null]})]})}var eb=[`checking`,`connecting`,`downloading`,`installing_app`,`installing_runtime`],tb={desktop_status_unavailable:[`无法读取 App 更新状态。请重启 App 后再试;若仍失败,请重新安装最新 App。`,`Cannot read the App update status. Restart the App; if this persists, reinstall the latest App.`],update_feed_unavailable:[`此通道的更新源尚未就绪或暂时不可用。可稍后重新检查,当前版本仍可继续使用。`,`This channel's update feed is not ready or temporarily unavailable. Check again later; you can keep using this version.`],update_feed_invalid:[`更新源格式异常。请稍后重新检查。`,`The update feed is invalid. Check again later.`],update_platform_unavailable:[`此通道尚无适用于本机的更新包。`,`This channel has no update package for this platform.`],update_check_timeout:[`检查更新超时。请稍后重试。`,`The update check timed out. Try again later.`],update_network_failed:[`无法连接更新服务器。请检查网络后重试。`,`Cannot reach the update server. Check your connection and retry.`],update_download_or_signature_failed:[`更新包下载或签名校验失败,尚未安装。请重新检查更新。`,`Download or signature verification failed; the update was not installed. Check for updates again.`]};function nb(e,t=`update_failed`){return{phase:`error`,details:{code:typeof e==`string`&&Object.hasOwn(tb,e)?e:t}}}function rb(){let{locale:e}=Ji(),t=e===`zh-CN`,[n,r]=(0,z.useState)(!1),i=(0,z.useRef)(null),[a,o]=(0,z.useState)(`stable`),[s,c]=(0,z.useState)({phase:`idle`}),[l,u]=(0,z.useState)(``),[d,f]=(0,z.useState)(!1),p=(0,z.useRef)(!1),m=window.__TAURI__?.core.invoke,h=eb.includes(s.phase);(0,z.useEffect)(()=>{let e=i.current;if(!e)return;let t=()=>r(e.matches(`:popover-open`));return e.addEventListener(`toggle`,t),()=>e.removeEventListener(`toggle`,t)},[]),(0,z.useEffect)(()=>{if(!m)return;let e=!0;return m(`desktop_update_status`).then(t=>{if(!e)return;u(t.app_version),f(t.rollback_available===!0),t.state?.phase&&c(t.state);let n=t.state?.details?.channel??(t.app_version.includes(`-main.`)?`main`:`stable`);o(n),t.state?.phase||m(`desktop_update`,{action:`check`,channel:n}).then(t=>{e&&c(t)}).catch(t=>{e&&c(nb(t))})}).catch(()=>{e&&c(nb(null,`desktop_status_unavailable`))}),()=>{e=!1}},[m]),(0,z.useEffect)(()=>{if(!m||!h)return;let e=window.setInterval(()=>{m(`desktop_update_status`).then(e=>{e.state?.phase&&c(e.state)}).catch(()=>{})},1e3);return()=>window.clearInterval(e)},[m,h]);async function g(e){if(!(!m||p.current)){p.current=!0,c({phase:e===`check`?`checking`:e===`repair`?`installing_runtime`:`downloading`});try{if(!l){let e=await m(`desktop_update_status`);u(e.app_version),f(e.rollback_available===!0)}c(await m(`desktop_update`,{action:e,channel:a}))}catch(e){c(nb(e,l?`update_failed`:`desktop_status_unavailable`))}finally{p.current=!1}}}let _={service_error:t?`运行时已安装,但服务尚未连接。可重试更新、修复或恢复上版。`:`Runtime installed, but services are unavailable. Retry updates, repair, or restore the previous version.`,idle:t?`App 会检查可用更新,不会自动安装。`:`Updates are checked automatically, never installed without confirmation.`,runtime_required:t?`请完成匹配组件安装,或检查 App 更新。`:`Install matching components or check for an App update.`,connecting:t?`正在连接更新后的服务…`:`Connecting to updated services…`,checking:t?`正在检查更新…`:`Checking for updates…`,available:t?`新版本已就绪,一次更新 App 与匹配的运行时。`:`Update the App and its matching runtime together.`,up_to_date:t?`当前通道暂无更新。`:`No newer update on this channel.`,downloading:t?`正在下载并校验签名…`:`Downloading and verifying signature…`,installing_app:t?`正在安装 App,请保持窗口打开。`:`Installing the App. Keep this window open.`,installing_runtime:t?`正在安装匹配的运行时,请稍候…`:`Installing the matching runtime…`,restart_required:t?`重启后将自动完成运行时安装与服务连接。`:`Restart to finish runtime installation and reconnect services.`,ready:t?`更新完成,服务已就绪。`:`Update completed; services are ready.`,error:tb[s.details?.code??``]?.[+!t]??(t?`更新未完成。请重试;启动失败可尝试修复当前版本。`:`Update incomplete. Retry; repair this version if startup fails.`)},v=h?t?`正在更新…`:`Updating…`:s.phase===`available`?t?`有可用更新`:`Update available`:s.phase===`restart_required`?t?`重启完成更新`:`Restart to finish`:s.phase===`error`?t?`更新需重试`:`Retry update`:t?`更新 LoopX`:`Update LoopX`;return(0,B.jsxs)(`div`,{className:`personal-desktop-update`,children:[(0,B.jsxs)(`button`,{className:`personal-update-trigger`,type:`button`,"aria-expanded":n,"aria-controls":`desktop-update-panel`,onClick:e=>{i.current?.style.setProperty(`bottom`,`${window.innerHeight-e.currentTarget.getBoundingClientRect().top+8}px`),i.current?.togglePopover()},children:[(0,B.jsx)(um,{size:16,"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:v}),(0,B.jsx)(rm,{size:14,"aria-hidden":`true`})]}),(0,B.jsxs)(`section`,{ref:i,popover:`auto`,id:`desktop-update-panel`,className:`personal-update-panel`,"aria-label":t?`LoopX 更新`:`LoopX updates`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`strong`,{children:t?`LoopX 更新`:`LoopX updates`}),(0,B.jsx)(`button`,{type:`button`,"aria-label":t?`关闭更新面板`:`Close updates`,onClick:()=>i.current?.hidePopover(),children:(0,B.jsx)($m,{size:16,"aria-hidden":`true`})})]}),(0,B.jsxs)(`small`,{children:[l,` · `,a===`main`?t?`main 预览版`:`main preview`:t?`稳定版`:`Stable`]}),s.details?.version?(0,B.jsxs)(`p`,{children:[t?`目标版本:`:`Target: `,s.details.version]}):null,(0,B.jsxs)(`p`,{role:`status`,"aria-live":`polite`,children:[h?(0,B.jsx)(Im,{className:`is-spinning`,size:14,"aria-hidden":`true`}):null,_[s.phase]]}),s.phase===`downloading`&&s.details?.total?(0,B.jsx)(`progress`,{"aria-label":t?`下载进度`:`Download progress`,max:s.details.total,value:s.details.received??0}):null,m?(0,B.jsx)(`div`,{className:`personal-update-actions`,children:s.phase===`restart_required`?(0,B.jsx)(`button`,{type:`button`,onClick:()=>void g(`restart`),children:t?`重启完成更新`:`Restart to finish`}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`button`,{type:`button`,disabled:h,onClick:()=>void g(`check`),children:t?`检查更新`:`Check for updates`}),s.phase===`available`?(0,B.jsx)(`button`,{type:`button`,onClick:()=>void g(`apply`),children:t?`更新并准备重启`:`Install update`}):null]})}):(0,B.jsx)(`p`,{children:t?`请在 LoopX App 中更新;浏览器自身无需安装包。`:`Update from the LoopX App; the browser needs no installer.`}),(0,B.jsxs)(`details`,{children:[(0,B.jsx)(`summary`,{children:t?`高级选项`:`Advanced options`}),(0,B.jsxs)(`label`,{children:[t?`更新通道`:`Update channel`,(0,B.jsxs)(`select`,{disabled:h||s.phase===`restart_required`,value:a,onChange:e=>{o(e.target.value),c({phase:`idle`})},children:[(0,B.jsx)(`option`,{value:`stable`,children:t?`稳定版(推荐)`:`Stable (recommended)`}),(0,B.jsx)(`option`,{value:`main`,children:t?`main 预览版`:`main preview`})]})]}),(0,B.jsx)(`p`,{children:t?`App 与匹配的 CLI 一起更新,服务可能短暂断开。不删除 Goal 数据。`:`Updates the App and matching CLI. Services may briefly disconnect. Goal data is not deleted.`}),m?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`p`,{children:t?`启动失败时,可重装当前 App 随附的运行时。`:`If startup fails, reinstall this App's bundled runtime.`}),(0,B.jsx)(`button`,{disabled:h||s.phase===`restart_required`,type:`button`,onClick:()=>void g(`repair`),children:t?`修复当前版本`:`Repair this version`})]}):null,m&&d?(0,B.jsxs)(`details`,{children:[(0,B.jsx)(`summary`,{children:t?`恢复上个版本`:`Restore previous version`}),(0,B.jsx)(`p`,{children:t?`将恢复已保留的 App 和它的运行时,需要重启。`:`Restore the retained App and its runtime, then restart.`}),(0,B.jsx)(`button`,{disabled:h,type:`button`,onClick:()=>void g(`rollback`),children:t?`确认恢复上版`:`Restore previous version`})]}):null]})]})]})}var ib=e=>`loopx-sidebar-goal-order-v1:${encodeURIComponent(e)}`;function ab(e){try{let t=JSON.parse(e??`null`);return Array.isArray(t)&&t.every(e=>typeof e==`string`)?[...new Set(t)]:[]}catch{return[]}}function ob(e,t){let n=new Map(t.map((e,t)=>[e,t]));return[...e].sort((e,t)=>(n.get(e.goalId)??1/0)-(n.get(t.goalId)??1/0))}function sb(e,t,n,r,i){if(n===r||!t.includes(n)||!t.includes(r))return e;let a=[...new Set([...e,...t])].filter(e=>e!==n);return a.splice(a.indexOf(r)+Number(i),0,n),a}function cb(e,t){let n=ib(t),[r,i]=(0,z.useState)(()=>{try{return ab(localStorage.getItem(n))}catch{return[]}}),[a,o]=(0,z.useState)(!1),[s,c]=(0,z.useState)(null),[l,u]=(0,z.useState)(null),d=(0,z.useRef)(null),f=(0,z.useRef)(!1),p=ob(e,r),m=p.map(e=>e.goalId);function h(t,a,s){let l=sb(r,m,t,a,s);if(l===r)return;i(l);let u=ob(e,l),d=u.findIndex(e=>e.goalId===t),f=u[d];f&&c({title:f.title,position:d+1});try{localStorage.setItem(n,JSON.stringify(l)),o(!1)}catch{o(!0)}}function g(){d.current=null,u(null)}return{sorted:p,target:l,saveFailed:a,lastMoved:s,move:h,moveBy(e,t){let n=p[m.indexOf(e)+t];n&&h(e,n.goalId,t===1)},pointerProps:e=>({onPointerDown(t){f.current=!1,t.pointerType===`mouse`&&t.button===0&&(d.current={id:e,x:t.clientX,y:t.clientY,dragging:!1},t.currentTarget.setPointerCapture(t.pointerId))},onPointerMove(e){let t=d.current;if(!t||!t.dragging&&Math.hypot(e.clientX-t.x,e.clientY-t.y)<6)return;t.dragging=!0,f.current=!0;let n=document.elementFromPoint(e.clientX,e.clientY)?.closest(`[data-reorder-goal]`),r=e.currentTarget.closest(`.personal-goal-list`),i=n?.dataset.reorderGoal;if(!n||!i||!r?.contains(n)||i===t.id){u(null);return}let a=n.getBoundingClientRect();u({id:i,after:e.clientY>a.top+a.height/2})},onPointerUp(){d.current?.dragging&&l&&h(d.current.id,l.id,l.after),g()},onPointerCancel:g,onLostPointerCapture:g,onKeyDown(e){e.key===`Escape`&&g()},onClickCapture(e){f.current&&=(e.preventDefault(),e.stopPropagation(),!1)}})}}var lb=`/ssh-hosts`,ub=/^[A-Za-z0-9][A-Za-z0-9._-]{0,254}$/;function db(e){return typeof e==`string`&&ub.test(e.trim())}function fb(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`SSH Host 列表响应无效。`);let t=e;if(t.ok!==!0||t.schema_version!==`ssh_host_catalog_v0`||!Array.isArray(t.hosts))throw Error(`SSH Host 列表协议不兼容,请更新本机 LoopX 服务。`);let n=new Set;return{hosts:t.hosts.flatMap(e=>{if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=String(e.alias??``).trim();return!db(t)||n.has(t)?[]:(n.add(t),[{alias:t}])}),schemaVersion:`ssh_host_catalog_v0`}}async function pb(e=fetch,t=lb){let n=await e(t,{cache:`no-store`});if(!n.ok)throw Error(`无法读取本机 SSH Host(HTTP ${n.status})。`);return fb(await n.json())}function mb(e,t){let n=e.trim();if(!db(n))return{error:`请选择有效的 SSH Host。`};let r=Number(t);return!Number.isInteger(r)||r<1024||r>65535?{error:`本地端口必须是 1024–65535 之间的整数。`}:{command:`ssh -N -L ${r}:127.0.0.1:8766 ${n}`,hostAlias:n,label:n,statusUrl:`http://127.0.0.1:${r}/status.json`}}var hb=`/api/ssh-source/ensure`,gb=`/api/ssh-source/goal-lifecycle`;async function _b(e,t){let n=await fetch(hb,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({host_alias:e,local_port:Number(t)})}),r=await n.json().catch(()=>null);if(!n.ok)throw Error(r?.error??`无法建立 SSH 隧道来源。`);if(!r?.ok)throw Error(`无法建立 SSH 隧道来源。`);return r}async function vb(e,t,n,r,i=fetch){let a=await i(gb,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({goal_id:t,host_alias:e,operation:n,reason:r})}),o=await a.json().catch(()=>null);if(!a.ok)throw Error(o?.error??`无法更新远端 Goal 生命周期。`);if(!o?.ok||o.schema_version!==`loopx_remote_goal_lifecycle_v1`||o.goal_id!==t||o.host_alias!==e||o.operation!==n||o.activation_state!==(n===`stop`?`stopped`:`active`)||o.projection_verified!==!0)throw Error(`远端 Goal 生命周期回读未验证。`);return o}function yb({activeSource:e,connectionState:t,errorMessage:n,onAdd:r,onConfiguredHostsLoaded:i,onRemove:a,onSelect:o,sources:s}){let{t:c}=Ji(),[l,u]=(0,z.useState)(!1),[d,f]=(0,z.useState)(null),[p,m]=(0,z.useState)(`configured`),[h,g]=(0,z.useState)([]),[_,v]=(0,z.useState)(null),[y,b]=(0,z.useState)(!1),[x,S]=(0,z.useState)(!1),[C,w]=(0,z.useState)(``),[T,E]=(0,z.useState)(``),[D,O]=(0,z.useState)(`8876`),[ee,te]=(0,z.useState)(``),ne=`configured:`,k=[...s.map(e=>({label:e.label,value:e.id})),...h.filter(e=>!s.some(t=>t.label===e.alias)).map(e=>({group:c(`source.configuredGroup`,{count:h.length}),label:e.alias,value:`${ne}${e.alias}`}))],A=(0,z.useMemo)(()=>h.some(e=>e.alias===C)?mb(C,D):{error:c(`source.selectHost`)},[h,C,D,c]);(0,z.useEffect)(()=>{j()},[]);async function j(){b(!0),v(null);try{let e=await pb();g(e.hosts),i?.(e.hosts.map(e=>e.alias)),w(t=>t||e.hosts[0]?.alias||``),e.hosts.length||v(c(`source.hostEmpty`))}catch(e){v(e instanceof Error?e.message:c(`source.hostLoadError`))}finally{b(!1)}}function M(){u(!0),m(`configured`),f(null),j()}function N(){u(!1),m(`configured`),v(null),S(!1),w(``),f(null),E(``),O(`8876`),te(``)}function P(){let e=r({label:T,statusUrl:ee});if(e.error){f(e.error);return}N()}function F(){if(`error`in A){f(A.error??c(`source.invalid`));return}let e=r({ensureTunnel:!0,hostAlias:A.hostAlias,label:A.label,statusUrl:A.statusUrl});if(e.error){f(e.error);return}N()}function re(e){let t=new Set;for(let e of s)try{t.add(new URL(e.statusUrl).port)}catch{}let n=`8877`;for(let e=8877;e<9077;e+=1)if(!t.has(String(e))){n=String(e);break}let i=mb(e,n);if(`error`in i){f(i.error??c(`source.invalid`));return}let a=r({ensureTunnel:!0,hostAlias:i.hostAlias,label:i.label,statusUrl:i.statusUrl});a.error?f(a.error):f(null),O(n)}async function ie(){if(`error`in A){f(A.error??c(`source.invalid`));return}try{await navigator.clipboard.writeText(A.command),S(!0),f(null)}catch{f(c(`source.copyError`))}}return(0,B.jsxs)(`section`,{"aria-label":c(`source.controlPlane`),className:`personal-status-source`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`span`,{children:`Control plane`}),(0,B.jsx)(`button`,{"aria-label":c(`source.addSsh`),onClick:M,title:c(`source.add`),type:`button`,children:(0,B.jsx)(Pm,{size:14})})]}),(0,B.jsx)(Cy,{ariaLabel:c(`source.select`),className:`personal-status-source-select`,icon:(0,B.jsx)(Hm,{size:15}),onChange:e=>{if(e.startsWith(ne)){re(e.slice(11));return}o(e)},options:k,value:e.id}),(0,B.jsxs)(`div`,{className:`personal-status-source-meta`,children:[(0,B.jsxs)(`span`,{className:`is-${t}`,children:[(0,B.jsx)(`i`,{}),c(t===`loading`?`source.connecting`:t===`error`?`source.notAvailable`:`source.connected`)]}),(0,B.jsx)(`small`,{children:e.readOnly?c(`source.readOnly`):c(`source.localInteractive`)}),e.kind===`ssh_tunnel`?(0,B.jsx)(`button`,{"aria-label":c(`source.remove`,{source:e.label}),onClick:()=>a(e.id),title:c(`source.removeCurrent`),type:`button`,children:(0,B.jsx)(Xm,{size:12})}):null]}),n?(0,B.jsx)(`p`,{className:`personal-status-source-error`,role:`alert`,children:n}):null,l?(0,B.jsxs)(`div`,{className:`personal-status-source-form`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`strong`,{children:c(`source.addSsh`)}),(0,B.jsx)(`button`,{"aria-label":c(`source.closeForm`),onClick:N,type:`button`,children:(0,B.jsx)($m,{size:13})})]}),(0,B.jsxs)(`div`,{"aria-label":c(`source.addMethod`),className:`personal-status-source-modes`,role:`tablist`,children:[(0,B.jsx)(`button`,{"aria-selected":p===`configured`,onClick:()=>{m(`configured`),f(null)},role:`tab`,type:`button`,children:c(`source.configured`)}),(0,B.jsx)(`button`,{"aria-selected":p===`manual`,onClick:()=>{m(`manual`),f(null)},role:`tab`,type:`button`,children:c(`source.manual`)})]}),p===`configured`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:c(`source.configuredCount`,{count:h.length})}),(0,B.jsxs)(`span`,{className:`personal-status-source-field-row`,children:[(0,B.jsx)(`input`,{"aria-label":c(`source.host`),disabled:y||!h.length,list:`loopx-configured-ssh-hosts`,onChange:e=>{w(e.target.value),S(!1)},placeholder:c(y?`source.loadingHosts`:`source.hostPlaceholder`),value:C}),(0,B.jsx)(`datalist`,{id:`loopx-configured-ssh-hosts`,children:h.map(e=>(0,B.jsx)(`option`,{value:e.alias},e.alias))}),(0,B.jsx)(`button`,{"aria-label":c(`source.refreshHosts`),disabled:y,onClick:()=>void j(),title:c(`source.refreshHosts`),type:`button`,children:(0,B.jsx)(Rm,{size:13})})]})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:c(`source.localPort`)}),(0,B.jsx)(`input`,{"aria-label":c(`source.localPort`),inputMode:`numeric`,onChange:e=>{O(e.target.value),S(!1)},value:D})]}),(0,B.jsxs)(`div`,{className:`personal-status-source-command`,children:[(0,B.jsx)(`code`,{children:`error`in A?c(`source.tunnelCommandPending`):A.command}),(0,B.jsxs)(`button`,{"aria-label":c(`source.copyCommand`),disabled:`error`in A,onClick:()=>void ie(),type:`button`,children:[(0,B.jsx)(cm,{size:12}),c(x?`source.copied`:`source.copy`)]})]}),_?(0,B.jsx)(`p`,{className:`is-error`,children:_}):null,(0,B.jsx)(`p`,{children:c(`source.description`)}),(0,B.jsx)(`button`,{className:`personal-status-source-add`,disabled:`error`in A,onClick:F,type:`button`,children:c(`source.addConfigured`)})]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:c(`source.name`)}),(0,B.jsx)(`input`,{autoFocus:!0,maxLength:48,onChange:e=>E(e.target.value),placeholder:c(`source.namePlaceholder`),value:T})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:c(`source.statusUrl`)}),(0,B.jsx)(`input`,{onChange:e=>te(e.target.value),placeholder:`http://127.0.0.1:8876/status.json`,value:ee})]}),(0,B.jsx)(`p`,{children:(0,B.jsx)(`code`,{children:`ssh -N -L 8876:127.0.0.1:8766 `})}),(0,B.jsx)(`p`,{children:c(`source.manualDescription`)}),(0,B.jsx)(`button`,{className:`personal-status-source-add`,onClick:P,type:`button`,children:c(`source.addConfigured`)})]}),d?(0,B.jsx)(`p`,{className:`is-error`,role:`alert`,children:d}):null]}):null]})}var bb={需修复:`is-danger`,等你:`is-warning`,等待条件:`is-info`,推进中:`is-success`,安静运行:`is-quiet`,已完成:`is-quiet`,已停止:`is-stopped`};function xb({attentionCount:e,goals:t,goalArchiveLoadState:n={error:null,phase:`ready`},lifecycleBusyGoalIds:r,goalLifecycleOperations:i,onRequestGoalCreate:a,onOpenSettings:o,onRetryGoalArchive:s,onRequestGoalLifecycle:c,onSelectGoal:l,selectedGoalId:u,statusSourceControl:d}){let{locale:f,t:p}=Ji(),[m,h]=(0,z.useState)(!1),g=cb(t.filter(e=>e.activationState!==`stopped`),d?.activeSource.statusUrl??`/status.json`),_=g.sorted,v=t.filter(e=>e.activationState===`stopped`),y=e=>!!c&&(!i||i.includes(e)),b=(e,t)=>(0,B.jsxs)(`div`,{className:`personal-goal-row${g.target?.id===e.goalId?g.target.after?` is-drop-after`:` is-drop-before`:``}`,"data-reorder-goal":t?void 0:e.goalId,"data-load-error":e.loadError,children:[(0,B.jsxs)(`button`,{...t?{}:g.pointerProps(e.goalId),title:t?void 0:p(`sidebar.dragGoal`),"aria-current":u===e.goalId?`page`:void 0,className:`personal-goal-link`,onClick:()=>l(e.goalId),type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-goal-state-dot ${e.loadState?``:bb[e.state]}`}),(0,B.jsxs)(`span`,{className:`personal-goal-link-copy`,children:[(0,B.jsx)(`strong`,{children:e.title}),(0,B.jsxs)(`small`,{children:[e.loadState&&(!t||u===e.goalId)?p(e.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(e.state,f),e.needsYou&&!t?` · ${p(`home.lane.needsYou`)}`:``]})]}),(0,B.jsx)(nm,{size:15})]}),!t&&m?(0,B.jsxs)(`div`,{className:`personal-goal-move-actions`,children:[(0,B.jsx)(`button`,{type:`button`,"aria-label":p(`sidebar.moveUp`,{goal:e.title}),disabled:_[0]?.goalId===e.goalId,onClick:()=>g.moveBy(e.goalId,-1),children:(0,B.jsx)(Jp,{"aria-hidden":`true`,size:13})}),(0,B.jsx)(`button`,{type:`button`,"aria-label":p(`sidebar.moveDown`,{goal:e.title}),disabled:_.at(-1)?.goalId===e.goalId,onClick:()=>g.moveBy(e.goalId,1),children:(0,B.jsx)(Wp,{"aria-hidden":`true`,size:13})})]}):null,c&&y(t?`resume`:`stop`)?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`button`,{"aria-label":`${p(t?`sidebar.resume`:`sidebar.stop`)} ${e.title}`,"aria-busy":r?.has(e.goalId)||void 0,className:`personal-goal-lifecycle${r?.has(e.goalId)?` is-pending`:``}`,disabled:r?.has(e.goalId),onClick:()=>c(e,t?`resume`:`stop`),title:p(t?`sidebar.resumeGoal`:`sidebar.stopGoal`),type:`button`,children:r?.has(e.goalId)?(0,B.jsx)(Cm,{size:13}):t?(0,B.jsx)(Lm,{size:13}):(0,B.jsx)(Mm,{size:13})}),t&&y(`delete`)?(0,B.jsx)(`button`,{"aria-label":`${p(`sidebar.delete`)} ${e.title}`,className:`personal-goal-lifecycle personal-goal-delete`,onClick:()=>c(e,`delete`),title:p(`sidebar.deleteGoal`),type:`button`,children:(0,B.jsx)(Xm,{size:13})}):null]}):null]},e.goalId);return(0,B.jsxs)(`div`,{className:`personal-goal-directory`,children:[(0,B.jsxs)(`div`,{className:`personal-sidebar-brand`,children:[(0,B.jsx)(`span`,{className:`personal-brand-mark`,children:(0,B.jsx)(Zp,{size:18})}),(0,B.jsx)(`span`,{children:(0,B.jsx)(`strong`,{children:`LoopX`})})]}),d?(0,B.jsx)(yb,{...d}):null,(0,B.jsxs)(`nav`,{"aria-label":p(`home.workspace`),className:`personal-sidebar-nav`,children:[(0,B.jsxs)(`button`,{"aria-current":u===null?`page`:void 0,className:`personal-manager-link`,onClick:()=>l(null),type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-manager-icon`,children:(0,B.jsx)(Zp,{size:17})}),(0,B.jsx)(`span`,{children:p(`sidebar.manager`)}),e>0?(0,B.jsx)(`span`,{className:`personal-sidebar-count`,children:e}):null,(0,B.jsx)(nm,{size:15})]}),(0,B.jsxs)(`div`,{className:`personal-sidebar-section-title`,children:[(0,B.jsx)(`span`,{children:`Goals`}),(0,B.jsxs)(`span`,{className:`personal-sidebar-title-actions`,children:[(0,B.jsx)(`small`,{children:_.length}),(0,B.jsx)(`button`,{"aria-label":p(`sidebar.sortGoals`),title:p(`sidebar.sortGoals`),"aria-pressed":m,onClick:()=>h(!m),type:`button`,children:(0,B.jsx)(qp,{"aria-hidden":`true`,size:15})}),a?(0,B.jsx)(`button`,{"aria-label":p(`sidebar.createGoal`),onClick:a,type:`button`,children:(0,B.jsx)(Pm,{size:15})}):null]})]}),g.saveFailed?(0,B.jsx)(`p`,{role:`status`,children:p(`sidebar.orderNotSaved`)}):null,(0,B.jsx)(`span`,{className:`personal-sr-only`,role:`status`,children:g.lastMoved?p(`sidebar.goalMoved`,{goal:g.lastMoved.title,position:g.lastMoved.position}):``}),(0,B.jsx)(`div`,{className:`personal-goal-list`,children:_.map(e=>b(e,!1))}),v.length||n.phase===`loading`||n.phase===`error`?(0,B.jsxs)(`details`,{className:`personal-stopped-goals`,open:n.phase===`error`||void 0,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(tm,{size:13}),(0,B.jsx)(`span`,{children:p(`sidebar.stopped`)}),n.phase===`loading`?(0,B.jsx)(Cm,{"aria-label":p(`sidebar.stoppedLoading`),className:`is-spinning`,size:13}):(0,B.jsx)(`small`,{children:v.length})]}),(0,B.jsxs)(`div`,{className:`personal-goal-list is-stopped`,children:[n.phase===`error`?(0,B.jsxs)(`div`,{className:`personal-stopped-goal-error`,role:`alert`,children:[(0,B.jsx)(`span`,{children:p(`sidebar.stoppedLoadFailed`)}),s?(0,B.jsx)(`button`,{onClick:s,type:`button`,children:p(`sidebar.retryStopped`)}):null]}):null,v.map(e=>b(e,!0))]})]}):null]}),(0,B.jsxs)(`div`,{className:`personal-sidebar-footer`,children:[(0,B.jsx)(rb,{}),o?(0,B.jsxs)(`button`,{"aria-label":p(`settings.open`),className:`personal-sidebar-utility`,onClick:o,type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-sidebar-utility-icon`,children:(0,B.jsx)(Um,{size:17})}),(0,B.jsx)(`span`,{className:`personal-sidebar-utility-copy`,children:(0,B.jsx)(`strong`,{children:p(`settings.open`)})}),(0,B.jsx)(nm,{"aria-hidden":`true`,size:15})]}):null]})]})}var Sb=J({ok:X(!0),total:G().int().nonnegative(),next_cursor:W().nullable(),items:q(J({todo_id:W(),text:W(),claimed_by:W().nullable(),evidence:W().nullable(),priority:W().nullable(),task_class:W().nullable()})).max(40)});function Cb({goal:e,agentId:t,seed:n,enabled:r,listView:i=!1,onSelect:a}){let{t:o}=Ji(),s=(0,z.useId)(),[c,l]=(0,z.useState)(!1),u=!i||c,d=i?96:148,[f,p]=(0,z.useState)(n),[m,h]=(0,z.useState)(t===`all`?e.doneTodoCount??n.length:n.length),[g,_]=(0,z.useState)(void 0),[v,y]=(0,z.useState)(!1),[b,x]=(0,z.useState)(!1),[S,C]=(0,z.useState)(!1),[w,T]=(0,z.useState)({top:0,height:600}),[E,D]=(0,z.useState)(null),O=(0,z.useRef)(null),ee=(0,z.useRef)(null),[te,ne]=(0,z.useState)(0);(0,z.useEffect)(()=>{let e=O.current;if(!e)return;let t=new ResizeObserver(()=>T({top:e.scrollTop,height:e.clientHeight}));return t.observe(e),()=>{t.disconnect(),ee.current?.abort()}},[]);let k=g===void 0||w.top+w.height>=f.length*d-d*2;(0,z.useEffect)(()=>{if(!r||!u||!k||g===null||b||ee.current)return;let n=new AbortController;ee.current=n,y(!0);let i=new URLSearchParams({goal_id:e.goalId});t!==`all`&&i.set(`agent_id`,t),g&&i.set(`cursor`,g),fetch(`/api/chat/completed-todos?${i}`,{signal:n.signal}).then(async e=>{if(e.status===409&&C(!0),!e.ok)throw Error(`history unavailable`);let t=Sb.parse(await e.json());if(n.signal.aborted)return;let r=t.items.map(e=>({todoId:e.todo_id,text:e.text,claimedBy:e.claimed_by,evidence:e.evidence,priority:e.priority,taskClass:e.task_class,done:!0,status:`done`}));p(e=>g===void 0?r:[...e,...r.filter(t=>!e.some(e=>e.todoId===t.todoId))]),h(t.total),_(t.next_cursor)}).catch(()=>{n.signal.aborted||x(!0)}).finally(()=>{n.signal.aborted||(ee.current=null,y(!1))})},[r,u,k,g,b,te,e.goalId,t,v]),(0,z.useEffect)(()=>{O.current&&(O.current.scrollTop=0),T({top:0,height:O.current?.clientHeight??600}),D(null)},[i]);let A=Math.max(0,Math.floor(w.top/d)-3),j=Math.min(f.length,Math.ceil((w.top+w.height)/d)+3),M=Array.from({length:Math.max(0,j-A)},(e,t)=>A+t);return E!==null&&El(e=>!e),children:[(0,B.jsx)(`span`,{"aria-hidden":`true`,children:c?`▾`:`▸`}),` `,o(`tasks.completed`)]}):(0,B.jsxs)(`strong`,{children:[(0,B.jsx)(`i`,{"aria-hidden":`true`,className:`personal-kanban-dot tone-done`}),o(`tasks.completed`)]}),(0,B.jsx)(`span`,{children:m})]}),(0,B.jsxs)(`div`,{id:s,hidden:!u,"aria-label":o(`tasks.completed`),className:`personal-task-lane-scroll`,ref:O,role:`region`,tabIndex:0,onScroll:e=>T({top:e.currentTarget.scrollTop,height:e.currentTarget.clientHeight}),children:[(0,B.jsx)(`div`,{className:`personal-completed-window`,style:{height:f.length*d},children:M.map(t=>{let n=f[t];return(0,B.jsx)(`div`,{className:`personal-task-card personal-completed-row`,style:{top:t*d,height:d},children:(0,B.jsxs)(`button`,{type:`button`,onFocus:()=>D(t),onBlur:()=>D(null),onClick:()=>a({kind:`todo`,item:{...n,goalId:e.goalId,goalTitle:e.title,ownerLabel:n.claimedBy??e.agentLabel??e.agentId}}),children:[(0,B.jsx)(`span`,{className:`is-done`,children:`✓`}),(0,B.jsx)(`strong`,{children:n.text}),(0,B.jsx)(`small`,{children:n.claimedBy??e.agentLabel??e.agentId})]})},n.todoId)})}),(0,B.jsx)(`div`,{className:`personal-completed-footer`,role:`status`,children:v?o(`tasks.historyLoading`):b?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{children:o(S?`tasks.historyExpired`:`tasks.historyError`)}),(0,B.jsx)(`button`,{type:`button`,onClick:()=>{S&&(_(void 0),O.current&&(O.current.scrollTop=0)),C(!1),x(!1),ne(e=>e+1)},children:o(`tasks.historyRetry`)})]}):r?g===null?o(`tasks.historyEnd`):(0,B.jsx)(`button`,{type:`button`,onClick:()=>{O.current&&(O.current.scrollTop=f.length*d)},children:o(`tasks.historyMore`)}):o(`tasks.historyLocalOnly`)})]})]})}function wb({children:e,count:t,label:n,tone:r,listView:i=!1}){let a=(0,z.useId)(),o=(0,z.useRef)(null),s=(0,z.useRef)([]),c=(0,z.useRef)(null),[l,u]=(0,z.useState)({after:!1,before:!1}),d=(0,z.useCallback)(()=>{let e=o.current;if(!e)return;let t={after:Math.max(0,e.scrollHeight-e.clientHeight)-e.scrollTop>1,before:e.scrollTop>1};u(e=>e.after===t.after&&e.before===t.before?e:t)},[]);return(0,z.useEffect)(()=>{let e=o.current;if(!e)return;let t=new ResizeObserver(d);return c.current=t,t.observe(e),e.addEventListener(`scroll`,d,{passive:!0}),d(),()=>{t.disconnect(),c.current=null,s.current=[],e.removeEventListener(`scroll`,d)}},[i,d]),(0,z.useEffect)(()=>{let e=o.current,t=c.current;if(!e||!t)return;for(let e of s.current)t.unobserve(e);let n=Array.from(e.children).filter(e=>e instanceof HTMLElement);for(let e of n)t.observe(e);s.current=n,d()},[e,t,i,d]),i?!t&&r!==`done`?null:(0,B.jsxs)(`details`,{className:`personal-task-group tone-${r}`,open:!0,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(tm,{size:16}),(0,B.jsx)(`strong`,{children:n}),(0,B.jsx)(`span`,{children:t})]}),(0,B.jsx)(`div`,{className:`personal-task-list-rows`,children:e})]}):(0,B.jsxs)(`section`,{className:`personal-object-list personal-task-lane`,children:[(0,B.jsxs)(`header`,{id:a,children:[(0,B.jsxs)(`strong`,{children:[(0,B.jsx)(`i`,{"aria-hidden":`true`,className:`personal-kanban-dot tone-${r}`}),n]}),(0,B.jsx)(`span`,{children:t})]}),(0,B.jsx)(`div`,{"aria-labelledby":a,className:`personal-task-lane-scroll${l.before?` has-overflow-before`:``}${l.after?` has-overflow-after`:``}`,ref:o,role:`region`,tabIndex:t>0?0:-1,children:e})]})}function Tb({historyEnabled:e=!1,goal:t,items:n,onDraftTaskFromMessage:r,onOpenChat:i,onQuickComplete:a,quickCompletingTodoIds:o,onSelect:s,selectedTodoId:c=null,userTodos:l}){let{t:u}=Ji(),[d,f]=(0,z.useState)(!1),[p,m]=(0,z.useState)({goalId:``,laneId:`all`}),h=(0,z.useRef)(null);(0,z.useEffect)(()=>{if(!c)return;let e=window.requestAnimationFrame(()=>h.current?.scrollIntoView({block:`nearest`,inline:`nearest`}));return()=>window.cancelAnimationFrame(e)},[c]);let g=l.filter(e=>e.goalId===t.goalId).map(e=>({...e,goalTitle:t.title})),_=e=>e.priority===`P0`?0:e.priority===`P1`?1:e.priority===`P2`?2:3,v=(0,z.useMemo)(()=>{let e=new Map((t.agentLanes??[]).map(e=>[e.agentId,e]));for(let n of t.agentTodos)n.claimedBy&&!e.has(n.claimedBy)&&e.set(n.claimedBy,{agentId:n.claimedBy,label:n.claimedBy});return[...e.values()]},[t.agentLanes,t.agentTodos]),y=p.goalId===t.goalId&&v.some(e=>e.agentId===p.laneId)?p.laneId:`all`,b=e=>y===`all`||e===y,x=t.agentTodos.filter(e=>e.taskClass!==`continuous_monitor`&&!e.done).filter(e=>b(e.claimedBy)).sort((e,t)=>_(e)-_(t)),S=t.agentTodos.filter(e=>e.taskClass!==`continuous_monitor`&&e.done).filter(e=>b(e.claimedBy)),C=n.filter(e=>e.kind===`schedule`&&b(e.schedule.agentId)),w=n.filter(e=>e.kind===`run`&&!!e.run.todoId&&b(e.run.agentId)),T=!g.length&&!x.length&&!S.length&&!C.length,E=n.filter(e=>e.kind===`message`&&(e.message.role===`user`||e.message.role===`assistant`)),D=E.reduce((e,t,n)=>t.message.role===`user`?n:e,-1),O=D>=0?E[D]?.message:null,ee=D>=0?E.slice(D+1).reverse().find(e=>e.message.role===`assistant`)?.message:null,te=D>=0&&E.slice(D+1).some(e=>e.message.role===`assistant`&&e.message.pending);return(0,B.jsxs)(`section`,{"aria-label":u(`header.tasks`),className:`personal-task-board${d?` is-list-view`:``}`,children:[(0,B.jsxs)(`header`,{className:`personal-task-view-toolbar`,children:[(0,B.jsx)(`div`,{children:(0,B.jsx)(`strong`,{children:u(`header.tasks`)})}),(0,B.jsxs)(`div`,{className:`personal-task-view-switch`,role:`group`,"aria-label":u(`tasks.viewLabel`),children:[(0,B.jsx)(`button`,{type:`button`,"aria-pressed":d,onClick:()=>f(!0),children:u(`tasks.listView`)}),(0,B.jsx)(`button`,{type:`button`,"aria-pressed":!d,onClick:()=>f(!1),children:u(`tasks.boardView`)})]})]}),v.length>1?(0,B.jsxs)(`section`,{"aria-label":u(`tasks.agentLaneFilter`),className:`personal-task-lane-filter`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(Zp,{size:15}),(0,B.jsx)(`span`,{children:(0,B.jsx)(`strong`,{children:u(`tasks.agentLane`)})})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{className:`sr-only`,children:u(`tasks.agentLaneFilter`)}),(0,B.jsxs)(`select`,{"aria-label":u(`tasks.agentLaneFilter`),onChange:e=>m({goalId:t.goalId,laneId:e.target.value}),value:y,children:[(0,B.jsx)(`option`,{value:`all`,children:u(`tasks.allAgentLanes`,{count:v.length})}),v.map(e=>(0,B.jsx)(`option`,{value:e.agentId,children:e.label},e.agentId))]}),(0,B.jsx)(tm,{"aria-hidden":!0,size:14})]})]}):null,O?(0,B.jsxs)(`section`,{"aria-label":u(`tasks.chatRecent`),className:`personal-task-chat-receipt`,children:[(0,B.jsx)(`span`,{className:`personal-task-chat-icon`,children:(0,B.jsx)(Dm,{size:18})}),(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`strong`,{children:u(te?`tasks.chatPending`:ee?`tasks.chatAgentReplied`:`tasks.chatRecent`)}),(0,B.jsx)(`small`,{children:t.agentLabel??t.agentId})]}),(0,B.jsxs)(`p`,{className:`is-user`,children:[(0,B.jsx)(`b`,{children:u(`common.you`)}),O.text]}),ee&&!ee.pending?(0,B.jsxs)(`p`,{className:`is-assistant`,children:[(0,B.jsx)(`b`,{children:u(`common.agent`)}),ee.text]}):null,(0,B.jsx)(`small`,{children:u(te?`tasks.chatPendingDescription`:`tasks.chatUnchangedDescription`)})]}),(0,B.jsxs)(`footer`,{children:[(0,B.jsxs)(`button`,{onClick:i,type:`button`,children:[(0,B.jsx)(Dm,{size:14}),u(`tasks.chatViewReply`)]}),ee&&!te&&r?(0,B.jsxs)(`button`,{onClick:()=>r(ee.text),type:`button`,children:[(0,B.jsx)(Sm,{size:14}),u(`tasks.convertToTask`)]}):null]})]}):null,(0,B.jsxs)(`div`,{className:d?`personal-task-grouped-list`:`personal-task-kanban`,children:[(0,B.jsxs)(wb,{listView:d,count:g.length,label:u(`timeline.waitingConfirmation`),tone:`attention`,children:[g.map(e=>{let t=Zi(e.updatedAt,u);return(0,B.jsxs)(`button`,{onClick:()=>s({item:e,kind:`attention`}),type:`button`,children:[(0,B.jsx)(`span`,{"aria-hidden":`true`,className:`is-attention`,children:`!`}),(0,B.jsx)(`strong`,{children:e.text}),(0,B.jsxs)(`small`,{children:[(0,B.jsx)(`span`,{className:`personal-row-status ${e.blocking?`is-blocking`:`is-pending`}`,children:e.blocking?u(`tasks.blocked`):u(`tasks.pending`)}),t?(0,B.jsx)(`span`,{className:`personal-task-age`,children:u(`tasks.waitingAge`,{age:t})}):null]})]},e.todoId)}),g.length?null:(0,B.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyConfirm`)})]}),(0,B.jsxs)(wb,{listView:d,count:x.length,label:u(`tasks.pendingAndRunning`),tone:`progress`,children:[x.map(e=>{let n={...e,goalId:t.goalId,goalTitle:t.title,ownerLabel:e.claimedBy??t.agentLabel??t.agentId},r=w.find(t=>t.run.todoId===e.todoId)?.run;return(0,B.jsxs)(`div`,{className:`personal-task-card${r?` has-session`:``}${c===e.todoId?` is-selected`:``}`,ref:c===e.todoId?e=>{h.current=e}:void 0,children:[(0,B.jsxs)(`button`,{"aria-pressed":c===e.todoId,onClick:()=>s({item:n,kind:`todo`}),type:`button`,children:[(0,B.jsx)(`span`,{children:`○`}),(0,B.jsx)(`strong`,{children:e.text}),(0,B.jsxs)(`small`,{children:[e.priority?(0,B.jsx)(`span`,{className:`personal-priority-badge is-${e.priority.toLowerCase()}`,children:e.priority}):null,e.status===`blocked`?(0,B.jsx)(`span`,{className:`personal-priority-badge is-blocked`,children:u(`tasks.blocked`)}):null,r?(0,B.jsx)(`span`,{className:`personal-task-session-status`,children:r.status===`running`||r.status===`queued`?u(`runs.running`):r.status===`failed`?u(`tasks.sessionError`):u(`common.waiting`)}):null,e.status===`deferred`?(0,B.jsx)(`span`,{className:`personal-task-session-status`,children:u(`drawer.taskStatusDeferred`)}):r?null:(0,B.jsx)(`span`,{className:`personal-task-session-status`,children:u(`tasks.waiting`)}),e.claimedBy??t.agentLabel??t.agentId]})]}),(0,B.jsxs)(`div`,{className:`personal-task-card-actions`,children:[r?(0,B.jsxs)(`button`,{className:`personal-task-session-link`,"aria-label":u(`tasks.openExecution`,{name:e.text}),onClick:()=>s({item:r,kind:`run`}),title:r.status===`completed`?u(`tasks.viewResult`):u(`tasks.viewExecution`),type:`button`,children:[(0,B.jsx)(fm,{size:14}),(0,B.jsx)(`span`,{children:r.status===`completed`?u(`tasks.viewResult`):u(`tasks.viewExecution`)})]}):null,a?(0,B.jsx)(`button`,{"aria-busy":o?.has(e.todoId)||void 0,"aria-label":u(`tasks.markComplete`,{name:e.text}),disabled:o?.has(e.todoId),onClick:()=>void a(n),title:u(`tasks.completed`),type:`button`,children:o?.has(e.todoId)?(0,B.jsx)(Cm,{className:`personal-spin`,size:14}):(0,B.jsx)(em,{size:14})}):null,(0,B.jsx)(`button`,{"aria-label":u(`tasks.moreActions`,{name:e.text}),onClick:()=>s({item:n,kind:`todo`}),title:u(`common.actions`),type:`button`,children:(0,B.jsx)(dm,{size:14})})]})]},e.todoId)}),x.length?null:(0,B.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyRunning`)})]}),(0,B.jsxs)(wb,{listView:d,count:C.length,label:u(`tasks.scheduled`),tone:`schedule`,children:[C.map(e=>(0,B.jsxs)(`button`,{onClick:()=>s({item:e.schedule,kind:`schedule`}),type:`button`,children:[(0,B.jsx)(`span`,{children:`◷`}),(0,B.jsx)(`strong`,{children:e.schedule.label}),(0,B.jsx)(`small`,{children:e.schedule.status===`paused`?u(`schedule.paused`):u(`schedule.active`)})]},e.id)),C.length?null:(0,B.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptySchedules`)})]}),(0,B.jsx)(Cb,{goal:t,agentId:y,seed:S,enabled:e,listView:d,onSelect:s},`${t.goalId}:${y}:${e}`)]}),T?(0,B.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyGoal`)}):null]})}function Eb(e,t){return{live_steering:{label:t(`lark.ingressSteering`),detail:t(`lark.ingressSteeringDescription`)},session_queue:{label:t(`lark.ingressQueue`),detail:t(`lark.ingressQueueDescription`)},async_inbox:{label:t(`lark.ingressAsync`),detail:t(`lark.ingressAsyncDescription`)},direct_session:{label:t(`lark.ingressLegacy`),detail:t(`lark.ingressLegacyDescription`)}}[e]}function Db(e,t){return e.listener_status===`starting`?{label:t(`lark.health.starting`),detail:t(`lark.health.startingDetail`),state:`not_ready`}:e.listener_status===`retrying`&&e.listener_error_code===`lark_event_source_disconnected`?{label:t(`lark.health.sourceDisconnected`),detail:t(`lark.health.sourceDisconnectedDetail`),state:`not_ready`}:e.listener_status===`retrying`?{label:t(`lark.health.retrying`),detail:t(`lark.health.retryingDetail`),state:`not_ready`}:e.listener_status===`stopped`||e.listener_status===null?{label:t(`lark.health.notStarted`),detail:t(`lark.health.notStartedDetail`),state:`not_ready`}:e.last_event_status===`message_context_permission_required`?{label:t(`lark.health.messageContextPermission`),detail:t(`lark.health.messageContextPermissionDetail`),state:`not_ready`}:e.last_event_status===`processing_failed`?{label:t(`lark.health.processingFailed`),detail:t(`lark.health.processingFailedDetail`),state:`not_ready`}:e.health_error_code===`invalid_routing_state`?{label:t(`lark.health.invalidRouting`),detail:t(`lark.health.invalidRoutingDetail`),state:`not_ready`}:e.last_event_status===`queued_for_agent`?{label:t(`lark.health.queued`),detail:t(`lark.health.queuedDetail`,{agent:e.agent_id??t(`lark.targetAgent`)}),state:`ready`}:e.last_event_status===`ignored`&&e.last_event_reason===`not_addressed`?{label:t(`lark.health.notAddressed`),detail:t(`lark.health.notAddressedDetail`),state:`ready`}:e.last_event_status===`ignored`&&e.last_event_reason===`self_message`?{label:t(`lark.health.listening`),detail:t(`lark.health.ignoredSelf`),state:`ready`}:e.health_error_code===`lark_event_route_mismatch`||[`chat_mismatch`,`topic_mismatch`,`route_ambiguous`].includes(e.last_event_reason??``)?{label:e.last_event_reason===`route_ambiguous`?t(`lark.health.routeAmbiguous`):t(`lark.health.routeMismatch`),detail:e.last_event_reason===`route_ambiguous`?t(`lark.health.routeAmbiguousDetail`):t(`lark.health.routeMismatchDetail`),state:`not_ready`}:[`invalid_event`,`binding_unavailable`].includes(e.last_event_reason??``)?{label:t(`lark.health.routeUnavailable`),detail:t(`lark.health.routeUnavailableDetail`),state:`not_ready`}:e.last_event_status===`replied_and_acknowledged`?{label:t(`lark.health.listening`),detail:t(`lark.health.eventProcessed`,{events:e.event_count,replies:e.replied_count}),state:`ready`}:e.health_error_code===`lark_event_delivery_unverified`||e.event_count===0?{label:t(`lark.health.eventUnverified`),detail:t(`lark.health.eventUnverifiedDetail`),state:`unverified`}:{label:e.reply_ready?t(`lark.health.listening`):t(`lark.health.unavailable`),detail:t(`lark.health.lastStatus`,{status:e.last_event_status??t(`lark.health.waiting`)}),state:e.reply_ready?`ready`:`not_ready`}}function Ob(e){return e.history_permission_guidance?.api_document_url??null}function kb(e,t,n){if(e instanceof Th){let t=String(e.payload.error_code??``);return{lark_cli_not_installed:n(`lark.error.cliMissing`),lark_cli_not_executable:n(`lark.error.cliExecutable`),lark_cli_start_failed:n(`lark.error.cliStart`),lark_message_permissions_required:n(`lark.error.messagePermissions`),lark_app_required:n(`lark.error.appRequired`),invalid_lark_app:n(`lark.error.invalidApp`),lark_group_lookup_failed:n(`lark.error.groupLookup`),provider_api_failed:n(`lark.error.provider`)}[t]??e.message}return e instanceof Error?e.message:t}function Ab({embedded:e=!1,focusGoalConnection:t=!1,goals:n,initialGoalId:r,onChanged:i,onClose:a}){let{t:o}=Ji(),[s,c]=(0,z.useState)(`connections`),[l,u]=(0,z.useState)([]),[d,f]=(0,z.useState)([]),[p,m]=(0,z.useState)(!0),[h,g]=(0,z.useState)(null),[_,v]=(0,z.useState)(``),[y,b]=(0,z.useState)(t),[x,S]=(0,z.useState)(``),[C,w]=(0,z.useState)(r??n[0]?.goalId??``),[T,E]=(0,z.useState)(``),[D,O]=(0,z.useState)([]),[ee,te]=(0,z.useState)(``),[ne,k]=(0,z.useState)(!1),[A,j]=(0,z.useState)(null),[M,N]=(0,z.useState)(`addressed_only`),[P,F]=(0,z.useState)(t&&r?`goal`:`manager`),[re,ie]=(0,z.useState)(`async_inbox`),[I,ae]=(0,z.useState)(`topic_reply`),[L,oe]=(0,z.useState)(``),[se,ce]=(0,z.useState)(!1),[le,ue]=(0,z.useState)({}),[de,fe]=(0,z.useState)(!1),[pe,me]=(0,z.useState)(null),[he,ge]=(0,z.useState)(null),[_e,ve]=(0,z.useState)(null),[ye,be]=(0,z.useState)(null),[xe,Se]=(0,z.useState)(!1),[Ce,we]=(0,z.useState)(`loopx-workspace-bot`),[Te,Ee]=(0,z.useState)(`feishu`),[R,De]=(0,z.useState)(null),[Oe,ke]=(0,z.useState)(!1),[Ae,je]=(0,z.useState)(null),Me=(0,z.useRef)(null),Ne=(0,z.useRef)(null),Pe=(0,z.useRef)(!1);async function Fe(){m(!0),g(null);try{let[e,t]=await Promise.all([Rg(),qg()]);u(e),f(t),S(t=>t||e.find(e=>e.reply_ready)?.app_ref||e.find(e=>e.ready)?.app_ref||e[0]?.app_ref||``)}catch(e){g(kb(e,o(`lark.error.configuration`),o))}finally{m(!1)}}(0,z.useEffect)(()=>{Fe()},[]),(0,z.useEffect)(()=>{if(!t||p||Pe.current||!r)return;Pe.current=!0;let e=d.find(e=>e.goal_id===r);e?Je(e):qe(n.find(e=>e.goalId===r))},[d,t,n,r,p]),(0,z.useEffect)(()=>{if(!y||!x||_e){O([]),te(``),k(!1),j(null);return}let e=!1;k(!0),j(null);let t=window.setTimeout(()=>{Gg(x,T).then(t=>{e||(O(t),te(e=>t.some(t=>t.chat_id===e)?e:t[0]?.chat_id??``))}).catch(t=>{e||(O([]),te(``),j(kb(t,o(`lark.error.groupLoad`),o)))}).finally(()=>{e||k(!1)})},180);return()=>{e=!0,window.clearTimeout(t)}},[x,T,y,_e]),(0,z.useEffect)(()=>{if(!xe||!R||[`ready`,`failed`,`cancelled`].includes(R.status))return;let e=!1,t=window.setTimeout(()=>{Vg(R.setup_id).then(async t=>{e||(De(t),t.verification_url&&Ne.current!==t.verification_url&&(Ne.current=t.verification_url,Me.current&&!Me.current.closed&&(Me.current.location.href=t.verification_url)),t.status===`ready`&&(await Fe(),S(t.app_ref),ue({}),Se(!1)),t.status===`failed`&&je(t.error??o(`lark.error.appCreate`)))}).catch(t=>{e||je(kb(t,o(`lark.error.setupPoll`),o))})},650);return()=>{e=!0,window.clearTimeout(t)}},[xe,R]);let V=n.find(e=>e.goalId===C),Ie=V?.agentId?[{agentId:V.agentId,label:V.agentLabel??V.agentId}]:[],Le=V?.agentLanes?.length?V.agentLanes:Ie,Re=Le.some(e=>e.agentId===L),ze=[];se?ze=Le.map(e=>({agentId:e.agentId,appRef:le[e.agentId]??x})):Re&&(ze=[{agentId:L,appRef:x}]);let Be=ze.map(e=>e.agentId),Ve=!!_e||ze.length>0&&ze.every(e=>l.some(t=>t.app_ref===e.appRef&&t.reply_ready)),He=o(`lark.connect`);he?He=o(`lark.saveConnection`):se&&(He=o(`lark.connectAllAgentsAction`,{count:Be.length}));let Ue=l.find(e=>e.app_ref===x),We=D.find(e=>e.chat_id===ee),Ge=(0,z.useMemo)(()=>{let e=_.trim().toLocaleLowerCase();return e?d.filter(t=>[t.app_label,t.chat_name,t.goal_title,t.topic_name].some(t=>t.toLocaleLowerCase().includes(e))):d},[d,_]),Ke=(0,z.useMemo)(()=>d.filter(e=>Db(e,o).state===`unverified`).length,[d,o]);function qe(e){let i=e??n.find(e=>e.goalId===r)??n[0];ge(null),ve(null),F(e||t?`goal`:`manager`),S(l.some(e=>e.app_ref===x)?x:l.find(e=>e.reply_ready)?.app_ref??l[0]?.app_ref??``),te(``),w(i?.goalId??``),oe(i?.agentId??``),ce(!1),ue({}),N(`addressed_only`),ie(`async_inbox`),ae(`topic_reply`),E(``),me(null),b(!0)}function Je(e){ge(e.goal_id),ve(e),F(e.conversation_kind??`goal`),S(e.app_ref),w(e.goal_id);let t=n.find(t=>t.goalId===e.goal_id),r=t?.agentLanes?.length?t.agentLanes:t?.agentId?[{agentId:t.agentId}]:[];oe(e.agent_id??(r.length===1?r[0].agentId:``)),ce(!1),ue({}),N(e.capture_scope),ie(e.ingress_mode===`direct_session`?`async_inbox`:e.ingress_mode),ae(e.reply_mode),E(e.chat_name),me(null),b(!0)}function Ye(){De(null),je(null),Ne.current=null,Se(!0)}async function Xe(){if(!(Oe||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce))){ke(!0),je(null),Ne.current=null,Me.current=window.open(window.location.href,`_blank`);try{let e=await Bg({appRef:Ce,brand:Te});De(e)}catch(e){Me.current?.close(),je(kb(e,o(`lark.error.setupStart`),o))}finally{ke(!1)}}}async function Ze(){let e=R;if(Se(!1),Me.current?.close(),e&&![`ready`,`failed`,`cancelled`].includes(e.status))try{await Hg(e.setup_id)}catch{}}async function Qe(){if(!(!x||!C||!_e&&!We||P===`goal`&&Be.length===0||de)){fe(!0),me(null);try{let e={...P===`manager`?{..._e?{connectionId:_e.connection_id}:{appRef:x,chatId:We.chat_id,chatName:We.chat_name}}:_e?{connectionId:_e.connection_id,agentId:L}:{agentBindings:ze,chatId:We.chat_id,chatName:We.chat_name},conversationKind:P,captureScope:P===`manager`?`addressed_only`:M,goalId:C,incomingMode:M===`configured_chat_all`?`all`:`mentions`,ingressMode:P===`manager`?`session_queue`:re,replyMode:I},t=await Jg({...e,execute:!1});if(!t.ok)throw new Th(t.public_summary??t.blocker??o(`lark.error.bindPreview`),{error_code:t.blocker??`provider_api_failed`});let n=await Jg({...e,execute:!0});if(!n.ok)throw new Th(n.public_summary??n.blocker??o(`lark.error.bind`),{error_code:n.blocker??`provider_api_failed`});b(!1),await Fe(),i?.()}catch(e){me(kb(e,o(`lark.error.bind`),o))}finally{fe(!1)}}}async function $e(e,t){if(ye!==t){be(t);return}try{await Yg(e,t),be(null),await Fe(),i?.()}catch(e){g(kb(e,o(`lark.error.disconnect`),o))}}return(0,B.jsxs)(`section`,{className:`personal-lark-settings${e?` is-embedded`:``}`,"aria-label":o(`lark.configuration`),children:[e?null:(0,B.jsxs)(`header`,{className:`personal-lark-header`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`small`,{children:o(`settings.goalConnections`)}),(0,B.jsx)(`h1`,{children:`Lark`})]}),(0,B.jsx)(`button`,{"aria-label":o(`lark.closeSettings`),className:`personal-icon-button`,onClick:a,type:`button`,children:(0,B.jsx)($m,{size:18})})]}),(0,B.jsxs)(`nav`,{className:`personal-lark-tabs`,"aria-label":o(`lark.management`),children:[(0,B.jsxs)(`button`,{"aria-current":s===`apps`?`page`:void 0,onClick:()=>c(`apps`),type:`button`,children:[o(`lark.apps`),` `,(0,B.jsx)(`span`,{children:p?`…`:l.length})]}),(0,B.jsxs)(`button`,{"aria-current":s===`connections`?`page`:void 0,onClick:()=>c(`connections`),type:`button`,children:[o(`lark.connections`),` `,(0,B.jsx)(`span`,{children:p?`…`:d.length})]})]}),h?(0,B.jsx)(`p`,{className:`personal-notification-error`,children:h}):null,p?(0,B.jsxs)(`div`,{className:`personal-lark-loading`,children:[(0,B.jsx)(Cm,{className:`is-spinning`,size:18}),o(`lark.loading`)]}):null,!p&&s===`apps`?(0,B.jsxs)(`div`,{className:`personal-lark-apps`,children:[(0,B.jsxs)(`div`,{className:`personal-lark-app-toolbar`,children:[(0,B.jsx)(`span`,{children:o(`lark.reusableApps`,{count:l.length})}),(0,B.jsxs)(`button`,{className:`personal-primary-action`,onClick:Ye,type:`button`,children:[(0,B.jsx)(Pm,{size:16}),o(`lark.newApp`)]})]}),(0,B.jsxs)(`div`,{className:`personal-lark-app-grid`,children:[l.map(e=>(0,B.jsxs)(`article`,{className:`personal-lark-app-card`,children:[(0,B.jsx)(`span`,{className:`personal-lark-app-avatar`,children:(0,B.jsx)(Zp,{size:19})}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:e.label}),(0,B.jsxs)(`small`,{children:[e.brand,` · lark-cli profile`]})]}),(0,B.jsx)(`em`,{className:e.reply_ready?`is-ready`:`is-off`,children:e.reply_ready?o(`lark.autoReplyReady`):e.ready?o(`lark.needsMessagePermissions`):o(`lark.needsSetup`)}),(0,B.jsxs)(`p`,{children:[o(`lark.goalConnections`,{count:d.filter(t=>t.app_ref===e.app_ref).length}),e.ready&&!e.reply_ready?` · ${o(`lark.autoReplyUnavailable`)}`:``]})]},e.app_ref)),l.length===0?(0,B.jsx)(`p`,{className:`personal-lark-empty`,children:o(`lark.noProfiles`)}):null]})]}):null,!p&&s===`connections`?(0,B.jsxs)(`div`,{className:`personal-lark-connections`,children:[Ke>0?(0,B.jsxs)(`p`,{className:`personal-lark-route-readiness`,role:`status`,children:[(0,B.jsx)(Dm,{size:15}),o(`lark.routesUnverified`,{count:Ke})]}):null,(0,B.jsxs)(`div`,{className:`personal-lark-toolbar`,children:[(0,B.jsxs)(`label`,{children:[(0,B.jsx)(zm,{size:16}),(0,B.jsx)(`input`,{"aria-label":o(`lark.searchConnections`),onChange:e=>v(e.target.value),placeholder:o(`lark.searchPlaceholder`),type:`search`,value:_})]}),(0,B.jsxs)(`button`,{className:`personal-primary-action`,disabled:l.length===0||n.length===0,onClick:()=>qe(),type:`button`,children:[(0,B.jsx)(Pm,{size:16}),o(`lark.connectApp`)]})]}),(0,B.jsxs)(`div`,{className:`personal-lark-table`,role:`table`,"aria-label":o(`lark.goalTopicConnections`),children:[(0,B.jsxs)(`div`,{className:`personal-lark-table-head`,role:`row`,children:[(0,B.jsx)(`span`,{children:o(`lark.connection`)}),(0,B.jsx)(`span`,{children:o(`common.goal`)}),(0,B.jsx)(`span`,{children:o(`lark.capture`)}),(0,B.jsx)(`span`,{children:o(`lark.processing`)}),(0,B.jsx)(`span`,{children:o(`common.actions`)})]}),Ge.map(e=>{let t=Db(e,o);return(0,B.jsxs)(`div`,{className:`personal-lark-table-row`,role:`row`,children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:e.chat_name}),(0,B.jsxs)(`small`,{children:[e.app_label,` · `,t.label]}),(0,B.jsx)(`small`,{children:t.detail}),t.state===`unverified`?(0,B.jsxs)(`a`,{href:`https://open.feishu.cn/document/server-docs/im-v1/message/events/receive?lang=zh-CN`,rel:`noreferrer`,target:`_blank`,children:[(0,B.jsx)(fm,{size:12}),o(`lark.openEventSettings`)]}):null,Ob(e)?(0,B.jsxs)(`a`,{href:Ob(e)??void 0,rel:`noreferrer`,target:`_blank`,children:[(0,B.jsx)(fm,{size:12}),o(`lark.historyPermission`)]}):null]}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:e.goal_title}),(0,B.jsxs)(`small`,{children:[`# `,e.topic_name]})]}),(0,B.jsx)(`span`,{children:e.capture_scope===`addressed_only`?o(`lark.mentionsOnly`):o(`lark.allTopicMessages`)}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:e.conversation_kind===`manager`?o(`lark.managerConversation`):Eb(e.ingress_mode,o).label}),(0,B.jsx)(`small`,{children:e.conversation_kind===`manager`?o(`lark.managerConversationDescription`):e.agent_id??Eb(e.ingress_mode,o).detail})]}),(0,B.jsxs)(`span`,{className:`personal-lark-row-actions`,children:[(0,B.jsx)(`button`,{"aria-label":o(`lark.settingsConfigure`,{goal:e.goal_title}),onClick:()=>Je(e),type:`button`,children:(0,B.jsx)(Um,{size:15})}),(0,B.jsxs)(`button`,{"aria-label":o(`lark.settingsDisconnect`,{goal:e.goal_title}),className:ye===e.connection_id?`is-confirm`:``,onClick:()=>void $e(e.goal_id,e.connection_id),type:`button`,children:[(0,B.jsx)(Qm,{size:15}),ye===e.connection_id?o(`common.confirm`):null]})]})]},e.connection_id)}),Ge.length===0?(0,B.jsx)(`p`,{className:`personal-lark-empty`,children:o(`lark.noConnections`)}):null]})]}):null,y?(0,B.jsx)(`div`,{className:`personal-lark-modal-backdrop`,role:`presentation`,children:(0,B.jsxs)(`section`,{"aria-labelledby":`connect-lark-title`,"aria-modal":`true`,className:`personal-lark-modal`,role:`dialog`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`small`,{children:`Goal Topic connection`}),(0,B.jsx)(`h2`,{id:`connect-lark-title`,children:o(he?`lark.editConnection`:`lark.connectApp`)})]}),(0,B.jsx)(`button`,{"aria-label":o(`lark.closeConnection`),onClick:()=>b(!1),type:`button`,children:(0,B.jsx)($m,{size:18})})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.conversationKind`)}),(0,B.jsxs)(`select`,{"aria-label":o(`lark.conversationKind`),disabled:!!_e,value:P,onChange:e=>F(e.target.value),children:[(0,B.jsx)(`option`,{value:`manager`,children:o(`lark.managerConversation`)}),(0,B.jsx)(`option`,{value:`goal`,children:o(`lark.workerConversation`)})]})]}),P===`manager`?(0,B.jsx)(`p`,{children:o(`lark.managerConversationDescription`)}):null,_e?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.appProfile`)}),(0,B.jsx)(`div`,{children:_e.app_label})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.groupChat`)}),(0,B.jsx)(`div`,{children:_e.chat_name})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.bindGoal`)}),(0,B.jsx)(`div`,{children:_e.goal_title})]}),(0,B.jsx)(`small`,{children:o(`lark.editPreservesIdentity`)})]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.appProfile`)}),(0,B.jsx)(`select`,{"aria-label":o(`lark.appProfile`),disabled:p,onChange:e=>{e.target.value===`__register__`?Ye():(S(e.target.value),ue({}))},value:x,children:p?(0,B.jsx)(`option`,{value:``,children:o(`lark.appLoading`)}):(0,B.jsxs)(B.Fragment,{children:[l.map(e=>(0,B.jsxs)(`option`,{disabled:!e.ready,value:e.app_ref,children:[e.label,e.reply_ready?``:e.ready?` · ${o(`lark.needsMessagePermissions`)}`:` · ${o(`lark.needsSetup`)}`]},e.app_ref)),(0,B.jsx)(`option`,{value:`__register__`,children:o(`lark.registerAnother`)})]})}),(0,B.jsx)(`small`,{children:o(`lark.defaultAgentAppDescription`)})]}),Ue?.ready&&!Ue.reply_ready?(0,B.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:o(`lark.appPermissions`)}):null,(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.groupChat`)}),(0,B.jsx)(`input`,{"aria-label":o(`lark.groupSearch`),onChange:e=>E(e.target.value),placeholder:o(`lark.groupSearch`),type:`search`,value:T}),ne?(0,B.jsxs)(`div`,{className:`personal-lark-group-state`,role:`status`,children:[(0,B.jsx)(Cm,{className:`is-spinning`,size:15}),o(`lark.groupLoading`)]}):null,!ne&&A?(0,B.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:A}):null,!ne&&!A&&D.length===0?(0,B.jsx)(`div`,{className:`personal-lark-group-state`,role:`status`,children:o(`lark.groupEmpty`)}):null,!ne&&!A&&D.length>0?(0,B.jsx)(`select`,{"aria-label":o(`lark.groupChat`),onChange:e=>te(e.target.value),value:ee,children:D.map(e=>(0,B.jsx)(`option`,{value:e.chat_id,children:e.chat_name},e.chat_id))}):null]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.bindGoal`)}),(0,B.jsx)(`select`,{"aria-label":o(`lark.bindGoal`),onChange:e=>{let t=e.target.value;w(t),oe(n.find(e=>e.goalId===t)?.agentId??``),ue({})},value:C,children:n.map(e=>(0,B.jsx)(`option`,{value:e.goalId,children:e.title},e.goalId))})]})]}),(0,B.jsxs)(`label`,{className:`personal-lark-check`,children:[(0,B.jsx)(`input`,{checked:!0,readOnly:!0,type:`checkbox`}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:o(`lark.createAutomatically`)}),(0,B.jsx)(`small`,{children:o(`lark.createAutomaticallyDescription`)})]})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.topicPreview`)}),(0,B.jsxs)(`div`,{className:`personal-lark-topic-preview`,children:[(0,B.jsx)(Dm,{size:15}),`# `,V?.title??V?.goalId??`Goal`]})]}),P===`goal`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.captureScope`)}),(0,B.jsxs)(`select`,{"aria-label":o(`lark.captureScope`),disabled:_e?.ingress_mode===`direct_session`,onChange:e=>N(e.target.value),value:M,children:[(0,B.jsx)(`option`,{value:`addressed_only`,children:o(`lark.captureAddressed`)}),(0,B.jsx)(`option`,{value:`configured_chat_all`,children:o(`lark.captureAll`)})]}),(0,B.jsx)(`small`,{children:o(`lark.captureScopeDescription`)})]}),(0,B.jsxs)(`fieldset`,{"aria-label":o(`lark.agentIngress`),className:`personal-lark-ingress`,children:[(0,B.jsx)(`legend`,{children:o(`lark.agentIngress`)}),(0,B.jsx)(`div`,{children:[`live_steering`,`session_queue`,`async_inbox`].map(e=>{let t=Eb(e,o);return(0,B.jsxs)(`label`,{className:re===e?`is-active`:``,children:[(0,B.jsx)(`input`,{"aria-label":t.label,checked:re===e,name:`lark-agent-ingress`,onChange:()=>ie(e),type:`radio`,value:e}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:t.label}),(0,B.jsx)(`small`,{children:t.detail})]})]},e)})})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.targetAgent`)}),(0,B.jsxs)(`select`,{"aria-label":o(`lark.targetAgent`),disabled:!!_e?.agent_id,onChange:e=>oe(e.target.value),value:L,children:[Re?null:(0,B.jsx)(`option`,{disabled:!0,value:L,children:L?o(`lark.agentUnavailable`,{agent:L}):o(`lark.noAgentConfigured`)}),Le.map(e=>(0,B.jsx)(`option`,{value:e.agentId,children:e.label===e.agentId?e.agentId:`${e.label} · ${e.agentId}`},e.agentId))]}),(0,B.jsx)(`small`,{children:o(`lark.targetAgentDescription`)})]}),!he&&Le.length>1?(0,B.jsxs)(`label`,{"aria-label":o(`lark.connectAllAgents`),className:`personal-lark-check`,children:[(0,B.jsx)(`input`,{checked:se,onChange:e=>ce(e.target.checked),type:`checkbox`}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:o(`lark.connectAllAgents`)}),(0,B.jsx)(`small`,{children:o(`lark.connectAllAgentsDescription`,{count:Le.length})})]})]}):null,!he&&se&&Le.length>1?(0,B.jsxs)(`fieldset`,{"aria-label":o(`lark.agentApps`),className:`personal-lark-agent-apps`,children:[(0,B.jsx)(`legend`,{children:o(`lark.agentApps`)}),(0,B.jsx)(`small`,{children:o(`lark.agentAppsDescription`)}),(0,B.jsx)(`div`,{children:Le.map(e=>(0,B.jsxs)(`label`,{children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:e.label}),(0,B.jsx)(`small`,{children:e.agentId})]}),(0,B.jsx)(`select`,{"aria-label":o(`lark.agentAppSelection`,{agent:e.label}),onChange:t=>ue(n=>({...n,[e.agentId]:t.target.value})),value:le[e.agentId]??x,children:l.map(e=>(0,B.jsxs)(`option`,{disabled:!e.ready,value:e.app_ref,children:[e.label,e.reply_ready?``:e.ready?` · ${o(`lark.needsMessagePermissions`)}`:` · ${o(`lark.needsSetup`)}`]},e.app_ref))})]},e.agentId))})]}):null,se&&ze.length>0&&!Ve?(0,B.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:o(`lark.agentAppPermissions`)}):null,Be.length===0?(0,B.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:o(`lark.selectRegisteredAgent`)}):null]}):null,(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.replyMode`)}),(0,B.jsx)(`select`,{"aria-label":o(`lark.replyMode`),onChange:e=>ae(e.target.value),value:I,children:(0,B.jsx)(`option`,{value:`topic_reply`,children:o(`lark.topicReply`)})}),(0,B.jsx)(`small`,{children:o(`lark.replyModeDescription`)})]}),(0,B.jsxs)(`p`,{className:`personal-lark-cardinality`,children:[(0,B.jsx)(em,{size:15}),o(`lark.cardinality`)]}),pe?(0,B.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:pe}):null,(0,B.jsxs)(`footer`,{children:[(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>b(!1),type:`button`,children:o(`lark.cancel`)}),(0,B.jsxs)(`button`,{className:`personal-primary-action`,disabled:p||!x||!_e&&(!Ue?.reply_ready||!ee)||P===`goal`&&(!Ve||Be.length===0)||!C||de,onClick:()=>void Qe(),type:`button`,children:[de?(0,B.jsx)(Cm,{className:`is-spinning`,size:15}):null,He]})]})]})}):null,xe?(0,B.jsx)(`div`,{className:`personal-lark-modal-backdrop is-setup`,role:`presentation`,children:(0,B.jsxs)(`section`,{"aria-labelledby":`new-lark-app-title`,"aria-modal":`true`,className:`personal-lark-modal personal-lark-setup-modal`,role:`dialog`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`small`,{children:o(`lark.reusableWorkspaceApp`)}),(0,B.jsx)(`h2`,{id:`new-lark-app-title`,children:o(`lark.newApp`)})]}),(0,B.jsx)(`button`,{"aria-label":o(`lark.closeCreate`),onClick:()=>void Ze(),type:`button`,children:(0,B.jsx)($m,{size:18})})]}),R?(0,B.jsxs)(`div`,{className:`personal-lark-setup-progress`,children:[(0,B.jsx)(`span`,{className:`personal-lark-setup-icon is-${R.status}`,children:R.status===`ready`?(0,B.jsx)(em,{size:22}):(0,B.jsx)(Cm,{className:R.status===`failed`?``:`is-spinning`,size:22})}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:R.status===`ready`?o(`lark.appCreated`):R.status===`failed`?o(`lark.appCreateFailed`):o(`lark.waitingFeishu`)}),(0,B.jsx)(`p`,{children:R.status===`waiting_for_feishu`?o(`lark.waitingFeishuDescription`):R.status===`starting`?o(`lark.waitingLink`):R.error})]}),R.verification_url?(0,B.jsxs)(`a`,{href:R.verification_url,rel:`noreferrer`,target:`_blank`,children:[(0,B.jsx)(fm,{size:15}),o(`lark.reopenFeishu`)]}):null]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`p`,{className:`personal-lark-setup-copy`,children:o(`lark.setupCopy`)}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.profileName`)}),(0,B.jsx)(`input`,{"aria-label":o(`lark.profileName`),autoComplete:`off`,onChange:e=>we(e.target.value),placeholder:`loopx-workspace-bot`,value:Ce})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.region`)}),(0,B.jsxs)(`select`,{"aria-label":o(`lark.region`),onChange:e=>Ee(e.target.value),value:Te,children:[(0,B.jsx)(`option`,{value:`feishu`,children:`Feishu`}),(0,B.jsx)(`option`,{value:`lark`,children:`Lark`})]})]}),Ce&&!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce)?(0,B.jsx)(`p`,{className:`personal-notification-error`,children:o(`lark.profileValidation`)}):null]}),Ae?(0,B.jsx)(`p`,{className:`personal-notification-error`,children:Ae}):null,(0,B.jsxs)(`footer`,{children:[(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void Ze(),type:`button`,children:o(`lark.cancel`)}),R?null:(0,B.jsxs)(`button`,{className:`personal-primary-action`,disabled:Oe||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce),onClick:()=>void Xe(),type:`button`,children:[Oe?(0,B.jsx)(Cm,{className:`is-spinning`,size:15}):(0,B.jsx)(fm,{size:15}),o(`lark.continueFeishu`)]})]})]})}):null]})}function jb(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function Mb(e,t,n){let r=jb(t),i=jb(n);return Object.fromEntries(e.fields.flatMap(({key:e,nullable:t})=>{let n=r[e],a=i[e];return Object.hasOwn(r,e)&&(n!=null||t&&n===null)?[[e,n]]:Object.hasOwn(i,e)&&a!=null?[[e,a]]:[]}))}function Nb(e,t){let n;try{n=JSON.parse(t)}catch{return null}if(!n||typeof n!=`object`||Array.isArray(n))return null;let r=new Set(e.fields.map(e=>e.key));return Object.keys(n).some(e=>!r.has(e))?null:n}function Pb(e,t,n){let r={...e,[t]:n},i=e.schedule;return t===`timezone`&&i&&typeof i==`object`&&`schema_version`in i&&i.schema_version===`periodic_report_schedule_v0`&&(r.schedule={...i,timezone:n}),r}function Fb({id:e,value:t,timezone:n,onChange:r}){let{locale:i}=Ji(),a=i===`zh-CN`,o=t&&typeof t==`object`&&!Array.isArray(t)?t:null,s=String(o?.rrule??``).split(`;`).map(e=>e.split(`=`)),c=Object.fromEntries(s.filter(e=>e.length===2)),l=[`MO`,`TU`,`WE`,`TH`,`FR`,`SA`,`SU`],u=(e,t)=>e!==void 0&&/^\d+$/.test(e)&&Number(e)<=t,d=!o||o.schema_version===`periodic_report_schedule_v0`&&[`DAILY`,`WEEKLY`].includes(c.FREQ)&&o.timezone===n&&s.every(e=>e.length===2&&[`FREQ`,`BYDAY`,`BYHOUR`,`BYMINUTE`,`INTERVAL`].includes(e[0]))&&new Set(s.map(([e])=>e)).size===s.length&&u(c.BYHOUR,23)&&u(c.BYMINUTE??`0`,59)&&(c.FREQ===`WEEKLY`?l.includes(c.BYDAY):!c.BYDAY)&&(!c.INTERVAL||c.INTERVAL===`1`),f=a?[`星期一`,`星期二`,`星期三`,`星期四`,`星期五`,`星期六`,`星期日`]:[`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`,`Sunday`];function p(e){let t={FREQ:`WEEKLY`,BYDAY:`MO`,BYHOUR:`9`,BYMINUTE:`0`,...c,...e};r?.({schema_version:`periodic_report_schedule_v0`,schedule_id:o?.schedule_id??`report-schedule`,timezone:n,rrule:[`FREQ=${t.FREQ}`,...t.FREQ===`WEEKLY`?[`BYDAY=${t.BYDAY}`]:[],`BYHOUR=${t.BYHOUR}`,`BYMINUTE=${t.BYMINUTE}`].join(`;`)})}return(0,B.jsxs)(`div`,{className:`personal-report-schedule`,children:[(0,B.jsxs)(`label`,{className:`is-boolean`,htmlFor:e,children:[(0,B.jsx)(`span`,{children:a?`按日历汇报`:`Calendar reports`}),(0,B.jsx)(`input`,{id:e,type:`checkbox`,role:`switch`,checked:!!o,disabled:!r,onChange:e=>e.target.checked?p({}):r?.(null)})]}),o?(0,B.jsxs)(B.Fragment,{children:[d?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`label`,{htmlFor:`${e}-frequency`,children:[(0,B.jsx)(`span`,{children:a?`频率`:`Frequency`}),(0,B.jsxs)(`select`,{id:`${e}-frequency`,value:c.FREQ,disabled:!r,onChange:e=>p({FREQ:e.target.value}),children:[(0,B.jsx)(`option`,{value:`DAILY`,children:a?`每天`:`Daily`}),(0,B.jsx)(`option`,{value:`WEEKLY`,children:a?`每周`:`Weekly`})]})]}),c.FREQ===`WEEKLY`&&(0,B.jsxs)(`label`,{htmlFor:`${e}-day`,children:[(0,B.jsx)(`span`,{children:a?`星期`:`Weekday`}),(0,B.jsx)(`select`,{id:`${e}-day`,value:c.BYDAY,disabled:!r,onChange:e=>p({BYDAY:e.target.value}),children:l.map((e,t)=>(0,B.jsx)(`option`,{value:e,children:f[t]},e))})]}),(0,B.jsxs)(`label`,{htmlFor:`${e}-time`,children:[(0,B.jsxs)(`span`,{children:[a?`当地时间`:`Local time`,` (`,n,`)`]}),(0,B.jsx)(`input`,{id:`${e}-time`,type:`time`,required:!0,disabled:!r,value:`${(c.BYHOUR??`9`).padStart(2,`0`)}:${(c.BYMINUTE??`0`).padStart(2,`0`)}`,onChange:e=>{if(!/^\d{2}:\d{2}$/.test(e.target.value))return;let[t,n]=e.target.value.split(`:`);p({BYHOUR:t,BYMINUTE:n})}})]})]}):(0,B.jsx)(`p`,{role:`alert`,children:a?`此计划需在 JSON 模式中编辑;当前内容已保留。`:`Edit this schedule in JSON mode; its current value is preserved.`}),(0,B.jsx)(`p`,{children:a?`由现有唤醒检查到期计划;实际送达以回执为准。`:`Existing wakes check the schedule; delivery is confirmed by its receipt.`})]}):(0,B.jsx)(`p`,{children:a?`未设置日历计划;保持阶段结束时汇报。`:`No calendar schedule; report at validated stage boundaries.`})]})}function Ib({copy:e,field:t,id:n,onChange:r,value:i,timezone:a}){let o=e[t.key]?.label??t.label,s=!r;if(t.input_kind===`periodic_report_schedule`)return(0,B.jsx)(Fb,{id:n,value:i,timezone:a,onChange:r?e=>r(t.key,e):void 0});if(t.input_kind===`boolean`)return(0,B.jsxs)(`label`,{className:`is-boolean`,htmlFor:n,children:[(0,B.jsx)(`span`,{children:o}),(0,B.jsx)(`input`,{checked:i===!0,id:n,onChange:r?e=>r(t.key,e.target.checked):void 0,readOnly:s,role:`switch`,type:`checkbox`})]});if(t.input_kind===`select`)return(0,B.jsxs)(`label`,{htmlFor:n,children:[(0,B.jsx)(`span`,{children:o}),(0,B.jsxs)(`select`,{id:n,onChange:r?e=>r(t.key,e.target.value):void 0,value:typeof i==`string`?i:``,children:[(0,B.jsx)(`option`,{value:``}),(t.options??[]).map(e=>(0,B.jsx)(`option`,{value:e,children:e},e))]})]});if(t.input_kind===`string_list`)return(0,B.jsxs)(`label`,{htmlFor:n,children:[(0,B.jsx)(`span`,{children:o}),(0,B.jsx)(`textarea`,{id:n,onChange:r?e=>r(t.key,e.target.value.split(/\r?\n/u).filter(Boolean)):void 0,readOnly:s,rows:4,value:Array.isArray(i)?i.join(` -`):``})]});let c=t.input_kind===`number`;return(0,B.jsxs)(`label`,{htmlFor:n,children:[(0,B.jsx)(`span`,{children:o}),(0,B.jsx)(`input`,{id:n,max:t.maximum,min:t.minimum,onChange:r?e=>r(t.key,c?Number(e.target.value):e.target.value):void 0,readOnly:s,required:t.required,type:c?`number`:`text`,value:typeof i==`number`||typeof i==`string`?i:``})]})}function Lb({copy:e={},disabled:t=!1,editor:n,enabledAction:r,omitKeys:i=[],onChange:a,value:o}){let s=(0,z.useId)(),c=new Set(i);return(0,B.jsx)(`fieldset`,{className:`personal-capability-fields`,disabled:t,children:n.fields.filter(e=>!c.has(e.key)).map(t=>{let n=(0,B.jsx)(Ib,{copy:e,field:t,id:`${s}-${t.key.replace(/[^a-z0-9_-]/gi,`-`)}`,onChange:a,value:o[t.key],timezone:String(o.timezone??`UTC`)},t.key);return t.key===`enabled`&&t.input_kind===`boolean`?(0,B.jsxs)(`div`,{className:`personal-capability-enabled-row`,children:[n,r]},t.key):n})})}var Rb={en:{todo_replan_cadence:{displayName:`Goal review cadence`,description:`Configures the Goal review cadence.`},change_quality_qualification:{displayName:`Change quality qualification`,description:`Prepares a provider-neutral review packet, allows at most one policy-authorized safe-fix pass, and can require an exact-diff receipt.`},explore_graph:{displayName:`Explore Graph`,description:`Organizes bounded exploration as a typed evidence graph so branches, findings, and synthesis remain inspectable.`},explore_harness:{displayName:`Explore Harness`,description:`Selects a capability-owned planning and research harness profile for bounded multi-step exploration.`},lark_event_inbox:{displayName:`Lark event inbox`,description:`Receives provider events through a local-private inbox binding before LoopX projects them into governed work.`,readOnlyReason:`This capability requires a local-private inbox binding. Manage it in Lark settings or through the capability CLI.`},lark_kanban_heartbeat_sync:{displayName:`Lark Kanban heartbeat sync`,description:`Synchronizes accepted LoopX work state to the configured Lark Kanban heartbeat surface.`},local_authority_shadow:{displayName:`Local authority shadow`,description:`Observes post-commit Todo and task-lease state through the shared authority contract without taking write authority.`},multi_subagent:{displayName:`Adaptive child capacity`,description:`Sets bounded child-agent capacity and the public-safe responsibility domains in which parallel work may be delegated.`},peer_task_coordination:{displayName:`Registered-peer task coordination`,description:`Routes explicitly scoped peer-owned work to one registered coordinator without granting cross-owner mutation authority.`},periodic_report:{displayName:`Periodic reports`,description:`Turns validated Goal stage progress into a frozen report and automatically delivers it through the configured Goal Channel with exact readback.`},pull_request_review:{displayName:`Pull-request review`,description:`Ranks the public GitHub PR review queue with a machine-level default; it never grants GitHub, Todo, push, or merge authority.`},reward_memory:{displayName:`Reward Memory experiment`,description:`Configures a reviewed local-private provider binding for Goal-scoped Agent recall and evidence-backed outcome learning.`}},"zh-CN":{todo_replan_cadence:{displayName:`Goal 复核周期`,description:`配置 Goal 的复核周期。`},change_quality_qualification:{displayName:`变更质量验证`,description:`生成与 Provider 无关的审阅包,最多允许一次策略授权的安全修复,并可要求精确 diff 回执。`},explore_graph:{displayName:`探索图谱`,description:`把有界探索组织为 typed 证据图,让探索分支、发现与综合结论都可检查、可追溯。`},explore_harness:{displayName:`探索 Harness`,description:`为有界的多步探索选择由能力负责的规划与研究 Harness profile。`},lark_event_inbox:{displayName:`飞书事件收件箱`,description:`通过本机私有收件箱接收 Provider 事件,再由 LoopX 将其投影为受治理的工作。`,readOnlyReason:`此能力依赖本机私有的收件箱绑定,请在飞书设置或 capability CLI 中管理。`},lark_kanban_heartbeat_sync:{displayName:`飞书看板心跳同步`,description:`把 LoopX 已接受的工作状态同步到配置好的飞书看板心跳界面。`},local_authority_shadow:{displayName:`本地 Authority 影子观测`,description:`通过共享 Authority contract 观测提交后的 Todo 与 task lease 状态,但不取得写入权。`},multi_subagent:{displayName:`自适应子 Agent 容量`,description:`限定子 Agent 容量与可公开的职责域,只有落在这些边界内的工作才能并行委派。`},peer_task_coordination:{displayName:`已注册 Peer 任务协调`,description:`把明确限定的 Peer 工作路由给一个已注册协调者,不授予跨 Owner 修改权限。`},periodic_report:{displayName:`周期报告`,description:`把经过验证的 Goal 阶段进展整理为冻结报告,并通过配置的 Goal Channel 自动发送和精确回读。`},pull_request_review:{displayName:`Pull-request Review`,description:`配置公开 GitHub PR 审阅队列的本机默认排序;不会授予 GitHub、Todo、push 或 merge 权限。`},reward_memory:{displayName:`Reward Memory 实验`,description:`为 Goal 内 Agent 的召回与证据化结果学习配置经过审阅的本机私有 Provider 绑定。`}}},zb={en:{completed_todos:{label:`Completed Todos between Goal reviews`,description:`Machine default or explicit Goal override, from 1 to 5.`},allowed_domains:{label:`Allowed responsibility domains`,description:`Enter one bounded, public-safe domain per line.`},coordinator_agent_id:{label:`Coordinator Agent`,description:`Use an already registered Agent id; leave blank to disable coordination.`},enabled:{label:`Enabled`},model:{label:`Child model`,description:`For example gpt-5.6-luna. Blank clears the child model preference.`},reasoning_effort:{label:`Child reasoning effort`,description:`For example max; the host must support this model and effort.`},max_children:{label:`Maximum children`,description:`Hard upper bound for concurrently delegated child work.`},profile:{label:`Planner profile`,description:`Select one registered Explore Harness profile.`},profile_preset:{label:`Report profile`,description:`Capability-owned report profile, such as weekly-progress.`},review_priority:{label:`Review priority`,description:`Choose whether other developers' PRs or the authenticated reviewer's own PRs are ranked first.`},route_ref:{label:`Goal Channel route`,description:`Public route alias only; credentials and provider identifiers stay outside this form.`},safe_fix:{label:`Allow one bounded safe-fix pass`},strict_receipt:{label:`Require an exact-diff receipt`},timezone:{label:`Timezone`,description:`Use an IANA timezone, for example Asia/Shanghai.`},schedule:{label:`Calendar reports`,description:`Optional daily or weekly reports; no schedule preserves stage-only delivery.`},config_path:{label:`Local-private configuration path`,description:`Repo-relative ignored JSON under .loopx/config/. Leave blank to retain the current binding; the path is never returned.`},enabled_agents:{label:`Enabled Goal Agents`,description:`Enter one registered Goal-local Agent id per line. A private binding currently accepts exactly one Agent.`}},"zh-CN":{completed_todos:{label:`两次 Goal 复核间的已完成 Todo 数`,description:`可设置 1–5;机器默认值可被 Goal 显式覆盖。`},allowed_domains:{label:`允许的职责域`,description:`每行填写一个有边界、可公开的职责域。`},coordinator_agent_id:{label:`协调 Agent`,description:`填写一个已经注册的 Agent ID;留空表示关闭协调。`},enabled:{label:`启用`},model:{label:`子 Agent 模型`,description:`例如 gpt-5.6-luna;留空清除模型偏好。`},reasoning_effort:{label:`子 Agent 推理档位`,description:`例如 max;宿主须支持所选模型与档位。`},max_children:{label:`最大子 Agent 数`,description:`可同时委派的子任务硬上限。`},profile:{label:`规划 Profile`,description:`选择一个已注册的 Explore Harness profile。`},profile_preset:{label:`报告 Profile`,description:`由该能力管理的报告 profile,例如 weekly-progress。`},review_priority:{label:`审阅优先级`,description:`选择先排其他开发者的 PR,还是先排当前已认证审阅者自己的 PR。`},route_ref:{label:`Goal Channel 路由`,description:`只填写公开 route alias;凭据与 Provider 标识不会进入此表单。`},safe_fix:{label:`允许一次有界安全修复`},strict_receipt:{label:`要求精确 diff 回执`},timezone:{label:`时区`,description:`使用 IANA 时区,例如 Asia/Shanghai。`},schedule:{label:`日历汇报`,description:`可选每日或每周计划;未设置时保持阶段结束汇报。`},config_path:{label:`本机私有配置路径`,description:`填写 .loopx/config/ 下、相对仓库且被忽略的 JSON;留空保留当前绑定,路径不会被回传。`},enabled_agents:{label:`已启用的 Goal Agent`,description:`每行填写一个已注册的 Goal 内 Agent ID;私有绑定当前只接受一个 Agent。`}}};function Bb(e,t){let n=Rb[t][e.capability_id];return n?{...e,display_name:n.displayName,description:n.description,configuration_editor:{...e.configuration_editor,...n.readOnlyReason?{read_only_reason:n.readOnlyReason}:{}}}:e}function Vb(e){return zb[e]}Object.freeze(Object.keys(Rb.en).sort());function Hb(e,t){return e.available_scopes.includes(t)&&(t!==`machine`||!!e.machine_namespace)&&e.configuration_editor.editable&&e.configuration_editor.writable_scopes.includes(t)}function Ub({values:e,t}){return(0,B.jsxs)(`details`,{className:`personal-capability-raw-values`,children:[(0,B.jsx)(`summary`,{children:t(`capabilities.rawJson`)}),(0,B.jsx)(`div`,{className:`personal-capability-value-grid`,children:e.map(({label:e,value:t})=>(0,B.jsxs)(`section`,{children:[(0,B.jsx)(`strong`,{children:e}),(0,B.jsx)(`pre`,{children:t?JSON.stringify(t,null,2):`—`})]},e))})]})}function Wb({source:e,t}){return e?(0,B.jsxs)(`p`,{className:`personal-capability-effective-source`,children:[(0,B.jsx)(Wm,{"aria-hidden":!0,size:15}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:t(`capabilities.effectiveSource`)}),t(`capabilities.source.${e}`)]})]}):null}function Gb({available:e,description:t,t:n}){return e?null:(0,B.jsxs)(`section`,{className:`personal-capability-editor-status is-read-only`,children:[(0,B.jsx)(Zm,{"aria-hidden":!0,size:18}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:n(`capabilities.readOnly`)}),(0,B.jsx)(`p`,{children:t})]})]})}function Kb(e){return e.availability?.includes(`experimental`)?4:e.capability_id===`multi_subagent`?3:e.configuration_editor.writable_scopes.length===0||e.availability===`supported_explicit_opt_in`?2:e.availability===`supported_explicit_override`?0:1}function qb(e,t){return[...e].sort((e,n)=>{let r=Kb(e)-Kb(n);if(r!==0)return r;let i=Bb(e,t),a=Bb(n,t);return i.display_name.localeCompare(a.display_name,t)||e.capability_id.localeCompare(n.capability_id)})}function Jb({capabilities:e,locale:t,onSelect:n,scope:r,selectedCapabilityId:i,t:a}){return(0,B.jsx)(`nav`,{"aria-label":a(r===`goal`?`capabilities.catalog`:`machine.capabilityCatalog`),className:`personal-capability-list`,tabIndex:0,children:qb(e,t).map(e=>{let o=Bb(e,t);return(0,B.jsxs)(`button`,{"aria-current":i===o.capability_id?`page`:void 0,onClick:()=>n(o.capability_id),type:`button`,children:[(0,B.jsx)(`span`,{children:(0,B.jsx)(`strong`,{children:o.display_name})}),(0,B.jsx)(`em`,{children:a(o.available_scopes.includes(r)?r===`goal`?`capabilities.goalScope`:`capabilities.machineScope`:r===`machine`?`capabilities.goalScope`:`capabilities.machineScope`)})]},o.capability_id)})})}function Yb({capability:e,locale:t,source:n}){let{t:r}=Ji(),i=Bb(e,t);return(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`span`,{className:`personal-settings-icon`,children:(0,B.jsx)(Gm,{"aria-hidden":!0,size:18})}),(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`div`,{className:`personal-capability-heading-row`,children:[(0,B.jsx)(`h2`,{children:i.display_name}),(0,B.jsx)(Wb,{source:n,t:r})]}),e.context_contribution&&(0,B.jsxs)(`details`,{className:`personal-capability-help`,"data-testid":`capability-context-phases`,children:[(0,B.jsx)(`summary`,{children:t===`zh-CN`?`主 Agent 协作指导`:`Coordinator workflow guidance`}),(0,B.jsx)(`p`,{children:t===`zh-CN`?`随能力开启。支持以下阶段;此处展示能力范围,不能证明某次运行已读取或采纳。`:`Enabled with this capability. These are supported phases, not proof that a run read or adopted the guidance.`}),(0,B.jsx)(`dl`,{children:e.context_contribution.supported_phases.map(e=>(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:(0,B.jsx)(`code`,{children:e})}),(0,B.jsx)(`dd`,{children:Xb[e][t===`zh-CN`?`zh`:`en`]})]},e))}),(0,B.jsx)(`p`,{children:t===`zh-CN`?`LoopX Turn 在请求与结果中提供上下文;原生工具入口由 LoopX skill 调用同一只读接口。执行与采纳需另看运行证据。`:`LoopX Turn includes context in requests and results. For native tools, the LoopX skill reads the same interface. Execution and adoption require run evidence.`})]}),(0,B.jsxs)(`details`,{className:`personal-capability-help`,children:[(0,B.jsx)(`summary`,{children:t===`zh-CN`?`配置说明`:`Configuration help`}),(0,B.jsx)(`p`,{children:i.description}),(0,B.jsx)(`dl`,{children:e.configuration_editor.fields.map(e=>{let n=Vb(t)[e.key],r=n?.description??e.description;return r?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:n?.label??e.label}),(0,B.jsx)(`dd`,{children:r})]},e.key):null})})]},e.capability_id)]})]})}var Xb={before_plan:{zh:`规划前:识别独立问题并保留主 Agent 的核验与整合职责。`,en:`Before planning: identify independent questions and retain coordinator validation and integration.`},before_delegate:{zh:`委派前:明确子任务边界、模型偏好及预期证据。`,en:`Before delegation: specify task boundaries, model preferences and expected evidence.`},after_delegate_result:{zh:`回收后:核验结果,说明采纳决定并关联计划与成果。`,en:`After results: validate evidence, explain acceptance and link plans and deliverables.`}};function Zb({goalId:e,onApplied:t,selected:n,t:r}){let[i,a]=(0,z.useState)({busy:null,draft:{},partialWrite:null,preview:null}),[o,s]=(0,z.useState)(null),[c,l]=(0,z.useState)(`guided`),[u,d]=(0,z.useState)(``),f=(0,z.useMemo)(()=>n?Nb(n.configuration_editor,u):null,[n,u]),p=c===`guided`||f!==null;(0,z.useEffect)(()=>{l(`guided`),d(``),a({busy:null,draft:Mb(n?.configuration_editor??{fields:[]},n?.current??n?.effective_configuration?.configuration??n?.default,n?.default),partialWrite:null,preview:null}),s(null)},[n]);async function m(t){if(!(!n||i.busy||!p)){a(e=>({...e,busy:`preview`,partialWrite:null})),s(null);try{let r=await Dg(e,n.capability_id,t);a(e=>({...e,preview:r}))}catch(e){s(e instanceof Error?e.message:r(`capabilities.previewFailed`))}finally{a(e=>({...e,busy:null}))}}}async function h(){if(!(!n||!i.preview||i.busy||!p)){a(e=>({...e,busy:`apply`})),s(null);try{let r=Mb(n.configuration_editor,i.draft,n.default),o=await Og(e,n.capability_id,i.preview.action===`delete`?null:r,i.preview.plan_revision);a(e=>({...e,partialWrite:o.status===`partial_write`?o:null,preview:null})),o.status!==`partial_write`&&t()}catch(e){a(e=>({...e,preview:null})),s(e instanceof Error?e.message:r(`capabilities.applyFailed`))}finally{a(e=>({...e,busy:null}))}}}function g(e,t){a(r=>({...r,draft:n?.capability_id===`periodic_report`?Pb(r.draft,e,t):{...r.draft,[e]:t},preview:null})),s(null)}function _(e){if(!n||i.busy)return;d(e);let t=Nb(n.configuration_editor,e);a(e=>({...e,preview:null,draft:t?Mb(n.configuration_editor,t,n.default):e.draft})),s(null)}function v(){i.busy||!p||(c===`guided`&&d(JSON.stringify(i.draft,null,2)),l(c===`guided`?`json`:`guided`),a(e=>({...e,preview:null})))}return{apply:h,changeDraft:g,changeJson:_,changeMode:v,editorMode:c,jsonDraft:u,jsonValid:p,error:o,mutation:i,preview:m}}function Qb({mutationError:e,onApplied:t,partialWrite:n,preview:r}){let{t:i}=Ji();return(0,B.jsxs)(B.Fragment,{children:[e?(0,B.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:e}):null,n?(0,B.jsxs)(`section`,{"aria-live":`polite`,className:`personal-capability-recovery`,children:[(0,B.jsx)(Zm,{"aria-hidden":!0,size:18}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:i(`capabilities.partialWrite`)}),(0,B.jsx)(`p`,{children:i(`capabilities.partialWriteDescription`)}),(0,B.jsx)(`small`,{children:n.recommended_action})]}),(0,B.jsxs)(`button`,{onClick:t,type:`button`,children:[(0,B.jsx)(Im,{"aria-hidden":!0,size:15}),i(`capabilities.refreshSource`)]})]}):null,r?(0,B.jsxs)(`section`,{className:`personal-capability-preview`,"aria-label":i(`capabilities.preview`),children:[(0,B.jsx)(`strong`,{children:i(`capabilities.preview`)}),(0,B.jsx)(`span`,{children:i(`machine.action.${r.action}`)}),(0,B.jsx)(`small`,{children:i(`capabilities.previewLocked`)})]}):null]})}function $b({catalog:e,goalId:t,onApplied:n}){let{locale:r,t:i}=Ji(),a=(0,z.useMemo)(()=>qb(e.capabilities,r),[e.capabilities,r]),[o,s]=(0,z.useState)(()=>a[0]?.capability_id??``),c=(0,z.useMemo)(()=>a.find(e=>e.capability_id===o)??a[0],[a,o]),l=(0,z.useMemo)(()=>c?Bb(c,r):void 0,[r,c]),{apply:u,changeDraft:d,changeJson:f,changeMode:p,editorMode:m,jsonDraft:h,jsonValid:g,error:_,mutation:v,preview:y}=Zb({goalId:t,onApplied:n,selected:l,t:i}),{busy:b,draft:x,partialWrite:S,preview:C}=v;if(!c||!l)return(0,B.jsx)(`p`,{className:`personal-capability-empty`,children:i(`capabilities.empty`)});let w=l.available_scopes.includes(`goal`),T=Hb(l,`goal`),E=l.configuration_editor.read_only_reason??i(w?`capabilities.previewOnly`:`capabilities.machineOnly`);async function D(){if(!l||!T||b||!g)return;let e=Mb(l.configuration_editor,x,l.default);await y(e)}async function O(){!T||b||await y(null)}return(0,B.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,B.jsx)(Jb,{capabilities:e.capabilities,locale:r,onSelect:s,scope:`goal`,selectedCapabilityId:l.capability_id,t:i}),(0,B.jsxs)(`article`,{"aria-label":l.display_name,className:`personal-capability-detail`,tabIndex:0,children:[(0,B.jsx)(Yb,{capability:c,locale:r,source:l.effective_configuration?.source}),(0,B.jsx)(Gb,{available:T,t:i,description:E}),T?(0,B.jsxs)(B.Fragment,{children:[m===`json`||!l.configuration_editor.fields.some(e=>e.key===`enabled`&&e.input_kind===`boolean`)?(0,B.jsx)(`div`,{className:`personal-capability-editor-mode`,children:(0,B.jsxs)(`button`,{disabled:!!b||!g,onClick:p,type:`button`,children:[(0,B.jsx)(sm,{"aria-hidden":!0,size:14}),i(m===`guided`?`machine.editJson`:`machine.backToForm`)]})}):null,m===`guided`?(0,B.jsx)(`section`,{className:`personal-capability-field-summary`,children:(0,B.jsx)(Lb,{disabled:!!b,copy:Vb(r),editor:l.configuration_editor,onChange:d,value:x,enabledAction:(0,B.jsxs)(`button`,{className:`personal-capability-edit-json`,onClick:p,type:`button`,children:[(0,B.jsx)(sm,{"aria-hidden":!0,size:14}),i(`machine.editJson`)]})})}):(0,B.jsxs)(`label`,{className:`personal-capability-json-editor`,htmlFor:`goal-configuration-json`,children:[(0,B.jsx)(`span`,{children:i(`capabilities.jsonConfiguration`)}),(0,B.jsx)(`textarea`,{id:`goal-configuration-json`,"aria-describedby":`goal-configuration-json-help`,disabled:!!b,onChange:e=>f(e.target.value),rows:12,spellCheck:!1,value:h}),(0,B.jsx)(`small`,{id:`goal-configuration-json-help`,children:i(`capabilities.jsonHelp`)}),g?null:(0,B.jsx)(`span`,{className:`personal-machine-validation`,role:`alert`,children:i(`capabilities.jsonInvalid`)})]})]}):null,(0,B.jsx)(Qb,{mutationError:_,onApplied:n,partialWrite:S,preview:C}),T?(0,B.jsxs)(`footer`,{className:`personal-capability-actions`,children:[l.current&&l.available_scopes.includes(`machine`)?(0,B.jsx)(`button`,{disabled:!!b||!g,onClick:()=>void O(),type:`button`,children:i(`capabilities.restoreInheritance`)}):null,(0,B.jsx)(`button`,{disabled:!!b||!g,onClick:()=>void D(),type:`button`,children:i(b===`preview`?`common.loading`:`capabilities.previewChanges`)}),(0,B.jsx)(`button`,{className:`is-primary`,disabled:!!b||!C||!g,onClick:()=>void u(),type:`button`,children:i(b===`apply`?`common.loading`:`capabilities.applyPreview`)})]}):null,(0,B.jsx)(Ub,{values:[{label:i(`capabilities.goalValue`),value:l.current},{label:i(l.machine_current?`capabilities.machineValue`:`capabilities.defaultValue`),value:l.machine_current??l.default}],t:i},c.capability_id)]})]})}function ex({goalId:e}){let{t}=Ji(),[n,r]=(0,z.useState)(null),[i,a]=(0,z.useState)(null),[o,s]=(0,z.useState)(!1);function c(){e&&(s(!0),a(null),Eg(e).then(r).catch(e=>a(e instanceof Error?e.message:t(`capabilities.loadFailed`))).finally(()=>s(!1)))}return(0,z.useEffect)(c,[e]),e?o&&!n?(0,B.jsxs)(`p`,{"aria-live":`polite`,className:`personal-capability-empty`,children:[(0,B.jsx)(Cm,{className:`personal-spin`,size:18}),t(`capabilities.loading`)]}):i?(0,B.jsxs)(`section`,{className:`personal-capability-error`,role:`alert`,children:[(0,B.jsx)(Zm,{"aria-hidden":!0,size:18}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:t(`capabilities.loadFailed`)}),(0,B.jsx)(`small`,{children:i})]}),(0,B.jsxs)(`button`,{onClick:c,type:`button`,children:[(0,B.jsx)(Im,{"aria-hidden":!0,size:15}),t(`capabilities.retry`)]})]}):n?(0,B.jsxs)(`section`,{className:`personal-capability-settings`,"data-revision":n.revision,children:[(0,B.jsxs)(`details`,{className:`personal-capability-scope-note`,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(Wm,{"aria-hidden":!0,size:17}),t(`capabilities.atomicOverride`)]}),(0,B.jsx)(`p`,{children:t(`capabilities.atomicOverrideDescription`)})]}),(0,B.jsx)($b,{catalog:n.capability_catalog,goalId:e,onApplied:c})]}):null:(0,B.jsx)(`p`,{className:`personal-capability-empty`,children:t(`capabilities.chooseGoal`)})}function tx(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function nx(e,t){let n=t?.machine_namespace;return n?e?.machine_configuration?.namespaces[n]:void 0}function rx(e,t,n){return{...tx(e.default),...tx(t),...n}}function ix(e,t){for(let n of e.configuration_editor.fields){let e=t[n.key];if(n.required&&(e==null||e===``))return!1}return e.capability_id===`periodic_report`&&t.enabled===!0?!!(String(t.profile_preset??``).trim()&&String(t.route_ref??``).trim()&&String(t.timezone??``).trim()):!0}function ax(e){try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}function ox(e){return e?e===`absent`?e:e.replace(/^sha256:/,``).slice(0,12):`—`}function sx(){let{locale:e,t}=Ji(),[n,r]=(0,z.useState)(null),[i,a]=(0,z.useState)(``),[o,s]=(0,z.useState)({}),[c,l]=(0,z.useState)(`{}`),[u,d]=(0,z.useState)(`guided`),[f,p]=(0,z.useState)(null),[m,h]=(0,z.useState)(`upsert`),[g,_]=(0,z.useState)(null),[v,y]=(0,z.useState)(null),[b,x]=(0,z.useState)(`load`),[S,C]=(0,z.useState)(null),[w,T]=(0,z.useState)(null),E=(0,z.useMemo)(()=>qb(n?.capability_catalog.capabilities??[],e),[n,e]),D=E.find(e=>e.capability_id===i)??E.find(e=>Hb(e,`machine`))??E[0],O=D?Bb(D,e):void 0,ee=nx(n,O),te=!!(O?.machine_namespace&&ee),ne=!!(O&&Hb(O,`machine`)),k=(0,z.useMemo)(()=>ax(c),[c]),A=O?u===`json`?k:rx(O,ee,o):null,j=!!(O&&(u===`json`?k:ix(O,A??{})));async function M(){r(await Tg())}(0,z.useEffect)(()=>{let e=!0;return Tg().then(t=>{e&&r(t)}).catch(n=>{e&&C(n instanceof Error?n.message:t(`machine.loadError`))}).finally(()=>{e&&x(null)}),()=>{e=!1}},[t]),(0,z.useEffect)(()=>{if(!O)return;let e=nx(n,O),t=Mb(O.configuration_editor,e??O.default,O.default),r=rx(O,e,t);s(t),l(JSON.stringify(r,null,2)),d(ne?`guided`:`json`),p(null),h(`upsert`),y(null)},[n,i,e]);function N(e,t){s(n=>O?.capability_id===`periodic_report`?Pb(n,e,t):{...n,[e]:t}),p(null),h(`upsert`),C(null),T(null)}function P(e){if(O){if(e===`json`)l(JSON.stringify(rx(O,ee,o),null,2));else if(k)s(Mb(O.configuration_editor,k,O.default));else{C(t(`machine.jsonInvalid`));return}d(e),p(null),h(`upsert`),C(null)}}async function F(){if(!(!ne||!O?.machine_namespace||!A||!j||b)){x(`preview`),C(null),T(null);try{h(`upsert`),p(await kg(O.machine_namespace,A))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function re(){if(!(!ne||!O?.machine_namespace||!te||b)){x(`preview`),C(null),T(null);try{h(`remove`),p(await jg(O.machine_namespace))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function ie(){if(!ne||!O?.machine_namespace||!f||b||m===`upsert`&&!A)return;x(`apply`),C(null);let e=m;try{let n=e===`remove`?await Mg(O.machine_namespace,f.plan_revision):await Ag(O.machine_namespace,A,f.plan_revision);_(n),p(null),h(`upsert`),y(null),await M(),T(n.status===`applied`?t(e===`remove`?`machine.removed`:`machine.applied`):t(`machine.unchanged`))}catch(e){p(null),h(`upsert`),C(e instanceof Error?e.message:t(`machine.applyError`))}finally{x(null)}}async function I(){if(!(!g?.transaction_id||b)){x(`rollback-preview`),C(null);try{y(await Ng(g.transaction_id))}catch(e){C(e instanceof Error?e.message:t(`machine.rollbackError`))}finally{x(null)}}}async function ae(){if(!(!g?.transaction_id||!v||b)){x(`rollback`),C(null);try{await Pg(g.transaction_id,v.plan_revision),_(null),y(null),p(null),await M(),T(t(`machine.rolledBack`))}catch(e){y(null),C(e instanceof Error?e.message:t(`machine.rollbackError`))}finally{x(null)}}}return b===`load`?(0,B.jsx)(`div`,{className:`personal-machine-loading`,role:`status`,children:t(`common.loading`)}):O?(0,B.jsxs)(`section`,{className:`personal-capability-settings`,"data-revision":n?.revision,children:[(0,B.jsxs)(`details`,{className:`personal-capability-scope-note`,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(Wm,{"aria-hidden":!0,size:17}),t(`machine.liveDefault`)]}),(0,B.jsx)(`p`,{children:t(`machine.liveDefaultDescription`)})]}),(0,B.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,B.jsx)(Jb,{capabilities:E,locale:e,onSelect:a,scope:`machine`,selectedCapabilityId:O.capability_id,t}),(0,B.jsxs)(`article`,{"aria-label":O.display_name,className:`personal-capability-detail`,tabIndex:0,children:[(0,B.jsx)(Yb,{capability:D,locale:e,source:O.available_scopes.includes(`machine`)?te?`machine_default`:`capability_default`:void 0}),(0,B.jsx)(Gb,{available:ne,t,description:O.available_scopes.includes(`machine`)?t(`machine.editorUnavailableDescription`):t(`machine.goalOnly`)}),O.capability_id===`periodic_report`?(0,B.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,B.jsx)(Wm,{"aria-hidden":!0,size:18}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:ee?.schedule?e===`zh-CN`?`日历与阶段汇报`:`Calendar and stage reports`:t(`machine.periodicReportActivation`)}),(0,B.jsx)(`p`,{children:ee?.schedule?ee.enabled===!0?e===`zh-CN`?`已配置日历计划,由现有唤醒检查;是否送达请核对报告回执。`:`A calendar schedule is configured and checked by existing wakes. Verify delivery in the report receipt.`:e===`zh-CN`?`日历计划已保存;启用此能力后才会检查和投递。`:`The schedule is saved; enable this capability to check and deliver reports.`:t(`machine.periodicReportActivationDescription`)})]})]}):null,O.capability_id===`change_quality_qualification`?(0,B.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,B.jsx)(Wm,{"aria-hidden":!0,size:18}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:t(`machine.changeQualityActivation`)}),(0,B.jsx)(`p`,{children:t(`machine.changeQualityActivationDescription`)})]})]}):null,O.capability_id===`todo_replan_cadence`?(0,B.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,B.jsx)(Wm,{"aria-hidden":!0,size:18}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:t(`machine.replanCadenceActivation`)}),(0,B.jsx)(`p`,{children:t(`machine.replanCadenceActivationDescription`)})]})]}):null,O.capability_id===`pull_request_review`?(0,B.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,B.jsx)(Wm,{"aria-hidden":!0,size:18}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:e===`zh-CN`?`只改变队列排序`:`Queue ordering only`}),(0,B.jsx)(`p`,{children:e===`zh-CN`?`默认先审阅其他开发者的 PR;选择 owner-first 才会优先当前已认证审阅者自己的 PR。此配置不会发布 review、写 Todo、push 或 merge。`:`The default reviews other developers' PRs first; choose owner-first only when the authenticated reviewer's own PRs should lead. This setting never posts a review, writes Todos, pushes, or merges.`})]})]}):null,ne?(0,B.jsxs)(B.Fragment,{children:[u===`json`||!O.configuration_editor.fields.some(e=>e.key===`enabled`&&e.input_kind===`boolean`)?(0,B.jsx)(`div`,{className:`personal-capability-editor-mode`,children:(0,B.jsxs)(`button`,{onClick:()=>P(u===`guided`?`json`:`guided`),type:`button`,children:[(0,B.jsx)(sm,{"aria-hidden":!0,size:14}),t(u===`guided`?`machine.editJson`:`machine.backToForm`)]})}):null,u===`guided`?(0,B.jsxs)(`section`,{className:`personal-capability-field-summary`,children:[(0,B.jsx)(Lb,{copy:Vb(e),disabled:!!b,editor:O.configuration_editor,onChange:N,value:o,enabledAction:(0,B.jsxs)(`button`,{className:`personal-capability-edit-json`,onClick:()=>P(`json`),type:`button`,children:[(0,B.jsx)(sm,{"aria-hidden":!0,size:14}),t(`machine.editJson`)]})}),j?null:(0,B.jsx)(`p`,{className:`personal-machine-validation`,role:`alert`,children:t(`machine.requiredFields`)})]}):(0,B.jsxs)(`label`,{className:`personal-capability-json-editor`,htmlFor:`machine-configuration-json`,children:[(0,B.jsx)(`span`,{children:t(`machine.jsonConfiguration`)}),(0,B.jsx)(`textarea`,{"aria-describedby":`machine-configuration-json-help`,disabled:!!b,id:`machine-configuration-json`,onChange:e=>{l(e.target.value),p(null),C(null)},rows:12,spellCheck:!1,value:c}),(0,B.jsx)(`small`,{id:`machine-configuration-json-help`,children:t(`machine.jsonConfigurationHelp`)}),k?null:(0,B.jsx)(`span`,{className:`personal-machine-validation`,role:`alert`,children:t(`machine.jsonInvalid`)})]})]}):null,S?(0,B.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:S}):null,w?(0,B.jsxs)(`p`,{className:`personal-machine-notice`,role:`status`,"aria-live":`polite`,children:[(0,B.jsx)(em,{"aria-hidden":!0,size:16}),w]}):null,f?(0,B.jsxs)(`section`,{"aria-label":t(`machine.preview`),className:`personal-machine-preview`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`strong`,{children:t(`machine.preview`)}),(0,B.jsx)(`span`,{children:t(`machine.action.${f.action}`)})]}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`machine.currentRevision`)}),(0,B.jsx)(`dd`,{title:f.current_revision,children:ox(f.current_revision)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`machine.desiredRevision`)}),(0,B.jsx)(`dd`,{title:f.desired_revision,children:ox(f.desired_revision)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`machine.changedNamespaces`)}),(0,B.jsx)(`dd`,{children:f.changed_namespaces.join(`, `)||t(`common.none`)})]})]}),(0,B.jsx)(`p`,{children:t(`machine.previewLocked`)})]}):null,g?.rollback_available&&g.transaction_id?(0,B.jsxs)(`section`,{className:`personal-machine-rollback`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:t(`machine.rollbackAvailable`)}),(0,B.jsx)(`p`,{children:t(v?`machine.rollbackPreviewDescription`:`machine.rollbackDescription`)})]}),(0,B.jsxs)(`button`,{className:`personal-secondary-action`,disabled:!!b||!!(v&&!v.rollback_allowed),onClick:()=>void(v?ae():I()),type:`button`,children:[(0,B.jsx)(Lm,{"aria-hidden":!0,size:15}),t(b===`rollback`||b===`rollback-preview`?`common.loading`:v?`machine.confirmRollback`:`machine.previewRollback`)]})]}):null,ne?(0,B.jsxs)(`footer`,{className:`personal-capability-actions`,children:[te?(0,B.jsxs)(`button`,{className:`is-danger`,disabled:!!b,onClick:()=>void re(),type:`button`,children:[(0,B.jsx)(Xm,{"aria-hidden":!0,size:15}),t(`machine.previewRemoval`)]}):null,(0,B.jsx)(`button`,{disabled:!!b||!j,onClick:()=>void F(),type:`button`,children:t(b===`preview`?`common.loading`:`machine.previewChanges`)}),(0,B.jsx)(`button`,{className:`is-primary`,disabled:!!b||!f,onClick:()=>void ie(),type:`button`,children:t(b===`apply`?`common.loading`:`machine.applyPreview`)})]}):null,O.available_scopes.includes(`machine`)?(0,B.jsx)(Ub,{values:[{label:t(`machine.currentValue`),value:ee},{label:t(`capabilities.defaultValue`),value:O.default}],t},O.capability_id):null]})]})]}):(0,B.jsx)(`p`,{className:`personal-capability-empty`,children:t(`machine.capabilityEmpty`)})}var cx={appearance:Am,capabilities:Gm,language:bm,lark:Um,machine:Vm};function lx({focusGoalConnection:e=!1,goals:t,initialGoalId:n,initialTab:r=`lark`,onChanged:i,onClose:a,onThemeChange:o,theme:s}){let{locale:c,setLocale:l,t:u}=Ji(),[d,f]=(0,z.useState)(r),p=[...n?[{key:`capabilities`,label:u(`capabilities.title`)}]:[],{key:`machine`,label:u(`machine.title`)},{key:`lark`,label:`Lark`},{key:`appearance`,label:u(`settings.appearance`)},{key:`language`,label:u(`settings.language`)}],m=[{label:u(`settings.languageEnglish`),value:`en`},{label:u(`settings.languageSimplifiedChinese`),value:`zh-CN`}],h={appearance:{title:u(`settings.appearance`)},capabilities:{title:u(`capabilities.title`)},language:{title:u(`settings.language`)},lark:{title:`Lark`},machine:{title:u(`machine.title`)}}[d];return(0,B.jsxs)(`section`,{"aria-label":u(`settings.title`),className:`personal-settings-page`,"data-pw-theme":s,children:[(0,B.jsxs)(`aside`,{className:`personal-settings-sidebar`,children:[(0,B.jsxs)(`button`,{className:`personal-settings-back`,onClick:a,type:`button`,children:[(0,B.jsx)(Gp,{size:17}),(0,B.jsx)(`span`,{children:u(`settings.back`)})]}),(0,B.jsxs)(`div`,{className:`personal-settings-title`,children:[(0,B.jsx)(`small`,{children:u(`settings.eyebrow`)}),(0,B.jsx)(`strong`,{children:u(`settings.title`)})]}),(0,B.jsx)(`nav`,{"aria-label":u(`settings.categories`),className:`personal-settings-tabs`,children:p.map(e=>{let t=cx[e.key];return(0,B.jsxs)(`button`,{"aria-current":d===e.key?`page`:void 0,onClick:()=>f(e.key),type:`button`,children:[(0,B.jsx)(t,{size:17}),(0,B.jsx)(`span`,{children:(0,B.jsx)(`strong`,{children:e.label})})]},e.key)})})]}),(0,B.jsxs)(`main`,{className:`personal-settings-body`,children:[(0,B.jsx)(`header`,{className:`personal-settings-header`,children:(0,B.jsx)(`div`,{children:(0,B.jsx)(`h1`,{children:h.title})})}),d===`lark`?(0,B.jsx)(Ab,{embedded:!0,focusGoalConnection:e,goals:t,initialGoalId:n,onChanged:i,onClose:a}):null,d===`machine`?(0,B.jsx)(sx,{}):null,d===`capabilities`?(0,B.jsx)(ex,{goalId:n}):null,d===`appearance`?(0,B.jsxs)(`section`,{className:`personal-detail-card personal-appearance-settings`,children:[(0,B.jsx)(`small`,{children:u(`settings.workspaceDisplay`)}),(0,B.jsx)(`h3`,{children:u(`settings.appearance`)}),(0,B.jsxs)(`div`,{className:`personal-settings-choice-group`,role:`radiogroup`,"aria-label":u(`settings.workspaceTheme`),children:[(0,B.jsxs)(`button`,{"aria-checked":s===`loopx`,onClick:()=>o(`loopx`),role:`radio`,type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-settings-theme-swatch is-loopx`}),(0,B.jsx)(`strong`,{children:u(`settings.themeLoopx`)})]}),(0,B.jsxs)(`button`,{"aria-checked":s===`paper`,onClick:()=>o(`paper`),role:`radio`,type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-settings-theme-swatch is-paper`}),(0,B.jsx)(`strong`,{children:u(`settings.themeDefault`)})]}),(0,B.jsxs)(`button`,{"aria-checked":s===`brutal`,onClick:()=>o(`brutal`),role:`radio`,type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-settings-theme-swatch is-brutal`}),(0,B.jsx)(`strong`,{children:u(`settings.themeHighContrast`)})]})]})]}):null,d===`language`?(0,B.jsxs)(`section`,{className:`personal-settings-card`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`span`,{className:`personal-settings-icon`,children:(0,B.jsx)(bm,{size:18})}),(0,B.jsx)(`div`,{children:(0,B.jsx)(`h2`,{children:u(`settings.language`)})})]}),(0,B.jsx)(`div`,{"aria-label":u(`settings.language`),className:`personal-language-options`,role:`radiogroup`,children:m.map(e=>(0,B.jsxs)(`button`,{"aria-checked":c===e.value,className:c===e.value?`is-selected`:``,onClick:()=>l(e.value),role:`radio`,type:`button`,children:[(0,B.jsx)(`span`,{children:(0,B.jsx)(`strong`,{children:e.label})}),c===e.value?(0,B.jsx)(em,{"aria-hidden":!0,size:17}):null]},e.value))})]}):null]})]})}var ux=`loopx-pw-theme`,dx=`loopx`;function fx(){try{let e=window.localStorage.getItem(ux);return e===`loopx`||e===`paper`||e===`brutal`?e:dx}catch{return dx}}function px(e){try{window.localStorage.setItem(ux,e)}catch{}}function mx({drawer:e,drawerMode:t=`panel`,drawerOpen:n,main:r,mobileSidebarOpen:i=!1,onCloseMobileSidebar:a,sidebar:o,theme:s=`loopx`}){let{t:c}=Ji(),l=(0,z.useRef)(null),u=(0,z.useRef)(null);return(0,z.useEffect)(()=>{if(!i)return;u.current=document.activeElement instanceof HTMLElement?document.activeElement:null;let e=l.current?.querySelectorAll(`button:not([disabled]), a[href], select:not([disabled]), textarea:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])`);e?.[0]?.focus();function t(t){if(t.key!==`Tab`||!e?.length)return;let n=e[0],r=e[e.length-1];t.shiftKey&&document.activeElement===n?(t.preventDefault(),r.focus()):!t.shiftKey&&document.activeElement===r&&(t.preventDefault(),n.focus())}return document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`keydown`,t),u.current?.focus(),u.current=null}},[i]),(0,B.jsxs)(`section`,{className:`personal-workspace-shell${n?` has-drawer`:``}${n&&t.startsWith(`inspector`)?` has-task-inspector`:``}${t===`inspector-full`?` is-task-inspector-full`:``}${i?` mobile-sidebar-open`:``}`,"data-pw-theme":s,children:[i?(0,B.jsx)(`button`,{"aria-hidden":!0,className:`personal-sidebar-backdrop`,onClick:a,tabIndex:-1,type:`button`}):null,(0,B.jsx)(`aside`,{"aria-label":i?c(`header.goalNavigation`):void 0,"aria-modal":i?!0:void 0,className:`personal-workspace-sidebar`,"data-workspace-sidebar":!0,ref:l,role:i?`dialog`:void 0,children:(0,B.jsxs)(`div`,{className:`personal-workspace-sidebar-inner`,children:[i?(0,B.jsxs)(`button`,{className:`personal-sr-only`,onClick:a,type:`button`,children:[c(`common.close`),` `,c(`header.goalNavigation`)]}):null,o]})}),(0,B.jsx)(`main`,{"aria-hidden":i||void 0,className:`personal-workspace-main`,inert:i||void 0,children:r}),n?(0,B.jsx)(`aside`,{className:`personal-workspace-drawer`,"data-context-drawer":!0,"data-drawer-mode":t,children:e}):null]})}function hx(e){let t=e.match(/(?:下一步|建议|行动项|待办)[::\s]*([^\n]+)/u),n=t?t[1]:e;n=n.replace(/```[\s\S]*?```/g,``).replace(/`([^`]+)`/g,`$1`).replace(/\[([^\]]+)\]\([^)]+\)/g,`$1`).replace(/[#*~_>]/g,``).replace(/^[-*•\d+.\s]+/u,``).replace(/^(好的|没问题|收到|建议如下|任务如下|分析如下|结论[::])[\s,,::]*/u,``);let r=(n.split(/\r?\n/).map(e=>e.trim()).filter(Boolean)[0]||n).replace(/\s+/gu,` `).trim();return Array.from(r).slice(0,120).join(``)}function gx(e){let t=new Map;return e.forEach(e=>{let n=e.fields.find(e=>e.key===`todo_id`)?.value??``,r=[e.actionKind,e.goalId??``,n,e.title].join(`:`);t.set(r,e)}),[...t.values()]}function _x(e,t,n){if(!e)return n(`home.noFirstActivity`);let r=new Date(e);if(Number.isNaN(r.getTime()))return e;let i=new Date,a=new Intl.DateTimeFormat(t,{hour:`2-digit`,minute:`2-digit`,hour12:!1}).format(r);return r.toDateString()===i.toDateString()?n(`home.todayAt`,{time:a}):new Intl.DateTimeFormat(t,{month:`numeric`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,hour12:!1}).format(r)}function vx({goals:e,onSelectGoal:t,onRetry:n,systemHealth:r}){let{locale:i,t:a}=Ji(),o=e.filter(e=>e.activationState===`active`),s=o.filter(e=>e.loadState===`error`).length,c=[{key:`needs_you`,label:a(`home.lane.needsYou`)},{key:`running`,label:a(`home.lane.running`)},{key:`observing`,label:a(`home.lane.observing`)},{key:`scheduled`,label:a(`home.lane.scheduled`)}],l=Object.fromEntries(c.map(e=>[e.key,[]])),u=[],d=[];e.filter(e=>!e.loadState).forEach(e=>{let t=gy(e);t===`history`?u.push(e):t===`stopped`?d.push(e):l[t].push(e)});let f=e=>(0,B.jsxs)(`button`,{className:`personal-home-goal-card`,"data-goal-state":e.loadState??e.state,"data-load-error":e.loadError,onClick:()=>t(e.goalId),type:`button`,children:[(0,B.jsxs)(`span`,{className:`personal-home-goal-meta`,children:[(0,B.jsx)(`i`,{}),e.agentLaneCount&&e.agentLaneCount>1?a(`header.workAgentCount`,{count:e.agentLaneCount}):e.agentLabel??e.agentId]}),(0,B.jsx)(`strong`,{children:e.title}),(0,B.jsx)(`p`,{children:e.loadError?a(`startup.error.${e.loadError}`):e.needsYou??e.nextSentence}),(0,B.jsxs)(`footer`,{children:[(0,B.jsx)(`span`,{children:e.loadState?a(e.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(e.state,i)}),(0,B.jsx)(`small`,{title:e.latestActivity,children:e.loadState?``:e.latestActivity?_x(e.latestActivity,i,a):e.agentTodos.length?a(`home.taskCount`,{count:e.agentTodos.length}):a(`home.noActivity`)})]})]},e.goalId);return(0,B.jsxs)(`section`,{"aria-label":a(`home.workspace`),className:`personal-home-board`,children:[r&&(!r.ok||r.issues.length>0||r.freshnessWarning)?(0,B.jsxs)(`div`,{className:`personal-system-health-banner`,role:`alert`,children:[(0,B.jsxs)(`div`,{className:`personal-system-health-header`,children:[(0,B.jsx)(im,{size:15}),(0,B.jsx)(`strong`,{children:a(`home.systemHealth`,{summary:r.summary})}),r.freshnessWarning?(0,B.jsxs)(`small`,{children:[`(`,r.freshnessWarning,`)`]}):null]}),r.issues.length>0?(0,B.jsx)(`ul`,{className:`personal-system-health-issues`,children:r.issues.map((e,t)=>(0,B.jsx)(`li`,{children:e},t))}):null]}):null,o.some(e=>e.loadState)?(0,B.jsxs)(`section`,{className:`personal-home-lane`,"aria-live":`polite`,children:[(0,B.jsx)(`header`,{children:a(`startup.progress`,{loaded:o.filter(e=>!e.loadState).length,total:o.length})}),s?(0,B.jsxs)(`div`,{className:`personal-stopped-goal-error`,role:`status`,children:[(0,B.jsx)(`span`,{children:a(`startup.failedCount`,{count:s})}),(0,B.jsx)(`button`,{className:`min-h-11 rounded-md border px-3 py-2 text-sm`,onClick:n,type:`button`,children:a(`startup.retryFailed`)})]}):null,o.filter(e=>e.loadState).map(f)]}):null,(0,B.jsx)(`div`,{className:`personal-home-lanes`,children:c.map(e=>(0,B.jsxs)(`section`,{className:`personal-home-lane is-${e.key}`,"data-testid":`personal-home-lane-${e.key}`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`i`,{}),e.label]}),(0,B.jsx)(`b`,{children:l[e.key].length})]}),(0,B.jsx)(`div`,{className:`personal-home-lane-list`,children:l[e.key].length?l[e.key].map(f):(0,B.jsx)(`span`,{className:`personal-home-empty`,children:a(`home.empty`)})})]},e.key))}),(0,B.jsxs)(`details`,{className:`personal-home-history`,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(`span`,{children:a(`home.history`)}),(0,B.jsx)(`b`,{children:u.length}),(0,B.jsx)(`small`,{children:a(`home.completedGoals`)})]}),(0,B.jsx)(`div`,{children:u.length?u.map(f):(0,B.jsx)(`span`,{className:`personal-home-empty`,children:a(`home.noCompletedGoals`)})})]}),d.length?(0,B.jsxs)(`details`,{className:`personal-home-history is-stopped`,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(`span`,{children:a(`home.stopped`)}),(0,B.jsx)(`b`,{children:d.length}),(0,B.jsx)(`small`,{children:a(`home.preservedState`)})]}),(0,B.jsx)(`div`,{children:d.map(f)})]}):null]})}function yx({items:e,onSelect:t,reportState:n}){let{locale:r,t:i}=Ji();return(0,B.jsxs)(`section`,{className:`personal-object-list personal-files-list`,"data-testid":`personal-goal-outputs`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`strong`,{children:i(`files.title`)}),(0,B.jsx)(`span`,{children:e.length})]}),n?.loading?(0,B.jsxs)(`p`,{className:`personal-object-list-state`,role:`status`,children:[(0,B.jsx)(Im,{className:`is-spinning`,size:14}),i(`files.loadingReports`)]}):null,n?.error?(0,B.jsxs)(`p`,{className:`personal-object-list-state is-error`,role:`alert`,children:[(0,B.jsx)(im,{size:14}),i(`files.reportLoadFailed`),`: `,n.error]}):null,!n?.loading&&!n?.error&&e.length===0?(0,B.jsxs)(`p`,{className:`personal-object-list-state`,children:[(0,B.jsx)(gm,{size:14}),i(`files.empty`)]}):null,e.map(e=>(0,B.jsxs)(`button`,{"data-output-kind":e.output.kind,onClick:()=>t({item:e.output,kind:`output`}),type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-file-icon`,children:(0,B.jsx)(gm,{size:16})}),(0,B.jsx)(`strong`,{children:e.output.title}),e.output.report?(0,B.jsx)(`em`,{children:i(`files.reportDelta`,{added:e.output.report.addedCount,changed:e.output.report.changedCount})}):null,(0,B.jsx)(`p`,{children:e.output.summary??e.output.safePreview??e.output.kind??i(`files.emptySummary`)}),(0,B.jsx)(`small`,{title:e.output.createdAt,children:[e.output.goalTitle,e.output.kind===`report`?i(`files.verifiedReport`):null,e.output.todoId?`${i(`common.task`)} ${e.output.todoId}`:null,_x(e.output.createdAt,r,i)].filter(Boolean).join(` · `)})]},e.id))]})}function bx({agentLabel:e,messages:t,onClose:n,onDraftTask:r,onOpenConversation:i,title:a}){let{t:o}=Ji(),s=t.reduce((e,t,n)=>t.role===`user`?n:e,0),c=t.slice(Math.max(0,s)).slice(-3),l=c.filter(e=>e.role===`assistant`&&!e.pending).at(-1);return(0,z.useEffect)(()=>{if(!n)return;let e=e=>{e.key===`Escape`&&n()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n]),(0,B.jsxs)(`aside`,{"aria-label":o(`conversation.receipt`),className:`personal-manager-conversation-tray`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(Zp,{size:16}),(0,B.jsx)(`strong`,{children:a??o(`conversation.title`)}),(0,B.jsx)(`small`,{children:t.at(-1)?.pending?o(`conversation.replying`):o(`common.recently`)})]}),(0,B.jsxs)(`div`,{className:`personal-manager-conversation-actions`,children:[r&&l?(0,B.jsxs)(`button`,{className:`personal-manager-conversation-btn`,onClick:()=>r(l.text),title:o(`conversation.convertHint`),type:`button`,children:[(0,B.jsx)(Sm,{size:13}),(0,B.jsx)(`span`,{children:o(`conversation.toTask`)})]}):null,(0,B.jsx)(`button`,{className:`personal-manager-conversation-link`,onClick:i,type:`button`,children:o(`conversation.full`)}),n?(0,B.jsx)(`button`,{"aria-label":o(`conversation.close`),className:`personal-manager-conversation-close`,onClick:n,title:o(`conversation.close`),type:`button`,children:(0,B.jsx)($m,{size:14})}):null]})]}),(0,B.jsx)(`div`,{"aria-live":`polite`,className:`personal-manager-conversation-messages`,children:c.map(t=>(0,B.jsxs)(`article`,{className:`is-${t.role}`,children:[(0,B.jsx)(`strong`,{children:t.role===`user`?o(`common.you`):t.agentLabel??e??o(`header.manager`)}),(0,B.jsxs)(`div`,{className:`personal-manager-conversation-bubble`,children:[t.role===`user`?(0,B.jsx)(`p`,{children:t.text}):(0,B.jsx)(jy,{text:t.text}),t.pending?(0,B.jsx)(`small`,{children:o(`conversation.agentPending`)}):null]})]},t.id))})]})}function xx({onClose:e,onOpenDetails:t,run:n}){let{t:r}=Ji();return(0,B.jsxs)(`section`,{"aria-label":r(`session.record`),className:`personal-session-record`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(Zp,{size:17}),r(`session.record`)]}),(0,B.jsx)(`button`,{"aria-label":r(`session.closeRecord`),onClick:e,type:`button`,children:(0,B.jsx)($m,{size:15})})]}),(0,B.jsx)(`div`,{children:(0,B.jsx)(`strong`,{children:n.title})}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Agent`}),(0,B.jsx)(`dd`,{children:n.agentLabel})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:r(`common.status`)}),(0,B.jsx)(`dd`,{children:Xi(n.sessionStatus??n.status,r)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Session`}),(0,B.jsx)(`dd`,{title:n.sessionId,children:n.sessionId})]})]}),(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:t,type:`button`,children:r(`session.details`)})]})}function Sx(e,t,n){let r=[];if(t===null)return e.userTodos.slice(0,4).forEach(t=>r.push({attention:{...t,goalTitle:t.goalTitle??hy(e,t.goalId)},id:`attention:${t.todoId}`,kind:`attention`})),e.goals.filter(e=>gy(e)===`running`).slice(0,4).forEach(e=>r.push({id:`run:${e.goalId}`,kind:`run`,run:{agentId:e.agentId,agentLabel:e.agentLabel??e.agentId,completedSteps:e.doneTodoCount??e.agentTodos.filter(e=>e.done).length,goalId:e.goalId,goalTitle:e.title,latestActivity:e.agentSentence,runId:`goal:${e.goalId}`,status:`running`,title:e.nextSentence,totalSteps:Math.max((e.doneTodoCount??0)+e.agentTodos.filter(e=>!e.done).length,1)}})),r;let i=e.goals.find(e=>e.goalId===t);if(!i)return r;if(i.needsYou){let t=e.userTodos.find(e=>e.goalId===i.goalId);r.push({attention:t?{...t,goalTitle:i.title}:{blocking:i.needsYouBlocking??!1,goalId:i.goalId,goalTitle:i.title,text:i.needsYou,todoId:`${i.goalId}:attention`},id:`attention:${i.goalId}`,kind:`attention`})}r.push({id:`run:${i.goalId}`,kind:`run`,run:{agentId:i.agentId,agentLabel:i.agentLabel??i.agentId,completedSteps:i.doneTodoCount??i.agentTodos.filter(e=>e.done).length,goalId:i.goalId,goalTitle:i.title,latestActivity:i.agentSentence,runId:`goal:${i.goalId}`,status:i.state===`推进中`?`running`:i.state===`需修复`?`failed`:`waiting`,title:i.nextSentence,totalSteps:Math.max((i.doneTodoCount??0)+i.agentTodos.filter(e=>!e.done).length,1)}}),i.agentTodos.filter(e=>e.taskClass===`continuous_monitor`).forEach(t=>{let a=e.timeline?.find(e=>e.kind===`run`&&e.run.goalId===i.goalId&&e.run.todoId===t.todoId&&!!e.run.sessionId);r.push({id:`schedule:${i.goalId}:${t.todoId}`,kind:`schedule`,schedule:{agentId:i.agentId,executionHistory:a?[{label:a.run.latestActivity||a.run.title,runId:a.run.runId,status:a.run.status===`waiting`||a.run.status===`queued`?`running`:a.run.status,timestamp:i.latestActivity||n(`common.recently`)}]:[],goalId:i.goalId,label:t.text,schedule:t.evidence??n(`schedule.summary`),scheduleId:t.todoId,scheduleKind:`monitor`,sessionId:a?.run.sessionId,status:t.done||t.status===`paused`?`paused`:`active`,stopCondition:n(`drawer.scheduleDefaultStop`),target:t.text,timezone:`Asia/Shanghai`}})});let a=e.timeline?.find(e=>e.kind===`proposal`&&e.proposal.actionKind===`heartbeat.bind`&&e.proposal.goalId===i.goalId);if(a){let e=e=>a.proposal.fields.find(t=>t.key===e)?.value;r.push({id:`schedule:${i.goalId}:heartbeat`,kind:`schedule`,schedule:{agentId:i.agentId,executionHistory:[],goalId:i.goalId,label:`${n(`schedule.heartbeat`)} · ${i.title}`,nextRunAt:n(`drawer.schedulePending`),notificationRule:n(`drawer.scheduleDefaultNotification`),schedule:e(`cadence`)??n(`schedule.summary`),scheduleId:`${i.goalId}:heartbeat`,scheduleKind:`heartbeat`,status:a.proposal.status===`applied`?`active`:`draft`,stopCondition:e(`stop_condition`)??n(`drawer.scheduleDefaultStop`),timezone:e(`timezone`)??`Asia/Shanghai`}})}return r}function Cx(e){return e===`preview_ready`?`ready`:e===`cancelled`?`draft`:e===`failed`?`error`:e}function wx(e,t){let n={agent_id:t(`proposal.field.agentId`),cadence:t(`proposal.field.cadence`),completion_criteria:t(`proposal.field.completionCriteria`),execution_boundary:t(`proposal.field.executionBoundary`),goal_id:t(`proposal.field.goalId`),heartbeat:t(`proposal.field.heartbeat`),initial_todos:t(`proposal.field.initialTodos`),objective:t(`proposal.field.objective`),operation:t(`proposal.field.operation`),permission:t(`proposal.field.permission`),reason:t(`proposal.field.reason`),stop_condition:t(`proposal.field.stopCondition`),target:t(`proposal.field.target`),timezone:t(`proposal.field.timezone`),title:t(`proposal.field.title`),workspace_ref:t(`proposal.field.workspace`)},r=[`title`,`objective`,`completion_criteria`,`execution_boundary`,`permission`,`agent_id`,`workspace_ref`,`initial_todos`,`heartbeat`,`stop_condition`,`goal_id`];return Object.entries(e).sort(([e],[t])=>{let n=r.indexOf(e),i=r.indexOf(t);return(n<0?r.length:n)-(i<0?r.length:i)}).slice(0,10).map(([e,r])=>({key:e,label:n[e]??e.replaceAll(`_`,` `),value:e===`workspace_ref`?r===`current`?t(`proposal.workspace.current`):t(`proposal.workspace.named`,{workspace:String(r??`current`)}):Array.isArray(r)?r.join(` · `):typeof r==`object`&&r?JSON.stringify(r):String(r??`—`)}))}function Tx(e,t){let n=e.normalized_parameters.projection,r=n&&typeof n==`object`?n:{},i=Array.isArray(r.fields)?r.fields.flatMap((e,t)=>{if(!e||typeof e!=`object`)return[];let n=e;return typeof n.label!=`string`||typeof n.value!=`string`?[]:[{key:`projection:${t}`,label:n.label,value:n.value}]}).slice(0,8):[];return[{key:`operation_state`,label:t(`proposal.field.operationState`),value:e.operation?.lifecycle_state??e.status},...e.operation?.lifecycle_state===`outcome_observed`?[{key:`result_delivery`,label:t(`proposal.field.resultDelivery`),value:e.operation.result_delivery?t(`proposal.resultDelivery.verified`):t(`proposal.resultDelivery.pending`)}]:[],...i,...typeof r.warning==`string`?[{key:`warning`,label:t(`proposal.field.confirmationBoundary`),value:r.warning}]:[],...e.operation?.expires_at?[{key:`expires_at`,label:t(`proposal.field.expiresAt`),value:e.operation.expires_at}]:[]].slice(0,10)}function Ex(e){if(e.action_kind!==`goal.lifecycle`)return;let t=e.normalized_parameters.operation;return t===`stop`||t===`resume`||t===`delete`?t:void 0}function Dx(e,t){let n=Ex(e),r=fy(e),i=typeof e.normalized_parameters.title==`string`?e.normalized_parameters.title:typeof e.normalized_parameters.goal_id==`string`?e.normalized_parameters.goal_id:``,a=typeof e.normalized_parameters.target==`string`?e.normalized_parameters.target:``,o=e.normalized_parameters.projection,s=o&&typeof o==`object`&&typeof o.title==`string`?String(o.title):e.summary,c=e.action_kind===`operation.execute`?s:e.action_kind===`goal.create`?t(`proposal.summary.goalCreate`,{title:i}):e.action_kind===`heartbeat.bind`?t(`proposal.summary.heartbeat`):e.action_kind===`monitor.create`?t(`proposal.summary.monitor`,{target:a}):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.summary.lifecycleStop`,{title:i}):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.summary.lifecycleDelete`,{title:i}):e.action_kind===`goal.lifecycle`?t(`proposal.summary.lifecycleResume`,{title:i}):e.summary;return{actionKind:e.action_kind,reviewPlan:r,fields:e.action_kind===`operation.execute`?Tx(e,t):wx(e.normalized_parameters,t),goalId:typeof e.normalized_parameters.goal_id==`string`?e.normalized_parameters.goal_id:void 0,impact:e.action_kind===`operation.execute`?t(`proposal.impact.operation`):e.action_kind===`goal.create`?t(`proposal.impact.goalCreate`):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.impact.lifecycleStop`):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.impact.lifecycleDelete`):e.action_kind===`goal.lifecycle`?t(`proposal.impact.lifecycleResume`):e.permission_classification===`protected`?t(`proposal.impact.protected`):t(`proposal.impact.default`),previewId:e.proposal_id,lifecycleOperation:n,gate:e.gate?{kind:String(e.gate.kind??`protected_action`),nextAction:typeof e.gate.next_action==`string`?e.gate.next_action:void 0,summary:String(e.gate.summary??t(`proposal.gate.default`))}:void 0,primaryLabel:e.action_kind===`operation.execute`?e.operation?.lifecycle_state===`outcome_observed`?e.operation.result_delivery?t(`proposal.primary.operationResultVerified`):t(`proposal.primary.operationResultPending`):t(`proposal.primary.operationGroup`):e.action_kind===`goal.create`?t(`proposal.primary.goalCreate`):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.primary.lifecycleStop`):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.primary.lifecycleDelete`):e.action_kind===`goal.lifecycle`?t(`proposal.primary.lifecycleResume`):e.action_kind===`todo.create`&&e.normalized_parameters.start_execution===!0?t(`proposal.primary.todoStart`):t(`proposal.primary.apply`),status:e.status===`applied`&&e.action_kind!==`operation.execute`&&r.interaction!==`completed`?`error`:Cx(e.status),title:c}}function Ox(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,42);if(t)return t;let n=2166136261;for(let t of e)n^=t.codePointAt(0)??0,n=Math.imul(n,16777619);return`goal-${(n>>>0).toString(36)}`}function kx(e,t){let n=e.match(/[「“"]([^」”"]{2,80})[」”"]/u)?.[1];return n?n.trim():e.replace(/^(请|帮我|我想|给我|创建|新建|设置|please|i want to|create|set up)+/iu,``).replace(/(一个|新的)?\s*(goal|目标)/giu,``).replace(/[,。!?].*$/u,``).trim().slice(0,80)||t(`goal.defaultTitle`)}function Ax(e,t){for(let n of e.split(/\r?\n/u)){let e=n.trim();for(let n of t){let t=e.match(RegExp(`^${n.replace(/[.*+?^${}()|[\]\\]/gu,`\\$&`)}\\s*[::]\\s*(.*)$`,`iu`));if(t?.[1]?.trim())return t[1].trim()}}return``}function jx(e,t){let n=Ax(e,[`目标`,`Objective`]),r=Ax(e,[`完成标准`,`Completion criteria`]),i=Ax(e,[`执行边界(可选)`,`执行边界`,`边界`,`Execution boundary (optional)`,`Execution boundary`,`Boundary`]),a=(n||kx(e,t)).split(/[。;;\n]/u)[0].trim().slice(0,80)||t(`goal.defaultTitle`),o=[n||a,r?t(`goal.objectiveCompletion`,{criteria:r}):``,i?t(`goal.objectiveBoundary`,{boundary:i}):``].filter(Boolean).join(` -`),s=/(只读|不调用外部工具|不修改(?:仓库|代码|状态)|read.?only|do not (?:call|use) external tools|do not modify (?:repositories|repository|code|state))/iu.test(i||e);return{completionCriteria:r,executionBoundary:i,initialTodos:r?[t(`goal.initialTodo`,{criteria:r})]:[],objective:o,permission:s?`read_only`:`workspace_write_on_confirmation`,title:a}}function Mx(e){let t=e.match(/(?:每|every)\s*(\d{1,3})\s*(?:分钟|minutes?)/iu)?.[1];if(t)return`${t}m`;let n=e.match(/(?:每|every)\s*(\d{1,2})\s*(?:小时|hours?)/iu)?.[1];return n?`${n}h`:/每小时|every hour|hourly/iu.test(e)?`1h`:(/每天|每日|早上|上午|daily|every day/iu.test(e),`1d`)}function Nx(e,t){return/(每周|星期|周[一二三四五六日天]|weekly|every\s+(?:mon|tues|wednes|thurs|fri|satur|sun)day|\d{1,2}\s*[::]\s*\d{2})/iu.test(e)?t(`schedule.unsupportedCalendar`):null}function Px(e,t){return Ax(e,[`检查内容`,`监控内容`,`目标`,`Check target`,`Monitor target`,`Target`])||e.replace(/^(?:为当前 Goal |for the current Goal )?(?:添加|配置|创建|add|configure|create)?\s*(?:定时检查|监控|scheduled check|monitor)[::]?/iu,``).split(/\r?\n/u)[0].trim()||t(`schedule.defaultTarget`)}function Fx(e){return/(mr|pr).{0,8}(合并|merge)/iu.test(e)?`pr_merged`:/发布完成|上线完成|release (?:is )?complete|deployment (?:is )?complete/iu.test(e)?`release_complete`:`goal_complete`}function Ix(e,t){let n=e.toLowerCase();return t.find(e=>n.includes(e.agentId.toLowerCase())||n.includes(e.label.toLowerCase()))}function Lx(e){let t=Ax(e,[`标题`,`任务标题`,`Todo 标题`]),n=Ax(e,[`内容`,`任务内容`,`Todo 内容`]);if(t)return[t,n].filter(Boolean).join(`:`).slice(0,400);let r=e.match(/[「“"]([^」”"]{2,200})[」”"]/u)?.[1];return r?r.trim():e.replace(/^(请|帮我|给我|为当前 Goal |新增|新建|创建|添加|加上|加一个|记一个)+/u,``).replace(/^(一个\s*)?(普通\s*)?(todo|待办|任务)(?:\s*到\s*Tasks?)?[::\s]*/iu,``).replace(/[。;;,,]\s*(?:不要|不需要|无需|禁止|别|暂不).{0,80}(?:heartbeat|心跳|定时|监控|执行).*$/iu,``).replace(/[,,]\s*(并且|然后|再)?\s*(交给|分配给|让).+$/u,``).replace(/\s*(交给|分配给|让)\s+.+$/u,``).trim().slice(0,400)||`推进当前 Goal 的下一项工作`}var Rx=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]),zx=5242880,Bx=4;function Vx(e,t){return new Promise((n,r)=>{let i=new FileReader;i.onerror=()=>r(Error(t(`composer.imageReadError`,{name:e.name}))),i.onload=()=>n({dataUrl:String(i.result??``),id:crypto.randomUUID(),mimeType:e.type,name:e.name,size:e.size}),i.readAsDataURL(e)})}function Hx({agents:e=[{agentId:`codex`,available:!0,capability:`代码与项目执行`,label:`Codex`}],callbacks:t={},goalArchiveLoadState:n={error:null,phase:`ready`},model:r,readOnly:i=!1,selectedAgentId:a,selectedGoalId:o,statusSourceControl:s}){let{locale:c,t:l}=Ji(),[u,d]=(0,z.useState)(o??null),[f,p]=(0,z.useState)(a??e.find(e=>e.available)?.agentId??`codex`),[m,h]=(0,z.useState)(null),[g,_]=(0,z.useState)(!1),[v,y]=(0,z.useState)(null),[b,x]=(0,z.useState)({}),[S,C]=(0,z.useState)(`chat`),[w,T]=(0,z.useState)(!1),[E,D]=(0,z.useState)(!1),[O,ee]=(0,z.useState)(!1),[te,ne]=(0,z.useState)(()=>{try{let e=window.sessionStorage.getItem(`loopx-pw-composer-drafts`),t=e?JSON.parse(e):{};return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}),[k,A]=(0,z.useState)(!1),[j,M]=(0,z.useState)([]),[N,P]=(0,z.useState)(null),[F,re]=(0,z.useState)(null),[ie,I]=(0,z.useState)(()=>new Set),[ae,L]=(0,z.useState)(()=>new Set),[oe,se]=(0,z.useState)(`idle`),[ce,le]=(0,z.useState)([]),[ue,de]=(0,z.useState)(!1),[fe,pe]=(0,z.useState)(fx),[me,he]=(0,z.useState)({}),[ge,_e]=(0,z.useState)([]),ve=(0,z.useRef)(!1),ye=(0,z.useRef)(NaN),be=(0,z.useRef)(null),xe=(0,z.useRef)(null),Se=(0,z.useRef)(null),Ce=(0,z.useRef)(new Set),we=(0,z.useRef)(new Set),[Te,Ee]=(0,z.useState)(null),R=o===void 0?u:o,De=a??f,Oe=`${R??`manager`}:${De}`,ke=te[Oe]??``;(0,z.useEffect)(()=>{M([]),P(null)},[Oe]);function Ae(e,t){ne(n=>{let r={...n};t?r[e]=t:delete r[e];try{window.sessionStorage.setItem(`loopx-pw-composer-drafts`,JSON.stringify(r))}catch{}return r})}function je(e){Ae(Oe,e)}function Me(e){let t=te[Oe]?.trimEnd();je(t?`${t}\n${e}`:e),window.requestAnimationFrame(()=>be.current?.focus())}(0,z.useEffect)(()=>{let e=be.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,120)}px`)},[ke]);let Ne=(0,z.useMemo)(()=>r.goals.map(e=>{let t=me[e.goalId];return t?{...e,repository:{branch:t.branch,identity:t.identity,label:t.label,readOnly:!0}}:e}),[me,r.goals]),Pe=(0,z.useMemo)(()=>Ne.filter(e=>gy(e)===`needs_you`).length,[Ne]),Fe=(0,z.useMemo)(()=>Ne.filter(e=>gy(e)===`needs_you`&&(e.needsYouBlocking||e.state===`等你`)).length,[Ne]),V=Ne.find(e=>e.goalId===R)??null,Ie=m?.kind===`settings`,Le=R,Re=(0,z.useMemo)(()=>{let e=Object.values(b).filter(e=>e.actionKind===`heartbeat.bind`&&e.goalId&&e.status===`applied`).map(e=>({id:`schedule:${e.goalId}:heartbeat`,kind:`schedule`,schedule:{agentId:De,executionHistory:[],goalId:e.goalId,label:e.title,nextRunAt:l(`drawer.schedulePending`),notificationRule:l(`drawer.scheduleDefaultNotification`),schedule:e.fields.find(e=>e.key===`cadence`)?.value??l(`schedule.summary`),scheduleId:`${e.goalId}:heartbeat`,scheduleKind:`heartbeat`,status:e.status===`applied`?`active`:`draft`,stopCondition:e.fields.find(e=>e.key===`stop_condition`)?.value??l(`drawer.scheduleDefaultStop`),timezone:e.fields.find(e=>e.key===`timezone`)?.value??`Asia/Shanghai`}})),t=[...Sx(r,Le,l),...r.timeline??[],...e,...gx(Object.values(b)).filter(e=>e.actionKind!==`heartbeat.bind`||e.status!==`applied`).map(e=>({id:`proposal:${e.previewId}`,kind:`proposal`,proposal:e}))];return[...new Map(t.map(e=>[e.id,e])).values()].filter(e=>e.kind!==`proposal`||![`stale`,`error`].includes(e.proposal.status)||ce.includes(e.proposal.previewId)).filter(e=>!R||e.kind===`message`?!0:e.kind===`proposal`?!e.proposal.goalId||e.proposal.goalId===R:e.kind===`attention`?e.attention.goalId===R:e.kind===`run`?e.run.goalId===R:e.kind===`schedule`?e.schedule.goalId===R:e.output.goalId===R)},[Le,r,b,De,R,ce,l]),ze=(0,z.useMemo)(()=>v?Re.filter(e=>e.kind===`message`?!0:e.kind===`run`?e.run.runId===v.runId:e.kind===`output`&&e.output.runId===v.runId):Re,[v,Re]);(0,z.useEffect)(()=>{if(!v)return;let e=Re.find(e=>e.kind===`run`&&e.run.runId===v.runId);!e||e.kind!==`run`||JSON.stringify({completedSteps:v.completedSteps,latestActivity:v.latestActivity,messages:v.sessionMessages,sessionStatus:v.sessionStatus,status:v.status,totalSteps:v.totalSteps})!==JSON.stringify({completedSteps:e.run.completedSteps,latestActivity:e.run.latestActivity,messages:e.run.sessionMessages,sessionStatus:e.run.sessionStatus,status:e.run.status,totalSteps:e.run.totalSteps})&&y(e.run)},[v,Re]);let Be=(0,z.useMemo)(()=>Re.flatMap(e=>e.kind===`message`?[e.message]:[]),[Re]),Ve=(0,z.useMemo)(()=>V?Re.flatMap(e=>e.kind===`message`?[e.message]:[]):[],[Re,V]);(0,z.useEffect)(()=>{V||w||Be.some(e=>e.pending)&&D(!0)},[w,Be,V]),(0,z.useEffect)(()=>{!V||S===`chat`||Ve.some(e=>e.pending)&&ee(!0)},[Ve,V,S]);let He=(0,z.useMemo)(()=>Re.filter(e=>e.kind===`message`||e.kind===`proposal`&&ce.includes(e.proposal.previewId)),[Re,ce]),Ue=He[He.length-1],We=Ue?.kind===`message`?Ue.message.text.length:0;(0,z.useEffect)(()=>{if(!w||!xe.current)return;let e=window.requestAnimationFrame(()=>{xe.current&&(xe.current.scrollTop=xe.current.scrollHeight)});return()=>window.cancelAnimationFrame(e)},[He.length,w,We]);let Ge=(0,z.useMemo)(()=>{if(m?.kind===`settings`)return null;if(m?.kind===`attention`)return{kind:`attention`,item:Gd(m.item,r.attentionHistory??r.userTodos)};if(m?.kind===`goal`){let e=Ne.find(e=>e.goalId===m.item.goalId);return e?{item:e,kind:`goal`}:m}if(m?.kind!==`run`)return m;let e=Re.find(e=>e.kind===`run`&&e.run.runId===m.item.runId);return e?{item:e.run,kind:`run`}:m},[Re,m,Ne,r.attentionHistory,r.userTodos]);(0,z.useEffect)(()=>{if(i){he({}),_e([]);return}let e=!1;return Promise.all([Ig(),qg()]).then(([t,n])=>{e||(he(Object.fromEntries(t.map(e=>[e.goal_id,e.repository]))),_e(n))}).catch(()=>{}),()=>{e=!0}},[i]),(0,z.useEffect)(()=>{if(!ue)return;function e(e){e.key===`Escape`&&de(!1)}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[ue]),(0,z.useEffect)(()=>{if(R||!Re.length)return;if(!ve.current){ve.current=!0;try{ye.current=Date.parse(window.localStorage.getItem(`loopx-pw-last-visit`)??``),window.localStorage.setItem(`loopx-pw-last-visit`,new Date().toISOString())}catch{ye.current=NaN}}let e=ye.current,t=Re.filter(e=>e.kind===`run`).map(e=>e.run),n=t=>{let n=Date.parse(t??``);return!Number.isNaN(e)&&!Number.isNaN(n)&&n>e},r={attention:Pe,done:t.filter(e=>e.status===`completed`&&n(e.latestActivity)).length,failed:t.filter(e=>(e.status===`failed`||e.status===`interrupted`)&&n(e.latestActivity)).length};Ee(e=>e?.attention===r.attention&&e.done===r.done&&e.failed===r.failed?e:r)},[Re,Pe,R]),(0,z.useEffect)(()=>{if(i){x({});return}let e=!1;return Mh(R?{goalId:R}:{contextKind:`manager`}).then(t=>{if(e)return;let n=Object.fromEntries(t.filter(e=>[`preview_ready`,`gated`,`deferred`,`applying`].includes(e.status)||e.action_kind===`operation.execute`&&e.status===`applied`).map(e=>{let t=Dx(e,l);return[t.previewId,t]}));x(e=>({...e,...n}))}).catch(()=>{}),()=>{e=!0}},[i,R,l]);async function Ke(e,n={}){if(i)throw Error(l(`source.readOnlyWriteError`));let r;try{r=t.onPreviewAction?await t.onPreviewAction(e):Dx(await Ah(e),l)}catch(t){if(!(t instanceof Th)||t.payload.error_code!==`action_preview_gate`)throw t;let n=t.payload.gate&&typeof t.payload.gate==`object`?t.payload.gate:{},i=(Array.isArray(n.candidates)?n.candidates:[]).flatMap(e=>{if(!e||typeof e!=`object`)return[];let t=e;return typeof t.workspace_ref==`string`&&typeof t.label==`string`?[{label:t.label,workspaceRef:t.workspace_ref}]:[]}),a=String(n.kind??`workspace_selection_required`),o=a===`agent_binding_required`||a===`agent_identity_selection_required`;r={actionKind:e.actionKind,fields:i.map(e=>({key:`workspace_ref:${e.workspaceRef}`,label:e.label,value:e.workspaceRef})),gate:{kind:a,nextAction:typeof n.next_action==`string`?n.next_action:void 0,summary:String(n.summary??l(`proposal.workspaceGate.defaultSummary`))},impact:l(o?`proposal.workspaceGate.agentImpact`:`proposal.workspaceGate.selectionImpact`),previewId:`workspace-choice-${Date.now().toString(36)}`,sourceRequest:e,status:`gated`,title:l(o?`proposal.workspaceGate.agentTitle`:`proposal.workspaceGate.selectionTitle`),workspaceCandidates:i}}return le(e=>e.includes(r.previewId)?e:[...e,r.previewId]),x(e=>({...e,[r.previewId]:r})),n.select!==!1&&h({item:r,kind:`proposal`}),r}function qe(){tt(null),Ae(`manager:${De}`,l(`composer.createGoalTemplate`)),window.requestAnimationFrame(()=>be.current?.focus())}async function Je(e,n){de(!1);let r={delete:`Deleted from the owner workspace`,resume:`Resumed from the owner workspace`,stop:`Stopped from the owner workspace`},i={delete:l(`proposal.summary.lifecycleDelete`,{title:e.title}),resume:l(`proposal.summary.lifecycleResume`,{title:e.title}),stop:l(`proposal.summary.lifecycleStop`,{title:e.title})},a=null,o=!1;try{if(n===`stop`){if(Ce.current.has(e.goalId))return;Ce.current.add(e.goalId),I(new Set(Ce.current)),h(null),a={goalId:e.goalId,next:`stopped`,optimisticApplied:!0,previous:e.activationState},re(l(`feedback.applying`,{title:i.stop})),t.onGoalActivationStateChange?.(e.goalId,`stopped`)}if(t.onExecuteGoalLifecycle){if(n===`delete`)throw Error(`The selected status source does not authorize Goal deletion.`);let a=await t.onExecuteGoalLifecycle({goalId:e.goalId,operation:n,reason:r[n]});if(!a.projectionVerified)throw Error(`Goal lifecycle projection did not verify.`);o=!0,t.onGoalActivationStateChange?.(e.goalId,a.activationState),re(l(`feedback.completed`,{title:i[n]})),n===`stop`&&tt(null),await(t.onReconcileStatus??t.onRefresh)?.();return}let s=await Ke({actionKind:`goal.lifecycle`,context:{kind:`goal_directory`,goal_id:e.goalId},idempotencyKey:`workspace-goal-${n}-${e.goalId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,operation:n,reason:r[n]},summary:i[n]},{select:n!==`stop`});if(s.goalId!==e.goalId||s.lifecycleOperation!==n)throw h(null),Error(l(`actionReview.targetChanged`));n===`stop`&&(s.reviewPlan?.interaction===`direct`?(o=!0,await Qe(s,{lifecycleProjection:a??void 0,presentation:`feedback`})):(a&&t.onGoalActivationStateChange?.(a.goalId,a.previous),re(s.gate?l(`feedback.gateRequired`,{summary:s.gate.summary}):l(`feedback.notCompleted`,{status:s.status})),h({item:s,kind:`proposal`})))}catch(e){a&&!o&&t.onGoalActivationStateChange?.(a.goalId,a.previous),re(l(`feedback.executionFailed`,{error:e instanceof Error?e.message:String(e)}))}finally{n===`stop`&&(Ce.current.delete(e.goalId),I(new Set(Ce.current)))}}function Ye(e,t){je(l(t?e===`heartbeat`?`composer.heartbeatTemplate`:`composer.monitorTemplate`:e===`heartbeat`?`composer.heartbeatTemplateWithoutGoal`:`composer.monitorTemplateWithoutGoal`)),h(null),window.requestAnimationFrame(()=>be.current?.focus())}async function Xe(e,n,r=``){let i=await t.onRequestScheduleConfig?.(e,n);if(i){le(e=>e.includes(i.previewId)?e:[...e,i.previewId]),x(e=>({...e,[i.previewId]:i})),h({item:i,kind:`proposal`});return}if(!n){je(l(e===`heartbeat`?`composer.heartbeatGoalQuestion`:`composer.monitorGoalQuestion`));return}let a=Date.now().toString(36);await Ke({actionKind:e===`heartbeat`?`heartbeat.bind`:`monitor.create`,context:{kind:`schedule`,goal_id:n},idempotencyKey:`workspace-${e}-${n}-${a}`,normalizedParameters:e===`heartbeat`?{agent_id:De,cadence:Mx(r),goal_id:n,stop_condition:Fx(r),timezone:`Asia/Shanghai`}:{agent_id:De,cadence:Mx(r),goal_id:n,stop_condition:Fx(r),target:Px(r,l),target_key:`goal-${n}`,timezone:`Asia/Shanghai`},summary:e===`heartbeat`?l(`proposal.summary.heartbeat`):l(`proposal.summary.monitor`,{target:Px(r,l)})})}async function Ze(e){if(!we.current.has(e.todoId)){we.current.add(e.todoId),L(new Set(we.current)),re(l(`feedback.preparingPreview`,{title:e.text}));try{await Ke({actionKind:`todo.update`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-${e.todoId}-complete-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,operation:`complete`,todo_id:e.todoId},summary:l(`tasks.markComplete`,{name:e.text})}),re(null)}catch(e){re(l(`feedback.previewFailed`,{error:e instanceof Error?e.message:String(e)}))}finally{we.current.delete(e.todoId),L(new Set(we.current))}}}async function Qe(e,n={}){if(e.reviewPlan&&!e.reviewPlan.canApply)return;let i=n.presentation!==`feedback`,a=e.actionKind===`goal.lifecycle`&&e.goalId&&(e.lifecycleOperation===`stop`||e.lifecycleOperation===`resume`)?{goalId:e.goalId,next:e.lifecycleOperation===`stop`?`stopped`:`active`,optimisticApplied:!1,previous:r.goals.find(t=>t.goalId===e.goalId)?.activationState??(e.lifecycleOperation===`stop`?`active`:`stopped`)}:null,o=n.lifecycleProjection??a;re(l(`feedback.applying`,{title:e.title}));let s={...e,reviewPlan:e.reviewPlan?{...e.reviewPlan,interaction:`pending`,reason:`apply_pending`,canApply:!1}:void 0,status:`applying`};x(t=>({...t,[e.previewId]:s})),i&&h({item:s,kind:`proposal`}),o&&!o.optimisticApplied&&t.onGoalActivationStateChange?.(o.goalId,o.next);try{if(t.onApplyProposal){await t.onApplyProposal(e);let n={...e,status:`applied`};if(x(t=>({...t,[e.previewId]:n})),i&&h({item:n,kind:`proposal`}),re(l(`feedback.completed`,{title:e.title})),e.actionKind===`goal.lifecycle`){(e.lifecycleOperation===`stop`||e.lifecycleOperation===`delete`)&&tt(null),e.lifecycleOperation===`delete`&&e.goalId&&t.onGoalDeleted?.(e.goalId);let n=t.onReconcileStatus??t.onRefresh;Promise.resolve().then(()=>n?.()).catch(()=>void 0)}return}let n=await Nh(e.previewId);if(n.proposal.proposal_id!==e.previewId||n.proposal.action_kind!==e.actionKind||e.actionKind===`goal.lifecycle`&&(n.proposal.normalized_parameters.goal_id!==e.goalId||Ex(n.proposal)!==e.lifecycleOperation))throw new Th(l(`actionReview.targetChanged`),{error_code:`action_response_mismatch`});let r=Dx(n.proposal,l);if(x(t=>({...t,[e.previewId]:r})),i&&h({item:r,kind:`proposal`}),r.reviewPlan?.interaction!==`completed`){o&&t.onGoalActivationStateChange?.(o.goalId,o.previous),h({item:r,kind:`proposal`}),re(n.proposal.status===`stale`?l(`feedback.stale`):l(`actionReview.${r.reviewPlan.reason}`));return}if(re(l(`feedback.completed`,{title:r.title})),r.actionKind===`todo.create`&&await t.onRefresh?.(),r.actionKind===`goal.lifecycle`&&(r.lifecycleOperation===`stop`||r.lifecycleOperation===`delete`)&&tt(null),r.actionKind===`goal.lifecycle`&&r.lifecycleOperation===`delete`&&r.goalId&&t.onGoalDeleted?.(r.goalId),r.actionKind===`goal.lifecycle`){let e=t.onReconcileStatus??t.onRefresh;Promise.resolve().then(()=>e?.()).catch(()=>void 0)}}catch(n){if(o&&t.onGoalActivationStateChange?.(o.goalId,o.previous),n instanceof Th&&n.payload.error_code===`protected_action`){let r=n.payload.gate,i=r&&typeof r==`object`?r:{},a={...e,reviewPlan:e.reviewPlan?{...e.reviewPlan,interaction:`gated`,reason:`authority_gate`,canApply:!1}:void 0,gate:{kind:String(i.kind??`protected_action`),nextAction:typeof i.next_action==`string`?i.next_action:void 0,summary:String(i.summary??n.message)},status:`gated`};x(t=>({...t,[e.previewId]:a})),h({item:a,kind:`proposal`}),re(l(`feedback.gateRequired`,{summary:a.gate.summary})),e.actionKind===`goal.create`&&e.goalId&&(t.onRefresh?.(),tt(e.goalId));return}let r=n instanceof Th&&py(n.payload),i=n instanceof Th&&n.payload.error_code===`action_response_mismatch`,a={...e,reviewPlan:e.reviewPlan?{...e.reviewPlan,interaction:r?`refresh`:`repair`,reason:i?`readback_unverified`:r?`stale_proposal`:`apply_failed`,canApply:!1}:void 0,errorMessage:n instanceof Error?n.message:String(n),status:r?`stale`:`error`};x(t=>({...t,[e.previewId]:a})),h({item:a,kind:`proposal`}),re(l(`feedback.executionFailed`,{error:a.errorMessage}))}}let $e={...t,onOpenRunSession:async e=>{e.goalId!==R&&tt(e.goalId),C(`chat`),await t.onOpenRunSession?.(e),y(e),h(null)},onOpenGoal:e=>{tt(e);let n=t.onReconcileStatus??t.onRefresh;Promise.resolve().then(()=>n?.()).catch(()=>{re(l(`feedback.goalRefreshFailed`))})},onOpenGoalView:e=>{C(e),e===`chat`&&y(null),h(null)},onOpenOutput:e=>{e.goalId!==R&&tt(e.goalId),C(`files`),t.onOpenOutput?.(e)},onApplyProposal:Qe,onCancelProposal:async e=>{h(null),x(t=>{let n={...t};return delete n[e.previewId],n});try{t.onCancelProposal?.(e),t.onCancelProposal||await Ph(e.previewId)}catch(t){x(t=>({...t,[e.previewId]:e})),re(l(`feedback.cancelFailed`,{error:t instanceof Error?t.message:String(t)}))}},onTransitionProposal:async(e,t)=>{let n=Dx(await Fh(e.previewId,t),l);le(e=>e.includes(n.previewId)?e:[...e,n.previewId]),x(r=>{let i={...r};return t===`regenerate`&&delete i[e.previewId],i[n.previewId]=n,i}),h({item:n,kind:`proposal`})},onSelectWorkspaceCandidate:async(e,t)=>{e.sourceRequest&&(x(t=>{let n={...t};return delete n[e.previewId],n}),await Ke({...e.sourceRequest,idempotencyKey:`${e.sourceRequest.idempotencyKey}-${t}`,normalizedParameters:{...e.sourceRequest.normalizedParameters,workspace_ref:t}}))},onPreviewAction:Ke,onRequestScheduleConfig:(e,t)=>Ye(e,t),onOpenNotificationSettings:e=>h({goalId:e,kind:`settings`,tab:`lark`}),onFetchNotificationTargets:()=>ig(),onSetupGoalChannel:e=>og(e),onToggleGoalAutoNotify:e=>sg(e),onUpdateSchedule:async(e,t)=>{let n=Date.now().toString(36),r=e.scheduleKind===`heartbeat`;await Ke({actionKind:r?`heartbeat.bind`:`monitor.update`,context:{kind:`schedule`,goal_id:e.goalId},idempotencyKey:`workspace-monitor-${e.scheduleId}-${t}-${n}`,normalizedParameters:{agent_id:e.agentId??De,...!r&&t===`run_now`?{endpoint_id:De}:{},...t===`edit`?{cadence:`2h`,...r?{timezone:e.timezone??`Asia/Shanghai`}:{}}:{},goal_id:e.goalId,operation:t,...!r&&t===`run_now`&&e.sessionId?{session_id:e.sessionId}:{},...r?{}:{todo_id:e.scheduleId}},summary:t===`pause`?`暂停自动运行:${e.label}`:t===`resume`?`恢复自动运行:${e.label}`:t===`run_now`?`立即运行:${e.label}`:t===`stop`?`停止自动运行:${e.label}`:`编辑自动运行生命周期:${e.label}`})}},et=i?{onOpenGoal:$e.onOpenGoal,onOpenGoalView:$e.onOpenGoalView,onOpenOutput:$e.onOpenOutput}:$e;function tt(e){d(e),T(!1),D(!1),ee(!1),y(null),h(null),C(`tasks`),de(!1),t.onSelectGoal?.(e)}function nt(e){p(e),t.onSelectAgent?.(e)}function rt(e){pe(e),px(e)}async function it(n){let r=n?[]:j,i=(n??ke).trim()||(r.length?l(`composer.imageAnalysisPrompt`):``);if(!(!i||k)){n||(je(``),M([])),P(null),A(!0);try{if(r.length){R?S!==`chat`&&ee(!0):D(!0);let e=await t.onSendMessage?.(i,De,R,r);e&&await Ke(e);return}let n=Wy(i,{agents:e.map(e=>({agentId:e.agentId,label:e.label})),goalId:R,todos:(V?.agentTodos??[]).map(e=>({text:e.text,todoId:e.todoId}))});if(n.route===`clarify`){je(i);let e=l(`composer.clarifySingleAction`);n.missingFields.includes(`resume_when`)&&(e=l(`composer.clarifyDefer`)),re(e);return}if(n.actionKind===`goal.create`){let e=jx(i,l),t=Ox(e.title);await Ke({actionKind:`goal.create`,context:{kind:`manager`,goal_id:null,natural_language:i},idempotencyKey:`workspace-goal-intent-${t}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:De,completion_criteria:e.completionCriteria,execution_boundary:e.executionBoundary,goal_id:t,heartbeat:{cadence:Mx(i),enabled:n.normalizedParameters.heartbeat_enabled===!0,timezone:`Asia/Shanghai`},initial_todos:e.initialTodos,objective:e.objective,permission:e.permission,stop_condition:Fx(i),title:e.title,workspace_ref:`current`},summary:l(`proposal.summary.goalCreate`,{title:e.title})});return}if(R&&n.actionKind===`heartbeat.bind`){await Xe(`heartbeat`,R,i);return}if(R&&n.actionKind===`monitor.create`){let e=Nx(i,l);if(e){je(i),re(e);return}await Xe(`monitor`,R,i);return}let a=Ix(i,e);if(R&&a&&n.actionKind===`agent.bind`){await Ke({actionKind:`agent.bind`,context:{kind:`goal`,goal_id:R,natural_language:i},idempotencyKey:`workspace-agent-bind-${R}-${a.agentId}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:a.agentId,goal_id:R},summary:`将 ${a.label} 绑定到 ${V?.title??R}`});return}if(R&&n.actionKind===`todo.create`){if(n.normalizedParameters.start_execution===!0){await Ke({actionKind:`todo.create`,context:{kind:`goal`,goal_id:R,natural_language:i},idempotencyKey:`workspace-task-start-${R}-${Date.now().toString(36)}`,normalizedParameters:{endpoint_id:a?.agentId??De,goal_id:R,start_execution:!0,text:i},summary:`交给 Agent 执行:${i.slice(0,120)}`});return}let e=a?.agentId??(/(交给|分配给|让).{0,24}(agent|codex|claude|kiro|kimi)/iu.test(i)?De:null);await Ke({actionKind:`todo.create`,context:{kind:`goal`,goal_id:R,natural_language:i},idempotencyKey:`workspace-todo-create-${R}-${Date.now().toString(36)}`,normalizedParameters:{...e?{endpoint_id:e}:{},goal_id:R,text:Lx(i)},summary:`创建 Todo:${Lx(i)}`});return}let o=V?.agentTodos.find(e=>i.includes(e.todoId)||i.includes(e.text)),s=typeof n.normalizedParameters.operation==`string`?n.normalizedParameters.operation:null;if(R&&o&&n.actionKind===`todo.update`&&s){await Ke({actionKind:`todo.update`,context:{kind:`todo`,goal_id:R,todo_id:o.todoId,natural_language:i},idempotencyKey:`workspace-todo-update-${o.todoId}-${s}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:De,...s===`reassign`&&a?{endpoint_id:a.agentId}:{},...s===`block`?{note:i}:{},...s===`defer`&&typeof n.normalizedParameters.resume_when==`string`?{resume_when:n.normalizedParameters.resume_when}:{},goal_id:R,operation:s,todo_id:o.todoId},summary:`更新 Todo:${o.text}`});return}R?S!==`chat`&&ee(!0):D(!0);let c=await t.onSendMessage?.(i,De,R);c&&await Ke(c)}catch(e){n||(je(i),M(r));let t=e instanceof Error?e.message:l(`feedback.sendGenericError`);re(l(`feedback.sendFailed`,{error:t}))}finally{A(!1)}}}let at=e.find(e=>e.agentId===De)?.label??De,ot=!V&&ke.startsWith(l(`composer.createGoalDraftLead`)),st=Re.filter(e=>e.kind===`run`&&!!e.run.sessionId&&!!e.run.canInterrupt&&(e.run.status===`running`||e.run.status===`queued`)).length;async function ct(e){if(!e?.length)return;let t=Bx-j.length,n=Array.from(e).slice(0,Math.max(0,t)),r=n.find(e=>!Rx.has(e.type)),i=n.find(e=>e.size>zx);if(t<=0){P(l(`composer.imageCountError`,{count:Bx}));return}if(r){P(l(`composer.imageTypeError`));return}if(i){P(l(`composer.imageSizeError`,{size:zx/1024/1024}));return}try{let t=await Promise.all(n.map(e=>Vx(e,l)));M(e=>[...e,...t].slice(0,Bx)),P(e.length>n.length?l(`composer.imageCountError`,{count:Bx}):null)}catch(e){P(e instanceof Error?e.message:l(`composer.imageReadGenericError`))}finally{Se.current&&(Se.current.value=``)}}function lt(e){let t=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&e.type.startsWith(`image/`)).flatMap(e=>{let t=e.getAsFile();return t?[t]:[]});t.length&&(e.preventDefault(),ct(t))}async function ut(){let e=await qg();_e(e)}async function dt(){await Promise.all([ut(),t.onRefresh?.()])}async function ft(){if(!(!t.onRefresh||oe===`loading`)){se(`loading`);try{await t.onRefresh(),se(`done`)}catch{se(`error`)}window.setTimeout(()=>se(`idle`),1800)}}return Ie?(0,B.jsx)(lx,{focusGoalConnection:!!(m?.kind===`settings`&&m.goalId),goals:Ne,initialGoalId:m?.kind===`settings`?m.goalId??R:R,initialTab:m?.kind===`settings`?m.tab??`lark`:`lark`,onChanged:()=>void dt(),onClose:()=>h(null),onThemeChange:rt,theme:fe}):(0,B.jsx)(mx,{drawer:Ge?(0,B.jsx)($y,{agents:e,attentionHistory:r.attentionHistory??r.userTodos,onSelectAttention:e=>h({kind:`attention`,item:e}),callbacks:et,goalNotifications:r.goalNotifications??[],goals:Ne,inspectorExpanded:g,larkConnections:i?[]:ge,onClose:()=>{Ge.kind===`proposal`&&[`applied`,`rejected`].includes(Ge.item.status)&&(Ge.item.actionKind!==`heartbeat.bind`||Ge.item.status!==`applied`)&&x(e=>{let t={...e};return delete t[Ge.item.previewId],t}),_(!1),h(null)},onToggleInspectorSize:()=>_(e=>!e),readOnly:i,runs:Re.flatMap(e=>e.kind===`run`?[e.run]:[]),selection:Ge}):null,drawerMode:Ge?.kind===`todo`?g?`inspector-full`:`inspector`:`panel`,drawerOpen:Ge!==null,mobileSidebarOpen:ue,onCloseMobileSidebar:()=>de(!1),theme:fe,main:(0,B.jsxs)(`div`,{className:`personal-channel`,children:[(0,B.jsx)(wy,{agents:e,managerChatOpen:w,mobileNavigationOpen:ue,onOpenGoalCapabilities:V?()=>h({goalId:V.goalId,kind:`settings`,tab:`capabilities`}):void 0,onOpenGoalDetail:V&&!V.loadState?()=>h({item:V,kind:`goal`}):void 0,onRefresh:t.onRefresh?()=>void ft():void 0,onOpenNavigation:()=>de(!0),onOpenManagerChat:()=>{D(!1),T(!0)},onSelectGoalTab:e=>{C(e),e===`chat`&&(y(null),ee(!1))},onSelectAgent:nt,onReturnManagerHome:()=>{T(!1),D(!1),window.requestAnimationFrame(()=>xe.current?.scrollTo({behavior:`smooth`,top:0}))},selectedAgentId:De,refreshState:oe,readOnlySourceLabel:i?s?.activeSource.label:void 0,selectedGoal:V,selectedGoalTab:S}),(0,B.jsxs)(`div`,{className:`personal-channel-scroll`,ref:xe,children:[!V&&!w&&Te&&Te.done+Te.failed+Te.attention>0?(0,B.jsxs)(`section`,{className:`personal-digest-card`,"aria-label":l(`digest.away`),children:[(0,B.jsx)(`strong`,{children:l(`digest.away`)}),(0,B.jsxs)(`div`,{className:`personal-digest-stats`,children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`b`,{children:Te.done}),l(`digest.completed`)]}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`b`,{children:Te.failed}),l(`digest.failed`)]}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`b`,{children:Te.attention}),l(`digest.needsYou`)]})]})]}):null,!V&&!w?(0,B.jsxs)(`section`,{className:`personal-manager-greeting`,children:[(0,B.jsx)(`span`,{children:(0,B.jsx)(Zp,{size:20})}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:l(`home.greeting`)}),(0,B.jsx)(`p`,{children:r.goals.some(e=>e.activationState===`active`&&e.loadState)?l(`startup.partial`):(0,B.jsxs)(B.Fragment,{children:[l(`home.waitingCount`,{count:Pe}),` `,l(`home.blockingSummary`,{count:Fe})]})})]})]}):null,V?.loadState?(0,B.jsx)(`section`,{className:`personal-manager-greeting`,role:`status`,"data-testid":`goal-status-loading`,children:(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:l(V.loadState===`error`?`startup.goalError`:`startup.goalLoading`)}),(0,B.jsx)(`p`,{children:l(V.loadError?`startup.error.${V.loadError}`:`startup.independent`)}),V.loadState===`error`?(0,B.jsx)(`button`,{className:`min-h-11 rounded-md border px-3 py-2 text-sm`,type:`button`,onClick:()=>void t.onRefresh?.(),children:l(`startup.retry`)}):null]})}):V&&S===`tasks`?(0,B.jsx)(Tb,{historyEnabled:!i,goal:V,items:Re,onDraftTaskFromMessage:i?void 0:e=>{je(`创建一个 Task:${hx(e)}`),re(l(`feedback.taskDraftCreated`)),window.requestAnimationFrame(()=>be.current?.focus())},onOpenChat:()=>C(`chat`),onQuickComplete:i?void 0:Ze,onSelect:h,quickCompletingTodoIds:ae,selectedTodoId:Ge?.kind===`todo`?Ge.item.todoId:null,userTodos:r.userTodos}):V&&S===`files`?(0,B.jsx)(yx,{items:Re.filter(e=>e.kind===`output`),onSelect:h,reportState:r.periodicReports}):!V&&!w?(0,B.jsx)(vx,{goals:Ne,onRetry:()=>void t.onRefresh?.(),onSelectGoal:tt,systemHealth:r.systemHealth}):V?(0,B.jsxs)(B.Fragment,{children:[V&&v?.goalId===V.goalId?(0,B.jsx)(xx,{onClose:()=>y(null),onOpenDetails:()=>h({item:v,kind:`run`}),run:v}):null,(0,B.jsx)(Iy,{items:ze,onSelect:h,selectedGoal:V})]}):(0,B.jsx)(Iy,{items:He,onSelect:h,selectedGoal:null})]}),(0,B.jsx)(`div`,{className:`personal-composer-wrap`,children:i?(0,B.jsxs)(`div`,{className:`personal-read-only-notice`,children:[(0,B.jsx)(`strong`,{children:l(`source.readOnlyNoticeTitle`)}),(0,B.jsx)(`span`,{children:l(`source.readOnlyNoticeDescription`)})]}):(0,B.jsxs)(B.Fragment,{children:[!V&&!w&&E&&Be.length?(0,B.jsx)(bx,{messages:Be,onClose:()=>D(!1),onOpenConversation:()=>{D(!1),T(!0)}}):null,V&&S!==`chat`&&O&&Ve.length?(0,B.jsx)(bx,{agentLabel:at,messages:Ve,onClose:()=>ee(!1),onDraftTask:S===`tasks`?e=>{je(`创建一个 Task:${hx(e)}`),re(l(`feedback.taskDraftCreated`)),window.requestAnimationFrame(()=>be.current?.focus())}:void 0,onOpenConversation:()=>{ee(!1),C(`chat`)},title:`${V.title} · ${at}`}):null,F?(0,B.jsxs)(`div`,{className:`personal-action-feedback`,role:`status`,children:[(0,B.jsx)(`span`,{children:F}),(0,B.jsx)(`button`,{"aria-label":l(`common.closeActionReceipt`),onClick:()=>re(null),type:`button`,children:(0,B.jsx)($m,{size:14})})]}):null,(0,B.jsx)(`p`,{className:`personal-composer-hint`,children:V?st>0?l(`composer.goalRunningHint`,{agent:at,count:st}):l(`composer.goalMessageHint`,{agent:at}):l(`composer.managerMessageHint`)}),V?(0,B.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,B.jsxs)(`button`,{"aria-label":l(`composer.nextAction`),className:`is-draft`,onClick:()=>Me(l(`composer.nextActionPrompt`)),title:l(`composer.prepareDraft`),type:`button`,children:[(0,B.jsx)(Em,{size:13}),(0,B.jsx)(`span`,{children:l(`composer.nextAction`)}),(0,B.jsx)(`small`,{className:`personal-prompt-subtle`,children:l(`composer.draft`)})]}),(0,B.jsxs)(`button`,{className:`is-immediate`,disabled:k,onClick:()=>void it(l(`composer.agentProgressPrompt`)),title:l(`composer.immediate`),type:`button`,children:[(0,B.jsx)(Bm,{size:13}),(0,B.jsx)(`span`,{children:l(`composer.agentProgress`)}),(0,B.jsx)(`em`,{className:`personal-prompt-badge`,children:l(`composer.immediate`)})]}),(0,B.jsxs)(`button`,{"aria-label":l(`composer.monitor`),className:`is-draft`,onClick:()=>Ye(`monitor`,R),title:l(`composer.monitorHint`),type:`button`,children:[(0,B.jsx)($p,{size:13}),(0,B.jsx)(`span`,{children:l(`composer.monitor`)}),(0,B.jsx)(`small`,{className:`personal-prompt-subtle`,children:l(`composer.draft`)})]})]}):(0,B.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,B.jsxs)(`button`,{"aria-label":l(`composer.globalTasks`),className:`is-draft`,onClick:()=>Me(l(`composer.globalTasksPrompt`)),title:l(`composer.prepareDraft`),type:`button`,children:[(0,B.jsx)(Em,{size:13}),(0,B.jsx)(`span`,{children:l(`composer.globalTasks`)}),(0,B.jsx)(`small`,{className:`personal-prompt-subtle`,children:l(`composer.draft`)})]}),(0,B.jsxs)(`button`,{className:`is-immediate`,disabled:k,onClick:()=>void it(l(`composer.globalProgressPrompt`)),title:l(`composer.immediate`),type:`button`,children:[(0,B.jsx)(Bm,{size:13}),(0,B.jsx)(`span`,{children:l(`composer.globalProgress`)}),(0,B.jsx)(`em`,{className:`personal-prompt-badge`,children:l(`composer.immediate`)})]}),(0,B.jsxs)(`button`,{"aria-label":l(`composer.createGoal`),className:`is-draft`,onClick:qe,title:l(`composer.createGoalHint`),type:`button`,children:[(0,B.jsx)(Pm,{size:13}),(0,B.jsx)(`span`,{children:l(`composer.createGoal`)}),(0,B.jsx)(`small`,{className:`personal-prompt-subtle`,children:l(`composer.draft`)})]})]}),ot?(0,B.jsxs)(`div`,{className:`personal-goal-draft-status`,role:`status`,children:[(0,B.jsx)(`strong`,{children:l(`composer.createGoalDraft`)}),(0,B.jsx)(`span`,{children:l(`composer.createGoalDraftDescription`)})]}):null,j.length?(0,B.jsx)(`div`,{className:`personal-composer-images`,"aria-label":l(`composer.imagesPending`),children:j.map(e=>(0,B.jsxs)(`figure`,{children:[(0,B.jsx)(`img`,{alt:e.name,src:e.dataUrl}),(0,B.jsx)(`button`,{"aria-label":l(`composer.sentImageAlt`,{name:e.name}),onClick:()=>M(t=>t.filter(t=>t.id!==e.id)),type:`button`,children:(0,B.jsx)($m,{size:13})})]},e.id))}):null,N?(0,B.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:N}):null,(0,B.jsxs)(`div`,{className:`personal-channel-composer`,onDragOver:e=>{[...e.dataTransfer.items].some(e=>e.kind===`file`&&e.type.startsWith(`image/`))&&e.preventDefault()},onDrop:e=>{let t=[...e.dataTransfer.files].filter(e=>e.type.startsWith(`image/`));t.length&&(e.preventDefault(),ct(t))},children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(Zp,{size:17}),e.find(e=>e.agentId===De)?.label??De]}),(0,B.jsx)(`button`,{"aria-label":l(`composer.addImage`),className:`personal-composer-attach`,disabled:k||j.length>=Bx,onClick:()=>Se.current?.click(),title:l(`composer.attachImageHint`),type:`button`,children:(0,B.jsx)(jm,{size:17})}),(0,B.jsx)(`input`,{accept:`image/png,image/jpeg,image/webp,image/gif`,"aria-label":l(`composer.imagePicker`),className:`personal-composer-file-input`,disabled:k||j.length>=Bx,multiple:!0,onChange:e=>void ct(e.target.files),ref:Se,type:`file`}),(0,B.jsx)(`textarea`,{"aria-label":l(`composer.sendMessage`),onChange:e=>je(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),it())},onPaste:lt,placeholder:V?l(`composer.goalPlaceholder`,{goal:V.title}):l(`composer.managerPlaceholder`),ref:be,rows:1,value:ke}),(0,B.jsx)(`button`,{"aria-label":l(ot?`composer.createGoal`:`composer.send`),disabled:!ke.trim()&&j.length===0||k,onClick:()=>void it(),title:l(ot?`composer.createGoalHint`:`composer.sendMessageHint`),type:`button`,children:(0,B.jsx)(Bm,{size:18})})]})]})})]}),sidebar:(0,B.jsx)(xb,{attentionCount:Pe,goals:Ne,goalArchiveLoadState:n,goalLifecycleOperations:t.onExecuteGoalLifecycle?[`stop`,`resume`]:void 0,lifecycleBusyGoalIds:ie,onRequestGoalCreate:i?void 0:qe,onRequestGoalLifecycle:i&&!t.onExecuteGoalLifecycle?void 0:(e,t)=>void Je(e,t),onRetryGoalArchive:t.onRetryGoalArchive||t.onRefresh?()=>void(t.onRetryGoalArchive??t.onRefresh)?.():void 0,onOpenSettings:i?void 0:()=>h({kind:`settings`}),onSelectGoal:tt,selectedGoalId:R,statusSourceControl:s},s?.activeSource.statusUrl??`/status.json`)})}function Ux(e){return(e??``).replace(/\s+/gu,` `).trim()}function Wx(e,t=120){let n=Array.from(e);return n.length<=t?e:`${n.slice(0,t-1).join(``)}…`}function Gx(e,t,n){let r=Ux(e);return!r||r===`暂无`?n?t(n):``:/refresh-state|latest_run|latest run-derived/iu.test(r)?t(`projection.refreshState`):/first read-only adapter tick|read-only adapter/iu.test(r)?t(`projection.firstReadOnlyAdapterCheck`):/todo update recorded for/iu.test(r)?t(`projection.todoStatusUpdated`):/^(loopx|python3|npm|git|run)\s|\s--[a-z0-9-]+|\b[a-z]+_[a-z_]+\b/iu.test(r)?t(n??`projection.agentPreparingNextStep`):Wx(r)}function Kx(e,t){return t({advancing:`projection.agentAdvancingGoal`,idle:`projection.agentIdle`,needs_you:`projection.agentNeedsDecision`,stopped:`projection.agentStopped`,waiting_external:`projection.agentWaitingExternal`}[e])}function qx({eventCount:e,hasArtifact:t,hasLatestValidation:n},r){return{label:r(n?`projection.latestValidation`:`projection.latestRun`),metadata:e>0?r(`projection.events24h`,{count:e}):r(t?`projection.runEvidenceAvailable`:`projection.publicSafeProjection`)}}var Jx=`/status.json`,Yx=`loopx-status-source-catalog-v1`,Xx={id:`local`,kind:`local`,label:`本机`,readOnly:!1,statusUrl:Jx};function Zx(e,t){let n=ih(e,t).source;if(!n||!n.isLoopback||n.isRelative)return{error:`SSH 隧道来源必须使用显式的 localhost、127.0.0.1 或 ::1 URL。`};let r=new URL(n.url,t);return[`http:`,`https:`].includes(r.protocol)?{url:r.toString()}:{error:`状态来源只支持 HTTP 或 HTTPS。`}}function Qx(e){let t=2166136261;for(let n of e)t^=n.codePointAt(0)??0,t=Math.imul(t,16777619);return`ssh-${(t>>>0).toString(36)}`}function $x(e,t){if(!e||typeof e!=`object`||Array.isArray(e))return null;let n=e;if(n.kind!==`ssh_tunnel`||typeof n.label!=`string`||typeof n.statusUrl!=`string`)return null;let r=n.label.trim(),i=Zx(n.statusUrl,t);if(!r||r.length>48||!(`url`in i))return null;let a=db(n.hostAlias)?n.hostAlias.trim():void 0;return{...a?{hostAlias:a}:{},id:Qx(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url}}function eS(){return{schemaVersion:1,sources:[Xx]}}function tS(e,t){try{let n=e.getItem(Yx);if(!n)return eS();let r=JSON.parse(n);if(r.schemaVersion!==1||!Array.isArray(r.sources))return eS();let i=new Set([Xx.statusUrl]);return{schemaVersion:1,sources:[Xx,...r.sources.flatMap(e=>{let n=$x(e,t);return!n||i.has(n.statusUrl)?[]:(i.add(n.statusUrl),[n])})]}}catch{return eS()}}function nS(e,t){e.setItem(Yx,JSON.stringify({schemaVersion:1,sources:t.sources.filter(e=>e.kind===`ssh_tunnel`)}))}function rS(e,t){let n=new Set(t.filter(db).map(e=>e.trim())),r=!1,i=e.sources.map(e=>e.kind!==`ssh_tunnel`||e.hostAlias||!n.has(e.label)?e:(r=!0,{...e,hostAlias:e.label}));return r?{...e,sources:i}:e}function iS(e,t,n){let r=t.label.trim();if(!r)return{error:`请填写来源名称。`};if(r.length>48)return{error:`来源名称不能超过 48 个字符。`};let i=Zx(t.statusUrl,n);if(!(`url`in i))return i;if(e.sources.some(e=>e.statusUrl===i.url))return{error:`这个状态 URL 已经在来源目录中。`};if(t.hostAlias!==void 0&&!db(t.hostAlias))return{error:`请选择有效的 SSH Host。`};let a=t.hostAlias?.trim(),o={...a?{hostAlias:a}:{},id:Qx(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url};return{catalog:{...e,sources:[...e.sources,o]},source:o}}function aS(e,t){return{...e,sources:e.sources.filter(e=>e.kind===`local`||e.id!==t)}}function oS(e,t,n){if(!t.trim()||ih(t,n).source?.isRelative)return Xx;let r=t.trim();try{r=new URL(r,n).toString()}catch{return null}return e.sources.find(e=>e.statusUrl===r)??null}function sS(e,t,n){return oS(e,t,n)||(ih(t,n).source?.isRelative?Xx:{id:`temporary`,kind:`ssh_tunnel`,label:`临时来源`,readOnly:!0,statusUrl:t.trim()})}function cS(e,t,n,r){return sS(e,t??n,r)}var lS={delete:`删除`,deploy:`部署`,merge:`合并`,payment:`付款`,release:`发布`};function uS(e,t,n){let r=t.replace(/\s+/gu,` `).trim().toLowerCase(),i=n.target.replace(/\s+/gu,` `).trim().toLowerCase();return!i||!r.includes(i)?null:{actionKind:`goal.update`,context:{goal_id:e,kind:`goal`,natural_language:t,semantic_proposal:{operation:n.operation,target:n.target}},idempotencyKey:`workspace-semantic-protected-${e}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e,status:`operator_gate_requested`},summary:`请求受保护操作:${lS[n.operation]} · ${n.target}`}}var dS=Jx;async function fS(e){let t=await fetch(e,{cache:`no-store`,signal:AbortSignal.timeout(3e4)});if(!t.ok)throw Error(`HTTP ${t.status} while loading ${e}`);return Ep(await t.json())}function pS(e,t){if(t?.controller_readiness?.decision_advisor_ready||t?.controller_readiness?.write_controller_ready)return`controller_ready`;if(t?.controller_readiness)return`controller_gated`;if(t?.human_reward)return`reward_judged`;if(t?.operator_gate?.decision===`approve`)return`operator_approved`;if(t?.operator_gate)return`operator_gated`;let n=e||t?.classification||``;return n===`connected_without_run`?`connected`:n===`read_only_project_map`||t?.project_map?`mapped`:n===`state_refreshed`?`refreshed`:n&&n!==`no_status`?`adapter_inspected`:`registered`}function mS(e,t){let n=new Map(t.map(e=>[e.goal_id,e])),r=new Set,i=e.map(e=>{r.add(e.id);let t=n.get(e.id),i=e.latest_runs[0],a=t?.lifecycle_phase??e.lifecycle_phase??i?.lifecycle_phase??pS(t?.status??i?.classification??e.status,i),o=t?.lifecycle_flags?.length?t.lifecycle_flags:e.lifecycle_flags?.length?e.lifecycle_flags:i?.lifecycle_flags?.length?i.lifecycle_flags:[a];return{goal:e,queueItem:t,latestRun:i,status:t?.status??i?.classification??e.status??`no_status`,waitingOn:t?.waiting_on??`clear`,severity:t?.severity??`clear`,lifecyclePhase:a,lifecycleFlags:o}});for(let e of t)r.has(e.goal_id)||i.push({goal:{activation_state:e.activation_state,id:e.goal_id,status:e.status,display_name:e.goal_id,latest_runs:[],lifecycle_flags:[e.lifecycle_phase??`registered`],registry_member:!0,legacy_runtime_goal:!1,index_exists:!1,raw_index_records:0,unique_runs:0},queueItem:e,status:e.status,waitingOn:e.waiting_on,severity:e.severity,lifecyclePhase:e.lifecycle_phase??`registered`,lifecycleFlags:e.lifecycle_flags??[`registered`]});return i}function hS(e){return(e??``).replace(/\s+/g,` `).trim()}function gS(e,t=132){let n=hS(e);return n.length<=t?n:`${n.slice(0,Math.max(0,t-1))}…`}function _S(e){let t=new Map;for(let n of e?.goals??[])t.set(n.goal_id,n);return t}function vS(e,t){return e===void 0||t===void 0?void 0:e+t}function yS(e,t){if(!e)return null;let n=t===`user`?e.queueItem?.project_asset?.user_todos:e.queueItem?.project_asset?.agent_todos;if(n?.items?.length)return{done_count:n.done??n.items.filter(e=>e.done).length,items:n.items,open_count:n.open??n.items.filter(e=>!e.done).length,total_count:n.total??n.items.length};let r=t===`user`?e.queueItem?.user_todos:e.queueItem?.agent_todos;return r?.items?.length?r:null}function bS(e){return e?.items.find(e=>!e.done)}function xS(e,t,n=`todos`){return e?.items?.length?{advancement_done_count:e.advancement_done_count??t?.advancement_done_count,done_count:e.done??e.items.filter(e=>e.done).length,items:e.items,open_count:e.open??e.items.filter(e=>!e.done).length,total_count:e.total??e.items.length}:t??null}function SS(e){return e?.queueItem?.project_asset?.quota?.state??e?.queueItem?.quota?.state??e?.goal.quota?.state??`waiting`}function CS(e,t,n){let r=[];for(let t of e){let e=yS(t,`agent`);for(let n of e?.items??[])r.push({goalId:t.goal.id,role:`agent`,todo:n})}let i=new Map;for(let e of r){let t=e.todo.claimed_by||`codex`,n=i.get(t)??[];n.push(e),i.set(t,n)}let a=new Map((n?.agents??[]).map(e=>[e.agent_id,e]));return Array.from(new Set([...i.keys(),...a.keys()])).map(e=>{let t=i.get(e)??[],n=a.get(e),r=Array.from(new Set([...t.map(e=>e.goalId),n?.current_todo?.goal_id,...n?.goal_ids??[]].filter(Boolean))),o=(t.filter(e=>!e.todo.done)[0]??t[0])?.goalId??n?.current_todo?.goal_id??r[0]??``,s=n?.last_activity_at??null;return{agentId:e,claimedTodos:t,currentTodo:n?.current_todo??null,evidenceRefs:[],goalIds:r,handoffNote:null,lastActivity:s,nextSafeAction:n?.next_action?.trim()||`Inspect status projection before taking work`,primaryGoalId:o,quotaHints:[],staleClaimHint:null,status:{label:`可用`,summary:`正常运行`,variant:`success`},workspaceRef:null}})}function wS(e){return e?.map(e=>({dataUrl:e.data_url,id:e.id,mimeType:e.mime_type,name:e.name,size:e.size}))}var TS=`loopx.personal-agent-selection.v1`;function ES(){if(typeof window>`u`)return{};try{let e=JSON.parse(window.localStorage.getItem(TS)??`{}`);return!e||typeof e!=`object`||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[0]==`string`&&typeof e[1]==`string`))}catch{return{}}}var DS={需修复:`danger`,等你:`warning`,等待条件:`info`,推进中:`success`,安静运行:`neutral`,已停止:`neutral`,已完成:`neutral`};function OS(e,t){return hS(t)||e.replace(/^loopx[-_]/i,`LoopX `).split(/[-_]+/).filter(Boolean).map((e,t)=>t===0?`${e.slice(0,1).toUpperCase()}${e.slice(1)}`:e).join(` `)}function kS(e){return e.split(/\r?\n/u).filter(e=>!/^\s*GOAL_(STATUS|PROGRESS)\s*:/u.test(e)).map(e=>/^\s*GOAL_EVIDENCE\s*:/u.test(e)?e.replace(/^\s*GOAL_EVIDENCE\s*:/u,`验证依据:`):/^\s*NEXT_ACTION\s*:/u.test(e)?e.replace(/^\s*NEXT_ACTION\s*:/u,`下一步:`):e).join(` -`).trim()}function AS(e,t){return[`agent`,`assistant`].includes(e.trim().toLowerCase())&&t.trim().length>0}var jS=`已发现的项目 Agent`;function MS(e){switch(cy(e)){case`codex`:return`Codex`;case`claude`:return`Claude Code`;case`kiro`:return`Kiro CLI`;case`trae`:return`Trae CLI Agent`;case`coco`:return`Coco Agent`;default:return OS(e)}}function NS(e,t){switch(ly(e,t)){case`codex`:return`代码与项目执行`;case`claude`:return`复杂分析与长任务`;case`openai`:case`anthropic`:return`管家问答 · 无工具`;case`kiro`:return`终端编码 · 原生 /goal 循环`;case`trae`:return`前端与交互实现`;case`coco`:return`通用任务`;default:return jS}}function PS(e,t){let n=e.project_asset;return t===`user`?xS(n?.user_todos,e.user_todos,`project_asset.user_todos`):xS(n?.agent_todos,e.agent_todos,`project_asset.agent_todos`)}function FS(e){return gS(e.title??e.text,112)}function IS(e){let t=e.resume_condition?.resume_receipt;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t.receipt_id;return typeof n==`string`&&n.trim()?n.trim():null}function LS(e,t){return{resumeWhen:e.resume_when??null,resumeReady:e.resume_ready??null,resumeReceiptId:IS(e),claimedBy:e.claimed_by??null,done:e.status!==`deferred`&&e.done,evidence:e.evidence?gS(e.evidence,96):null,index:e.index,priority:e.priority??null,status:e.status??null,taskClass:e.task_class??null,taskDomain:e.task_domain??null,text:FS(e),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.index}`}}function RS(e){let t=e.queueItem?.agent_todos,n=t?.items??e.queueItem?.project_asset?.agent_todos?.items??[],r=new Map(n.map(t=>[t.todo_id?.trim()||`${e.goal.id}:agent:${t.index}`,t]));for(let n of t?.deferred_items??[]){let t=n.todo_id?.trim()||`${e.goal.id}:agent:${n.index}`;r.has(t)||r.set(t,n)}return[...r.values()]}function zS(e){return RS(e).map(t=>LS(t,e))}function BS(e,t,n){let r=new Map;for(let n of e.todo_index?.items??[]){if(n.goal_id!==t.goal.id||n.role!==`agent`)continue;let e=LS(n,t);r.set(e.todoId,e)}for(let e of n)r.has(e.todoId)||r.set(e.todoId,e);let i=new Map;for(let e of r.values()){if(e.done||e.taskClass!==`advancement_task`)continue;let t=e.taskDomain?.trim();t&&i.set(t,(i.get(t)??0)+1)}return[...i].map(([e,t])=>({domain:e,matchingTodoCount:t}))}function VS(e,t){return{claimedBy:e.claimed_by??null,done:e.status===`done`||e.status===`completed`,index:-1,priority:e.priority??null,status:e.status??null,taskClass:e.task_class??null,text:gS(e.title,112),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.claimed_by??`unknown`}:current`}}function HS(e,t,n){let r=new Map(e.map(e=>[e.todoId,e]));for(let e of t){let t=e.currentTodo;if(!t||t.goal_id!==n.goal.id)continue;let i=VS(t,n);r.has(i.todoId)||r.set(i.todoId,i)}return[...r.values()]}function US(e){let t=e.queueItem?.project_asset?.agent_todos,n=e.queueItem?.agent_todos,r=RS(e),i=t?.advancement_done_count??n?.advancement_done_count??t?.done??n?.done_count??null,a=r.filter(e=>e.done&&e.status!==`deferred`).length,o=Math.max(i??0,a),s=new Set(r.map(e=>e.todo_id?.trim()).filter(e=>!!e)),c=(t?.recent_completed_advancement_items??[]).filter(e=>!e.todo_id?.trim()||!s.has(e.todo_id.trim())).map(t=>LS(t,e)),l=r.find(e=>!e.done);return{doneTodoCount:o,nextTodoText:hS(t?.next??``)||(l?hS(l.title??``)||hS(l.text??``):``)||null,recentCompleted:c}}function WS(e,t){let n=hS(e);return n?/\b(state_file|registry_goal|authority_sources|source_registry)\b|\b[a-z_]+\s+\d+\/\d+/i.test(n)?t(`projection.goalVerified`):Gx(n,t,`projection.validationRecorded`):``}function GS(e,t=4){if(e.length<=t)return e;let n=e.findIndex(e=>!e.done);if(n<0)return e.slice(-t);let r=Math.max(0,Math.min(n-2,e.length-t));return e.slice(r,r+t)}function KS(e,t,n){let r=t.queueItem?.project_asset?.latest_validation,i=t.latestRun,a=e.event_ledger_summary?.goals.find(e=>e.goal_id===t.goal.id);if(!r&&!i&&!a)return null;let o=[WS(r?.summary,n),Gx(i?.health_check,n),Gx(i?.recommended_action,n)].find(e=>e!==``&&e!==`暂无`)??n(`projection.runRecorded`),s=qx({eventCount:a?.events_24h??0,hasArtifact:!!(i?.json_exists||i?.markdown_exists),hasLatestValidation:!!r},n);return{generatedAt:r?.generated_at??i?.generated_at??a?.latest_event_at??``,label:s.label,metadata:s.metadata,runId:i?`${t.goal.id}:${i.generated_at}`:null,safePreview:[o,s.metadata].filter(Boolean).join(` -`),summary:o,todoId:t.queueItem?.project_asset?.agent_todos?.items.find(e=>!e.done)?.todo_id??null}}function qS(e){return[e.status,e.goal.status,e.latestRun?.classification,e.lifecyclePhase].filter(Boolean).some(e=>/(^|[_\s-])(done|complete|completed|finished|terminal|closed|success)([_\s-]|$)/i.test(e??``))}function JS(e,t){return e.global_registry?.findings?.find(e=>e.severity===`high`&&(e.goal_id===t.goal.id||e.goal_ids.includes(t.goal.id)))}function YS(e){return[e.status,e.goal.status,e.latestRun?.classification,e.lifecyclePhase].filter(Boolean).some(e=>/(^|[_\s-])(failure|failed|error|broken|unhealthy|blocked[_\s-]?health|health[_\s-]?blocked)([_\s-]|$)/i.test(e??``))}function XS(e,t){let n=t.queueItem?.stale_latest_run_warning;return t.severity===`high`||!!JS(e,t)||!!(n?.requires_refresh_state||n?.severity===`high`)||YS(t)}function ZS(e,t){let n=JS(e,t);return t.queueItem?.stale_latest_run_warning?.recommended_action??t.queueItem?.stale_latest_run_warning?.reason??n?.recommended_action??n?.message??t.queueItem?.recommended_action??t.latestRun?.recommended_action??null}function QS(e){let t=e.latestRun?.operator_gate,n=t?.decision?.trim().toLowerCase()??``,r=new Set([`approve`,`approved`,`reject`,`rejected`,`defer`,`deferred`,`cancel`,`cancelled`]),i=[e.queueItem?.recommended_action,e.latestRun?.recommended_action].filter(Boolean).join(` `),a=/(?:等待|需要)(?:用户|你|owner).{0,24}(?:批准|确认|授权|补充|选择|决定)|(?:批准|确认|授权).{0,16}(?:后|才能|方可)/i.test(i);return!!(t&&!r.has(n))||e.lifecyclePhase===`operator_gated`&&!r.has(n)||a}function $S(e,t){let n=e.latestRun?.operator_gate;return Gx(n?.operator_question??n?.reason_summary??n?.follow_up??e.queueItem?.recommended_action??e.latestRun?.recommended_action,t,`projection.confirmAgentDecision`)}function eC(e,t){if(t.goal.activation_state===`stopped`)return`已停止`;let n=yS(t,`user`),r=yS(t,`agent`),i=!!bS(n),a=!!bS(r);return[`user_or_controller`,`controller`].includes(t.waitingOn)||i||QS(t)?`等你`:XS(e,t)?`需修复`:t.waitingOn===`external_evidence`?`等待条件`:SS(t)===`eligible`||a?`推进中`:qS(t)?`已完成`:`安静运行`}function tC(e,t,n,r){if(n===`已停止`)return Kx(`stopped`,r);if(n===`需修复`)return Gx(ZS(e,t),r,`projection.statusRefreshNeeded`);if(n===`等你`)return Kx(`needs_you`,r);if(n===`推进中`){let e=[(yS(t,`agent`)?.items??[]).filter(e=>!e.done).flatMap(e=>[e.title,e.text]).map(e=>hS(e)).find(e=>e!==``&&e!==`暂无`),t.queueItem?.recommended_action,t.latestRun?.recommended_action].map(e=>hS(e)).find(e=>e!==``&&e!==`暂无`);return e?Gx(e,r,`projection.agentAdvancingGoal`):Kx(`advancing`,r)}return Kx(n===`等待条件`?`waiting_external`:`idle`,r)}function nC(e,t){return t.some(t=>e.includes(t))}function rC(e,t,n){if(t.goals.some(e=>e.activationState===`active`&&e.loadState))return{text:`Goal 状态尚未全部加载,暂不能给出完整统计。可先打开已加载的 Goal,失败项可重试。`,lines:[]};if(nC(n,[`Agent`,`agent`,`推进`,`在做`])){let e=t.goals.filter(e=>![`安静运行`,`已完成`,`已停止`].includes(e.state)),n=(e.length>0?e:t.goals).slice(0,3);return n.length===0?{text:`当前状态里还没有 Goal 可供汇总。`,lines:[]}:{text:e.length>0?`Agent 当前关注这些 Goal:`:`当前 Goal 都比较安静:`,lines:n.map(e=>`${e.title} · ${e.state} · ${e.agentSentence}`)}}if(nC(n,[`现在`,`下一步`,`我该`,`该做什么`,`优先处理`])){let e=t.userTodos[0];if(e)return{text:e.blocking?`先处理「${OS(e.goalId)}」:${e.text}`:`当前最先处理「${OS(e.goalId)}」:${e.text}`,lines:[]};let n=t.goals.find(e=>e.state===`需修复`);if(n)return{text:`没有待办,但这个 Goal 需要先修复。`,lines:[`${n.title} · ${n.agentSentence}`]};let r=t.goals.find(e=>e.state===`推进中`);return r?{text:`目前不需要你介入,Agent 正在推进。`,lines:[`${r.title} · ${r.agentSentence}`]}:{text:`当前系统很安静,没有需要你立即处理的事项。`,lines:[]}}if(nC(n,[`等我`,`阻塞`,`需要我`,`全局待办`]))return t.userTodos.length===0?{text:`目前没有 Goal 在等你,开放用户待办为 0。`,lines:[]}:{text:`有 ${t.userTodos.length} 项开放用户待办,阻塞项优先:`,lines:t.userTodos.slice(0,3).map(e=>`${OS(e.goalId)} · ${e.blocking?`阻塞`:`待处理`} · ${e.text}`)};if(nC(n,[`状态`,`异常`,`修复`,`健康`])){let n=t.systemHealth?!t.systemHealth.ok:!e.ok||!e.contract?.ok||!e.global_registry?.ok||(e.global_registry?.summary?.high??0)>0,r=t.goals.filter(e=>e.state===`需修复`),i=r.slice(0,n?2:3).map(e=>`${e.title} · ${e.agentSentence}`);return n&&i.push(`全局状态、契约或注册表健康检查未通过,请进入管理页检查。`),i.length===0?{text:`当前没有发现 Goal 级或全局健康异常。`,lines:[]}:{text:r.length>0?`当前需要关注这些健康问题:`:`Goal 状态正常,但全局健康需要检查:`,lines:i}}return{text:`当前管家支持三类问题:下一步、等待你的事项、Agent 与健康状态。`,lines:[`问“我现在该做什么?”`,`问“哪些 Goal 在等我?”`,`问“Agent 在做什么?”或当前健康状态`]}}function iC(e,t,n,r=!1){let i=new Map(t.map(e=>[e.goal.id,e])),a=new Set(e.run_history.goals.filter(e=>e.activation_state===`stopped`).map(e=>e.id)),o=_S(e.usage_summary),s=CS(t,e.todo_index,e.agent_management_projection),c=e.attention_queue.items.flatMap((e,t)=>{if(a.has(e.goal_id))return[];let n=[`user_or_controller`,`controller`].includes(e.waiting_on);return(PS(e,`user`)?.items??[]).map((r,i)=>({projectedDone:r.done,details:Ud(r),actionKind:r.action_kind??null,blocking:n,goalId:e.goal_id,sourceOrder:t,taskClass:r.task_class??null,text:FS(r),todoId:r.todo_id?.trim()||`${e.goal_id}:user:${r.index}`,todoOrder:i,updatedAt:r.updated_at??null}))}),l=c.filter(e=>!e.projectedDone),u=new Set(l.map(e=>e.goalId)),d=t.flatMap((t,r)=>a.has(t.goal.id)||u.has(t.goal.id)||!QS(t)?[]:[{details:Ud({task_class:`user_gate`,status:`open`,note:t.latestRun?.operator_gate?.reason_summary}),actionKind:`gate.resolve`,blocking:!0,goalId:t.goal.id,sourceOrder:e.attention_queue.items.length+r,taskClass:`user_gate`,text:$S(t,n),todoId:`${t.goal.id}:operator-gate`,todoOrder:0,updatedAt:t.latestRun?.operator_gate?.recorded_at??t.latestRun?.generated_at??null}]),f=[...l,...d].sort((e,t)=>Number(t.blocking)-Number(e.blocking)||e.sourceOrder-t.sourceOrder||e.todoOrder-t.todoOrder),p=e.run_history.goals.flatMap(t=>{if(t.registry_member===!1)return[];let a=i.get(t.id);if(!a)return[];let c=eC(e,a),l=f.find(e=>e.goalId===t.id),u=l?.text??null,d=US(a),p=t.coordination?.registered_agents??[],m=new Set(p),h=[...s.filter(e=>e.goalIds.includes(t.id)&&!/unassigned|unknown/i.test(e.agentId)&&(m.size===0||m.has(e.agentId))&&(e.currentTodo?.goal_id===t.id||e.claimedTodos.some(e=>e.goalId===t.id)))].sort((e,t)=>(t.lastActivity??``).localeCompare(e.lastActivity??``)),g=new Set(h.map(e=>e.agentId)),_=[...h.map(e=>({agentId:e.agentId,label:e.agentId,lastActivityAt:e.lastActivity,state:e.status.label})),...p.filter(e=>!g.has(e)).map(e=>({agentId:e,label:e,lastActivityAt:null,state:`registered`}))],v=h[0],y=HS(zS(a),h,a),b=[d.nextTodoText,a.queueItem?.recommended_action,a.latestRun?.recommended_action,tC(e,a,c,n)].map(e=>Gx(e,n)).find(e=>e!==``&&e!==`暂无`)??n(`projection.nextUpdatePending`);return[{activationState:t.activation_state,agentId:v?.agentId??p[0]??`codex`,agentLaneCount:_.length,agentLanes:_,agentLabel:v?.agentId,agentSentence:tC(e,a,c,n),agentTodos:[...y,...d.recentCompleted],doneTodoCount:d.doneTodoCount,acceptanceObservation:t.acceptance_observation,goalId:t.id,latestActivity:a.latestRun?.generated_at??``,needsYou:u,needsYouActionKind:l?.actionKind??null,needsYouBlocking:l?.blocking??!1,needsYouTaskClass:l?.taskClass??null,needsYouTodoId:l?.todoId??null,nextSentence:b,runEvidence:KS(e,a,n),state:c,...r?{subagentExecution:{allowedDomains:t.spawn_policy?.allowed_domains??[],domainCandidates:BS(e,a,y),enabled:t.spawn_policy?.mode===`multi_subagent`&&t.spawn_policy.spawn_allowed===!0&&t.spawn_policy.max_children>0,maxChildren:t.spawn_policy?.max_children??0,modelConfig:t.spawn_policy?.model_config}}:{},title:OS(t.id,t.display_name),usage:(()=>{let e=o.get(t.id);return e?{costUsd24h:e.cost_usd_24h,costUsd7d:e.cost_usd_7d,durationMs24h:e.duration_ms_24h,durationMs7d:e.duration_ms_7d,tokens24h:vS(e.input_tokens_24h,e.output_tokens_24h),tokens7d:vS(e.input_tokens_7d,e.output_tokens_7d)}:null})()}]}),m=[];if(e.ok||m.push(`状态载荷未标记为正常 (payload.ok === false)`),e.contract&&!e.contract.ok){let t=e.contract.summary,n=t?`${t.errors} 项错误 / ${t.warnings} 项警告`:e.contract.errors?.[0]||`请检查控制面契约`;m.push(`契约检查未通过: ${n}`)}if(e.global_registry){e.global_registry.ok||m.push(`注册表状态异常: ${e.global_registry.summary.high} 项高危`);for(let t of e.global_registry.findings||[])t.severity===`high`&&m.push(`[${t.kind}] ${t.message}`)}let h=e.decision_freshness_summary?.summary?.stale_count?`${e.decision_freshness_summary.summary.stale_count} 项决策状态已过期`:null,g=m.length===0&&!h,_={ok:g,summary:g?`所有控制面契约与注册表检查均正常`:`发现 ${m.length+ +!!h} 项系统健康关注点`,issues:m,freshnessWarning:h};return{blockingTodoCount:f.filter(e=>e.blocking).length,goalNotifications:(e.goal_channel_notification_projection?.goals??[]).map(e=>({goalId:e.goal_id,configured:e.configured,enabled:e.enabled,humanGateAutoNotifyEnabled:e.human_gate_auto_notify_enabled,lastNotifiedAt:e.last_notified_at??null,receiptCount:e.receipt_count,targetRef:e.target_ref??null})),goals:p,openUserTodoCount:f.length,systemHealth:_,attentionHistory:[...c,...d],userTodos:f,visibleUserTodos:f.slice(0,5),workers:(e.agent_management_projection?.agents??[]).map(e=>({agentId:e.agent_id,currentTodoGoalId:e.current_todo?.goal_id??null,currentTodoText:e.current_todo?.title?gS(e.current_todo.title,96):null,lastActivityAt:e.last_activity_at??null,state:e.state??null}))}}function aC({goalArchiveLoadState:e,isLoading:t,onGoalActivationStateChange:n,onGoalDeleted:r,onSelectGoal:i,onReconcileStatus:a,onRefresh:o,onRetryGoalArchive:s,payload:c,progress:l,rows:u,selectedGoalId:d,statusSourceControl:f,theme:p,toggleTheme:m}){let h=f.activeSource.readOnly,g=f.activeSource.kind===`ssh_tunnel`?f.activeSource.hostAlias:void 0,{t:_}=Ji(),[v,y]=(0,z.useState)([]),[b,x]=(0,z.useState)(!1),S=(0,z.useMemo)(()=>{let e=iC(c,u,_,b);if(!l)return e;let t=Object.values(l.snapshots).map(e=>iC(e,mS(e.run_history.goals,e.attention_queue.items),_,b)),n=new Map(t.flatMap(e=>e.goals).map(e=>[e.goalId,e])),r=e.goals.map(e=>n.get(e.goalId)??{...e,loadError:l.errors[e.goalId],loadState:l.errors[e.goalId]?`error`:`loading`,agentId:``,agentSentence:``,nextSentence:``,subagentExecution:void 0}),i=t.flatMap(e=>e.userTodos),a=r.some(e=>e.activationState===`active`&&e.loadState),o=[...new Set(t.flatMap(e=>e.systemHealth?.issues??[]))];return{...e,goals:r,userTodos:i,attentionHistory:t.flatMap(e=>e.attentionHistory??e.userTodos),visibleUserTodos:i.slice(0,5),openUserTodoCount:i.length,blockingTodoCount:i.filter(e=>e.blocking).length,workers:[...new Map(t.flatMap(e=>e.workers??[]).map(e=>[e.agentId,e])).values()],goalNotifications:t.flatMap(e=>e.goalNotifications??[]),systemHealth:a||t.length===0?void 0:{ok:t.every(e=>e.systemHealth?.ok),issues:o,summary:o.length?`发现 ${o.length} 项系统健康关注点`:`状态检查已完成`,freshnessWarning:t.map(e=>e.systemHealth?.freshnessWarning).filter(Boolean).join(`;`)||null}}},[c,u,l,b,_]),C=S.goals.find(e=>e.goalId===d)??null,w=l?.snapshots[d]??c,[T,E]=(0,z.useState)(null),[D,O]=(0,z.useState)(null),[ee,te]=(0,z.useState)(!1),ne=S.goals.some(e=>e.activationState===`active`&&e.loadState===`loading`)?`loading`:S.goals.map(e=>`${e.goalId}:${e.agentId}`).join(`|`),k=C?.goalId??`manager`;S.goals.some(e=>e.activationState===`active`&&e.loadState)||(S.systemHealth?!S.systemHealth.ok:!c.ok)||S.openUserTodoCount>0&&`${S.openUserTodoCount}${S.blockingTodoCount}`;let A=v.length>0?v.map(e=>({agentId:e.agent_id,adapterKind:e.adapter_kind,available:e.available,capability:NS(e.agent_id,e.adapter_kind),interrupt:e.interrupt,label:e.display_name,location:e.location,resume:e.resume,source:e.source,statusLabel:e.available?`可用`:`需要配置`,streaming:e.streaming,toolCalls:e.tool_calls,trustScope:e.trust_scope})):[{agentId:`codex`,available:!0,capability:NS(`codex`),label:`Codex`,statusLabel:`正在检测`}],j=[...A,{agentId:`status-only`,available:!0,capability:`不调用模型`,adapterKind:`status_projection`,interrupt:!1,label:`仅查状态`,resume:!0,statusLabel:`只读`,streaming:!1,toolCalls:!1,trustScope:`read_only`}],M=A.find(e=>e.label===`Codex`&&e.available)?.agentId??A.find(e=>e.available)?.agentId??`status-only`,[N,P]=(0,z.useState)(ES),F=uh(j,N[k]??M,M),[re,ie]=(0,z.useState)(!1),[I,ae]=(0,z.useState)(!1),[L,oe]=(0,z.useState)(`chat`),[se,ce]=(0,z.useState)(``),[le,ue]=(0,z.useState)({}),[de,fe]=(0,z.useState)({}),[pe,me]=(0,z.useState)(null),[he,ge]=(0,z.useState)({}),[_e,ve]=(0,z.useState)([]),[ye,be]=(0,z.useState)(null),[xe,Se]=(0,z.useState)({}),Ce=(0,z.useRef)(1),we=(0,z.useRef)(1),Te=(0,z.useRef)(new Map),Ee=(0,z.useRef)(new Set),R=(0,z.useRef)(new Map),De=(0,z.useRef)(new Map),Oe=(0,z.useRef)(new Set),ke=(0,z.useRef)(new Set),Ae=(0,z.useRef)(null),je=(0,z.useRef)(null),Me=(0,z.useRef)(null),Ne=(0,z.useRef)(null);(0,z.useRef)(null);let Pe=le[k]??[];de[k];let Fe=C?S.userTodos.filter(e=>e.goalId===C.goalId):S.userTodos,V=C?.agentTodos??[];GS(V,C?.needsYou?3:4);let Ie=V.filter(e=>e.done).length,Le=V.length>0?`${Ie}/${V.length}`:`暂无计划`;C&&({...S},Fe.filter(e=>e.blocking).length,Fe.length),(0,z.useEffect)(()=>{let e=rh(f.activeSource.statusUrl,window.location.href),t=e.source?sh(w,e.source):null;if(!C||!t?.indexUrl||!t.detailUrl){E(null),O(null),te(!1);return}let{detailUrl:n,indexUrl:r}=t,i=!1;return E(null),O(null),te(!0),ch(r,C.goalId).then(async e=>{let t=e.items[0]?.detail_ref;return t?lh(n,t):null}).then(e=>{i||E(e)}).catch(e=>{i||O(Dp(e))}).finally(()=>{i||te(!1)}),()=>{i=!0}},[w,C?.goalId,f.activeSource.statusUrl]);let Re=C?void 0:he[k]?.sessionId;(0,z.useEffect)(()=>{if(h||!Re)return;let e=!1,t,n=async()=>{try{let t=await Bh(Re);if(e)return;let n=t.messages.filter(e=>e.origin===`manager_followup`);ue(e=>{let t=e[k]??[],r=new Set(t.map(e=>e.sourceMessageId)),i=n.filter(e=>!r.has(e.message_id));return i.length?{...e,[k]:[...t,...i.map(e=>({id:Ce.current++,sourceMessageId:e.message_id,role:`assistant`,agentLabel:F.label,sourceLabel:`管家交接回执`,text:kS(e.text),lines:[]}))]}:e})}catch{}finally{e||(t=setTimeout(n,3e3))}};return n(),()=>{e=!0,t&&clearTimeout(t)}},[h,Re,k,F.label]);function ze(e,t){ge(n=>{if(t===null){let t={...n};return delete t[e],t}return{...n,[e]:t}})}(0,z.useEffect)(()=>{if(h){y([]),x(!1);return}let e=!1;return Lh().then(t=>{e||(y(t.adapters??[]),x(t.goal_subagent_configuration===`preview_locked`))}).catch(()=>{e||x(!1)}),()=>{e=!0}},[h]),(0,z.useEffect)(()=>{try{window.localStorage.setItem(TS,JSON.stringify(N))}catch{}},[N]),(0,z.useEffect)(()=>{if(h||!F.available)return;let e=k,t=`${e}:${F.agentId}`,n=C?`goal`:`manager`,r=C?`goal.${C.goalId}`:`manager`,i=!1,a=null,o=null;return(async()=>{try{let s=await Uh({agentId:F.agentId,channelId:r,goalId:C?.goalId});if(i||(ue(t=>(t[e]?.length??0)>0?t:{...t,[e]:s.messages.map(e=>({sourceMessageId:e.message_id,agentLabel:e.role===`user`?void 0:F.label,attachments:wS(e.attachments),id:Ce.current++,lines:[],role:e.role===`user`?`user`:`assistant`,sourceLabel:e.role===`user`?void 0:e.role===`error`?`本地会话记录`:`恢复的 ${F.label} 会话`,text:e.role===`user`?e.text:kS(e.text)}))}),F.agentId===`status-only`))return;let c=s.sessions[0];if(o=c?.session_id??null,c&&!c.resumable){Ee.current.add(t),ze(e,{agentId:F.agentId,resumable:!1,sessionId:c.session_id,status:`resume_failed`});return}let l=n===`manager`?``:C?.goalId??``;if(n===`goal`&&!l)return;let u=await zh(l,F.agentId,`resume_latest`,n);if(i)return;Te.current.set(t,u.session_id);let d=s.snapshots.find(e=>e.session.session_id===u.session_id),f=d?.session.active_turn_id??``;if(ze(e,{agentId:F.agentId,resumable:!0,sessionId:u.session_id,status:f?`running`:`ready`,turnId:f||void 0}),Ee.current.delete(t),!f)return;let p=`${u.session_id}:${f}`;if(ke.current.has(p))return;ke.current.add(p),R.current.set(e,f),ze(e,{agentId:F.agentId,resumable:!0,sessionId:u.session_id,status:`running`,turnId:f}),me(e),a=new AbortController,De.current.set(e,a);let m=``,h=Be(e,{activity:[`正在恢复进行中的 Agent 回合`],agentLabel:F.label,lines:[],pending:!0,sourceLabel:`恢复的 ${F.label} 会话`,text:``});try{let t=await Xh(u.session_id,f,{signal:a.signal,onDelta:t=>{m+=t,Ve(e,h,{text:m})},onActivity:t=>{ue(n=>({...n,[e]:(n[e]??[]).map(e=>e.id===h?{...e,activity:[...new Set([...e.activity??[],t])].slice(-6)}:e)}))}});if(i)return;Ve(e,h,{lines:t.response.gate?[t.response.gate.summary,t.response.gate.next_action].filter(Boolean).slice(0,2):[],pending:!1,text:t.response.message||m.trim()||`${F.label} 已完成分析。`});let n=S.goals.find(e=>e.goalId===d?.session.goal_id)??C??S.goals[0]??null;if(n&&t.response.proposals.length>0){let r=t.response.proposals.map(e=>({goalId:n.goalId,id:we.current++,previewId:null,proposal:e,receiptLabel:null,state:`candidate`,statusMessage:null}));fe(t=>({...t,[e]:[...t[e]??[],...r]}))}}catch(t){if(i)return;Ve(e,h,{activity:[],lines:[],pending:!1,reconnect:t instanceof Th&&t.payload.reconnectable===!0,sourceLabel:`LoopX Chat 本地后端`,text:t instanceof Error?t.message:`无法恢复进行中的 Agent 回合。`})}finally{ke.current.delete(p),R.current.get(e)===f&&R.current.delete(e),ze(e,{agentId:F.agentId,resumable:!0,sessionId:u.session_id,status:`ready`}),De.current.get(e)===a&&De.current.delete(e),i||me(t=>t===e?null:t)}}catch(n){if(i)return;n instanceof Th&&n.payload.error_code===`resume_failed`&&(Ee.current.add(t),o&&ze(e,{agentId:F.agentId,resumable:!1,sessionId:o,status:`resume_failed`}))}})(),()=>{i=!0,a?.abort()}},[k,S.goals[0]?.goalId,h,C?.goalId,F.agentId,F.available,F.label]),(0,z.useEffect)(()=>{if(h||C||S.goals.length===0||ne===`loading`)return;let e=!1;return Promise.all(S.goals.filter(e=>!e.loadState).map(async e=>{let t=await Vh({agentId:e.agentId,channelId:`goal.${e.goalId}`,goalId:e.goalId});return{goalId:e.goalId,session:t.sessions[0]??null}})).then(t=>{e||ge(e=>{let n={...e};for(let e of t)e.session&&(n[e.goalId]={agentId:e.session.agent_id,resumable:e.session.resumable,sessionId:e.session.session_id,status:e.session.active_turn_id?`running`:e.session.status,turnId:e.session.active_turn_id??void 0});return n})}).catch(()=>{}),()=>{e=!0}},[h,ne,C?.goalId]),(0,z.useEffect)(()=>{if(be(null),h){ve([]),Se({});return}if(!C){ve([]),Se({});return}let e=!1,t=0,n=0;ve([]),Se({});let r=async()=>{if(!e){if(document.hidden){t=window.setTimeout(()=>void r(),1e4);return}try{let t=await Vh({goalId:C.goalId});if(!e){let r=t.sessions.filter(e=>e.channel_id?.startsWith(`task.`));ve(r);let i=await Promise.allSettled(r.map(e=>Bh(e.session_id)));if(!e){let e=i.some(e=>e.status===`rejected`);n=e?n+1:0,be(e?`partial`:null),Se(Object.fromEntries(i.flatMap((e,t)=>e.status===`fulfilled`?[[r[t].session_id,e.value]]:[])))}}}catch{n+=1,e||be(`offline`)}e||(t=window.setTimeout(()=>void r(),Math.min(3e4,2e3*2**Math.min(n,4))))}};return r(),()=>{e=!0,window.clearTimeout(t)}},[h,C?.goalId]),(0,z.useEffect)(()=>{if(!re)return;let e=window.requestAnimationFrame(()=>{Ae.current?.querySelector(`[role="menuitem"]:not(:disabled)`)?.focus()});return()=>{window.cancelAnimationFrame(e),je.current?.focus()}},[re]),(0,z.useEffect)(()=>{if(!I)return;let e=window.requestAnimationFrame(()=>Me.current?.focus());return()=>{window.cancelAnimationFrame(e),Ne.current?.focus()}},[I]),(0,z.useEffect)(()=>{if(!re&&!I)return;let e=e=>{e.key===`Escape`&&(ie(!1),ae(!1))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[re,I]);function Be(e,t){let n=Ce.current++;return ue(r=>({...r,[e]:[...r[e]??[],{...t,id:n,role:`assistant`}]})),n}function Ve(e,t,n){ue(r=>({...r,[e]:(r[e]??[]).map(e=>e.id===t?{...e,...n}:e)}))}async function He(e,t){let n=e.trim();if(!n)return;let r=t&&`goalId`in t?t.goalId??`manager`:k,i=r===`manager`?null:S.goals.find(e=>e.goalId===r)??null,a=t?.agentId?uh(j,t.agentId,M):F,o=r===`manager`?S:i?{...S,blockingTodoCount:S.userTodos.filter(e=>e.goalId===i.goalId&&e.blocking).length,goals:[i],openUserTodoCount:S.userTodos.filter(e=>e.goalId===i.goalId).length,userTodos:S.userTodos.filter(e=>e.goalId===i.goalId),visibleUserTodos:S.userTodos.filter(e=>e.goalId===i.goalId)}:S,s=Ce.current++;if(ue(e=>({...e,[r]:[...e[r]??[],{attachments:t?.attachments,id:s,lines:[],role:`user`,text:n}]})),ce(``),me(r),a.agentId===`status-only`||!i&&r!==`manager`){let e=rC(w,o,n),t=a.agentId===`status-only`;Be(r,{agentLabel:t?`仅查状态`:`LoopX 管家`,lines:e.lines.slice(0,3),sourceLabel:t?`LoopX 状态投影 · 仅查状态`:`LoopX 状态投影`,text:e.text}),Rh({answer:[e.text,...e.lines.slice(0,3)].filter(Boolean).join(` -`),contextKind:r===`manager`?`manager`:`goal`,goalId:r===`manager`?void 0:r,question:n}).catch(()=>{}),me(null);return}let c=`${r}:${a.agentId}`,l=null;try{let e=Te.current.get(c);if(!e){let t=Ee.current.has(c)?`new`:`resume_latest`;e=(await zh(r===`manager`?``:i.goalId,a.agentId,t,r===`manager`?`manager`:`goal`)).session_id,Te.current.set(c,e),ze(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`ready`}),Ee.current.delete(c)}let o=``;l=Be(r,{activity:[`正在连接 Agent`],agentLabel:a.label,lines:[],pending:!0,sourceLabel:r===`manager`?`${a.label} 管家 · 跨 Goal`:`${a.label} Agent · ${OS(i.goalId)}`,text:``});let s=(await Jh(e,n,{attachments:t?.attachments,signal:(()=>{let e=new AbortController;return De.current.set(r,e),e.signal})(),onDelta:e=>{o+=e,l!==null&&Ve(r,l,{text:o})},onActivity:e=>{l!==null&&ue(t=>({...t,[r]:(t[r]??[]).map(t=>t.id===l?{...t,activity:[...new Set([...t.activity??[],e])].slice(-6)}:t)}))},onPhase:(t,n)=>{R.current.set(r,n),ze(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`running`,turnId:n})}})).response;if(Ve(r,l,{lines:s.gate?[s.gate.summary,s.gate.next_action].filter(Boolean).slice(0,2):[],pending:!1,text:kS(s.message||o.trim())||`${a.label} 已完成分析。`}),s.proposals.length>0&&!i&&Ve(r,l,{lines:[`请进入要修改的 Goal,预览并确认具体变更。`]}),s.proposals.length>0&&i){let e=s.proposals.map(e=>({goalId:i.goalId,id:we.current++,previewId:null,proposal:e,receiptLabel:null,state:`candidate`,statusMessage:null}));fe(t=>({...t,[r]:[...t[r]??[],...e]}))}if(r!==`manager`&&s.protected_action){let e=uS(r,n,s.protected_action);if(e)return e}}catch(e){if(Oe.current.delete(r)){let e={agentLabel:a.label,lines:[],pending:!1,sourceLabel:`${a.label} 会话`,text:`已中断。你可以在当前会话继续发送消息。`};l===null?Be(r,e):Ve(r,l,e);return}let t=e instanceof Th?e.payload:null;t&&dh(t)&&Te.current.delete(c),t?.error_code===`resume_failed`&&(Te.current.delete(c),Ee.current.add(c),ze(r,{agentId:a.agentId,resumable:!1,sessionId:he[r]?.sessionId??`resume-failed`,status:`resume_failed`}));let n=t?.gate,i=n&&typeof n==`object`?String(n.summary??``):``,o={agentLabel:a.label,lines:i?[i]:[],pending:!1,reconnect:t?.reconnectable===!0,sourceLabel:`LoopX Chat 本地后端`,text:t?.error_code===`resume_failed`?`原 ${a.label} 会话无法恢复。本地历史已经保留,请在运行详情里选择“重试恢复”或“开始新 Session”。`:e instanceof Error?e.message:`${a.label} 会话暂时不可用。`};l===null?Be(r,o):Ve(r,l,o)}finally{R.current.delete(r),De.current.delete(r);let e=Te.current.get(c);e&&ze(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`ready`}),me(e=>e===r?null:e)}}async function Ue(e){let t=e?.goalId??k,n=he[t],r=e?.agentId??n?.agentId??F.agentId,i=`${t}:${r}`,a=e?.sessionId??n?.sessionId??Te.current.get(i),o=e?.turnId??n?.turnId??R.current.get(t);if(!(!a||!o))try{Oe.current.add(t),await qh(a,o),De.current.get(t)?.abort()}catch(e){throw Oe.current.delete(t),e}finally{R.current.delete(t),ze(t,{agentId:r,resumable:!0,sessionId:a,status:`ready`}),De.current.delete(t),me(e=>e===t?null:e)}}async function We(e){let t=e.goalId,n=`${t}:${e.agentId}`,r=e.sessionId??he[t]?.sessionId??Te.current.get(n);if(r)try{let i=await Qh(r);Te.current.set(n,r),Ee.current.delete(n),ze(t,{agentId:e.agentId,resumable:i.session.resumable,sessionId:r,status:i.session.status})}catch{ze(t,{agentId:e.agentId,resumable:!1,sessionId:r,status:`resume_failed`})}}function Ge(e){let t=`${e.goalId}:${e.agentId}`;Te.current.delete(t),Ee.current.add(t),ze(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:`new-session-pending`,status:`ready`})}async function Ke(e){let t=`${e.goalId}:${e.agentId}`,n=e.sessionId??he[e.goalId]?.sessionId??Te.current.get(t);n&&n!==`new-session-pending`&&await Zh(n),Te.current.delete(t),Ee.current.add(t),ze(e.goalId,null)}function qe(e){j.some(t=>t.agentId===e&&t.available)&&(P(t=>({...t,[k]:e})),ie(!1))}function Je(){i(``),oe(`chat`)}function Ye(e){i(e),oe(`chat`)}C&&DS[C.state],C&&(`${F.label}${C.state}`,V.length>0&&`${Le}`,Fe.length>0&&`${Fe.length}`),C?.state===`需修复`||!C&&!c.ok?(C&&MS(C.agentId),C?.nextSentence,C?.agentSentence):C?.state===`等你`?(C.needsYouBlocking,C.needsYouBlocking,C.needsYou??C.nextSentence,C.needsYou):(C&&MS(C.agentId),C?.nextSentence);let Xe=[...!C&&he.manager?.status===`resume_failed`?[{id:`run:manager:resume-failed`,kind:`run`,run:{agentId:he.manager.agentId,agentLabel:MS(he.manager.agentId),canInterrupt:!1,completedSteps:0,goalId:`manager`,goalTitle:`LoopX 管家`,latestActivity:`本地聊天记录已保留,点我查看恢复方式。`,resumable:!1,runId:`manager:resume-failed`,sessionId:he.manager.sessionId,sessionStatus:`resume_failed`,status:`failed`,title:`上次会话需要恢复`,totalSteps:1,outputs:[]}}]:[],...C?_e.map(e=>{let t=e.channel_id?.startsWith(`task.`)?e.channel_id.slice(5):void 0,n=C.agentTodos.find(e=>e.todoId===t),r=!!e.active_turn_id,i=xe[e.session_id],a=i?.messages.some(e=>AS(e.role,e.text))===!0;return{id:`run:task:${e.session_id}`,kind:`run`,run:{agentId:e.agent_id,agentLabel:MS(e.agent_id),canInterrupt:r,completedSteps:n?.done||a?1:0,goalId:C.goalId,goalTitle:C.title,latestActivity:r?`Agent 正在执行,可进入 Session 查看过程或发送纠偏。`:a?`Agent 已返回结果,点击查看结果与完整运行记录。`:`执行 Session 已保留,可继续纠偏或恢复。`,resumable:e.resumable,runId:e.session_id,sessionId:e.session_id,sessionMessages:i?.messages.map(e=>({createdAt:e.created_at,messageId:e.message_id,role:e.role===`user`?`user`:AS(e.role,e.text)?`assistant`:`error`,text:e.role===`user`?e.text:kS(e.text)})),sessionStatus:a?`completed`:e.status,status:n?.done||a?`completed`:r?`running`:e.status===`resume_failed`?`failed`:`waiting`,title:n?.text??`Agent 执行任务`,todoId:t,totalSteps:1,turnId:e.active_turn_id??void 0}}}):[],...C?[{id:`run:${C.goalId}`,kind:`run`,run:{agentId:he[C.goalId]?.agentId??C.agentId,agentLabel:MS(he[C.goalId]?.agentId??C.agentId),canInterrupt:!!he[C.goalId]?.turnId,completedSteps:C.agentTodos.filter(e=>e.done).length,goalId:C.goalId,goalTitle:C.title,latestActivity:C.agentSentence,resumable:he[C.goalId]?.resumable??!0,runId:`goal:${C.goalId}`,sessionId:he[C.goalId]?.sessionId,sessionStatus:he[C.goalId]?.status,status:he[C.goalId]?.turnId?`running`:C.state===`需修复`?`failed`:`waiting`,title:C.nextSentence,totalSteps:C.agentTodos.length||1,turnId:he[C.goalId]?.turnId,outputs:C.runEvidence?[{createdAt:C.runEvidence.generatedAt,kind:`evidence`,outputId:`${C.goalId}:latest-evidence`,title:C.runEvidence.label}]:[]}}]:[],...Pe.map(e=>({id:`message:${e.id}`,kind:`message`,message:{agentLabel:e.agentLabel,attachments:e.attachments,id:String(e.id),pending:e.pending,role:e.role,text:e.text||(e.pending?`Agent 正在处理…`:e.lines.join(` -`))}})),...(C?[C]:S.goals).flatMap(e=>e.runEvidence?[{id:`output:${e.goalId}:${e.runEvidence.generatedAt||`latest`}`,kind:`output`,output:{agentLabel:MS(e.agentId),createdAt:e.runEvidence.generatedAt,goalId:e.goalId,goalTitle:e.title,kind:`evidence`,outputId:`${e.goalId}:latest-evidence`,runId:e.runEvidence.runId??void 0,safePreview:e.runEvidence.safePreview,summary:e.runEvidence.summary,title:e.runEvidence.label,todoId:e.runEvidence.todoId??void 0}}]:[]),...C&&T?[{id:`output:${C.goalId}:report:${T.publication.publication_id}`,kind:`output`,output:{agentId:T.agent_id,agentLabel:MS(T.agent_id),createdAt:T.publication.delivered_at,goalId:C.goalId,goalTitle:C.title,kind:`report`,outputId:T.publication.publication_id,report:{addedCount:T.delta.added_count,changedCount:T.delta.changed_count,deliveredAt:T.publication.delivered_at,generationId:T.generation_id,items:T.delta.items.map(e=>({changeKind:e.change_kind,previousStatus:e.previous_status,sourceRef:e.source_ref,status:e.status,summary:e.summary,title:e.title})),periodEndAt:T.period_window.end_at,periodStartAt:T.period_window.start_at,predecessorPublicationId:T.publication.predecessor_publication_id,publicationId:T.publication.publication_id},safePreview:T.delta.items.map(e=>`${e.change_kind===`added`?`+`:`~`} ${e.title}\n${e.summary}`).join(` +`)});continue}let o=e.match(/^\s{0,3}#{1,4}\s+(.*)$/);if(o){i();let t=e.trimStart().match(/^#+/)?.[0].length??1;n.push({type:`heading`,level:t,text:o[1].trim()}),a+=1;continue}if(ky.test(e)||Ay.test(e)){i();let r=Ay.test(e),o=r?Ay:ky,s=[];for(;a{let n=`b${t}`;if(e.type===`code`)return(0,B.jsx)(`pre`,{className:`personal-md-pre`,children:(0,B.jsx)(`code`,{children:e.text})},n);if(e.type===`heading`)return(0,B.jsx)(`p`,{className:`personal-md-heading is-h${e.level}`,children:Oy(e.text,n)},n);if(e.type===`list`){let t=e.items.map((e,t)=>(0,B.jsx)(`li`,{children:Oy(e,`${n}-${t}`)},`${n}-${t}`));return e.ordered?(0,B.jsx)(`ol`,{className:`personal-md-list`,children:t},n):(0,B.jsx)(`ul`,{className:`personal-md-list`,children:t},n)}return(0,B.jsx)(`p`,{children:e.lines.map((e,t)=>(0,B.jsxs)(z.Fragment,{children:[t>0?(0,B.jsx)(`br`,{}):null,Oy(e,`${n}-${t}`)]},`${n}-${t}`))},n)})})}function Ny({onSelect:e,output:t}){let{t:n}=Ji(),r=t.kind===`report`?_m:gm;return(0,B.jsxs)(`button`,{className:`personal-timeline-row personal-output-row`,"data-output-kind":t.kind,"data-testid":`personal-browse-row`,onClick:e,type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-row-icon is-output`,children:(0,B.jsx)(r,{size:18})}),(0,B.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,B.jsxs)(`small`,{children:[t.goalTitle??t.goalId,` · `,t.agentLabel??`LoopX`]}),(0,B.jsx)(`strong`,{children:t.title}),t.summary?(0,B.jsx)(`span`,{children:t.summary}):null,t.report?(0,B.jsxs)(`small`,{children:[n(`files.reportDelta`,{added:t.report.addedCount,changed:t.report.changedCount}),` · `,n(`files.verifiedReport`)]}):null]}),t.createdAt?(0,B.jsx)(`time`,{children:t.createdAt}):null,(0,B.jsx)(rm,{size:17})]})}var Py={completed:`runs.completed`,failed:`runs.failed`,interrupted:`runs.interrupted`,queued:`runs.queued`,running:`runs.running`,waiting:`runs.waiting`};function Fy({onSelect:e,run:t}){let{t:n}=Ji(),r=t.totalSteps>0?Math.min(100,t.completedSteps/t.totalSteps*100):0;return(0,B.jsxs)(`button`,{"aria-label":`${n(`tasks.viewExecution`)}:${t.title}`,className:`personal-timeline-row personal-run-row`,"data-testid":`personal-browse-row`,onClick:e,type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-row-icon is-run`,children:(0,B.jsx)(Qp,{size:18})}),(0,B.jsxs)(`span`,{className:`personal-run-identity`,children:[(0,B.jsx)(`small`,{children:t.goalTitle}),(0,B.jsx)(`strong`,{children:t.agentLabel})]}),(0,B.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,B.jsx)(`strong`,{children:t.title}),(0,B.jsx)(`small`,{children:t.latestActivity})]}),(0,B.jsxs)(`span`,{className:`personal-run-progress`,"aria-label":`${t.completedSteps}/${t.totalSteps}`,children:[(0,B.jsxs)(`small`,{children:[t.completedSteps,`/`,t.totalSteps]}),(0,B.jsx)(`i`,{children:(0,B.jsx)(`b`,{style:{width:`${r}%`}})})]}),(0,B.jsxs)(`span`,{className:`personal-row-status is-${t.status}`,children:[t.status===`running`?(0,B.jsx)(wm,{className:`personal-spin`,size:14}):null,n(Py[t.status])]}),t.sessionId?(0,B.jsx)(`span`,{className:`personal-run-open-label`,children:n(`tasks.viewExecution`)}):null,(0,B.jsx)(rm,{size:17})]})}function Iy({onSelect:e,schedule:t}){let{t:n}=Ji(),r=t.scheduleKind===`heartbeat`;return(0,B.jsxs)(`button`,{"aria-label":`${r?`Heartbeat`:n(`tasks.scheduled`)}:${t.label};${t.status??`active`}`,className:`personal-schedule-row`,onClick:e,type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-schedule-icon`,children:r?(0,B.jsx)(Im,{size:17}):(0,B.jsx)(em,{size:17})}),(0,B.jsxs)(`span`,{className:`personal-schedule-copy`,children:[(0,B.jsx)(`small`,{children:n(r?`schedule.heartbeat`:`schedule.monitor`)}),(0,B.jsx)(`strong`,{children:t.label}),(0,B.jsx)(`p`,{children:t.schedule??n(`schedule.summary`)})]}),(0,B.jsx)(`span`,{className:`personal-schedule-status is-${t.status??`active`}`,children:t.status===`paused`?n(`schedule.paused`):n(`schedule.active`)}),(0,B.jsx)(rm,{size:16})]})}function Ly({items:e,onSelect:t,selectedGoal:n}){let{t:r}=Ji();if(e.length===0)return(0,B.jsxs)(`div`,{className:`personal-timeline-empty`,children:[(0,B.jsx)(`span`,{children:(0,B.jsx)(qm,{size:20})}),(0,B.jsx)(`strong`,{children:r(n?`timeline.emptyGoal`:`timeline.emptyWorkspace`)}),(0,B.jsx)(`p`,{children:r(n?`timeline.emptyGoalDescription`:`timeline.emptyWorkspaceDescription`)})]});let i=[...e].reverse().find(e=>e.kind===`message`&&e.message.role!==`user`||e.kind===`proposal`&&[`applied`,`stale`,`error`,`gated`].includes(e.proposal.status)||e.kind===`run`&&e.run.status===`completed`),a=i?.kind===`message`?`${i.message.agentLabel??r(`header.manager`)}:${i.message.pending?r(`timeline.pending`):i.message.text}`:i?.kind===`proposal`?`${i.proposal.title}:${i.proposal.status}`:i?.kind===`run`?r(`timeline.runCompleted`,{run:i.run.title}):``,o=e.filter(e=>e.kind===`proposal`&&e.proposal.status===`gated`),s=e.filter(e=>e.kind!==`proposal`),c=e.filter(e=>e.kind===`proposal`&&e.proposal.status!==`gated`);function l(e){return e.kind===`attention`?(0,B.jsx)(Ey,{attention:e.attention,onSelect:()=>t({item:e.attention,kind:`attention`})},e.id):e.kind===`run`?(0,B.jsx)(Fy,{onSelect:()=>t({item:e.run,kind:`run`}),run:e.run},e.id):e.kind===`output`?(0,B.jsx)(Ny,{onSelect:()=>t({item:e.output,kind:`output`}),output:e.output},e.id):e.kind===`schedule`?(0,B.jsx)(Iy,{onSelect:()=>t({item:e.schedule,kind:`schedule`}),schedule:e.schedule},e.id):e.kind===`proposal`?(0,B.jsxs)(`button`,{className:`personal-proposal-row is-${e.proposal.status}`,onClick:()=>t({item:e.proposal,kind:`proposal`}),type:`button`,children:[(0,B.jsx)(`span`,{children:(0,B.jsx)(qm,{size:17})}),(0,B.jsxs)(`span`,{children:[(0,B.jsxs)(`small`,{children:[e.proposal.actionKind,` · `,e.proposal.status]}),(0,B.jsx)(`strong`,{children:e.proposal.title}),(0,B.jsx)(`p`,{children:e.proposal.impact})]}),(0,B.jsx)(`b`,{children:e.proposal.status===`gated`&&e.proposal.actionKind!==`operation.execute`?r(`timeline.review`):e.proposal.primaryLabel??r(`timeline.reviewAndConfirm`)})]},e.id):(0,B.jsxs)(`article`,{className:`personal-message is-${e.message.role}`,children:[e.message.role===`user`?null:(0,B.jsx)(`span`,{className:`personal-message-avatar`,children:(0,B.jsx)(Qp,{size:17})}),(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`strong`,{children:e.message.role===`user`?r(`common.you`):e.message.agentLabel??r(`header.manager`)}),e.message.time?(0,B.jsx)(`time`,{children:e.message.time}):null]}),e.message.attachments?.length?(0,B.jsx)(`div`,{className:`personal-message-images`,children:e.message.attachments.map(e=>(0,B.jsx)(`img`,{alt:e.name,src:e.dataUrl},e.id))}):null,e.message.role===`user`?(0,B.jsx)(`p`,{children:e.message.text}):(0,B.jsx)(My,{text:e.message.text}),e.message.pending?(0,B.jsx)(`span`,{className:`personal-message-pending`,children:r(`timeline.pending`)}):null]})]},e.id)}return(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`p`,{"aria-atomic":`true`,"aria-live":`polite`,className:`personal-live-region`,role:`status`,children:a}),(0,B.jsxs)(`div`,{className:`personal-channel-timeline`,children:[s.map(l),o.length?(0,B.jsxs)(`details`,{className:`personal-gated-summary`,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(`span`,{children:(0,B.jsx)(qm,{size:16})}),(0,B.jsx)(`strong`,{children:r(`timeline.waitingConfirmation`)}),(0,B.jsx)(`small`,{children:r(`timeline.gateHistory`,{count:o.length})})]}),(0,B.jsx)(`div`,{children:o.map(l)})]}):null,c.map(l)]})]})}function Ry({goal:e}){let{t}=Ji(),n={connected:t(`acceptance.connected`),mapped:t(`acceptance.mapped`),refreshed:t(`acceptance.refreshed`),adapter_inspected:t(`acceptance.inspected`),run_recorded:t(`acceptance.recorded`),reward_judged:t(`acceptance.judged`),operator_approved:t(`acceptance.approved`),controller_ready:t(`acceptance.ready`),attention_queue:t(`acceptance.attentionSource`),agent_vision:t(`acceptance.visionSource`),todo_projection:t(`acceptance.todoSource`),current_run:t(`acceptance.runSource`)},r=e=>n[e]??t(`acceptance.unknown`),i=e.acceptanceObservation,a=e.loadState||!i||i.goal_id!==e.goalId||i.coverage===`unavailable`;return(0,B.jsxs)(`section`,{className:`personal-detail-card personal-goal-acceptance`,"aria-label":t(`acceptance.title`),children:[(0,B.jsxs)(`div`,{className:`personal-detail-card-title`,children:[(0,B.jsx)(`h3`,{children:t(`acceptance.title`)}),(0,B.jsx)(`em`,{children:t(`common.readOnly`)})]}),(0,B.jsx)(`p`,{role:`status`,children:t(a?`acceptance.unavailable`:`acceptance.partial`)}),!a&&i?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`h4`,{children:t(`acceptance.gaps`)}),i.acceptance_gaps.length?i.acceptance_gaps.map((e,n)=>(0,B.jsxs)(`div`,{className:`personal-acceptance-observation`,children:[(0,B.jsx)(`p`,{children:e.reason??t(`acceptance.reasonUnknown`)}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`common.owner`)}),(0,B.jsx)(`dd`,{children:e.owner??t(`acceptance.unknown`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`acceptance.required`)}),(0,B.jsx)(`dd`,{children:e.evidence_required??t(`acceptance.unknown`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`acceptance.observed`)}),(0,B.jsx)(`dd`,{children:e.observed_at??t(`acceptance.unknown`)})]})]})]},`${e.kind}:${e.owner}:${n}`)):(0,B.jsx)(`p`,{children:t(`acceptance.noGaps`)}),(0,B.jsx)(`h4`,{children:t(`acceptance.guards`)}),i.guards.length?i.guards.map((e,n)=>(0,B.jsxs)(`div`,{className:`personal-acceptance-observation`,children:[(0,B.jsx)(`p`,{children:e.reason??t(`acceptance.reasonUnknown`)}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`common.owner`)}),(0,B.jsx)(`dd`,{children:e.owner??t(`acceptance.unknown`)})]}),e.blocks_agent?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`common.agent`)}),(0,B.jsx)(`dd`,{children:e.blocks_agent})]}):null,e.todo_id?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`common.task`)}),(0,B.jsx)(`dd`,{children:e.todo_id})]}):null,(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`acceptance.required`)}),(0,B.jsx)(`dd`,{children:e.evidence_required??t(`acceptance.unknown`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`acceptance.scope`)}),(0,B.jsx)(`dd`,{children:e.decision_scope??t(`acceptance.unknown`)})]})]})]},`${e.todo_id}:${n}`)):(0,B.jsx)(`p`,{children:t(`acceptance.noGuards`)}),(0,B.jsx)(`h4`,{children:t(`acceptance.next`)}),(0,B.jsx)(`p`,{children:i.next_action??t(`acceptance.unknown`)}),(0,B.jsxs)(`details`,{children:[(0,B.jsxs)(`summary`,{children:[t(`acceptance.historical_progress`),` · `,i.historical_progress.length]}),(0,B.jsx)(`p`,{children:t(`acceptance.historical`)}),i.historical_progress.map(e=>(0,B.jsxs)(`p`,{children:[(0,B.jsx)(`strong`,{children:r(e.kind)}),` · `,e.observed_at??t(`acceptance.unknown`),` `,e.evidence_refs.join(`, `)]},e.kind))]}),i.missing_sources.length?(0,B.jsxs)(`p`,{children:[t(`acceptance.missing`),` `,i.missing_sources.map(r).join(`, `)]}):null,i.truncated?(0,B.jsx)(`p`,{children:t(`acceptance.truncated`)}):null]}):null]})}function zy({item:e,successor:t,onSelect:n}){let{t:r}=Ji(),i=e.details;return(0,B.jsxs)(`section`,{className:`personal-detail-card`,"aria-label":r(`attentionDetail.title`),children:[(0,B.jsx)(`h3`,{children:r(`attentionDetail.title`)}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:r(`attentionDetail.request`)}),(0,B.jsx)(`dd`,{children:r(i?.interaction===`decision`?`attentionDetail.decision`:`attentionDetail.unknownRequest`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:r(`common.status`)}),(0,B.jsx)(`dd`,{children:r(`attentionDetail.${i?.lifecycle??`unknown`}`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:r(`drawer.reason`)}),(0,B.jsx)(`dd`,{children:i?.reason??e.explanation??r(`attentionDetail.unknownReason`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Todo`}),(0,B.jsx)(`dd`,{children:e.todoId})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:r(`attentionDetail.targetTodo`)}),(0,B.jsx)(`dd`,{children:i?.unblocksTodoId??r(`attentionDetail.notProvided`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:r(`attentionDetail.targetAgent`)}),(0,B.jsx)(`dd`,{children:i?.blocksAgent??r(`attentionDetail.notProvided`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:r(`attentionDetail.scope`)}),(0,B.jsx)(`dd`,{children:i?.decisionScope?`${i.decisionScope.kind} · ${i.decisionScope.granularity} · ${i.decisionScope.scopeKey}`:r(`attentionDetail.notProvided`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:r(`drawer.evidence`)}),(0,B.jsx)(`dd`,{children:i?.evidence??e.evidence??r(`drawer.decisionDefaultEvidence`)})]})]}),i?.supersededBy?(0,B.jsxs)(`p`,{children:[r(`attentionDetail.replacement`),`: `,i.supersededBy]}):null,t&&n?(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>n(t),type:`button`,children:r(`attentionDetail.openReplacement`)}):null,(0,B.jsx)(`p`,{children:r(`attentionDetail.boundary`)})]})}function By(e){return e.replace(/\s+/gu,` `).trim()}function Vy(e,t){let n=RegExp(`(?:不要|不需要|无需|禁止|别|暂不|do not\\b|don't\\b|without\\b).{0,10}(?:${t.source})`,`iu`),r=RegExp(`(?:${t.source}).{0,10}(?:不要|不需要|无需|禁止|关闭)`,`iu`),i=RegExp(`disable\\b.{0,10}(?:${t.source})|(?:turn|switch|set)\\b.{0,10}(?:${t.source}).{0,10}\\boff\\b|(?:${t.source})\\s+(?:is\\s+)?disabled\\b`,`iu`);return n.test(e)||r.test(e)||i.test(e)}function Hy(e){return/(我现在该做什么|下一步|哪些\s*Goal\s*在等我|需要我|谁在等我|Agent\s*在做什么|当前进度|总结(?:今天)?进展)/iu.test(e)}function Uy(e){let t=/(怎么|如何|为什么|给.*建议|分析一下|解释|只读)/u.test(e),n=/(解决一下|修复一下|处理一下|执行一下|改一下|跑(?:一下)?测试|rebase|push|提交|推送)/iu.test(e);return!t&&n&&/(帮我|请|给我|直接|现在|开始|bytedcli|codebase|git|rebase|push|提交|推送)/iu.test(e)}function Wy(e){return By(e).toLowerCase().match(/(?:^|[\s,,;;:((:]|到|至)(?todo_done:todo_[a-z0-9_-]{3,64}|pr_merged:(?:(?:[a-z0-9_.-]{1,80})\/(?:[a-z0-9_.-]{1,100}))?#[1-9][0-9]{0,8}|capacity_available:[a-z][a-z0-9_:-]{0,63}|resume_at:[1-9][0-9]{3}-[0-9]{2}-[0-9]{2}t[0-9]{2}:[0-9]{2}:[0-9]{2}(?:\.[0-9]{1,3})?(?:z|[+-][0-9]{2}:[0-9]{2}))(?=$|[\s,,。;;))])/iu)?.groups?.condition??null}function Gy(e,t){let n=By(e),r=[],i=t.agents.find(e=>{let t=n.toLowerCase();return t.includes(e.agentId.toLowerCase())||t.includes(e.label.toLowerCase())}),a=t.todos.find(e=>n.includes(e.todoId)||n.includes(e.text)),o=/(刚刚|已经|已)(?:经)?\s*(新增|创建|添加)(?:的)?\s*(todo|待办|任务)/iu.test(n),s=!!t.goalId&&!Vy(n,/heartbeat|心跳/iu)&&/(heartbeat|心跳|每天推进|持续推进|daily progress)/iu.test(n);if(!t.goalId&&!Vy(n,/goal|目标/iu)&&/(创建|新建|设置|create|start|set up).{0,24}(goal|目标)/iu.test(n)&&r.push({actionKind:`goal.create`,confidence:.97,normalizedParameters:{heartbeat_enabled:!Vy(n,/heartbeat|心跳/iu)&&/(heartbeat|心跳|每天推进|持续推进|daily progress)/iu.test(n)}}),t.goalId&&s&&r.push({actionKind:`heartbeat.bind`,confidence:.96,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&!s&&!Vy(n,/定时|监控|监测|持续观察|scheduled check|monitor/iu)&&/(定时|监控|监测|每.{0,8}(分钟|小时|天)|持续观察|scheduled check|monitor|every.{0,12}(minute|hour|day)|daily)/iu.test(n)&&r.push({actionKind:`monitor.create`,confidence:.94,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&i&&!Vy(n,/绑定|负责|接管|管理/iu)&&/((让|交给).{0,20}(管理|负责|接管).{0,8}(goal|目标)|(绑定).{0,12}(goal|目标)|(goal|目标).{0,12}(交给|绑定|负责|接管))/iu.test(n)&&r.push({actionKind:`agent.bind`,confidence:.96,normalizedParameters:{agent_id:i.agentId,goal_id:t.goalId}}),t.goalId&&!o&&!Vy(n,RegExp(`todo|待办|任务`,`iu`))&&/(创建|新建|新增|添加|加一个|记一个).{0,16}(todo|待办|任务)|(todo|待办|任务).{0,12}(创建|新建|新增|添加)|(?:create|add)(?:\s+(?:a|an|new))?\s+(?:todo|task)|(?:todo|task).{0,12}(?:create|add)/iu.test(n)&&r.push({actionKind:`todo.create`,confidence:.94,normalizedParameters:{goal_id:t.goalId}}),t.goalId&&Uy(n)&&r.push({actionKind:`todo.create`,confidence:.9,normalizedParameters:{goal_id:t.goalId,start_execution:!0}}),t.goalId&&a){let e=!Vy(n,/完成|做完|关闭/u)&&/完成|做完|关闭/u.test(n)?`complete`:!Vy(n,/阻塞|卡住/u)&&/阻塞|卡住/u.test(n)?`block`:!Vy(n,/暂缓|稍后|推迟/u)&&/暂缓|稍后|推迟/u.test(n)?`defer`:i&&!Vy(n,/交给|分配给|改派/u)&&/交给|分配给|改派/u.test(n)?`reassign`:null;if(e){let i=e===`defer`?Wy(n):null;if(e===`defer`&&!i)return{actionKind:`todo.update`,confidence:.97,missingFields:[`resume_when`],normalizedParameters:{goal_id:t.goalId,operation:e,todo_id:a.todoId},route:`clarify`};r.push({actionKind:`todo.update`,confidence:.97,normalizedParameters:{goal_id:t.goalId,operation:e,...i?{resume_when:i}:{},todo_id:a.todoId}})}}let c=[...new Map(r.map(e=>[e.actionKind,e])).values()];return c.length>1?{actionKind:null,confidence:.4,missingFields:[`single_intent`],normalizedParameters:{},route:`clarify`}:c.length===1?{...c[0],missingFields:[],route:`typed_action`}:!t.goalId&&Hy(n)?{actionKind:null,confidence:.98,missingFields:[],normalizedParameters:{},route:`projection`}:{actionKind:null,confidence:.75,missingFields:[],normalizedParameters:{},route:`agent_chat`}}function Ky(e,t,n){if(!e)return{};if(!t.trim())return{modelConfig:null};let r={model:t.trim()};return n&&(r.reasoning_effort=n),{modelConfig:r}}var qy=[`a[href]`,`button:not([disabled])`,`textarea:not([disabled])`,`select:not([disabled])`,`input:not([disabled])`,`[tabindex]:not([tabindex='-1'])`].join(`,`),Jy=[{key:`drawer.taskBlock`,operation:`block`},{key:`drawer.taskSuccessor`,operation:`successor_create`}],Yy=[{key:`drawer.decisionReject`,resolution:`reject`},{key:`drawer.decisionDefer`,resolution:`defer`}],Xy=Array.from({length:32},(e,t)=>t+1),Zy=/^[a-z][a-z0-9_.-]{0,63}$/u;function Qy(e){let t=String(e??``).trim().toLowerCase();return Zy.test(t)?t:null}function $y(e,t){return e.enabled===t.enabled&&e.maxChildren===t.maxChildren&&JSON.stringify(e.modelConfig??null)===JSON.stringify(t.modelConfig??null)&&[...e.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)===[...t.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)}function eb({agents:e,attentionHistory:t=[],onSelectAttention:n,callbacks:r,goalNotifications:i=[],goals:a=[],inspectorExpanded:o=!1,larkConnections:s=[],onClose:c,onToggleInspectorSize:l,readOnly:u=!1,runs:d=[],selection:f}){let{locale:p,t:m}=Ji(),[h,g]=(0,z.useState)(``),[_,v]=(0,z.useState)(!1),[y,b]=(0,z.useState)(`idle`),[x,S]=(0,z.useState)(`record`),[C,w]=(0,z.useState)([]),[T,E]=(0,z.useState)(null),[D,O]=(0,z.useState)(2),[ee,te]=(0,z.useState)(``),[ne,k]=(0,z.useState)(``),[A,j]=(0,z.useState)(`idle`),[M,N]=(0,z.useState)(null),[P,F]=(0,z.useState)(null),re=(0,z.useRef)(null),ie=(0,z.useRef)(null),[I,ae]=(0,z.useState)(e.find(e=>e.available)?.agentId??`codex`),[L,oe]=(0,z.useState)(``),se=(0,z.useRef)(null),ce=(0,z.useRef)(null),le=(0,z.useRef)(null),ue=(0,z.useRef)(null),de=f.kind===`run`?`run:${f.item.runId}`:f.kind===`proposal`?`proposal:${f.item.previewId}`:f.kind===`todo`?`todo:${f.item.todoId}`:f.kind===`attention`?`attention:${f.item.todoId}`:f.kind===`output`?`output:${f.item.outputId}`:f.kind===`schedule`?`schedule:${f.item.scheduleId}`:`goal:${f.item.goalId}`;(0,z.useEffect)(()=>{b(`idle`),v(!1),S(`record`),oe(``);let e=f.kind===`goal`?f.item.subagentExecution:void 0;w(e?.allowedDomains??[]),te(e?.modelConfig?.model??``),k(e?.modelConfig?.reasoning_effort??``),O(e?.maxChildren?Math.min(e.maxChildren,32):2),E(null),j(`idle`),N(null),F(null),re.current=e??null,ie.current=null},[de]);let fe=f.kind===`goal`?f.item.subagentExecution:void 0;(0,z.useEffect)(()=>{let e=re.current,t=fe?!e||!$y(e,fe):e!==null;if(re.current=fe??null,!P){t&&fe&&(w(fe.allowedDomains),te(fe.modelConfig?.model??``),k(fe.modelConfig?.reasoning_effort??``),O(fe.maxChildren||2),E(null),j(`idle`),N(null));return}let n=ie.current;(!fe||$y(P,fe)||n&&!$y(n,fe))&&(fe&&(w(fe.allowedDomains),te(fe.modelConfig?.model??``),k(fe.modelConfig?.reasoning_effort??``),O(fe.maxChildren||2)),ie.current=null,F(null))},[fe,P]),(0,z.useEffect)(()=>{let e=document.activeElement;e instanceof HTMLElement&&!ce.current?.contains(e)&&(le.current=e);let t=window.requestAnimationFrame(()=>ue.current?.focus());return()=>window.cancelAnimationFrame(t)},[de]);let pe=(0,z.useCallback)(()=>{let e=le.current;c(),window.requestAnimationFrame(()=>e?.focus())},[c]);(0,z.useEffect)(()=>{function e(e){if(e.key===`Escape`){e.preventDefault(),pe();return}if(e.key===`Tab`&&f.kind!==`todo`){let t=Array.from(ce.current?.querySelectorAll(qy)??[]).filter(e=>!e.hasAttribute(`disabled`)&&e.getAttribute(`aria-hidden`)!==`true`);if(t.length===0)return;let n=t[0],r=t[t.length-1];e.shiftKey&&document.activeElement===n?(e.preventDefault(),r.focus()):!e.shiftKey&&document.activeElement===r&&(e.preventDefault(),n.focus())}}return document.addEventListener(`keydown`,e),()=>{document.removeEventListener(`keydown`,e)}},[pe,f.kind]);let me=f.kind===`attention`?m(`drawer.titleAttention`):f.kind===`todo`?m(`drawer.taskDetails`):f.kind===`run`?m(`drawer.runDetails`):f.kind===`output`?m(`drawer.titleOutput`):f.kind===`proposal`?m(f.item.status===`applied`?`drawer.titleProposalApplied`:`drawer.titleProposalConfirm`):f.kind===`schedule`?f.item.scheduleKind===`heartbeat`?`Heartbeat`:m(`drawer.titleSchedule`):m(`drawer.goalDetails`),he=f.kind===`proposal`?f.item.goalId??`manager`:f.item.goalId,ge=f.kind===`attention`?f.item.goalTitle??m(`drawer.currentGoal`):f.kind===`todo`||f.kind===`run`?f.item.goalTitle:f.kind===`output`?f.item.goalTitle??m(`drawer.currentGoal`):f.kind===`goal`?f.item.title:f.kind===`schedule`?m(`drawer.goalAutoRun`):f.item.goalId?m(`drawer.goalChanges`):m(`drawer.managerChanges`),_e=f.kind===`goal`?d.find(e=>e.goalId===f.item.goalId&&!!e.sessionId)??d.find(e=>e.goalId===f.item.goalId):null,ve=f.kind===`run`&&(f.item.completedSteps>0||!!f.item.latestActivity||!!f.item.outputs?.length),ye=f.kind===`attention`?Zi(f.item.updatedAt,m):null,be=Wy(L);async function xe(){f.kind!==`run`||!h.trim()||(await r.onCorrectRun?.(f.item,h.trim()),g(``))}async function Se(e,t,n,i){if(t===`successor_create`){await r.onPreviewAction?.({actionKind:`todo.create`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-successor-${e.todoId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,text:m(`drawer.taskSuccessorText`,{task:e.text})},summary:m(`drawer.taskSuccessorSummary`,{task:e.text})});return}await r.onPreviewAction?.({actionKind:`todo.update`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-${e.todoId}-${t}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:e.claimedBy??I,goal_id:e.goalId,operation:t,...t===`block`?{note:m(`drawer.taskSuccessorNote`)}:{},...t===`defer`&&i?{resume_when:i}:{},todo_id:e.todoId},summary:`${n}:${e.text}`})}async function Ce(e,t,n){u||!qd(e)||await r.onPreviewAction?.({actionKind:`gate.resolve`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-decision-${e.todoId}-${t}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,decision:t,todo_id:e.todoId},summary:`${n}:${e.text}`})}let we=f.kind===`goal`?P??f.item.subagentExecution??{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0}:{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0},Te=A===`previewing`||A===`applying`,Ee=(()=>{if(f.kind!==`goal`)return[];let e=new Map;for(let t of we.allowedDomains){let n=Qy(t);n&&e.set(n,{matchingTodoCount:0,value:n})}if(we.domainCandidates)for(let t of we.domainCandidates){let n=Qy(t.domain);if(!n)continue;let r=e.get(n);e.set(n,{matchingTodoCount:(r?.matchingTodoCount??0)+t.matchingTodoCount,value:n})}else for(let t of f.item.agentTodos){if(t.done||t.taskClass!==`advancement_task`)continue;let n=Qy(t.taskDomain);if(!n)continue;let r=e.get(n);e.set(n,{matchingTodoCount:(r?.matchingTodoCount??0)+1,value:n})}return[...e.values()]})();function R(){w(we.allowedDomains),te(we.modelConfig?.model??``),k(we.modelConfig?.reasoning_effort??``),O(we.maxChildren||2),E(null),j(`idle`),N(null)}function De(){let e=[...new Set(C.map(e=>Qy(e)))];return e.every(e=>!!e)?e:null}function Oe(e,t){w(n=>t?[...n,e].filter((e,t,n)=>n.indexOf(e)===t):n.filter(t=>t!==e)),N(null),j(`idle`),E(null)}async function ke(e,t=e){if(f.kind!==`goal`||!r.onPreviewGoalSubagentConfiguration)return;let n=e?De():[];if(t&&!ee.trim()&&ne){j(`error`),E(m(`drawer.subagentModelRequired`));return}if(e&&!n){j(`error`),E(m(`drawer.subagentDomainInvalid`)),N(null);return}let i={allowedDomains:n??[],enabled:e,goalId:f.item.goalId,maxChildren:e?D:0,...Ky(t,ee,ne)};j(`previewing`),E(m(`drawer.subagentPreviewing`)),N(null);try{let e=await r.onPreviewGoalSubagentConfiguration(i);if(!e.changed){ie.current=fe??null,F({...e.configuration,domainCandidates:we.domainCandidates}),w(e.configuration.allowedDomains),te(e.configuration.modelConfig?.model??``),k(e.configuration.modelConfig?.reasoning_effort??``),O(e.configuration.maxChildren||2),j(`success`),E(m(`drawer.subagentNoChange`));return}N({...i,changed:e.changed,previewId:e.previewId}),j(`ready`),E(m(`drawer.subagentPreviewReady`))}catch(e){j(`error`),E(e instanceof Error?e.message:m(`drawer.subagentPreviewFailed`))}}async function Ae(){if(!(!M||!r.onApplyGoalSubagentConfiguration)){j(`applying`),E(m(`drawer.subagentApplying`));try{let e=await r.onApplyGoalSubagentConfiguration({allowedDomains:M.allowedDomains,enabled:M.enabled,goalId:M.goalId,maxChildren:M.maxChildren,modelConfig:M.modelConfig,previewId:M.previewId});ie.current=fe??null,F({...e,domainCandidates:we.domainCandidates}),w(e.allowedDomains),te(e.modelConfig?.model??``),k(e.modelConfig?.reasoning_effort??``),O(e.maxChildren||2),j(`success`),E(m(`drawer.subagentApplied`)),N(null);try{await r.onRefresh?.()}catch{j(`warning`),E(m(`drawer.subagentAppliedRefreshFailed`))}}catch(e){j(`error`),E(e instanceof Error?e.message:m(`drawer.subagentApplyFailed`))}}}return(0,B.jsxs)(`div`,{"aria-labelledby":`personal-drawer-title`,"aria-modal":f.kind===`todo`?void 0:`true`,className:`personal-context-drawer`,"data-context-kind":f.kind,ref:ce,role:`dialog`,children:[(0,B.jsxs)(`header`,{className:`personal-drawer-header${f.kind===`todo`?` is-task-inspector`:``}`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`h2`,{id:`personal-drawer-title`,ref:ue,tabIndex:-1,children:me}),(0,B.jsx)(`p`,{children:ge})]}),(0,B.jsxs)(`div`,{className:`personal-drawer-header-actions`,children:[f.kind===`todo`&&l?(0,B.jsx)(`button`,{"aria-label":m(o?`drawer.inspectorHalf`:`drawer.inspectorFull`),className:`personal-icon-button personal-inspector-size`,onClick:l,title:m(o?`drawer.inspectorHalfView`:`drawer.inspectorFullView`),type:`button`,children:o?(0,B.jsx)(km,{size:17}):(0,B.jsx)(Tm,{size:17})}):null,(0,B.jsxs)(`button`,{"aria-label":m(`drawer.closeDetail`,{context:ge}),className:`personal-icon-button personal-drawer-close`,onClick:pe,ref:se,type:`button`,children:[(0,B.jsx)(Kp,{className:`personal-mobile-back`,size:18}),(0,B.jsx)(eh,{className:`personal-desktop-close`,size:18})]})]})]}),(0,B.jsxs)(`div`,{className:`personal-drawer-body`,children:[f.kind===`attention`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`section`,{className:`personal-detail-card is-attention`,children:[(0,B.jsx)(`small`,{children:f.item.blocking?m(`drawer.attentionBlocking`):m(`drawer.attentionWaiting`)}),(0,B.jsx)(`h3`,{children:f.item.text}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Goal`}),(0,B.jsx)(`dd`,{children:f.item.goalTitle??f.item.goalId})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.priority`)}),(0,B.jsx)(`dd`,{children:f.item.priority??`medium`})]}),ye?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`common.waiting`)}),(0,B.jsx)(`dd`,{children:m(`tasks.waitingAge`,{age:ye})})]}):null]})]}),(0,B.jsx)(zy,{item:f.item,onSelect:n,successor:Kd(f.item,t)}),!u&&qd(f.item)?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void Ce(f.item,`approve`,m(`common.confirm`)),type:`button`,children:[(0,B.jsx)(tm,{size:17}),m(`drawer.decisionReview`)]}),(0,B.jsxs)(`details`,{className:`personal-compact-menu`,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(fm,{size:17}),m(`drawer.decisionMore`)]}),(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`button`,{onClick:()=>void r.onExplainDecision?.(f.item),type:`button`,children:[(0,B.jsx)(Dm,{size:16}),m(`drawer.explainDecision`)]}),Yy.map(e=>(0,B.jsx)(`button`,{onClick:()=>void Ce(f.item,e.resolution,m(e.key)),type:`button`,children:m(e.key)},e.resolution))]})]})]}):null]}):null,f.kind===`todo`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`section`,{className:`personal-task-inspector-summary`,children:[(0,B.jsxs)(`div`,{className:`personal-task-inspector-status`,children:[(0,B.jsxs)(`span`,{className:f.item.done?`is-done`:f.item.status===`blocked`?`is-blocked`:`is-open`,children:[(0,B.jsx)(`i`,{}),f.item.done?m(`drawer.taskStatusCompleted`):f.item.status===`deferred`?m(`drawer.taskStatusDeferred`):f.item.status===`blocked`?m(`drawer.taskStatusBlocked`):m(`drawer.taskStatusOpen`)]}),f.item.priority?(0,B.jsx)(`span`,{children:f.item.priority}):null,(0,B.jsx)(`span`,{children:f.item.taskClass===`advancement_task`?m(`drawer.taskAdvancement`):f.item.taskClass??m(`drawer.taskOrdinary`)})]}),(0,B.jsx)(`h3`,{children:f.item.text})]}),(0,B.jsxs)(`section`,{"aria-label":m(`drawer.taskInfo`),className:`personal-task-inspector-fields`,children:[(0,B.jsx)(`h4`,{children:m(`drawer.taskInfo`)}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Goal`}),(0,B.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`common.owner`)}),(0,B.jsx)(`dd`,{children:f.item.ownerLabel??f.item.claimedBy??m(`drawer.notAssigned`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`common.status`)}),(0,B.jsx)(`dd`,{children:f.item.done?m(`drawer.taskStatusCompleted`):f.item.status===`deferred`?m(`drawer.taskStatusDeferred`):f.item.status===`blocked`?m(`drawer.taskStatusBlocked`):m(`drawer.taskStatusOpen`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.priority`)}),(0,B.jsx)(`dd`,{children:f.item.priority??m(`drawer.notSet`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.dependencies`)}),(0,B.jsx)(`dd`,{children:f.item.dependencies?.join(` · `)||m(`common.none`)})]}),f.item.status===`deferred`||f.item.resumeWhen?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.resumeWhen`)}),(0,B.jsx)(`dd`,{children:f.item.resumeWhen||m(`drawer.notSet`)})]}):null,f.item.resumeWhen?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.resumeState`)}),(0,B.jsx)(`dd`,{children:f.item.resumeReady?m(`drawer.resumeReady`):m(`drawer.resumePending`)})]}):null,f.item.resumeReceiptId?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.resumeReceipt`)}),(0,B.jsx)(`dd`,{children:f.item.resumeReceiptId})]}):null,(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.nextTransition`)}),(0,B.jsx)(`dd`,{children:f.item.nextTransition??(f.item.done?m(`drawer.taskNextCompleted`):f.item.resumeReady?m(`drawer.taskNextResumeReady`):f.item.status===`deferred`?m(`drawer.taskNextDeferred`):m(`drawer.taskNextOpen`))})]})]})]}),!u&&!f.item.done?(0,B.jsxs)(`div`,{className:`personal-task-inspector-actions`,"aria-label":m(`drawer.taskActions`),children:[(0,B.jsxs)(`details`,{className:`personal-task-management`,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(fm,{size:16}),m(`drawer.taskManage`)]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:m(`drawer.reassign`)}),(0,B.jsxs)(`label`,{className:`personal-inline-agent-select`,children:[m(`drawer.reassign`),(0,B.jsx)(`select`,{"aria-label":m(`drawer.reassign`),onChange:e=>ae(e.target.value),value:I,children:e.filter(e=>e.available).map(e=>(0,B.jsx)(`option`,{value:e.agentId,children:e.label},e.agentId))}),(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onPreviewAction?.({actionKind:`todo.update`,context:{goal_id:f.item.goalId,kind:`todo`,todo_id:f.item.todoId},idempotencyKey:`workspace-todo-${f.item.todoId}-reassign-${I}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:I,goal_id:f.item.goalId,operation:`reassign`,todo_id:f.item.todoId},summary:m(`drawer.reassignSummary`,{task:f.item.text})}),type:`button`,children:m(`timeline.review`)})]}),(0,B.jsx)(`strong`,{children:m(`drawer.taskDeferUntil`)}),(0,B.jsxs)(`label`,{className:`personal-inline-agent-select personal-inline-resume-when`,children:[m(`drawer.taskDeferUntil`),(0,B.jsx)(`input`,{"aria-label":m(`drawer.taskDeferCondition`),"aria-invalid":!!L.trim()&&!be,onChange:e=>oe(e.target.value),placeholder:m(`drawer.taskDeferPlaceholder`),value:L}),(0,B.jsx)(`button`,{className:`personal-secondary-action`,disabled:!be,onClick:()=>void Se(f.item,`defer`,m(`drawer.taskDefer`),be??void 0),type:`button`,children:m(`drawer.taskDeferReview`)}),(0,B.jsx)(`small`,{children:L.trim()&&!be?m(`drawer.taskDeferInvalid`):m(`drawer.taskDeferSupported`)})]}),(0,B.jsx)(`div`,{className:`personal-task-management-secondary`,children:Jy.map(e=>(0,B.jsx)(`button`,{onClick:()=>void Se(f.item,e.operation,m(e.key)),type:`button`,children:m(e.key)},e.operation))})]})]}),(0,B.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void Se(f.item,`complete`,m(`drawer.taskComplete`)),type:`button`,children:[(0,B.jsx)(tm,{size:17}),m(`drawer.taskComplete`)]})]}):null,f.item.done?(0,B.jsxs)(`div`,{className:`personal-task-completed-note`,children:[(0,B.jsx)(tm,{size:16}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:m(`drawer.taskCompletedTitle`)}),(0,B.jsx)(`small`,{children:m(`drawer.taskCompletedNote`)})]})]}):null]}):null,f.kind===`goal`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,B.jsx)(`small`,{children:Yi(f.item.state,p)}),(0,B.jsx)(`h3`,{children:f.item.title}),(0,B.jsx)(`p`,{children:f.item.agentSentence}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.tokens`)}),(0,B.jsxs)(`dd`,{children:[xy(f.item.usage?.tokens24h,m(`drawer.usageNotMeasured`),vy),` / `,xy(f.item.usage?.tokens7d,m(`drawer.usageNotMeasured`),vy)]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.cost`)}),(0,B.jsxs)(`dd`,{children:[xy(f.item.usage?.costUsd24h,m(`drawer.usageNotMeasured`),yy),` / `,xy(f.item.usage?.costUsd7d,m(`drawer.usageNotMeasured`),yy)]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.duration`)}),(0,B.jsxs)(`dd`,{children:[xy(f.item.usage?.durationMs24h,m(`drawer.usageNotMeasured`),by),` / `,xy(f.item.usage?.durationMs7d,m(`drawer.usageNotMeasured`),by)]})]})]})]}),(0,B.jsx)(Ry,{goal:f.item}),(()=>{let e=i.find(e=>e.goalId===f.item.goalId),t=s.find(e=>e.goal_id===f.item.goalId);return(0,B.jsxs)(B.Fragment,{children:[f.item.repository?(0,B.jsxs)(`section`,{className:`personal-detail-card personal-goal-repository`,children:[(0,B.jsxs)(`div`,{className:`personal-detail-card-title`,children:[(0,B.jsx)(`small`,{children:m(`drawer.repository`)}),(0,B.jsx)(`em`,{children:m(`common.readOnly`)})]}),(0,B.jsxs)(`h3`,{children:[(0,B.jsx)(vm,{size:16}),f.item.repository.label]}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.branch`)}),(0,B.jsx)(`dd`,{children:f.item.repository.branch||`detached`})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Role`}),(0,B.jsx)(`dd`,{children:m(`drawer.repositoryRole`)})]})]}),(0,B.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>{let e=navigator.clipboard?.writeText(f.item.repository?.identity??``);if(!e){b(`error`);return}e.then(()=>b(`copied`)).catch(()=>b(`error`))},type:`button`,children:[(0,B.jsx)(lm,{size:15}),m(y===`copied`?`drawer.copyRepositoryDone`:`drawer.copyRepository`)]}),y===`error`?(0,B.jsx)(`p`,{className:`personal-copy-feedback is-error`,role:`status`,children:m(`drawer.copyRepositoryError`)}):y===`copied`?(0,B.jsx)(`p`,{className:`personal-copy-feedback`,role:`status`,children:m(`drawer.copyRepositorySuccess`)}):null]}):null,u?(0,B.jsxs)(`section`,{className:`personal-detail-card personal-goal-notification`,children:[(0,B.jsx)(`small`,{children:m(`drawer.larkConnection`)}),(0,B.jsx)(`h3`,{children:m(`drawer.remoteDetailsUnavailable`)}),(0,B.jsx)(`p`,{children:m(`drawer.remoteDetailsDescription`)})]}):(0,B.jsxs)(`section`,{className:`personal-detail-card personal-goal-notification`,children:[(0,B.jsx)(`small`,{children:m(`drawer.larkConnection`)}),t?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`h3`,{children:[t.app_label,(0,B.jsx)(`span`,{className:`personal-connection-status`,children:m(`drawer.connected`)})]}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.group`)}),(0,B.jsx)(`dd`,{children:t.chat_name})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.topic`)}),(0,B.jsxs)(`dd`,{children:[`# `,t.topic_name]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.trigger`)}),(0,B.jsx)(`dd`,{children:t.incoming_mode===`mentions`?m(`lark.someoneMentions`):m(`lark.allMessages`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.replyMode`)}),(0,B.jsx)(`dd`,{children:m(`lark.topicReply`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.autoNotify`)}),(0,B.jsx)(`dd`,{children:e?.humanGateAutoNotifyEnabled?m(`common.on`):m(`common.off`)})]}),e?.lastNotifiedAt?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.lastNotification`)}),(0,B.jsx)(`dd`,{children:e.lastNotifiedAt})]}):null]})]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`h3`,{children:m(`drawer.larkNotConfigured`)}),(0,B.jsx)(`p`,{children:m(`drawer.larkNotConfiguredDescription`)})]}),(0,B.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onOpenNotificationSettings?.(f.item.goalId),type:`button`,children:[(0,B.jsx)(Zp,{size:16}),m(t?`drawer.larkConfigure`:`drawer.larkConnect`)]})]})]})})(),(0,B.jsxs)(`section`,{className:`personal-detail-card personal-goal-session`,children:[(0,B.jsx)(`small`,{children:m(`drawer.runDetails`)}),_e?.sessionId?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`h3`,{children:Xi(_e.sessionStatus??_e.status,m)}),(0,B.jsx)(`p`,{children:_e.title}),r.onOpenRunSession?(0,B.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onOpenRunSession?.(_e),type:`button`,children:[(0,B.jsx)(Pm,{size:16}),m(`drawer.runLatest`)]}):null]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`h3`,{children:m(`drawer.noRun`)}),(0,B.jsx)(`p`,{children:m(`drawer.noRunDescription`)})]})]}),u?null:(0,B.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,B.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onRequestScheduleConfig?.(`heartbeat`,f.item.goalId),type:`button`,children:[(0,B.jsx)(Im,{size:16}),m(`drawer.setupHeartbeat`)]}),(0,B.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onRequestScheduleConfig?.(`monitor`,f.item.goalId),type:`button`,children:[(0,B.jsx)(em,{size:16}),m(`drawer.scheduleAdd`)]})]}),f.item.subagentExecution?(0,B.jsxs)(`section`,{className:`personal-detail-card personal-goal-subagents`,children:[(0,B.jsxs)(`div`,{className:`personal-subagent-heading`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`small`,{children:m(`drawer.subagentLabel`)}),(0,B.jsxs)(`h3`,{children:[(0,B.jsx)(Qp,{size:16}),m(`drawer.subagentTitle`)]})]}),(0,B.jsxs)(`button`,{"aria-checked":we.enabled,"aria-label":m(M&&A===`ready`?`drawer.subagentPending`:we.enabled?`drawer.subagentDisable`:`drawer.subagentEnable`),className:`personal-subagent-switch`,"data-pending":M&&A===`ready`?`true`:void 0,disabled:u||Te||!!M||!r.onPreviewGoalSubagentConfiguration,onClick:()=>void ke(!we.enabled),role:`switch`,type:`button`,children:[(0,B.jsx)(`span`,{}),m(M&&A===`ready`?`drawer.subagentPending`:we.enabled?`common.on`:`common.off`)]})]}),(0,B.jsx)(`p`,{children:m(`drawer.subagentDescription`)}),M&&A===`ready`?(0,B.jsxs)(`div`,{className:`personal-subagent-preview`,children:[(0,B.jsx)(`strong`,{children:m(M.enabled?`drawer.subagentConfirmEnable`:`drawer.subagentConfirmDisable`)}),(0,B.jsx)(`p`,{children:M.enabled?m(`drawer.subagentPreviewSummary`,{count:M.maxChildren,domains:M.allowedDomains.join(` · `)||m(`drawer.subagentDomainsUnrestricted`)}):m(`drawer.subagentDisableSummary`)}),M.modelConfig===void 0?null:(0,B.jsxs)(`p`,{children:[m(`drawer.subagentModel`),`: `,M.modelConfig?.model||m(`drawer.subagentModelDefault`),` · `,M.modelConfig?.reasoning_effort||m(`drawer.subagentModelDefault`)]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`button`,{className:`personal-primary-action`,onClick:()=>void Ae(),type:`button`,children:m(`common.confirm`)}),(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:R,type:`button`,children:m(`common.cancel`)})]})]}):null,T?(0,B.jsxs)(`p`,{className:`personal-subagent-feedback is-${A}`,role:`status`,children:[A===`previewing`||A===`applying`?(0,B.jsx)(Rm,{className:`personal-spin`,size:13}):null,T]}):null,(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.subagentModel`)}),(0,B.jsx)(`dd`,{children:we.modelConfig?.model||m(`drawer.subagentModelDefault`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.subagentEffort`)}),(0,B.jsx)(`dd`,{children:we.modelConfig?.reasoning_effort||m(`drawer.subagentModelDefault`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.subagentCurrentBoundary`)}),(0,B.jsx)(`dd`,{children:we.allowedDomains.join(` · `)||m(`drawer.subagentDomainsUnrestricted`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.subagentChildLimit`)}),(0,B.jsx)(`dd`,{children:we.maxChildren||0})]})]}),u?(0,B.jsx)(`p`,{className:`personal-subagent-read-only`,children:m(`drawer.subagentRemoteReadOnly`)}):(0,B.jsxs)(`div`,{className:`personal-subagent-fields`,children:[(0,B.jsxs)(`fieldset`,{className:`personal-subagent-domain-picker`,disabled:Te,children:[(0,B.jsx)(`legend`,{children:m(`drawer.subagentDomains`)}),Ee.length>0?(0,B.jsx)(`div`,{className:`personal-subagent-domain-options`,children:Ee.map(e=>{let t=C.includes(e.value);return(0,B.jsxs)(`label`,{className:`personal-subagent-domain-option${t?` is-selected`:``}`,children:[(0,B.jsx)(`input`,{"aria-label":e.value,checked:t,onChange:t=>Oe(e.value,t.target.checked),type:`checkbox`}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:e.value}),(0,B.jsx)(`small`,{children:m(`drawer.subagentDomainTodoCount`,{count:e.matchingTodoCount})})]})]},e.value)})}):(0,B.jsx)(`p`,{className:`personal-subagent-domain-empty`,children:m(`drawer.subagentDomainsEmpty`)}),(0,B.jsx)(`small`,{children:m(`drawer.subagentDomainsHint`)})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:m(`drawer.subagentModel`)}),(0,B.jsx)(`input`,{"aria-label":m(`drawer.subagentModel`),disabled:Te,value:ee,placeholder:`gpt-5.6-luna`,onChange:e=>{te(e.target.value),N(null),j(`idle`),E(null)}})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:m(`drawer.subagentEffort`)}),(0,B.jsxs)(`select`,{"aria-label":m(`drawer.subagentEffort`),disabled:Te,value:ne,onChange:e=>{k(e.target.value),N(null),j(`idle`),E(null)},children:[(0,B.jsx)(`option`,{value:``,children:m(`drawer.subagentModelDefault`)}),[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`,`ultra`].map(e=>(0,B.jsx)(`option`,{value:e,children:e},e))]})]}),(0,B.jsx)(`button`,{className:`personal-secondary-action`,disabled:Te,type:`button`,onClick:()=>{te(`gpt-5.6-luna`),k(`max`),N(null),j(`idle`),E(null)},children:m(`drawer.subagentLunaPreset`)}),(0,B.jsx)(`button`,{className:`personal-secondary-action`,disabled:Te,type:`button`,onClick:()=>{te(``),k(``),N(null),j(`idle`),E(null)},children:m(`drawer.subagentClearModel`)}),(0,B.jsx)(`p`,{children:m(`drawer.subagentModelHint`)}),(0,B.jsxs)(`label`,{className:`personal-subagent-limit-field`,children:[(0,B.jsx)(`span`,{children:m(`drawer.subagentMaxChildren`)}),(0,B.jsx)(`select`,{"aria-label":m(`drawer.subagentMaxChildren`),disabled:Te,onChange:e=>{O(Number(e.target.value)),N(null),j(`idle`),E(null)},value:D,children:Xy.map(e=>(0,B.jsx)(`option`,{value:e,children:e},e))})]}),(0,B.jsx)(`button`,{className:`personal-secondary-action`,disabled:Te,onClick:()=>void ke(we.enabled,!0),type:`button`,children:m(`drawer.subagentPreviewBoundary`)})]})]}):null]}):null,f.kind===`run`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`div`,{"aria-label":m(`drawer.runView`),className:`personal-run-drawer-tabs`,role:`tablist`,children:[(0,B.jsx)(`button`,{"aria-selected":x===`record`,onClick:()=>S(`record`),role:`tab`,type:`button`,children:m(`drawer.executionRecordAndResult`)}),(0,B.jsx)(`button`,{"aria-selected":x===`details`,onClick:()=>S(`details`),role:`tab`,type:`button`,children:m(`drawer.detailsAndActions`)})]}),x===`record`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`section`,{className:`personal-detail-card personal-session-summary`,children:[(0,B.jsxs)(`small`,{children:[f.item.agentLabel,` · `,Xi(f.item.sessionStatus??f.item.status,m)]}),(0,B.jsx)(`h3`,{children:f.item.title}),(0,B.jsx)(`p`,{children:f.item.latestActivity}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Goal`}),(0,B.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.progress`)}),(0,B.jsxs)(`dd`,{children:[f.item.completedSteps,`/`,f.item.totalSteps]})]})]})]}),(0,B.jsxs)(`section`,{"aria-label":m(`drawer.executionRecord`),className:`personal-session-message-record`,children:[(0,B.jsx)(`h3`,{children:m(`drawer.executionRecord`)}),f.item.sessionMessages?.length?(0,B.jsx)(`ol`,{children:f.item.sessionMessages.map(e=>(0,B.jsxs)(`li`,{className:`is-${e.role}`,children:[(0,B.jsx)(`i`,{}),(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`strong`,{children:e.role===`user`?m(`drawer.runRoleUser`):e.role===`assistant`?m(`drawer.runRoleAssistant`):m(`drawer.runRoleSystem`)}),e.createdAt?(0,B.jsx)(`time`,{children:new Date(e.createdAt).toLocaleTimeString(p,{hour:`2-digit`,minute:`2-digit`,hour12:!1})}):null]}),(0,B.jsx)(`p`,{children:e.text})]})]},e.messageId))}):(0,B.jsx)(`p`,{className:`personal-session-empty`,children:ve?m(`drawer.runRecordProjected`,{completed:f.item.completedSteps,outputs:f.item.outputs?.length?m(`drawer.runRecordProjectedOutputs`,{count:f.item.outputs.length}):``,total:f.item.totalSteps}):m(`drawer.runRecordEmpty`)}),f.item.status===`running`?(0,B.jsxs)(`div`,{className:`personal-session-active-step`,children:[(0,B.jsx)(`i`,{}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:m(`drawer.analysis`)}),(0,B.jsx)(`small`,{children:m(`drawer.agentWorking`)})]})]}):null]}),f.item.outputs?.length?(0,B.jsxs)(`section`,{className:`personal-execution-history`,"aria-labelledby":`personal-run-outputs-title`,children:[(0,B.jsx)(`h3`,{id:`personal-run-outputs-title`,children:m(`drawer.outputs`)}),(0,B.jsx)(`ol`,{children:f.item.outputs.map(e=>(0,B.jsx)(`li`,{children:(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:e.title}),(0,B.jsx)(`small`,{children:e.createdAt??e.kind??m(`files.emptySummary`)})]})},e.outputId))})]}):null]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,B.jsxs)(`small`,{children:[f.item.agentLabel,` · `,Xi(f.item.status,m)]}),(0,B.jsx)(`h3`,{children:f.item.title}),(0,B.jsx)(`p`,{children:f.item.latestActivity}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Goal`}),(0,B.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.progress`)}),(0,B.jsxs)(`dd`,{children:[f.item.completedSteps,`/`,f.item.totalSteps]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.sessionStatus`)}),(0,B.jsx)(`dd`,{children:Xi(f.item.sessionStatus??f.item.status,m)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.sessionRecoverable`)}),(0,B.jsx)(`dd`,{children:f.item.resumable===!1?m(`drawer.resumeNo`):m(`drawer.resumeYes`)})]})]})]}),f.item.sessionStatus===`resume_failed`&&!u?(0,B.jsxs)(`section`,{className:`personal-recovery-panel`,"aria-label":m(`drawer.recoveryFailed`),children:[(0,B.jsx)(`strong`,{children:m(`drawer.recoveryFailed`)}),(0,B.jsx)(`p`,{children:m(`drawer.recoveryDescription`)}),(0,B.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onRetryResumeRun?.(f.item),type:`button`,children:[(0,B.jsx)(Rm,{size:16}),m(`drawer.recoveryRetry`)]}),(0,B.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onStartNewRunSession?.(f.item),type:`button`,children:[(0,B.jsx)(Pm,{size:16}),m(`drawer.recoveryNewSession`)]})]}):null,u?null:(0,B.jsxs)(`section`,{className:`personal-correction-panel`,children:[(0,B.jsx)(`header`,{children:(0,B.jsxs)(`span`,{children:[(0,B.jsx)(Qp,{size:16}),m(`drawer.correctionLabel`,{agent:f.item.agentLabel})]})}),(0,B.jsx)(`p`,{children:m(`drawer.correctionDescription`)}),(0,B.jsxs)(`div`,{className:`personal-correction-composer`,children:[(0,B.jsx)(`textarea`,{"aria-label":m(`drawer.correctionTextarea`,{agent:f.item.agentLabel,goal:f.item.goalTitle,run:f.item.title}),onChange:e=>g(e.target.value),placeholder:m(`drawer.correctionPlaceholder`),rows:3,value:h}),(0,B.jsx)(`button`,{"aria-label":m(`drawer.correctionSend`),disabled:!h.trim(),onClick:()=>void xe(),type:`button`,children:(0,B.jsx)(Vm,{size:16})})]})]}),u?null:(0,B.jsxs)(`details`,{className:`personal-compact-menu personal-run-more`,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(fm,{size:17}),m(`drawer.moreRunActions`)]}),(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`button`,{disabled:!f.item.canInterrupt,onClick:()=>void r.onInterruptRun?.(f.item),type:`button`,children:[(0,B.jsx)(Nm,{size:16}),m(`drawer.runInterrupt`)]}),(0,B.jsxs)(`button`,{disabled:f.item.resumable===!1,onClick:()=>void r.onRetryResumeRun?.(f.item),type:`button`,children:[(0,B.jsx)(Rm,{size:16}),m(`drawer.recoveryRetry`)]}),(0,B.jsxs)(`button`,{onClick:()=>void r.onStartNewRunSession?.(f.item),type:`button`,children:[(0,B.jsx)(Pm,{size:16}),m(`drawer.runNewSession`)]}),(0,B.jsxs)(`button`,{onClick:()=>void r.onCloseRunSession?.(f.item),type:`button`,children:[(0,B.jsx)(Jm,{size:16}),m(`drawer.runCloseSession`)]})]})]})]})]}):null,f.kind===`output`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,B.jsx)(`small`,{children:f.item.kind??`output`}),(0,B.jsx)(`h3`,{children:f.item.title}),(0,B.jsx)(`p`,{children:f.item.summary??m(`drawer.outputRecorded`)}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Goal`}),(0,B.jsx)(`dd`,{children:f.item.goalTitle??f.item.goalId})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.outputTodo`)}),(0,B.jsx)(`dd`,{children:f.item.todoId??m(`drawer.notLinked`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.outputRun`)}),(0,B.jsx)(`dd`,{children:f.item.runId??m(`drawer.notLinked`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Agent`}),(0,B.jsx)(`dd`,{children:f.item.agentLabel??f.item.agentId??`LoopX`})]})]})]}),f.item.report?(0,B.jsxs)(`section`,{className:`personal-report-detail`,"data-testid":`personal-periodic-report-detail`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsxs)(`span`,{children:[(0,B.jsxs)(`strong`,{children:[`+`,f.item.report.addedCount]}),m(`files.reportAdded`)]}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:f.item.report.changedCount}),m(`files.reportChanged`)]})]}),(0,B.jsxs)(`p`,{children:[f.item.report.periodStartAt,` → `,f.item.report.periodEndAt]}),(0,B.jsx)(`ol`,{children:f.item.report.items.map(e=>(0,B.jsxs)(`li`,{"data-change-kind":e.changeKind,children:[(0,B.jsxs)(`small`,{children:[e.changeKind,` · `,e.status]}),(0,B.jsx)(`strong`,{children:e.title}),(0,B.jsx)(`p`,{children:e.summary})]},e.sourceRef))}),(0,B.jsxs)(`footer`,{children:[(0,B.jsxs)(`span`,{children:[m(`files.reportPublication`),`: `,f.item.report.publicationId]}),(0,B.jsxs)(`span`,{children:[m(`files.reportGeneration`),`: `,f.item.report.generationId]})]})]}):null,f.item.safePreview?(0,B.jsx)(`pre`,{"aria-label":m(`drawer.outputSafePreview`),className:`personal-safe-preview`,children:f.item.safePreview}):(0,B.jsx)(`p`,{className:`personal-preview-unavailable`,children:m(`drawer.previewUnavailable`)}),(0,B.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,B.jsxs)(`button`,{className:`personal-primary-action`,disabled:!r.onOpenOutput,onClick:()=>{r.onOpenOutput?.(f.item),c()},type:`button`,children:[(0,B.jsx)(pm,{size:16}),m(`files.openConversation`)]}),(0,B.jsxs)(`button`,{className:`personal-secondary-action`,disabled:!r.onExportOutput,onClick:()=>void r.onExportOutput?.(f.item),type:`button`,children:[(0,B.jsx)(dm,{size:16}),m(`files.exportSummary`)]})]})]}):null,f.kind===`proposal`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`section`,{className:`personal-proposal-card`,children:[(0,B.jsxs)(`small`,{children:[f.item.actionKind,` · `,f.item.status]}),(0,B.jsx)(`h3`,{children:f.item.title}),(0,B.jsx)(`p`,{children:f.item.impact}),f.item.reviewPlan?(0,B.jsx)(`p`,{className:`personal-proposal-explainer`,"data-action-review":f.item.reviewPlan.interaction,children:f.item.actionKind===`operation.execute`&&f.item.status===`gated`?m(`actionReview.operation_group_confirmation`):f.item.actionKind===`operation.execute`&&f.item.reviewPlan.reason===`readback_unverified`?m(`actionReview.operation_result_delivery_pending`):m(`actionReview.${f.item.reviewPlan.reason}`)}):null,f.item.status===`ready`?(0,B.jsx)(`p`,{className:`personal-proposal-explainer`,children:m(`drawer.proposalExplainer`)}):null,(0,B.jsx)(`dl`,{children:f.item.fields.map(e=>(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:e.label}),(0,B.jsx)(`dd`,{children:e.value})]},e.key))})]}),f.item.status===`applied`?(0,B.jsxs)(`p`,{className:`personal-proposal-state ${f.item.actionKind===`operation.execute`&&f.item.reviewPlan?.reason===`readback_unverified`?`is-gated`:`is-applied`}`,children:[(0,B.jsx)(tm,{size:16}),f.item.actionKind===`operation.execute`?f.item.primaryLabel:m(`drawer.proposalApplied`)]}):null,f.item.status===`applied`&&f.item.actionKind!==`operation.execute`&&f.item.goalId?(0,B.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>{let e=f.item.goalId;c(),r.onOpenGoal?.(e)},type:`button`,children:[(0,B.jsx)(pm,{size:16}),f.item.actionKind===`goal.create`?m(`drawer.proposalEnterGoal`):m(`drawer.proposalViewGoal`)]}):null,f.item.status===`stale`?(0,B.jsx)(`p`,{className:`personal-proposal-state is-stale`,children:m(`drawer.proposalStale`)}):null,f.item.status===`error`?(0,B.jsxs)(`div`,{className:`personal-proposal-state is-error`,children:[(0,B.jsx)(`span`,{children:f.item.reviewPlan?.reason===`readback_unverified`?m(`actionReview.readback_unverified`):m(`drawer.proposalApplyFailed`)}),f.item.errorMessage?(0,B.jsx)(`small`,{children:f.item.errorMessage}):null,(0,B.jsx)(`small`,{children:m(`drawer.proposalApplyFailedHint`)})]}):null,f.item.status===`rejected`?(0,B.jsx)(`p`,{className:`personal-proposal-state is-error`,children:m(`drawer.proposalRejected`)}):null,f.item.status===`deferred`?(0,B.jsx)(`p`,{className:`personal-proposal-state is-gated`,children:m(`drawer.proposalDeferred`)}):null,f.item.status===`gated`?(0,B.jsxs)(`div`,{className:`personal-proposal-state is-gated`,children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:f.item.actionKind===`operation.execute`?f.item.primaryLabel:f.item.workspaceCandidates?.length?f.item.title:m(`drawer.gateRequiresHost`)}),f.item.actionKind===`operation.execute`||f.item.workspaceCandidates?.length?f.item.impact:m(`drawer.gateRequiresHostDescription`)]}),f.item.gate?.nextAction?(0,B.jsx)(`small`,{children:f.item.gate.nextAction}):null]}):null,f.item.status===`gated`&&f.item.actionKind===`gate.resolve`?(()=>{let e=e=>f.item.fields.find(t=>t.key===e)?.value,t=e(`goal_id`),n=e(`todo_id`);return!t||!n?null:(0,B.jsxs)(`section`,{className:`personal-detail-card personal-gate-cli-hint`,children:[(0,B.jsx)(`small`,{children:m(`drawer.gateApproveHint`)}),(0,B.jsxs)(`code`,{children:[`loopx todo complete --goal-id `,t,` --todo-id `,n,` --decision-outcome approve`]}),(0,B.jsx)(`small`,{children:m(`drawer.gateRejectHint`)})]})})():null,!u&&f.item.workspaceCandidates?.length?(0,B.jsx)(`div`,{className:`personal-workspace-candidates`,"aria-label":m(`drawer.workspaceCandidates`),children:f.item.workspaceCandidates.map(e=>(0,B.jsxs)(`button`,{onClick:()=>void r.onSelectWorkspaceCandidate?.(f.item,e.workspaceRef),type:`button`,children:[(0,B.jsx)(`strong`,{children:e.label}),(0,B.jsx)(`small`,{children:e.workspaceRef})]},e.workspaceRef))}):null,!u&&f.item.actionKind!==`operation.execute`&&f.item.status===`error`?(0,B.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`regenerate`),type:`button`,children:[(0,B.jsx)(Rm,{size:17}),m(`drawer.proposalRegenerate`)]}):!u&&f.item.actionKind!==`operation.execute`&&f.item.status!==`gated`?(0,B.jsxs)(`button`,{className:`personal-primary-action`,disabled:![`ready`,`deferred`].includes(f.item.status)||f.item.reviewPlan?.canApply===!1,onClick:()=>void r.onApplyProposal?.(f.item),type:`button`,children:[(0,B.jsx)(tm,{size:17}),f.item.status===`applying`?m(`drawer.applying`):f.item.primaryLabel??m(`drawer.apply`)]}):null,!u&&f.item.actionKind!==`operation.execute`&&([`stale`,`gated`,`rejected`].includes(f.item.status)||f.item.status===`ready`&&f.item.reviewPlan?.canApply===!1)?(0,B.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`regenerate`),type:`button`,children:[(0,B.jsx)(Rm,{size:16}),m(`drawer.proposalRecheck`)]}):null,!u&&f.item.actionKind!==`operation.execute`&&[`ready`,`gated`].includes(f.item.status)?(0,B.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`defer`),type:`button`,children:m(`drawer.proposalDefer`)}),(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`reject`),type:`button`,children:m(`drawer.decisionReject`)})]}):null,[`applied`,`applying`].includes(f.item.status)?null:(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:c,type:`button`,children:m(`drawer.proposalClose`)})]}):null,f.kind===`schedule`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,B.jsxs)(`small`,{children:[f.item.scheduleKind===`heartbeat`?`Goal Heartbeat`:`continuous_monitor`,` · `,f.item.status??`active`]}),(0,B.jsx)(`h3`,{children:f.item.label}),(0,B.jsx)(`p`,{children:f.item.target??f.item.schedule??m(`drawer.scheduleDefaultTarget`)}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.scheduleTimezone`)}),(0,B.jsx)(`dd`,{children:f.item.timezone??m(`drawer.scheduleLocalTimezone`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.scheduleNext`)}),(0,B.jsx)(`dd`,{children:f.item.nextRunAt??m(`drawer.schedulePending`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.scheduleLast`)}),(0,B.jsx)(`dd`,{children:f.item.previousRunAt??m(`drawer.scheduleNeverRun`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.scheduleNotification`)}),(0,B.jsx)(`dd`,{children:f.item.notificationRule??m(`drawer.scheduleDefaultNotification`)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:m(`drawer.scheduleStopCondition`)}),(0,B.jsx)(`dd`,{children:f.item.stopCondition??m(`drawer.scheduleDefaultStop`)})]})]})]}),!u&&f.item.scheduleKind===`monitor`?(0,B.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`run_now`),type:`button`,children:[(0,B.jsx)(Pm,{size:16}),m(`drawer.scheduleRunNow`)]}):null,u?null:(0,B.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,B.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,f.item.status===`paused`?`resume`:`pause`),type:`button`,children:[f.item.status===`paused`?(0,B.jsx)(Pm,{size:16}):(0,B.jsx)(Nm,{size:16}),f.item.status===`paused`?m(`drawer.scheduleResume`):m(`drawer.schedulePause`)]}),(0,B.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`edit`),type:`button`,children:[(0,B.jsx)(em,{size:16}),m(`drawer.scheduleEdit`)]})]}),u?null:(0,B.jsxs)(`button`,{className:`personal-danger-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`stop`),type:`button`,children:[(0,B.jsx)(Jm,{size:16}),m(`drawer.scheduleStop`,{kind:f.item.scheduleKind===`heartbeat`?` Heartbeat`:m(`drawer.titleSchedule`)})]}),(0,B.jsxs)(`section`,{className:`personal-execution-history`,"aria-labelledby":`personal-execution-history-title`,children:[(0,B.jsx)(`h3`,{id:`personal-execution-history-title`,children:m(`drawer.executionHistory`)}),f.item.executionHistory?.length?(0,B.jsx)(`ol`,{children:f.item.executionHistory.map((e,t)=>(0,B.jsxs)(`li`,{children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:e.label}),(0,B.jsx)(`small`,{children:e.timestamp})]}),(0,B.jsx)(`em`,{className:`is-${e.status}`,children:e.status})]},`${e.timestamp}:${e.runId??t}`))}):(0,B.jsx)(`p`,{children:m(`drawer.noExecutionHistory`)})]})]}):null,f.kind===`run`||f.kind===`proposal`||f.kind===`schedule`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`button`,{"aria-expanded":_,className:`personal-diagnostics-trigger`,onClick:()=>v(e=>!e),type:`button`,children:[(0,B.jsx)(`span`,{children:m(`drawer.advancedDiagnostics`)}),(0,B.jsx)(nm,{className:_?`is-open`:``,size:16})]}),_?(0,B.jsxs)(`div`,{className:`personal-diagnostics`,children:[(0,B.jsxs)(`code`,{children:[`goal_id: `,he]}),(0,B.jsxs)(`code`,{children:[`kind: `,f.kind]}),f.kind===`run`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`code`,{children:[`session_id: `,f.item.sessionId??m(`drawer.notLinked`)]}),(0,B.jsxs)(`code`,{children:[`turn_id: `,f.item.turnId??m(`common.none`)]}),(0,B.jsxs)(`code`,{children:[`adapter: `,f.item.agentId]}),(0,B.jsxs)(`code`,{children:[`status: `,f.item.sessionStatus??f.item.status]})]}):f.kind===`proposal`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`code`,{children:[`action: `,f.item.actionKind]}),(0,B.jsxs)(`code`,{children:[`status: `,f.item.status]})]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`code`,{children:[`schedule_id: `,f.item.scheduleId]}),(0,B.jsxs)(`code`,{children:[`status: `,f.item.status??`active`]})]})]}):null]}):null]})]})}var tb=[`checking`,`connecting`,`downloading`,`installing_app`,`installing_runtime`],nb={desktop_status_unavailable:[`无法读取 App 更新状态。请重启 App 后再试;若仍失败,请重新安装最新 App。`,`Cannot read the App update status. Restart the App; if this persists, reinstall the latest App.`],update_feed_unavailable:[`此通道的更新源尚未就绪或暂时不可用。可稍后重新检查,当前版本仍可继续使用。`,`This channel's update feed is not ready or temporarily unavailable. Check again later; you can keep using this version.`],update_feed_invalid:[`更新源格式异常。请稍后重新检查。`,`The update feed is invalid. Check again later.`],update_platform_unavailable:[`此通道尚无适用于本机的更新包。`,`This channel has no update package for this platform.`],update_check_timeout:[`检查更新超时。请稍后重试。`,`The update check timed out. Try again later.`],update_network_failed:[`无法连接更新服务器。请检查网络后重试。`,`Cannot reach the update server. Check your connection and retry.`],update_download_or_signature_failed:[`更新包下载或签名校验失败,尚未安装。请重新检查更新。`,`Download or signature verification failed; the update was not installed. Check for updates again.`]};function rb(e,t=`update_failed`){return{phase:`error`,details:{code:typeof e==`string`&&Object.hasOwn(nb,e)?e:t}}}function ib(){let{locale:e}=Ji(),t=e===`zh-CN`,[n,r]=(0,z.useState)(!1),i=(0,z.useRef)(null),[a,o]=(0,z.useState)(`stable`),[s,c]=(0,z.useState)({phase:`idle`}),[l,u]=(0,z.useState)(``),[d,f]=(0,z.useState)(!1),p=(0,z.useRef)(!1),m=window.__TAURI__?.core.invoke,h=tb.includes(s.phase);(0,z.useEffect)(()=>{let e=i.current;if(!e)return;let t=()=>r(e.matches(`:popover-open`));return e.addEventListener(`toggle`,t),()=>e.removeEventListener(`toggle`,t)},[]),(0,z.useEffect)(()=>{if(!m)return;let e=!0;return m(`desktop_update_status`).then(t=>{if(!e)return;u(t.app_version),f(t.rollback_available===!0),t.state?.phase&&c(t.state);let n=t.state?.details?.channel??(t.app_version.includes(`-main.`)?`main`:`stable`);o(n),t.state?.phase||m(`desktop_update`,{action:`check`,channel:n}).then(t=>{e&&c(t)}).catch(t=>{e&&c(rb(t))})}).catch(()=>{e&&c(rb(null,`desktop_status_unavailable`))}),()=>{e=!1}},[m]),(0,z.useEffect)(()=>{if(!m||!h)return;let e=window.setInterval(()=>{m(`desktop_update_status`).then(e=>{e.state?.phase&&c(e.state)}).catch(()=>{})},1e3);return()=>window.clearInterval(e)},[m,h]);async function g(e){if(!(!m||p.current)){p.current=!0,c({phase:e===`check`?`checking`:e===`repair`?`installing_runtime`:`downloading`});try{if(!l){let e=await m(`desktop_update_status`);u(e.app_version),f(e.rollback_available===!0)}c(await m(`desktop_update`,{action:e,channel:a}))}catch(e){c(rb(e,l?`update_failed`:`desktop_status_unavailable`))}finally{p.current=!1}}}let _={service_error:t?`运行时已安装,但服务尚未连接。可重试更新、修复或恢复上版。`:`Runtime installed, but services are unavailable. Retry updates, repair, or restore the previous version.`,idle:t?`App 会检查可用更新,不会自动安装。`:`Updates are checked automatically, never installed without confirmation.`,runtime_required:t?`请完成匹配组件安装,或检查 App 更新。`:`Install matching components or check for an App update.`,connecting:t?`正在连接更新后的服务…`:`Connecting to updated services…`,checking:t?`正在检查更新…`:`Checking for updates…`,available:t?`新版本已就绪,一次更新 App 与匹配的运行时。`:`Update the App and its matching runtime together.`,up_to_date:t?`当前通道暂无更新。`:`No newer update on this channel.`,downloading:t?`正在下载并校验签名…`:`Downloading and verifying signature…`,installing_app:t?`正在安装 App,请保持窗口打开。`:`Installing the App. Keep this window open.`,installing_runtime:t?`正在安装匹配的运行时,请稍候…`:`Installing the matching runtime…`,restart_required:t?`重启后将自动完成运行时安装与服务连接。`:`Restart to finish runtime installation and reconnect services.`,ready:t?`更新完成,服务已就绪。`:`Update completed; services are ready.`,error:nb[s.details?.code??``]?.[+!t]??(t?`更新未完成。请重试;启动失败可尝试修复当前版本。`:`Update incomplete. Retry; repair this version if startup fails.`)},v=h?t?`正在更新…`:`Updating…`:s.phase===`available`?t?`有可用更新`:`Update available`:s.phase===`restart_required`?t?`重启完成更新`:`Restart to finish`:s.phase===`error`?t?`更新需重试`:`Retry update`:t?`更新 LoopX`:`Update LoopX`;return(0,B.jsxs)(`div`,{className:`personal-desktop-update`,children:[(0,B.jsxs)(`button`,{className:`personal-update-trigger`,type:`button`,"aria-expanded":n,"aria-controls":`desktop-update-panel`,onClick:e=>{i.current?.style.setProperty(`bottom`,`${window.innerHeight-e.currentTarget.getBoundingClientRect().top+8}px`),i.current?.togglePopover()},children:[(0,B.jsx)(dm,{size:16,"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:v}),(0,B.jsx)(im,{size:14,"aria-hidden":`true`})]}),(0,B.jsxs)(`section`,{ref:i,popover:`auto`,id:`desktop-update-panel`,className:`personal-update-panel`,"aria-label":t?`LoopX 更新`:`LoopX updates`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`strong`,{children:t?`LoopX 更新`:`LoopX updates`}),(0,B.jsx)(`button`,{type:`button`,"aria-label":t?`关闭更新面板`:`Close updates`,onClick:()=>i.current?.hidePopover(),children:(0,B.jsx)(eh,{size:16,"aria-hidden":`true`})})]}),(0,B.jsxs)(`small`,{children:[l,` · `,a===`main`?t?`main 预览版`:`main preview`:t?`稳定版`:`Stable`]}),s.details?.version?(0,B.jsxs)(`p`,{children:[t?`目标版本:`:`Target: `,s.details.version]}):null,(0,B.jsxs)(`p`,{role:`status`,"aria-live":`polite`,children:[h?(0,B.jsx)(Lm,{className:`is-spinning`,size:14,"aria-hidden":`true`}):null,_[s.phase]]}),s.phase===`downloading`&&s.details?.total?(0,B.jsx)(`progress`,{"aria-label":t?`下载进度`:`Download progress`,max:s.details.total,value:s.details.received??0}):null,m?(0,B.jsx)(`div`,{className:`personal-update-actions`,children:s.phase===`restart_required`?(0,B.jsx)(`button`,{type:`button`,onClick:()=>void g(`restart`),children:t?`重启完成更新`:`Restart to finish`}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`button`,{type:`button`,disabled:h,onClick:()=>void g(`check`),children:t?`检查更新`:`Check for updates`}),s.phase===`available`?(0,B.jsx)(`button`,{type:`button`,onClick:()=>void g(`apply`),children:t?`更新并准备重启`:`Install update`}):null]})}):(0,B.jsx)(`p`,{children:t?`请在 LoopX App 中更新;浏览器自身无需安装包。`:`Update from the LoopX App; the browser needs no installer.`}),(0,B.jsxs)(`details`,{children:[(0,B.jsx)(`summary`,{children:t?`高级选项`:`Advanced options`}),(0,B.jsxs)(`label`,{children:[t?`更新通道`:`Update channel`,(0,B.jsxs)(`select`,{disabled:h||s.phase===`restart_required`,value:a,onChange:e=>{o(e.target.value),c({phase:`idle`})},children:[(0,B.jsx)(`option`,{value:`stable`,children:t?`稳定版(推荐)`:`Stable (recommended)`}),(0,B.jsx)(`option`,{value:`main`,children:t?`main 预览版`:`main preview`})]})]}),(0,B.jsx)(`p`,{children:t?`App 与匹配的 CLI 一起更新,服务可能短暂断开。不删除 Goal 数据。`:`Updates the App and matching CLI. Services may briefly disconnect. Goal data is not deleted.`}),m?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`p`,{children:t?`启动失败时,可重装当前 App 随附的运行时。`:`If startup fails, reinstall this App's bundled runtime.`}),(0,B.jsx)(`button`,{disabled:h||s.phase===`restart_required`,type:`button`,onClick:()=>void g(`repair`),children:t?`修复当前版本`:`Repair this version`})]}):null,m&&d?(0,B.jsxs)(`details`,{children:[(0,B.jsx)(`summary`,{children:t?`恢复上个版本`:`Restore previous version`}),(0,B.jsx)(`p`,{children:t?`将恢复已保留的 App 和它的运行时,需要重启。`:`Restore the retained App and its runtime, then restart.`}),(0,B.jsx)(`button`,{disabled:h,type:`button`,onClick:()=>void g(`rollback`),children:t?`确认恢复上版`:`Restore previous version`})]}):null]})]})]})}var ab=e=>`loopx-sidebar-goal-order-v1:${encodeURIComponent(e)}`;function ob(e){try{let t=JSON.parse(e??`null`);return Array.isArray(t)&&t.every(e=>typeof e==`string`)?[...new Set(t)]:[]}catch{return[]}}function sb(e,t){let n=new Map(t.map((e,t)=>[e,t]));return[...e].sort((e,t)=>(n.get(e.goalId)??1/0)-(n.get(t.goalId)??1/0))}function cb(e,t,n,r,i){if(n===r||!t.includes(n)||!t.includes(r))return e;let a=[...new Set([...e,...t])].filter(e=>e!==n);return a.splice(a.indexOf(r)+Number(i),0,n),a}function lb(e,t){let n=ab(t),[r,i]=(0,z.useState)(()=>{try{return ob(localStorage.getItem(n))}catch{return[]}}),[a,o]=(0,z.useState)(!1),[s,c]=(0,z.useState)(null),[l,u]=(0,z.useState)(null),d=(0,z.useRef)(null),f=(0,z.useRef)(!1),p=sb(e,r),m=p.map(e=>e.goalId);function h(t,a,s){let l=cb(r,m,t,a,s);if(l===r)return;i(l);let u=sb(e,l),d=u.findIndex(e=>e.goalId===t),f=u[d];f&&c({title:f.title,position:d+1});try{localStorage.setItem(n,JSON.stringify(l)),o(!1)}catch{o(!0)}}function g(){d.current=null,u(null)}return{sorted:p,target:l,saveFailed:a,lastMoved:s,move:h,moveBy(e,t){let n=p[m.indexOf(e)+t];n&&h(e,n.goalId,t===1)},pointerProps:e=>({onPointerDown(t){f.current=!1,t.pointerType===`mouse`&&t.button===0&&(d.current={id:e,x:t.clientX,y:t.clientY,dragging:!1},t.currentTarget.setPointerCapture(t.pointerId))},onPointerMove(e){let t=d.current;if(!t||!t.dragging&&Math.hypot(e.clientX-t.x,e.clientY-t.y)<6)return;t.dragging=!0,f.current=!0;let n=document.elementFromPoint(e.clientX,e.clientY)?.closest(`[data-reorder-goal]`),r=e.currentTarget.closest(`.personal-goal-list`),i=n?.dataset.reorderGoal;if(!n||!i||!r?.contains(n)||i===t.id){u(null);return}let a=n.getBoundingClientRect();u({id:i,after:e.clientY>a.top+a.height/2})},onPointerUp(){d.current?.dragging&&l&&h(d.current.id,l.id,l.after),g()},onPointerCancel:g,onLostPointerCapture:g,onKeyDown(e){e.key===`Escape`&&g()},onClickCapture(e){f.current&&=(e.preventDefault(),e.stopPropagation(),!1)}})}}var ub=`/ssh-hosts`,db=/^[A-Za-z0-9][A-Za-z0-9._-]{0,254}$/;function fb(e){return typeof e==`string`&&db.test(e.trim())}function pb(e){if(!e||typeof e!=`object`||Array.isArray(e))throw Error(`SSH Host 列表响应无效。`);let t=e;if(t.ok!==!0||t.schema_version!==`ssh_host_catalog_v0`||!Array.isArray(t.hosts))throw Error(`SSH Host 列表协议不兼容,请更新本机 LoopX 服务。`);let n=new Set;return{hosts:t.hosts.flatMap(e=>{if(!e||typeof e!=`object`||Array.isArray(e))return[];let t=String(e.alias??``).trim();return!fb(t)||n.has(t)?[]:(n.add(t),[{alias:t}])}),schemaVersion:`ssh_host_catalog_v0`}}async function mb(e=fetch,t=ub){let n=await e(t,{cache:`no-store`});if(!n.ok)throw Error(`无法读取本机 SSH Host(HTTP ${n.status})。`);return pb(await n.json())}function hb(e,t){let n=e.trim();if(!fb(n))return{error:`请选择有效的 SSH Host。`};let r=Number(t);return!Number.isInteger(r)||r<1024||r>65535?{error:`本地端口必须是 1024–65535 之间的整数。`}:{command:`ssh -N -L ${r}:127.0.0.1:8766 ${n}`,hostAlias:n,label:n,statusUrl:`http://127.0.0.1:${r}/status.json`}}var gb=`/api/ssh-source/ensure`,_b=`/api/ssh-source/goal-lifecycle`;async function vb(e,t){let n=await fetch(gb,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({host_alias:e,local_port:Number(t)})}),r=await n.json().catch(()=>null);if(!n.ok)throw Error(r?.error??`无法建立 SSH 隧道来源。`);if(!r?.ok)throw Error(`无法建立 SSH 隧道来源。`);return r}async function yb(e,t,n,r,i=fetch){let a=await i(_b,{method:`POST`,headers:{"content-type":`application/json`},body:JSON.stringify({goal_id:t,host_alias:e,operation:n,reason:r})}),o=await a.json().catch(()=>null);if(!a.ok)throw Error(o?.error??`无法更新远端 Goal 生命周期。`);if(!o?.ok||o.schema_version!==`loopx_remote_goal_lifecycle_v1`||o.goal_id!==t||o.host_alias!==e||o.operation!==n||o.activation_state!==(n===`stop`?`stopped`:`active`)||o.projection_verified!==!0)throw Error(`远端 Goal 生命周期回读未验证。`);return o}function bb({activeSource:e,connectionState:t,errorMessage:n,onAdd:r,onConfiguredHostsLoaded:i,onRemove:a,onSelect:o,sources:s}){let{t:c}=Ji(),[l,u]=(0,z.useState)(!1),[d,f]=(0,z.useState)(null),[p,m]=(0,z.useState)(`configured`),[h,g]=(0,z.useState)([]),[_,v]=(0,z.useState)(null),[y,b]=(0,z.useState)(!1),[x,S]=(0,z.useState)(!1),[C,w]=(0,z.useState)(``),[T,E]=(0,z.useState)(``),[D,O]=(0,z.useState)(`8876`),[ee,te]=(0,z.useState)(``),ne=`configured:`,k=[...s.map(e=>({label:e.label,value:e.id})),...h.filter(e=>!s.some(t=>t.label===e.alias)).map(e=>({group:c(`source.configuredGroup`,{count:h.length}),label:e.alias,value:`${ne}${e.alias}`}))],A=(0,z.useMemo)(()=>h.some(e=>e.alias===C)?hb(C,D):{error:c(`source.selectHost`)},[h,C,D,c]);(0,z.useEffect)(()=>{j()},[]);async function j(){b(!0),v(null);try{let e=await mb();g(e.hosts),i?.(e.hosts.map(e=>e.alias)),w(t=>t||e.hosts[0]?.alias||``),e.hosts.length||v(c(`source.hostEmpty`))}catch(e){v(e instanceof Error?e.message:c(`source.hostLoadError`))}finally{b(!1)}}function M(){u(!0),m(`configured`),f(null),j()}function N(){u(!1),m(`configured`),v(null),S(!1),w(``),f(null),E(``),O(`8876`),te(``)}function P(){let e=r({label:T,statusUrl:ee});if(e.error){f(e.error);return}N()}function F(){if(`error`in A){f(A.error??c(`source.invalid`));return}let e=r({ensureTunnel:!0,hostAlias:A.hostAlias,label:A.label,statusUrl:A.statusUrl});if(e.error){f(e.error);return}N()}function re(e){let t=new Set;for(let e of s)try{t.add(new URL(e.statusUrl).port)}catch{}let n=`8877`;for(let e=8877;e<9077;e+=1)if(!t.has(String(e))){n=String(e);break}let i=hb(e,n);if(`error`in i){f(i.error??c(`source.invalid`));return}let a=r({ensureTunnel:!0,hostAlias:i.hostAlias,label:i.label,statusUrl:i.statusUrl});a.error?f(a.error):f(null),O(n)}async function ie(){if(`error`in A){f(A.error??c(`source.invalid`));return}try{await navigator.clipboard.writeText(A.command),S(!0),f(null)}catch{f(c(`source.copyError`))}}return(0,B.jsxs)(`section`,{"aria-label":c(`source.controlPlane`),className:`personal-status-source`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`span`,{children:`Control plane`}),(0,B.jsx)(`button`,{"aria-label":c(`source.addSsh`),onClick:M,title:c(`source.add`),type:`button`,children:(0,B.jsx)(Fm,{size:14})})]}),(0,B.jsx)(wy,{ariaLabel:c(`source.select`),className:`personal-status-source-select`,icon:(0,B.jsx)(Um,{size:15}),onChange:e=>{if(e.startsWith(ne)){re(e.slice(11));return}o(e)},options:k,value:e.id}),(0,B.jsxs)(`div`,{className:`personal-status-source-meta`,children:[(0,B.jsxs)(`span`,{className:`is-${t}`,children:[(0,B.jsx)(`i`,{}),c(t===`loading`?`source.connecting`:t===`error`?`source.notAvailable`:`source.connected`)]}),(0,B.jsx)(`small`,{children:e.readOnly?c(`source.readOnly`):c(`source.localInteractive`)}),e.kind===`ssh_tunnel`?(0,B.jsx)(`button`,{"aria-label":c(`source.remove`,{source:e.label}),onClick:()=>a(e.id),title:c(`source.removeCurrent`),type:`button`,children:(0,B.jsx)(Zm,{size:12})}):null]}),n?(0,B.jsx)(`p`,{className:`personal-status-source-error`,role:`alert`,children:n}):null,l?(0,B.jsxs)(`div`,{className:`personal-status-source-form`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`strong`,{children:c(`source.addSsh`)}),(0,B.jsx)(`button`,{"aria-label":c(`source.closeForm`),onClick:N,type:`button`,children:(0,B.jsx)(eh,{size:13})})]}),(0,B.jsxs)(`div`,{"aria-label":c(`source.addMethod`),className:`personal-status-source-modes`,role:`tablist`,children:[(0,B.jsx)(`button`,{"aria-selected":p===`configured`,onClick:()=>{m(`configured`),f(null)},role:`tab`,type:`button`,children:c(`source.configured`)}),(0,B.jsx)(`button`,{"aria-selected":p===`manual`,onClick:()=>{m(`manual`),f(null)},role:`tab`,type:`button`,children:c(`source.manual`)})]}),p===`configured`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:c(`source.configuredCount`,{count:h.length})}),(0,B.jsxs)(`span`,{className:`personal-status-source-field-row`,children:[(0,B.jsx)(`input`,{"aria-label":c(`source.host`),disabled:y||!h.length,list:`loopx-configured-ssh-hosts`,onChange:e=>{w(e.target.value),S(!1)},placeholder:c(y?`source.loadingHosts`:`source.hostPlaceholder`),value:C}),(0,B.jsx)(`datalist`,{id:`loopx-configured-ssh-hosts`,children:h.map(e=>(0,B.jsx)(`option`,{value:e.alias},e.alias))}),(0,B.jsx)(`button`,{"aria-label":c(`source.refreshHosts`),disabled:y,onClick:()=>void j(),title:c(`source.refreshHosts`),type:`button`,children:(0,B.jsx)(zm,{size:13})})]})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:c(`source.localPort`)}),(0,B.jsx)(`input`,{"aria-label":c(`source.localPort`),inputMode:`numeric`,onChange:e=>{O(e.target.value),S(!1)},value:D})]}),(0,B.jsxs)(`div`,{className:`personal-status-source-command`,children:[(0,B.jsx)(`code`,{children:`error`in A?c(`source.tunnelCommandPending`):A.command}),(0,B.jsxs)(`button`,{"aria-label":c(`source.copyCommand`),disabled:`error`in A,onClick:()=>void ie(),type:`button`,children:[(0,B.jsx)(lm,{size:12}),c(x?`source.copied`:`source.copy`)]})]}),_?(0,B.jsx)(`p`,{className:`is-error`,children:_}):null,(0,B.jsx)(`p`,{children:c(`source.description`)}),(0,B.jsx)(`button`,{className:`personal-status-source-add`,disabled:`error`in A,onClick:F,type:`button`,children:c(`source.addConfigured`)})]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:c(`source.name`)}),(0,B.jsx)(`input`,{autoFocus:!0,maxLength:48,onChange:e=>E(e.target.value),placeholder:c(`source.namePlaceholder`),value:T})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:c(`source.statusUrl`)}),(0,B.jsx)(`input`,{onChange:e=>te(e.target.value),placeholder:`http://127.0.0.1:8876/status.json`,value:ee})]}),(0,B.jsx)(`p`,{children:(0,B.jsx)(`code`,{children:`ssh -N -L 8876:127.0.0.1:8766 `})}),(0,B.jsx)(`p`,{children:c(`source.manualDescription`)}),(0,B.jsx)(`button`,{className:`personal-status-source-add`,onClick:P,type:`button`,children:c(`source.addConfigured`)})]}),d?(0,B.jsx)(`p`,{className:`is-error`,role:`alert`,children:d}):null]}):null]})}var xb={需修复:`is-danger`,等你:`is-warning`,等待条件:`is-info`,推进中:`is-success`,安静运行:`is-quiet`,已完成:`is-quiet`,已停止:`is-stopped`};function Sb({attentionCount:e,goals:t,goalArchiveLoadState:n={error:null,phase:`ready`},lifecycleBusyGoalIds:r,goalLifecycleOperations:i,onRequestGoalCreate:a,onOpenSettings:o,onRetryGoalArchive:s,onRequestGoalLifecycle:c,onSelectGoal:l,selectedGoalId:u,statusSourceControl:d}){let{locale:f,t:p}=Ji(),[m,h]=(0,z.useState)(!1),g=lb(t.filter(e=>e.activationState!==`stopped`),d?.activeSource.statusUrl??`/status.json`),_=g.sorted,v=t.filter(e=>e.activationState===`stopped`),y=e=>!!c&&(!i||i.includes(e)),b=(e,t)=>(0,B.jsxs)(`div`,{className:`personal-goal-row${g.target?.id===e.goalId?g.target.after?` is-drop-after`:` is-drop-before`:``}`,"data-reorder-goal":t?void 0:e.goalId,"data-load-error":e.loadError,children:[(0,B.jsxs)(`button`,{...t?{}:g.pointerProps(e.goalId),title:t?void 0:p(`sidebar.dragGoal`),"aria-current":u===e.goalId?`page`:void 0,className:`personal-goal-link`,onClick:()=>l(e.goalId),type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-goal-state-dot ${e.loadState?``:xb[e.state]}`}),(0,B.jsxs)(`span`,{className:`personal-goal-link-copy`,children:[(0,B.jsx)(`strong`,{children:e.title}),(0,B.jsxs)(`small`,{children:[e.loadState&&(!t||u===e.goalId)?p(e.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(e.state,f),e.needsYou&&!t?` · ${p(`home.lane.needsYou`)}`:``]})]}),(0,B.jsx)(rm,{size:15})]}),!t&&m?(0,B.jsxs)(`div`,{className:`personal-goal-move-actions`,children:[(0,B.jsx)(`button`,{type:`button`,"aria-label":p(`sidebar.moveUp`,{goal:e.title}),disabled:_[0]?.goalId===e.goalId,onClick:()=>g.moveBy(e.goalId,-1),children:(0,B.jsx)(Yp,{"aria-hidden":`true`,size:13})}),(0,B.jsx)(`button`,{type:`button`,"aria-label":p(`sidebar.moveDown`,{goal:e.title}),disabled:_.at(-1)?.goalId===e.goalId,onClick:()=>g.moveBy(e.goalId,1),children:(0,B.jsx)(Gp,{"aria-hidden":`true`,size:13})})]}):null,c&&y(t?`resume`:`stop`)?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`button`,{"aria-label":`${p(t?`sidebar.resume`:`sidebar.stop`)} ${e.title}`,"aria-busy":r?.has(e.goalId)||void 0,className:`personal-goal-lifecycle${r?.has(e.goalId)?` is-pending`:``}`,disabled:r?.has(e.goalId),onClick:()=>c(e,t?`resume`:`stop`),title:p(t?`sidebar.resumeGoal`:`sidebar.stopGoal`),type:`button`,children:r?.has(e.goalId)?(0,B.jsx)(wm,{size:13}):t?(0,B.jsx)(Rm,{size:13}):(0,B.jsx)(Nm,{size:13})}),t&&y(`delete`)?(0,B.jsx)(`button`,{"aria-label":`${p(`sidebar.delete`)} ${e.title}`,className:`personal-goal-lifecycle personal-goal-delete`,onClick:()=>c(e,`delete`),title:p(`sidebar.deleteGoal`),type:`button`,children:(0,B.jsx)(Zm,{size:13})}):null]}):null]},e.goalId);return(0,B.jsxs)(`div`,{className:`personal-goal-directory`,children:[(0,B.jsxs)(`div`,{className:`personal-sidebar-brand`,children:[(0,B.jsx)(`span`,{className:`personal-brand-mark`,children:(0,B.jsx)(Qp,{size:18})}),(0,B.jsx)(`span`,{children:(0,B.jsx)(`strong`,{children:`LoopX`})})]}),d?(0,B.jsx)(bb,{...d}):null,(0,B.jsxs)(`nav`,{"aria-label":p(`home.workspace`),className:`personal-sidebar-nav`,children:[(0,B.jsxs)(`button`,{"aria-current":u===null?`page`:void 0,className:`personal-manager-link`,onClick:()=>l(null),type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-manager-icon`,children:(0,B.jsx)(Qp,{size:17})}),(0,B.jsx)(`span`,{children:p(`sidebar.manager`)}),e>0?(0,B.jsx)(`span`,{className:`personal-sidebar-count`,children:e}):null,(0,B.jsx)(rm,{size:15})]}),(0,B.jsxs)(`div`,{className:`personal-sidebar-section-title`,children:[(0,B.jsx)(`span`,{children:`Goals`}),(0,B.jsxs)(`span`,{className:`personal-sidebar-title-actions`,children:[(0,B.jsx)(`small`,{children:_.length}),(0,B.jsx)(`button`,{"aria-label":p(`sidebar.sortGoals`),title:p(`sidebar.sortGoals`),"aria-pressed":m,onClick:()=>h(!m),type:`button`,children:(0,B.jsx)(Jp,{"aria-hidden":`true`,size:15})}),a?(0,B.jsx)(`button`,{"aria-label":p(`sidebar.createGoal`),onClick:a,type:`button`,children:(0,B.jsx)(Fm,{size:15})}):null]})]}),g.saveFailed?(0,B.jsx)(`p`,{role:`status`,children:p(`sidebar.orderNotSaved`)}):null,(0,B.jsx)(`span`,{className:`personal-sr-only`,role:`status`,children:g.lastMoved?p(`sidebar.goalMoved`,{goal:g.lastMoved.title,position:g.lastMoved.position}):``}),(0,B.jsx)(`div`,{className:`personal-goal-list`,children:_.map(e=>b(e,!1))}),v.length||n.phase===`loading`||n.phase===`error`?(0,B.jsxs)(`details`,{className:`personal-stopped-goals`,open:n.phase===`error`||void 0,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(nm,{size:13}),(0,B.jsx)(`span`,{children:p(`sidebar.stopped`)}),n.phase===`loading`?(0,B.jsx)(wm,{"aria-label":p(`sidebar.stoppedLoading`),className:`is-spinning`,size:13}):(0,B.jsx)(`small`,{children:v.length})]}),(0,B.jsxs)(`div`,{className:`personal-goal-list is-stopped`,children:[n.phase===`error`?(0,B.jsxs)(`div`,{className:`personal-stopped-goal-error`,role:`alert`,children:[(0,B.jsx)(`span`,{children:p(`sidebar.stoppedLoadFailed`)}),s?(0,B.jsx)(`button`,{onClick:s,type:`button`,children:p(`sidebar.retryStopped`)}):null]}):null,v.map(e=>b(e,!0))]})]}):null]}),(0,B.jsxs)(`div`,{className:`personal-sidebar-footer`,children:[(0,B.jsx)(ib,{}),o?(0,B.jsxs)(`button`,{"aria-label":p(`settings.open`),className:`personal-sidebar-utility`,onClick:o,type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-sidebar-utility-icon`,children:(0,B.jsx)(Wm,{size:17})}),(0,B.jsx)(`span`,{className:`personal-sidebar-utility-copy`,children:(0,B.jsx)(`strong`,{children:p(`settings.open`)})}),(0,B.jsx)(rm,{"aria-hidden":`true`,size:15})]}):null]})]})}var Cb=J({ok:X(!0),total:G().int().nonnegative(),next_cursor:W().nullable(),items:q(J({todo_id:W(),text:W(),claimed_by:W().nullable(),evidence:W().nullable(),priority:W().nullable(),task_class:W().nullable()})).max(40)});function wb({goal:e,agentId:t,seed:n,enabled:r,listView:i=!1,onSelect:a}){let{t:o}=Ji(),s=(0,z.useId)(),[c,l]=(0,z.useState)(!1),u=!i||c,d=i?96:148,[f,p]=(0,z.useState)(n),[m,h]=(0,z.useState)(t===`all`?e.doneTodoCount??n.length:n.length),[g,_]=(0,z.useState)(void 0),[v,y]=(0,z.useState)(!1),[b,x]=(0,z.useState)(!1),[S,C]=(0,z.useState)(!1),[w,T]=(0,z.useState)({top:0,height:600}),[E,D]=(0,z.useState)(null),O=(0,z.useRef)(null),ee=(0,z.useRef)(null),[te,ne]=(0,z.useState)(0);(0,z.useEffect)(()=>{let e=O.current;if(!e)return;let t=new ResizeObserver(()=>T({top:e.scrollTop,height:e.clientHeight}));return t.observe(e),()=>{t.disconnect(),ee.current?.abort()}},[]);let k=g===void 0||w.top+w.height>=f.length*d-d*2;(0,z.useEffect)(()=>{if(!r||!u||!k||g===null||b||ee.current)return;let n=new AbortController;ee.current=n,y(!0);let i=new URLSearchParams({goal_id:e.goalId});t!==`all`&&i.set(`agent_id`,t),g&&i.set(`cursor`,g),fetch(`/api/chat/completed-todos?${i}`,{signal:n.signal}).then(async e=>{if(e.status===409&&C(!0),!e.ok)throw Error(`history unavailable`);let t=Cb.parse(await e.json());if(n.signal.aborted)return;let r=t.items.map(e=>({todoId:e.todo_id,text:e.text,claimedBy:e.claimed_by,evidence:e.evidence,priority:e.priority,taskClass:e.task_class,done:!0,status:`done`}));p(e=>g===void 0?r:[...e,...r.filter(t=>!e.some(e=>e.todoId===t.todoId))]),h(t.total),_(t.next_cursor)}).catch(()=>{n.signal.aborted||x(!0)}).finally(()=>{n.signal.aborted||(ee.current=null,y(!1))})},[r,u,k,g,b,te,e.goalId,t,v]),(0,z.useEffect)(()=>{O.current&&(O.current.scrollTop=0),T({top:0,height:O.current?.clientHeight??600}),D(null)},[i]);let A=Math.max(0,Math.floor(w.top/d)-3),j=Math.min(f.length,Math.ceil((w.top+w.height)/d)+3),M=Array.from({length:Math.max(0,j-A)},(e,t)=>A+t);return E!==null&&El(e=>!e),children:[(0,B.jsx)(`span`,{"aria-hidden":`true`,children:c?`▾`:`▸`}),` `,o(`tasks.completed`)]}):(0,B.jsxs)(`strong`,{children:[(0,B.jsx)(`i`,{"aria-hidden":`true`,className:`personal-kanban-dot tone-done`}),o(`tasks.completed`)]}),(0,B.jsx)(`span`,{children:m})]}),(0,B.jsxs)(`div`,{id:s,hidden:!u,"aria-label":o(`tasks.completed`),className:`personal-task-lane-scroll`,ref:O,role:`region`,tabIndex:0,onScroll:e=>T({top:e.currentTarget.scrollTop,height:e.currentTarget.clientHeight}),children:[(0,B.jsx)(`div`,{className:`personal-completed-window`,style:{height:f.length*d},children:M.map(t=>{let n=f[t];return(0,B.jsx)(`div`,{className:`personal-task-card personal-completed-row`,style:{top:t*d,height:d},children:(0,B.jsxs)(`button`,{type:`button`,onFocus:()=>D(t),onBlur:()=>D(null),onClick:()=>a({kind:`todo`,item:{...n,goalId:e.goalId,goalTitle:e.title,ownerLabel:n.claimedBy??e.agentLabel??e.agentId}}),children:[(0,B.jsx)(`span`,{className:`is-done`,children:`✓`}),(0,B.jsx)(`strong`,{children:n.text}),(0,B.jsx)(`small`,{children:n.claimedBy??e.agentLabel??e.agentId})]})},n.todoId)})}),(0,B.jsx)(`div`,{className:`personal-completed-footer`,role:`status`,children:v?o(`tasks.historyLoading`):b?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`span`,{children:o(S?`tasks.historyExpired`:`tasks.historyError`)}),(0,B.jsx)(`button`,{type:`button`,onClick:()=>{S&&(_(void 0),O.current&&(O.current.scrollTop=0)),C(!1),x(!1),ne(e=>e+1)},children:o(`tasks.historyRetry`)})]}):r?g===null?o(`tasks.historyEnd`):(0,B.jsx)(`button`,{type:`button`,onClick:()=>{O.current&&(O.current.scrollTop=f.length*d)},children:o(`tasks.historyMore`)}):o(`tasks.historyLocalOnly`)})]})]})}function Tb({children:e,count:t,label:n,tone:r,listView:i=!1}){let a=(0,z.useId)(),o=(0,z.useRef)(null),s=(0,z.useRef)([]),c=(0,z.useRef)(null),[l,u]=(0,z.useState)({after:!1,before:!1}),d=(0,z.useCallback)(()=>{let e=o.current;if(!e)return;let t={after:Math.max(0,e.scrollHeight-e.clientHeight)-e.scrollTop>1,before:e.scrollTop>1};u(e=>e.after===t.after&&e.before===t.before?e:t)},[]);return(0,z.useEffect)(()=>{let e=o.current;if(!e)return;let t=new ResizeObserver(d);return c.current=t,t.observe(e),e.addEventListener(`scroll`,d,{passive:!0}),d(),()=>{t.disconnect(),c.current=null,s.current=[],e.removeEventListener(`scroll`,d)}},[i,d]),(0,z.useEffect)(()=>{let e=o.current,t=c.current;if(!e||!t)return;for(let e of s.current)t.unobserve(e);let n=Array.from(e.children).filter(e=>e instanceof HTMLElement);for(let e of n)t.observe(e);s.current=n,d()},[e,t,i,d]),i?!t&&r!==`done`?null:(0,B.jsxs)(`details`,{className:`personal-task-group tone-${r}`,open:!0,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(nm,{size:16}),(0,B.jsx)(`strong`,{children:n}),(0,B.jsx)(`span`,{children:t})]}),(0,B.jsx)(`div`,{className:`personal-task-list-rows`,children:e})]}):(0,B.jsxs)(`section`,{className:`personal-object-list personal-task-lane`,children:[(0,B.jsxs)(`header`,{id:a,children:[(0,B.jsxs)(`strong`,{children:[(0,B.jsx)(`i`,{"aria-hidden":`true`,className:`personal-kanban-dot tone-${r}`}),n]}),(0,B.jsx)(`span`,{children:t})]}),(0,B.jsx)(`div`,{"aria-labelledby":a,className:`personal-task-lane-scroll${l.before?` has-overflow-before`:``}${l.after?` has-overflow-after`:``}`,ref:o,role:`region`,tabIndex:t>0?0:-1,children:e})]})}function Eb({historyEnabled:e=!1,goal:t,items:n,onDraftTaskFromMessage:r,onOpenChat:i,onQuickComplete:a,quickCompletingTodoIds:o,onSelect:s,selectedTodoId:c=null,userTodos:l}){let{t:u}=Ji(),[d,f]=(0,z.useState)(!1),[p,m]=(0,z.useState)({goalId:``,laneId:`all`}),h=(0,z.useRef)(null);(0,z.useEffect)(()=>{if(!c)return;let e=window.requestAnimationFrame(()=>h.current?.scrollIntoView({block:`nearest`,inline:`nearest`}));return()=>window.cancelAnimationFrame(e)},[c]);let g=l.filter(e=>e.goalId===t.goalId).map(e=>({...e,goalTitle:t.title})),_=e=>e.priority===`P0`?0:e.priority===`P1`?1:e.priority===`P2`?2:3,v=(0,z.useMemo)(()=>{let e=new Map((t.agentLanes??[]).map(e=>[e.agentId,e]));for(let n of t.agentTodos)n.claimedBy&&!e.has(n.claimedBy)&&e.set(n.claimedBy,{agentId:n.claimedBy,label:n.claimedBy});return[...e.values()]},[t.agentLanes,t.agentTodos]),y=p.goalId===t.goalId&&v.some(e=>e.agentId===p.laneId)?p.laneId:`all`,b=e=>y===`all`||e===y,x=t.agentTodos.filter(e=>e.taskClass!==`continuous_monitor`&&!e.done).filter(e=>b(e.claimedBy)).sort((e,t)=>_(e)-_(t)),S=t.agentTodos.filter(e=>e.taskClass!==`continuous_monitor`&&e.done).filter(e=>b(e.claimedBy)),C=n.filter(e=>e.kind===`schedule`&&b(e.schedule.agentId)),w=n.filter(e=>e.kind===`run`&&!!e.run.todoId&&b(e.run.agentId)),T=!g.length&&!x.length&&!S.length&&!C.length,E=n.filter(e=>e.kind===`message`&&(e.message.role===`user`||e.message.role===`assistant`)),D=E.reduce((e,t,n)=>t.message.role===`user`?n:e,-1),O=D>=0?E[D]?.message:null,ee=D>=0?E.slice(D+1).reverse().find(e=>e.message.role===`assistant`)?.message:null,te=D>=0&&E.slice(D+1).some(e=>e.message.role===`assistant`&&e.message.pending);return(0,B.jsxs)(`section`,{"aria-label":u(`header.tasks`),className:`personal-task-board${d?` is-list-view`:``}`,children:[(0,B.jsxs)(`header`,{className:`personal-task-view-toolbar`,children:[(0,B.jsx)(`div`,{children:(0,B.jsx)(`strong`,{children:u(`header.tasks`)})}),(0,B.jsxs)(`div`,{className:`personal-task-view-switch`,role:`group`,"aria-label":u(`tasks.viewLabel`),children:[(0,B.jsx)(`button`,{type:`button`,"aria-pressed":d,onClick:()=>f(!0),children:u(`tasks.listView`)}),(0,B.jsx)(`button`,{type:`button`,"aria-pressed":!d,onClick:()=>f(!1),children:u(`tasks.boardView`)})]})]}),v.length>1?(0,B.jsxs)(`section`,{"aria-label":u(`tasks.agentLaneFilter`),className:`personal-task-lane-filter`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(Qp,{size:15}),(0,B.jsx)(`span`,{children:(0,B.jsx)(`strong`,{children:u(`tasks.agentLane`)})})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{className:`sr-only`,children:u(`tasks.agentLaneFilter`)}),(0,B.jsxs)(`select`,{"aria-label":u(`tasks.agentLaneFilter`),onChange:e=>m({goalId:t.goalId,laneId:e.target.value}),value:y,children:[(0,B.jsx)(`option`,{value:`all`,children:u(`tasks.allAgentLanes`,{count:v.length})}),v.map(e=>(0,B.jsx)(`option`,{value:e.agentId,children:e.label},e.agentId))]}),(0,B.jsx)(nm,{"aria-hidden":!0,size:14})]})]}):null,O?(0,B.jsxs)(`section`,{"aria-label":u(`tasks.chatRecent`),className:`personal-task-chat-receipt`,children:[(0,B.jsx)(`span`,{className:`personal-task-chat-icon`,children:(0,B.jsx)(Om,{size:18})}),(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`strong`,{children:u(te?`tasks.chatPending`:ee?`tasks.chatAgentReplied`:`tasks.chatRecent`)}),(0,B.jsx)(`small`,{children:t.agentLabel??t.agentId})]}),(0,B.jsxs)(`p`,{className:`is-user`,children:[(0,B.jsx)(`b`,{children:u(`common.you`)}),O.text]}),ee&&!ee.pending?(0,B.jsxs)(`p`,{className:`is-assistant`,children:[(0,B.jsx)(`b`,{children:u(`common.agent`)}),ee.text]}):null,(0,B.jsx)(`small`,{children:u(te?`tasks.chatPendingDescription`:`tasks.chatUnchangedDescription`)})]}),(0,B.jsxs)(`footer`,{children:[(0,B.jsxs)(`button`,{onClick:i,type:`button`,children:[(0,B.jsx)(Om,{size:14}),u(`tasks.chatViewReply`)]}),ee&&!te&&r?(0,B.jsxs)(`button`,{onClick:()=>r(ee.text),type:`button`,children:[(0,B.jsx)(Cm,{size:14}),u(`tasks.convertToTask`)]}):null]})]}):null,(0,B.jsxs)(`div`,{className:d?`personal-task-grouped-list`:`personal-task-kanban`,children:[(0,B.jsxs)(Tb,{listView:d,count:g.length,label:u(`timeline.waitingConfirmation`),tone:`attention`,children:[g.map(e=>{let t=Zi(e.updatedAt,u);return(0,B.jsxs)(`button`,{onClick:()=>s({item:e,kind:`attention`}),type:`button`,children:[(0,B.jsx)(`span`,{"aria-hidden":`true`,className:`is-attention`,children:`!`}),(0,B.jsx)(`strong`,{children:e.text}),(0,B.jsxs)(`small`,{children:[(0,B.jsx)(`span`,{className:`personal-row-status ${e.blocking?`is-blocking`:`is-pending`}`,children:e.blocking?u(`tasks.blocked`):u(`tasks.pending`)}),t?(0,B.jsx)(`span`,{className:`personal-task-age`,children:u(`tasks.waitingAge`,{age:t})}):null]})]},e.todoId)}),g.length?null:(0,B.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyConfirm`)})]}),(0,B.jsxs)(Tb,{listView:d,count:x.length,label:u(`tasks.pendingAndRunning`),tone:`progress`,children:[x.map(e=>{let n={...e,goalId:t.goalId,goalTitle:t.title,ownerLabel:e.claimedBy??t.agentLabel??t.agentId},r=w.find(t=>t.run.todoId===e.todoId)?.run;return(0,B.jsxs)(`div`,{className:`personal-task-card${r?` has-session`:``}${c===e.todoId?` is-selected`:``}`,ref:c===e.todoId?e=>{h.current=e}:void 0,children:[(0,B.jsxs)(`button`,{"aria-pressed":c===e.todoId,onClick:()=>s({item:n,kind:`todo`}),type:`button`,children:[(0,B.jsx)(`span`,{children:`○`}),(0,B.jsx)(`strong`,{children:e.text}),(0,B.jsxs)(`small`,{children:[e.priority?(0,B.jsx)(`span`,{className:`personal-priority-badge is-${e.priority.toLowerCase()}`,children:e.priority}):null,e.status===`blocked`?(0,B.jsx)(`span`,{className:`personal-priority-badge is-blocked`,children:u(`tasks.blocked`)}):null,r?(0,B.jsx)(`span`,{className:`personal-task-session-status`,children:r.status===`running`||r.status===`queued`?u(`runs.running`):r.status===`failed`?u(`tasks.sessionError`):u(`common.waiting`)}):null,e.status===`deferred`?(0,B.jsx)(`span`,{className:`personal-task-session-status`,children:u(`drawer.taskStatusDeferred`)}):r?null:(0,B.jsx)(`span`,{className:`personal-task-session-status`,children:u(`tasks.waiting`)}),e.claimedBy??t.agentLabel??t.agentId]})]}),(0,B.jsxs)(`div`,{className:`personal-task-card-actions`,children:[r?(0,B.jsxs)(`button`,{className:`personal-task-session-link`,"aria-label":u(`tasks.openExecution`,{name:e.text}),onClick:()=>s({item:r,kind:`run`}),title:r.status===`completed`?u(`tasks.viewResult`):u(`tasks.viewExecution`),type:`button`,children:[(0,B.jsx)(pm,{size:14}),(0,B.jsx)(`span`,{children:r.status===`completed`?u(`tasks.viewResult`):u(`tasks.viewExecution`)})]}):null,a?(0,B.jsx)(`button`,{"aria-busy":o?.has(e.todoId)||void 0,"aria-label":u(`tasks.markComplete`,{name:e.text}),disabled:o?.has(e.todoId),onClick:()=>void a(n),title:u(`tasks.completed`),type:`button`,children:o?.has(e.todoId)?(0,B.jsx)(wm,{className:`personal-spin`,size:14}):(0,B.jsx)(tm,{size:14})}):null,(0,B.jsx)(`button`,{"aria-label":u(`tasks.moreActions`,{name:e.text}),onClick:()=>s({item:n,kind:`todo`}),title:u(`common.actions`),type:`button`,children:(0,B.jsx)(fm,{size:14})})]})]},e.todoId)}),x.length?null:(0,B.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyRunning`)})]}),(0,B.jsxs)(Tb,{listView:d,count:C.length,label:u(`tasks.scheduled`),tone:`schedule`,children:[C.map(e=>(0,B.jsxs)(`button`,{onClick:()=>s({item:e.schedule,kind:`schedule`}),type:`button`,children:[(0,B.jsx)(`span`,{children:`◷`}),(0,B.jsx)(`strong`,{children:e.schedule.label}),(0,B.jsx)(`small`,{children:e.schedule.status===`paused`?u(`schedule.paused`):u(`schedule.active`)})]},e.id)),C.length?null:(0,B.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptySchedules`)})]}),(0,B.jsx)(wb,{goal:t,agentId:y,seed:S,enabled:e,listView:d,onSelect:s},`${t.goalId}:${y}:${e}`)]}),T?(0,B.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyGoal`)}):null]})}function Db(e,t){return{live_steering:{label:t(`lark.ingressSteering`),detail:t(`lark.ingressSteeringDescription`)},session_queue:{label:t(`lark.ingressQueue`),detail:t(`lark.ingressQueueDescription`)},async_inbox:{label:t(`lark.ingressAsync`),detail:t(`lark.ingressAsyncDescription`)},direct_session:{label:t(`lark.ingressLegacy`),detail:t(`lark.ingressLegacyDescription`)}}[e]}function Ob(e,t){return e.listener_status===`starting`?{label:t(`lark.health.starting`),detail:t(`lark.health.startingDetail`),state:`not_ready`}:e.listener_status===`retrying`&&e.listener_error_code===`lark_event_source_disconnected`?{label:t(`lark.health.sourceDisconnected`),detail:t(`lark.health.sourceDisconnectedDetail`),state:`not_ready`}:e.listener_status===`retrying`?{label:t(`lark.health.retrying`),detail:t(`lark.health.retryingDetail`),state:`not_ready`}:e.listener_status===`stopped`||e.listener_status===null?{label:t(`lark.health.notStarted`),detail:t(`lark.health.notStartedDetail`),state:`not_ready`}:e.last_event_status===`message_context_permission_required`?{label:t(`lark.health.messageContextPermission`),detail:t(`lark.health.messageContextPermissionDetail`),state:`not_ready`}:e.last_event_status===`processing_failed`?{label:t(`lark.health.processingFailed`),detail:t(`lark.health.processingFailedDetail`),state:`not_ready`}:e.health_error_code===`invalid_routing_state`?{label:t(`lark.health.invalidRouting`),detail:t(`lark.health.invalidRoutingDetail`),state:`not_ready`}:e.last_event_status===`queued_for_agent`?{label:t(`lark.health.queued`),detail:t(`lark.health.queuedDetail`,{agent:e.agent_id??t(`lark.targetAgent`)}),state:`ready`}:e.last_event_status===`ignored`&&e.last_event_reason===`not_addressed`?{label:t(`lark.health.notAddressed`),detail:t(`lark.health.notAddressedDetail`),state:`ready`}:e.last_event_status===`ignored`&&e.last_event_reason===`self_message`?{label:t(`lark.health.listening`),detail:t(`lark.health.ignoredSelf`),state:`ready`}:e.health_error_code===`lark_event_route_mismatch`||[`chat_mismatch`,`topic_mismatch`,`route_ambiguous`].includes(e.last_event_reason??``)?{label:e.last_event_reason===`route_ambiguous`?t(`lark.health.routeAmbiguous`):t(`lark.health.routeMismatch`),detail:e.last_event_reason===`route_ambiguous`?t(`lark.health.routeAmbiguousDetail`):t(`lark.health.routeMismatchDetail`),state:`not_ready`}:[`invalid_event`,`binding_unavailable`].includes(e.last_event_reason??``)?{label:t(`lark.health.routeUnavailable`),detail:t(`lark.health.routeUnavailableDetail`),state:`not_ready`}:e.last_event_status===`replied_and_acknowledged`?{label:t(`lark.health.listening`),detail:t(`lark.health.eventProcessed`,{events:e.event_count,replies:e.replied_count}),state:`ready`}:e.health_error_code===`lark_event_delivery_unverified`||e.event_count===0?{label:t(`lark.health.eventUnverified`),detail:t(`lark.health.eventUnverifiedDetail`),state:`unverified`}:{label:e.reply_ready?t(`lark.health.listening`):t(`lark.health.unavailable`),detail:t(`lark.health.lastStatus`,{status:e.last_event_status??t(`lark.health.waiting`)}),state:e.reply_ready?`ready`:`not_ready`}}function kb(e){return e.history_permission_guidance?.api_document_url??null}function Ab(e,t,n){if(e instanceof Eh){let t=String(e.payload.error_code??``);return{lark_cli_not_installed:n(`lark.error.cliMissing`),lark_cli_not_executable:n(`lark.error.cliExecutable`),lark_cli_start_failed:n(`lark.error.cliStart`),lark_message_permissions_required:n(`lark.error.messagePermissions`),lark_app_required:n(`lark.error.appRequired`),invalid_lark_app:n(`lark.error.invalidApp`),lark_group_lookup_failed:n(`lark.error.groupLookup`),provider_api_failed:n(`lark.error.provider`)}[t]??e.message}return e instanceof Error?e.message:t}function jb({embedded:e=!1,focusGoalConnection:t=!1,goals:n,initialGoalId:r,onChanged:i,onClose:a}){let{t:o}=Ji(),[s,c]=(0,z.useState)(`connections`),[l,u]=(0,z.useState)([]),[d,f]=(0,z.useState)([]),[p,m]=(0,z.useState)(!0),[h,g]=(0,z.useState)(null),[_,v]=(0,z.useState)(``),[y,b]=(0,z.useState)(t),[x,S]=(0,z.useState)(``),[C,w]=(0,z.useState)(r??n[0]?.goalId??``),[T,E]=(0,z.useState)(``),[D,O]=(0,z.useState)([]),[ee,te]=(0,z.useState)(``),[ne,k]=(0,z.useState)(!1),[A,j]=(0,z.useState)(null),[M,N]=(0,z.useState)(`addressed_only`),[P,F]=(0,z.useState)(t&&r?`goal`:`manager`),[re,ie]=(0,z.useState)(`async_inbox`),[I,ae]=(0,z.useState)(`topic_reply`),[L,oe]=(0,z.useState)(``),[se,ce]=(0,z.useState)(!1),[le,ue]=(0,z.useState)({}),[de,fe]=(0,z.useState)(!1),[pe,me]=(0,z.useState)(null),[he,ge]=(0,z.useState)(null),[_e,ve]=(0,z.useState)(null),[ye,be]=(0,z.useState)(null),[xe,Se]=(0,z.useState)(!1),[Ce,we]=(0,z.useState)(`loopx-workspace-bot`),[Te,Ee]=(0,z.useState)(`feishu`),[R,De]=(0,z.useState)(null),[Oe,ke]=(0,z.useState)(!1),[Ae,je]=(0,z.useState)(null),Me=(0,z.useRef)(null),Ne=(0,z.useRef)(null),Pe=(0,z.useRef)(!1);async function Fe(){m(!0),g(null);try{let[e,t]=await Promise.all([zg(),Jg()]);u(e),f(t),S(t=>t||e.find(e=>e.reply_ready)?.app_ref||e.find(e=>e.ready)?.app_ref||e[0]?.app_ref||``)}catch(e){g(Ab(e,o(`lark.error.configuration`),o))}finally{m(!1)}}(0,z.useEffect)(()=>{Fe()},[]),(0,z.useEffect)(()=>{if(!t||p||Pe.current||!r)return;Pe.current=!0;let e=d.find(e=>e.goal_id===r);e?Je(e):qe(n.find(e=>e.goalId===r))},[d,t,n,r,p]),(0,z.useEffect)(()=>{if(!y||!x||_e){O([]),te(``),k(!1),j(null);return}let e=!1;k(!0),j(null);let t=window.setTimeout(()=>{Kg(x,T).then(t=>{e||(O(t),te(e=>t.some(t=>t.chat_id===e)?e:t[0]?.chat_id??``))}).catch(t=>{e||(O([]),te(``),j(Ab(t,o(`lark.error.groupLoad`),o)))}).finally(()=>{e||k(!1)})},180);return()=>{e=!0,window.clearTimeout(t)}},[x,T,y,_e]),(0,z.useEffect)(()=>{if(!xe||!R||[`ready`,`failed`,`cancelled`].includes(R.status))return;let e=!1,t=window.setTimeout(()=>{Hg(R.setup_id).then(async t=>{e||(De(t),t.verification_url&&Ne.current!==t.verification_url&&(Ne.current=t.verification_url,Me.current&&!Me.current.closed&&(Me.current.location.href=t.verification_url)),t.status===`ready`&&(await Fe(),S(t.app_ref),ue({}),Se(!1)),t.status===`failed`&&je(t.error??o(`lark.error.appCreate`)))}).catch(t=>{e||je(Ab(t,o(`lark.error.setupPoll`),o))})},650);return()=>{e=!0,window.clearTimeout(t)}},[xe,R]);let V=n.find(e=>e.goalId===C),Ie=V?.agentId?[{agentId:V.agentId,label:V.agentLabel??V.agentId}]:[],Le=V?.agentLanes?.length?V.agentLanes:Ie,Re=Le.some(e=>e.agentId===L),ze=[];se?ze=Le.map(e=>({agentId:e.agentId,appRef:le[e.agentId]??x})):Re&&(ze=[{agentId:L,appRef:x}]);let Be=ze.map(e=>e.agentId),Ve=!!_e||ze.length>0&&ze.every(e=>l.some(t=>t.app_ref===e.appRef&&t.reply_ready)),He=o(`lark.connect`);he?He=o(`lark.saveConnection`):se&&(He=o(`lark.connectAllAgentsAction`,{count:Be.length}));let Ue=l.find(e=>e.app_ref===x),We=D.find(e=>e.chat_id===ee),Ge=(0,z.useMemo)(()=>{let e=_.trim().toLocaleLowerCase();return e?d.filter(t=>[t.app_label,t.chat_name,t.goal_title,t.topic_name].some(t=>t.toLocaleLowerCase().includes(e))):d},[d,_]),Ke=(0,z.useMemo)(()=>d.filter(e=>Ob(e,o).state===`unverified`).length,[d,o]);function qe(e){let i=e??n.find(e=>e.goalId===r)??n[0];ge(null),ve(null),F(e||t?`goal`:`manager`),S(l.some(e=>e.app_ref===x)?x:l.find(e=>e.reply_ready)?.app_ref??l[0]?.app_ref??``),te(``),w(i?.goalId??``),oe(i?.agentId??``),ce(!1),ue({}),N(`addressed_only`),ie(`async_inbox`),ae(`topic_reply`),E(``),me(null),b(!0)}function Je(e){ge(e.goal_id),ve(e),F(e.conversation_kind??`goal`),S(e.app_ref),w(e.goal_id);let t=n.find(t=>t.goalId===e.goal_id),r=t?.agentLanes?.length?t.agentLanes:t?.agentId?[{agentId:t.agentId}]:[];oe(e.agent_id??(r.length===1?r[0].agentId:``)),ce(!1),ue({}),N(e.capture_scope),ie(e.ingress_mode===`direct_session`?`async_inbox`:e.ingress_mode),ae(e.reply_mode),E(e.chat_name),me(null),b(!0)}function Ye(){De(null),je(null),Ne.current=null,Se(!0)}async function Xe(){if(!(Oe||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce))){ke(!0),je(null),Ne.current=null,Me.current=window.open(window.location.href,`_blank`);try{let e=await Vg({appRef:Ce,brand:Te});De(e)}catch(e){Me.current?.close(),je(Ab(e,o(`lark.error.setupStart`),o))}finally{ke(!1)}}}async function Ze(){let e=R;if(Se(!1),Me.current?.close(),e&&![`ready`,`failed`,`cancelled`].includes(e.status))try{await Ug(e.setup_id)}catch{}}async function Qe(){if(!(!x||!C||!_e&&!We||P===`goal`&&Be.length===0||de)){fe(!0),me(null);try{let e={...P===`manager`?{..._e?{connectionId:_e.connection_id}:{appRef:x,chatId:We.chat_id,chatName:We.chat_name}}:_e?{connectionId:_e.connection_id,agentId:L}:{agentBindings:ze,chatId:We.chat_id,chatName:We.chat_name},conversationKind:P,captureScope:P===`manager`?`addressed_only`:M,goalId:C,incomingMode:M===`configured_chat_all`?`all`:`mentions`,ingressMode:P===`manager`?`session_queue`:re,replyMode:I},t=await Yg({...e,execute:!1});if(!t.ok)throw new Eh(t.public_summary??t.blocker??o(`lark.error.bindPreview`),{error_code:t.blocker??`provider_api_failed`});let n=await Yg({...e,execute:!0});if(!n.ok)throw new Eh(n.public_summary??n.blocker??o(`lark.error.bind`),{error_code:n.blocker??`provider_api_failed`});b(!1),await Fe(),i?.()}catch(e){me(Ab(e,o(`lark.error.bind`),o))}finally{fe(!1)}}}async function $e(e,t){if(ye!==t){be(t);return}try{await Xg(e,t),be(null),await Fe(),i?.()}catch(e){g(Ab(e,o(`lark.error.disconnect`),o))}}return(0,B.jsxs)(`section`,{className:`personal-lark-settings${e?` is-embedded`:``}`,"aria-label":o(`lark.configuration`),children:[e?null:(0,B.jsxs)(`header`,{className:`personal-lark-header`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`small`,{children:o(`settings.goalConnections`)}),(0,B.jsx)(`h1`,{children:`Lark`})]}),(0,B.jsx)(`button`,{"aria-label":o(`lark.closeSettings`),className:`personal-icon-button`,onClick:a,type:`button`,children:(0,B.jsx)(eh,{size:18})})]}),(0,B.jsxs)(`nav`,{className:`personal-lark-tabs`,"aria-label":o(`lark.management`),children:[(0,B.jsxs)(`button`,{"aria-current":s===`apps`?`page`:void 0,onClick:()=>c(`apps`),type:`button`,children:[o(`lark.apps`),` `,(0,B.jsx)(`span`,{children:p?`…`:l.length})]}),(0,B.jsxs)(`button`,{"aria-current":s===`connections`?`page`:void 0,onClick:()=>c(`connections`),type:`button`,children:[o(`lark.connections`),` `,(0,B.jsx)(`span`,{children:p?`…`:d.length})]})]}),h?(0,B.jsx)(`p`,{className:`personal-notification-error`,children:h}):null,p?(0,B.jsxs)(`div`,{className:`personal-lark-loading`,children:[(0,B.jsx)(wm,{className:`is-spinning`,size:18}),o(`lark.loading`)]}):null,!p&&s===`apps`?(0,B.jsxs)(`div`,{className:`personal-lark-apps`,children:[(0,B.jsxs)(`div`,{className:`personal-lark-app-toolbar`,children:[(0,B.jsx)(`span`,{children:o(`lark.reusableApps`,{count:l.length})}),(0,B.jsxs)(`button`,{className:`personal-primary-action`,onClick:Ye,type:`button`,children:[(0,B.jsx)(Fm,{size:16}),o(`lark.newApp`)]})]}),(0,B.jsxs)(`div`,{className:`personal-lark-app-grid`,children:[l.map(e=>(0,B.jsxs)(`article`,{className:`personal-lark-app-card`,children:[(0,B.jsx)(`span`,{className:`personal-lark-app-avatar`,children:(0,B.jsx)(Qp,{size:19})}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:e.label}),(0,B.jsxs)(`small`,{children:[e.brand,` · lark-cli profile`]})]}),(0,B.jsx)(`em`,{className:e.reply_ready?`is-ready`:`is-off`,children:e.reply_ready?o(`lark.autoReplyReady`):e.ready?o(`lark.needsMessagePermissions`):o(`lark.needsSetup`)}),(0,B.jsxs)(`p`,{children:[o(`lark.goalConnections`,{count:d.filter(t=>t.app_ref===e.app_ref).length}),e.ready&&!e.reply_ready?` · ${o(`lark.autoReplyUnavailable`)}`:``]})]},e.app_ref)),l.length===0?(0,B.jsx)(`p`,{className:`personal-lark-empty`,children:o(`lark.noProfiles`)}):null]})]}):null,!p&&s===`connections`?(0,B.jsxs)(`div`,{className:`personal-lark-connections`,children:[Ke>0?(0,B.jsxs)(`p`,{className:`personal-lark-route-readiness`,role:`status`,children:[(0,B.jsx)(Om,{size:15}),o(`lark.routesUnverified`,{count:Ke})]}):null,(0,B.jsxs)(`div`,{className:`personal-lark-toolbar`,children:[(0,B.jsxs)(`label`,{children:[(0,B.jsx)(Bm,{size:16}),(0,B.jsx)(`input`,{"aria-label":o(`lark.searchConnections`),onChange:e=>v(e.target.value),placeholder:o(`lark.searchPlaceholder`),type:`search`,value:_})]}),(0,B.jsxs)(`button`,{className:`personal-primary-action`,disabled:l.length===0||n.length===0,onClick:()=>qe(),type:`button`,children:[(0,B.jsx)(Fm,{size:16}),o(`lark.connectApp`)]})]}),(0,B.jsxs)(`div`,{className:`personal-lark-table`,role:`table`,"aria-label":o(`lark.goalTopicConnections`),children:[(0,B.jsxs)(`div`,{className:`personal-lark-table-head`,role:`row`,children:[(0,B.jsx)(`span`,{children:o(`lark.connection`)}),(0,B.jsx)(`span`,{children:o(`common.goal`)}),(0,B.jsx)(`span`,{children:o(`lark.capture`)}),(0,B.jsx)(`span`,{children:o(`lark.processing`)}),(0,B.jsx)(`span`,{children:o(`common.actions`)})]}),Ge.map(e=>{let t=Ob(e,o);return(0,B.jsxs)(`div`,{className:`personal-lark-table-row`,role:`row`,children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:e.chat_name}),(0,B.jsxs)(`small`,{children:[e.app_label,` · `,t.label]}),(0,B.jsx)(`small`,{children:t.detail}),t.state===`unverified`?(0,B.jsxs)(`a`,{href:`https://open.feishu.cn/document/server-docs/im-v1/message/events/receive?lang=zh-CN`,rel:`noreferrer`,target:`_blank`,children:[(0,B.jsx)(pm,{size:12}),o(`lark.openEventSettings`)]}):null,kb(e)?(0,B.jsxs)(`a`,{href:kb(e)??void 0,rel:`noreferrer`,target:`_blank`,children:[(0,B.jsx)(pm,{size:12}),o(`lark.historyPermission`)]}):null]}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:e.goal_title}),(0,B.jsxs)(`small`,{children:[`# `,e.topic_name]})]}),(0,B.jsx)(`span`,{children:e.capture_scope===`addressed_only`?o(`lark.mentionsOnly`):o(`lark.allTopicMessages`)}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:e.conversation_kind===`manager`?o(`lark.managerConversation`):Db(e.ingress_mode,o).label}),(0,B.jsx)(`small`,{children:e.conversation_kind===`manager`?o(`lark.managerConversationDescription`):e.agent_id??Db(e.ingress_mode,o).detail})]}),(0,B.jsxs)(`span`,{className:`personal-lark-row-actions`,children:[(0,B.jsx)(`button`,{"aria-label":o(`lark.settingsConfigure`,{goal:e.goal_title}),onClick:()=>Je(e),type:`button`,children:(0,B.jsx)(Wm,{size:15})}),(0,B.jsxs)(`button`,{"aria-label":o(`lark.settingsDisconnect`,{goal:e.goal_title}),className:ye===e.connection_id?`is-confirm`:``,onClick:()=>void $e(e.goal_id,e.connection_id),type:`button`,children:[(0,B.jsx)($m,{size:15}),ye===e.connection_id?o(`common.confirm`):null]})]})]},e.connection_id)}),Ge.length===0?(0,B.jsx)(`p`,{className:`personal-lark-empty`,children:o(`lark.noConnections`)}):null]})]}):null,y?(0,B.jsx)(`div`,{className:`personal-lark-modal-backdrop`,role:`presentation`,children:(0,B.jsxs)(`section`,{"aria-labelledby":`connect-lark-title`,"aria-modal":`true`,className:`personal-lark-modal`,role:`dialog`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`small`,{children:`Goal Topic connection`}),(0,B.jsx)(`h2`,{id:`connect-lark-title`,children:o(he?`lark.editConnection`:`lark.connectApp`)})]}),(0,B.jsx)(`button`,{"aria-label":o(`lark.closeConnection`),onClick:()=>b(!1),type:`button`,children:(0,B.jsx)(eh,{size:18})})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.conversationKind`)}),(0,B.jsxs)(`select`,{"aria-label":o(`lark.conversationKind`),disabled:!!_e,value:P,onChange:e=>F(e.target.value),children:[(0,B.jsx)(`option`,{value:`manager`,children:o(`lark.managerConversation`)}),(0,B.jsx)(`option`,{value:`goal`,children:o(`lark.workerConversation`)})]})]}),P===`manager`?(0,B.jsx)(`p`,{children:o(`lark.managerConversationDescription`)}):null,_e?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.appProfile`)}),(0,B.jsx)(`div`,{children:_e.app_label})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.groupChat`)}),(0,B.jsx)(`div`,{children:_e.chat_name})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.bindGoal`)}),(0,B.jsx)(`div`,{children:_e.goal_title})]}),(0,B.jsx)(`small`,{children:o(`lark.editPreservesIdentity`)})]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.appProfile`)}),(0,B.jsx)(`select`,{"aria-label":o(`lark.appProfile`),disabled:p,onChange:e=>{e.target.value===`__register__`?Ye():(S(e.target.value),ue({}))},value:x,children:p?(0,B.jsx)(`option`,{value:``,children:o(`lark.appLoading`)}):(0,B.jsxs)(B.Fragment,{children:[l.map(e=>(0,B.jsxs)(`option`,{disabled:!e.ready,value:e.app_ref,children:[e.label,e.reply_ready?``:e.ready?` · ${o(`lark.needsMessagePermissions`)}`:` · ${o(`lark.needsSetup`)}`]},e.app_ref)),(0,B.jsx)(`option`,{value:`__register__`,children:o(`lark.registerAnother`)})]})}),(0,B.jsx)(`small`,{children:o(`lark.defaultAgentAppDescription`)})]}),Ue?.ready&&!Ue.reply_ready?(0,B.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:o(`lark.appPermissions`)}):null,(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.groupChat`)}),(0,B.jsx)(`input`,{"aria-label":o(`lark.groupSearch`),onChange:e=>E(e.target.value),placeholder:o(`lark.groupSearch`),type:`search`,value:T}),ne?(0,B.jsxs)(`div`,{className:`personal-lark-group-state`,role:`status`,children:[(0,B.jsx)(wm,{className:`is-spinning`,size:15}),o(`lark.groupLoading`)]}):null,!ne&&A?(0,B.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:A}):null,!ne&&!A&&D.length===0?(0,B.jsx)(`div`,{className:`personal-lark-group-state`,role:`status`,children:o(`lark.groupEmpty`)}):null,!ne&&!A&&D.length>0?(0,B.jsx)(`select`,{"aria-label":o(`lark.groupChat`),onChange:e=>te(e.target.value),value:ee,children:D.map(e=>(0,B.jsx)(`option`,{value:e.chat_id,children:e.chat_name},e.chat_id))}):null]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.bindGoal`)}),(0,B.jsx)(`select`,{"aria-label":o(`lark.bindGoal`),onChange:e=>{let t=e.target.value;w(t),oe(n.find(e=>e.goalId===t)?.agentId??``),ue({})},value:C,children:n.map(e=>(0,B.jsx)(`option`,{value:e.goalId,children:e.title},e.goalId))})]})]}),(0,B.jsxs)(`label`,{className:`personal-lark-check`,children:[(0,B.jsx)(`input`,{checked:!0,readOnly:!0,type:`checkbox`}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:o(`lark.createAutomatically`)}),(0,B.jsx)(`small`,{children:o(`lark.createAutomaticallyDescription`)})]})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.topicPreview`)}),(0,B.jsxs)(`div`,{className:`personal-lark-topic-preview`,children:[(0,B.jsx)(Om,{size:15}),`# `,V?.title??V?.goalId??`Goal`]})]}),P===`goal`?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.captureScope`)}),(0,B.jsxs)(`select`,{"aria-label":o(`lark.captureScope`),disabled:_e?.ingress_mode===`direct_session`,onChange:e=>N(e.target.value),value:M,children:[(0,B.jsx)(`option`,{value:`addressed_only`,children:o(`lark.captureAddressed`)}),(0,B.jsx)(`option`,{value:`configured_chat_all`,children:o(`lark.captureAll`)})]}),(0,B.jsx)(`small`,{children:o(`lark.captureScopeDescription`)})]}),(0,B.jsxs)(`fieldset`,{"aria-label":o(`lark.agentIngress`),className:`personal-lark-ingress`,children:[(0,B.jsx)(`legend`,{children:o(`lark.agentIngress`)}),(0,B.jsx)(`div`,{children:[`live_steering`,`session_queue`,`async_inbox`].map(e=>{let t=Db(e,o);return(0,B.jsxs)(`label`,{className:re===e?`is-active`:``,children:[(0,B.jsx)(`input`,{"aria-label":t.label,checked:re===e,name:`lark-agent-ingress`,onChange:()=>ie(e),type:`radio`,value:e}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:t.label}),(0,B.jsx)(`small`,{children:t.detail})]})]},e)})})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.targetAgent`)}),(0,B.jsxs)(`select`,{"aria-label":o(`lark.targetAgent`),disabled:!!_e?.agent_id,onChange:e=>oe(e.target.value),value:L,children:[Re?null:(0,B.jsx)(`option`,{disabled:!0,value:L,children:L?o(`lark.agentUnavailable`,{agent:L}):o(`lark.noAgentConfigured`)}),Le.map(e=>(0,B.jsx)(`option`,{value:e.agentId,children:e.label===e.agentId?e.agentId:`${e.label} · ${e.agentId}`},e.agentId))]}),(0,B.jsx)(`small`,{children:o(`lark.targetAgentDescription`)})]}),!he&&Le.length>1?(0,B.jsxs)(`label`,{"aria-label":o(`lark.connectAllAgents`),className:`personal-lark-check`,children:[(0,B.jsx)(`input`,{checked:se,onChange:e=>ce(e.target.checked),type:`checkbox`}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:o(`lark.connectAllAgents`)}),(0,B.jsx)(`small`,{children:o(`lark.connectAllAgentsDescription`,{count:Le.length})})]})]}):null,!he&&se&&Le.length>1?(0,B.jsxs)(`fieldset`,{"aria-label":o(`lark.agentApps`),className:`personal-lark-agent-apps`,children:[(0,B.jsx)(`legend`,{children:o(`lark.agentApps`)}),(0,B.jsx)(`small`,{children:o(`lark.agentAppsDescription`)}),(0,B.jsx)(`div`,{children:Le.map(e=>(0,B.jsxs)(`label`,{children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:e.label}),(0,B.jsx)(`small`,{children:e.agentId})]}),(0,B.jsx)(`select`,{"aria-label":o(`lark.agentAppSelection`,{agent:e.label}),onChange:t=>ue(n=>({...n,[e.agentId]:t.target.value})),value:le[e.agentId]??x,children:l.map(e=>(0,B.jsxs)(`option`,{disabled:!e.ready,value:e.app_ref,children:[e.label,e.reply_ready?``:e.ready?` · ${o(`lark.needsMessagePermissions`)}`:` · ${o(`lark.needsSetup`)}`]},e.app_ref))})]},e.agentId))})]}):null,se&&ze.length>0&&!Ve?(0,B.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:o(`lark.agentAppPermissions`)}):null,Be.length===0?(0,B.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:o(`lark.selectRegisteredAgent`)}):null]}):null,(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.replyMode`)}),(0,B.jsx)(`select`,{"aria-label":o(`lark.replyMode`),onChange:e=>ae(e.target.value),value:I,children:(0,B.jsx)(`option`,{value:`topic_reply`,children:o(`lark.topicReply`)})}),(0,B.jsx)(`small`,{children:o(`lark.replyModeDescription`)})]}),(0,B.jsxs)(`p`,{className:`personal-lark-cardinality`,children:[(0,B.jsx)(tm,{size:15}),o(`lark.cardinality`)]}),pe?(0,B.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:pe}):null,(0,B.jsxs)(`footer`,{children:[(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>b(!1),type:`button`,children:o(`lark.cancel`)}),(0,B.jsxs)(`button`,{className:`personal-primary-action`,disabled:p||!x||!_e&&(!Ue?.reply_ready||!ee)||P===`goal`&&(!Ve||Be.length===0)||!C||de,onClick:()=>void Qe(),type:`button`,children:[de?(0,B.jsx)(wm,{className:`is-spinning`,size:15}):null,He]})]})]})}):null,xe?(0,B.jsx)(`div`,{className:`personal-lark-modal-backdrop is-setup`,role:`presentation`,children:(0,B.jsxs)(`section`,{"aria-labelledby":`new-lark-app-title`,"aria-modal":`true`,className:`personal-lark-modal personal-lark-setup-modal`,role:`dialog`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`small`,{children:o(`lark.reusableWorkspaceApp`)}),(0,B.jsx)(`h2`,{id:`new-lark-app-title`,children:o(`lark.newApp`)})]}),(0,B.jsx)(`button`,{"aria-label":o(`lark.closeCreate`),onClick:()=>void Ze(),type:`button`,children:(0,B.jsx)(eh,{size:18})})]}),R?(0,B.jsxs)(`div`,{className:`personal-lark-setup-progress`,children:[(0,B.jsx)(`span`,{className:`personal-lark-setup-icon is-${R.status}`,children:R.status===`ready`?(0,B.jsx)(tm,{size:22}):(0,B.jsx)(wm,{className:R.status===`failed`?``:`is-spinning`,size:22})}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:R.status===`ready`?o(`lark.appCreated`):R.status===`failed`?o(`lark.appCreateFailed`):o(`lark.waitingFeishu`)}),(0,B.jsx)(`p`,{children:R.status===`waiting_for_feishu`?o(`lark.waitingFeishuDescription`):R.status===`starting`?o(`lark.waitingLink`):R.error})]}),R.verification_url?(0,B.jsxs)(`a`,{href:R.verification_url,rel:`noreferrer`,target:`_blank`,children:[(0,B.jsx)(pm,{size:15}),o(`lark.reopenFeishu`)]}):null]}):(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`p`,{className:`personal-lark-setup-copy`,children:o(`lark.setupCopy`)}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.profileName`)}),(0,B.jsx)(`input`,{"aria-label":o(`lark.profileName`),autoComplete:`off`,onChange:e=>we(e.target.value),placeholder:`loopx-workspace-bot`,value:Ce})]}),(0,B.jsxs)(`label`,{children:[(0,B.jsx)(`span`,{children:o(`lark.region`)}),(0,B.jsxs)(`select`,{"aria-label":o(`lark.region`),onChange:e=>Ee(e.target.value),value:Te,children:[(0,B.jsx)(`option`,{value:`feishu`,children:`Feishu`}),(0,B.jsx)(`option`,{value:`lark`,children:`Lark`})]})]}),Ce&&!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce)?(0,B.jsx)(`p`,{className:`personal-notification-error`,children:o(`lark.profileValidation`)}):null]}),Ae?(0,B.jsx)(`p`,{className:`personal-notification-error`,children:Ae}):null,(0,B.jsxs)(`footer`,{children:[(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void Ze(),type:`button`,children:o(`lark.cancel`)}),R?null:(0,B.jsxs)(`button`,{className:`personal-primary-action`,disabled:Oe||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce),onClick:()=>void Xe(),type:`button`,children:[Oe?(0,B.jsx)(wm,{className:`is-spinning`,size:15}):(0,B.jsx)(pm,{size:15}),o(`lark.continueFeishu`)]})]})]})}):null]})}function Mb(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function Nb(e,t,n){let r=Mb(t),i=Mb(n);return Object.fromEntries(e.fields.flatMap(({key:e,nullable:t})=>{let n=r[e],a=i[e];return Object.hasOwn(r,e)&&(n!=null||t&&n===null)?[[e,n]]:Object.hasOwn(i,e)&&a!=null?[[e,a]]:[]}))}function Pb(e,t){let n;try{n=JSON.parse(t)}catch{return null}if(!n||typeof n!=`object`||Array.isArray(n))return null;let r=new Set(e.fields.map(e=>e.key));return Object.keys(n).some(e=>!r.has(e))?null:n}function Fb(e,t,n){let r={...e,[t]:n},i=e.schedule;return t===`timezone`&&i&&typeof i==`object`&&`schema_version`in i&&i.schema_version===`periodic_report_schedule_v0`&&(r.schedule={...i,timezone:n}),r}function Ib({id:e,value:t,timezone:n,onChange:r}){let{locale:i}=Ji(),a=i===`zh-CN`,o=t&&typeof t==`object`&&!Array.isArray(t)?t:null,s=String(o?.rrule??``).split(`;`).map(e=>e.split(`=`)),c=Object.fromEntries(s.filter(e=>e.length===2)),l=[`MO`,`TU`,`WE`,`TH`,`FR`,`SA`,`SU`],u=(e,t)=>e!==void 0&&/^\d+$/.test(e)&&Number(e)<=t,d=!o||o.schema_version===`periodic_report_schedule_v0`&&[`DAILY`,`WEEKLY`].includes(c.FREQ)&&o.timezone===n&&s.every(e=>e.length===2&&[`FREQ`,`BYDAY`,`BYHOUR`,`BYMINUTE`,`INTERVAL`].includes(e[0]))&&new Set(s.map(([e])=>e)).size===s.length&&u(c.BYHOUR,23)&&u(c.BYMINUTE??`0`,59)&&(c.FREQ===`WEEKLY`?l.includes(c.BYDAY):!c.BYDAY)&&(!c.INTERVAL||c.INTERVAL===`1`),f=a?[`星期一`,`星期二`,`星期三`,`星期四`,`星期五`,`星期六`,`星期日`]:[`Monday`,`Tuesday`,`Wednesday`,`Thursday`,`Friday`,`Saturday`,`Sunday`];function p(e){let t={FREQ:`WEEKLY`,BYDAY:`MO`,BYHOUR:`9`,BYMINUTE:`0`,...c,...e};r?.({schema_version:`periodic_report_schedule_v0`,schedule_id:o?.schedule_id??`report-schedule`,timezone:n,rrule:[`FREQ=${t.FREQ}`,...t.FREQ===`WEEKLY`?[`BYDAY=${t.BYDAY}`]:[],`BYHOUR=${t.BYHOUR}`,`BYMINUTE=${t.BYMINUTE}`].join(`;`)})}return(0,B.jsxs)(`div`,{className:`personal-report-schedule`,children:[(0,B.jsxs)(`label`,{className:`is-boolean`,htmlFor:e,children:[(0,B.jsx)(`span`,{children:a?`按日历汇报`:`Calendar reports`}),(0,B.jsx)(`input`,{id:e,type:`checkbox`,role:`switch`,checked:!!o,disabled:!r,onChange:e=>e.target.checked?p({}):r?.(null)})]}),o?(0,B.jsxs)(B.Fragment,{children:[d?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsxs)(`label`,{htmlFor:`${e}-frequency`,children:[(0,B.jsx)(`span`,{children:a?`频率`:`Frequency`}),(0,B.jsxs)(`select`,{id:`${e}-frequency`,value:c.FREQ,disabled:!r,onChange:e=>p({FREQ:e.target.value}),children:[(0,B.jsx)(`option`,{value:`DAILY`,children:a?`每天`:`Daily`}),(0,B.jsx)(`option`,{value:`WEEKLY`,children:a?`每周`:`Weekly`})]})]}),c.FREQ===`WEEKLY`&&(0,B.jsxs)(`label`,{htmlFor:`${e}-day`,children:[(0,B.jsx)(`span`,{children:a?`星期`:`Weekday`}),(0,B.jsx)(`select`,{id:`${e}-day`,value:c.BYDAY,disabled:!r,onChange:e=>p({BYDAY:e.target.value}),children:l.map((e,t)=>(0,B.jsx)(`option`,{value:e,children:f[t]},e))})]}),(0,B.jsxs)(`label`,{htmlFor:`${e}-time`,children:[(0,B.jsxs)(`span`,{children:[a?`当地时间`:`Local time`,` (`,n,`)`]}),(0,B.jsx)(`input`,{id:`${e}-time`,type:`time`,required:!0,disabled:!r,value:`${(c.BYHOUR??`9`).padStart(2,`0`)}:${(c.BYMINUTE??`0`).padStart(2,`0`)}`,onChange:e=>{if(!/^\d{2}:\d{2}$/.test(e.target.value))return;let[t,n]=e.target.value.split(`:`);p({BYHOUR:t,BYMINUTE:n})}})]})]}):(0,B.jsx)(`p`,{role:`alert`,children:a?`此计划需在 JSON 模式中编辑;当前内容已保留。`:`Edit this schedule in JSON mode; its current value is preserved.`}),(0,B.jsx)(`p`,{children:a?`由现有唤醒检查到期计划;实际送达以回执为准。`:`Existing wakes check the schedule; delivery is confirmed by its receipt.`})]}):(0,B.jsx)(`p`,{children:a?`未设置日历计划;保持阶段结束时汇报。`:`No calendar schedule; report at validated stage boundaries.`})]})}function Lb({copy:e,field:t,id:n,onChange:r,value:i,timezone:a}){let o=e[t.key]?.label??t.label,s=!r;if(t.input_kind===`periodic_report_schedule`)return(0,B.jsx)(Ib,{id:n,value:i,timezone:a,onChange:r?e=>r(t.key,e):void 0});if(t.input_kind===`boolean`)return(0,B.jsxs)(`label`,{className:`is-boolean`,htmlFor:n,children:[(0,B.jsx)(`span`,{children:o}),(0,B.jsx)(`input`,{checked:i===!0,id:n,onChange:r?e=>r(t.key,e.target.checked):void 0,readOnly:s,role:`switch`,type:`checkbox`})]});if(t.input_kind===`select`)return(0,B.jsxs)(`label`,{htmlFor:n,children:[(0,B.jsx)(`span`,{children:o}),(0,B.jsxs)(`select`,{id:n,onChange:r?e=>r(t.key,e.target.value):void 0,value:typeof i==`string`?i:``,children:[(0,B.jsx)(`option`,{value:``}),(t.options??[]).map(e=>(0,B.jsx)(`option`,{value:e,children:e},e))]})]});if(t.input_kind===`string_list`)return(0,B.jsxs)(`label`,{htmlFor:n,children:[(0,B.jsx)(`span`,{children:o}),(0,B.jsx)(`textarea`,{id:n,onChange:r?e=>r(t.key,e.target.value.split(/\r?\n/u).filter(Boolean)):void 0,readOnly:s,rows:4,value:Array.isArray(i)?i.join(` +`):``})]});let c=t.input_kind===`number`;return(0,B.jsxs)(`label`,{htmlFor:n,children:[(0,B.jsx)(`span`,{children:o}),(0,B.jsx)(`input`,{id:n,max:t.maximum,min:t.minimum,onChange:r?e=>r(t.key,c?Number(e.target.value):e.target.value):void 0,readOnly:s,required:t.required,type:c?`number`:`text`,value:typeof i==`number`||typeof i==`string`?i:``})]})}function Rb({copy:e={},disabled:t=!1,editor:n,enabledAction:r,omitKeys:i=[],onChange:a,value:o}){let s=(0,z.useId)(),c=new Set(i);return(0,B.jsx)(`fieldset`,{className:`personal-capability-fields`,disabled:t,children:n.fields.filter(e=>!c.has(e.key)).map(t=>{let n=(0,B.jsx)(Lb,{copy:e,field:t,id:`${s}-${t.key.replace(/[^a-z0-9_-]/gi,`-`)}`,onChange:a,value:o[t.key],timezone:String(o.timezone??`UTC`)},t.key);return t.key===`enabled`&&t.input_kind===`boolean`?(0,B.jsxs)(`div`,{className:`personal-capability-enabled-row`,children:[n,r]},t.key):n})})}var zb={en:{todo_replan_cadence:{displayName:`Goal review cadence`,description:`Configures the Goal review cadence.`},change_quality_qualification:{displayName:`Change quality qualification`,description:`Prepares a provider-neutral review packet, allows at most one policy-authorized safe-fix pass, and can require an exact-diff receipt.`},explore_graph:{displayName:`Explore Graph`,description:`Organizes bounded exploration as a typed evidence graph so branches, findings, and synthesis remain inspectable.`},explore_harness:{displayName:`Explore Harness`,description:`Selects a capability-owned planning and research harness profile for bounded multi-step exploration.`},lark_event_inbox:{displayName:`Lark event inbox`,description:`Receives provider events through a local-private inbox binding before LoopX projects them into governed work.`,readOnlyReason:`This capability requires a local-private inbox binding. Manage it in Lark settings or through the capability CLI.`},lark_kanban_heartbeat_sync:{displayName:`Lark Kanban heartbeat sync`,description:`Synchronizes accepted LoopX work state to the configured Lark Kanban heartbeat surface.`},local_authority_shadow:{displayName:`Local authority shadow`,description:`Observes post-commit Todo and task-lease state through the shared authority contract without taking write authority.`},multi_subagent:{displayName:`Adaptive child capacity`,description:`Sets bounded child-agent capacity and the public-safe responsibility domains in which parallel work may be delegated.`},peer_task_coordination:{displayName:`Registered-peer task coordination`,description:`Routes explicitly scoped peer-owned work to one registered coordinator without granting cross-owner mutation authority.`},periodic_report:{displayName:`Periodic reports`,description:`Turns validated Goal stage progress into a frozen report and automatically delivers it through the configured Goal Channel with exact readback.`},pull_request_review:{displayName:`Pull-request review`,description:`Ranks the public GitHub PR review queue with a machine-level default; it never grants GitHub, Todo, push, or merge authority.`},reward_memory:{displayName:`Reward Memory experiment`,description:`Configures a reviewed local-private provider binding for Goal-scoped Agent recall and evidence-backed outcome learning.`}},"zh-CN":{todo_replan_cadence:{displayName:`Goal 复核周期`,description:`配置 Goal 的复核周期。`},change_quality_qualification:{displayName:`变更质量验证`,description:`生成与 Provider 无关的审阅包,最多允许一次策略授权的安全修复,并可要求精确 diff 回执。`},explore_graph:{displayName:`探索图谱`,description:`把有界探索组织为 typed 证据图,让探索分支、发现与综合结论都可检查、可追溯。`},explore_harness:{displayName:`探索 Harness`,description:`为有界的多步探索选择由能力负责的规划与研究 Harness profile。`},lark_event_inbox:{displayName:`飞书事件收件箱`,description:`通过本机私有收件箱接收 Provider 事件,再由 LoopX 将其投影为受治理的工作。`,readOnlyReason:`此能力依赖本机私有的收件箱绑定,请在飞书设置或 capability CLI 中管理。`},lark_kanban_heartbeat_sync:{displayName:`飞书看板心跳同步`,description:`把 LoopX 已接受的工作状态同步到配置好的飞书看板心跳界面。`},local_authority_shadow:{displayName:`本地 Authority 影子观测`,description:`通过共享 Authority contract 观测提交后的 Todo 与 task lease 状态,但不取得写入权。`},multi_subagent:{displayName:`自适应子 Agent 容量`,description:`限定子 Agent 容量与可公开的职责域,只有落在这些边界内的工作才能并行委派。`},peer_task_coordination:{displayName:`已注册 Peer 任务协调`,description:`把明确限定的 Peer 工作路由给一个已注册协调者,不授予跨 Owner 修改权限。`},periodic_report:{displayName:`周期报告`,description:`把经过验证的 Goal 阶段进展整理为冻结报告,并通过配置的 Goal Channel 自动发送和精确回读。`},pull_request_review:{displayName:`Pull-request Review`,description:`配置公开 GitHub PR 审阅队列的本机默认排序;不会授予 GitHub、Todo、push 或 merge 权限。`},reward_memory:{displayName:`Reward Memory 实验`,description:`为 Goal 内 Agent 的召回与证据化结果学习配置经过审阅的本机私有 Provider 绑定。`}}},Bb={en:{completed_todos:{label:`Completed Todos between Goal reviews`,description:`Machine default or explicit Goal override, from 1 to 5.`},allowed_domains:{label:`Allowed responsibility domains`,description:`Enter one bounded, public-safe domain per line.`},coordinator_agent_id:{label:`Coordinator Agent`,description:`Use an already registered Agent id; leave blank to disable coordination.`},enabled:{label:`Enabled`},model:{label:`Child model`,description:`For example gpt-5.6-luna. Blank clears the child model preference.`},reasoning_effort:{label:`Child reasoning effort`,description:`For example max; the host must support this model and effort.`},max_children:{label:`Maximum children`,description:`Hard upper bound for concurrently delegated child work.`},profile:{label:`Planner profile`,description:`Select one registered Explore Harness profile.`},profile_preset:{label:`Report profile`,description:`Capability-owned report profile, such as weekly-progress.`},review_priority:{label:`Review priority`,description:`Choose whether other developers' PRs or the authenticated reviewer's own PRs are ranked first.`},route_ref:{label:`Goal Channel route`,description:`Public route alias only; credentials and provider identifiers stay outside this form.`},safe_fix:{label:`Allow one bounded safe-fix pass`},strict_receipt:{label:`Require an exact-diff receipt`},timezone:{label:`Timezone`,description:`Use an IANA timezone, for example Asia/Shanghai.`},schedule:{label:`Calendar reports`,description:`Optional daily or weekly reports; no schedule preserves stage-only delivery.`},config_path:{label:`Local-private configuration path`,description:`Repo-relative ignored JSON under .loopx/config/. Leave blank to retain the current binding; the path is never returned.`},enabled_agents:{label:`Enabled Goal Agents`,description:`Enter one registered Goal-local Agent id per line. A private binding currently accepts exactly one Agent.`}},"zh-CN":{completed_todos:{label:`两次 Goal 复核间的已完成 Todo 数`,description:`可设置 1–5;机器默认值可被 Goal 显式覆盖。`},allowed_domains:{label:`允许的职责域`,description:`每行填写一个有边界、可公开的职责域。`},coordinator_agent_id:{label:`协调 Agent`,description:`填写一个已经注册的 Agent ID;留空表示关闭协调。`},enabled:{label:`启用`},model:{label:`子 Agent 模型`,description:`例如 gpt-5.6-luna;留空清除模型偏好。`},reasoning_effort:{label:`子 Agent 推理档位`,description:`例如 max;宿主须支持所选模型与档位。`},max_children:{label:`最大子 Agent 数`,description:`可同时委派的子任务硬上限。`},profile:{label:`规划 Profile`,description:`选择一个已注册的 Explore Harness profile。`},profile_preset:{label:`报告 Profile`,description:`由该能力管理的报告 profile,例如 weekly-progress。`},review_priority:{label:`审阅优先级`,description:`选择先排其他开发者的 PR,还是先排当前已认证审阅者自己的 PR。`},route_ref:{label:`Goal Channel 路由`,description:`只填写公开 route alias;凭据与 Provider 标识不会进入此表单。`},safe_fix:{label:`允许一次有界安全修复`},strict_receipt:{label:`要求精确 diff 回执`},timezone:{label:`时区`,description:`使用 IANA 时区,例如 Asia/Shanghai。`},schedule:{label:`日历汇报`,description:`可选每日或每周计划;未设置时保持阶段结束汇报。`},config_path:{label:`本机私有配置路径`,description:`填写 .loopx/config/ 下、相对仓库且被忽略的 JSON;留空保留当前绑定,路径不会被回传。`},enabled_agents:{label:`已启用的 Goal Agent`,description:`每行填写一个已注册的 Goal 内 Agent ID;私有绑定当前只接受一个 Agent。`}}};function Vb(e,t){let n=zb[t][e.capability_id];return n?{...e,display_name:n.displayName,description:n.description,configuration_editor:{...e.configuration_editor,...n.readOnlyReason?{read_only_reason:n.readOnlyReason}:{}}}:e}function Hb(e){return Bb[e]}Object.freeze(Object.keys(zb.en).sort());function Ub(e,t){return e.available_scopes.includes(t)&&(t!==`machine`||!!e.machine_namespace)&&e.configuration_editor.editable&&e.configuration_editor.writable_scopes.includes(t)}function Wb({values:e,t}){return(0,B.jsxs)(`details`,{className:`personal-capability-raw-values`,children:[(0,B.jsx)(`summary`,{children:t(`capabilities.rawJson`)}),(0,B.jsx)(`div`,{className:`personal-capability-value-grid`,children:e.map(({label:e,value:t})=>(0,B.jsxs)(`section`,{children:[(0,B.jsx)(`strong`,{children:e}),(0,B.jsx)(`pre`,{children:t?JSON.stringify(t,null,2):`—`})]},e))})]})}function Gb({source:e,t}){return e?(0,B.jsxs)(`p`,{className:`personal-capability-effective-source`,children:[(0,B.jsx)(Gm,{"aria-hidden":!0,size:15}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:t(`capabilities.effectiveSource`)}),t(`capabilities.source.${e}`)]})]}):null}function Kb({available:e,description:t,t:n}){return e?null:(0,B.jsxs)(`section`,{className:`personal-capability-editor-status is-read-only`,children:[(0,B.jsx)(Qm,{"aria-hidden":!0,size:18}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:n(`capabilities.readOnly`)}),(0,B.jsx)(`p`,{children:t})]})]})}function qb(e){return e.availability?.includes(`experimental`)?4:e.capability_id===`multi_subagent`?3:e.configuration_editor.writable_scopes.length===0||e.availability===`supported_explicit_opt_in`?2:e.availability===`supported_explicit_override`?0:1}function Jb(e,t){return[...e].sort((e,n)=>{let r=qb(e)-qb(n);if(r!==0)return r;let i=Vb(e,t),a=Vb(n,t);return i.display_name.localeCompare(a.display_name,t)||e.capability_id.localeCompare(n.capability_id)})}function Yb({capabilities:e,locale:t,onSelect:n,scope:r,selectedCapabilityId:i,t:a}){return(0,B.jsx)(`nav`,{"aria-label":a(r===`goal`?`capabilities.catalog`:`machine.capabilityCatalog`),className:`personal-capability-list`,tabIndex:0,children:Jb(e,t).map(e=>{let o=Vb(e,t);return(0,B.jsxs)(`button`,{"aria-current":i===o.capability_id?`page`:void 0,onClick:()=>n(o.capability_id),type:`button`,children:[(0,B.jsx)(`span`,{children:(0,B.jsx)(`strong`,{children:o.display_name})}),(0,B.jsx)(`em`,{children:a(o.available_scopes.includes(r)?r===`goal`?`capabilities.goalScope`:`capabilities.machineScope`:r===`machine`?`capabilities.goalScope`:`capabilities.machineScope`)})]},o.capability_id)})})}function Xb({capability:e,locale:t,source:n}){let{t:r}=Ji(),i=Vb(e,t);return(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`span`,{className:`personal-settings-icon`,children:(0,B.jsx)(Km,{"aria-hidden":!0,size:18})}),(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`div`,{className:`personal-capability-heading-row`,children:[(0,B.jsx)(`h2`,{children:i.display_name}),(0,B.jsx)(Gb,{source:n,t:r})]}),e.context_contribution&&(0,B.jsxs)(`details`,{className:`personal-capability-help`,"data-testid":`capability-context-phases`,children:[(0,B.jsx)(`summary`,{children:t===`zh-CN`?`主 Agent 协作指导`:`Coordinator workflow guidance`}),(0,B.jsx)(`p`,{children:t===`zh-CN`?`随能力开启。支持以下阶段;此处展示能力范围,不能证明某次运行已读取或采纳。`:`Enabled with this capability. These are supported phases, not proof that a run read or adopted the guidance.`}),(0,B.jsx)(`dl`,{children:e.context_contribution.supported_phases.map(e=>(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:(0,B.jsx)(`code`,{children:e})}),(0,B.jsx)(`dd`,{children:Zb[e][t===`zh-CN`?`zh`:`en`]})]},e))}),(0,B.jsx)(`p`,{children:t===`zh-CN`?`LoopX Turn 在请求与结果中提供上下文;原生工具入口由 LoopX skill 调用同一只读接口。执行与采纳需另看运行证据。`:`LoopX Turn includes context in requests and results. For native tools, the LoopX skill reads the same interface. Execution and adoption require run evidence.`})]}),(0,B.jsxs)(`details`,{className:`personal-capability-help`,children:[(0,B.jsx)(`summary`,{children:t===`zh-CN`?`配置说明`:`Configuration help`}),(0,B.jsx)(`p`,{children:i.description}),(0,B.jsx)(`dl`,{children:e.configuration_editor.fields.map(e=>{let n=Hb(t)[e.key],r=n?.description??e.description;return r?(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:n?.label??e.label}),(0,B.jsx)(`dd`,{children:r})]},e.key):null})})]},e.capability_id)]})]})}var Zb={before_plan:{zh:`规划前:识别独立问题并保留主 Agent 的核验与整合职责。`,en:`Before planning: identify independent questions and retain coordinator validation and integration.`},before_delegate:{zh:`委派前:明确子任务边界、模型偏好及预期证据。`,en:`Before delegation: specify task boundaries, model preferences and expected evidence.`},after_delegate_result:{zh:`回收后:核验结果,说明采纳决定并关联计划与成果。`,en:`After results: validate evidence, explain acceptance and link plans and deliverables.`}};function Qb({goalId:e,onApplied:t,selected:n,t:r}){let[i,a]=(0,z.useState)({busy:null,draft:{},partialWrite:null,preview:null}),[o,s]=(0,z.useState)(null),[c,l]=(0,z.useState)(`guided`),[u,d]=(0,z.useState)(``),f=(0,z.useMemo)(()=>n?Pb(n.configuration_editor,u):null,[n,u]),p=c===`guided`||f!==null;(0,z.useEffect)(()=>{l(`guided`),d(``),a({busy:null,draft:Nb(n?.configuration_editor??{fields:[]},n?.current??n?.effective_configuration?.configuration??n?.default,n?.default),partialWrite:null,preview:null}),s(null)},[n]);async function m(t){if(!(!n||i.busy||!p)){a(e=>({...e,busy:`preview`,partialWrite:null})),s(null);try{let r=await Og(e,n.capability_id,t);a(e=>({...e,preview:r}))}catch(e){s(e instanceof Error?e.message:r(`capabilities.previewFailed`))}finally{a(e=>({...e,busy:null}))}}}async function h(){if(!(!n||!i.preview||i.busy||!p)){a(e=>({...e,busy:`apply`})),s(null);try{let r=Nb(n.configuration_editor,i.draft,n.default),o=await kg(e,n.capability_id,i.preview.action===`delete`?null:r,i.preview.plan_revision);a(e=>({...e,partialWrite:o.status===`partial_write`?o:null,preview:null})),o.status!==`partial_write`&&t()}catch(e){a(e=>({...e,preview:null})),s(e instanceof Error?e.message:r(`capabilities.applyFailed`))}finally{a(e=>({...e,busy:null}))}}}function g(e,t){a(r=>({...r,draft:n?.capability_id===`periodic_report`?Fb(r.draft,e,t):{...r.draft,[e]:t},preview:null})),s(null)}function _(e){if(!n||i.busy)return;d(e);let t=Pb(n.configuration_editor,e);a(e=>({...e,preview:null,draft:t?Nb(n.configuration_editor,t,n.default):e.draft})),s(null)}function v(){i.busy||!p||(c===`guided`&&d(JSON.stringify(i.draft,null,2)),l(c===`guided`?`json`:`guided`),a(e=>({...e,preview:null})))}return{apply:h,changeDraft:g,changeJson:_,changeMode:v,editorMode:c,jsonDraft:u,jsonValid:p,error:o,mutation:i,preview:m}}function $b({mutationError:e,onApplied:t,partialWrite:n,preview:r}){let{t:i}=Ji();return(0,B.jsxs)(B.Fragment,{children:[e?(0,B.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:e}):null,n?(0,B.jsxs)(`section`,{"aria-live":`polite`,className:`personal-capability-recovery`,children:[(0,B.jsx)(Qm,{"aria-hidden":!0,size:18}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:i(`capabilities.partialWrite`)}),(0,B.jsx)(`p`,{children:i(`capabilities.partialWriteDescription`)}),(0,B.jsx)(`small`,{children:n.recommended_action})]}),(0,B.jsxs)(`button`,{onClick:t,type:`button`,children:[(0,B.jsx)(Lm,{"aria-hidden":!0,size:15}),i(`capabilities.refreshSource`)]})]}):null,r?(0,B.jsxs)(`section`,{className:`personal-capability-preview`,"aria-label":i(`capabilities.preview`),children:[(0,B.jsx)(`strong`,{children:i(`capabilities.preview`)}),(0,B.jsx)(`span`,{children:i(`machine.action.${r.action}`)}),(0,B.jsx)(`small`,{children:i(`capabilities.previewLocked`)})]}):null]})}function ex({catalog:e,goalId:t,onApplied:n}){let{locale:r,t:i}=Ji(),a=(0,z.useMemo)(()=>Jb(e.capabilities,r),[e.capabilities,r]),[o,s]=(0,z.useState)(()=>a[0]?.capability_id??``),c=(0,z.useMemo)(()=>a.find(e=>e.capability_id===o)??a[0],[a,o]),l=(0,z.useMemo)(()=>c?Vb(c,r):void 0,[r,c]),{apply:u,changeDraft:d,changeJson:f,changeMode:p,editorMode:m,jsonDraft:h,jsonValid:g,error:_,mutation:v,preview:y}=Qb({goalId:t,onApplied:n,selected:l,t:i}),{busy:b,draft:x,partialWrite:S,preview:C}=v;if(!c||!l)return(0,B.jsx)(`p`,{className:`personal-capability-empty`,children:i(`capabilities.empty`)});let w=l.available_scopes.includes(`goal`),T=Ub(l,`goal`),E=l.configuration_editor.read_only_reason??i(w?`capabilities.previewOnly`:`capabilities.machineOnly`);async function D(){if(!l||!T||b||!g)return;let e=Nb(l.configuration_editor,x,l.default);await y(e)}async function O(){!T||b||await y(null)}return(0,B.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,B.jsx)(Yb,{capabilities:e.capabilities,locale:r,onSelect:s,scope:`goal`,selectedCapabilityId:l.capability_id,t:i}),(0,B.jsxs)(`article`,{"aria-label":l.display_name,className:`personal-capability-detail`,tabIndex:0,children:[(0,B.jsx)(Xb,{capability:c,locale:r,source:l.effective_configuration?.source}),(0,B.jsx)(Kb,{available:T,t:i,description:E}),T?(0,B.jsxs)(B.Fragment,{children:[m===`json`||!l.configuration_editor.fields.some(e=>e.key===`enabled`&&e.input_kind===`boolean`)?(0,B.jsx)(`div`,{className:`personal-capability-editor-mode`,children:(0,B.jsxs)(`button`,{disabled:!!b||!g,onClick:p,type:`button`,children:[(0,B.jsx)(cm,{"aria-hidden":!0,size:14}),i(m===`guided`?`machine.editJson`:`machine.backToForm`)]})}):null,m===`guided`?(0,B.jsx)(`section`,{className:`personal-capability-field-summary`,children:(0,B.jsx)(Rb,{disabled:!!b,copy:Hb(r),editor:l.configuration_editor,onChange:d,value:x,enabledAction:(0,B.jsxs)(`button`,{className:`personal-capability-edit-json`,onClick:p,type:`button`,children:[(0,B.jsx)(cm,{"aria-hidden":!0,size:14}),i(`machine.editJson`)]})})}):(0,B.jsxs)(`label`,{className:`personal-capability-json-editor`,htmlFor:`goal-configuration-json`,children:[(0,B.jsx)(`span`,{children:i(`capabilities.jsonConfiguration`)}),(0,B.jsx)(`textarea`,{id:`goal-configuration-json`,"aria-describedby":`goal-configuration-json-help`,disabled:!!b,onChange:e=>f(e.target.value),rows:12,spellCheck:!1,value:h}),(0,B.jsx)(`small`,{id:`goal-configuration-json-help`,children:i(`capabilities.jsonHelp`)}),g?null:(0,B.jsx)(`span`,{className:`personal-machine-validation`,role:`alert`,children:i(`capabilities.jsonInvalid`)})]})]}):null,(0,B.jsx)($b,{mutationError:_,onApplied:n,partialWrite:S,preview:C}),T?(0,B.jsxs)(`footer`,{className:`personal-capability-actions`,children:[l.current&&l.available_scopes.includes(`machine`)?(0,B.jsx)(`button`,{disabled:!!b||!g,onClick:()=>void O(),type:`button`,children:i(`capabilities.restoreInheritance`)}):null,(0,B.jsx)(`button`,{disabled:!!b||!g,onClick:()=>void D(),type:`button`,children:i(b===`preview`?`common.loading`:`capabilities.previewChanges`)}),(0,B.jsx)(`button`,{className:`is-primary`,disabled:!!b||!C||!g,onClick:()=>void u(),type:`button`,children:i(b===`apply`?`common.loading`:`capabilities.applyPreview`)})]}):null,(0,B.jsx)(Wb,{values:[{label:i(`capabilities.goalValue`),value:l.current},{label:i(l.machine_current?`capabilities.machineValue`:`capabilities.defaultValue`),value:l.machine_current??l.default}],t:i},c.capability_id)]})]})}function tx({goalId:e}){let{t}=Ji(),[n,r]=(0,z.useState)(null),[i,a]=(0,z.useState)(null),[o,s]=(0,z.useState)(!1);function c(){e&&(s(!0),a(null),Dg(e).then(r).catch(e=>a(e instanceof Error?e.message:t(`capabilities.loadFailed`))).finally(()=>s(!1)))}return(0,z.useEffect)(c,[e]),e?o&&!n?(0,B.jsxs)(`p`,{"aria-live":`polite`,className:`personal-capability-empty`,children:[(0,B.jsx)(wm,{className:`personal-spin`,size:18}),t(`capabilities.loading`)]}):i?(0,B.jsxs)(`section`,{className:`personal-capability-error`,role:`alert`,children:[(0,B.jsx)(Qm,{"aria-hidden":!0,size:18}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`strong`,{children:t(`capabilities.loadFailed`)}),(0,B.jsx)(`small`,{children:i})]}),(0,B.jsxs)(`button`,{onClick:c,type:`button`,children:[(0,B.jsx)(Lm,{"aria-hidden":!0,size:15}),t(`capabilities.retry`)]})]}):n?(0,B.jsxs)(`section`,{className:`personal-capability-settings`,"data-revision":n.revision,children:[(0,B.jsxs)(`details`,{className:`personal-capability-scope-note`,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(Gm,{"aria-hidden":!0,size:17}),t(`capabilities.atomicOverride`)]}),(0,B.jsx)(`p`,{children:t(`capabilities.atomicOverrideDescription`)})]}),(0,B.jsx)(ex,{catalog:n.capability_catalog,goalId:e,onApplied:c})]}):null:(0,B.jsx)(`p`,{className:`personal-capability-empty`,children:t(`capabilities.chooseGoal`)})}function nx(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function rx(e,t){let n=t?.machine_namespace;return n?e?.machine_configuration?.namespaces[n]:void 0}function ix(e,t,n){return{...nx(e.default),...nx(t),...n}}function ax(e,t){for(let n of e.configuration_editor.fields){let e=t[n.key];if(n.required&&(e==null||e===``))return!1}return e.capability_id===`periodic_report`&&t.enabled===!0?!!(String(t.profile_preset??``).trim()&&String(t.route_ref??``).trim()&&String(t.timezone??``).trim()):!0}function ox(e){try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}function sx(e){return e?e===`absent`?e:e.replace(/^sha256:/,``).slice(0,12):`—`}function cx(){let{locale:e,t}=Ji(),[n,r]=(0,z.useState)(null),[i,a]=(0,z.useState)(``),[o,s]=(0,z.useState)({}),[c,l]=(0,z.useState)(`{}`),[u,d]=(0,z.useState)(`guided`),[f,p]=(0,z.useState)(null),[m,h]=(0,z.useState)(`upsert`),[g,_]=(0,z.useState)(null),[v,y]=(0,z.useState)(null),[b,x]=(0,z.useState)(`load`),[S,C]=(0,z.useState)(null),[w,T]=(0,z.useState)(null),E=(0,z.useMemo)(()=>Jb(n?.capability_catalog.capabilities??[],e),[n,e]),D=E.find(e=>e.capability_id===i)??E.find(e=>Ub(e,`machine`))??E[0],O=D?Vb(D,e):void 0,ee=rx(n,O),te=!!(O?.machine_namespace&&ee),ne=!!(O&&Ub(O,`machine`)),k=(0,z.useMemo)(()=>ox(c),[c]),A=O?u===`json`?k:ix(O,ee,o):null,j=!!(O&&(u===`json`?k:ax(O,A??{})));async function M(){r(await Eg())}(0,z.useEffect)(()=>{let e=!0;return Eg().then(t=>{e&&r(t)}).catch(n=>{e&&C(n instanceof Error?n.message:t(`machine.loadError`))}).finally(()=>{e&&x(null)}),()=>{e=!1}},[t]),(0,z.useEffect)(()=>{if(!O)return;let e=rx(n,O),t=Nb(O.configuration_editor,e??O.default,O.default),r=ix(O,e,t);s(t),l(JSON.stringify(r,null,2)),d(ne?`guided`:`json`),p(null),h(`upsert`),y(null)},[n,i,e]);function N(e,t){s(n=>O?.capability_id===`periodic_report`?Fb(n,e,t):{...n,[e]:t}),p(null),h(`upsert`),C(null),T(null)}function P(e){if(O){if(e===`json`)l(JSON.stringify(ix(O,ee,o),null,2));else if(k)s(Nb(O.configuration_editor,k,O.default));else{C(t(`machine.jsonInvalid`));return}d(e),p(null),h(`upsert`),C(null)}}async function F(){if(!(!ne||!O?.machine_namespace||!A||!j||b)){x(`preview`),C(null),T(null);try{h(`upsert`),p(await Ag(O.machine_namespace,A))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function re(){if(!(!ne||!O?.machine_namespace||!te||b)){x(`preview`),C(null),T(null);try{h(`remove`),p(await Mg(O.machine_namespace))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function ie(){if(!ne||!O?.machine_namespace||!f||b||m===`upsert`&&!A)return;x(`apply`),C(null);let e=m;try{let n=e===`remove`?await Ng(O.machine_namespace,f.plan_revision):await jg(O.machine_namespace,A,f.plan_revision);_(n),p(null),h(`upsert`),y(null),await M(),T(n.status===`applied`?t(e===`remove`?`machine.removed`:`machine.applied`):t(`machine.unchanged`))}catch(e){p(null),h(`upsert`),C(e instanceof Error?e.message:t(`machine.applyError`))}finally{x(null)}}async function I(){if(!(!g?.transaction_id||b)){x(`rollback-preview`),C(null);try{y(await Pg(g.transaction_id))}catch(e){C(e instanceof Error?e.message:t(`machine.rollbackError`))}finally{x(null)}}}async function ae(){if(!(!g?.transaction_id||!v||b)){x(`rollback`),C(null);try{await Fg(g.transaction_id,v.plan_revision),_(null),y(null),p(null),await M(),T(t(`machine.rolledBack`))}catch(e){y(null),C(e instanceof Error?e.message:t(`machine.rollbackError`))}finally{x(null)}}}return b===`load`?(0,B.jsx)(`div`,{className:`personal-machine-loading`,role:`status`,children:t(`common.loading`)}):O?(0,B.jsxs)(`section`,{className:`personal-capability-settings`,"data-revision":n?.revision,children:[(0,B.jsxs)(`details`,{className:`personal-capability-scope-note`,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(Gm,{"aria-hidden":!0,size:17}),t(`machine.liveDefault`)]}),(0,B.jsx)(`p`,{children:t(`machine.liveDefaultDescription`)})]}),(0,B.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,B.jsx)(Yb,{capabilities:E,locale:e,onSelect:a,scope:`machine`,selectedCapabilityId:O.capability_id,t}),(0,B.jsxs)(`article`,{"aria-label":O.display_name,className:`personal-capability-detail`,tabIndex:0,children:[(0,B.jsx)(Xb,{capability:D,locale:e,source:O.available_scopes.includes(`machine`)?te?`machine_default`:`capability_default`:void 0}),(0,B.jsx)(Kb,{available:ne,t,description:O.available_scopes.includes(`machine`)?t(`machine.editorUnavailableDescription`):t(`machine.goalOnly`)}),O.capability_id===`periodic_report`?(0,B.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,B.jsx)(Gm,{"aria-hidden":!0,size:18}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:ee?.schedule?e===`zh-CN`?`日历与阶段汇报`:`Calendar and stage reports`:t(`machine.periodicReportActivation`)}),(0,B.jsx)(`p`,{children:ee?.schedule?ee.enabled===!0?e===`zh-CN`?`已配置日历计划,由现有唤醒检查;是否送达请核对报告回执。`:`A calendar schedule is configured and checked by existing wakes. Verify delivery in the report receipt.`:e===`zh-CN`?`日历计划已保存;启用此能力后才会检查和投递。`:`The schedule is saved; enable this capability to check and deliver reports.`:t(`machine.periodicReportActivationDescription`)})]})]}):null,O.capability_id===`change_quality_qualification`?(0,B.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,B.jsx)(Gm,{"aria-hidden":!0,size:18}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:t(`machine.changeQualityActivation`)}),(0,B.jsx)(`p`,{children:t(`machine.changeQualityActivationDescription`)})]})]}):null,O.capability_id===`todo_replan_cadence`?(0,B.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,B.jsx)(Gm,{"aria-hidden":!0,size:18}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:t(`machine.replanCadenceActivation`)}),(0,B.jsx)(`p`,{children:t(`machine.replanCadenceActivationDescription`)})]})]}):null,O.capability_id===`pull_request_review`?(0,B.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,B.jsx)(Gm,{"aria-hidden":!0,size:18}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:e===`zh-CN`?`只改变队列排序`:`Queue ordering only`}),(0,B.jsx)(`p`,{children:e===`zh-CN`?`默认先审阅其他开发者的 PR;选择 owner-first 才会优先当前已认证审阅者自己的 PR。此配置不会发布 review、写 Todo、push 或 merge。`:`The default reviews other developers' PRs first; choose owner-first only when the authenticated reviewer's own PRs should lead. This setting never posts a review, writes Todos, pushes, or merges.`})]})]}):null,ne?(0,B.jsxs)(B.Fragment,{children:[u===`json`||!O.configuration_editor.fields.some(e=>e.key===`enabled`&&e.input_kind===`boolean`)?(0,B.jsx)(`div`,{className:`personal-capability-editor-mode`,children:(0,B.jsxs)(`button`,{onClick:()=>P(u===`guided`?`json`:`guided`),type:`button`,children:[(0,B.jsx)(cm,{"aria-hidden":!0,size:14}),t(u===`guided`?`machine.editJson`:`machine.backToForm`)]})}):null,u===`guided`?(0,B.jsxs)(`section`,{className:`personal-capability-field-summary`,children:[(0,B.jsx)(Rb,{copy:Hb(e),disabled:!!b,editor:O.configuration_editor,onChange:N,value:o,enabledAction:(0,B.jsxs)(`button`,{className:`personal-capability-edit-json`,onClick:()=>P(`json`),type:`button`,children:[(0,B.jsx)(cm,{"aria-hidden":!0,size:14}),t(`machine.editJson`)]})}),j?null:(0,B.jsx)(`p`,{className:`personal-machine-validation`,role:`alert`,children:t(`machine.requiredFields`)})]}):(0,B.jsxs)(`label`,{className:`personal-capability-json-editor`,htmlFor:`machine-configuration-json`,children:[(0,B.jsx)(`span`,{children:t(`machine.jsonConfiguration`)}),(0,B.jsx)(`textarea`,{"aria-describedby":`machine-configuration-json-help`,disabled:!!b,id:`machine-configuration-json`,onChange:e=>{l(e.target.value),p(null),C(null)},rows:12,spellCheck:!1,value:c}),(0,B.jsx)(`small`,{id:`machine-configuration-json-help`,children:t(`machine.jsonConfigurationHelp`)}),k?null:(0,B.jsx)(`span`,{className:`personal-machine-validation`,role:`alert`,children:t(`machine.jsonInvalid`)})]})]}):null,S?(0,B.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:S}):null,w?(0,B.jsxs)(`p`,{className:`personal-machine-notice`,role:`status`,"aria-live":`polite`,children:[(0,B.jsx)(tm,{"aria-hidden":!0,size:16}),w]}):null,f?(0,B.jsxs)(`section`,{"aria-label":t(`machine.preview`),className:`personal-machine-preview`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`strong`,{children:t(`machine.preview`)}),(0,B.jsx)(`span`,{children:t(`machine.action.${f.action}`)})]}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`machine.currentRevision`)}),(0,B.jsx)(`dd`,{title:f.current_revision,children:sx(f.current_revision)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`machine.desiredRevision`)}),(0,B.jsx)(`dd`,{title:f.desired_revision,children:sx(f.desired_revision)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:t(`machine.changedNamespaces`)}),(0,B.jsx)(`dd`,{children:f.changed_namespaces.join(`, `)||t(`common.none`)})]})]}),(0,B.jsx)(`p`,{children:t(`machine.previewLocked`)})]}):null,g?.rollback_available&&g.transaction_id?(0,B.jsxs)(`section`,{className:`personal-machine-rollback`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:t(`machine.rollbackAvailable`)}),(0,B.jsx)(`p`,{children:t(v?`machine.rollbackPreviewDescription`:`machine.rollbackDescription`)})]}),(0,B.jsxs)(`button`,{className:`personal-secondary-action`,disabled:!!b||!!(v&&!v.rollback_allowed),onClick:()=>void(v?ae():I()),type:`button`,children:[(0,B.jsx)(Rm,{"aria-hidden":!0,size:15}),t(b===`rollback`||b===`rollback-preview`?`common.loading`:v?`machine.confirmRollback`:`machine.previewRollback`)]})]}):null,ne?(0,B.jsxs)(`footer`,{className:`personal-capability-actions`,children:[te?(0,B.jsxs)(`button`,{className:`is-danger`,disabled:!!b,onClick:()=>void re(),type:`button`,children:[(0,B.jsx)(Zm,{"aria-hidden":!0,size:15}),t(`machine.previewRemoval`)]}):null,(0,B.jsx)(`button`,{disabled:!!b||!j,onClick:()=>void F(),type:`button`,children:t(b===`preview`?`common.loading`:`machine.previewChanges`)}),(0,B.jsx)(`button`,{className:`is-primary`,disabled:!!b||!f,onClick:()=>void ie(),type:`button`,children:t(b===`apply`?`common.loading`:`machine.applyPreview`)})]}):null,O.available_scopes.includes(`machine`)?(0,B.jsx)(Wb,{values:[{label:t(`machine.currentValue`),value:ee},{label:t(`capabilities.defaultValue`),value:O.default}],t},O.capability_id):null]})]})]}):(0,B.jsx)(`p`,{className:`personal-capability-empty`,children:t(`machine.capabilityEmpty`)})}var lx={appearance:jm,capabilities:Km,language:xm,lark:Wm,machine:Hm};function ux({focusGoalConnection:e=!1,goals:t,initialGoalId:n,initialTab:r=`lark`,onChanged:i,onClose:a,onThemeChange:o,theme:s}){let{locale:c,setLocale:l,t:u}=Ji(),[d,f]=(0,z.useState)(r),p=[...n?[{key:`capabilities`,label:u(`capabilities.title`)}]:[],{key:`machine`,label:u(`machine.title`)},{key:`lark`,label:`Lark`},{key:`appearance`,label:u(`settings.appearance`)},{key:`language`,label:u(`settings.language`)}],m=[{label:u(`settings.languageEnglish`),value:`en`},{label:u(`settings.languageSimplifiedChinese`),value:`zh-CN`}],h={appearance:{title:u(`settings.appearance`)},capabilities:{title:u(`capabilities.title`)},language:{title:u(`settings.language`)},lark:{title:`Lark`},machine:{title:u(`machine.title`)}}[d];return(0,B.jsxs)(`section`,{"aria-label":u(`settings.title`),className:`personal-settings-page`,"data-pw-theme":s,children:[(0,B.jsxs)(`aside`,{className:`personal-settings-sidebar`,children:[(0,B.jsxs)(`button`,{className:`personal-settings-back`,onClick:a,type:`button`,children:[(0,B.jsx)(Kp,{size:17}),(0,B.jsx)(`span`,{children:u(`settings.back`)})]}),(0,B.jsxs)(`div`,{className:`personal-settings-title`,children:[(0,B.jsx)(`small`,{children:u(`settings.eyebrow`)}),(0,B.jsx)(`strong`,{children:u(`settings.title`)})]}),(0,B.jsx)(`nav`,{"aria-label":u(`settings.categories`),className:`personal-settings-tabs`,children:p.map(e=>{let t=lx[e.key];return(0,B.jsxs)(`button`,{"aria-current":d===e.key?`page`:void 0,onClick:()=>f(e.key),type:`button`,children:[(0,B.jsx)(t,{size:17}),(0,B.jsx)(`span`,{children:(0,B.jsx)(`strong`,{children:e.label})})]},e.key)})})]}),(0,B.jsxs)(`main`,{className:`personal-settings-body`,children:[(0,B.jsx)(`header`,{className:`personal-settings-header`,children:(0,B.jsx)(`div`,{children:(0,B.jsx)(`h1`,{children:h.title})})}),d===`lark`?(0,B.jsx)(jb,{embedded:!0,focusGoalConnection:e,goals:t,initialGoalId:n,onChanged:i,onClose:a}):null,d===`machine`?(0,B.jsx)(cx,{}):null,d===`capabilities`?(0,B.jsx)(tx,{goalId:n}):null,d===`appearance`?(0,B.jsxs)(`section`,{className:`personal-detail-card personal-appearance-settings`,children:[(0,B.jsx)(`small`,{children:u(`settings.workspaceDisplay`)}),(0,B.jsx)(`h3`,{children:u(`settings.appearance`)}),(0,B.jsxs)(`div`,{className:`personal-settings-choice-group`,role:`radiogroup`,"aria-label":u(`settings.workspaceTheme`),children:[(0,B.jsxs)(`button`,{"aria-checked":s===`loopx`,onClick:()=>o(`loopx`),role:`radio`,type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-settings-theme-swatch is-loopx`}),(0,B.jsx)(`strong`,{children:u(`settings.themeLoopx`)})]}),(0,B.jsxs)(`button`,{"aria-checked":s===`paper`,onClick:()=>o(`paper`),role:`radio`,type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-settings-theme-swatch is-paper`}),(0,B.jsx)(`strong`,{children:u(`settings.themeDefault`)})]}),(0,B.jsxs)(`button`,{"aria-checked":s===`brutal`,onClick:()=>o(`brutal`),role:`radio`,type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-settings-theme-swatch is-brutal`}),(0,B.jsx)(`strong`,{children:u(`settings.themeHighContrast`)})]})]})]}):null,d===`language`?(0,B.jsxs)(`section`,{className:`personal-settings-card`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`span`,{className:`personal-settings-icon`,children:(0,B.jsx)(xm,{size:18})}),(0,B.jsx)(`div`,{children:(0,B.jsx)(`h2`,{children:u(`settings.language`)})})]}),(0,B.jsx)(`div`,{"aria-label":u(`settings.language`),className:`personal-language-options`,role:`radiogroup`,children:m.map(e=>(0,B.jsxs)(`button`,{"aria-checked":c===e.value,className:c===e.value?`is-selected`:``,onClick:()=>l(e.value),role:`radio`,type:`button`,children:[(0,B.jsx)(`span`,{children:(0,B.jsx)(`strong`,{children:e.label})}),c===e.value?(0,B.jsx)(tm,{"aria-hidden":!0,size:17}):null]},e.value))})]}):null]})]})}var dx=`loopx-pw-theme`,fx=`loopx`;function px(){try{let e=window.localStorage.getItem(dx);return e===`loopx`||e===`paper`||e===`brutal`?e:fx}catch{return fx}}function mx(e){try{window.localStorage.setItem(dx,e)}catch{}}function hx({drawer:e,drawerMode:t=`panel`,drawerOpen:n,main:r,mobileSidebarOpen:i=!1,onCloseMobileSidebar:a,sidebar:o,theme:s=`loopx`}){let{t:c}=Ji(),l=(0,z.useRef)(null),u=(0,z.useRef)(null);return(0,z.useEffect)(()=>{if(!i)return;u.current=document.activeElement instanceof HTMLElement?document.activeElement:null;let e=l.current?.querySelectorAll(`button:not([disabled]), a[href], select:not([disabled]), textarea:not([disabled]), input:not([disabled]), [tabindex]:not([tabindex="-1"])`);e?.[0]?.focus();function t(t){if(t.key!==`Tab`||!e?.length)return;let n=e[0],r=e[e.length-1];t.shiftKey&&document.activeElement===n?(t.preventDefault(),r.focus()):!t.shiftKey&&document.activeElement===r&&(t.preventDefault(),n.focus())}return document.addEventListener(`keydown`,t),()=>{document.removeEventListener(`keydown`,t),u.current?.focus(),u.current=null}},[i]),(0,B.jsxs)(`section`,{className:`personal-workspace-shell${n?` has-drawer`:``}${n&&t.startsWith(`inspector`)?` has-task-inspector`:``}${t===`inspector-full`?` is-task-inspector-full`:``}${i?` mobile-sidebar-open`:``}`,"data-pw-theme":s,children:[i?(0,B.jsx)(`button`,{"aria-hidden":!0,className:`personal-sidebar-backdrop`,onClick:a,tabIndex:-1,type:`button`}):null,(0,B.jsx)(`aside`,{"aria-label":i?c(`header.goalNavigation`):void 0,"aria-modal":i?!0:void 0,className:`personal-workspace-sidebar`,"data-workspace-sidebar":!0,ref:l,role:i?`dialog`:void 0,children:(0,B.jsxs)(`div`,{className:`personal-workspace-sidebar-inner`,children:[i?(0,B.jsxs)(`button`,{className:`personal-sr-only`,onClick:a,type:`button`,children:[c(`common.close`),` `,c(`header.goalNavigation`)]}):null,o]})}),(0,B.jsx)(`main`,{"aria-hidden":i||void 0,className:`personal-workspace-main`,inert:i||void 0,children:r}),n?(0,B.jsx)(`aside`,{className:`personal-workspace-drawer`,"data-context-drawer":!0,"data-drawer-mode":t,children:e}):null]})}function gx(e){let t=e.match(/(?:下一步|建议|行动项|待办)[::\s]*([^\n]+)/u),n=t?t[1]:e;n=n.replace(/```[\s\S]*?```/g,``).replace(/`([^`]+)`/g,`$1`).replace(/\[([^\]]+)\]\([^)]+\)/g,`$1`).replace(/[#*~_>]/g,``).replace(/^[-*•\d+.\s]+/u,``).replace(/^(好的|没问题|收到|建议如下|任务如下|分析如下|结论[::])[\s,,::]*/u,``);let r=(n.split(/\r?\n/).map(e=>e.trim()).filter(Boolean)[0]||n).replace(/\s+/gu,` `).trim();return Array.from(r).slice(0,120).join(``)}function _x(e){let t=new Map;return e.forEach(e=>{let n=e.fields.find(e=>e.key===`todo_id`)?.value??``,r=[e.actionKind,e.goalId??``,n,e.title].join(`:`);t.set(r,e)}),[...t.values()]}function vx(e,t,n){if(!e)return n(`home.noFirstActivity`);let r=new Date(e);if(Number.isNaN(r.getTime()))return e;let i=new Date,a=new Intl.DateTimeFormat(t,{hour:`2-digit`,minute:`2-digit`,hour12:!1}).format(r);return r.toDateString()===i.toDateString()?n(`home.todayAt`,{time:a}):new Intl.DateTimeFormat(t,{month:`numeric`,day:`numeric`,hour:`2-digit`,minute:`2-digit`,hour12:!1}).format(r)}function yx({goals:e,onSelectGoal:t,onRetry:n,systemHealth:r}){let{locale:i,t:a}=Ji(),o=e.filter(e=>e.activationState===`active`),s=o.filter(e=>e.loadState===`error`).length,c=[{key:`needs_you`,label:a(`home.lane.needsYou`)},{key:`running`,label:a(`home.lane.running`)},{key:`observing`,label:a(`home.lane.observing`)},{key:`scheduled`,label:a(`home.lane.scheduled`)}],l=Object.fromEntries(c.map(e=>[e.key,[]])),u=[],d=[];e.filter(e=>!e.loadState).forEach(e=>{let t=_y(e);t===`history`?u.push(e):t===`stopped`?d.push(e):l[t].push(e)});let f=e=>(0,B.jsxs)(`button`,{className:`personal-home-goal-card`,"data-goal-state":e.loadState??e.state,"data-load-error":e.loadError,onClick:()=>t(e.goalId),type:`button`,children:[(0,B.jsxs)(`span`,{className:`personal-home-goal-meta`,children:[(0,B.jsx)(`i`,{}),e.agentLaneCount&&e.agentLaneCount>1?a(`header.workAgentCount`,{count:e.agentLaneCount}):e.agentLabel??e.agentId]}),(0,B.jsx)(`strong`,{children:e.title}),(0,B.jsx)(`p`,{children:e.loadError?a(`startup.error.${e.loadError}`):e.needsYou??e.nextSentence}),(0,B.jsxs)(`footer`,{children:[(0,B.jsx)(`span`,{children:e.loadState?a(e.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(e.state,i)}),(0,B.jsx)(`small`,{title:e.latestActivity,children:e.loadState?``:e.latestActivity?vx(e.latestActivity,i,a):e.agentTodos.length?a(`home.taskCount`,{count:e.agentTodos.length}):a(`home.noActivity`)})]})]},e.goalId);return(0,B.jsxs)(`section`,{"aria-label":a(`home.workspace`),className:`personal-home-board`,children:[r&&(!r.ok||r.issues.length>0||r.freshnessWarning)?(0,B.jsxs)(`div`,{className:`personal-system-health-banner`,role:`alert`,children:[(0,B.jsxs)(`div`,{className:`personal-system-health-header`,children:[(0,B.jsx)(am,{size:15}),(0,B.jsx)(`strong`,{children:a(`home.systemHealth`,{summary:r.summary})}),r.freshnessWarning?(0,B.jsxs)(`small`,{children:[`(`,r.freshnessWarning,`)`]}):null]}),r.issues.length>0?(0,B.jsx)(`ul`,{className:`personal-system-health-issues`,children:r.issues.map((e,t)=>(0,B.jsx)(`li`,{children:e},t))}):null]}):null,o.some(e=>e.loadState)?(0,B.jsxs)(`section`,{className:`personal-home-lane`,"aria-live":`polite`,children:[(0,B.jsx)(`header`,{children:a(`startup.progress`,{loaded:o.filter(e=>!e.loadState).length,total:o.length})}),s?(0,B.jsxs)(`div`,{className:`personal-stopped-goal-error`,role:`status`,children:[(0,B.jsx)(`span`,{children:a(`startup.failedCount`,{count:s})}),(0,B.jsx)(`button`,{className:`min-h-11 rounded-md border px-3 py-2 text-sm`,onClick:n,type:`button`,children:a(`startup.retryFailed`)})]}):null,o.filter(e=>e.loadState).map(f)]}):null,(0,B.jsx)(`div`,{className:`personal-home-lanes`,children:c.map(e=>(0,B.jsxs)(`section`,{className:`personal-home-lane is-${e.key}`,"data-testid":`personal-home-lane-${e.key}`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`i`,{}),e.label]}),(0,B.jsx)(`b`,{children:l[e.key].length})]}),(0,B.jsx)(`div`,{className:`personal-home-lane-list`,children:l[e.key].length?l[e.key].map(f):(0,B.jsx)(`span`,{className:`personal-home-empty`,children:a(`home.empty`)})})]},e.key))}),(0,B.jsxs)(`details`,{className:`personal-home-history`,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(`span`,{children:a(`home.history`)}),(0,B.jsx)(`b`,{children:u.length}),(0,B.jsx)(`small`,{children:a(`home.completedGoals`)})]}),(0,B.jsx)(`div`,{children:u.length?u.map(f):(0,B.jsx)(`span`,{className:`personal-home-empty`,children:a(`home.noCompletedGoals`)})})]}),d.length?(0,B.jsxs)(`details`,{className:`personal-home-history is-stopped`,children:[(0,B.jsxs)(`summary`,{children:[(0,B.jsx)(`span`,{children:a(`home.stopped`)}),(0,B.jsx)(`b`,{children:d.length}),(0,B.jsx)(`small`,{children:a(`home.preservedState`)})]}),(0,B.jsx)(`div`,{children:d.map(f)})]}):null]})}function bx({items:e,onSelect:t,reportState:n}){let{locale:r,t:i}=Ji();return(0,B.jsxs)(`section`,{className:`personal-object-list personal-files-list`,"data-testid":`personal-goal-outputs`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsx)(`strong`,{children:i(`files.title`)}),(0,B.jsx)(`span`,{children:e.length})]}),n?.loading?(0,B.jsxs)(`p`,{className:`personal-object-list-state`,role:`status`,children:[(0,B.jsx)(Lm,{className:`is-spinning`,size:14}),i(`files.loadingReports`)]}):null,n?.error?(0,B.jsxs)(`p`,{className:`personal-object-list-state is-error`,role:`alert`,children:[(0,B.jsx)(am,{size:14}),i(`files.reportLoadFailed`),`: `,n.error]}):null,!n?.loading&&!n?.error&&e.length===0?(0,B.jsxs)(`p`,{className:`personal-object-list-state`,children:[(0,B.jsx)(_m,{size:14}),i(`files.empty`)]}):null,e.map(e=>(0,B.jsxs)(`button`,{"data-output-kind":e.output.kind,onClick:()=>t({item:e.output,kind:`output`}),type:`button`,children:[(0,B.jsx)(`span`,{className:`personal-file-icon`,children:(0,B.jsx)(_m,{size:16})}),(0,B.jsx)(`strong`,{children:e.output.title}),e.output.report?(0,B.jsx)(`em`,{children:i(`files.reportDelta`,{added:e.output.report.addedCount,changed:e.output.report.changedCount})}):null,(0,B.jsx)(`p`,{children:e.output.summary??e.output.safePreview??e.output.kind??i(`files.emptySummary`)}),(0,B.jsx)(`small`,{title:e.output.createdAt,children:[e.output.goalTitle,e.output.kind===`report`?i(`files.verifiedReport`):null,e.output.todoId?`${i(`common.task`)} ${e.output.todoId}`:null,vx(e.output.createdAt,r,i)].filter(Boolean).join(` · `)})]},e.id))]})}function xx({agentLabel:e,messages:t,onClose:n,onDraftTask:r,onOpenConversation:i,title:a}){let{t:o}=Ji(),s=t.reduce((e,t,n)=>t.role===`user`?n:e,0),c=t.slice(Math.max(0,s)).slice(-3),l=c.filter(e=>e.role===`assistant`&&!e.pending).at(-1);return(0,z.useEffect)(()=>{if(!n)return;let e=e=>{e.key===`Escape`&&n()};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[n]),(0,B.jsxs)(`aside`,{"aria-label":o(`conversation.receipt`),className:`personal-manager-conversation-tray`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(Qp,{size:16}),(0,B.jsx)(`strong`,{children:a??o(`conversation.title`)}),(0,B.jsx)(`small`,{children:t.at(-1)?.pending?o(`conversation.replying`):o(`common.recently`)})]}),(0,B.jsxs)(`div`,{className:`personal-manager-conversation-actions`,children:[r&&l?(0,B.jsxs)(`button`,{className:`personal-manager-conversation-btn`,onClick:()=>r(l.text),title:o(`conversation.convertHint`),type:`button`,children:[(0,B.jsx)(Cm,{size:13}),(0,B.jsx)(`span`,{children:o(`conversation.toTask`)})]}):null,(0,B.jsx)(`button`,{className:`personal-manager-conversation-link`,onClick:i,type:`button`,children:o(`conversation.full`)}),n?(0,B.jsx)(`button`,{"aria-label":o(`conversation.close`),className:`personal-manager-conversation-close`,onClick:n,title:o(`conversation.close`),type:`button`,children:(0,B.jsx)(eh,{size:14})}):null]})]}),(0,B.jsx)(`div`,{"aria-live":`polite`,className:`personal-manager-conversation-messages`,children:c.map(t=>(0,B.jsxs)(`article`,{className:`is-${t.role}`,children:[(0,B.jsx)(`strong`,{children:t.role===`user`?o(`common.you`):t.agentLabel??e??o(`header.manager`)}),(0,B.jsxs)(`div`,{className:`personal-manager-conversation-bubble`,children:[t.role===`user`?(0,B.jsx)(`p`,{children:t.text}):(0,B.jsx)(My,{text:t.text}),t.pending?(0,B.jsx)(`small`,{children:o(`conversation.agentPending`)}):null]})]},t.id))})]})}function Sx({onClose:e,onOpenDetails:t,run:n}){let{t:r}=Ji();return(0,B.jsxs)(`section`,{"aria-label":r(`session.record`),className:`personal-session-record`,children:[(0,B.jsxs)(`header`,{children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(Qp,{size:17}),r(`session.record`)]}),(0,B.jsx)(`button`,{"aria-label":r(`session.closeRecord`),onClick:e,type:`button`,children:(0,B.jsx)(eh,{size:15})})]}),(0,B.jsx)(`div`,{children:(0,B.jsx)(`strong`,{children:n.title})}),(0,B.jsxs)(`dl`,{children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Agent`}),(0,B.jsx)(`dd`,{children:n.agentLabel})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:r(`common.status`)}),(0,B.jsx)(`dd`,{children:Xi(n.sessionStatus??n.status,r)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Session`}),(0,B.jsx)(`dd`,{title:n.sessionId,children:n.sessionId})]})]}),(0,B.jsx)(`button`,{className:`personal-secondary-action`,onClick:t,type:`button`,children:r(`session.details`)})]})}function Cx(e,t,n){let r=[];if(t===null)return e.userTodos.slice(0,4).forEach(t=>r.push({attention:{...t,goalTitle:t.goalTitle??gy(e,t.goalId)},id:`attention:${t.todoId}`,kind:`attention`})),e.goals.filter(e=>_y(e)===`running`).slice(0,4).forEach(e=>r.push({id:`run:${e.goalId}`,kind:`run`,run:{agentId:e.agentId,agentLabel:e.agentLabel??e.agentId,completedSteps:e.doneTodoCount??e.agentTodos.filter(e=>e.done).length,goalId:e.goalId,goalTitle:e.title,latestActivity:e.agentSentence,runId:`goal:${e.goalId}`,status:`running`,title:e.nextSentence,totalSteps:Math.max((e.doneTodoCount??0)+e.agentTodos.filter(e=>!e.done).length,1)}})),r;let i=e.goals.find(e=>e.goalId===t);if(!i)return r;if(i.needsYou){let t=e.userTodos.find(e=>e.goalId===i.goalId);r.push({attention:t?{...t,goalTitle:i.title}:{blocking:i.needsYouBlocking??!1,goalId:i.goalId,goalTitle:i.title,text:i.needsYou,todoId:`${i.goalId}:attention`},id:`attention:${i.goalId}`,kind:`attention`})}r.push({id:`run:${i.goalId}`,kind:`run`,run:{agentId:i.agentId,agentLabel:i.agentLabel??i.agentId,completedSteps:i.doneTodoCount??i.agentTodos.filter(e=>e.done).length,goalId:i.goalId,goalTitle:i.title,latestActivity:i.agentSentence,runId:`goal:${i.goalId}`,status:i.state===`推进中`?`running`:i.state===`需修复`?`failed`:`waiting`,title:i.nextSentence,totalSteps:Math.max((i.doneTodoCount??0)+i.agentTodos.filter(e=>!e.done).length,1)}}),i.agentTodos.filter(e=>e.taskClass===`continuous_monitor`).forEach(t=>{let a=e.timeline?.find(e=>e.kind===`run`&&e.run.goalId===i.goalId&&e.run.todoId===t.todoId&&!!e.run.sessionId);r.push({id:`schedule:${i.goalId}:${t.todoId}`,kind:`schedule`,schedule:{agentId:i.agentId,executionHistory:a?[{label:a.run.latestActivity||a.run.title,runId:a.run.runId,status:a.run.status===`waiting`||a.run.status===`queued`?`running`:a.run.status,timestamp:i.latestActivity||n(`common.recently`)}]:[],goalId:i.goalId,label:t.text,schedule:t.evidence??n(`schedule.summary`),scheduleId:t.todoId,scheduleKind:`monitor`,sessionId:a?.run.sessionId,status:t.done||t.status===`paused`?`paused`:`active`,stopCondition:n(`drawer.scheduleDefaultStop`),target:t.text,timezone:`Asia/Shanghai`}})});let a=e.timeline?.find(e=>e.kind===`proposal`&&e.proposal.actionKind===`heartbeat.bind`&&e.proposal.goalId===i.goalId);if(a){let e=e=>a.proposal.fields.find(t=>t.key===e)?.value;r.push({id:`schedule:${i.goalId}:heartbeat`,kind:`schedule`,schedule:{agentId:i.agentId,executionHistory:[],goalId:i.goalId,label:`${n(`schedule.heartbeat`)} · ${i.title}`,nextRunAt:n(`drawer.schedulePending`),notificationRule:n(`drawer.scheduleDefaultNotification`),schedule:e(`cadence`)??n(`schedule.summary`),scheduleId:`${i.goalId}:heartbeat`,scheduleKind:`heartbeat`,status:a.proposal.status===`applied`?`active`:`draft`,stopCondition:e(`stop_condition`)??n(`drawer.scheduleDefaultStop`),timezone:e(`timezone`)??`Asia/Shanghai`}})}return r}function wx(e){return e===`preview_ready`?`ready`:e===`cancelled`?`draft`:e===`failed`?`error`:e}function Tx(e,t){let n={agent_id:t(`proposal.field.agentId`),cadence:t(`proposal.field.cadence`),completion_criteria:t(`proposal.field.completionCriteria`),execution_boundary:t(`proposal.field.executionBoundary`),goal_id:t(`proposal.field.goalId`),heartbeat:t(`proposal.field.heartbeat`),initial_todos:t(`proposal.field.initialTodos`),objective:t(`proposal.field.objective`),operation:t(`proposal.field.operation`),permission:t(`proposal.field.permission`),reason:t(`proposal.field.reason`),stop_condition:t(`proposal.field.stopCondition`),target:t(`proposal.field.target`),timezone:t(`proposal.field.timezone`),title:t(`proposal.field.title`),workspace_ref:t(`proposal.field.workspace`)},r=[`title`,`objective`,`completion_criteria`,`execution_boundary`,`permission`,`agent_id`,`workspace_ref`,`initial_todos`,`heartbeat`,`stop_condition`,`goal_id`];return Object.entries(e).sort(([e],[t])=>{let n=r.indexOf(e),i=r.indexOf(t);return(n<0?r.length:n)-(i<0?r.length:i)}).slice(0,10).map(([e,r])=>({key:e,label:n[e]??e.replaceAll(`_`,` `),value:e===`workspace_ref`?r===`current`?t(`proposal.workspace.current`):t(`proposal.workspace.named`,{workspace:String(r??`current`)}):Array.isArray(r)?r.join(` · `):typeof r==`object`&&r?JSON.stringify(r):String(r??`—`)}))}function Ex(e,t){let n=e.normalized_parameters.projection,r=n&&typeof n==`object`?n:{},i=Array.isArray(r.fields)?r.fields.flatMap((e,t)=>{if(!e||typeof e!=`object`)return[];let n=e;return typeof n.label!=`string`||typeof n.value!=`string`?[]:[{key:`projection:${t}`,label:n.label,value:n.value}]}).slice(0,8):[];return[{key:`operation_state`,label:t(`proposal.field.operationState`),value:e.operation?.lifecycle_state??e.status},...e.operation?.lifecycle_state===`outcome_observed`?[{key:`result_delivery`,label:t(`proposal.field.resultDelivery`),value:e.operation.result_delivery?t(`proposal.resultDelivery.verified`):t(`proposal.resultDelivery.pending`)}]:[],...i,...typeof r.warning==`string`?[{key:`warning`,label:t(`proposal.field.confirmationBoundary`),value:r.warning}]:[],...e.operation?.expires_at?[{key:`expires_at`,label:t(`proposal.field.expiresAt`),value:e.operation.expires_at}]:[]].slice(0,10)}function Dx(e){if(e.action_kind!==`goal.lifecycle`)return;let t=e.normalized_parameters.operation;return t===`stop`||t===`resume`||t===`delete`?t:void 0}function Ox(e){return(Array.isArray(e?.candidates)?e.candidates:[]).flatMap(e=>{if(!e||typeof e!=`object`)return[];let t=e;return typeof t.workspace_ref==`string`&&typeof t.label==`string`?[{label:t.label,workspaceRef:t.workspace_ref}]:[]})}function kx(e,t){let n=Dx(e),r=py(e),i=typeof e.normalized_parameters.title==`string`?e.normalized_parameters.title:typeof e.normalized_parameters.goal_id==`string`?e.normalized_parameters.goal_id:``,a=Ox(e.gate),o=typeof e.normalized_parameters.target==`string`?e.normalized_parameters.target:``,s=e.normalized_parameters.projection,c=s&&typeof s==`object`&&typeof s.title==`string`?String(s.title):e.summary,l=e.action_kind===`operation.execute`?c:e.action_kind===`goal.create`?t(`proposal.summary.goalCreate`,{title:i}):e.action_kind===`heartbeat.bind`?t(`proposal.summary.heartbeat`):e.action_kind===`monitor.create`?t(`proposal.summary.monitor`,{target:o}):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.summary.lifecycleStop`,{title:i}):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.summary.lifecycleDelete`,{title:i}):e.action_kind===`goal.lifecycle`?t(`proposal.summary.lifecycleResume`,{title:i}):e.summary;return{actionKind:e.action_kind,reviewPlan:r,fields:e.action_kind===`operation.execute`?Ex(e,t):Tx(e.normalized_parameters,t),goalId:typeof e.normalized_parameters.goal_id==`string`?e.normalized_parameters.goal_id:void 0,impact:e.action_kind===`operation.execute`?t(`proposal.impact.operation`):e.action_kind===`goal.create`?t(`proposal.impact.goalCreate`):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.impact.lifecycleStop`):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.impact.lifecycleDelete`):e.action_kind===`goal.lifecycle`?t(`proposal.impact.lifecycleResume`):e.permission_classification===`protected`?t(`proposal.impact.protected`):t(`proposal.impact.default`),previewId:e.proposal_id,lifecycleOperation:n,gate:e.gate?{kind:String(e.gate.kind??`protected_action`),nextAction:typeof e.gate.next_action==`string`?e.gate.next_action:void 0,summary:String(e.gate.summary??t(`proposal.gate.default`))}:void 0,sourceRequest:e.status===`gated`&&e.action_kind===`goal.create`?{actionKind:e.action_kind,context:e.context,idempotencyKey:`${e.proposal_id}-workspace`,normalizedParameters:e.normalized_parameters,summary:e.summary}:void 0,workspaceCandidates:a,primaryLabel:e.action_kind===`operation.execute`?e.operation?.lifecycle_state===`outcome_observed`?e.operation.result_delivery?t(`proposal.primary.operationResultVerified`):t(`proposal.primary.operationResultPending`):t(`proposal.primary.operationGroup`):e.action_kind===`goal.create`?t(`proposal.primary.goalCreate`):e.action_kind===`goal.lifecycle`&&n===`stop`?t(`proposal.primary.lifecycleStop`):e.action_kind===`goal.lifecycle`&&n===`delete`?t(`proposal.primary.lifecycleDelete`):e.action_kind===`goal.lifecycle`?t(`proposal.primary.lifecycleResume`):e.action_kind===`todo.create`&&e.normalized_parameters.start_execution===!0?t(`proposal.primary.todoStart`):t(`proposal.primary.apply`),status:e.status===`applied`&&e.action_kind!==`operation.execute`&&r.interaction!==`completed`?`error`:wx(e.status),title:l}}function Ax(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,`-`).replace(/^-+|-+$/g,``).slice(0,42);if(t)return t;let n=2166136261;for(let t of e)n^=t.codePointAt(0)??0,n=Math.imul(n,16777619);return`goal-${(n>>>0).toString(36)}`}function jx(e,t){let n=e.match(/[「“"]([^」”"]{2,80})[」”"]/u)?.[1];return n?n.trim():e.replace(/^(请|帮我|我想|给我|创建|新建|设置|please|i want to|create|set up)+/iu,``).replace(/(一个|新的)?\s*(goal|目标)/giu,``).replace(/[,。!?].*$/u,``).trim().slice(0,80)||t(`goal.defaultTitle`)}function Mx(e,t){for(let n of e.split(/\r?\n/u)){let e=n.trim();for(let n of t){let t=e.match(RegExp(`^${n.replace(/[.*+?^${}()|[\]\\]/gu,`\\$&`)}\\s*[::]\\s*(.*)$`,`iu`));if(t?.[1]?.trim())return t[1].trim()}}return``}function Nx(e,t){let n=Mx(e,[`目标`,`Objective`]),r=Mx(e,[`完成标准`,`Completion criteria`]),i=Mx(e,[`执行边界(可选)`,`执行边界`,`边界`,`Execution boundary (optional)`,`Execution boundary`,`Boundary`]),a=(n||jx(e,t)).split(/[。;;\n]/u)[0].trim().slice(0,80)||t(`goal.defaultTitle`),o=[n||a,r?t(`goal.objectiveCompletion`,{criteria:r}):``,i?t(`goal.objectiveBoundary`,{boundary:i}):``].filter(Boolean).join(` +`),s=/(只读|不调用外部工具|不修改(?:仓库|代码|状态)|read.?only|do not (?:call|use) external tools|do not modify (?:repositories|repository|code|state))/iu.test(i||e);return{completionCriteria:r,executionBoundary:i,initialTodos:r?[t(`goal.initialTodo`,{criteria:r})]:[],objective:o,permission:s?`read_only`:`workspace_write_on_confirmation`,title:a}}function Px(e){let t=e.match(/(?:每|every)\s*(\d{1,3})\s*(?:分钟|minutes?)/iu)?.[1];if(t)return`${t}m`;let n=e.match(/(?:每|every)\s*(\d{1,2})\s*(?:小时|hours?)/iu)?.[1];return n?`${n}h`:/每小时|every hour|hourly/iu.test(e)?`1h`:(/每天|每日|早上|上午|daily|every day/iu.test(e),`1d`)}function Fx(e,t){return/(每周|星期|周[一二三四五六日天]|weekly|every\s+(?:mon|tues|wednes|thurs|fri|satur|sun)day|\d{1,2}\s*[::]\s*\d{2})/iu.test(e)?t(`schedule.unsupportedCalendar`):null}function Ix(e,t){return Mx(e,[`检查内容`,`监控内容`,`目标`,`Check target`,`Monitor target`,`Target`])||e.replace(/^(?:为当前 Goal |for the current Goal )?(?:添加|配置|创建|add|configure|create)?\s*(?:定时检查|监控|scheduled check|monitor)[::]?/iu,``).split(/\r?\n/u)[0].trim()||t(`schedule.defaultTarget`)}function Lx(e){return/(mr|pr).{0,8}(合并|merge)/iu.test(e)?`pr_merged`:/发布完成|上线完成|release (?:is )?complete|deployment (?:is )?complete/iu.test(e)?`release_complete`:`goal_complete`}function Rx(e,t){let n=e.toLowerCase();return t.find(e=>n.includes(e.agentId.toLowerCase())||n.includes(e.label.toLowerCase()))}function zx(e){let t=Mx(e,[`标题`,`任务标题`,`Todo 标题`]),n=Mx(e,[`内容`,`任务内容`,`Todo 内容`]);if(t)return[t,n].filter(Boolean).join(`:`).slice(0,400);let r=e.match(/[「“"]([^」”"]{2,200})[」”"]/u)?.[1];return r?r.trim():e.replace(/^(请|帮我|给我|为当前 Goal |新增|新建|创建|添加|加上|加一个|记一个)+/u,``).replace(/^(一个\s*)?(普通\s*)?(todo|待办|任务)(?:\s*到\s*Tasks?)?[::\s]*/iu,``).replace(/[。;;,,]\s*(?:不要|不需要|无需|禁止|别|暂不).{0,80}(?:heartbeat|心跳|定时|监控|执行).*$/iu,``).replace(/[,,]\s*(并且|然后|再)?\s*(交给|分配给|让).+$/u,``).replace(/\s*(交给|分配给|让)\s+.+$/u,``).trim().slice(0,400)||`推进当前 Goal 的下一项工作`}var Bx=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]),Vx=5242880,Hx=4;function Ux(e,t){return new Promise((n,r)=>{let i=new FileReader;i.onerror=()=>r(Error(t(`composer.imageReadError`,{name:e.name}))),i.onload=()=>n({dataUrl:String(i.result??``),id:crypto.randomUUID(),mimeType:e.type,name:e.name,size:e.size}),i.readAsDataURL(e)})}function Wx({agents:e=[{agentId:`codex`,available:!0,capability:`代码与项目执行`,label:`Codex`}],callbacks:t={},goalArchiveLoadState:n={error:null,phase:`ready`},model:r,readOnly:i=!1,selectedAgentId:a,selectedGoalId:o,statusSourceControl:s}){let{locale:c,t:l}=Ji(),[u,d]=(0,z.useState)(o??null),[f,p]=(0,z.useState)(a??e.find(e=>e.available)?.agentId??`codex`),[m,h]=(0,z.useState)(null),[g,_]=(0,z.useState)(!1),[v,y]=(0,z.useState)(null),[b,x]=(0,z.useState)({}),[S,C]=(0,z.useState)(`chat`),[w,T]=(0,z.useState)(!1),[E,D]=(0,z.useState)(!1),[O,ee]=(0,z.useState)(!1),[te,ne]=(0,z.useState)(()=>{try{let e=window.sessionStorage.getItem(`loopx-pw-composer-drafts`),t=e?JSON.parse(e):{};return t&&typeof t==`object`&&!Array.isArray(t)?t:{}}catch{return{}}}),[k,A]=(0,z.useState)(!1),[j,M]=(0,z.useState)([]),[N,P]=(0,z.useState)(null),[F,re]=(0,z.useState)(null),[ie,I]=(0,z.useState)(()=>new Set),[ae,L]=(0,z.useState)(()=>new Set),[oe,se]=(0,z.useState)(`idle`),[ce,le]=(0,z.useState)([]),[ue,de]=(0,z.useState)(!1),[fe,pe]=(0,z.useState)(px),[me,he]=(0,z.useState)({}),[ge,_e]=(0,z.useState)([]),ve=(0,z.useRef)(!1),ye=(0,z.useRef)(NaN),be=(0,z.useRef)(null),xe=(0,z.useRef)(null),Se=(0,z.useRef)(null),Ce=(0,z.useRef)(new Set),we=(0,z.useRef)(new Set),[Te,Ee]=(0,z.useState)(null),R=o===void 0?u:o,De=a??f,Oe=`${R??`manager`}:${De}`,ke=te[Oe]??``;(0,z.useEffect)(()=>{M([]),P(null)},[Oe]);function Ae(e,t){ne(n=>{let r={...n};t?r[e]=t:delete r[e];try{window.sessionStorage.setItem(`loopx-pw-composer-drafts`,JSON.stringify(r))}catch{}return r})}function je(e){Ae(Oe,e)}function Me(e){let t=te[Oe]?.trimEnd();je(t?`${t}\n${e}`:e),window.requestAnimationFrame(()=>be.current?.focus())}(0,z.useEffect)(()=>{let e=be.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,120)}px`)},[ke]);let Ne=(0,z.useMemo)(()=>r.goals.map(e=>{let t=me[e.goalId];return t?{...e,repository:{branch:t.branch,identity:t.identity,label:t.label,readOnly:!0}}:e}),[me,r.goals]),Pe=(0,z.useMemo)(()=>Ne.filter(e=>_y(e)===`needs_you`).length,[Ne]),Fe=(0,z.useMemo)(()=>Ne.filter(e=>_y(e)===`needs_you`&&(e.needsYouBlocking||e.state===`等你`)).length,[Ne]),V=Ne.find(e=>e.goalId===R)??null,Ie=m?.kind===`settings`,Le=R,Re=(0,z.useMemo)(()=>{let e=Object.values(b).filter(e=>e.actionKind===`heartbeat.bind`&&e.goalId&&e.status===`applied`).map(e=>({id:`schedule:${e.goalId}:heartbeat`,kind:`schedule`,schedule:{agentId:De,executionHistory:[],goalId:e.goalId,label:e.title,nextRunAt:l(`drawer.schedulePending`),notificationRule:l(`drawer.scheduleDefaultNotification`),schedule:e.fields.find(e=>e.key===`cadence`)?.value??l(`schedule.summary`),scheduleId:`${e.goalId}:heartbeat`,scheduleKind:`heartbeat`,status:e.status===`applied`?`active`:`draft`,stopCondition:e.fields.find(e=>e.key===`stop_condition`)?.value??l(`drawer.scheduleDefaultStop`),timezone:e.fields.find(e=>e.key===`timezone`)?.value??`Asia/Shanghai`}})),t=[...Cx(r,Le,l),...r.timeline??[],...e,..._x(Object.values(b)).filter(e=>e.actionKind!==`heartbeat.bind`||e.status!==`applied`).map(e=>({id:`proposal:${e.previewId}`,kind:`proposal`,proposal:e}))];return[...new Map(t.map(e=>[e.id,e])).values()].filter(e=>e.kind!==`proposal`||![`stale`,`error`].includes(e.proposal.status)||ce.includes(e.proposal.previewId)).filter(e=>!R||e.kind===`message`?!0:e.kind===`proposal`?!e.proposal.goalId||e.proposal.goalId===R:e.kind===`attention`?e.attention.goalId===R:e.kind===`run`?e.run.goalId===R:e.kind===`schedule`?e.schedule.goalId===R:e.output.goalId===R)},[Le,r,b,De,R,ce,l]),ze=(0,z.useMemo)(()=>v?Re.filter(e=>e.kind===`message`?!0:e.kind===`run`?e.run.runId===v.runId:e.kind===`output`&&e.output.runId===v.runId):Re,[v,Re]);(0,z.useEffect)(()=>{if(!v)return;let e=Re.find(e=>e.kind===`run`&&e.run.runId===v.runId);!e||e.kind!==`run`||JSON.stringify({completedSteps:v.completedSteps,latestActivity:v.latestActivity,messages:v.sessionMessages,sessionStatus:v.sessionStatus,status:v.status,totalSteps:v.totalSteps})!==JSON.stringify({completedSteps:e.run.completedSteps,latestActivity:e.run.latestActivity,messages:e.run.sessionMessages,sessionStatus:e.run.sessionStatus,status:e.run.status,totalSteps:e.run.totalSteps})&&y(e.run)},[v,Re]);let Be=(0,z.useMemo)(()=>Re.flatMap(e=>e.kind===`message`?[e.message]:[]),[Re]),Ve=(0,z.useMemo)(()=>V?Re.flatMap(e=>e.kind===`message`?[e.message]:[]):[],[Re,V]);(0,z.useEffect)(()=>{V||w||Be.some(e=>e.pending)&&D(!0)},[w,Be,V]),(0,z.useEffect)(()=>{!V||S===`chat`||Ve.some(e=>e.pending)&&ee(!0)},[Ve,V,S]);let He=(0,z.useMemo)(()=>Re.filter(e=>e.kind===`message`||e.kind===`proposal`&&ce.includes(e.proposal.previewId)),[Re,ce]),Ue=He[He.length-1],We=Ue?.kind===`message`?Ue.message.text.length:0;(0,z.useEffect)(()=>{if(!w||!xe.current)return;let e=window.requestAnimationFrame(()=>{xe.current&&(xe.current.scrollTop=xe.current.scrollHeight)});return()=>window.cancelAnimationFrame(e)},[He.length,w,We]);let Ge=(0,z.useMemo)(()=>{if(m?.kind===`settings`)return null;if(m?.kind===`attention`)return{kind:`attention`,item:Gd(m.item,r.attentionHistory??r.userTodos)};if(m?.kind===`goal`){let e=Ne.find(e=>e.goalId===m.item.goalId);return e?{item:e,kind:`goal`}:m}if(m?.kind!==`run`)return m;let e=Re.find(e=>e.kind===`run`&&e.run.runId===m.item.runId);return e?{item:e.run,kind:`run`}:m},[Re,m,Ne,r.attentionHistory,r.userTodos]);(0,z.useEffect)(()=>{if(i){he({}),_e([]);return}let e=!1;return Promise.all([Lg(),Jg()]).then(([t,n])=>{e||(he(Object.fromEntries(t.map(e=>[e.goal_id,e.repository]))),_e(n))}).catch(()=>{}),()=>{e=!0}},[i]),(0,z.useEffect)(()=>{if(!ue)return;function e(e){e.key===`Escape`&&de(!1)}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[ue]),(0,z.useEffect)(()=>{if(R||!Re.length)return;if(!ve.current){ve.current=!0;try{ye.current=Date.parse(window.localStorage.getItem(`loopx-pw-last-visit`)??``),window.localStorage.setItem(`loopx-pw-last-visit`,new Date().toISOString())}catch{ye.current=NaN}}let e=ye.current,t=Re.filter(e=>e.kind===`run`).map(e=>e.run),n=t=>{let n=Date.parse(t??``);return!Number.isNaN(e)&&!Number.isNaN(n)&&n>e},r={attention:Pe,done:t.filter(e=>e.status===`completed`&&n(e.latestActivity)).length,failed:t.filter(e=>(e.status===`failed`||e.status===`interrupted`)&&n(e.latestActivity)).length};Ee(e=>e?.attention===r.attention&&e.done===r.done&&e.failed===r.failed?e:r)},[Re,Pe,R]),(0,z.useEffect)(()=>{if(i){x({});return}let e=!1;return Nh(R?{goalId:R}:{contextKind:`manager`}).then(t=>{if(e)return;let n=Object.fromEntries(t.filter(e=>[`preview_ready`,`gated`,`deferred`,`applying`].includes(e.status)||e.action_kind===`operation.execute`&&e.status===`applied`).map(e=>{let t=kx(e,l);return[t.previewId,t]}));x(e=>({...e,...n}))}).catch(()=>{}),()=>{e=!0}},[i,R,l]);async function Ke(e,n={}){if(i)throw Error(l(`source.readOnlyWriteError`));let r;try{r=t.onPreviewAction?await t.onPreviewAction(e):kx(await jh(e),l)}catch(t){if(!(t instanceof Eh)||t.payload.error_code!==`action_preview_gate`)throw t;let n=t.payload.gate&&typeof t.payload.gate==`object`?t.payload.gate:{},i=Ox(n),a=String(n.kind??`workspace_selection_required`),o=a===`agent_binding_required`||a===`agent_identity_selection_required`;r={actionKind:e.actionKind,fields:i.map(e=>({key:`workspace_ref:${e.workspaceRef}`,label:e.label,value:e.workspaceRef})),gate:{kind:a,nextAction:typeof n.next_action==`string`?n.next_action:void 0,summary:String(n.summary??l(`proposal.workspaceGate.defaultSummary`))},impact:l(o?`proposal.workspaceGate.agentImpact`:`proposal.workspaceGate.selectionImpact`),previewId:`workspace-choice-${Date.now().toString(36)}`,sourceRequest:e,status:`gated`,title:l(o?`proposal.workspaceGate.agentTitle`:`proposal.workspaceGate.selectionTitle`),workspaceCandidates:i}}return le(e=>e.includes(r.previewId)?e:[...e,r.previewId]),x(e=>({...e,[r.previewId]:r})),n.select!==!1&&h({item:r,kind:`proposal`}),r}function qe(){tt(null),Ae(`manager:${De}`,l(`composer.createGoalTemplate`)),window.requestAnimationFrame(()=>be.current?.focus())}async function Je(e,n){de(!1);let r={delete:`Deleted from the owner workspace`,resume:`Resumed from the owner workspace`,stop:`Stopped from the owner workspace`},i={delete:l(`proposal.summary.lifecycleDelete`,{title:e.title}),resume:l(`proposal.summary.lifecycleResume`,{title:e.title}),stop:l(`proposal.summary.lifecycleStop`,{title:e.title})},a=null,o=!1;try{if(n===`stop`){if(Ce.current.has(e.goalId))return;Ce.current.add(e.goalId),I(new Set(Ce.current)),h(null),a={goalId:e.goalId,next:`stopped`,optimisticApplied:!0,previous:e.activationState},re(l(`feedback.applying`,{title:i.stop})),t.onGoalActivationStateChange?.(e.goalId,`stopped`)}if(t.onExecuteGoalLifecycle){if(n===`delete`)throw Error(`The selected status source does not authorize Goal deletion.`);let a=await t.onExecuteGoalLifecycle({goalId:e.goalId,operation:n,reason:r[n]});if(!a.projectionVerified)throw Error(`Goal lifecycle projection did not verify.`);o=!0,t.onGoalActivationStateChange?.(e.goalId,a.activationState),re(l(`feedback.completed`,{title:i[n]})),n===`stop`&&tt(null),await(t.onReconcileStatus??t.onRefresh)?.();return}let s=await Ke({actionKind:`goal.lifecycle`,context:{kind:`goal_directory`,goal_id:e.goalId},idempotencyKey:`workspace-goal-${n}-${e.goalId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,operation:n,reason:r[n]},summary:i[n]},{select:n!==`stop`});if(s.goalId!==e.goalId||s.lifecycleOperation!==n)throw h(null),Error(l(`actionReview.targetChanged`));n===`stop`&&(s.reviewPlan?.interaction===`direct`?(o=!0,await Qe(s,{lifecycleProjection:a??void 0,presentation:`feedback`})):(a&&t.onGoalActivationStateChange?.(a.goalId,a.previous),re(s.gate?l(`feedback.gateRequired`,{summary:s.gate.summary}):l(`feedback.notCompleted`,{status:s.status})),h({item:s,kind:`proposal`})))}catch(e){a&&!o&&t.onGoalActivationStateChange?.(a.goalId,a.previous),re(l(`feedback.executionFailed`,{error:e instanceof Error?e.message:String(e)}))}finally{n===`stop`&&(Ce.current.delete(e.goalId),I(new Set(Ce.current)))}}function Ye(e,t){je(l(t?e===`heartbeat`?`composer.heartbeatTemplate`:`composer.monitorTemplate`:e===`heartbeat`?`composer.heartbeatTemplateWithoutGoal`:`composer.monitorTemplateWithoutGoal`)),h(null),window.requestAnimationFrame(()=>be.current?.focus())}async function Xe(e,n,r=``){let i=await t.onRequestScheduleConfig?.(e,n);if(i){le(e=>e.includes(i.previewId)?e:[...e,i.previewId]),x(e=>({...e,[i.previewId]:i})),h({item:i,kind:`proposal`});return}if(!n){je(l(e===`heartbeat`?`composer.heartbeatGoalQuestion`:`composer.monitorGoalQuestion`));return}let a=Date.now().toString(36);await Ke({actionKind:e===`heartbeat`?`heartbeat.bind`:`monitor.create`,context:{kind:`schedule`,goal_id:n},idempotencyKey:`workspace-${e}-${n}-${a}`,normalizedParameters:e===`heartbeat`?{agent_id:De,cadence:Px(r),goal_id:n,stop_condition:Lx(r),timezone:`Asia/Shanghai`}:{agent_id:De,cadence:Px(r),goal_id:n,stop_condition:Lx(r),target:Ix(r,l),target_key:`goal-${n}`,timezone:`Asia/Shanghai`},summary:e===`heartbeat`?l(`proposal.summary.heartbeat`):l(`proposal.summary.monitor`,{target:Ix(r,l)})})}async function Ze(e){if(!we.current.has(e.todoId)){we.current.add(e.todoId),L(new Set(we.current)),re(l(`feedback.preparingPreview`,{title:e.text}));try{await Ke({actionKind:`todo.update`,context:{goal_id:e.goalId,kind:`todo`,todo_id:e.todoId},idempotencyKey:`workspace-todo-${e.todoId}-complete-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,operation:`complete`,todo_id:e.todoId},summary:l(`tasks.markComplete`,{name:e.text})}),re(null)}catch(e){re(l(`feedback.previewFailed`,{error:e instanceof Error?e.message:String(e)}))}finally{we.current.delete(e.todoId),L(new Set(we.current))}}}async function Qe(e,n={}){if(e.reviewPlan&&!e.reviewPlan.canApply)return;let i=n.presentation!==`feedback`,a=e.actionKind===`goal.lifecycle`&&e.goalId&&(e.lifecycleOperation===`stop`||e.lifecycleOperation===`resume`)?{goalId:e.goalId,next:e.lifecycleOperation===`stop`?`stopped`:`active`,optimisticApplied:!1,previous:r.goals.find(t=>t.goalId===e.goalId)?.activationState??(e.lifecycleOperation===`stop`?`active`:`stopped`)}:null,o=n.lifecycleProjection??a;re(l(`feedback.applying`,{title:e.title}));let s={...e,reviewPlan:e.reviewPlan?{...e.reviewPlan,interaction:`pending`,reason:`apply_pending`,canApply:!1}:void 0,status:`applying`};x(t=>({...t,[e.previewId]:s})),i&&h({item:s,kind:`proposal`}),o&&!o.optimisticApplied&&t.onGoalActivationStateChange?.(o.goalId,o.next);try{if(t.onApplyProposal){await t.onApplyProposal(e);let n={...e,status:`applied`};if(x(t=>({...t,[e.previewId]:n})),i&&h({item:n,kind:`proposal`}),re(l(`feedback.completed`,{title:e.title})),e.actionKind===`goal.lifecycle`){(e.lifecycleOperation===`stop`||e.lifecycleOperation===`delete`)&&tt(null),e.lifecycleOperation===`delete`&&e.goalId&&t.onGoalDeleted?.(e.goalId);let n=t.onReconcileStatus??t.onRefresh;Promise.resolve().then(()=>n?.()).catch(()=>void 0)}return}let n=await Ph(e.previewId);if(n.proposal.proposal_id!==e.previewId||n.proposal.action_kind!==e.actionKind||e.actionKind===`goal.lifecycle`&&(n.proposal.normalized_parameters.goal_id!==e.goalId||Dx(n.proposal)!==e.lifecycleOperation))throw new Eh(l(`actionReview.targetChanged`),{error_code:`action_response_mismatch`});let r=kx(n.proposal,l);if(x(t=>({...t,[e.previewId]:r})),i&&h({item:r,kind:`proposal`}),r.reviewPlan?.interaction!==`completed`){o&&t.onGoalActivationStateChange?.(o.goalId,o.previous),h({item:r,kind:`proposal`}),re(n.proposal.status===`stale`?l(`feedback.stale`):l(`actionReview.${r.reviewPlan.reason}`));return}if(re(l(`feedback.completed`,{title:r.title})),r.actionKind===`todo.create`&&await t.onRefresh?.(),r.actionKind===`goal.lifecycle`&&(r.lifecycleOperation===`stop`||r.lifecycleOperation===`delete`)&&tt(null),r.actionKind===`goal.lifecycle`&&r.lifecycleOperation===`delete`&&r.goalId&&t.onGoalDeleted?.(r.goalId),r.actionKind===`goal.lifecycle`){let e=t.onReconcileStatus??t.onRefresh;Promise.resolve().then(()=>e?.()).catch(()=>void 0)}}catch(n){if(o&&t.onGoalActivationStateChange?.(o.goalId,o.previous),n instanceof Eh&&n.payload.error_code===`protected_action`){let r=n.payload.gate,i=r&&typeof r==`object`?r:{},a={...e,reviewPlan:e.reviewPlan?{...e.reviewPlan,interaction:`gated`,reason:`authority_gate`,canApply:!1}:void 0,gate:{kind:String(i.kind??`protected_action`),nextAction:typeof i.next_action==`string`?i.next_action:void 0,summary:String(i.summary??n.message)},status:`gated`};x(t=>({...t,[e.previewId]:a})),h({item:a,kind:`proposal`}),re(l(`feedback.gateRequired`,{summary:a.gate.summary})),e.actionKind===`goal.create`&&e.goalId&&(t.onRefresh?.(),tt(e.goalId));return}let r=n instanceof Eh&&my(n.payload),i=n instanceof Eh&&n.payload.error_code===`action_response_mismatch`,a={...e,reviewPlan:e.reviewPlan?{...e.reviewPlan,interaction:r?`refresh`:`repair`,reason:i?`readback_unverified`:r?`stale_proposal`:`apply_failed`,canApply:!1}:void 0,errorMessage:n instanceof Error?n.message:String(n),status:r?`stale`:`error`};x(t=>({...t,[e.previewId]:a})),h({item:a,kind:`proposal`}),re(l(`feedback.executionFailed`,{error:a.errorMessage}))}}let $e={...t,onOpenRunSession:async e=>{e.goalId!==R&&tt(e.goalId),C(`chat`),await t.onOpenRunSession?.(e),y(e),h(null)},onOpenGoal:e=>{tt(e);let n=t.onReconcileStatus??t.onRefresh;Promise.resolve().then(()=>n?.()).catch(()=>{re(l(`feedback.goalRefreshFailed`))})},onOpenGoalView:e=>{C(e),e===`chat`&&y(null),h(null)},onOpenOutput:e=>{e.goalId!==R&&tt(e.goalId),C(`files`),t.onOpenOutput?.(e)},onApplyProposal:Qe,onCancelProposal:async e=>{h(null),x(t=>{let n={...t};return delete n[e.previewId],n});try{t.onCancelProposal?.(e),t.onCancelProposal||await Fh(e.previewId)}catch(t){x(t=>({...t,[e.previewId]:e})),re(l(`feedback.cancelFailed`,{error:t instanceof Error?t.message:String(t)}))}},onTransitionProposal:async(e,t)=>{let n=kx(await Ih(e.previewId,t),l);le(e=>e.includes(n.previewId)?e:[...e,n.previewId]),x(r=>{let i={...r};return t===`regenerate`&&delete i[e.previewId],i[n.previewId]=n,i}),h({item:n,kind:`proposal`})},onSelectWorkspaceCandidate:async(e,t)=>{e.sourceRequest&&(x(t=>{let n={...t};return delete n[e.previewId],n}),await Ke({...e.sourceRequest,idempotencyKey:`${e.sourceRequest.idempotencyKey}-${t}`,normalizedParameters:{...e.sourceRequest.normalizedParameters,workspace_ref:t}}))},onPreviewAction:Ke,onRequestScheduleConfig:(e,t)=>Ye(e,t),onOpenNotificationSettings:e=>h({goalId:e,kind:`settings`,tab:`lark`}),onFetchNotificationTargets:()=>ag(),onSetupGoalChannel:e=>sg(e),onToggleGoalAutoNotify:e=>cg(e),onUpdateSchedule:async(e,t)=>{let n=Date.now().toString(36),r=e.scheduleKind===`heartbeat`;await Ke({actionKind:r?`heartbeat.bind`:`monitor.update`,context:{kind:`schedule`,goal_id:e.goalId},idempotencyKey:`workspace-monitor-${e.scheduleId}-${t}-${n}`,normalizedParameters:{agent_id:e.agentId??De,...!r&&t===`run_now`?{endpoint_id:De}:{},...t===`edit`?{cadence:`2h`,...r?{timezone:e.timezone??`Asia/Shanghai`}:{}}:{},goal_id:e.goalId,operation:t,...!r&&t===`run_now`&&e.sessionId?{session_id:e.sessionId}:{},...r?{}:{todo_id:e.scheduleId}},summary:t===`pause`?`暂停自动运行:${e.label}`:t===`resume`?`恢复自动运行:${e.label}`:t===`run_now`?`立即运行:${e.label}`:t===`stop`?`停止自动运行:${e.label}`:`编辑自动运行生命周期:${e.label}`})}},et=i?{onOpenGoal:$e.onOpenGoal,onOpenGoalView:$e.onOpenGoalView,onOpenOutput:$e.onOpenOutput}:$e;function tt(e){d(e),T(!1),D(!1),ee(!1),y(null),h(null),C(`tasks`),de(!1),t.onSelectGoal?.(e)}function nt(e){p(e),t.onSelectAgent?.(e)}function rt(e){pe(e),mx(e)}async function it(n){let r=n?[]:j,i=(n??ke).trim()||(r.length?l(`composer.imageAnalysisPrompt`):``);if(!(!i||k)){n||(je(``),M([])),P(null),A(!0);try{if(r.length){R?S!==`chat`&&ee(!0):D(!0);let e=await t.onSendMessage?.(i,De,R,r);e&&await Ke(e);return}let n=Gy(i,{agents:e.map(e=>({agentId:e.agentId,label:e.label})),goalId:R,todos:(V?.agentTodos??[]).map(e=>({text:e.text,todoId:e.todoId}))});if(n.route===`clarify`){je(i);let e=l(`composer.clarifySingleAction`);n.missingFields.includes(`resume_when`)&&(e=l(`composer.clarifyDefer`)),re(e);return}if(n.actionKind===`goal.create`){let e=Nx(i,l),t=Ax(e.title);await Ke({actionKind:`goal.create`,context:{kind:`manager`,goal_id:null,natural_language:i},idempotencyKey:`workspace-goal-intent-${t}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:De,completion_criteria:e.completionCriteria,execution_boundary:e.executionBoundary,goal_id:t,heartbeat:{cadence:Px(i),enabled:n.normalizedParameters.heartbeat_enabled===!0,timezone:`Asia/Shanghai`},initial_todos:e.initialTodos,objective:e.objective,permission:e.permission,stop_condition:Lx(i),title:e.title,workspace_ref:`current`},summary:l(`proposal.summary.goalCreate`,{title:e.title})});return}if(R&&n.actionKind===`heartbeat.bind`){await Xe(`heartbeat`,R,i);return}if(R&&n.actionKind===`monitor.create`){let e=Fx(i,l);if(e){je(i),re(e);return}await Xe(`monitor`,R,i);return}let a=Rx(i,e);if(R&&a&&n.actionKind===`agent.bind`){await Ke({actionKind:`agent.bind`,context:{kind:`goal`,goal_id:R,natural_language:i},idempotencyKey:`workspace-agent-bind-${R}-${a.agentId}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:a.agentId,goal_id:R},summary:`将 ${a.label} 绑定到 ${V?.title??R}`});return}if(R&&n.actionKind===`todo.create`){if(n.normalizedParameters.start_execution===!0){await Ke({actionKind:`todo.create`,context:{kind:`goal`,goal_id:R,natural_language:i},idempotencyKey:`workspace-task-start-${R}-${Date.now().toString(36)}`,normalizedParameters:{endpoint_id:a?.agentId??De,goal_id:R,start_execution:!0,text:i},summary:`交给 Agent 执行:${i.slice(0,120)}`});return}let e=a?.agentId??(/(交给|分配给|让).{0,24}(agent|codex|claude|kiro|kimi)/iu.test(i)?De:null);await Ke({actionKind:`todo.create`,context:{kind:`goal`,goal_id:R,natural_language:i},idempotencyKey:`workspace-todo-create-${R}-${Date.now().toString(36)}`,normalizedParameters:{...e?{endpoint_id:e}:{},goal_id:R,text:zx(i)},summary:`创建 Todo:${zx(i)}`});return}let o=V?.agentTodos.find(e=>i.includes(e.todoId)||i.includes(e.text)),s=typeof n.normalizedParameters.operation==`string`?n.normalizedParameters.operation:null;if(R&&o&&n.actionKind===`todo.update`&&s){await Ke({actionKind:`todo.update`,context:{kind:`todo`,goal_id:R,todo_id:o.todoId,natural_language:i},idempotencyKey:`workspace-todo-update-${o.todoId}-${s}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:De,...s===`reassign`&&a?{endpoint_id:a.agentId}:{},...s===`block`?{note:i}:{},...s===`defer`&&typeof n.normalizedParameters.resume_when==`string`?{resume_when:n.normalizedParameters.resume_when}:{},goal_id:R,operation:s,todo_id:o.todoId},summary:`更新 Todo:${o.text}`});return}R?S!==`chat`&&ee(!0):D(!0);let c=await t.onSendMessage?.(i,De,R);c&&await Ke(c)}catch(e){n||(je(i),M(r));let t=e instanceof Error?e.message:l(`feedback.sendGenericError`);re(l(`feedback.sendFailed`,{error:t}))}finally{A(!1)}}}let at=e.find(e=>e.agentId===De)?.label??De,ot=!V&&ke.startsWith(l(`composer.createGoalDraftLead`)),st=Re.filter(e=>e.kind===`run`&&!!e.run.sessionId&&!!e.run.canInterrupt&&(e.run.status===`running`||e.run.status===`queued`)).length;async function ct(e){if(!e?.length)return;let t=Hx-j.length,n=Array.from(e).slice(0,Math.max(0,t)),r=n.find(e=>!Bx.has(e.type)),i=n.find(e=>e.size>Vx);if(t<=0){P(l(`composer.imageCountError`,{count:Hx}));return}if(r){P(l(`composer.imageTypeError`));return}if(i){P(l(`composer.imageSizeError`,{size:Vx/1024/1024}));return}try{let t=await Promise.all(n.map(e=>Ux(e,l)));M(e=>[...e,...t].slice(0,Hx)),P(e.length>n.length?l(`composer.imageCountError`,{count:Hx}):null)}catch(e){P(e instanceof Error?e.message:l(`composer.imageReadGenericError`))}finally{Se.current&&(Se.current.value=``)}}function lt(e){let t=Array.from(e.clipboardData.items).filter(e=>e.kind===`file`&&e.type.startsWith(`image/`)).flatMap(e=>{let t=e.getAsFile();return t?[t]:[]});t.length&&(e.preventDefault(),ct(t))}async function ut(){let e=await Jg();_e(e)}async function dt(){await Promise.all([ut(),t.onRefresh?.()])}async function ft(){if(!(!t.onRefresh||oe===`loading`)){se(`loading`);try{await t.onRefresh(),se(`done`)}catch{se(`error`)}window.setTimeout(()=>se(`idle`),1800)}}return Ie?(0,B.jsx)(ux,{focusGoalConnection:!!(m?.kind===`settings`&&m.goalId),goals:Ne,initialGoalId:m?.kind===`settings`?m.goalId??R:R,initialTab:m?.kind===`settings`?m.tab??`lark`:`lark`,onChanged:()=>void dt(),onClose:()=>h(null),onThemeChange:rt,theme:fe}):(0,B.jsx)(hx,{drawer:Ge?(0,B.jsx)(eb,{agents:e,attentionHistory:r.attentionHistory??r.userTodos,onSelectAttention:e=>h({kind:`attention`,item:e}),callbacks:et,goalNotifications:r.goalNotifications??[],goals:Ne,inspectorExpanded:g,larkConnections:i?[]:ge,onClose:()=>{Ge.kind===`proposal`&&[`applied`,`rejected`].includes(Ge.item.status)&&(Ge.item.actionKind!==`heartbeat.bind`||Ge.item.status!==`applied`)&&x(e=>{let t={...e};return delete t[Ge.item.previewId],t}),_(!1),h(null)},onToggleInspectorSize:()=>_(e=>!e),readOnly:i,runs:Re.flatMap(e=>e.kind===`run`?[e.run]:[]),selection:Ge}):null,drawerMode:Ge?.kind===`todo`?g?`inspector-full`:`inspector`:`panel`,drawerOpen:Ge!==null,mobileSidebarOpen:ue,onCloseMobileSidebar:()=>de(!1),theme:fe,main:(0,B.jsxs)(`div`,{className:`personal-channel`,children:[(0,B.jsx)(Ty,{agents:e,managerChatOpen:w,mobileNavigationOpen:ue,onOpenGoalCapabilities:V?()=>h({goalId:V.goalId,kind:`settings`,tab:`capabilities`}):void 0,onOpenGoalDetail:V&&!V.loadState?()=>h({item:V,kind:`goal`}):void 0,onRefresh:t.onRefresh?()=>void ft():void 0,onOpenNavigation:()=>de(!0),onOpenManagerChat:()=>{D(!1),T(!0)},onSelectGoalTab:e=>{C(e),e===`chat`&&(y(null),ee(!1))},onSelectAgent:nt,onReturnManagerHome:()=>{T(!1),D(!1),window.requestAnimationFrame(()=>xe.current?.scrollTo({behavior:`smooth`,top:0}))},selectedAgentId:De,refreshState:oe,readOnlySourceLabel:i?s?.activeSource.label:void 0,selectedGoal:V,selectedGoalTab:S}),(0,B.jsxs)(`div`,{className:`personal-channel-scroll`,ref:xe,children:[!V&&!w&&Te&&Te.done+Te.failed+Te.attention>0?(0,B.jsxs)(`section`,{className:`personal-digest-card`,"aria-label":l(`digest.away`),children:[(0,B.jsx)(`strong`,{children:l(`digest.away`)}),(0,B.jsxs)(`div`,{className:`personal-digest-stats`,children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`b`,{children:Te.done}),l(`digest.completed`)]}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`b`,{children:Te.failed}),l(`digest.failed`)]}),(0,B.jsxs)(`span`,{children:[(0,B.jsx)(`b`,{children:Te.attention}),l(`digest.needsYou`)]})]})]}):null,!V&&!w?(0,B.jsxs)(`section`,{className:`personal-manager-greeting`,children:[(0,B.jsx)(`span`,{children:(0,B.jsx)(Qp,{size:20})}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:l(`home.greeting`)}),(0,B.jsx)(`p`,{children:r.goals.some(e=>e.activationState===`active`&&e.loadState)?l(`startup.partial`):(0,B.jsxs)(B.Fragment,{children:[l(`home.waitingCount`,{count:Pe}),` `,l(`home.blockingSummary`,{count:Fe})]})})]})]}):null,V?.loadState?(0,B.jsx)(`section`,{className:`personal-manager-greeting`,role:`status`,"data-testid":`goal-status-loading`,children:(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`strong`,{children:l(V.loadState===`error`?`startup.goalError`:`startup.goalLoading`)}),(0,B.jsx)(`p`,{children:l(V.loadError?`startup.error.${V.loadError}`:`startup.independent`)}),V.loadState===`error`?(0,B.jsx)(`button`,{className:`min-h-11 rounded-md border px-3 py-2 text-sm`,type:`button`,onClick:()=>void t.onRefresh?.(),children:l(`startup.retry`)}):null]})}):V&&S===`tasks`?(0,B.jsx)(Eb,{historyEnabled:!i,goal:V,items:Re,onDraftTaskFromMessage:i?void 0:e=>{je(`创建一个 Task:${gx(e)}`),re(l(`feedback.taskDraftCreated`)),window.requestAnimationFrame(()=>be.current?.focus())},onOpenChat:()=>C(`chat`),onQuickComplete:i?void 0:Ze,onSelect:h,quickCompletingTodoIds:ae,selectedTodoId:Ge?.kind===`todo`?Ge.item.todoId:null,userTodos:r.userTodos}):V&&S===`files`?(0,B.jsx)(bx,{items:Re.filter(e=>e.kind===`output`),onSelect:h,reportState:r.periodicReports}):!V&&!w?(0,B.jsx)(yx,{goals:Ne,onRetry:()=>void t.onRefresh?.(),onSelectGoal:tt,systemHealth:r.systemHealth}):V?(0,B.jsxs)(B.Fragment,{children:[V&&v?.goalId===V.goalId?(0,B.jsx)(Sx,{onClose:()=>y(null),onOpenDetails:()=>h({item:v,kind:`run`}),run:v}):null,(0,B.jsx)(Ly,{items:ze,onSelect:h,selectedGoal:V})]}):(0,B.jsx)(Ly,{items:He,onSelect:h,selectedGoal:null})]}),(0,B.jsx)(`div`,{className:`personal-composer-wrap`,children:i?(0,B.jsxs)(`div`,{className:`personal-read-only-notice`,children:[(0,B.jsx)(`strong`,{children:l(`source.readOnlyNoticeTitle`)}),(0,B.jsx)(`span`,{children:l(`source.readOnlyNoticeDescription`)})]}):(0,B.jsxs)(B.Fragment,{children:[!V&&!w&&E&&Be.length?(0,B.jsx)(xx,{messages:Be,onClose:()=>D(!1),onOpenConversation:()=>{D(!1),T(!0)}}):null,V&&S!==`chat`&&O&&Ve.length?(0,B.jsx)(xx,{agentLabel:at,messages:Ve,onClose:()=>ee(!1),onDraftTask:S===`tasks`?e=>{je(`创建一个 Task:${gx(e)}`),re(l(`feedback.taskDraftCreated`)),window.requestAnimationFrame(()=>be.current?.focus())}:void 0,onOpenConversation:()=>{ee(!1),C(`chat`)},title:`${V.title} · ${at}`}):null,F?(0,B.jsxs)(`div`,{className:`personal-action-feedback`,role:`status`,children:[(0,B.jsx)(`span`,{children:F}),(0,B.jsx)(`button`,{"aria-label":l(`common.closeActionReceipt`),onClick:()=>re(null),type:`button`,children:(0,B.jsx)(eh,{size:14})})]}):null,(0,B.jsx)(`p`,{className:`personal-composer-hint`,children:V?st>0?l(`composer.goalRunningHint`,{agent:at,count:st}):l(`composer.goalMessageHint`,{agent:at}):l(`composer.managerMessageHint`)}),V?(0,B.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,B.jsxs)(`button`,{"aria-label":l(`composer.nextAction`),className:`is-draft`,onClick:()=>Me(l(`composer.nextActionPrompt`)),title:l(`composer.prepareDraft`),type:`button`,children:[(0,B.jsx)(Dm,{size:13}),(0,B.jsx)(`span`,{children:l(`composer.nextAction`)}),(0,B.jsx)(`small`,{className:`personal-prompt-subtle`,children:l(`composer.draft`)})]}),(0,B.jsxs)(`button`,{className:`is-immediate`,disabled:k,onClick:()=>void it(l(`composer.agentProgressPrompt`)),title:l(`composer.immediate`),type:`button`,children:[(0,B.jsx)(Vm,{size:13}),(0,B.jsx)(`span`,{children:l(`composer.agentProgress`)}),(0,B.jsx)(`em`,{className:`personal-prompt-badge`,children:l(`composer.immediate`)})]}),(0,B.jsxs)(`button`,{"aria-label":l(`composer.monitor`),className:`is-draft`,onClick:()=>Ye(`monitor`,R),title:l(`composer.monitorHint`),type:`button`,children:[(0,B.jsx)(em,{size:13}),(0,B.jsx)(`span`,{children:l(`composer.monitor`)}),(0,B.jsx)(`small`,{className:`personal-prompt-subtle`,children:l(`composer.draft`)})]})]}):(0,B.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,B.jsxs)(`button`,{"aria-label":l(`composer.globalTasks`),className:`is-draft`,onClick:()=>Me(l(`composer.globalTasksPrompt`)),title:l(`composer.prepareDraft`),type:`button`,children:[(0,B.jsx)(Dm,{size:13}),(0,B.jsx)(`span`,{children:l(`composer.globalTasks`)}),(0,B.jsx)(`small`,{className:`personal-prompt-subtle`,children:l(`composer.draft`)})]}),(0,B.jsxs)(`button`,{className:`is-immediate`,disabled:k,onClick:()=>void it(l(`composer.globalProgressPrompt`)),title:l(`composer.immediate`),type:`button`,children:[(0,B.jsx)(Vm,{size:13}),(0,B.jsx)(`span`,{children:l(`composer.globalProgress`)}),(0,B.jsx)(`em`,{className:`personal-prompt-badge`,children:l(`composer.immediate`)})]}),(0,B.jsxs)(`button`,{"aria-label":l(`composer.createGoal`),className:`is-draft`,onClick:qe,title:l(`composer.createGoalHint`),type:`button`,children:[(0,B.jsx)(Fm,{size:13}),(0,B.jsx)(`span`,{children:l(`composer.createGoal`)}),(0,B.jsx)(`small`,{className:`personal-prompt-subtle`,children:l(`composer.draft`)})]})]}),ot?(0,B.jsxs)(`div`,{className:`personal-goal-draft-status`,role:`status`,children:[(0,B.jsx)(`strong`,{children:l(`composer.createGoalDraft`)}),(0,B.jsx)(`span`,{children:l(`composer.createGoalDraftDescription`)})]}):null,j.length?(0,B.jsx)(`div`,{className:`personal-composer-images`,"aria-label":l(`composer.imagesPending`),children:j.map(e=>(0,B.jsxs)(`figure`,{children:[(0,B.jsx)(`img`,{alt:e.name,src:e.dataUrl}),(0,B.jsx)(`button`,{"aria-label":l(`composer.sentImageAlt`,{name:e.name}),onClick:()=>M(t=>t.filter(t=>t.id!==e.id)),type:`button`,children:(0,B.jsx)(eh,{size:13})})]},e.id))}):null,N?(0,B.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:N}):null,(0,B.jsxs)(`div`,{className:`personal-channel-composer`,onDragOver:e=>{[...e.dataTransfer.items].some(e=>e.kind===`file`&&e.type.startsWith(`image/`))&&e.preventDefault()},onDrop:e=>{let t=[...e.dataTransfer.files].filter(e=>e.type.startsWith(`image/`));t.length&&(e.preventDefault(),ct(t))},children:[(0,B.jsxs)(`span`,{children:[(0,B.jsx)(Qp,{size:17}),e.find(e=>e.agentId===De)?.label??De]}),(0,B.jsx)(`button`,{"aria-label":l(`composer.addImage`),className:`personal-composer-attach`,disabled:k||j.length>=Hx,onClick:()=>Se.current?.click(),title:l(`composer.attachImageHint`),type:`button`,children:(0,B.jsx)(Mm,{size:17})}),(0,B.jsx)(`input`,{accept:`image/png,image/jpeg,image/webp,image/gif`,"aria-label":l(`composer.imagePicker`),className:`personal-composer-file-input`,disabled:k||j.length>=Hx,multiple:!0,onChange:e=>void ct(e.target.files),ref:Se,type:`file`}),(0,B.jsx)(`textarea`,{"aria-label":l(`composer.sendMessage`),onChange:e=>je(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),it())},onPaste:lt,placeholder:V?l(`composer.goalPlaceholder`,{goal:V.title}):l(`composer.managerPlaceholder`),ref:be,rows:1,value:ke}),(0,B.jsx)(`button`,{"aria-label":l(ot?`composer.createGoal`:`composer.send`),disabled:!ke.trim()&&j.length===0||k,onClick:()=>void it(),title:l(ot?`composer.createGoalHint`:`composer.sendMessageHint`),type:`button`,children:(0,B.jsx)(Vm,{size:18})})]})]})})]}),sidebar:(0,B.jsx)(Sb,{attentionCount:Pe,goals:Ne,goalArchiveLoadState:n,goalLifecycleOperations:t.onExecuteGoalLifecycle?[`stop`,`resume`]:void 0,lifecycleBusyGoalIds:ie,onRequestGoalCreate:i?void 0:qe,onRequestGoalLifecycle:i&&!t.onExecuteGoalLifecycle?void 0:(e,t)=>void Je(e,t),onRetryGoalArchive:t.onRetryGoalArchive||t.onRefresh?()=>void(t.onRetryGoalArchive??t.onRefresh)?.():void 0,onOpenSettings:i?void 0:()=>h({kind:`settings`}),onSelectGoal:tt,selectedGoalId:R,statusSourceControl:s},s?.activeSource.statusUrl??`/status.json`)})}function Gx(e){return(e??``).replace(/\s+/gu,` `).trim()}function Kx(e,t=120){let n=Array.from(e);return n.length<=t?e:`${n.slice(0,t-1).join(``)}…`}function qx(e,t,n){let r=Gx(e);return!r||r===`暂无`?n?t(n):``:/refresh-state|latest_run|latest run-derived/iu.test(r)?t(`projection.refreshState`):/first read-only adapter tick|read-only adapter/iu.test(r)?t(`projection.firstReadOnlyAdapterCheck`):/todo update recorded for/iu.test(r)?t(`projection.todoStatusUpdated`):/^(loopx|python3|npm|git|run)\s|\s--[a-z0-9-]+|\b[a-z]+_[a-z_]+\b/iu.test(r)?t(n??`projection.agentPreparingNextStep`):Kx(r)}function Jx(e,t){return t({advancing:`projection.agentAdvancingGoal`,idle:`projection.agentIdle`,needs_you:`projection.agentNeedsDecision`,stopped:`projection.agentStopped`,waiting_external:`projection.agentWaitingExternal`}[e])}function Yx({eventCount:e,hasArtifact:t,hasLatestValidation:n},r){return{label:r(n?`projection.latestValidation`:`projection.latestRun`),metadata:e>0?r(`projection.events24h`,{count:e}):r(t?`projection.runEvidenceAvailable`:`projection.publicSafeProjection`)}}var Xx=`/status.json`,Zx=`loopx-status-source-catalog-v1`,Qx={id:`local`,kind:`local`,label:`本机`,readOnly:!1,statusUrl:Xx};function $x(e,t){let n=ah(e,t).source;if(!n||!n.isLoopback||n.isRelative)return{error:`SSH 隧道来源必须使用显式的 localhost、127.0.0.1 或 ::1 URL。`};let r=new URL(n.url,t);return[`http:`,`https:`].includes(r.protocol)?{url:r.toString()}:{error:`状态来源只支持 HTTP 或 HTTPS。`}}function eS(e){let t=2166136261;for(let n of e)t^=n.codePointAt(0)??0,t=Math.imul(t,16777619);return`ssh-${(t>>>0).toString(36)}`}function tS(e,t){if(!e||typeof e!=`object`||Array.isArray(e))return null;let n=e;if(n.kind!==`ssh_tunnel`||typeof n.label!=`string`||typeof n.statusUrl!=`string`)return null;let r=n.label.trim(),i=$x(n.statusUrl,t);if(!r||r.length>48||!(`url`in i))return null;let a=fb(n.hostAlias)?n.hostAlias.trim():void 0;return{...a?{hostAlias:a}:{},id:eS(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url}}function nS(){return{schemaVersion:1,sources:[Qx]}}function rS(e,t){try{let n=e.getItem(Zx);if(!n)return nS();let r=JSON.parse(n);if(r.schemaVersion!==1||!Array.isArray(r.sources))return nS();let i=new Set([Qx.statusUrl]);return{schemaVersion:1,sources:[Qx,...r.sources.flatMap(e=>{let n=tS(e,t);return!n||i.has(n.statusUrl)?[]:(i.add(n.statusUrl),[n])})]}}catch{return nS()}}function iS(e,t){e.setItem(Zx,JSON.stringify({schemaVersion:1,sources:t.sources.filter(e=>e.kind===`ssh_tunnel`)}))}function aS(e,t){let n=new Set(t.filter(fb).map(e=>e.trim())),r=!1,i=e.sources.map(e=>e.kind!==`ssh_tunnel`||e.hostAlias||!n.has(e.label)?e:(r=!0,{...e,hostAlias:e.label}));return r?{...e,sources:i}:e}function oS(e,t,n){let r=t.label.trim();if(!r)return{error:`请填写来源名称。`};if(r.length>48)return{error:`来源名称不能超过 48 个字符。`};let i=$x(t.statusUrl,n);if(!(`url`in i))return i;if(e.sources.some(e=>e.statusUrl===i.url))return{error:`这个状态 URL 已经在来源目录中。`};if(t.hostAlias!==void 0&&!fb(t.hostAlias))return{error:`请选择有效的 SSH Host。`};let a=t.hostAlias?.trim(),o={...a?{hostAlias:a}:{},id:eS(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url};return{catalog:{...e,sources:[...e.sources,o]},source:o}}function sS(e,t){return{...e,sources:e.sources.filter(e=>e.kind===`local`||e.id!==t)}}function cS(e,t,n){if(!t.trim()||ah(t,n).source?.isRelative)return Qx;let r=t.trim();try{r=new URL(r,n).toString()}catch{return null}return e.sources.find(e=>e.statusUrl===r)??null}function lS(e,t,n){return cS(e,t,n)||(ah(t,n).source?.isRelative?Qx:{id:`temporary`,kind:`ssh_tunnel`,label:`临时来源`,readOnly:!0,statusUrl:t.trim()})}function uS(e,t,n,r){return lS(e,t??n,r)}var dS={delete:`删除`,deploy:`部署`,merge:`合并`,payment:`付款`,release:`发布`};function fS(e,t,n){let r=t.replace(/\s+/gu,` `).trim().toLowerCase(),i=n.target.replace(/\s+/gu,` `).trim().toLowerCase();return!i||!r.includes(i)?null:{actionKind:`goal.update`,context:{goal_id:e,kind:`goal`,natural_language:t,semantic_proposal:{operation:n.operation,target:n.target}},idempotencyKey:`workspace-semantic-protected-${e}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e,status:`operator_gate_requested`},summary:`请求受保护操作:${dS[n.operation]} · ${n.target}`}}var pS=Xx;async function mS(e){let t=await fetch(e,{cache:`no-store`,signal:AbortSignal.timeout(3e4)});if(!t.ok)throw Error(`HTTP ${t.status} while loading ${e}`);return Ep(await t.json())}function hS(e,t){if(t?.controller_readiness?.decision_advisor_ready||t?.controller_readiness?.write_controller_ready)return`controller_ready`;if(t?.controller_readiness)return`controller_gated`;if(t?.human_reward)return`reward_judged`;if(t?.operator_gate?.decision===`approve`)return`operator_approved`;if(t?.operator_gate)return`operator_gated`;let n=e||t?.classification||``;return n===`connected_without_run`?`connected`:n===`read_only_project_map`||t?.project_map?`mapped`:n===`state_refreshed`?`refreshed`:n&&n!==`no_status`?`adapter_inspected`:`registered`}function gS(e,t){let n=new Map(t.map(e=>[e.goal_id,e])),r=new Set,i=e.map(e=>{r.add(e.id);let t=n.get(e.id),i=e.latest_runs[0],a=t?.lifecycle_phase??e.lifecycle_phase??i?.lifecycle_phase??hS(t?.status??i?.classification??e.status,i),o=t?.lifecycle_flags?.length?t.lifecycle_flags:e.lifecycle_flags?.length?e.lifecycle_flags:i?.lifecycle_flags?.length?i.lifecycle_flags:[a];return{goal:e,queueItem:t,latestRun:i,status:t?.status??i?.classification??e.status??`no_status`,waitingOn:t?.waiting_on??`clear`,severity:t?.severity??`clear`,lifecyclePhase:a,lifecycleFlags:o}});for(let e of t)r.has(e.goal_id)||i.push({goal:{activation_state:e.activation_state,id:e.goal_id,status:e.status,display_name:e.goal_id,latest_runs:[],lifecycle_flags:[e.lifecycle_phase??`registered`],registry_member:!0,legacy_runtime_goal:!1,index_exists:!1,raw_index_records:0,unique_runs:0},queueItem:e,status:e.status,waitingOn:e.waiting_on,severity:e.severity,lifecyclePhase:e.lifecycle_phase??`registered`,lifecycleFlags:e.lifecycle_flags??[`registered`]});return i}function _S(e){return(e??``).replace(/\s+/g,` `).trim()}function vS(e,t=132){let n=_S(e);return n.length<=t?n:`${n.slice(0,Math.max(0,t-1))}…`}function yS(e){let t=new Map;for(let n of e?.goals??[])t.set(n.goal_id,n);return t}function bS(e,t){return e===void 0||t===void 0?void 0:e+t}function xS(e,t){if(!e)return null;let n=t===`user`?e.queueItem?.project_asset?.user_todos:e.queueItem?.project_asset?.agent_todos;if(n?.items?.length)return{done_count:n.done??n.items.filter(e=>e.done).length,items:n.items,open_count:n.open??n.items.filter(e=>!e.done).length,total_count:n.total??n.items.length};let r=t===`user`?e.queueItem?.user_todos:e.queueItem?.agent_todos;return r?.items?.length?r:null}function SS(e){return e?.items.find(e=>!e.done)}function CS(e,t,n=`todos`){return e?.items?.length?{advancement_done_count:e.advancement_done_count??t?.advancement_done_count,done_count:e.done??e.items.filter(e=>e.done).length,items:e.items,open_count:e.open??e.items.filter(e=>!e.done).length,total_count:e.total??e.items.length}:t??null}function wS(e){return e?.queueItem?.project_asset?.quota?.state??e?.queueItem?.quota?.state??e?.goal.quota?.state??`waiting`}function TS(e,t,n){let r=[];for(let t of e){let e=xS(t,`agent`);for(let n of e?.items??[])r.push({goalId:t.goal.id,role:`agent`,todo:n})}let i=new Map;for(let e of r){let t=e.todo.claimed_by||`codex`,n=i.get(t)??[];n.push(e),i.set(t,n)}let a=new Map((n?.agents??[]).map(e=>[e.agent_id,e]));return Array.from(new Set([...i.keys(),...a.keys()])).map(e=>{let t=i.get(e)??[],n=a.get(e),r=Array.from(new Set([...t.map(e=>e.goalId),n?.current_todo?.goal_id,...n?.goal_ids??[]].filter(Boolean))),o=(t.filter(e=>!e.todo.done)[0]??t[0])?.goalId??n?.current_todo?.goal_id??r[0]??``,s=n?.last_activity_at??null;return{agentId:e,claimedTodos:t,currentTodo:n?.current_todo??null,evidenceRefs:[],goalIds:r,handoffNote:null,lastActivity:s,nextSafeAction:n?.next_action?.trim()||`Inspect status projection before taking work`,primaryGoalId:o,quotaHints:[],staleClaimHint:null,status:{label:`可用`,summary:`正常运行`,variant:`success`},workspaceRef:null}})}function ES(e){return e?.map(e=>({dataUrl:e.data_url,id:e.id,mimeType:e.mime_type,name:e.name,size:e.size}))}var DS=`loopx.personal-agent-selection.v1`;function OS(){if(typeof window>`u`)return{};try{let e=JSON.parse(window.localStorage.getItem(DS)??`{}`);return!e||typeof e!=`object`||Array.isArray(e)?{}:Object.fromEntries(Object.entries(e).filter(e=>typeof e[0]==`string`&&typeof e[1]==`string`))}catch{return{}}}var kS={需修复:`danger`,等你:`warning`,等待条件:`info`,推进中:`success`,安静运行:`neutral`,已停止:`neutral`,已完成:`neutral`};function AS(e,t){return _S(t)||e.replace(/^loopx[-_]/i,`LoopX `).split(/[-_]+/).filter(Boolean).map((e,t)=>t===0?`${e.slice(0,1).toUpperCase()}${e.slice(1)}`:e).join(` `)}function jS(e){return e.split(/\r?\n/u).filter(e=>!/^\s*GOAL_(STATUS|PROGRESS)\s*:/u.test(e)).map(e=>/^\s*GOAL_EVIDENCE\s*:/u.test(e)?e.replace(/^\s*GOAL_EVIDENCE\s*:/u,`验证依据:`):/^\s*NEXT_ACTION\s*:/u.test(e)?e.replace(/^\s*NEXT_ACTION\s*:/u,`下一步:`):e).join(` +`).trim()}function MS(e,t){return[`agent`,`assistant`].includes(e.trim().toLowerCase())&&t.trim().length>0}var NS=`已发现的项目 Agent`;function PS(e){switch(ly(e)){case`codex`:return`Codex`;case`claude`:return`Claude Code`;case`kiro`:return`Kiro CLI`;case`trae`:return`Trae CLI Agent`;case`coco`:return`Coco Agent`;default:return AS(e)}}function FS(e,t){switch(uy(e,t)){case`codex`:return`代码与项目执行`;case`claude`:return`复杂分析与长任务`;case`openai`:case`anthropic`:return`管家问答 · 无工具`;case`kiro`:return`终端编码 · 原生 /goal 循环`;case`trae`:return`前端与交互实现`;case`coco`:return`通用任务`;default:return NS}}function IS(e,t){let n=e.project_asset;return t===`user`?CS(n?.user_todos,e.user_todos,`project_asset.user_todos`):CS(n?.agent_todos,e.agent_todos,`project_asset.agent_todos`)}function LS(e){return vS(e.title??e.text,112)}function RS(e){let t=e.resume_condition?.resume_receipt;if(!t||typeof t!=`object`||Array.isArray(t))return null;let n=t.receipt_id;return typeof n==`string`&&n.trim()?n.trim():null}function zS(e,t){return{resumeWhen:e.resume_when??null,resumeReady:e.resume_ready??null,resumeReceiptId:RS(e),claimedBy:e.claimed_by??null,done:e.status!==`deferred`&&e.done,evidence:e.evidence?vS(e.evidence,96):null,index:e.index,priority:e.priority??null,status:e.status??null,taskClass:e.task_class??null,taskDomain:e.task_domain??null,text:LS(e),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.index}`}}function BS(e){let t=e.queueItem?.agent_todos,n=t?.items??e.queueItem?.project_asset?.agent_todos?.items??[],r=new Map(n.map(t=>[t.todo_id?.trim()||`${e.goal.id}:agent:${t.index}`,t]));for(let n of t?.deferred_items??[]){let t=n.todo_id?.trim()||`${e.goal.id}:agent:${n.index}`;r.has(t)||r.set(t,n)}return[...r.values()]}function VS(e){return BS(e).map(t=>zS(t,e))}function HS(e,t,n){let r=new Map;for(let n of e.todo_index?.items??[]){if(n.goal_id!==t.goal.id||n.role!==`agent`)continue;let e=zS(n,t);r.set(e.todoId,e)}for(let e of n)r.has(e.todoId)||r.set(e.todoId,e);let i=new Map;for(let e of r.values()){if(e.done||e.taskClass!==`advancement_task`)continue;let t=e.taskDomain?.trim();t&&i.set(t,(i.get(t)??0)+1)}return[...i].map(([e,t])=>({domain:e,matchingTodoCount:t}))}function US(e,t){return{claimedBy:e.claimed_by??null,done:e.status===`done`||e.status===`completed`,index:-1,priority:e.priority??null,status:e.status??null,taskClass:e.task_class??null,text:vS(e.title,112),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.claimed_by??`unknown`}:current`}}function WS(e,t,n){let r=new Map(e.map(e=>[e.todoId,e]));for(let e of t){let t=e.currentTodo;if(!t||t.goal_id!==n.goal.id)continue;let i=US(t,n);r.has(i.todoId)||r.set(i.todoId,i)}return[...r.values()]}function GS(e){let t=e.queueItem?.project_asset?.agent_todos,n=e.queueItem?.agent_todos,r=BS(e),i=t?.advancement_done_count??n?.advancement_done_count??t?.done??n?.done_count??null,a=r.filter(e=>e.done&&e.status!==`deferred`).length,o=Math.max(i??0,a),s=new Set(r.map(e=>e.todo_id?.trim()).filter(e=>!!e)),c=(t?.recent_completed_advancement_items??[]).filter(e=>!e.todo_id?.trim()||!s.has(e.todo_id.trim())).map(t=>zS(t,e)),l=r.find(e=>!e.done);return{doneTodoCount:o,nextTodoText:_S(t?.next??``)||(l?_S(l.title??``)||_S(l.text??``):``)||null,recentCompleted:c}}function KS(e,t){let n=_S(e);return n?/\b(state_file|registry_goal|authority_sources|source_registry)\b|\b[a-z_]+\s+\d+\/\d+/i.test(n)?t(`projection.goalVerified`):qx(n,t,`projection.validationRecorded`):``}function qS(e,t=4){if(e.length<=t)return e;let n=e.findIndex(e=>!e.done);if(n<0)return e.slice(-t);let r=Math.max(0,Math.min(n-2,e.length-t));return e.slice(r,r+t)}function JS(e,t,n){let r=t.queueItem?.project_asset?.latest_validation,i=t.latestRun,a=e.event_ledger_summary?.goals.find(e=>e.goal_id===t.goal.id);if(!r&&!i&&!a)return null;let o=[KS(r?.summary,n),qx(i?.health_check,n),qx(i?.recommended_action,n)].find(e=>e!==``&&e!==`暂无`)??n(`projection.runRecorded`),s=Yx({eventCount:a?.events_24h??0,hasArtifact:!!(i?.json_exists||i?.markdown_exists),hasLatestValidation:!!r},n);return{generatedAt:r?.generated_at??i?.generated_at??a?.latest_event_at??``,label:s.label,metadata:s.metadata,runId:i?`${t.goal.id}:${i.generated_at}`:null,safePreview:[o,s.metadata].filter(Boolean).join(` +`),summary:o,todoId:t.queueItem?.project_asset?.agent_todos?.items.find(e=>!e.done)?.todo_id??null}}function YS(e){return[e.status,e.goal.status,e.latestRun?.classification,e.lifecyclePhase].filter(Boolean).some(e=>/(^|[_\s-])(done|complete|completed|finished|terminal|closed|success)([_\s-]|$)/i.test(e??``))}function XS(e,t){return e.global_registry?.findings?.find(e=>e.severity===`high`&&(e.goal_id===t.goal.id||e.goal_ids.includes(t.goal.id)))}function ZS(e){return[e.status,e.goal.status,e.latestRun?.classification,e.lifecyclePhase].filter(Boolean).some(e=>/(^|[_\s-])(failure|failed|error|broken|unhealthy|blocked[_\s-]?health|health[_\s-]?blocked)([_\s-]|$)/i.test(e??``))}function QS(e,t){let n=t.queueItem?.stale_latest_run_warning;return t.severity===`high`||!!XS(e,t)||!!(n?.requires_refresh_state||n?.severity===`high`)||ZS(t)}function $S(e,t){let n=XS(e,t);return t.queueItem?.stale_latest_run_warning?.recommended_action??t.queueItem?.stale_latest_run_warning?.reason??n?.recommended_action??n?.message??t.queueItem?.recommended_action??t.latestRun?.recommended_action??null}function eC(e){let t=e.latestRun?.operator_gate,n=t?.decision?.trim().toLowerCase()??``,r=new Set([`approve`,`approved`,`reject`,`rejected`,`defer`,`deferred`,`cancel`,`cancelled`]),i=[e.queueItem?.recommended_action,e.latestRun?.recommended_action].filter(Boolean).join(` `),a=/(?:等待|需要)(?:用户|你|owner).{0,24}(?:批准|确认|授权|补充|选择|决定)|(?:批准|确认|授权).{0,16}(?:后|才能|方可)/i.test(i);return!!(t&&!r.has(n))||e.lifecyclePhase===`operator_gated`&&!r.has(n)||a}function tC(e,t){let n=e.latestRun?.operator_gate;return qx(n?.operator_question??n?.reason_summary??n?.follow_up??e.queueItem?.recommended_action??e.latestRun?.recommended_action,t,`projection.confirmAgentDecision`)}function nC(e,t){if(t.goal.activation_state===`stopped`)return`已停止`;let n=xS(t,`user`),r=xS(t,`agent`),i=!!SS(n),a=!!SS(r);return[`user_or_controller`,`controller`].includes(t.waitingOn)||i||eC(t)?`等你`:QS(e,t)?`需修复`:t.waitingOn===`external_evidence`?`等待条件`:wS(t)===`eligible`||a?`推进中`:YS(t)?`已完成`:`安静运行`}function rC(e,t,n,r){if(n===`已停止`)return Jx(`stopped`,r);if(n===`需修复`)return qx($S(e,t),r,`projection.statusRefreshNeeded`);if(n===`等你`)return Jx(`needs_you`,r);if(n===`推进中`){let e=[(xS(t,`agent`)?.items??[]).filter(e=>!e.done).flatMap(e=>[e.title,e.text]).map(e=>_S(e)).find(e=>e!==``&&e!==`暂无`),t.queueItem?.recommended_action,t.latestRun?.recommended_action].map(e=>_S(e)).find(e=>e!==``&&e!==`暂无`);return e?qx(e,r,`projection.agentAdvancingGoal`):Jx(`advancing`,r)}return Jx(n===`等待条件`?`waiting_external`:`idle`,r)}function iC(e,t){return t.some(t=>e.includes(t))}function aC(e,t,n){if(t.goals.some(e=>e.activationState===`active`&&e.loadState))return{text:`Goal 状态尚未全部加载,暂不能给出完整统计。可先打开已加载的 Goal,失败项可重试。`,lines:[]};if(iC(n,[`Agent`,`agent`,`推进`,`在做`])){let e=t.goals.filter(e=>![`安静运行`,`已完成`,`已停止`].includes(e.state)),n=(e.length>0?e:t.goals).slice(0,3);return n.length===0?{text:`当前状态里还没有 Goal 可供汇总。`,lines:[]}:{text:e.length>0?`Agent 当前关注这些 Goal:`:`当前 Goal 都比较安静:`,lines:n.map(e=>`${e.title} · ${e.state} · ${e.agentSentence}`)}}if(iC(n,[`现在`,`下一步`,`我该`,`该做什么`,`优先处理`])){let e=t.userTodos[0];if(e)return{text:e.blocking?`先处理「${AS(e.goalId)}」:${e.text}`:`当前最先处理「${AS(e.goalId)}」:${e.text}`,lines:[]};let n=t.goals.find(e=>e.state===`需修复`);if(n)return{text:`没有待办,但这个 Goal 需要先修复。`,lines:[`${n.title} · ${n.agentSentence}`]};let r=t.goals.find(e=>e.state===`推进中`);return r?{text:`目前不需要你介入,Agent 正在推进。`,lines:[`${r.title} · ${r.agentSentence}`]}:{text:`当前系统很安静,没有需要你立即处理的事项。`,lines:[]}}if(iC(n,[`等我`,`阻塞`,`需要我`,`全局待办`]))return t.userTodos.length===0?{text:`目前没有 Goal 在等你,开放用户待办为 0。`,lines:[]}:{text:`有 ${t.userTodos.length} 项开放用户待办,阻塞项优先:`,lines:t.userTodos.slice(0,3).map(e=>`${AS(e.goalId)} · ${e.blocking?`阻塞`:`待处理`} · ${e.text}`)};if(iC(n,[`状态`,`异常`,`修复`,`健康`])){let n=t.systemHealth?!t.systemHealth.ok:!e.ok||!e.contract?.ok||!e.global_registry?.ok||(e.global_registry?.summary?.high??0)>0,r=t.goals.filter(e=>e.state===`需修复`),i=r.slice(0,n?2:3).map(e=>`${e.title} · ${e.agentSentence}`);return n&&i.push(`全局状态、契约或注册表健康检查未通过,请进入管理页检查。`),i.length===0?{text:`当前没有发现 Goal 级或全局健康异常。`,lines:[]}:{text:r.length>0?`当前需要关注这些健康问题:`:`Goal 状态正常,但全局健康需要检查:`,lines:i}}return{text:`当前管家支持三类问题:下一步、等待你的事项、Agent 与健康状态。`,lines:[`问“我现在该做什么?”`,`问“哪些 Goal 在等我?”`,`问“Agent 在做什么?”或当前健康状态`]}}function oC(e,t,n,r=!1){let i=new Map(t.map(e=>[e.goal.id,e])),a=new Set(e.run_history.goals.filter(e=>e.activation_state===`stopped`).map(e=>e.id)),o=yS(e.usage_summary),s=TS(t,e.todo_index,e.agent_management_projection),c=e.attention_queue.items.flatMap((e,t)=>{if(a.has(e.goal_id))return[];let n=[`user_or_controller`,`controller`].includes(e.waiting_on);return(IS(e,`user`)?.items??[]).map((r,i)=>({projectedDone:r.done,details:Ud(r),actionKind:r.action_kind??null,blocking:n,goalId:e.goal_id,sourceOrder:t,taskClass:r.task_class??null,text:LS(r),todoId:r.todo_id?.trim()||`${e.goal_id}:user:${r.index}`,todoOrder:i,updatedAt:r.updated_at??null}))}),l=c.filter(e=>!e.projectedDone),u=new Set(l.map(e=>e.goalId)),d=t.flatMap((t,r)=>a.has(t.goal.id)||u.has(t.goal.id)||!eC(t)?[]:[{details:Ud({task_class:`user_gate`,status:`open`,note:t.latestRun?.operator_gate?.reason_summary}),actionKind:`gate.resolve`,blocking:!0,goalId:t.goal.id,sourceOrder:e.attention_queue.items.length+r,taskClass:`user_gate`,text:tC(t,n),todoId:`${t.goal.id}:operator-gate`,todoOrder:0,updatedAt:t.latestRun?.operator_gate?.recorded_at??t.latestRun?.generated_at??null}]),f=[...l,...d].sort((e,t)=>Number(t.blocking)-Number(e.blocking)||e.sourceOrder-t.sourceOrder||e.todoOrder-t.todoOrder),p=e.run_history.goals.flatMap(t=>{if(t.registry_member===!1)return[];let a=i.get(t.id);if(!a)return[];let c=nC(e,a),l=f.find(e=>e.goalId===t.id),u=l?.text??null,d=GS(a),p=t.coordination?.registered_agents??[],m=new Set(p),h=[...s.filter(e=>e.goalIds.includes(t.id)&&!/unassigned|unknown/i.test(e.agentId)&&(m.size===0||m.has(e.agentId))&&(e.currentTodo?.goal_id===t.id||e.claimedTodos.some(e=>e.goalId===t.id)))].sort((e,t)=>(t.lastActivity??``).localeCompare(e.lastActivity??``)),g=new Set(h.map(e=>e.agentId)),_=[...h.map(e=>({agentId:e.agentId,label:e.agentId,lastActivityAt:e.lastActivity,state:e.status.label})),...p.filter(e=>!g.has(e)).map(e=>({agentId:e,label:e,lastActivityAt:null,state:`registered`}))],v=h[0],y=WS(VS(a),h,a),b=[d.nextTodoText,a.queueItem?.recommended_action,a.latestRun?.recommended_action,rC(e,a,c,n)].map(e=>qx(e,n)).find(e=>e!==``&&e!==`暂无`)??n(`projection.nextUpdatePending`);return[{activationState:t.activation_state,agentId:v?.agentId??p[0]??`codex`,agentLaneCount:_.length,agentLanes:_,agentLabel:v?.agentId,agentSentence:rC(e,a,c,n),agentTodos:[...y,...d.recentCompleted],doneTodoCount:d.doneTodoCount,acceptanceObservation:t.acceptance_observation,goalId:t.id,latestActivity:a.latestRun?.generated_at??``,needsYou:u,needsYouActionKind:l?.actionKind??null,needsYouBlocking:l?.blocking??!1,needsYouTaskClass:l?.taskClass??null,needsYouTodoId:l?.todoId??null,nextSentence:b,runEvidence:JS(e,a,n),state:c,...r?{subagentExecution:{allowedDomains:t.spawn_policy?.allowed_domains??[],domainCandidates:HS(e,a,y),enabled:t.spawn_policy?.mode===`multi_subagent`&&t.spawn_policy.spawn_allowed===!0&&t.spawn_policy.max_children>0,maxChildren:t.spawn_policy?.max_children??0,modelConfig:t.spawn_policy?.model_config}}:{},title:AS(t.id,t.display_name),usage:(()=>{let e=o.get(t.id);return e?{costUsd24h:e.cost_usd_24h,costUsd7d:e.cost_usd_7d,durationMs24h:e.duration_ms_24h,durationMs7d:e.duration_ms_7d,tokens24h:bS(e.input_tokens_24h,e.output_tokens_24h),tokens7d:bS(e.input_tokens_7d,e.output_tokens_7d)}:null})()}]}),m=[];if(e.ok||m.push(`状态载荷未标记为正常 (payload.ok === false)`),e.contract&&!e.contract.ok){let t=e.contract.summary,n=t?`${t.errors} 项错误 / ${t.warnings} 项警告`:e.contract.errors?.[0]||`请检查控制面契约`;m.push(`契约检查未通过: ${n}`)}if(e.global_registry){e.global_registry.ok||m.push(`注册表状态异常: ${e.global_registry.summary.high} 项高危`);for(let t of e.global_registry.findings||[])t.severity===`high`&&m.push(`[${t.kind}] ${t.message}`)}let h=e.decision_freshness_summary?.summary?.stale_count?`${e.decision_freshness_summary.summary.stale_count} 项决策状态已过期`:null,g=m.length===0&&!h,_={ok:g,summary:g?`所有控制面契约与注册表检查均正常`:`发现 ${m.length+ +!!h} 项系统健康关注点`,issues:m,freshnessWarning:h};return{blockingTodoCount:f.filter(e=>e.blocking).length,goalNotifications:(e.goal_channel_notification_projection?.goals??[]).map(e=>({goalId:e.goal_id,configured:e.configured,enabled:e.enabled,humanGateAutoNotifyEnabled:e.human_gate_auto_notify_enabled,lastNotifiedAt:e.last_notified_at??null,receiptCount:e.receipt_count,targetRef:e.target_ref??null})),goals:p,openUserTodoCount:f.length,systemHealth:_,attentionHistory:[...c,...d],userTodos:f,visibleUserTodos:f.slice(0,5),workers:(e.agent_management_projection?.agents??[]).map(e=>({agentId:e.agent_id,currentTodoGoalId:e.current_todo?.goal_id??null,currentTodoText:e.current_todo?.title?vS(e.current_todo.title,96):null,lastActivityAt:e.last_activity_at??null,state:e.state??null}))}}function sC({goalArchiveLoadState:e,isLoading:t,onGoalActivationStateChange:n,onGoalDeleted:r,onSelectGoal:i,onReconcileStatus:a,onRefresh:o,onRetryGoalArchive:s,payload:c,progress:l,rows:u,selectedGoalId:d,statusSourceControl:f,theme:p,toggleTheme:m}){let h=f.activeSource.readOnly,g=f.activeSource.kind===`ssh_tunnel`?f.activeSource.hostAlias:void 0,{t:_}=Ji(),[v,y]=(0,z.useState)([]),[b,x]=(0,z.useState)(!1),S=(0,z.useMemo)(()=>{let e=oC(c,u,_,b);if(!l)return e;let t=Object.values(l.snapshots).map(e=>oC(e,gS(e.run_history.goals,e.attention_queue.items),_,b)),n=new Map(t.flatMap(e=>e.goals).map(e=>[e.goalId,e])),r=e.goals.map(e=>n.get(e.goalId)??{...e,loadError:l.errors[e.goalId],loadState:l.errors[e.goalId]?`error`:`loading`,agentId:``,agentSentence:``,nextSentence:``,subagentExecution:void 0}),i=t.flatMap(e=>e.userTodos),a=r.some(e=>e.activationState===`active`&&e.loadState),o=[...new Set(t.flatMap(e=>e.systemHealth?.issues??[]))];return{...e,goals:r,userTodos:i,attentionHistory:t.flatMap(e=>e.attentionHistory??e.userTodos),visibleUserTodos:i.slice(0,5),openUserTodoCount:i.length,blockingTodoCount:i.filter(e=>e.blocking).length,workers:[...new Map(t.flatMap(e=>e.workers??[]).map(e=>[e.agentId,e])).values()],goalNotifications:t.flatMap(e=>e.goalNotifications??[]),systemHealth:a||t.length===0?void 0:{ok:t.every(e=>e.systemHealth?.ok),issues:o,summary:o.length?`发现 ${o.length} 项系统健康关注点`:`状态检查已完成`,freshnessWarning:t.map(e=>e.systemHealth?.freshnessWarning).filter(Boolean).join(`;`)||null}}},[c,u,l,b,_]),C=S.goals.find(e=>e.goalId===d)??null,w=l?.snapshots[d]??c,[T,E]=(0,z.useState)(null),[D,O]=(0,z.useState)(null),[ee,te]=(0,z.useState)(!1),ne=S.goals.some(e=>e.activationState===`active`&&e.loadState===`loading`)?`loading`:S.goals.map(e=>`${e.goalId}:${e.agentId}`).join(`|`),k=C?.goalId??`manager`;S.goals.some(e=>e.activationState===`active`&&e.loadState)||(S.systemHealth?!S.systemHealth.ok:!c.ok)||S.openUserTodoCount>0&&`${S.openUserTodoCount}${S.blockingTodoCount}`;let A=v.length>0?v.map(e=>({agentId:e.agent_id,adapterKind:e.adapter_kind,available:e.available,capability:FS(e.agent_id,e.adapter_kind),interrupt:e.interrupt,label:e.display_name,location:e.location,resume:e.resume,source:e.source,statusLabel:e.available?`可用`:`需要配置`,streaming:e.streaming,toolCalls:e.tool_calls,trustScope:e.trust_scope})):[{agentId:`codex`,available:!0,capability:FS(`codex`),label:`Codex`,statusLabel:`正在检测`}],j=[...A,{agentId:`status-only`,available:!0,capability:`不调用模型`,adapterKind:`status_projection`,interrupt:!1,label:`仅查状态`,resume:!0,statusLabel:`只读`,streaming:!1,toolCalls:!1,trustScope:`read_only`}],M=A.find(e=>e.label===`Codex`&&e.available)?.agentId??A.find(e=>e.available)?.agentId??`status-only`,[N,P]=(0,z.useState)(OS),F=dh(j,N[k]??M,M),[re,ie]=(0,z.useState)(!1),[I,ae]=(0,z.useState)(!1),[L,oe]=(0,z.useState)(`chat`),[se,ce]=(0,z.useState)(``),[le,ue]=(0,z.useState)({}),[de,fe]=(0,z.useState)({}),[pe,me]=(0,z.useState)(null),[he,ge]=(0,z.useState)({}),[_e,ve]=(0,z.useState)([]),[ye,be]=(0,z.useState)(null),[xe,Se]=(0,z.useState)({}),Ce=(0,z.useRef)(1),we=(0,z.useRef)(1),Te=(0,z.useRef)(new Map),Ee=(0,z.useRef)(new Set),R=(0,z.useRef)(new Map),De=(0,z.useRef)(new Map),Oe=(0,z.useRef)(new Set),ke=(0,z.useRef)(new Set),Ae=(0,z.useRef)(null),je=(0,z.useRef)(null),Me=(0,z.useRef)(null),Ne=(0,z.useRef)(null);(0,z.useRef)(null);let Pe=le[k]??[];de[k];let Fe=C?S.userTodos.filter(e=>e.goalId===C.goalId):S.userTodos,V=C?.agentTodos??[];qS(V,C?.needsYou?3:4);let Ie=V.filter(e=>e.done).length,Le=V.length>0?`${Ie}/${V.length}`:`暂无计划`;C&&({...S},Fe.filter(e=>e.blocking).length,Fe.length),(0,z.useEffect)(()=>{let e=ih(f.activeSource.statusUrl,window.location.href),t=e.source?ch(w,e.source):null;if(!C||!t?.indexUrl||!t.detailUrl){E(null),O(null),te(!1);return}let{detailUrl:n,indexUrl:r}=t,i=!1;return E(null),O(null),te(!0),lh(r,C.goalId).then(async e=>{let t=e.items[0]?.detail_ref;return t?uh(n,t):null}).then(e=>{i||E(e)}).catch(e=>{i||O(Dp(e))}).finally(()=>{i||te(!1)}),()=>{i=!0}},[w,C?.goalId,f.activeSource.statusUrl]);let Re=C?void 0:he[k]?.sessionId;(0,z.useEffect)(()=>{if(h||!Re)return;let e=!1,t,n=async()=>{try{let t=await Vh(Re);if(e)return;let n=t.messages.filter(e=>e.origin===`manager_followup`);ue(e=>{let t=e[k]??[],r=new Set(t.map(e=>e.sourceMessageId)),i=n.filter(e=>!r.has(e.message_id));return i.length?{...e,[k]:[...t,...i.map(e=>({id:Ce.current++,sourceMessageId:e.message_id,role:`assistant`,agentLabel:F.label,sourceLabel:`管家交接回执`,text:jS(e.text),lines:[]}))]}:e})}catch{}finally{e||(t=setTimeout(n,3e3))}};return n(),()=>{e=!0,t&&clearTimeout(t)}},[h,Re,k,F.label]);function ze(e,t){ge(n=>{if(t===null){let t={...n};return delete t[e],t}return{...n,[e]:t}})}(0,z.useEffect)(()=>{if(h){y([]),x(!1);return}let e=!1;return Rh().then(t=>{e||(y(t.adapters??[]),x(t.goal_subagent_configuration===`preview_locked`))}).catch(()=>{e||x(!1)}),()=>{e=!0}},[h]),(0,z.useEffect)(()=>{try{window.localStorage.setItem(DS,JSON.stringify(N))}catch{}},[N]),(0,z.useEffect)(()=>{if(h||!F.available)return;let e=k,t=`${e}:${F.agentId}`,n=C?`goal`:`manager`,r=C?`goal.${C.goalId}`:`manager`,i=!1,a=null,o=null;return(async()=>{try{let s=await Wh({agentId:F.agentId,channelId:r,goalId:C?.goalId});if(i||(ue(t=>(t[e]?.length??0)>0?t:{...t,[e]:s.messages.map(e=>({sourceMessageId:e.message_id,agentLabel:e.role===`user`?void 0:F.label,attachments:ES(e.attachments),id:Ce.current++,lines:[],role:e.role===`user`?`user`:`assistant`,sourceLabel:e.role===`user`?void 0:e.role===`error`?`本地会话记录`:`恢复的 ${F.label} 会话`,text:e.role===`user`?e.text:jS(e.text)}))}),F.agentId===`status-only`))return;let c=s.sessions[0];if(o=c?.session_id??null,c&&!c.resumable){Ee.current.add(t),ze(e,{agentId:F.agentId,resumable:!1,sessionId:c.session_id,status:`resume_failed`});return}let l=n===`manager`?``:C?.goalId??``;if(n===`goal`&&!l)return;let u=await Bh(l,F.agentId,`resume_latest`,n);if(i)return;Te.current.set(t,u.session_id);let d=s.snapshots.find(e=>e.session.session_id===u.session_id),f=d?.session.active_turn_id??``;if(ze(e,{agentId:F.agentId,resumable:!0,sessionId:u.session_id,status:f?`running`:`ready`,turnId:f||void 0}),Ee.current.delete(t),!f)return;let p=`${u.session_id}:${f}`;if(ke.current.has(p))return;ke.current.add(p),R.current.set(e,f),ze(e,{agentId:F.agentId,resumable:!0,sessionId:u.session_id,status:`running`,turnId:f}),me(e),a=new AbortController,De.current.set(e,a);let m=``,h=Be(e,{activity:[`正在恢复进行中的 Agent 回合`],agentLabel:F.label,lines:[],pending:!0,sourceLabel:`恢复的 ${F.label} 会话`,text:``});try{let t=await Zh(u.session_id,f,{signal:a.signal,onDelta:t=>{m+=t,Ve(e,h,{text:m})},onActivity:t=>{ue(n=>({...n,[e]:(n[e]??[]).map(e=>e.id===h?{...e,activity:[...new Set([...e.activity??[],t])].slice(-6)}:e)}))}});if(i)return;Ve(e,h,{lines:t.response.gate?[t.response.gate.summary,t.response.gate.next_action].filter(Boolean).slice(0,2):[],pending:!1,text:t.response.message||m.trim()||`${F.label} 已完成分析。`});let n=S.goals.find(e=>e.goalId===d?.session.goal_id)??C??S.goals[0]??null;if(n&&t.response.proposals.length>0){let r=t.response.proposals.map(e=>({goalId:n.goalId,id:we.current++,previewId:null,proposal:e,receiptLabel:null,state:`candidate`,statusMessage:null}));fe(t=>({...t,[e]:[...t[e]??[],...r]}))}}catch(t){if(i)return;Ve(e,h,{activity:[],lines:[],pending:!1,reconnect:t instanceof Eh&&t.payload.reconnectable===!0,sourceLabel:`LoopX Chat 本地后端`,text:t instanceof Error?t.message:`无法恢复进行中的 Agent 回合。`})}finally{ke.current.delete(p),R.current.get(e)===f&&R.current.delete(e),ze(e,{agentId:F.agentId,resumable:!0,sessionId:u.session_id,status:`ready`}),De.current.get(e)===a&&De.current.delete(e),i||me(t=>t===e?null:t)}}catch(n){if(i)return;n instanceof Eh&&n.payload.error_code===`resume_failed`&&(Ee.current.add(t),o&&ze(e,{agentId:F.agentId,resumable:!1,sessionId:o,status:`resume_failed`}))}})(),()=>{i=!0,a?.abort()}},[k,S.goals[0]?.goalId,h,C?.goalId,F.agentId,F.available,F.label]),(0,z.useEffect)(()=>{if(h||C||S.goals.length===0||ne===`loading`)return;let e=!1;return Promise.all(S.goals.filter(e=>!e.loadState).map(async e=>{let t=await Hh({agentId:e.agentId,channelId:`goal.${e.goalId}`,goalId:e.goalId});return{goalId:e.goalId,session:t.sessions[0]??null}})).then(t=>{e||ge(e=>{let n={...e};for(let e of t)e.session&&(n[e.goalId]={agentId:e.session.agent_id,resumable:e.session.resumable,sessionId:e.session.session_id,status:e.session.active_turn_id?`running`:e.session.status,turnId:e.session.active_turn_id??void 0});return n})}).catch(()=>{}),()=>{e=!0}},[h,ne,C?.goalId]),(0,z.useEffect)(()=>{if(be(null),h){ve([]),Se({});return}if(!C){ve([]),Se({});return}let e=!1,t=0,n=0;ve([]),Se({});let r=async()=>{if(!e){if(document.hidden){t=window.setTimeout(()=>void r(),1e4);return}try{let t=await Hh({goalId:C.goalId});if(!e){let r=t.sessions.filter(e=>e.channel_id?.startsWith(`task.`));ve(r);let i=await Promise.allSettled(r.map(e=>Vh(e.session_id)));if(!e){let e=i.some(e=>e.status===`rejected`);n=e?n+1:0,be(e?`partial`:null),Se(Object.fromEntries(i.flatMap((e,t)=>e.status===`fulfilled`?[[r[t].session_id,e.value]]:[])))}}}catch{n+=1,e||be(`offline`)}e||(t=window.setTimeout(()=>void r(),Math.min(3e4,2e3*2**Math.min(n,4))))}};return r(),()=>{e=!0,window.clearTimeout(t)}},[h,C?.goalId]),(0,z.useEffect)(()=>{if(!re)return;let e=window.requestAnimationFrame(()=>{Ae.current?.querySelector(`[role="menuitem"]:not(:disabled)`)?.focus()});return()=>{window.cancelAnimationFrame(e),je.current?.focus()}},[re]),(0,z.useEffect)(()=>{if(!I)return;let e=window.requestAnimationFrame(()=>Me.current?.focus());return()=>{window.cancelAnimationFrame(e),Ne.current?.focus()}},[I]),(0,z.useEffect)(()=>{if(!re&&!I)return;let e=e=>{e.key===`Escape`&&(ie(!1),ae(!1))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[re,I]);function Be(e,t){let n=Ce.current++;return ue(r=>({...r,[e]:[...r[e]??[],{...t,id:n,role:`assistant`}]})),n}function Ve(e,t,n){ue(r=>({...r,[e]:(r[e]??[]).map(e=>e.id===t?{...e,...n}:e)}))}async function He(e,t){let n=e.trim();if(!n)return;let r=t&&`goalId`in t?t.goalId??`manager`:k,i=r===`manager`?null:S.goals.find(e=>e.goalId===r)??null,a=t?.agentId?dh(j,t.agentId,M):F,o=r===`manager`?S:i?{...S,blockingTodoCount:S.userTodos.filter(e=>e.goalId===i.goalId&&e.blocking).length,goals:[i],openUserTodoCount:S.userTodos.filter(e=>e.goalId===i.goalId).length,userTodos:S.userTodos.filter(e=>e.goalId===i.goalId),visibleUserTodos:S.userTodos.filter(e=>e.goalId===i.goalId)}:S,s=Ce.current++;if(ue(e=>({...e,[r]:[...e[r]??[],{attachments:t?.attachments,id:s,lines:[],role:`user`,text:n}]})),ce(``),me(r),a.agentId===`status-only`||!i&&r!==`manager`){let e=aC(w,o,n),t=a.agentId===`status-only`;Be(r,{agentLabel:t?`仅查状态`:`LoopX 管家`,lines:e.lines.slice(0,3),sourceLabel:t?`LoopX 状态投影 · 仅查状态`:`LoopX 状态投影`,text:e.text}),zh({answer:[e.text,...e.lines.slice(0,3)].filter(Boolean).join(` +`),contextKind:r===`manager`?`manager`:`goal`,goalId:r===`manager`?void 0:r,question:n}).catch(()=>{}),me(null);return}let c=`${r}:${a.agentId}`,l=null;try{let e=Te.current.get(c);if(!e){let t=Ee.current.has(c)?`new`:`resume_latest`;e=(await Bh(r===`manager`?``:i.goalId,a.agentId,t,r===`manager`?`manager`:`goal`)).session_id,Te.current.set(c,e),ze(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`ready`}),Ee.current.delete(c)}let o=``;l=Be(r,{activity:[`正在连接 Agent`],agentLabel:a.label,lines:[],pending:!0,sourceLabel:r===`manager`?`${a.label} 管家 · 跨 Goal`:`${a.label} Agent · ${AS(i.goalId)}`,text:``});let s=(await Yh(e,n,{attachments:t?.attachments,signal:(()=>{let e=new AbortController;return De.current.set(r,e),e.signal})(),onDelta:e=>{o+=e,l!==null&&Ve(r,l,{text:o})},onActivity:e=>{l!==null&&ue(t=>({...t,[r]:(t[r]??[]).map(t=>t.id===l?{...t,activity:[...new Set([...t.activity??[],e])].slice(-6)}:t)}))},onPhase:(t,n)=>{R.current.set(r,n),ze(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`running`,turnId:n})}})).response;if(Ve(r,l,{lines:s.gate?[s.gate.summary,s.gate.next_action].filter(Boolean).slice(0,2):[],pending:!1,text:jS(s.message||o.trim())||`${a.label} 已完成分析。`}),s.proposals.length>0&&!i&&Ve(r,l,{lines:[`请进入要修改的 Goal,预览并确认具体变更。`]}),s.proposals.length>0&&i){let e=s.proposals.map(e=>({goalId:i.goalId,id:we.current++,previewId:null,proposal:e,receiptLabel:null,state:`candidate`,statusMessage:null}));fe(t=>({...t,[r]:[...t[r]??[],...e]}))}if(r!==`manager`&&s.protected_action){let e=fS(r,n,s.protected_action);if(e)return e}}catch(e){if(Oe.current.delete(r)){let e={agentLabel:a.label,lines:[],pending:!1,sourceLabel:`${a.label} 会话`,text:`已中断。你可以在当前会话继续发送消息。`};l===null?Be(r,e):Ve(r,l,e);return}let t=e instanceof Eh?e.payload:null;t&&fh(t)&&Te.current.delete(c),t?.error_code===`resume_failed`&&(Te.current.delete(c),Ee.current.add(c),ze(r,{agentId:a.agentId,resumable:!1,sessionId:he[r]?.sessionId??`resume-failed`,status:`resume_failed`}));let n=t?.gate,i=n&&typeof n==`object`?String(n.summary??``):``,o={agentLabel:a.label,lines:i?[i]:[],pending:!1,reconnect:t?.reconnectable===!0,sourceLabel:`LoopX Chat 本地后端`,text:t?.error_code===`resume_failed`?`原 ${a.label} 会话无法恢复。本地历史已经保留,请在运行详情里选择“重试恢复”或“开始新 Session”。`:e instanceof Error?e.message:`${a.label} 会话暂时不可用。`};l===null?Be(r,o):Ve(r,l,o)}finally{R.current.delete(r),De.current.delete(r);let e=Te.current.get(c);e&&ze(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`ready`}),me(e=>e===r?null:e)}}async function Ue(e){let t=e?.goalId??k,n=he[t],r=e?.agentId??n?.agentId??F.agentId,i=`${t}:${r}`,a=e?.sessionId??n?.sessionId??Te.current.get(i),o=e?.turnId??n?.turnId??R.current.get(t);if(!(!a||!o))try{Oe.current.add(t),await Jh(a,o),De.current.get(t)?.abort()}catch(e){throw Oe.current.delete(t),e}finally{R.current.delete(t),ze(t,{agentId:r,resumable:!0,sessionId:a,status:`ready`}),De.current.delete(t),me(e=>e===t?null:e)}}async function We(e){let t=e.goalId,n=`${t}:${e.agentId}`,r=e.sessionId??he[t]?.sessionId??Te.current.get(n);if(r)try{let i=await $h(r);Te.current.set(n,r),Ee.current.delete(n),ze(t,{agentId:e.agentId,resumable:i.session.resumable,sessionId:r,status:i.session.status})}catch{ze(t,{agentId:e.agentId,resumable:!1,sessionId:r,status:`resume_failed`})}}function Ge(e){let t=`${e.goalId}:${e.agentId}`;Te.current.delete(t),Ee.current.add(t),ze(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:`new-session-pending`,status:`ready`})}async function Ke(e){let t=`${e.goalId}:${e.agentId}`,n=e.sessionId??he[e.goalId]?.sessionId??Te.current.get(t);n&&n!==`new-session-pending`&&await Qh(n),Te.current.delete(t),Ee.current.add(t),ze(e.goalId,null)}function qe(e){j.some(t=>t.agentId===e&&t.available)&&(P(t=>({...t,[k]:e})),ie(!1))}function Je(){i(``),oe(`chat`)}function Ye(e){i(e),oe(`chat`)}C&&kS[C.state],C&&(`${F.label}${C.state}`,V.length>0&&`${Le}`,Fe.length>0&&`${Fe.length}`),C?.state===`需修复`||!C&&!c.ok?(C&&PS(C.agentId),C?.nextSentence,C?.agentSentence):C?.state===`等你`?(C.needsYouBlocking,C.needsYouBlocking,C.needsYou??C.nextSentence,C.needsYou):(C&&PS(C.agentId),C?.nextSentence);let Xe=[...!C&&he.manager?.status===`resume_failed`?[{id:`run:manager:resume-failed`,kind:`run`,run:{agentId:he.manager.agentId,agentLabel:PS(he.manager.agentId),canInterrupt:!1,completedSteps:0,goalId:`manager`,goalTitle:`LoopX 管家`,latestActivity:`本地聊天记录已保留,点我查看恢复方式。`,resumable:!1,runId:`manager:resume-failed`,sessionId:he.manager.sessionId,sessionStatus:`resume_failed`,status:`failed`,title:`上次会话需要恢复`,totalSteps:1,outputs:[]}}]:[],...C?_e.map(e=>{let t=e.channel_id?.startsWith(`task.`)?e.channel_id.slice(5):void 0,n=C.agentTodos.find(e=>e.todoId===t),r=!!e.active_turn_id,i=xe[e.session_id],a=i?.messages.some(e=>MS(e.role,e.text))===!0;return{id:`run:task:${e.session_id}`,kind:`run`,run:{agentId:e.agent_id,agentLabel:PS(e.agent_id),canInterrupt:r,completedSteps:n?.done||a?1:0,goalId:C.goalId,goalTitle:C.title,latestActivity:r?`Agent 正在执行,可进入 Session 查看过程或发送纠偏。`:a?`Agent 已返回结果,点击查看结果与完整运行记录。`:`执行 Session 已保留,可继续纠偏或恢复。`,resumable:e.resumable,runId:e.session_id,sessionId:e.session_id,sessionMessages:i?.messages.map(e=>({createdAt:e.created_at,messageId:e.message_id,role:e.role===`user`?`user`:MS(e.role,e.text)?`assistant`:`error`,text:e.role===`user`?e.text:jS(e.text)})),sessionStatus:a?`completed`:e.status,status:n?.done||a?`completed`:r?`running`:e.status===`resume_failed`?`failed`:`waiting`,title:n?.text??`Agent 执行任务`,todoId:t,totalSteps:1,turnId:e.active_turn_id??void 0}}}):[],...C?[{id:`run:${C.goalId}`,kind:`run`,run:{agentId:he[C.goalId]?.agentId??C.agentId,agentLabel:PS(he[C.goalId]?.agentId??C.agentId),canInterrupt:!!he[C.goalId]?.turnId,completedSteps:C.agentTodos.filter(e=>e.done).length,goalId:C.goalId,goalTitle:C.title,latestActivity:C.agentSentence,resumable:he[C.goalId]?.resumable??!0,runId:`goal:${C.goalId}`,sessionId:he[C.goalId]?.sessionId,sessionStatus:he[C.goalId]?.status,status:he[C.goalId]?.turnId?`running`:C.state===`需修复`?`failed`:`waiting`,title:C.nextSentence,totalSteps:C.agentTodos.length||1,turnId:he[C.goalId]?.turnId,outputs:C.runEvidence?[{createdAt:C.runEvidence.generatedAt,kind:`evidence`,outputId:`${C.goalId}:latest-evidence`,title:C.runEvidence.label}]:[]}}]:[],...Pe.map(e=>({id:`message:${e.id}`,kind:`message`,message:{agentLabel:e.agentLabel,attachments:e.attachments,id:String(e.id),pending:e.pending,role:e.role,text:e.text||(e.pending?`Agent 正在处理…`:e.lines.join(` +`))}})),...(C?[C]:S.goals).flatMap(e=>e.runEvidence?[{id:`output:${e.goalId}:${e.runEvidence.generatedAt||`latest`}`,kind:`output`,output:{agentLabel:PS(e.agentId),createdAt:e.runEvidence.generatedAt,goalId:e.goalId,goalTitle:e.title,kind:`evidence`,outputId:`${e.goalId}:latest-evidence`,runId:e.runEvidence.runId??void 0,safePreview:e.runEvidence.safePreview,summary:e.runEvidence.summary,title:e.runEvidence.label,todoId:e.runEvidence.todoId??void 0}}]:[]),...C&&T?[{id:`output:${C.goalId}:report:${T.publication.publication_id}`,kind:`output`,output:{agentId:T.agent_id,agentLabel:PS(T.agent_id),createdAt:T.publication.delivered_at,goalId:C.goalId,goalTitle:C.title,kind:`report`,outputId:T.publication.publication_id,report:{addedCount:T.delta.added_count,changedCount:T.delta.changed_count,deliveredAt:T.publication.delivered_at,generationId:T.generation_id,items:T.delta.items.map(e=>({changeKind:e.change_kind,previousStatus:e.previous_status,sourceRef:e.source_ref,status:e.status,summary:e.summary,title:e.title})),periodEndAt:T.period_window.end_at,periodStartAt:T.period_window.start_at,predecessorPublicationId:T.publication.predecessor_publication_id,publicationId:T.publication.publication_id},safePreview:T.delta.items.map(e=>`${e.change_kind===`added`?`+`:`~`} ${e.title}\n${e.summary}`).join(` -`),summary:T.summary,title:T.title}}]:[]],Ze=f.connectionState===`connected`,Qe=new Map(S.goals.map(e=>[e.goalId,e.title])),$e=e=>Wd(e,f.activeSource.statusUrl,Ze&&!l?.errors[e.goalId],Qe.get(e.goalId)),et={...my(S),userTodos:S.userTodos.map($e),attentionHistory:(S.attentionHistory??S.userTodos).map($e),periodicReports:{error:D,loading:ee},timeline:Xe};return(0,B.jsxs)(`div`,{className:p===`dark`?`dark`:``,"data-testid":`personal-goal-home`,children:[ye?(0,B.jsx)(`p`,{role:`status`,className:`m-0 bg-amber-50 px-4 py-2 text-sm text-amber-900`,children:_(ye===`partial`?`runs.discoveryPartial`:`runs.discoveryOffline`)}):null,(0,B.jsx)(Hx,{agents:j.map(e=>({adapterKind:e.adapterKind,agentId:e.agentId,available:e.available,capability:e.capability,interrupt:e.interrupt,label:e.label,location:e.location,resume:e.resume,source:e.source,streaming:e.streaming,toolCalls:e.toolCalls,trustScope:e.trustScope,workspaceCompatibility:e.available?`当前 Goal 写入前验证`:`不可用,需先修复 Endpoint`})),callbacks:{onApplyAttention:e=>Ye(e.goalId),onCorrectRun:async(e,t)=>{if(!e.sessionId)throw Error(`这个 Run 还没有可纠偏的执行 Session。`);let n=await Nh((await Ah({actionKind:`run.correct`,context:{kind:`run`,goal_id:e.goalId,todo_id:e.todoId},idempotencyKey:`workspace-run-correct-${e.sessionId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,message:t,session_id:e.sessionId},summary:`纠偏执行任务:${e.title}`})).proposal_id),r=typeof n.turn?.turn_id==`string`?n.turn.turn_id:void 0;if(ze(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:e.sessionId,status:r?`running`:`ready`,turnId:r}),r){R.current.set(e.goalId,r);let t=new AbortController;De.current.set(e.goalId,t);let n=``,i=Be(e.goalId,{activity:[`正在把纠偏送入原执行 Session`],agentLabel:e.agentLabel,lines:[],pending:!0,sourceLabel:`${e.agentLabel} · 执行 Session`,text:``});try{let a=await Xh(e.sessionId,r,{signal:t.signal,onDelta:t=>{n+=t,Ve(e.goalId,i,{text:n})}});Ve(e.goalId,i,{activity:[],pending:!1,text:kS(a.response.message||n.trim())||`${e.agentLabel} 已完成纠偏。`})}catch(t){let n=Oe.current.delete(e.goalId);Ve(e.goalId,i,{activity:[],pending:!1,text:n?`已中断。你可以在当前会话继续发送消息。`:t instanceof Error?t.message:`纠偏回合失败。`})}finally{R.current.delete(e.goalId),De.current.delete(e.goalId),ze(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:e.sessionId,status:`ready`})}}},onCloseRunSession:Ke,onInterruptRun:async e=>Ue(e),onOpenGoal:Ye,onOpenRunSession:async e=>{if(!e.sessionId)return;let t=e.sessionId,n=await Bh(t);Se(e=>({...e,[t]:n})),Ye(e.goalId),ue(t=>({...t,[e.goalId]:n.messages.map(t=>({agentLabel:t.role===`user`?void 0:e.agentLabel,attachments:wS(t.attachments),id:Ce.current++,lines:[],role:t.role===`user`?`user`:`assistant`,sourceLabel:t.role===`user`?void 0:`${e.agentLabel} · 执行 Session`,text:t.role===`user`?t.text:kS(t.text)}))})),ze(e.goalId,{agentId:e.agentId,resumable:n.session.resumable,sessionId:t,status:n.session.active_turn_id?`running`:n.session.status,turnId:n.session.active_turn_id??void 0})},onOpenOutput:e=>Ye(e.goalId),...b?{onPreviewGoalSubagentConfiguration:async e=>{let t=await tg(e);return{changed:t.changed,configuration:{allowedDomains:t.after.orchestration.allowed_domains,enabled:t.feature_summary.multi_subagent===`enabled`,maxChildren:t.after.orchestration.max_children,modelConfig:t.after.orchestration.model_config},previewId:t.preview_id}},onApplyGoalSubagentConfiguration:async({previewId:e,...t})=>{let n=await ng(t,e);return{allowedDomains:n.after.orchestration.allowed_domains,enabled:n.feature_summary.multi_subagent===`enabled`,maxChildren:n.after.orchestration.max_children,modelConfig:n.after.orchestration.model_config}}}:{},...g?{onExecuteGoalLifecycle:async({goalId:e,operation:t,reason:n})=>{let r=await vb(g,e,t,n);return{activationState:r.activation_state,projectionVerified:r.projection_verified}}}:{},onGoalActivationStateChange:n,onGoalDeleted:r,onReconcileStatus:a,onRetryGoalArchive:s,onExportOutput:async e=>{let t=[`# ${e.title}`,``,e.summary??``,``,e.safePreview??`此产出没有可用的公开安全预览。`,``,`Goal: ${e.goalId}`,`Todo: ${e.todoId??`unlinked`}`,`Run: ${e.runId??`unlinked`}`].join(` -`),n=URL.createObjectURL(new Blob([t],{type:`text/markdown;charset=utf-8`})),r=document.createElement(`a`);r.href=n,r.download=`${e.outputId.replace(/[^a-z0-9._-]+/gi,`-`)}.md`,r.click(),URL.revokeObjectURL(n)},onRefresh:o,onRetryResumeRun:We,onSelectAgent:qe,onSelectGoal:e=>e?Ye(e):Je(),onSendMessage:async(e,t,n,r)=>He(e,{agentId:t,goalId:n,attachments:r}),onStartNewRunSession:Ge},goalArchiveLoadState:e,model:et,readOnly:h,selectedAgentId:F.agentId,selectedGoalId:C?.goalId??null,statusSourceControl:f})]})}function oC({error:e,isLoading:t,onRetry:n,requestedUrl:r,theme:i,toggleTheme:a}){let o=!!(e&&/failed to fetch|networkerror|load failed/i.test(e)&&r.includes(`status.json`));return(0,B.jsx)(`div`,{className:i===`dark`?`dark`:``,children:(0,B.jsxs)(`main`,{className:`min-h-screen bg-[#f6f7f9] text-slate-950 dark:bg-[#09090b] dark:text-zinc-50`,children:[(0,B.jsxs)(`header`,{className:`flex min-h-16 flex-wrap items-center justify-between gap-3 border-b border-slate-200 bg-white px-4 py-3 dark:border-zinc-800 dark:bg-zinc-950 sm:px-6`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`h1`,{className:`text-xl font-semibold`,children:`LoopX Workspace`}),(0,B.jsx)(`p`,{className:`mt-1 break-all text-sm text-slate-500 dark:text-zinc-400`,children:`Personal Workspace`})]}),(0,B.jsx)(ry,{"aria-label":`切换主题`,onClick:a,size:`icon`,variant:`secondary`,children:i===`dark`?(0,B.jsx)(Jm,{className:`h-4 w-4`}):(0,B.jsx)(km,{className:`h-4 w-4`})})]}),(0,B.jsxs)(`div`,{className:`grid min-h-[calc(100vh-80px)] sm:grid-cols-[240px_1fr]`,children:[(0,B.jsxs)(`aside`,{className:`hidden border-r border-slate-200 p-6 dark:border-zinc-800 sm:block`,"aria-label":`Workspace`,children:[(0,B.jsx)(`strong`,{children:`LoopX`}),(0,B.jsx)(`p`,{className:`mt-6 text-sm`,children:`Workspace`}),(0,B.jsx)(`p`,{className:`mt-8 text-xs text-slate-500`,children:`Goals`}),[1,2,3].map(e=>(0,B.jsx)(`div`,{className:`mt-4 h-8 rounded bg-slate-100 dark:bg-zinc-900`},e))]}),(0,B.jsx)(`div`,{className:`p-4 sm:p-8`,children:(0,B.jsx)(iy,{"data-testid":`initial-status-state`,children:(0,B.jsx)(ay,{className:`flex min-h-64 items-center justify-center p-6`,children:(0,B.jsxs)(`div`,{className:`max-w-xl text-center`,children:[e?(0,B.jsx)(im,{className:`mx-auto h-6 w-6 text-rose-600 dark:text-rose-300`}):(0,B.jsx)(Im,{className:`mx-auto h-6 w-6 animate-spin text-slate-500 dark:text-zinc-400`}),(0,B.jsx)(`p`,{className:`mt-3 text-sm font-medium`,children:e?`无法加载实时状态`:`正在加载实时状态`}),e?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`p`,{className:`mt-2 break-words text-sm leading-6 text-slate-500 dark:text-zinc-400`,children:o?`本地状态服务暂时未连接。升级或启动期间可能短暂断开,请重试;仍失败时重新打开 LoopX App,或运行 loopx doctor。`:e}),o?(0,B.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-slate-400 dark:text-zinc-500`,children:`重新加载不会执行任务,也不会改变 Goal 配置。`}):null,(0,B.jsx)(`div`,{className:`mt-4 flex flex-wrap justify-center gap-2`,children:(0,B.jsxs)(ry,{disabled:t,onClick:n,children:[(0,B.jsx)(Im,{className:`h-4 w-4`}),`重试`]})})]}):(0,B.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-500 dark:text-zinc-400`,role:`status`,children:`正在连接 Workspace,Goal 列表将先出现,详细状态会逐个补齐。 / Connecting to your Workspace. Goals load independently.`})]})})})})]})]})})}function sC(){let e=iw.useSearch(),t=iw.useNavigate(),[n,r]=(0,z.useState)(`light`),[i,a]=(0,z.useState)(null),o=(0,z.useRef)(null),s=(0,z.useRef)(e.goalId);s.current=e.goalId;let[c,l]=(0,z.useState)(Op),[u,d]=(0,z.useState)({kind:`example`,label:`bundled example`}),[f,p]=(0,z.useState)(()=>tS(window.localStorage,window.location.href)),m=(0,z.useRef)(f);m.current=f;let[h,g]=(0,z.useState)(e.statusUrl),[_,v]=(0,z.useState)(null),[y,b]=(0,z.useState)(!1),[x,S]=(0,z.useState)({error:null,phase:`idle`}),[C,w]=(0,z.useState)(e.statusUrl.trim()||null),[T,E]=(0,z.useState)(!1),D=(0,z.useRef)(null),O=(0,z.useRef)(Xg(e.statusUrl.trim()||null)),ee=!T&&u.kind===`example`?e.statusUrl.trim():``,te=C??ee,ne=u.kind===`url`?u.label:dS,k=!!(_&&C),A=cS(f,C,ne,window.location.href),j=u.kind===`example`&&!T,M=c.attention_queue,N=c.run_history,P=(0,z.useMemo)(()=>mS(N.goals,M.items),[N.goals,M.items]);function F(e,t,n=0){S({error:null,phase:`loading`}),fS(ah(e,`stopped`,window.location.href)).then(r=>{if(!e_(O.current,t))return;let i=r.goal_projection?.registry_revision??null,a=t.registryRevision!==null&&t.registryRevision!==void 0&&i!==null&&t.registryRevision!==i;if(l(e=>C_(e,r)),a&&n<1){I(e,{background:!0,resyncAttempt:n+1});return}S(a?{error:`Goal 状态在加载历史时发生变化,请重试。`,phase:`error`}:{error:null,phase:`ready`})}).catch(e=>{e_(O.current,t)&&S({error:Dp(e),phase:`error`})})}function re(){let e=u.kind===`url`?u.label:h||dS,t=Qg(O.current,e,{background:!0});if(i){I(e);return}t&&F(e,t)}async function ie(e,n,r){if(r.background)return l(e=>C_(e,n)),!0;let i={kind:`url`,label:e};return O.current.loadedUrl=e,l(n),d(i),g(e),await t({search:t=>({...t,statusUrl:e})}),$g(O.current,r)?(O.current.requestedUrl=null,w(null),!0):!1}async function I(e,t={}){let n=e.trim(),r=t.background===!0;if(!n){r||v(`状态地址不能为空`);return}let c=Qg(O.current,n,{background:r,selectionRevision:t.selectionRevision});if(!c)return;o.current?.abort();let d=new AbortController;o.current=d,r||(D.current=null,E(!1),w(n),b(!0),v(null),S({error:null,phase:`idle`}));try{let e=await jp(n,window.location.href).catch(()=>null);if(!e_(O.current,c))return;if(e){let o=t.retryOnly&&u.kind===`url`&&u.label===n&&i?.directory.registry_revision===e.registry_revision?i.snapshots:{};a({directory:e,snapshots:o,errors:{}});let f={...e,goals:e.goals.filter(e=>!o[e.id])},p=!1,m=Mp(e);if(r)l(m);else if(!await ie(n,m,c))return;if(S({error:null,phase:`loading`}),await Np(n,window.location.href,f,(e,t,n)=>{n===`revision`&&(p=!0),a(r=>r&&{...r,snapshots:t?{...r.snapshots,[e]:t}:r.snapshots,errors:n?{...r.errors,[e]:n}:r.errors})},()=>e_(O.current,c),()=>s.current,d.signal),p&&(t.resyncAttempt??0)<1&&e_(O.current,c)){await I(n,{resyncAttempt:1});return}e_(O.current,c)&&S({error:null,phase:`ready`});return}let o=await fS(ah(n,`active`,window.location.href));if(!e_(O.current,c)||(a(null),c.registryRevision=o.goal_projection?.registry_revision??null,!await ie(n,o,c)))return;if(o.goal_projection?.scope!==`active`||o.goal_projection.complete){S({error:null,phase:`ready`});return}F(n,c,t.resyncAttempt??0)}catch(e){if(!$g(O.current,c))return;r||v(Dp(e))}finally{!r&&$g(O.current,c)&&b(!1)}}function ae(e,t={}){o.current?.abort();let n=Zg(O.current,e.statusUrl);D.current=null,E(!1),w(e.statusUrl),b(!0),v(null),(async()=>{if(t.ensureTunnel&&e.kind===`ssh_tunnel`){let t=new URL(e.statusUrl,window.location.href).port;if(t)try{await _b(e.label,t)}catch{}}O.current.selectionRevision===n&&await I(e.statusUrl,{selectionRevision:n})})()}function L(e){m.current=e,p(e);try{nS(window.localStorage,e)}catch{}}let oe={activeSource:A,connectionState:y?`loading`:k?`error`:`connected`,errorMessage:k?`未切换到 ${C??`所选来源`}:${_}`:null,onAdd:e=>{let t=iS(f,e,window.location.href);return`error`in t?{error:t.error}:(L(t.catalog),ae(t.source,{ensureTunnel:e.ensureTunnel}),{})},onConfiguredHostsLoaded:e=>{let t=m.current,n=rS(t,e);n!==t&&L(n)},onRemove:e=>{L(aS(f,e)),A.id===e&&ae(Xx)},onSelect:e=>{let t=f.sources.find(t=>t.id===e);t&&ae(t,{ensureTunnel:t.kind===`ssh_tunnel`})},sources:A.id===`temporary`?[...f.sources,A]:f.sources};(0,z.useEffect)(()=>{let t=e.statusUrl.trim();if(t){if(D.current===t||C&&C!==t)return;(u.kind!==`url`||u.label!==t)&&I(t);return}D.current=null,!T&&(C||u.kind===`example`&&I(dS))},[T,C,e.statusUrl,u.kind,u.label]),(0,z.useEffect)(()=>{if(e.statusUrl&&u.kind===`example`)return;let n=new Set(P.map(e=>e.goal.id));if(P.length===0){e.goalId&&t({search:e=>({...e,goalId:``})});return}e.goalId&&!n.has(e.goalId)&&x.phase!==`loading`&&t({search:e=>({...e,goalId:``})})},[x.phase,P,t,e.goalId,e.statusUrl,u.kind]),(0,z.useEffect)(()=>{if(!i||y||!e.goalId||u.kind!==`url`)return;let t=i.directory.goals.find(t=>t.id===e.goalId);t?.activation_state===`stopped`&&!i.snapshots[t.id]&&!i.errors[t.id]&&I(u.label,{retryOnly:!0})},[e.goalId,y,i,u]);function se(e){t({search:t=>({...t,goalId:e})})}return j?(0,B.jsx)(oC,{error:_,isLoading:y,onRetry:()=>void I(te||dS),requestedUrl:te||dS,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)}):(0,B.jsx)(aC,{goalArchiveLoadState:x,isLoading:y,onGoalActivationStateChange:(e,t)=>{O.current.projectionRevision+=1,l(n=>wp(n,e,t)),a(n=>n&&{...n,snapshots:Object.fromEntries(Object.entries(n.snapshots).map(([n,r])=>[n,wp(r,e,t)]))})},onGoalDeleted:e=>{O.current.projectionRevision+=1,l(t=>Tp(t,e)),a(t=>t&&{...t,snapshots:Object.fromEntries(Object.entries(t.snapshots).filter(([t])=>t!==e))})},onSelectGoal:se,onReconcileStatus:()=>I(u.kind===`url`?u.label:h||dS,{background:!0}),onRetryGoalArchive:re,onRefresh:()=>I(u.kind===`url`?u.label:h||dS,{retryOnly:!!(i&&Object.keys(i.errors).length)}),payload:c,progress:i,rows:P,selectedGoalId:e.goalId,statusSourceControl:oe,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)})}var cC=O_(`inline-flex items-center gap-1 rounded-md border px-2 py-0.5 text-xs font-medium`,{variants:{variant:{neutral:`border-slate-200 bg-white text-slate-700 dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-300`,success:`border-emerald-200 bg-emerald-50 text-emerald-800 dark:border-emerald-900 dark:bg-emerald-950 dark:text-emerald-200`,warning:`border-amber-200 bg-amber-50 text-amber-800 dark:border-amber-900 dark:bg-amber-950 dark:text-amber-200`,info:`border-sky-200 bg-sky-50 text-sky-800 dark:border-sky-900 dark:bg-sky-950 dark:text-sky-200`,danger:`border-rose-200 bg-rose-50 text-rose-800 dark:border-rose-900 dark:bg-rose-950 dark:text-rose-200`}},defaultVariants:{variant:`neutral`}});function lC({className:e,variant:t,...n}){return(0,B.jsx)(`span`,{className:ty(cC({variant:t}),e),...n})}var uC=[{label:`status payload`,source:`apps/presentation/dashboard/src/data/status.ts`,detail:`status_contract, attention_queue, local_dashboard_api, run_history`},{label:`channel projection`,source:`apps/presentation/dashboard/src/data/goal-channel-frontstage.ts`,detail:`decision_frame, todos, gates, leases, artifacts, truth_contract`},{label:`public showcase catalog`,source:`docs/showcases/showcase-catalog.json`,detail:`case metadata, visual hints, evidence boundaries, story beats`},{label:`route smoke`,source:`apps/presentation/dashboard/smoke/frontstage-route-smoke.ts`,detail:`static route contract, source guards, component expectations`}],dC=[{axis:`schema`,current:`goal_channel_projection_v0`,proposed:`new optional projection field`,gate:`parser default plus route smoke assertion`},{axis:`truth`,current:`event ledger and active state remain source of truth`,proposed:`derived UI state only`,gate:`truth_contract must stay read-only`},{axis:`privacy`,current:`compact source refs and warnings`,proposed:`public-safe fixture field`,gate:`loopx check and browser fake-private fixture`},{axis:`interaction`,current:`render, filter, select, inspect`,proposed:`no browser write by default`,gate:`write affordance requires explicit loopback capability`}],fC=[{title:`Fixture sources`,body:`Use examples/status.example.json, browser-smoke fixtures, and docs/showcases/showcase-catalog.json.`},{title:`Required proof`,body:`Every projection addition needs parser coverage, route smoke assertions, and one browser or bundle check when UI output changes.`},{title:`Never include`,body:`Raw task text, trajectories, transcripts, local paths, private registry state, credentials, or internal document links.`}],pC=[`npm --prefix apps/presentation/dashboard run smoke:frontstage-route`,`npm --prefix apps/presentation/dashboard run smoke:frontstage-browser`,`npm --prefix apps/presentation/dashboard run smoke:frontstage-share-bundle`,`npm --prefix apps/presentation/dashboard run build`,`loopx check --scan-path apps/presentation/dashboard --scan-path docs/status-data-contract.md`],mC=[{name:`Projection lane`,badges:[`read-only`,`schema v0`],body:`Summarizes one compact projection lane without mutating the underlying LoopX state.`},{name:`Capability badge`,badges:[`loopback`,`dry-run`],body:`Shows an advertised local capability only after the status feed declares it.`},{name:`Boundary warning`,badges:[`public-safe`,`omitted`],body:`Names omitted private material and points contributors back to compact source references.`}];function hC({children:e,icon:t,title:n}){return(0,B.jsxs)(`section`,{className:`rounded-lg border border-slate-200 bg-white shadow-sm`,children:[(0,B.jsx)(`div`,{className:`flex items-center justify-between gap-3 border-b border-slate-200 px-4 py-3`,children:(0,B.jsxs)(`h2`,{className:`flex items-center gap-2 text-sm font-semibold text-slate-950`,children:[(0,B.jsx)(t,{className:`h-4 w-4 text-slate-500`}),n]})}),e]})}function gC(){return(0,B.jsx)(hC,{icon:Qp,title:`Status Contract Explorer`,children:(0,B.jsx)(`div`,{className:`grid gap-3 p-4 lg:grid-cols-2`,"data-testid":`developer-contract-explorer`,children:uC.map(e=>(0,B.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-3`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,B.jsx)(lC,{variant:`info`,children:e.label}),(0,B.jsx)(lC,{variant:`neutral`,children:`public contract`})]}),(0,B.jsx)(`div`,{className:`mt-2 break-words font-mono text-xs text-slate-700`,children:e.source}),(0,B.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.detail})]},e.label))})})}function _C(){return(0,B.jsx)(hC,{icon:vm,title:`Projection Diffing`,children:(0,B.jsx)(`div`,{className:`overflow-x-auto`,"data-testid":`developer-projection-diffing`,children:(0,B.jsxs)(`table`,{className:`min-w-full border-separate border-spacing-0 text-left text-sm`,children:[(0,B.jsx)(`thead`,{children:(0,B.jsxs)(`tr`,{className:`bg-slate-50 text-xs uppercase tracking-normal text-slate-500`,children:[(0,B.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Axis`}),(0,B.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Current`}),(0,B.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Proposed`}),(0,B.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Gate`})]})}),(0,B.jsx)(`tbody`,{children:dC.map(e=>(0,B.jsxs)(`tr`,{className:`align-top`,children:[(0,B.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 font-semibold text-slate-950`,children:e.axis}),(0,B.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.current}),(0,B.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.proposed}),(0,B.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.gate})]},e.axis))})]})})})}function vC(){return(0,B.jsx)(hC,{icon:mm,title:`Fixture Generation`,children:(0,B.jsx)(`div`,{className:`grid gap-3 p-4 md:grid-cols-3`,"data-testid":`developer-fixture-generation`,children:fC.map(e=>(0,B.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-3`,children:[(0,B.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:e.title}),(0,B.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.body})]},e.title))})})}function yC(){return(0,B.jsx)(hC,{icon:om,title:`Smoke Checklist`,children:(0,B.jsx)(`div`,{className:`space-y-2 p-4`,"data-testid":`developer-smoke-checklist`,children:pC.map(e=>(0,B.jsxs)(`div`,{className:`flex items-start gap-3 rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,B.jsx)(Yp,{className:`mt-0.5 h-4 w-4 shrink-0 text-emerald-600`}),(0,B.jsx)(`code`,{className:`break-all text-xs font-semibold leading-5 text-slate-700`,children:e})]},e))})})}function bC(){return(0,B.jsx)(hC,{icon:sm,title:`Component Examples`,children:(0,B.jsx)(`div`,{className:`grid gap-3 p-4 lg:grid-cols-3`,"data-testid":`developer-component-examples`,children:mC.map(e=>(0,B.jsxs)(`article`,{className:`rounded-md border border-slate-200 bg-slate-50 p-3`,children:[(0,B.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.badges.map(e=>(0,B.jsx)(lC,{variant:e===`read-only`||e===`public-safe`?`success`:`neutral`,children:e},e))}),(0,B.jsx)(`h3`,{className:`mt-3 text-sm font-semibold leading-6 text-slate-950`,children:e.name}),(0,B.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.body})]},e.name))})})}function xC(){return(0,B.jsx)(`main`,{className:`min-h-screen bg-[#f7f7f4] px-4 py-4 text-slate-950 sm:px-5`,"data-testid":`frontstage-developer-cockpit`,children:(0,B.jsxs)(`div`,{className:`mx-auto grid max-w-[1500px] gap-4 xl:grid-cols-[260px_minmax(0,1fr)]`,children:[(0,B.jsxs)(`aside`,{className:`rounded-lg border border-slate-200 bg-white p-4 shadow-sm xl:sticky xl:top-4 xl:self-start`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`div`,{className:`flex h-9 w-9 items-center justify-center rounded-md border border-slate-200 bg-slate-950 text-white`,children:(0,B.jsx)(Ym,{className:`h-4 w-4`})}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`div`,{className:`text-sm font-semibold`,children:`Developer Cockpit`}),(0,B.jsx)(`div`,{className:`text-xs text-slate-500`,children:`Projection extension`})]})]}),(0,B.jsxs)(`div`,{className:`mt-4 grid gap-2`,children:[(0,B.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md border border-slate-200 px-3 py-2 text-sm font-medium`,href:`https://huangruiteng.github.io/loopx/`,children:[(0,B.jsx)(xm,{className:`h-4 w-4`}),`LoopX home`]}),(0,B.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md border border-slate-200 px-3 py-2 text-sm font-medium`,href:`https://huangruiteng.github.io/loopx/docs/showcases/index.en.html`,children:[(0,B.jsx)(fm,{className:`h-4 w-4`}),`Public cases`]}),(0,B.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md bg-slate-950 px-3 py-2 text-sm font-medium text-white`,href:`/chat/developers/projections/`,children:[(0,B.jsx)(sm,{className:`h-4 w-4`}),`Developer cockpit`]})]}),(0,B.jsxs)(`div`,{className:`mt-5 space-y-2 rounded-md border border-emerald-200 bg-emerald-50 p-3 text-xs leading-5 text-emerald-950`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,B.jsx)(lC,{variant:`success`,children:`read-only`}),(0,B.jsx)(lC,{variant:`neutral`,children:`public fixtures`})]}),(0,B.jsx)(`p`,{children:`This route uses static public contracts only; live status feeds, registry files, and browser write APIs stay outside the cockpit.`})]})]}),(0,B.jsxs)(`section`,{className:`space-y-4`,children:[(0,B.jsx)(`div`,{className:`rounded-lg border border-slate-200 bg-white px-5 py-5 shadow-sm`,children:(0,B.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-4`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,B.jsx)(lC,{variant:`info`,children:`developers/projections`}),(0,B.jsx)(lC,{variant:`success`,children:`public-safe`}),(0,B.jsx)(lC,{variant:`neutral`,children:`no browser writes`})]}),(0,B.jsx)(`h1`,{className:`mt-3 text-3xl font-semibold tracking-normal text-slate-950`,children:`LoopX Projection Developer Cockpit`}),(0,B.jsx)(`p`,{className:`mt-2 max-w-3xl text-sm leading-6 text-slate-600`,children:`A read-only contributor workbench for adding dashboard/frontstage projections without reverse-engineering the large operator page.`})]}),(0,B.jsxs)(`div`,{className:`grid min-w-[260px] gap-2 text-sm`,children:[(0,B.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,B.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-normal text-slate-500`,children:`Source of truth`}),(0,B.jsx)(`div`,{className:`mt-1 font-semibold text-slate-950`,children:`status contract + compact fixtures`})]}),(0,B.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,B.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-normal text-slate-500`,children:`Boundary`}),(0,B.jsx)(`div`,{className:`mt-1 font-semibold text-slate-950`,children:`read-only extension surface`})]})]})]})}),(0,B.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,B.jsx)(gC,{}),(0,B.jsx)(_C,{})]}),(0,B.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(0,1fr)_420px]`,children:[(0,B.jsx)(vC,{}),(0,B.jsx)(yC,{})]}),(0,B.jsx)(bC,{}),(0,B.jsx)(hC,{icon:Wm,title:`Extension Boundary`,children:(0,B.jsxs)(`div`,{className:`grid gap-3 p-4 md:grid-cols-3`,"data-testid":`developer-extension-boundary`,children:[(0,B.jsxs)(`div`,{className:`rounded-md border border-emerald-200 bg-emerald-50 px-3 py-3`,children:[(0,B.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Allowed`}),(0,B.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`Versioned parser defaults, public fixtures, read-only route panels, and focused smoke assertions.`})]}),(0,B.jsxs)(`div`,{className:`rounded-md border border-amber-200 bg-amber-50 px-3 py-3`,children:[(0,B.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Review`}),(0,B.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`New dashboard dependencies, status contract fields, loopback capability display, and browser-visible workflows.`})]}),(0,B.jsxs)(`div`,{className:`rounded-md border border-rose-200 bg-rose-50 px-3 py-3`,children:[(0,B.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Stop`}),(0,B.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`Credentials, private registry material, raw logs, transcripts, production actions, or default browser write authority.`})]})]})})]})]})})}var SC=J({value:G().finite(),total:G().finite().positive().optional(),unit:W().optional(),higher_is_better:K()}).passthrough(),CC=gd(W(),G().finite()).default({}),wC=J({outcome_status:W().optional(),failure_class:W(),causal_summary:W(),expectedness:W(),implication:W(),next_probe:W(),confidence:W(),evidence_refs:q(W()).optional()}).passthrough(),TC=J({arm_id:W(),selected_run_id:W().nullable(),score_countable:K(),metrics:gd(W(),SC),effort:CC,insight:wC.nullable().optional()}),EC=J({run_id:W(),case_id:W(),arm_id:W(),arm_role:W(),status:W(),protocol_id:W(),runner_revision:W().optional(),observed_at:W(),metrics:gd(W(),SC),countability:J({integrity_qualified:K(),official_result_present:K(),score_countable:K()}).passthrough(),treatment_fidelity:W(),effort:CC,redacted_insight:wC.nullable().optional(),upload_provenance:J({producer_id:W(),producer_version:W(),observed_at:W(),source_revision:W()}).passthrough()}).passthrough(),DC=J({case_denominator:G().int().nonnegative(),value_sum:G().finite(),value_mean:G().finite().nullable(),value_median:G().finite().nullable(),value_min:G().finite().nullable(),value_max:G().finite().nullable(),case_macro_rate:G().finite().optional(),suite_micro_rate:G().finite().optional(),suite_micro_numerator:G().finite().optional(),suite_micro_denominator:G().finite().positive().optional()}).passthrough(),OC=J({arm_id:W(),arm_role:W(),factor_assignments:gd(W(),W()),protocol_counts:gd(W(),G().int().nonnegative()).default({}),runner_revision_counts:gd(W(),G().int().nonnegative()).default({}),orchestrator_runtime_counts:gd(W(),G().int().nonnegative()).default({}),intended_case_count:G().int().positive(),run_count:G().int().nonnegative(),terminal_run_count:G().int().nonnegative(),selected_score_countable_case_count:G().int().nonnegative(),coverage_rate:G().finite().min(0).max(1),metrics:gd(W(),DC),binary_outcomes:gd(W(),J({success_count:G().int().nonnegative(),case_denominator:G().int().nonnegative(),success_rate:G().finite().min(0).max(1).nullable()})),effort:gd(W(),J({denominator:G().int().nonnegative(),mean:G().finite().nullable(),median:G().finite().nullable()})),failure_class_counts:gd(W(),G().int().nonnegative())}).passthrough(),kC=J({baseline_value:G().finite(),candidate_value:G().finite(),delta:G().finite(),direction:Y([`improved`,`flat`,`regressed`]).optional()}).passthrough(),AC=J({comparison_id:W(),comparison_anchor_run_id:W(),candidate_run_id:W(),candidate_arm_id:W(),primary_metric:W(),matched_pair_countable:X(!0),metric_deltas:gd(W(),kC)}).passthrough(),jC=J({ok:X(!0),schema_version:X(`benchmark_study_dashboard_v0`),benchmark_id:W(),study_id:W(),status:Y([`complete`,`provisional`]),design:J({protocol_id:W(),comparison_protocol_id:W(),baseline_arm_id:W(),case_set:J({case_set_id:W(),case_ids:q(W())}),metric_catalog:q(J({metric_name:W(),role:Y([`primary`,`guardrail`,`supporting`]),unit:W().optional(),higher_is_better:K(),binary:K()})),labels:gd(W(),W())}).passthrough(),campaign:J({intended_case_count:G().int().positive(),intended_arm_count:G().int().positive(),intended_cell_denominator:G().int().positive(),selected_score_countable_cell_count:G().int().nonnegative(),selected_score_countable_coverage_rate:G().finite().min(0).max(1),complete_declared_design_case_count:G().int().nonnegative(),ambiguous_score_countable_cell_count:G().int().nonnegative(),in_flight_run_count:G().int().nonnegative(),matched_pair_countable_count:G().int().nonnegative(),factorial_contrast_count:G().int().nonnegative(),factorial_contrast_countable_count:G().int().nonnegative(),runtime_observation_count:G().int().nonnegative(),runtime_classification_counts:gd(W(),G().int().nonnegative())}),arms:q(OC),contrasts:gd(W(),J({matched_pair_denominator:G().int().nonnegative(),primary_metric_directions:J({improved:G().int().nonnegative(),flat:G().int().nonnegative(),regressed:G().int().nonnegative()}),binary_metric_transitions:gd(W(),J({"0_to_1":G().int().nonnegative(),"1_to_0":G().int().nonnegative(),same:G().int().nonnegative()}))})),cases:q(J({case_id:W(),complete_declared_design:K(),arms:q(TC),eligible_comparisons:q(AC),largest_eligible_primary_contrast:AC.nullable()})),runs:q(EC),authority:J({score_source:W(),matched_comparison_source:W(),factorial_comparison_source:W().nullable(),manifest_changes_scores:X(!1),dashboard_is_execution_authority:X(!1)}),public_boundary:J({raw_task_recorded:X(!1),raw_trajectory_recorded:X(!1),hidden_evaluation_recorded:X(!1),raw_verifier_output_recorded:X(!1),credentials_recorded:X(!1),local_paths_recorded:X(!1)}),write_performed:X(!1),network_access_performed:X(!1)});function MC(e){return jC.parse(e)}function NC(e,t){let n=new URL(t),r=new URL(e||`/benchmark-study.example.json`,n);if(!new Set([`http:`,`https:`]).has(r.protocol))throw Error(`Benchmark dashboard source must use HTTP or HTTPS`);if(r.origin!==n.origin)throw Error(`Benchmark dashboard source must use same-origin local readback`);return r.toString()}var PC=[{id:`campaign`,label:`Campaign`},{id:`arms`,label:`Arms`},{id:`cases`,label:`Cases`},{id:`runs`,label:`Runs`}];function FC(e){return e==null?`—`:`${(e*100).toFixed(e>=.995?0:1)}%`}function IC(e){return e==null?`—`:new Intl.NumberFormat(`en`,{maximumFractionDigits:2,notation:`compact`}).format(e)}function LC(e){if(e==null)return`—`;let t=e/6e4;return t>=120?`${(t/60).toFixed(1)} h`:`${IC(t)} min`}function RC(e){let t=Object.entries(e);return t.length?t.map(([e,t])=>`${e} (${t})`).join(`, `):`—`}function zC(e){if(!e)return`—`;let t=e.total==null?IC(e.value):`${IC(e.value)}/${IC(e.total)}`;return e.unit?`${t} ${e.unit}`:t}function BC(e,t){let n=e.metrics[t];return!n||n.case_denominator===0?`—`:n.suite_micro_rate==null?`${IC(n.value_mean)} mean`:`${FC(n.suite_micro_rate)} · ${IC(n.suite_micro_numerator)}/${IC(n.suite_micro_denominator)}`}function VC(e,t){let n=e.largest_eligible_primary_contrast,r=n?.metric_deltas[t];if(!n||!r)return null;let i=r.delta>0?`+`:``;return{direction:r.direction,text:`${n.candidate_arm_id}: ${i}${IC(r.delta)}`}}function HC({children:e,tone:t=`neutral`}){return(0,B.jsx)(`span`,{className:`benchmark-state benchmark-state-${t}`,children:e})}function UC({packet:e,primaryMetric:t}){return(0,B.jsxs)(`div`,{className:`benchmark-view-stack`,children:[(0,B.jsxs)(`section`,{"aria-labelledby":`arm-summary-title`,children:[(0,B.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`p`,{className:`benchmark-kicker`,children:`ARM SUMMARY`}),(0,B.jsx)(`h2`,{id:`arm-summary-title`,children:`Comparable outcomes, denominator first`})]}),(0,B.jsx)(`p`,{children:`Only one score-countable run per declared case × arm cell is selected.`})]}),(0,B.jsx)(`div`,{className:`benchmark-arm-grid`,children:e.arms.map(e=>{let n=Object.values(e.binary_outcomes)[0];return(0,B.jsxs)(`article`,{className:`benchmark-arm-card`,children:[(0,B.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`span`,{className:`benchmark-mono`,children:e.arm_role}),(0,B.jsx)(`h3`,{children:e.arm_id})]}),(0,B.jsx)(HC,{tone:e.coverage_rate===1?`success`:`warning`,children:e.coverage_rate===1?`Complete`:`Provisional`})]}),(0,B.jsxs)(`dl`,{className:`benchmark-stat-list`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`dt`,{children:[`Primary · `,t]}),(0,B.jsx)(`dd`,{children:BC(e,t)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Score-countable coverage`}),(0,B.jsxs)(`dd`,{children:[e.selected_score_countable_case_count,`/`,e.intended_case_count]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Binary success`}),(0,B.jsx)(`dd`,{children:n?`${n.success_count}/${n.case_denominator}`:`Not declared`})]})]})]},e.arm_id)})})]}),(0,B.jsxs)(`section`,{"aria-labelledby":`contrast-title`,children:[(0,B.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`p`,{className:`benchmark-kicker`,children:`MATCHED CONTRASTS`}),(0,B.jsx)(`h2`,{id:`contrast-title`,children:`Direction counts on eligible pairs`})]}),(0,B.jsx)(`p`,{children:`Raw run volume is never used as a comparison denominator.`})]}),(0,B.jsx)(`div`,{className:`benchmark-table-shell`,children:(0,B.jsxs)(`table`,{children:[(0,B.jsx)(`thead`,{children:(0,B.jsxs)(`tr`,{children:[(0,B.jsx)(`th`,{children:`Candidate arm`}),(0,B.jsx)(`th`,{children:`Matched denominator`}),(0,B.jsx)(`th`,{children:`Improved`}),(0,B.jsx)(`th`,{children:`Flat`}),(0,B.jsx)(`th`,{children:`Regressed`}),(0,B.jsx)(`th`,{children:`Binary transitions`})]})}),(0,B.jsxs)(`tbody`,{children:[Object.entries(e.contrasts).map(([e,t])=>(0,B.jsxs)(`tr`,{children:[(0,B.jsx)(`td`,{children:(0,B.jsx)(`strong`,{children:e})}),(0,B.jsx)(`td`,{children:t.matched_pair_denominator}),(0,B.jsx)(`td`,{className:`benchmark-positive`,children:t.primary_metric_directions.improved}),(0,B.jsx)(`td`,{children:t.primary_metric_directions.flat}),(0,B.jsx)(`td`,{className:`benchmark-negative`,children:t.primary_metric_directions.regressed}),(0,B.jsx)(`td`,{children:Object.entries(t.binary_metric_transitions).map(([e,t])=>`${e}: 0→1 ${t[`0_to_1`]}, 1→0 ${t[`1_to_0`]}, same ${t.same}`).join(` · `)||`—`})]},e)),Object.keys(e.contrasts).length===0&&(0,B.jsx)(`tr`,{children:(0,B.jsx)(`td`,{colSpan:6,children:`No matched comparisons are countable yet.`})})]})]})})]}),(0,B.jsxs)(`section`,{"aria-labelledby":`runtime-health-title`,children:[(0,B.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`p`,{className:`benchmark-kicker`,children:`RUNTIME HEALTH`}),(0,B.jsx)(`h2`,{id:`runtime-health-title`,children:`Qualified observations, without execution authority`})]}),(0,B.jsxs)(`p`,{children:[e.campaign.runtime_observation_count,` public-safe runtime observations.`]})]}),(0,B.jsxs)(`div`,{className:`benchmark-runtime-list`,children:[Object.entries(e.campaign.runtime_classification_counts).map(([e,t])=>(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`span`,{children:e}),(0,B.jsx)(`strong`,{children:t})]},e)),e.campaign.runtime_observation_count===0&&(0,B.jsx)(`p`,{className:`benchmark-muted`,children:`No runtime observations uploaded.`})]})]})]})}function WC({packet:e}){return(0,B.jsx)(`div`,{className:`benchmark-detail-grid`,children:e.arms.map(t=>(0,B.jsxs)(`article`,{className:`benchmark-detail-card`,children:[(0,B.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`span`,{className:`benchmark-mono`,children:t.arm_role}),(0,B.jsx)(`h2`,{children:t.arm_id})]}),(0,B.jsxs)(HC,{tone:t.coverage_rate===1?`success`:`warning`,children:[t.selected_score_countable_case_count,`/`,t.intended_case_count,` countable`]})]}),(0,B.jsx)(`div`,{className:`benchmark-factor-row`,children:Object.entries(t.factor_assignments).map(([e,t])=>(0,B.jsxs)(`span`,{children:[e,`: `,(0,B.jsx)(`strong`,{children:t})]},e))}),(0,B.jsxs)(`dl`,{className:`benchmark-stat-list`,children:[e.design.metric_catalog.map(e=>(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`dt`,{children:[e.role,` · `,e.metric_name]}),(0,B.jsx)(`dd`,{children:BC(t,e.metric_name)})]},e.metric_name)),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Runs terminal / observed`}),(0,B.jsxs)(`dd`,{children:[t.terminal_run_count,`/`,t.run_count]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Median duration`}),(0,B.jsx)(`dd`,{children:LC(t.effort.duration_ms?.median)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Protocols`}),(0,B.jsx)(`dd`,{children:RC(t.protocol_counts)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Runner revisions`}),(0,B.jsx)(`dd`,{children:RC(t.runner_revision_counts)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Orchestrator runtimes`}),(0,B.jsxs)(`dd`,{children:[Object.keys(t.orchestrator_runtime_counts).length||0,` distinct`]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Failure classes`}),(0,B.jsx)(`dd`,{children:RC(t.failure_class_counts)})]})]})]},t.arm_id))})}function GC({packet:e,primaryMetric:t,onOpenRun:n}){return(0,B.jsx)(`div`,{className:`benchmark-table-shell benchmark-wide-table`,children:(0,B.jsxs)(`table`,{children:[(0,B.jsx)(`thead`,{children:(0,B.jsxs)(`tr`,{children:[(0,B.jsx)(`th`,{children:`Case`}),(0,B.jsx)(`th`,{children:`Design status`}),(0,B.jsx)(`th`,{children:`Largest eligible delta`}),e.arms.map(e=>(0,B.jsx)(`th`,{children:e.arm_id},e.arm_id))]})}),(0,B.jsx)(`tbody`,{children:e.cases.map(r=>{let i=VC(r,t);return(0,B.jsxs)(`tr`,{children:[(0,B.jsx)(`td`,{children:(0,B.jsx)(`strong`,{children:r.case_id})}),(0,B.jsx)(`td`,{children:(0,B.jsx)(HC,{tone:r.complete_declared_design?`success`:`warning`,children:r.complete_declared_design?`Complete`:`Provisional`})}),(0,B.jsx)(`td`,{className:i?.direction===`improved`?`benchmark-positive`:i?.direction===`regressed`?`benchmark-negative`:void 0,children:i?.text??`—`}),r.arms.map(r=>(0,B.jsx)(`td`,{children:r.selected_run_id&&r.score_countable?(0,B.jsxs)(`button`,{className:`benchmark-cell-link`,onClick:()=>n(r.selected_run_id),type:`button`,children:[(0,B.jsxs)(`span`,{children:[t,`: `,zC(r.metrics[t])]}),e.design.metric_catalog.filter(e=>e.metric_name!==t).map(e=>(0,B.jsxs)(`small`,{className:`benchmark-cell-metric`,children:[e.metric_name,`: `,zC(r.metrics[e.metric_name])]},e.metric_name)),(0,B.jsxs)(`small`,{children:[`Countable · `,LC(r.effort.duration_ms),` `,(0,B.jsx)(Kp,{"aria-hidden":`true`,size:12})]}),r.insight&&(0,B.jsxs)(`small`,{children:[r.insight.failure_class,` · `,r.insight.confidence]})]}):(0,B.jsx)(`span`,{className:`benchmark-muted`,children:`Not countable`})},r.arm_id))]},r.case_id)})})]})})}function KC({run:e,packet:t}){return(0,B.jsxs)(`aside`,{"aria-label":`Run detail for ${e.run_id}`,className:`benchmark-run-detail`,children:[(0,B.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`span`,{className:`benchmark-mono`,children:`RUN DETAIL`}),(0,B.jsx)(`h2`,{children:e.run_id})]}),(0,B.jsx)(HC,{tone:e.countability.score_countable?`success`:`warning`,children:e.countability.score_countable?`Score-countable`:`Diagnostic only`})]}),(0,B.jsxs)(`dl`,{className:`benchmark-stat-list benchmark-run-facts`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Case / arm`}),(0,B.jsxs)(`dd`,{children:[e.case_id,` · `,e.arm_id]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Lifecycle`}),(0,B.jsxs)(`dd`,{children:[e.status,` · `,e.observed_at]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Protocol`}),(0,B.jsx)(`dd`,{children:e.protocol_id})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Qualification`}),(0,B.jsxs)(`dd`,{children:[`Integrity `,e.countability.integrity_qualified?`qualified`:`not qualified`,` · result `,e.countability.official_result_present?`present`:`missing`]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Treatment fidelity`}),(0,B.jsx)(`dd`,{children:e.treatment_fidelity})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Effort`}),(0,B.jsxs)(`dd`,{children:[LC(e.effort.duration_ms),` · `,IC(e.effort.agent_steps),` steps · `,IC(e.effort.token_count),` tokens`]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Runner revision`}),(0,B.jsx)(`dd`,{children:e.runner_revision??`—`})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Upload provenance`}),(0,B.jsxs)(`dd`,{children:[e.upload_provenance.producer_id,` · `,e.upload_provenance.source_revision]})]})]}),(0,B.jsx)(`div`,{className:`benchmark-run-metrics`,children:t.design.metric_catalog.map(t=>(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`span`,{children:t.metric_name}),(0,B.jsx)(`strong`,{children:zC(e.metrics[t.metric_name])})]},t.metric_name))}),e.redacted_insight&&(0,B.jsxs)(`div`,{className:`benchmark-insight`,children:[(0,B.jsxs)(`span`,{className:`benchmark-mono`,children:[`REDACTED CASE INSIGHT · `,e.redacted_insight.confidence]}),(0,B.jsx)(`p`,{children:e.redacted_insight.causal_summary}),(0,B.jsxs)(`small`,{children:[`Implication: `,e.redacted_insight.implication]}),(0,B.jsx)(`br`,{}),(0,B.jsxs)(`small`,{children:[`Next probe: `,e.redacted_insight.next_probe]}),!!e.redacted_insight.evidence_refs?.length&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`br`,{}),(0,B.jsxs)(`small`,{children:[`Evidence: `,e.redacted_insight.evidence_refs.join(`, `)]})]})]})]})}function qC({packet:e,selectedRunId:t,onSelectRun:n}){let r=e.runs.find(e=>e.run_id===t)??e.runs[0];return(0,B.jsxs)(`div`,{className:`benchmark-runs-layout`,children:[(0,B.jsx)(`div`,{className:`benchmark-table-shell`,children:(0,B.jsxs)(`table`,{children:[(0,B.jsx)(`thead`,{children:(0,B.jsxs)(`tr`,{children:[(0,B.jsx)(`th`,{children:`Run`}),(0,B.jsx)(`th`,{children:`Case`}),(0,B.jsx)(`th`,{children:`Arm`}),(0,B.jsx)(`th`,{children:`Status`}),(0,B.jsx)(`th`,{children:`Countability`})]})}),(0,B.jsx)(`tbody`,{children:e.runs.map(e=>(0,B.jsxs)(`tr`,{"aria-selected":e.run_id===r?.run_id,children:[(0,B.jsx)(`td`,{children:(0,B.jsx)(`button`,{className:`benchmark-run-link`,onClick:()=>n(e.run_id),type:`button`,children:e.run_id})}),(0,B.jsx)(`td`,{children:e.case_id}),(0,B.jsx)(`td`,{children:e.arm_id}),(0,B.jsx)(`td`,{children:e.status}),(0,B.jsx)(`td`,{children:e.countability.score_countable?`Score-countable`:`Diagnostic only`})]},e.run_id))})]})}),r&&(0,B.jsx)(KC,{packet:e,run:r})]})}function JC(){let e=lw.useSearch(),t=lw.useNavigate(),[n,r]=(0,z.useState)(null),[i,a]=(0,z.useState)(null),[o,s]=(0,z.useState)(0),c=(0,z.useMemo)(()=>{let t=e.dashboardUrl||`/chat/benchmark-study.example.json`;try{return{url:NC(t,window.location.href),error:null}}catch(e){return{url:``,error:e instanceof Error?e.message:`Invalid dashboard source`}}},[e.dashboardUrl]);if((0,z.useEffect)(()=>{let e=!0;return r(null),a(null),c.error?(a(c.error),()=>{e=!1}):(fetch(c.url,{cache:`no-store`}).then(async e=>{if(!e.ok)throw Error(`HTTP ${e.status} while loading the dashboard packet`);return MC(await e.json())}).then(t=>{e&&r(t)}).catch(t=>{e&&a(t instanceof Error?t.message:`Unable to load dashboard packet`)}),()=>{e=!1})},[o,c]),(0,z.useEffect)(()=>{n&&(document.title=`${n.design.labels.title??n.study_id} · LoopX Benchmark`)},[n]),i)return(0,B.jsxs)(`main`,{className:`benchmark-page benchmark-loading`,children:[(0,B.jsx)(im,{"aria-hidden":`true`}),(0,B.jsx)(`h1`,{children:`Dashboard packet unavailable`}),(0,B.jsx)(`p`,{children:i}),(0,B.jsxs)(`button`,{onClick:()=>s(e=>e+1),type:`button`,children:[(0,B.jsx)(Im,{"aria-hidden":`true`,size:16}),` Retry readback`]})]});if(!n)return(0,B.jsxs)(`main`,{"aria-busy":`true`,className:`benchmark-page benchmark-loading`,children:[(0,B.jsx)(Up,{"aria-hidden":`true`}),(0,B.jsx)(`h1`,{children:`Reading benchmark study`}),(0,B.jsx)(`p`,{children:`Validating the public-safe dashboard packet…`})]});let l=n.design.metric_catalog.find(e=>e.role===`primary`)?.metric_name??`primary`,u=(n,r=e.runId)=>t({search:e=>({...e,view:n,runId:r})}),d=new URL(c.url).pathname;return(0,B.jsxs)(`main`,{className:`benchmark-page`,children:[(0,B.jsxs)(`header`,{className:`benchmark-hero`,children:[(0,B.jsxs)(`div`,{className:`benchmark-hero-topline`,children:[(0,B.jsx)(`a`,{className:`benchmark-wordmark`,href:`/chat/`,children:`LoopX`}),(0,B.jsxs)(`div`,{className:`benchmark-readonly`,children:[(0,B.jsx)(Wm,{"aria-hidden":`true`,size:15}),` Derived read-only projection`]})]}),(0,B.jsxs)(`div`,{className:`benchmark-hero-grid`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`p`,{className:`benchmark-kicker`,children:[`BENCHMARK STUDY / `,n.benchmark_id]}),(0,B.jsxs)(`div`,{className:`benchmark-title-row`,children:[(0,B.jsx)(`h1`,{children:n.design.labels.title??n.study_id}),(0,B.jsx)(HC,{tone:n.status===`complete`?`success`:`warning`,children:n.status})]}),(0,B.jsx)(`p`,{className:`benchmark-lead`,children:`One declared study, explicit denominators, and the same countability rules from campaign summary to exact run.`})]}),(0,B.jsxs)(`dl`,{className:`benchmark-identity`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Study`}),(0,B.jsx)(`dd`,{children:n.study_id})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Protocol`}),(0,B.jsx)(`dd`,{children:n.design.protocol_id})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Case set`}),(0,B.jsx)(`dd`,{children:n.design.case_set.case_set_id})]})]})]}),(0,B.jsxs)(`div`,{className:`benchmark-kpi-grid`,children:[(0,B.jsxs)(`article`,{children:[(0,B.jsx)(lm,{"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`Score-countable cells`}),(0,B.jsxs)(`strong`,{children:[n.campaign.selected_score_countable_cell_count,(0,B.jsxs)(`small`,{children:[` / `,n.campaign.intended_cell_denominator]})]}),(0,B.jsxs)(`p`,{children:[FC(n.campaign.selected_score_countable_coverage_rate),` declared coverage`]})]}),(0,B.jsxs)(`article`,{children:[(0,B.jsx)(am,{"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`Complete designs`}),(0,B.jsxs)(`strong`,{children:[n.campaign.complete_declared_design_case_count,(0,B.jsxs)(`small`,{children:[` / `,n.campaign.intended_case_count]})]}),(0,B.jsx)(`p`,{children:`Cases with every declared arm`})]}),(0,B.jsxs)(`article`,{children:[(0,B.jsx)(Kp,{"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`Matched comparisons`}),(0,B.jsx)(`strong`,{children:n.campaign.matched_pair_countable_count}),(0,B.jsx)(`p`,{children:`Eligible pairs only`})]}),(0,B.jsxs)(`article`,{children:[(0,B.jsx)(Up,{"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`In flight`}),(0,B.jsx)(`strong`,{children:n.campaign.in_flight_run_count}),(0,B.jsx)(`p`,{children:n.status===`provisional`?`Coverage remains provisional`:`Declared coverage complete`})]})]})]}),(0,B.jsxs)(`nav`,{"aria-label":`Benchmark dashboard views`,className:`benchmark-tabs`,children:[PC.map(t=>(0,B.jsx)(`button`,{"aria-current":e.view===t.id?`page`:void 0,onClick:()=>u(t.id),type:`button`,children:t.label},t.id)),(0,B.jsxs)(`button`,{className:`benchmark-refresh`,onClick:()=>s(e=>e+1),type:`button`,children:[(0,B.jsx)(Im,{"aria-hidden":`true`,size:14}),` Refresh local readback`]})]}),(0,B.jsxs)(`div`,{className:`benchmark-content`,children:[e.view===`campaign`&&(0,B.jsx)(UC,{packet:n,primaryMetric:l}),e.view===`arms`&&(0,B.jsx)(WC,{packet:n}),e.view===`cases`&&(0,B.jsx)(GC,{onOpenRun:e=>u(`runs`,e),packet:n,primaryMetric:l}),e.view===`runs`&&(0,B.jsx)(qC,{onSelectRun:e=>u(`runs`,e),packet:n,selectedRunId:e.runId})]}),(0,B.jsxs)(`footer`,{className:`benchmark-footer`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(Wm,{"aria-hidden":`true`,size:16}),(0,B.jsxs)(`span`,{children:[`Scores: `,n.authority.score_source]}),(0,B.jsx)(`span`,{children:`Dashboard cannot launch, grade, or mutate runs.`})]}),(0,B.jsxs)(`code`,{title:d,children:[`local`,d]})]})]})}var YC=J({goalId:W().optional().default(``),statusUrl:W().optional().default(``)}),XC=J({goalId:W().optional().default(``),mode:Y([`showcase`,`developer`,`ops`]).optional().default(`showcase`),statusUrl:W().optional().default(``),todoLane:Y([`all`,`user`,`agent`]).optional().default(`all`),todoQuery:W().optional().default(``)}),ZC=XC.omit({mode:!0}),QC=J({dashboardUrl:W().optional().default(``),view:Y([`campaign`,`arms`,`cases`,`runs`]).optional().default(`campaign`),runId:W().optional().default(``)});function $C(){let e=`https://huangruiteng.github.io/loopx/docs/showcases/index.en.html`;return(0,z.useEffect)(()=>{window.location.replace(e)},[]),(0,B.jsx)(`a`,{href:e,children:`Open LoopX cases / 浏览案例`})}function ew({goalId:e,statusUrl:t}){let n=t?rh(t,window.location.href):null;return n?.error?(0,B.jsx)(`main`,{role:`alert`,children:n.error}):(0,B.jsx)(ii,{replace:!0,to:`/`,search:{goalId:e,statusUrl:t}})}function tw(){let e=aw.useSearch();return e.mode===`ops`?(0,B.jsx)(ew,{...e}):e.mode===`developer`?(0,B.jsx)(ii,{replace:!0,to:`/developers/projections`}):(0,B.jsx)($C,{})}function nw(){return(0,B.jsx)(ew,{...ow.useSearch()})}var rw=Ci({component:()=>(0,B.jsx)(Mi,{}),errorComponent:()=>(0,B.jsxs)(`main`,{role:`alert`,className:`p-8`,children:[(0,B.jsx)(`h1`,{children:`页面暂时无法显示 / Page unavailable`}),(0,B.jsx)(`p`,{children:`请重新加载页面;这不会执行任务。 / Reloading does not execute tasks.`}),(0,B.jsx)(`button`,{type:`button`,onClick:()=>window.location.reload(),children:`重新加载 / Reload`})]})}),iw=xi({getParentRoute:()=>rw,path:`/`,validateSearch:e=>YC.parse(e),component:sC}),aw=xi({getParentRoute:()=>rw,path:`/frontstage`,validateSearch:e=>XC.parse(e),component:tw}),ow=xi({getParentRoute:()=>rw,path:`/deprecated/frontstage/ops`,validateSearch:e=>ZC.parse(e),component:nw}),sw=xi({getParentRoute:()=>rw,path:`/frontstage/developer`,component:()=>(0,B.jsx)(ii,{replace:!0,to:`/developers/projections`})}),cw=xi({getParentRoute:()=>rw,path:`/developers/projections`,component:xC}),lw=xi({getParentRoute:()=>rw,path:`/benchmarks/study`,validateSearch:e=>QC.parse(e),component:JC}),uw=rw.addChildren([iw,aw,ow,sw,cw,lw]);function dw(e){return!e||e===`/`||e===`./`?`/`:(e.startsWith(`/`)?e:`/${e}`).replace(/\/+$/,``)||`/`}var fw=Li({routeTree:uw,basepath:dw(`/chat/`),trailingSlash:`preserve`}),pw=document.getElementById(`root`);if(!pw)throw Error(`Root element not found`);var mw=new Ae({defaultOptions:{queries:{refetchOnWindowFocus:!1,retry:1,staleTime:1e4}}});(0,Vi.createRoot)(pw).render((0,B.jsx)(Pe,{client:mw,children:(0,B.jsx)(qi,{children:(0,B.jsx)(Bi,{router:fw})})})); \ No newline at end of file +`),summary:T.summary,title:T.title}}]:[]],Ze=f.connectionState===`connected`,Qe=new Map(S.goals.map(e=>[e.goalId,e.title])),$e=e=>Wd(e,f.activeSource.statusUrl,Ze&&!l?.errors[e.goalId],Qe.get(e.goalId)),et={...hy(S),userTodos:S.userTodos.map($e),attentionHistory:(S.attentionHistory??S.userTodos).map($e),periodicReports:{error:D,loading:ee},timeline:Xe};return(0,B.jsxs)(`div`,{className:p===`dark`?`dark`:``,"data-testid":`personal-goal-home`,children:[ye?(0,B.jsx)(`p`,{role:`status`,className:`m-0 bg-amber-50 px-4 py-2 text-sm text-amber-900`,children:_(ye===`partial`?`runs.discoveryPartial`:`runs.discoveryOffline`)}):null,(0,B.jsx)(Wx,{agents:j.map(e=>({adapterKind:e.adapterKind,agentId:e.agentId,available:e.available,capability:e.capability,interrupt:e.interrupt,label:e.label,location:e.location,resume:e.resume,source:e.source,streaming:e.streaming,toolCalls:e.toolCalls,trustScope:e.trustScope,workspaceCompatibility:e.available?`当前 Goal 写入前验证`:`不可用,需先修复 Endpoint`})),callbacks:{onApplyAttention:e=>Ye(e.goalId),onCorrectRun:async(e,t)=>{if(!e.sessionId)throw Error(`这个 Run 还没有可纠偏的执行 Session。`);let n=await Ph((await jh({actionKind:`run.correct`,context:{kind:`run`,goal_id:e.goalId,todo_id:e.todoId},idempotencyKey:`workspace-run-correct-${e.sessionId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,message:t,session_id:e.sessionId},summary:`纠偏执行任务:${e.title}`})).proposal_id),r=typeof n.turn?.turn_id==`string`?n.turn.turn_id:void 0;if(ze(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:e.sessionId,status:r?`running`:`ready`,turnId:r}),r){R.current.set(e.goalId,r);let t=new AbortController;De.current.set(e.goalId,t);let n=``,i=Be(e.goalId,{activity:[`正在把纠偏送入原执行 Session`],agentLabel:e.agentLabel,lines:[],pending:!0,sourceLabel:`${e.agentLabel} · 执行 Session`,text:``});try{let a=await Zh(e.sessionId,r,{signal:t.signal,onDelta:t=>{n+=t,Ve(e.goalId,i,{text:n})}});Ve(e.goalId,i,{activity:[],pending:!1,text:jS(a.response.message||n.trim())||`${e.agentLabel} 已完成纠偏。`})}catch(t){let n=Oe.current.delete(e.goalId);Ve(e.goalId,i,{activity:[],pending:!1,text:n?`已中断。你可以在当前会话继续发送消息。`:t instanceof Error?t.message:`纠偏回合失败。`})}finally{R.current.delete(e.goalId),De.current.delete(e.goalId),ze(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:e.sessionId,status:`ready`})}}},onCloseRunSession:Ke,onInterruptRun:async e=>Ue(e),onOpenGoal:Ye,onOpenRunSession:async e=>{if(!e.sessionId)return;let t=e.sessionId,n=await Vh(t);Se(e=>({...e,[t]:n})),Ye(e.goalId),ue(t=>({...t,[e.goalId]:n.messages.map(t=>({agentLabel:t.role===`user`?void 0:e.agentLabel,attachments:ES(t.attachments),id:Ce.current++,lines:[],role:t.role===`user`?`user`:`assistant`,sourceLabel:t.role===`user`?void 0:`${e.agentLabel} · 执行 Session`,text:t.role===`user`?t.text:jS(t.text)}))})),ze(e.goalId,{agentId:e.agentId,resumable:n.session.resumable,sessionId:t,status:n.session.active_turn_id?`running`:n.session.status,turnId:n.session.active_turn_id??void 0})},onOpenOutput:e=>Ye(e.goalId),...b?{onPreviewGoalSubagentConfiguration:async e=>{let t=await ng(e);return{changed:t.changed,configuration:{allowedDomains:t.after.orchestration.allowed_domains,enabled:t.feature_summary.multi_subagent===`enabled`,maxChildren:t.after.orchestration.max_children,modelConfig:t.after.orchestration.model_config},previewId:t.preview_id}},onApplyGoalSubagentConfiguration:async({previewId:e,...t})=>{let n=await rg(t,e);return{allowedDomains:n.after.orchestration.allowed_domains,enabled:n.feature_summary.multi_subagent===`enabled`,maxChildren:n.after.orchestration.max_children,modelConfig:n.after.orchestration.model_config}}}:{},...g?{onExecuteGoalLifecycle:async({goalId:e,operation:t,reason:n})=>{let r=await yb(g,e,t,n);return{activationState:r.activation_state,projectionVerified:r.projection_verified}}}:{},onGoalActivationStateChange:n,onGoalDeleted:r,onReconcileStatus:a,onRetryGoalArchive:s,onExportOutput:async e=>{let t=[`# ${e.title}`,``,e.summary??``,``,e.safePreview??`此产出没有可用的公开安全预览。`,``,`Goal: ${e.goalId}`,`Todo: ${e.todoId??`unlinked`}`,`Run: ${e.runId??`unlinked`}`].join(` +`),n=URL.createObjectURL(new Blob([t],{type:`text/markdown;charset=utf-8`})),r=document.createElement(`a`);r.href=n,r.download=`${e.outputId.replace(/[^a-z0-9._-]+/gi,`-`)}.md`,r.click(),URL.revokeObjectURL(n)},onRefresh:o,onRetryResumeRun:We,onSelectAgent:qe,onSelectGoal:e=>e?Ye(e):Je(),onSendMessage:async(e,t,n,r)=>He(e,{agentId:t,goalId:n,attachments:r}),onStartNewRunSession:Ge},goalArchiveLoadState:e,model:et,readOnly:h,selectedAgentId:F.agentId,selectedGoalId:C?.goalId??null,statusSourceControl:f})]})}function cC({error:e,isLoading:t,onRetry:n,requestedUrl:r,theme:i,toggleTheme:a}){let o=!!(e&&/failed to fetch|networkerror|load failed/i.test(e)&&r.includes(`status.json`));return(0,B.jsx)(`div`,{className:i===`dark`?`dark`:``,children:(0,B.jsxs)(`main`,{className:`min-h-screen bg-[#f6f7f9] text-slate-950 dark:bg-[#09090b] dark:text-zinc-50`,children:[(0,B.jsxs)(`header`,{className:`flex min-h-16 flex-wrap items-center justify-between gap-3 border-b border-slate-200 bg-white px-4 py-3 dark:border-zinc-800 dark:bg-zinc-950 sm:px-6`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`h1`,{className:`text-xl font-semibold`,children:`LoopX Workspace`}),(0,B.jsx)(`p`,{className:`mt-1 break-all text-sm text-slate-500 dark:text-zinc-400`,children:`Personal Workspace`})]}),(0,B.jsx)(iy,{"aria-label":`切换主题`,onClick:a,size:`icon`,variant:`secondary`,children:i===`dark`?(0,B.jsx)(Ym,{className:`h-4 w-4`}):(0,B.jsx)(Am,{className:`h-4 w-4`})})]}),(0,B.jsxs)(`div`,{className:`grid min-h-[calc(100vh-80px)] sm:grid-cols-[240px_1fr]`,children:[(0,B.jsxs)(`aside`,{className:`hidden border-r border-slate-200 p-6 dark:border-zinc-800 sm:block`,"aria-label":`Workspace`,children:[(0,B.jsx)(`strong`,{children:`LoopX`}),(0,B.jsx)(`p`,{className:`mt-6 text-sm`,children:`Workspace`}),(0,B.jsx)(`p`,{className:`mt-8 text-xs text-slate-500`,children:`Goals`}),[1,2,3].map(e=>(0,B.jsx)(`div`,{className:`mt-4 h-8 rounded bg-slate-100 dark:bg-zinc-900`},e))]}),(0,B.jsx)(`div`,{className:`p-4 sm:p-8`,children:(0,B.jsx)(ay,{"data-testid":`initial-status-state`,children:(0,B.jsx)(oy,{className:`flex min-h-64 items-center justify-center p-6`,children:(0,B.jsxs)(`div`,{className:`max-w-xl text-center`,children:[e?(0,B.jsx)(am,{className:`mx-auto h-6 w-6 text-rose-600 dark:text-rose-300`}):(0,B.jsx)(Lm,{className:`mx-auto h-6 w-6 animate-spin text-slate-500 dark:text-zinc-400`}),(0,B.jsx)(`p`,{className:`mt-3 text-sm font-medium`,children:e?`无法加载实时状态`:`正在加载实时状态`}),e?(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`p`,{className:`mt-2 break-words text-sm leading-6 text-slate-500 dark:text-zinc-400`,children:o?`本地状态服务暂时未连接。升级或启动期间可能短暂断开,请重试;仍失败时重新打开 LoopX App,或运行 loopx doctor。`:e}),o?(0,B.jsx)(`p`,{className:`mt-2 text-xs leading-5 text-slate-400 dark:text-zinc-500`,children:`重新加载不会执行任务,也不会改变 Goal 配置。`}):null,(0,B.jsx)(`div`,{className:`mt-4 flex flex-wrap justify-center gap-2`,children:(0,B.jsxs)(iy,{disabled:t,onClick:n,children:[(0,B.jsx)(Lm,{className:`h-4 w-4`}),`重试`]})})]}):(0,B.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-500 dark:text-zinc-400`,role:`status`,children:`正在连接 Workspace,Goal 列表将先出现,详细状态会逐个补齐。 / Connecting to your Workspace. Goals load independently.`})]})})})})]})]})})}function lC(){let e=ow.useSearch(),t=ow.useNavigate(),[n,r]=(0,z.useState)(`light`),[i,a]=(0,z.useState)(null),o=(0,z.useRef)(null),s=(0,z.useRef)(e.goalId);s.current=e.goalId;let[c,l]=(0,z.useState)(Op),[u,d]=(0,z.useState)({kind:`example`,label:`bundled example`}),[f,p]=(0,z.useState)(()=>rS(window.localStorage,window.location.href)),m=(0,z.useRef)(f);m.current=f;let[h,g]=(0,z.useState)(e.statusUrl),[_,v]=(0,z.useState)(null),[y,b]=(0,z.useState)(!1),[x,S]=(0,z.useState)({error:null,phase:`idle`}),[C,w]=(0,z.useState)(e.statusUrl.trim()||null),[T,E]=(0,z.useState)(!1),D=(0,z.useRef)(null),O=(0,z.useRef)(Zg(e.statusUrl.trim()||null)),ee=!T&&u.kind===`example`?e.statusUrl.trim():``,te=C??ee,ne=u.kind===`url`?u.label:pS,k=!!(_&&C),A=uS(f,C,ne,window.location.href),j=u.kind===`example`&&!T,M=c.attention_queue,N=c.run_history,P=(0,z.useMemo)(()=>gS(N.goals,M.items),[N.goals,M.items]);function F(e,t,n=0){S({error:null,phase:`loading`}),mS(oh(e,`stopped`,window.location.href)).then(r=>{if(!t_(O.current,t))return;let i=r.goal_projection?.registry_revision??null,a=t.registryRevision!==null&&t.registryRevision!==void 0&&i!==null&&t.registryRevision!==i;if(l(e=>w_(e,r)),a&&n<1){I(e,{background:!0,resyncAttempt:n+1});return}S(a?{error:`Goal 状态在加载历史时发生变化,请重试。`,phase:`error`}:{error:null,phase:`ready`})}).catch(e=>{t_(O.current,t)&&S({error:Dp(e),phase:`error`})})}function re(){let e=u.kind===`url`?u.label:h||pS,t=$g(O.current,e,{background:!0});if(i){I(e);return}t&&F(e,t)}async function ie(e,n,r){if(r.background)return l(e=>w_(e,n)),!0;let i={kind:`url`,label:e};return O.current.loadedUrl=e,l(n),d(i),g(e),await t({search:t=>({...t,statusUrl:e})}),e_(O.current,r)?(O.current.requestedUrl=null,w(null),!0):!1}async function I(e,t={}){let n=e.trim(),r=t.background===!0;if(!n){r||v(`状态地址不能为空`);return}let c=$g(O.current,n,{background:r,selectionRevision:t.selectionRevision});if(!c)return;o.current?.abort();let d=new AbortController;o.current=d,r||(D.current=null,E(!1),w(n),b(!0),v(null),S({error:null,phase:`idle`}));try{let e=await jp(n,window.location.href).catch(()=>null);if(!t_(O.current,c))return;if(e){let o=t.retryOnly&&u.kind===`url`&&u.label===n&&i?.directory.registry_revision===e.registry_revision?i.snapshots:{};a({directory:e,snapshots:o,errors:{}});let f={...e,goals:e.goals.filter(e=>!o[e.id])},p=!1,m=Mp(e);if(r)l(m);else if(!await ie(n,m,c))return;if(S({error:null,phase:`loading`}),await Pp(n,window.location.href,f,(e,t,n)=>{n===`revision`&&(p=!0),a(r=>r&&{...r,snapshots:t?{...r.snapshots,[e]:t}:r.snapshots,errors:n?{...r.errors,[e]:n}:r.errors})},()=>t_(O.current,c),()=>s.current,d.signal),p&&(t.resyncAttempt??0)<1&&t_(O.current,c)){await I(n,{resyncAttempt:1});return}t_(O.current,c)&&S({error:null,phase:`ready`});return}let o=await mS(oh(n,`active`,window.location.href));if(!t_(O.current,c)||(a(null),c.registryRevision=o.goal_projection?.registry_revision??null,!await ie(n,o,c)))return;if(o.goal_projection?.scope!==`active`||o.goal_projection.complete){S({error:null,phase:`ready`});return}F(n,c,t.resyncAttempt??0)}catch(e){if(!e_(O.current,c))return;r||v(Dp(e))}finally{!r&&e_(O.current,c)&&b(!1)}}function ae(e,t={}){o.current?.abort();let n=Qg(O.current,e.statusUrl);D.current=null,E(!1),w(e.statusUrl),b(!0),v(null),(async()=>{if(t.ensureTunnel&&e.kind===`ssh_tunnel`){let t=new URL(e.statusUrl,window.location.href).port;if(t)try{await vb(e.label,t)}catch{}}O.current.selectionRevision===n&&await I(e.statusUrl,{selectionRevision:n})})()}function L(e){m.current=e,p(e);try{iS(window.localStorage,e)}catch{}}let oe={activeSource:A,connectionState:y?`loading`:k?`error`:`connected`,errorMessage:k?`未切换到 ${C??`所选来源`}:${_}`:null,onAdd:e=>{let t=oS(f,e,window.location.href);return`error`in t?{error:t.error}:(L(t.catalog),ae(t.source,{ensureTunnel:e.ensureTunnel}),{})},onConfiguredHostsLoaded:e=>{let t=m.current,n=aS(t,e);n!==t&&L(n)},onRemove:e=>{L(sS(f,e)),A.id===e&&ae(Qx)},onSelect:e=>{let t=f.sources.find(t=>t.id===e);t&&ae(t,{ensureTunnel:t.kind===`ssh_tunnel`})},sources:A.id===`temporary`?[...f.sources,A]:f.sources};(0,z.useEffect)(()=>{let t=e.statusUrl.trim();if(t){if(D.current===t||C&&C!==t)return;(u.kind!==`url`||u.label!==t)&&I(t);return}D.current=null,!T&&(C||u.kind===`example`&&I(pS))},[T,C,e.statusUrl,u.kind,u.label]),(0,z.useEffect)(()=>{if(e.statusUrl&&u.kind===`example`)return;let n=new Set(P.map(e=>e.goal.id));if(P.length===0){e.goalId&&t({search:e=>({...e,goalId:``})});return}e.goalId&&!n.has(e.goalId)&&x.phase!==`loading`&&t({search:e=>({...e,goalId:``})})},[x.phase,P,t,e.goalId,e.statusUrl,u.kind]),(0,z.useEffect)(()=>{if(!i||y||!e.goalId||u.kind!==`url`)return;let t=i.directory.goals.find(t=>t.id===e.goalId);t?.activation_state===`stopped`&&!i.snapshots[t.id]&&!i.errors[t.id]&&I(u.label,{retryOnly:!0})},[e.goalId,y,i,u]);function se(e){t({search:t=>({...t,goalId:e})})}return j?(0,B.jsx)(cC,{error:_,isLoading:y,onRetry:()=>void I(te||pS),requestedUrl:te||pS,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)}):(0,B.jsx)(sC,{goalArchiveLoadState:x,isLoading:y,onGoalActivationStateChange:(e,t)=>{O.current.projectionRevision+=1,l(n=>wp(n,e,t)),a(n=>n&&{...n,snapshots:Object.fromEntries(Object.entries(n.snapshots).map(([n,r])=>[n,wp(r,e,t)]))})},onGoalDeleted:e=>{O.current.projectionRevision+=1,l(t=>Tp(t,e)),a(t=>t&&{...t,snapshots:Object.fromEntries(Object.entries(t.snapshots).filter(([t])=>t!==e))})},onSelectGoal:se,onReconcileStatus:()=>I(u.kind===`url`?u.label:h||pS,{background:!0}),onRetryGoalArchive:re,onRefresh:()=>I(u.kind===`url`?u.label:h||pS,{retryOnly:!!(i&&Object.keys(i.errors).length)}),payload:c,progress:i,rows:P,selectedGoalId:e.goalId,statusSourceControl:oe,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)})}var uC=k_(`inline-flex items-center gap-1 rounded-md border px-2 py-0.5 text-xs font-medium`,{variants:{variant:{neutral:`border-slate-200 bg-white text-slate-700 dark:border-zinc-800 dark:bg-zinc-950 dark:text-zinc-300`,success:`border-emerald-200 bg-emerald-50 text-emerald-800 dark:border-emerald-900 dark:bg-emerald-950 dark:text-emerald-200`,warning:`border-amber-200 bg-amber-50 text-amber-800 dark:border-amber-900 dark:bg-amber-950 dark:text-amber-200`,info:`border-sky-200 bg-sky-50 text-sky-800 dark:border-sky-900 dark:bg-sky-950 dark:text-sky-200`,danger:`border-rose-200 bg-rose-50 text-rose-800 dark:border-rose-900 dark:bg-rose-950 dark:text-rose-200`}},defaultVariants:{variant:`neutral`}});function dC({className:e,variant:t,...n}){return(0,B.jsx)(`span`,{className:ny(uC({variant:t}),e),...n})}var fC=[{label:`status payload`,source:`apps/presentation/dashboard/src/data/status.ts`,detail:`status_contract, attention_queue, local_dashboard_api, run_history`},{label:`channel projection`,source:`apps/presentation/dashboard/src/data/goal-channel-frontstage.ts`,detail:`decision_frame, todos, gates, leases, artifacts, truth_contract`},{label:`public showcase catalog`,source:`docs/showcases/showcase-catalog.json`,detail:`case metadata, visual hints, evidence boundaries, story beats`},{label:`route smoke`,source:`apps/presentation/dashboard/smoke/frontstage-route-smoke.ts`,detail:`static route contract, source guards, component expectations`}],pC=[{axis:`schema`,current:`goal_channel_projection_v0`,proposed:`new optional projection field`,gate:`parser default plus route smoke assertion`},{axis:`truth`,current:`event ledger and active state remain source of truth`,proposed:`derived UI state only`,gate:`truth_contract must stay read-only`},{axis:`privacy`,current:`compact source refs and warnings`,proposed:`public-safe fixture field`,gate:`loopx check and browser fake-private fixture`},{axis:`interaction`,current:`render, filter, select, inspect`,proposed:`no browser write by default`,gate:`write affordance requires explicit loopback capability`}],mC=[{title:`Fixture sources`,body:`Use examples/status.example.json, browser-smoke fixtures, and docs/showcases/showcase-catalog.json.`},{title:`Required proof`,body:`Every projection addition needs parser coverage, route smoke assertions, and one browser or bundle check when UI output changes.`},{title:`Never include`,body:`Raw task text, trajectories, transcripts, local paths, private registry state, credentials, or internal document links.`}],hC=[`npm --prefix apps/presentation/dashboard run smoke:frontstage-route`,`npm --prefix apps/presentation/dashboard run smoke:frontstage-browser`,`npm --prefix apps/presentation/dashboard run smoke:frontstage-share-bundle`,`npm --prefix apps/presentation/dashboard run build`,`loopx check --scan-path apps/presentation/dashboard --scan-path docs/status-data-contract.md`],gC=[{name:`Projection lane`,badges:[`read-only`,`schema v0`],body:`Summarizes one compact projection lane without mutating the underlying LoopX state.`},{name:`Capability badge`,badges:[`loopback`,`dry-run`],body:`Shows an advertised local capability only after the status feed declares it.`},{name:`Boundary warning`,badges:[`public-safe`,`omitted`],body:`Names omitted private material and points contributors back to compact source references.`}];function _C({children:e,icon:t,title:n}){return(0,B.jsxs)(`section`,{className:`rounded-lg border border-slate-200 bg-white shadow-sm`,children:[(0,B.jsx)(`div`,{className:`flex items-center justify-between gap-3 border-b border-slate-200 px-4 py-3`,children:(0,B.jsxs)(`h2`,{className:`flex items-center gap-2 text-sm font-semibold text-slate-950`,children:[(0,B.jsx)(t,{className:`h-4 w-4 text-slate-500`}),n]})}),e]})}function vC(){return(0,B.jsx)(_C,{icon:$p,title:`Status Contract Explorer`,children:(0,B.jsx)(`div`,{className:`grid gap-3 p-4 lg:grid-cols-2`,"data-testid":`developer-contract-explorer`,children:fC.map(e=>(0,B.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-3`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap items-center gap-2`,children:[(0,B.jsx)(dC,{variant:`info`,children:e.label}),(0,B.jsx)(dC,{variant:`neutral`,children:`public contract`})]}),(0,B.jsx)(`div`,{className:`mt-2 break-words font-mono text-xs text-slate-700`,children:e.source}),(0,B.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.detail})]},e.label))})})}function yC(){return(0,B.jsx)(_C,{icon:ym,title:`Projection Diffing`,children:(0,B.jsx)(`div`,{className:`overflow-x-auto`,"data-testid":`developer-projection-diffing`,children:(0,B.jsxs)(`table`,{className:`min-w-full border-separate border-spacing-0 text-left text-sm`,children:[(0,B.jsx)(`thead`,{children:(0,B.jsxs)(`tr`,{className:`bg-slate-50 text-xs uppercase tracking-normal text-slate-500`,children:[(0,B.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Axis`}),(0,B.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Current`}),(0,B.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Proposed`}),(0,B.jsx)(`th`,{className:`border-b border-slate-200 px-4 py-3 font-semibold`,children:`Gate`})]})}),(0,B.jsx)(`tbody`,{children:pC.map(e=>(0,B.jsxs)(`tr`,{className:`align-top`,children:[(0,B.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 font-semibold text-slate-950`,children:e.axis}),(0,B.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.current}),(0,B.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.proposed}),(0,B.jsx)(`td`,{className:`border-b border-slate-100 px-4 py-3 text-slate-600`,children:e.gate})]},e.axis))})]})})})}function bC(){return(0,B.jsx)(_C,{icon:hm,title:`Fixture Generation`,children:(0,B.jsx)(`div`,{className:`grid gap-3 p-4 md:grid-cols-3`,"data-testid":`developer-fixture-generation`,children:mC.map(e=>(0,B.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-3`,children:[(0,B.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:e.title}),(0,B.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.body})]},e.title))})})}function xC(){return(0,B.jsx)(_C,{icon:sm,title:`Smoke Checklist`,children:(0,B.jsx)(`div`,{className:`space-y-2 p-4`,"data-testid":`developer-smoke-checklist`,children:hC.map(e=>(0,B.jsxs)(`div`,{className:`flex items-start gap-3 rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,B.jsx)(Xp,{className:`mt-0.5 h-4 w-4 shrink-0 text-emerald-600`}),(0,B.jsx)(`code`,{className:`break-all text-xs font-semibold leading-5 text-slate-700`,children:e})]},e))})})}function SC(){return(0,B.jsx)(_C,{icon:cm,title:`Component Examples`,children:(0,B.jsx)(`div`,{className:`grid gap-3 p-4 lg:grid-cols-3`,"data-testid":`developer-component-examples`,children:gC.map(e=>(0,B.jsxs)(`article`,{className:`rounded-md border border-slate-200 bg-slate-50 p-3`,children:[(0,B.jsx)(`div`,{className:`flex flex-wrap gap-2`,children:e.badges.map(e=>(0,B.jsx)(dC,{variant:e===`read-only`||e===`public-safe`?`success`:`neutral`,children:e},e))}),(0,B.jsx)(`h3`,{className:`mt-3 text-sm font-semibold leading-6 text-slate-950`,children:e.name}),(0,B.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:e.body})]},e.name))})})}function CC(){return(0,B.jsx)(`main`,{className:`min-h-screen bg-[#f7f7f4] px-4 py-4 text-slate-950 sm:px-5`,"data-testid":`frontstage-developer-cockpit`,children:(0,B.jsxs)(`div`,{className:`mx-auto grid max-w-[1500px] gap-4 xl:grid-cols-[260px_minmax(0,1fr)]`,children:[(0,B.jsxs)(`aside`,{className:`rounded-lg border border-slate-200 bg-white p-4 shadow-sm xl:sticky xl:top-4 xl:self-start`,children:[(0,B.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,B.jsx)(`div`,{className:`flex h-9 w-9 items-center justify-center rounded-md border border-slate-200 bg-slate-950 text-white`,children:(0,B.jsx)(Xm,{className:`h-4 w-4`})}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`div`,{className:`text-sm font-semibold`,children:`Developer Cockpit`}),(0,B.jsx)(`div`,{className:`text-xs text-slate-500`,children:`Projection extension`})]})]}),(0,B.jsxs)(`div`,{className:`mt-4 grid gap-2`,children:[(0,B.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md border border-slate-200 px-3 py-2 text-sm font-medium`,href:`https://huangruiteng.github.io/loopx/`,children:[(0,B.jsx)(Sm,{className:`h-4 w-4`}),`LoopX home`]}),(0,B.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md border border-slate-200 px-3 py-2 text-sm font-medium`,href:`https://huangruiteng.github.io/loopx/docs/showcases/index.en.html`,children:[(0,B.jsx)(pm,{className:`h-4 w-4`}),`Public cases`]}),(0,B.jsxs)(`a`,{className:`flex items-center gap-2 rounded-md bg-slate-950 px-3 py-2 text-sm font-medium text-white`,href:`/chat/developers/projections/`,children:[(0,B.jsx)(cm,{className:`h-4 w-4`}),`Developer cockpit`]})]}),(0,B.jsxs)(`div`,{className:`mt-5 space-y-2 rounded-md border border-emerald-200 bg-emerald-50 p-3 text-xs leading-5 text-emerald-950`,children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,B.jsx)(dC,{variant:`success`,children:`read-only`}),(0,B.jsx)(dC,{variant:`neutral`,children:`public fixtures`})]}),(0,B.jsx)(`p`,{children:`This route uses static public contracts only; live status feeds, registry files, and browser write APIs stay outside the cockpit.`})]})]}),(0,B.jsxs)(`section`,{className:`space-y-4`,children:[(0,B.jsx)(`div`,{className:`rounded-lg border border-slate-200 bg-white px-5 py-5 shadow-sm`,children:(0,B.jsxs)(`div`,{className:`flex flex-wrap items-start justify-between gap-4`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`div`,{className:`flex flex-wrap gap-2`,children:[(0,B.jsx)(dC,{variant:`info`,children:`developers/projections`}),(0,B.jsx)(dC,{variant:`success`,children:`public-safe`}),(0,B.jsx)(dC,{variant:`neutral`,children:`no browser writes`})]}),(0,B.jsx)(`h1`,{className:`mt-3 text-3xl font-semibold tracking-normal text-slate-950`,children:`LoopX Projection Developer Cockpit`}),(0,B.jsx)(`p`,{className:`mt-2 max-w-3xl text-sm leading-6 text-slate-600`,children:`A read-only contributor workbench for adding dashboard/frontstage projections without reverse-engineering the large operator page.`})]}),(0,B.jsxs)(`div`,{className:`grid min-w-[260px] gap-2 text-sm`,children:[(0,B.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,B.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-normal text-slate-500`,children:`Source of truth`}),(0,B.jsx)(`div`,{className:`mt-1 font-semibold text-slate-950`,children:`status contract + compact fixtures`})]}),(0,B.jsxs)(`div`,{className:`rounded-md border border-slate-200 bg-slate-50 px-3 py-2`,children:[(0,B.jsx)(`div`,{className:`text-[11px] font-semibold uppercase tracking-normal text-slate-500`,children:`Boundary`}),(0,B.jsx)(`div`,{className:`mt-1 font-semibold text-slate-950`,children:`read-only extension surface`})]})]})]})}),(0,B.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-2`,children:[(0,B.jsx)(vC,{}),(0,B.jsx)(yC,{})]}),(0,B.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(0,1fr)_420px]`,children:[(0,B.jsx)(bC,{}),(0,B.jsx)(xC,{})]}),(0,B.jsx)(SC,{}),(0,B.jsx)(_C,{icon:Gm,title:`Extension Boundary`,children:(0,B.jsxs)(`div`,{className:`grid gap-3 p-4 md:grid-cols-3`,"data-testid":`developer-extension-boundary`,children:[(0,B.jsxs)(`div`,{className:`rounded-md border border-emerald-200 bg-emerald-50 px-3 py-3`,children:[(0,B.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Allowed`}),(0,B.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`Versioned parser defaults, public fixtures, read-only route panels, and focused smoke assertions.`})]}),(0,B.jsxs)(`div`,{className:`rounded-md border border-amber-200 bg-amber-50 px-3 py-3`,children:[(0,B.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Review`}),(0,B.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`New dashboard dependencies, status contract fields, loopback capability display, and browser-visible workflows.`})]}),(0,B.jsxs)(`div`,{className:`rounded-md border border-rose-200 bg-rose-50 px-3 py-3`,children:[(0,B.jsx)(`div`,{className:`text-sm font-semibold text-slate-950`,children:`Stop`}),(0,B.jsx)(`p`,{className:`mt-2 text-sm leading-6 text-slate-600`,children:`Credentials, private registry material, raw logs, transcripts, production actions, or default browser write authority.`})]})]})})]})]})})}var wC=J({value:G().finite(),total:G().finite().positive().optional(),unit:W().optional(),higher_is_better:K()}).passthrough(),TC=gd(W(),G().finite()).default({}),EC=J({outcome_status:W().optional(),failure_class:W(),causal_summary:W(),expectedness:W(),implication:W(),next_probe:W(),confidence:W(),evidence_refs:q(W()).optional()}).passthrough(),DC=J({arm_id:W(),selected_run_id:W().nullable(),score_countable:K(),metrics:gd(W(),wC),effort:TC,insight:EC.nullable().optional()}),OC=J({run_id:W(),case_id:W(),arm_id:W(),arm_role:W(),status:W(),protocol_id:W(),runner_revision:W().optional(),observed_at:W(),metrics:gd(W(),wC),countability:J({integrity_qualified:K(),official_result_present:K(),score_countable:K()}).passthrough(),treatment_fidelity:W(),effort:TC,redacted_insight:EC.nullable().optional(),upload_provenance:J({producer_id:W(),producer_version:W(),observed_at:W(),source_revision:W()}).passthrough()}).passthrough(),kC=J({case_denominator:G().int().nonnegative(),value_sum:G().finite(),value_mean:G().finite().nullable(),value_median:G().finite().nullable(),value_min:G().finite().nullable(),value_max:G().finite().nullable(),case_macro_rate:G().finite().optional(),suite_micro_rate:G().finite().optional(),suite_micro_numerator:G().finite().optional(),suite_micro_denominator:G().finite().positive().optional()}).passthrough(),AC=J({arm_id:W(),arm_role:W(),factor_assignments:gd(W(),W()),protocol_counts:gd(W(),G().int().nonnegative()).default({}),runner_revision_counts:gd(W(),G().int().nonnegative()).default({}),orchestrator_runtime_counts:gd(W(),G().int().nonnegative()).default({}),intended_case_count:G().int().positive(),run_count:G().int().nonnegative(),terminal_run_count:G().int().nonnegative(),selected_score_countable_case_count:G().int().nonnegative(),coverage_rate:G().finite().min(0).max(1),metrics:gd(W(),kC),binary_outcomes:gd(W(),J({success_count:G().int().nonnegative(),case_denominator:G().int().nonnegative(),success_rate:G().finite().min(0).max(1).nullable()})),effort:gd(W(),J({denominator:G().int().nonnegative(),mean:G().finite().nullable(),median:G().finite().nullable()})),failure_class_counts:gd(W(),G().int().nonnegative())}).passthrough(),jC=J({baseline_value:G().finite(),candidate_value:G().finite(),delta:G().finite(),direction:Y([`improved`,`flat`,`regressed`]).optional()}).passthrough(),MC=J({comparison_id:W(),comparison_anchor_run_id:W(),candidate_run_id:W(),candidate_arm_id:W(),primary_metric:W(),matched_pair_countable:X(!0),metric_deltas:gd(W(),jC)}).passthrough(),NC=J({ok:X(!0),schema_version:X(`benchmark_study_dashboard_v0`),benchmark_id:W(),study_id:W(),status:Y([`complete`,`provisional`]),design:J({protocol_id:W(),comparison_protocol_id:W(),baseline_arm_id:W(),case_set:J({case_set_id:W(),case_ids:q(W())}),metric_catalog:q(J({metric_name:W(),role:Y([`primary`,`guardrail`,`supporting`]),unit:W().optional(),higher_is_better:K(),binary:K()})),labels:gd(W(),W())}).passthrough(),campaign:J({intended_case_count:G().int().positive(),intended_arm_count:G().int().positive(),intended_cell_denominator:G().int().positive(),selected_score_countable_cell_count:G().int().nonnegative(),selected_score_countable_coverage_rate:G().finite().min(0).max(1),complete_declared_design_case_count:G().int().nonnegative(),ambiguous_score_countable_cell_count:G().int().nonnegative(),in_flight_run_count:G().int().nonnegative(),matched_pair_countable_count:G().int().nonnegative(),factorial_contrast_count:G().int().nonnegative(),factorial_contrast_countable_count:G().int().nonnegative(),runtime_observation_count:G().int().nonnegative(),runtime_classification_counts:gd(W(),G().int().nonnegative())}),arms:q(AC),contrasts:gd(W(),J({matched_pair_denominator:G().int().nonnegative(),primary_metric_directions:J({improved:G().int().nonnegative(),flat:G().int().nonnegative(),regressed:G().int().nonnegative()}),binary_metric_transitions:gd(W(),J({"0_to_1":G().int().nonnegative(),"1_to_0":G().int().nonnegative(),same:G().int().nonnegative()}))})),cases:q(J({case_id:W(),complete_declared_design:K(),arms:q(DC),eligible_comparisons:q(MC),largest_eligible_primary_contrast:MC.nullable()})),runs:q(OC),authority:J({score_source:W(),matched_comparison_source:W(),factorial_comparison_source:W().nullable(),manifest_changes_scores:X(!1),dashboard_is_execution_authority:X(!1)}),public_boundary:J({raw_task_recorded:X(!1),raw_trajectory_recorded:X(!1),hidden_evaluation_recorded:X(!1),raw_verifier_output_recorded:X(!1),credentials_recorded:X(!1),local_paths_recorded:X(!1)}),write_performed:X(!1),network_access_performed:X(!1)});function PC(e){return NC.parse(e)}function FC(e,t){let n=new URL(t),r=new URL(e||`/benchmark-study.example.json`,n);if(!new Set([`http:`,`https:`]).has(r.protocol))throw Error(`Benchmark dashboard source must use HTTP or HTTPS`);if(r.origin!==n.origin)throw Error(`Benchmark dashboard source must use same-origin local readback`);return r.toString()}var IC=[{id:`campaign`,label:`Campaign`},{id:`arms`,label:`Arms`},{id:`cases`,label:`Cases`},{id:`runs`,label:`Runs`}];function LC(e){return e==null?`—`:`${(e*100).toFixed(e>=.995?0:1)}%`}function RC(e){return e==null?`—`:new Intl.NumberFormat(`en`,{maximumFractionDigits:2,notation:`compact`}).format(e)}function zC(e){if(e==null)return`—`;let t=e/6e4;return t>=120?`${(t/60).toFixed(1)} h`:`${RC(t)} min`}function BC(e){let t=Object.entries(e);return t.length?t.map(([e,t])=>`${e} (${t})`).join(`, `):`—`}function VC(e){if(!e)return`—`;let t=e.total==null?RC(e.value):`${RC(e.value)}/${RC(e.total)}`;return e.unit?`${t} ${e.unit}`:t}function HC(e,t){let n=e.metrics[t];return!n||n.case_denominator===0?`—`:n.suite_micro_rate==null?`${RC(n.value_mean)} mean`:`${LC(n.suite_micro_rate)} · ${RC(n.suite_micro_numerator)}/${RC(n.suite_micro_denominator)}`}function UC(e,t){let n=e.largest_eligible_primary_contrast,r=n?.metric_deltas[t];if(!n||!r)return null;let i=r.delta>0?`+`:``;return{direction:r.direction,text:`${n.candidate_arm_id}: ${i}${RC(r.delta)}`}}function WC({children:e,tone:t=`neutral`}){return(0,B.jsx)(`span`,{className:`benchmark-state benchmark-state-${t}`,children:e})}function GC({packet:e,primaryMetric:t}){return(0,B.jsxs)(`div`,{className:`benchmark-view-stack`,children:[(0,B.jsxs)(`section`,{"aria-labelledby":`arm-summary-title`,children:[(0,B.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`p`,{className:`benchmark-kicker`,children:`ARM SUMMARY`}),(0,B.jsx)(`h2`,{id:`arm-summary-title`,children:`Comparable outcomes, denominator first`})]}),(0,B.jsx)(`p`,{children:`Only one score-countable run per declared case × arm cell is selected.`})]}),(0,B.jsx)(`div`,{className:`benchmark-arm-grid`,children:e.arms.map(e=>{let n=Object.values(e.binary_outcomes)[0];return(0,B.jsxs)(`article`,{className:`benchmark-arm-card`,children:[(0,B.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`span`,{className:`benchmark-mono`,children:e.arm_role}),(0,B.jsx)(`h3`,{children:e.arm_id})]}),(0,B.jsx)(WC,{tone:e.coverage_rate===1?`success`:`warning`,children:e.coverage_rate===1?`Complete`:`Provisional`})]}),(0,B.jsxs)(`dl`,{className:`benchmark-stat-list`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`dt`,{children:[`Primary · `,t]}),(0,B.jsx)(`dd`,{children:HC(e,t)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Score-countable coverage`}),(0,B.jsxs)(`dd`,{children:[e.selected_score_countable_case_count,`/`,e.intended_case_count]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Binary success`}),(0,B.jsx)(`dd`,{children:n?`${n.success_count}/${n.case_denominator}`:`Not declared`})]})]})]},e.arm_id)})})]}),(0,B.jsxs)(`section`,{"aria-labelledby":`contrast-title`,children:[(0,B.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`p`,{className:`benchmark-kicker`,children:`MATCHED CONTRASTS`}),(0,B.jsx)(`h2`,{id:`contrast-title`,children:`Direction counts on eligible pairs`})]}),(0,B.jsx)(`p`,{children:`Raw run volume is never used as a comparison denominator.`})]}),(0,B.jsx)(`div`,{className:`benchmark-table-shell`,children:(0,B.jsxs)(`table`,{children:[(0,B.jsx)(`thead`,{children:(0,B.jsxs)(`tr`,{children:[(0,B.jsx)(`th`,{children:`Candidate arm`}),(0,B.jsx)(`th`,{children:`Matched denominator`}),(0,B.jsx)(`th`,{children:`Improved`}),(0,B.jsx)(`th`,{children:`Flat`}),(0,B.jsx)(`th`,{children:`Regressed`}),(0,B.jsx)(`th`,{children:`Binary transitions`})]})}),(0,B.jsxs)(`tbody`,{children:[Object.entries(e.contrasts).map(([e,t])=>(0,B.jsxs)(`tr`,{children:[(0,B.jsx)(`td`,{children:(0,B.jsx)(`strong`,{children:e})}),(0,B.jsx)(`td`,{children:t.matched_pair_denominator}),(0,B.jsx)(`td`,{className:`benchmark-positive`,children:t.primary_metric_directions.improved}),(0,B.jsx)(`td`,{children:t.primary_metric_directions.flat}),(0,B.jsx)(`td`,{className:`benchmark-negative`,children:t.primary_metric_directions.regressed}),(0,B.jsx)(`td`,{children:Object.entries(t.binary_metric_transitions).map(([e,t])=>`${e}: 0→1 ${t[`0_to_1`]}, 1→0 ${t[`1_to_0`]}, same ${t.same}`).join(` · `)||`—`})]},e)),Object.keys(e.contrasts).length===0&&(0,B.jsx)(`tr`,{children:(0,B.jsx)(`td`,{colSpan:6,children:`No matched comparisons are countable yet.`})})]})]})})]}),(0,B.jsxs)(`section`,{"aria-labelledby":`runtime-health-title`,children:[(0,B.jsxs)(`div`,{className:`benchmark-section-heading`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`p`,{className:`benchmark-kicker`,children:`RUNTIME HEALTH`}),(0,B.jsx)(`h2`,{id:`runtime-health-title`,children:`Qualified observations, without execution authority`})]}),(0,B.jsxs)(`p`,{children:[e.campaign.runtime_observation_count,` public-safe runtime observations.`]})]}),(0,B.jsxs)(`div`,{className:`benchmark-runtime-list`,children:[Object.entries(e.campaign.runtime_classification_counts).map(([e,t])=>(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`span`,{children:e}),(0,B.jsx)(`strong`,{children:t})]},e)),e.campaign.runtime_observation_count===0&&(0,B.jsx)(`p`,{className:`benchmark-muted`,children:`No runtime observations uploaded.`})]})]})]})}function KC({packet:e}){return(0,B.jsx)(`div`,{className:`benchmark-detail-grid`,children:e.arms.map(t=>(0,B.jsxs)(`article`,{className:`benchmark-detail-card`,children:[(0,B.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`span`,{className:`benchmark-mono`,children:t.arm_role}),(0,B.jsx)(`h2`,{children:t.arm_id})]}),(0,B.jsxs)(WC,{tone:t.coverage_rate===1?`success`:`warning`,children:[t.selected_score_countable_case_count,`/`,t.intended_case_count,` countable`]})]}),(0,B.jsx)(`div`,{className:`benchmark-factor-row`,children:Object.entries(t.factor_assignments).map(([e,t])=>(0,B.jsxs)(`span`,{children:[e,`: `,(0,B.jsx)(`strong`,{children:t})]},e))}),(0,B.jsxs)(`dl`,{className:`benchmark-stat-list`,children:[e.design.metric_catalog.map(e=>(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`dt`,{children:[e.role,` · `,e.metric_name]}),(0,B.jsx)(`dd`,{children:HC(t,e.metric_name)})]},e.metric_name)),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Runs terminal / observed`}),(0,B.jsxs)(`dd`,{children:[t.terminal_run_count,`/`,t.run_count]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Median duration`}),(0,B.jsx)(`dd`,{children:zC(t.effort.duration_ms?.median)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Protocols`}),(0,B.jsx)(`dd`,{children:BC(t.protocol_counts)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Runner revisions`}),(0,B.jsx)(`dd`,{children:BC(t.runner_revision_counts)})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Orchestrator runtimes`}),(0,B.jsxs)(`dd`,{children:[Object.keys(t.orchestrator_runtime_counts).length||0,` distinct`]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Failure classes`}),(0,B.jsx)(`dd`,{children:BC(t.failure_class_counts)})]})]})]},t.arm_id))})}function qC({packet:e,primaryMetric:t,onOpenRun:n}){return(0,B.jsx)(`div`,{className:`benchmark-table-shell benchmark-wide-table`,children:(0,B.jsxs)(`table`,{children:[(0,B.jsx)(`thead`,{children:(0,B.jsxs)(`tr`,{children:[(0,B.jsx)(`th`,{children:`Case`}),(0,B.jsx)(`th`,{children:`Design status`}),(0,B.jsx)(`th`,{children:`Largest eligible delta`}),e.arms.map(e=>(0,B.jsx)(`th`,{children:e.arm_id},e.arm_id))]})}),(0,B.jsx)(`tbody`,{children:e.cases.map(r=>{let i=UC(r,t);return(0,B.jsxs)(`tr`,{children:[(0,B.jsx)(`td`,{children:(0,B.jsx)(`strong`,{children:r.case_id})}),(0,B.jsx)(`td`,{children:(0,B.jsx)(WC,{tone:r.complete_declared_design?`success`:`warning`,children:r.complete_declared_design?`Complete`:`Provisional`})}),(0,B.jsx)(`td`,{className:i?.direction===`improved`?`benchmark-positive`:i?.direction===`regressed`?`benchmark-negative`:void 0,children:i?.text??`—`}),r.arms.map(r=>(0,B.jsx)(`td`,{children:r.selected_run_id&&r.score_countable?(0,B.jsxs)(`button`,{className:`benchmark-cell-link`,onClick:()=>n(r.selected_run_id),type:`button`,children:[(0,B.jsxs)(`span`,{children:[t,`: `,VC(r.metrics[t])]}),e.design.metric_catalog.filter(e=>e.metric_name!==t).map(e=>(0,B.jsxs)(`small`,{className:`benchmark-cell-metric`,children:[e.metric_name,`: `,VC(r.metrics[e.metric_name])]},e.metric_name)),(0,B.jsxs)(`small`,{children:[`Countable · `,zC(r.effort.duration_ms),` `,(0,B.jsx)(qp,{"aria-hidden":`true`,size:12})]}),r.insight&&(0,B.jsxs)(`small`,{children:[r.insight.failure_class,` · `,r.insight.confidence]})]}):(0,B.jsx)(`span`,{className:`benchmark-muted`,children:`Not countable`})},r.arm_id))]},r.case_id)})})]})})}function JC({run:e,packet:t}){return(0,B.jsxs)(`aside`,{"aria-label":`Run detail for ${e.run_id}`,className:`benchmark-run-detail`,children:[(0,B.jsxs)(`div`,{className:`benchmark-card-heading`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`span`,{className:`benchmark-mono`,children:`RUN DETAIL`}),(0,B.jsx)(`h2`,{children:e.run_id})]}),(0,B.jsx)(WC,{tone:e.countability.score_countable?`success`:`warning`,children:e.countability.score_countable?`Score-countable`:`Diagnostic only`})]}),(0,B.jsxs)(`dl`,{className:`benchmark-stat-list benchmark-run-facts`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Case / arm`}),(0,B.jsxs)(`dd`,{children:[e.case_id,` · `,e.arm_id]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Lifecycle`}),(0,B.jsxs)(`dd`,{children:[e.status,` · `,e.observed_at]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Protocol`}),(0,B.jsx)(`dd`,{children:e.protocol_id})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Qualification`}),(0,B.jsxs)(`dd`,{children:[`Integrity `,e.countability.integrity_qualified?`qualified`:`not qualified`,` · result `,e.countability.official_result_present?`present`:`missing`]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Treatment fidelity`}),(0,B.jsx)(`dd`,{children:e.treatment_fidelity})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Effort`}),(0,B.jsxs)(`dd`,{children:[zC(e.effort.duration_ms),` · `,RC(e.effort.agent_steps),` steps · `,RC(e.effort.token_count),` tokens`]})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Runner revision`}),(0,B.jsx)(`dd`,{children:e.runner_revision??`—`})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Upload provenance`}),(0,B.jsxs)(`dd`,{children:[e.upload_provenance.producer_id,` · `,e.upload_provenance.source_revision]})]})]}),(0,B.jsx)(`div`,{className:`benchmark-run-metrics`,children:t.design.metric_catalog.map(t=>(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`span`,{children:t.metric_name}),(0,B.jsx)(`strong`,{children:VC(e.metrics[t.metric_name])})]},t.metric_name))}),e.redacted_insight&&(0,B.jsxs)(`div`,{className:`benchmark-insight`,children:[(0,B.jsxs)(`span`,{className:`benchmark-mono`,children:[`REDACTED CASE INSIGHT · `,e.redacted_insight.confidence]}),(0,B.jsx)(`p`,{children:e.redacted_insight.causal_summary}),(0,B.jsxs)(`small`,{children:[`Implication: `,e.redacted_insight.implication]}),(0,B.jsx)(`br`,{}),(0,B.jsxs)(`small`,{children:[`Next probe: `,e.redacted_insight.next_probe]}),!!e.redacted_insight.evidence_refs?.length&&(0,B.jsxs)(B.Fragment,{children:[(0,B.jsx)(`br`,{}),(0,B.jsxs)(`small`,{children:[`Evidence: `,e.redacted_insight.evidence_refs.join(`, `)]})]})]})]})}function YC({packet:e,selectedRunId:t,onSelectRun:n}){let r=e.runs.find(e=>e.run_id===t)??e.runs[0];return(0,B.jsxs)(`div`,{className:`benchmark-runs-layout`,children:[(0,B.jsx)(`div`,{className:`benchmark-table-shell`,children:(0,B.jsxs)(`table`,{children:[(0,B.jsx)(`thead`,{children:(0,B.jsxs)(`tr`,{children:[(0,B.jsx)(`th`,{children:`Run`}),(0,B.jsx)(`th`,{children:`Case`}),(0,B.jsx)(`th`,{children:`Arm`}),(0,B.jsx)(`th`,{children:`Status`}),(0,B.jsx)(`th`,{children:`Countability`})]})}),(0,B.jsx)(`tbody`,{children:e.runs.map(e=>(0,B.jsxs)(`tr`,{"aria-selected":e.run_id===r?.run_id,children:[(0,B.jsx)(`td`,{children:(0,B.jsx)(`button`,{className:`benchmark-run-link`,onClick:()=>n(e.run_id),type:`button`,children:e.run_id})}),(0,B.jsx)(`td`,{children:e.case_id}),(0,B.jsx)(`td`,{children:e.arm_id}),(0,B.jsx)(`td`,{children:e.status}),(0,B.jsx)(`td`,{children:e.countability.score_countable?`Score-countable`:`Diagnostic only`})]},e.run_id))})]})}),r&&(0,B.jsx)(JC,{packet:e,run:r})]})}function XC(){let e=dw.useSearch(),t=dw.useNavigate(),[n,r]=(0,z.useState)(null),[i,a]=(0,z.useState)(null),[o,s]=(0,z.useState)(0),c=(0,z.useMemo)(()=>{let t=e.dashboardUrl||`/chat/benchmark-study.example.json`;try{return{url:FC(t,window.location.href),error:null}}catch(e){return{url:``,error:e instanceof Error?e.message:`Invalid dashboard source`}}},[e.dashboardUrl]);if((0,z.useEffect)(()=>{let e=!0;return r(null),a(null),c.error?(a(c.error),()=>{e=!1}):(fetch(c.url,{cache:`no-store`}).then(async e=>{if(!e.ok)throw Error(`HTTP ${e.status} while loading the dashboard packet`);return PC(await e.json())}).then(t=>{e&&r(t)}).catch(t=>{e&&a(t instanceof Error?t.message:`Unable to load dashboard packet`)}),()=>{e=!1})},[o,c]),(0,z.useEffect)(()=>{n&&(document.title=`${n.design.labels.title??n.study_id} · LoopX Benchmark`)},[n]),i)return(0,B.jsxs)(`main`,{className:`benchmark-page benchmark-loading`,children:[(0,B.jsx)(am,{"aria-hidden":`true`}),(0,B.jsx)(`h1`,{children:`Dashboard packet unavailable`}),(0,B.jsx)(`p`,{children:i}),(0,B.jsxs)(`button`,{onClick:()=>s(e=>e+1),type:`button`,children:[(0,B.jsx)(Lm,{"aria-hidden":`true`,size:16}),` Retry readback`]})]});if(!n)return(0,B.jsxs)(`main`,{"aria-busy":`true`,className:`benchmark-page benchmark-loading`,children:[(0,B.jsx)(Wp,{"aria-hidden":`true`}),(0,B.jsx)(`h1`,{children:`Reading benchmark study`}),(0,B.jsx)(`p`,{children:`Validating the public-safe dashboard packet…`})]});let l=n.design.metric_catalog.find(e=>e.role===`primary`)?.metric_name??`primary`,u=(n,r=e.runId)=>t({search:e=>({...e,view:n,runId:r})}),d=new URL(c.url).pathname;return(0,B.jsxs)(`main`,{className:`benchmark-page`,children:[(0,B.jsxs)(`header`,{className:`benchmark-hero`,children:[(0,B.jsxs)(`div`,{className:`benchmark-hero-topline`,children:[(0,B.jsx)(`a`,{className:`benchmark-wordmark`,href:`/chat/`,children:`LoopX`}),(0,B.jsxs)(`div`,{className:`benchmark-readonly`,children:[(0,B.jsx)(Gm,{"aria-hidden":`true`,size:15}),` Derived read-only projection`]})]}),(0,B.jsxs)(`div`,{className:`benchmark-hero-grid`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsxs)(`p`,{className:`benchmark-kicker`,children:[`BENCHMARK STUDY / `,n.benchmark_id]}),(0,B.jsxs)(`div`,{className:`benchmark-title-row`,children:[(0,B.jsx)(`h1`,{children:n.design.labels.title??n.study_id}),(0,B.jsx)(WC,{tone:n.status===`complete`?`success`:`warning`,children:n.status})]}),(0,B.jsx)(`p`,{className:`benchmark-lead`,children:`One declared study, explicit denominators, and the same countability rules from campaign summary to exact run.`})]}),(0,B.jsxs)(`dl`,{className:`benchmark-identity`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Study`}),(0,B.jsx)(`dd`,{children:n.study_id})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Protocol`}),(0,B.jsx)(`dd`,{children:n.design.protocol_id})]}),(0,B.jsxs)(`div`,{children:[(0,B.jsx)(`dt`,{children:`Case set`}),(0,B.jsx)(`dd`,{children:n.design.case_set.case_set_id})]})]})]}),(0,B.jsxs)(`div`,{className:`benchmark-kpi-grid`,children:[(0,B.jsxs)(`article`,{children:[(0,B.jsx)(um,{"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`Score-countable cells`}),(0,B.jsxs)(`strong`,{children:[n.campaign.selected_score_countable_cell_count,(0,B.jsxs)(`small`,{children:[` / `,n.campaign.intended_cell_denominator]})]}),(0,B.jsxs)(`p`,{children:[LC(n.campaign.selected_score_countable_coverage_rate),` declared coverage`]})]}),(0,B.jsxs)(`article`,{children:[(0,B.jsx)(om,{"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`Complete designs`}),(0,B.jsxs)(`strong`,{children:[n.campaign.complete_declared_design_case_count,(0,B.jsxs)(`small`,{children:[` / `,n.campaign.intended_case_count]})]}),(0,B.jsx)(`p`,{children:`Cases with every declared arm`})]}),(0,B.jsxs)(`article`,{children:[(0,B.jsx)(qp,{"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`Matched comparisons`}),(0,B.jsx)(`strong`,{children:n.campaign.matched_pair_countable_count}),(0,B.jsx)(`p`,{children:`Eligible pairs only`})]}),(0,B.jsxs)(`article`,{children:[(0,B.jsx)(Wp,{"aria-hidden":`true`}),(0,B.jsx)(`span`,{children:`In flight`}),(0,B.jsx)(`strong`,{children:n.campaign.in_flight_run_count}),(0,B.jsx)(`p`,{children:n.status===`provisional`?`Coverage remains provisional`:`Declared coverage complete`})]})]})]}),(0,B.jsxs)(`nav`,{"aria-label":`Benchmark dashboard views`,className:`benchmark-tabs`,children:[IC.map(t=>(0,B.jsx)(`button`,{"aria-current":e.view===t.id?`page`:void 0,onClick:()=>u(t.id),type:`button`,children:t.label},t.id)),(0,B.jsxs)(`button`,{className:`benchmark-refresh`,onClick:()=>s(e=>e+1),type:`button`,children:[(0,B.jsx)(Lm,{"aria-hidden":`true`,size:14}),` Refresh local readback`]})]}),(0,B.jsxs)(`div`,{className:`benchmark-content`,children:[e.view===`campaign`&&(0,B.jsx)(GC,{packet:n,primaryMetric:l}),e.view===`arms`&&(0,B.jsx)(KC,{packet:n}),e.view===`cases`&&(0,B.jsx)(qC,{onOpenRun:e=>u(`runs`,e),packet:n,primaryMetric:l}),e.view===`runs`&&(0,B.jsx)(YC,{onSelectRun:e=>u(`runs`,e),packet:n,selectedRunId:e.runId})]}),(0,B.jsxs)(`footer`,{className:`benchmark-footer`,children:[(0,B.jsxs)(`div`,{children:[(0,B.jsx)(Gm,{"aria-hidden":`true`,size:16}),(0,B.jsxs)(`span`,{children:[`Scores: `,n.authority.score_source]}),(0,B.jsx)(`span`,{children:`Dashboard cannot launch, grade, or mutate runs.`})]}),(0,B.jsxs)(`code`,{title:d,children:[`local`,d]})]})]})}var ZC=J({goalId:W().optional().default(``),statusUrl:W().optional().default(``)}),QC=J({goalId:W().optional().default(``),mode:Y([`showcase`,`developer`,`ops`]).optional().default(`showcase`),statusUrl:W().optional().default(``),todoLane:Y([`all`,`user`,`agent`]).optional().default(`all`),todoQuery:W().optional().default(``)}),$C=QC.omit({mode:!0}),ew=J({dashboardUrl:W().optional().default(``),view:Y([`campaign`,`arms`,`cases`,`runs`]).optional().default(`campaign`),runId:W().optional().default(``)});function tw(){let e=`https://huangruiteng.github.io/loopx/docs/showcases/index.en.html`;return(0,z.useEffect)(()=>{window.location.replace(e)},[]),(0,B.jsx)(`a`,{href:e,children:`Open LoopX cases / 浏览案例`})}function nw({goalId:e,statusUrl:t}){let n=t?ih(t,window.location.href):null;return n?.error?(0,B.jsx)(`main`,{role:`alert`,children:n.error}):(0,B.jsx)(ii,{replace:!0,to:`/`,search:{goalId:e,statusUrl:t}})}function rw(){let e=sw.useSearch();return e.mode===`ops`?(0,B.jsx)(nw,{...e}):e.mode===`developer`?(0,B.jsx)(ii,{replace:!0,to:`/developers/projections`}):(0,B.jsx)(tw,{})}function iw(){return(0,B.jsx)(nw,{...cw.useSearch()})}var aw=Ci({component:()=>(0,B.jsx)(Mi,{}),errorComponent:()=>(0,B.jsxs)(`main`,{role:`alert`,className:`p-8`,children:[(0,B.jsx)(`h1`,{children:`页面暂时无法显示 / Page unavailable`}),(0,B.jsx)(`p`,{children:`请重新加载页面;这不会执行任务。 / Reloading does not execute tasks.`}),(0,B.jsx)(`button`,{type:`button`,onClick:()=>window.location.reload(),children:`重新加载 / Reload`})]})}),ow=xi({getParentRoute:()=>aw,path:`/`,validateSearch:e=>ZC.parse(e),component:lC}),sw=xi({getParentRoute:()=>aw,path:`/frontstage`,validateSearch:e=>QC.parse(e),component:rw}),cw=xi({getParentRoute:()=>aw,path:`/deprecated/frontstage/ops`,validateSearch:e=>$C.parse(e),component:iw}),lw=xi({getParentRoute:()=>aw,path:`/frontstage/developer`,component:()=>(0,B.jsx)(ii,{replace:!0,to:`/developers/projections`})}),uw=xi({getParentRoute:()=>aw,path:`/developers/projections`,component:CC}),dw=xi({getParentRoute:()=>aw,path:`/benchmarks/study`,validateSearch:e=>ew.parse(e),component:XC}),fw=aw.addChildren([ow,sw,cw,lw,uw,dw]);function pw(e){return!e||e===`/`||e===`./`?`/`:(e.startsWith(`/`)?e:`/${e}`).replace(/\/+$/,``)||`/`}var mw=Li({routeTree:fw,basepath:pw(`/chat/`),trailingSlash:`preserve`}),hw=document.getElementById(`root`);if(!hw)throw Error(`Root element not found`);var gw=new Ae({defaultOptions:{queries:{refetchOnWindowFocus:!1,retry:1,staleTime:1e4}}});(0,Vi.createRoot)(hw).render((0,B.jsx)(Pe,{client:gw,children:(0,B.jsx)(qi,{children:(0,B.jsx)(Bi,{router:mw})})})); \ No newline at end of file diff --git a/loopx/web/chat/index.html b/loopx/web/chat/index.html index 22abde138c..371c848cd9 100644 --- a/loopx/web/chat/index.html +++ b/loopx/web/chat/index.html @@ -18,7 +18,7 @@ content="LoopX 个人 Agent 工作区:在同一个频道里查看、纠偏并推进 Goal。" /> LoopX 个人 Agent 工作区 - + From 04cb337690c591bc50eb64b417230d84585b457b Mon Sep 17 00:00:00 2001 From: luw2007 Date: Mon, 14 Sep 2026 11:22:31 +0800 Subject: [PATCH 04/76] test(chat): cover restored workspace gate selection Signed-off-by: luw2007 --- .../typed-actions.mjs | 51 +++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/examples/personal-workspace-browser/typed-actions.mjs b/examples/personal-workspace-browser/typed-actions.mjs index c2afd3f718..fd45f3368e 100644 --- a/examples/personal-workspace-browser/typed-actions.mjs +++ b/examples/personal-workspace-browser/typed-actions.mjs @@ -163,6 +163,57 @@ export const typedActionsScenario = { await operationUi.close(); } + const storedWorkspaceGate = { + schema_version: "loopx_chat_action_proposal_v1", + proposal_id: "stored-goal-create-workspace-gate", + action_kind: "goal.create", + summary: "Create stored workspace Goal", + normalized_parameters: { goal_id: "product-release", title: "Stored workspace Goal", workspace_ref: "current" }, + context: { kind: "goal_directory", goal_id: "product-release" }, + expected_state_fingerprint: "fixture-workspace-gate-r1", + permission_classification: "durable_write", + validation_evidence: ["workspace selection required"], + available_transitions: ["regenerate", "reject", "defer"], + status: "gated", + receipt: null, + stale: null, + gate: { + kind: "workspace_selection_required", + summary: "Select one server-configured workspace before creating this Goal.", + next_action: "Select a workspace to regenerate the confirmation preview.", + candidates: [{ workspace_ref: "workspace-fixture", label: "Workspace 1" }], + }, + created_at: "2026-09-14T01:00:00Z", + updated_at: "2026-09-14T01:00:01Z", + }; + const workspaceGateUi = await openWorkspacePage(browser, url, { + apiOptions: { initialActionProposals: [storedWorkspaceGate] }, + }); + try { + const { api, page } = workspaceGateUi; + await page.locator(".personal-goal-link", { hasText: "Product Release" }).click(); + await page.locator(".personal-goal-tabs button", { hasText: "Chat" }).click(); + await page.locator(".personal-gated-summary summary").click(); + const proposalRow = page.locator(".personal-proposal-row", { hasText: "Stored workspace Goal" }); + try { + await proposalRow.waitFor({ state: "visible", timeout: 10_000 }); + } catch (error) { + throw new Error(`${error.message}; proposals=${await page.locator(".personal-proposal-row").allInnerTexts()}; errors=${workspaceGateUi.errors.join(" | ")}; body=${(await page.locator("body").innerText()).slice(0, 2000)}`); + } + await proposalRow.click(); + const drawer = page.locator('.personal-context-drawer[data-context-kind="proposal"]'); + await drawer.getByRole("button", { name: /Workspace 1/ }).click(); + const regenerated = api.actionPreviews.at(-1); + if (regenerated?.normalized_parameters.workspace_ref !== "workspace-fixture") { + throw new Error(`Stored workspace selection did not regenerate the Goal preview: ${JSON.stringify(regenerated)}`); + } + if ((await drawer.innerText()).includes("Host confirmation required")) { + throw new Error("Workspace selection gate was mislabeled as host-only confirmation"); + } + } finally { + await workspaceGateUi.close(); + } + // Real Goal button -> typed preview -> compiler -> drawer/apply, with only // the service boundary controlled. No test computes the plan under review. for (const width of [1512, 390]) { From 408902537419634391a478168a6a8134dfb65dc8 Mon Sep 17 00:00:00 2001 From: Yue Dai <54579099+yuedai-pbc@users.noreply.github.com> Date: Wed, 23 Sep 2026 20:50:27 +0800 Subject: [PATCH 05/76] fix(hygiene): treat GitHub's own rendered pages as live surfaces `LIVE_SURFACE_PREFIXES` guarded `.github/workflows/` alone, so the files GitHub renders at a visitor or a reporter escaped the canonical-repository check entirely: the private-vulnerability entry in `SECURITY.md`, the four contact links in `ISSUE_TEMPLATE/config.yml` that GitHub prints on its own new-issue page, `SUPPORT.md`'s routing table, the PR template's guidance pointer, and the ruleset link `GOVERNANCE.md` itself calls live. Seventeen addresses named the pre-transfer owner, and they kept resolving only because the transfer left a redirect behind -- which is a courtesy, not an ownership fact. Point each of those at `loopx-project/loopx`. Governance's record of the initial public commit and of the issue that settled a roster entry keeps the address those events happened under, reviewed per path and use like the existing pull citations; the ruleset link does not, because the sentence around it calls it live. Only the widened prefix decides this, not a new rule: every classified use is an offender until a path-and-use exception reviews it, so the two citations had to be judged rather than inherited. The smoke now pins both directions -- the new-issue contact file is a live surface, and a dated commit citation under it stays tolerated. `LIVE_ADDRESS_USES` is removed: nothing referenced it, while its comment described a live-versus-citation split the implementation never applied, which is the easiest thing in this file to "fix" by editing a constant that does nothing. Signed-off-by: Yue Dai <54579099+yuedai-pbc@users.noreply.github.com> --- .github/GOVERNANCE.md | 4 +-- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/ISSUE_TEMPLATE/config.yml | 8 ++--- .github/PULL_REQUEST_TEMPLATE.md | 2 +- .github/SECURITY.md | 2 +- .github/SUPPORT.md | 18 ++++++------ examples/repository-hygiene-smoke.py | 42 ++++++++++++++++++++++----- 7 files changed, 52 insertions(+), 26 deletions(-) diff --git a/.github/GOVERNANCE.md b/.github/GOVERNANCE.md index 54145f71f7..c214acba84 100644 --- a/.github/GOVERNANCE.md +++ b/.github/GOVERNANCE.md @@ -146,7 +146,7 @@ but do not replace the approval required from an eligible GitHub reviewer. ## Main Branch Merge Gates -The live [main ruleset](https://github.com/huangruiteng/loopx/rules/18121976) +The live [main ruleset](https://github.com/loopx-project/loopx/rules/18121976) is the operational authority. It requires a pull request, one approving review, code-owner approval where applicable, dismissal of stale approvals, approval of the last push by another reviewer, resolved review threads, and @@ -220,7 +220,7 @@ The versioned [Current Technical Directions](../docs/project/technical-directions.md) page is the canonical map of active strategic programs, maturity, contribution routes, and promotion gates. The pinned -[GitHub Discussion](https://github.com/huangruiteng/loopx/discussions/2851) is +[GitHub Discussion](https://github.com/loopx-project/loopx/discussions/2851) is its community-facing projection; an issue, Discussion, RFC, or integration branch does not override merged runtime and stable reference contracts. diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 991975bb67..b2e9338f40 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -6,7 +6,7 @@ body: - type: markdown attributes: value: | - Thanks for helping improve LoopX. Do not report an unpatched security vulnerability here; use [Private Vulnerability Reporting](https://github.com/huangruiteng/loopx/security/advisories/new). Remove credentials, private data, raw agent sessions, internal links, and local runtime state before submitting. + Thanks for helping improve LoopX. Do not report an unpatched security vulnerability here; use [Private Vulnerability Reporting](https://github.com/loopx-project/loopx/security/advisories/new). Remove credentials, private data, raw agent sessions, internal links, and local runtime state before submitting. - type: checkboxes id: preflight diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index c57e8669e5..9203623c5c 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,17 +1,17 @@ blank_issues_enabled: false contact_links: - name: Ask a question - url: https://github.com/huangruiteng/loopx/discussions/categories/q-a + url: https://github.com/loopx-project/loopx/discussions/categories/q-a about: Get community help with usage, configuration, or design questions. - name: Discord community url: https://discord.gg/XmGgQyCFZd about: Join informal onboarding, workflow, and show-and-tell conversations. - name: Report a security vulnerability - url: https://github.com/huangruiteng/loopx/security/advisories/new + url: https://github.com/loopx-project/loopx/security/advisories/new about: Privately report suspected unpatched vulnerabilities. Do not open a public issue. - name: Contributor task board - url: https://github.com/huangruiteng/loopx/blob/main/docs/development/contributor-tasks.md + url: https://github.com/loopx-project/loopx/blob/main/docs/development/contributor-tasks.md about: Start here for public, claimable work. - name: Current technical directions - url: https://github.com/huangruiteng/loopx/blob/main/docs/project/technical-directions.md + url: https://github.com/loopx-project/loopx/blob/main/docs/project/technical-directions.md about: Understand active programs, maturity, ownership boundaries, and promotion gates. diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 6f109ca6da..f95a319092 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -58,7 +58,7 @@ baseline/head comparison and a failing-before or mutation check, not just test c Documentation-only changes may use a static/manual row and explain runtime N/A. A passing row does not waive required real-path/backend gates. --> -See [validation disclosure guidance](https://github.com/huangruiteng/loopx/blob/main/CONTRIBUTING.md#validation-disclosure). +See [validation disclosure guidance](https://github.com/loopx-project/loopx/blob/main/CONTRIBUTING.md#validation-disclosure). ## Frontend / Visual Evidence diff --git a/.github/SECURITY.md b/.github/SECURITY.md index d2d9782cb3..c81e1e168e 100644 --- a/.github/SECURITY.md +++ b/.github/SECURITY.md @@ -10,7 +10,7 @@ version-specific regression. ## Reporting A Vulnerability Please report suspected vulnerabilities through -[GitHub Private Vulnerability Reporting](https://github.com/huangruiteng/loopx/security/advisories/new). +[GitHub Private Vulnerability Reporting](https://github.com/loopx-project/loopx/security/advisories/new). Do not open a public issue, discussion, or pull request for an unpatched vulnerability. diff --git a/.github/SUPPORT.md b/.github/SUPPORT.md index d64f84b2cc..cd1048aa23 100644 --- a/.github/SUPPORT.md +++ b/.github/SUPPORT.md @@ -9,10 +9,10 @@ channels. | Need | Channel | Use it for | | --- | --- | --- | -| Reproducible bug or installation failure | [GitHub Issues](https://github.com/huangruiteng/loopx/issues/new/choose) | Public, sanitized reproduction steps for behavior that can be investigated or fixed in the repository. | -| Feature request | [GitHub Issues](https://github.com/huangruiteng/loopx/issues/new/choose) | A concrete problem, desired outcome, alternatives, and the smallest useful product change. | -| Usage or design question | [GitHub Discussions: Q&A](https://github.com/huangruiteng/loopx/discussions/categories/q-a) | Questions, configuration help, and design discussion that do not yet identify a repository bug. | -| Security vulnerability | [Private Vulnerability Reporting](https://github.com/huangruiteng/loopx/security/advisories/new) | Suspected unpatched vulnerabilities. Do not post them in an issue, discussion, or chat. See [`SECURITY.md`](SECURITY.md). | +| Reproducible bug or installation failure | [GitHub Issues](https://github.com/loopx-project/loopx/issues/new/choose) | Public, sanitized reproduction steps for behavior that can be investigated or fixed in the repository. | +| Feature request | [GitHub Issues](https://github.com/loopx-project/loopx/issues/new/choose) | A concrete problem, desired outcome, alternatives, and the smallest useful product change. | +| Usage or design question | [GitHub Discussions: Q&A](https://github.com/loopx-project/loopx/discussions/categories/q-a) | Questions, configuration help, and design discussion that do not yet identify a repository bug. | +| Security vulnerability | [Private Vulnerability Reporting](https://github.com/loopx-project/loopx/security/advisories/new) | Suspected unpatched vulnerabilities. Do not post them in an issue, discussion, or chat. See [`SECURITY.md`](SECURITY.md). | | Informal peer help | [Discord](https://discord.gg/XmGgQyCFZd) | Onboarding, workflow comparison, show and tell, and community conversation. Chat is not an authoritative support or release record. | Public contributor work belongs on the @@ -25,14 +25,14 @@ requests should follow ## Official Publication Sources -- [GitHub Releases](https://github.com/huangruiteng/loopx/releases) is the +- [GitHub Releases](https://github.com/loopx-project/loopx/releases) is the authoritative source for published versions and release notes. -- [GitHub Discussions: Announcements](https://github.com/huangruiteng/loopx/discussions/categories/announcements) +- [GitHub Discussions: Announcements](https://github.com/loopx-project/loopx/discussions/categories/announcements) is the authoritative source for project announcements that are not tied to one release. The pinned - [Current technical directions and known limitations](https://github.com/huangruiteng/loopx/discussions/2851) + [Current technical directions and known limitations](https://github.com/loopx-project/loopx/discussions/2851) post is the community-facing projection of the versioned repository map. -- [GitHub Security Advisories](https://github.com/huangruiteng/loopx/security/advisories) +- [GitHub Security Advisories](https://github.com/loopx-project/loopx/security/advisories) is the authoritative source for coordinated vulnerability disclosures. Repository documentation describes the current product and contributor @@ -49,7 +49,7 @@ official publication source. Reposts, screenshots, personal accounts, and third-party communities may be useful, but they are not authoritative project communications. When sources conflict, prefer the official GitHub source for the relevant topic and ask for clarification in a public -[Discussion](https://github.com/huangruiteng/loopx/discussions). +[Discussion](https://github.com/loopx-project/loopx/discussions). ## Make A Useful Request diff --git a/examples/repository-hygiene-smoke.py b/examples/repository-hygiene-smoke.py index 76127ab427..2987df96a2 100644 --- a/examples/repository-hygiene-smoke.py +++ b/examples/repository-hygiene-smoke.py @@ -34,7 +34,11 @@ # A surface is live by where it is, never by what else its text happens to # contain: it hands an address to a user, a host or another tool at run time, # or it is the command someone copies. -LIVE_SURFACE_PREFIXES = ("loopx/", "scripts/", ".github/workflows/", "packages/") +# `.github/` is whole, not just its workflows: GitHub renders +# `ISSUE_TEMPLATE/config.yml` as the contact links on the new-issue page, and +# `SECURITY.md`, `SUPPORT.md`, `GOVERNANCE.md` and `PULL_REQUEST_TEMPLATE.md` +# each hand an address to the person reading them. +LIVE_SURFACE_PREFIXES = ("loopx/", "scripts/", ".github/", "packages/") # A built bundle is regenerated, not edited, so its baked-in address is fixed by # the release that rebuilds it. This is the tracked-build-output cost #4677 names. GENERATED_ASSET_PREFIXES = ("loopx/web/chat/assets/",) @@ -49,6 +53,10 @@ "loopx/capabilities/issue_fix/README.md": frozenset({"pull"}), "loopx/capabilities/issue_fix/README.zh-CN.md": frozenset({"pull"}), "packages/loopx-codex-provider-routing/RUNBOOK.md": frozenset({"pull"}), + # Governance records where the project started and which issue settled a + # roster change: both name the address the event happened under, while the + # ruleset link in the same file is called live and stays under review. + ".github/GOVERNANCE.md": frozenset({"commit", "issue"}), } DISAMBIGUATION_TERMS_SOURCE = ( "packages/loopx-community-discussion/src/loopx_community_discussion/normalize.py" @@ -87,14 +95,13 @@ def _address_use(raw_path: str) -> str: ) -# A use is either a live pointer this project must own or a dated citation that -# may keep the address the event happened under. -LIVE_ADDRESS_USES = frozenset( - {"repository", "issue_form", "discussion", "release_asset", "main_pointer", "branch"}) - - def stale_address_uses(name: str, text: str) -> list[str]: - """Return the old-address uses in a live surface that were never reviewed.""" + """Return the old-address uses in ``name`` that were never reviewed per use. + + Every classified use is an offender until a path-and-use exception reviews it, + so widening which files are live cannot quietly reclassify a dated citation as + safe: it has to be judged and named here. + """ tolerated = REVIEWED_ADDRESS_EXCEPTIONS.get(name, frozenset()) return [ @@ -248,6 +255,25 @@ def _validate_stale_address_classifier() -> None: "main_pointer" ]: raise AssertionError("a documentation pointer must be named as a live address") + advisory = "https://github.com/huangruiteng/loopx/security/advisories/new\n" + if stale_address_uses(".github/SECURITY.md", advisory) != ["security"]: + raise AssertionError( + "the private-vulnerability-reporting entry is how a reporter reaches this " + "project, so it must be named as a live address rather than a citation" + ) + if not _is_live_surface(".github/ISSUE_TEMPLATE/config.yml"): + raise AssertionError( + "GitHub renders ISSUE_TEMPLATE/config.yml as the contact links on its own " + "new-issue page, so it is a live surface" + ) + if stale_address_uses( + ".github/GOVERNANCE.md", + "https://github.com/huangruiteng/loopx/commit/7dcdc9dc79226d157ba57d3e8ff4bae664f020c1\n", + ): + raise AssertionError( + "widening .github/ must not turn a dated history citation into an " + "offender: the commit a project started under keeps that address" + ) if _is_live_surface("loopx/web/chat/assets/index-abc123.js"): raise AssertionError( "a generated bundle is outside the guard: its address is fixed by the " From fdce140f736ef2660d7d06cf8f9ede27217000fd Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Thu, 24 Sep 2026 16:34:56 +0800 Subject: [PATCH 06/76] feat(team): trace version-bound correction paths on demand Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- .../personal-workspace/goal-loopx-mode.css | 9 ++ .../personal-workspace/goal-team-episode.tsx | 87 +++++++++++++++++++ .../personal-workspace/goal-team-evidence.tsx | 8 +- .../personal-workspace-browser/fixture.mjs | 17 +++- .../team-evidence.mjs | 51 ++++++++++- 5 files changed, 169 insertions(+), 3 deletions(-) create mode 100644 apps/presentation/dashboard/src/features/personal-workspace/goal-team-episode.tsx diff --git a/apps/presentation/dashboard/src/features/personal-workspace/goal-loopx-mode.css b/apps/presentation/dashboard/src/features/personal-workspace/goal-loopx-mode.css index 039d7e2acf..81e9943124 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/goal-loopx-mode.css +++ b/apps/presentation/dashboard/src/features/personal-workspace/goal-loopx-mode.css @@ -53,6 +53,15 @@ .goal-team-lineage ul { list-style: none; padding: 0; margin: 12px 0; } .goal-team-lineage li { display: grid; gap: 8px; padding: 0 0 16px 16px; border-left: 2px solid var(--pw-line, #ebebeb); overflow-wrap: anywhere; } .goal-team-lineage button { justify-self: start; max-width: 100%; overflow-wrap: anywhere; text-align: start; } +.goal-team-episode { margin-block: 20px; border: 1px solid var(--pw-line, #ebebeb); border-radius: 10px; padding: 16px; background: var(--pw-bg, #fafafa); } +.goal-team-episode-heading { display: flex; align-items: center; justify-content: space-between; gap: 12px; flex-wrap: wrap; } +.goal-team-episode > p { color: var(--pw-muted, #666); line-height: 1.5; } +.goal-team-episode ol { list-style: none; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 1px; padding: 0; margin: 16px 0 0; background: var(--pw-line, #ebebeb); border: 1px solid var(--pw-line, #ebebeb); border-radius: 6px; overflow: hidden; } +.goal-team-episode li { display: flex; flex-direction: column; align-items: flex-start; gap: 8px; min-width: 0; padding: 12px; background: var(--pw-surface, #fff); overflow-wrap: anywhere; } +.goal-team-episode li > span:first-child { font-size: 11px; color: var(--pw-muted, #666); } +.goal-team-episode li > strong { font-size: 13px; } +.goal-team-episode li > button { margin-top: auto; } +@media (max-width: 780px) { .goal-team-episode ol { grid-template-columns: 1fr; } } .goal-loopx-dialog:has(.goal-team-comparison) { width: min(1040px, calc(100vw - 32px)); } .goal-team-comparison { margin-block: 24px; } .goal-team-comparison-heading { display: flex; align-items: baseline; justify-content: space-between; gap: 16px; } diff --git a/apps/presentation/dashboard/src/features/personal-workspace/goal-team-episode.tsx b/apps/presentation/dashboard/src/features/personal-workspace/goal-team-episode.tsx new file mode 100644 index 0000000000..bc0ac81bf6 --- /dev/null +++ b/apps/presentation/dashboard/src/features/personal-workspace/goal-team-episode.tsx @@ -0,0 +1,87 @@ +import {useEffect, useRef, useState} from "react"; +import {readLoopXTeamWork, type DelegationDependency, type DelegationReadback} from "../../data/chat"; + +type VerifiedLink = {link: DelegationDependency; source: DelegationReadback}; +type Episode = {original: VerifiedLink; response: VerifiedLink; downstream: DelegationReadback | null}; + +/** Resolve only an explicitly requested correction path. Reads are on demand and never start work. */ +export function GoalTeamEpisode({sessionId, result, zh, onInspect}: { + sessionId: string; result: DelegationReadback; zh: boolean; onInspect: (operationId: string) => void; +}) { + const original = result.dependencies?.find(link => link.relation === "revises"); + const response = result.dependencies?.find(link => link.relation === "responds_to" && link.operation_id !== original?.operation_id); + const adoption = result.adoptions?.find(row => row.state === "current") ?? result.adoptions?.[0]; + const [episode, setEpisode] = useState(null); + const [busy, setBusy] = useState(false); + const [error, setError] = useState(""); + const generation = useRef(0); + useEffect(() => { + generation.current++; setEpisode(null); setError(""); setBusy(false); + return () => {generation.current++;}; + }, [result, sessionId]); + if (!original || !response) return null; + async function trace() { + const current = ++generation.current; + setEpisode(null); setError(""); setBusy(true); + try { + const [first, challenge, revised, downstream] = await Promise.all([ + readLoopXTeamWork(sessionId, original!.operation_id), + readLoopXTeamWork(sessionId, response!.operation_id), + readLoopXTeamWork(sessionId, result.operation_id), + adoption?.state === "current" ? readLoopXTeamWork(sessionId, adoption.consumer_operation_id) : Promise.resolve(null), + ]); + const matches = (link: DelegationDependency, source: DelegationReadback) => + link.state === "current" && source.status === "accepted" && !source.recovery_required && !source.error + && source.artifacts?.some(artifact => artifact.ref === link.ref && artifact.sha256 === link.sha256); + const responseBindsOriginal = challenge.dependencies?.some(link => + link.relation === "responds_to" && link.operation_id === original!.operation_id && matches(link, first)); + const revisionMatchesObservation = revised.status === "accepted" && revised.agent_id === result.agent_id + && !revised.recovery_required && !revised.error + && revised.artifacts?.length === result.artifacts?.length + && result.artifacts?.every(expected => revised.artifacts?.some( + artifact => artifact.ref === expected.ref && artifact.sha256 === expected.sha256)) + && revised.dependencies?.some(link => link.relation === "revises" && link.operation_id === original!.operation_id && matches(link, first)) + && revised.dependencies?.some(link => link.relation === "responds_to" && link.operation_id === response!.operation_id && matches(link, challenge)); + const refreshedAdoption = adoption?.state === "current" ? revised.adoptions?.find(row => + row.consumer_operation_id === adoption.consumer_operation_id && row.requester_agent_id === adoption.requester_agent_id + && row.consumer_agent_id === adoption.consumer_agent_id && row.state === "current") : null; + const downstreamBindsRevision = downstream?.dependencies?.some(link => + link.relation === "uses" && link.operation_id === revised.operation_id && matches(link, revised)); + const downstreamMatchesReceipt = downstream?.status === "accepted" && !downstream.recovery_required && !downstream.error + && refreshedAdoption?.consumer_artifacts.every(expected => downstream.artifacts?.some( + artifact => artifact.ref === expected.ref && artifact.sha256 === expected.sha256)); + const sourceMatchesReceipt = refreshedAdoption?.source_artifacts.every(expected => revised.artifacts?.some( + artifact => artifact.ref === expected.ref && artifact.sha256 === expected.sha256)); + if (result.status !== "accepted" || result.error || result.recovery_required + || !matches(original!, first) || !matches(response!, challenge) + || !responseBindsOriginal || !revisionMatchesObservation + || (adoption?.state === "current" && (!sourceMatchesReceipt || !downstreamBindsRevision || !downstreamMatchesReceipt))) { + throw new Error("linked evidence unavailable"); + } + if (current === generation.current) setEpisode({original: {link: original!, source: first}, + response: {link: response!, source: challenge}, downstream}); + } catch { + if (current === generation.current) setError(zh ? "关联执行或版本已变化;请重新读取证据。" : "A linked execution or version changed; recheck the evidence."); + } finally {if (current === generation.current) setBusy(false);} + } + return
+

{zh ? "追踪一次纠偏" : "Trace a correction"}

+
+

{zh ? "按需核验原始版本、复核回应、修订及后续采用。关系和验收不能替代对异议内容的判断。" + : "Verify the original version, review response, revision and downstream use on demand. Relationships and acceptance do not judge the objection's content."}

+ {busy ?

{zh ? "正在核验关联执行与指定版本…" : "Checking linked executions and exact versions…"}

: null} + {error ?

{error}

: null} + {episode ?
    +
  1. 01 · {zh ? "原始版本" : "Original version"}{episode.original.source.agent_id} +
  2. +
  3. 02 · {zh ? "复核回应" : "Review response"}{episode.response.source.agent_id} +
  4. +
  5. 03 · {zh ? "修订产物 · 当前验收有效" : "Revised output · currently accepted"}{result.agent_id} + {zh ? "与原始版本的正文对照见下方" : "Compare with the original below"}
  6. +
  7. 04 · {episode.downstream ? (zh ? "后续结果 · 当前验收与采用记录有效" : "Downstream result · acceptance and adoption current") + : adoption ? (zh ? "采用证据无法核验" : "Adoption evidence unavailable") : (zh ? "尚无请求方采用" : "No requester adoption")} + {episode.downstream && adoption ? <>{episode.downstream.agent_id} · {adoption.requester_agent_id} + : null}
  8. +
: null} +
; +} diff --git a/apps/presentation/dashboard/src/features/personal-workspace/goal-team-evidence.tsx b/apps/presentation/dashboard/src/features/personal-workspace/goal-team-evidence.tsx index 6b7033aef4..b65b2d43d0 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/goal-team-evidence.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/goal-team-evidence.tsx @@ -1,4 +1,5 @@ import {GoalTeamLineage} from "./goal-team-lineage"; +import {GoalTeamEpisode} from "./goal-team-episode"; import {GoalTeamComparison} from "./goal-team-comparison"; import {TeamArtifactReport} from "./team-artifact-content"; import {useEffect, useRef, useState} from "react"; @@ -55,6 +56,8 @@ export function GoalTeamEvidence({sessionId, operationId, zh, canMessage, ingres const receiptLabel = status === "pending" ? (zh ? "已进入协调员收件箱,等待读取" : "In the coordinator inbox; awaiting read") : status === "delivered" ? (zh ? "已交给协调员;尚无应用回执" : "Delivered to coordinator; application not confirmed") : (zh ? "投递状态待核实" : "Delivery requires reconciliation"); + const hasCorrectionPath = Boolean(result?.dependencies?.some(link => link.relation === "revises") + && result?.dependencies?.some(link => link.relation === "responds_to")); return

{zh ? "执行证据" : "Execution evidence"}

@@ -63,8 +66,11 @@ export function GoalTeamEvidence({sessionId, operationId, zh, canMessage, ingres {result ? <>

{result.agent_id} · {delegationStateLabel(result, zh)}{" · "}{observedAt}

{zh ? "按需读取的当前观察,不是持续在线状态;验收不代表协调员已采用。" : "An on-demand observation, not continuous liveness; acceptance does not establish coordinator adoption."}

+ - + {hasCorrectionPath ?
{zh ? "版本与采用关系详情" : "Version and adoption details"} +
+ : } {result.error ?

{result.error}

: null} {result.status === "accepted" && !result.error && !result.recovery_required && result.artifacts?.length ? result.artifacts.map(artifact =>
diff --git a/examples/personal-workspace-browser/fixture.mjs b/examples/personal-workspace-browser/fixture.mjs index 8c89072e0c..fa8196d9a7 100644 --- a/examples/personal-workspace-browser/fixture.mjs +++ b/examples/personal-workspace-browser/fixture.mjs @@ -1507,7 +1507,17 @@ export async function installApi(page, { goalSubagentConfigurationEnabled = true } if (body.operation === "read") { if (current.fixtureTeamReadDelayMs) await new Promise(resolveWait => setTimeout(resolveWait, current.fixtureTeamReadDelayMs)); - if (body.operation_id === "accepted-synthesis") { + if (current.fixtureCorrectionEpisode && body.operation_id === "original-analysis") { + await route.fulfill({json: {ok: true, operation_id: body.operation_id, request_id: "request-original", + agent_id: "local-analyst", todo_id: "todo_original", status: "accepted", worker_active: false, + recovery_required: false, artifacts: [{ref: "report.json", sha256: "a".repeat(64), text: '{"cash_flow":90}'}]}}); + } else if (current.fixtureCorrectionEpisode && body.operation_id === "review-objection") { + await route.fulfill({json: {ok: true, operation_id: body.operation_id, request_id: "request-review", + agent_id: "independent-reviewer", todo_id: "todo_review", status: "accepted", worker_active: false, + recovery_required: false, artifacts: [{ref: "objection.json", sha256: "b".repeat(64), text: '{"objection":"The source was superseded"}'}], + dependencies: [{operation_id: "original-analysis", ref: "report.json", sha256: "a".repeat(64), + input_ref: "original.json", relation: "responds_to", state: "current"}]}}); + } else if (body.operation_id === "accepted-synthesis") { await route.fulfill({json: {ok: true, operation_id: body.operation_id, request_id: "request-synthesis", agent_id: "synthesizer", todo_id: "todo_synthesis", status: "accepted", worker_active: false, recovery_required: false, artifacts: [{ref: "synthesis.json", sha256: "e".repeat(64), text: '{"accepted_cash_flow":75}'}, @@ -1521,6 +1531,11 @@ export async function installApi(page, { goalSubagentConfigurationEnabled = true await route.fulfill({json: {ok: true, operation_id: body.operation_id, request_id: "request-analysis", agent_id: "local-analyst", todo_id: current.fixturePlanTodoId ?? "todo_analysis", status: "accepted", worker_active: false, recovery_required: false, + ...(current.fixtureCorrectionEpisode ? {dependencies: [ + {operation_id: "original-analysis", ref: "report.json", sha256: "a".repeat(64), + input_ref: "original.json", relation: "revises", state: "current"}, + {operation_id: "review-objection", ref: "objection.json", sha256: "b".repeat(64), + input_ref: "objection.json", relation: "responds_to", state: "current"}]} : {}), ...(current.fixtureAdoptionState ? {adoptions: [{requester_agent_id: "lead", consumer_operation_id: "accepted-synthesis", consumer_request_id: "request-synthesis", consumer_agent_id: "synthesizer", consumer_todo_id: "todo_synthesis", source_artifacts: [{ref: "report.json", sha256: "d".repeat(64)}], diff --git a/examples/personal-workspace-browser/team-evidence.mjs b/examples/personal-workspace-browser/team-evidence.mjs index 1a27cfd80d..797f2eb860 100644 --- a/examples/personal-workspace-browser/team-evidence.mjs +++ b/examples/personal-workspace-browser/team-evidence.mjs @@ -144,9 +144,57 @@ export const teamEvidenceScenario = { await evidence.getByRole("button", {name: "重新读取证据", exact: true}).click(); await evidence.getByText("采用证据已失效或无法核验", {exact: true}).waitFor(); assert.equal(await evidence.getByText("已记录采用 · 后续结果验收有效", {exact: true}).count(), 0); + mode.fixtureCorrectionEpisode = true; + await evidence.getByRole("button", {name: "重新读取证据", exact: true}).click(); + const episode = evidence.getByRole("region", {name: "纠偏证据路径"}); + await episode.getByRole("button", {name: "核验关联执行", exact: true}).click(); + await episode.getByText(/采用证据无法核验/).waitFor(); + delete mode.fixtureAdoptionState; + await evidence.getByRole("button", {name: "重新读取证据", exact: true}).click(); + await episode.getByRole("button", {name: "核验关联执行", exact: true}).click(); + await episode.getByText(/尚无请求方采用/).waitFor(); mode.fixtureAdoptionState = "current"; await evidence.getByRole("button", {name: "重新读取证据", exact: true}).click(); - await evidence.getByText("已记录采用 · 后续结果验收有效", {exact: true}).waitFor(); + assert.equal(await episode.getByText("independent-reviewer").count(), 0, "The path is not inferred before a deliberate read"); + await episode.getByRole("button", {name: "核验关联执行", exact: true}).click(); + await episode.getByText("independent-reviewer", {exact: true}).waitFor(); + await episode.getByText("local-analyst", {exact: true}).first().waitFor(); + await page.screenshot({path: resolve(outputDir, "team-correction-path.png"), animations: "disabled"}); + await page.setViewportSize({width: 390, height: 844}); + assert(await dialog.evaluate(el => el.scrollWidth <= el.clientWidth), "Correction path fits the mobile dialog"); + await page.screenshot({path: resolve(outputDir, "team-correction-path-mobile.png"), animations: "disabled"}); + await page.setViewportSize({width: 1512, height: 982}); + const rejectedSource = async route => { + const body = route.request().method() === "POST" ? route.request().postDataJSON() : {}; + if (body.operation === "read" && body.operation_id === "review-objection") { + return route.fulfill({json: {operation_id: body.operation_id, agent_id: "independent-reviewer", + status: "rejected", recovery_required: false}}); + } + return route.fallback(); + }; + await page.route("**/api/chat/sessions/*/loopx", rejectedSource); + await episode.getByRole("button", {name: "核验关联执行", exact: true}).click(); + await episode.getByRole("alert").filter({hasText: "关联执行或版本已变化"}).waitFor(); + assert.equal(await episode.getByText("independent-reviewer", {exact: true}).count(), 0, + "A rejected review clears the previously verified path"); + await page.unroute("**/api/chat/sessions/*/loopx", rejectedSource); + let revisionRechecks = 0; + const changedRevision = async route => { + const body = route.request().method() === "POST" ? route.request().postDataJSON() : {}; + if (body.operation === "read" && body.operation_id === "accepted-analysis") { + revisionRechecks++; + return route.fulfill({json: {operation_id: body.operation_id, agent_id: "local-analyst", + status: "accepted", recovery_required: false, + artifacts: [{ref: "report.json", sha256: "f".repeat(64), text: "newer revision"}]}}); + } + return route.fallback(); + }; + await page.route("**/api/chat/sessions/*/loopx", changedRevision); + await episode.getByRole("button", {name: "核验关联执行", exact: true}).click(); + await episode.getByRole("alert").filter({hasText: "关联执行或版本已变化"}).waitFor(); + assert.equal(revisionRechecks, 1, "The selected revision is revalidated instead of trusting its earlier display"); + assert.equal(await episode.getByText("newer revision").count(), 0); + await page.unroute("**/api/chat/sessions/*/loopx", changedRevision); assert.equal(api.turnRequests.length, 0, "Evidence reading must not start a model"); await page.screenshot({path: resolve(outputDir, "team-evidence-desktop.png"), animations: "disabled"}); // Lose the first acknowledgement; retry must preserve identity and content. @@ -191,6 +239,7 @@ export const teamEvidenceScenario = { await evidence.getByRole("button", {name: "重新读取证据", exact: true}).click(); await evidence.getByRole("alert").filter({hasText: "已清除上次证据"}).waitFor(); assert.equal(await content.count(), 0); + assert.equal(await episode.count(), 0, "Lost observation removes the correction path"); await page.screenshot({path: resolve(outputDir, "team-evidence-stale.png"), animations: "disabled"}); await dialog.getByRole("button", {name: "暂停协调员", exact: true}).click(); await dialog.getByText(/协调员已暂停。/).waitFor(); From e42995078d9273466b9580bcf94ad7abdcb7c727 Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Thu, 24 Sep 2026 16:35:08 +0800 Subject: [PATCH 07/76] docs(team): record L1 correction readback boundary Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- docs/architecture/rfcs/live-team-workspace-v0.md | 11 +++++++++++ .../architecture/rfcs/live-team-workspace-v0.zh-CN.md | 6 ++++++ 2 files changed, 17 insertions(+) diff --git a/docs/architecture/rfcs/live-team-workspace-v0.md b/docs/architecture/rfcs/live-team-workspace-v0.md index f8ff36e196..e08d9ba826 100644 --- a/docs/architecture/rfcs/live-team-workspace-v0.md +++ b/docs/architecture/rfcs/live-team-workspace-v0.md @@ -375,6 +375,17 @@ second assignment. This strengthens the optional request/intervention entry; real dual-card click-through remains post-install acceptance. It does not prove execution, result return or whole-team stopping. `consume_return` alone still means consumption, not version-bound adoption. +Implementation checkpoint (2026-09-24): an on-demand correction path can +cross-check the original, review response, revised output and downstream +adoption against current version-bound delegation reads. It exposes actor +identities and opens each accepted artifact; an unavailable adoption or rejected +review clears the previously verified path. This is a presentation and +readback slice, not L1 completion: the relation `responds_to` does not certify +that the response is an objection, and current acceptance lacks an explicit +verifier identity in this read model. The packaged browser scenario is +synthetic; the existing real correction run must still be exercised through +the packaged UI and independently read back, with the missing and lost-observation +cases in Section 9. Motion is retained only when it clarifies these transitions; remove effects that obscure absent execution, absent acceptance or source loss. diff --git a/docs/architecture/rfcs/live-team-workspace-v0.zh-CN.md b/docs/architecture/rfcs/live-team-workspace-v0.zh-CN.md index 9d701a0ef6..f994fe1a68 100644 --- a/docs/architecture/rfcs/live-team-workspace-v0.zh-CN.md +++ b/docs/architecture/rfcs/live-team-workspace-v0.zh-CN.md @@ -297,6 +297,12 @@ Chat 会话推断报告。复用现有 authority 与产物读取边界,不另 点击重复分配。这加强可选请求/干预入口;真实双卡点击仍需安装后验收,不能证明 执行、结果回报或整队停止。 `consume_return` 单独仍只代表消费,不能替代版本绑定的采用。 +实施检查点(2026-09-24):按需打开的纠偏路径可用当前版本绑定的 delegation +回读,交叉核验原始产物、复核回应、修订产物和后续采用,显示成员身份并打开每份已 +验收产物;采用不可用或复核被拒绝时清除旧路径。这是展示与回读切片,尚非 L1 +完成:`responds_to` 关系不能证明回应确实提出异议,当前回读中的验收也缺少明确 +的 verifier 身份。打包前端的浏览器场景仍是合成数据;已有的真实纠偏运行还须 +在打包界面和独立 CLI 上核验同一过程,并覆盖第 9 节的缺失与失联情况。 动态只有让上述变化更清楚才保留;掩盖未执行、未验收 或来源失联的效果应移除。更广的语义缩放、成员扩张和 renderer 探索在此后推进。 From d75ebf7072aea34463928e7888fbecb436b15d61 Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Thu, 24 Sep 2026 18:10:08 +0800 Subject: [PATCH 08/76] fix(quota): name the retained selection and the replan obligation that owns the Turn A Turn whose receipt is bound to an autonomous replan obligation cannot hand its settlement to another Todo. The refusal reported that case as a plain selection conflict, calling the retained pending selection "the projection's current selection", and published neither the retained selection nor the obligation that owns the Turn, so a caller could not branch on either without parsing prose. The conflict now states that the requested Todo cannot replace the retained pending selection, names the autonomous replan obligation that owns the Turn, and publishes `retained_selection`, `retained_selection_todo_id` and `receipt_replan_obligation_id` in the failure payload. The recommended action points at settling that obligation instead of rebinding the retained selection. This is the last branch of the explicit-selection preflight that still carried no typed retention facts; the eligibility predicates are unchanged. Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- loopx/cli_commands/quota_action_selection.py | 2 + loopx/cli_commands/quota_failure_report.py | 7 +++ loopx/control_plane/quota/error_codes.py | 25 ++++++++++ .../test_quota_action_selection_conflict.py | 49 +++++++++++++++++++ 4 files changed, 83 insertions(+) diff --git a/loopx/cli_commands/quota_action_selection.py b/loopx/cli_commands/quota_action_selection.py index 452c255425..8021c36666 100644 --- a/loopx/cli_commands/quota_action_selection.py +++ b/loopx/cli_commands/quota_action_selection.py @@ -177,6 +177,8 @@ def _requested_quota_action_selection_preflight( requested_todo_id=requested_todo_id, selected_todo_id=receipt_pending_action_todo_id, qualification_state="retained_selection", + receipt_replan_obligation_id=receipt_bound_replan_obligation_id, + retained_selection=True, ) if admitted: return None diff --git a/loopx/cli_commands/quota_failure_report.py b/loopx/cli_commands/quota_failure_report.py index 62f5cc3e16..8c7936441d 100644 --- a/loopx/cli_commands/quota_failure_report.py +++ b/loopx/cli_commands/quota_failure_report.py @@ -158,6 +158,13 @@ def quota_failure_payload( "agent_must_attempt": error.admission_must_attempt, "delivery_allowed": error.admission_delivery_allowed, } + if error.retained_selection: + selection_conflict["retained_selection"] = True + selection_conflict["retained_selection_todo_id"] = error.selected_todo_id + if error.receipt_replan_obligation_id: + selection_conflict["receipt_replan_obligation_id"] = ( + error.receipt_replan_obligation_id + ) payload.update( { "reason": str(error), diff --git a/loopx/control_plane/quota/error_codes.py b/loopx/control_plane/quota/error_codes.py index 9554e82c4f..c509fb9368 100644 --- a/loopx/control_plane/quota/error_codes.py +++ b/loopx/control_plane/quota/error_codes.py @@ -89,6 +89,8 @@ def __init__( unsettled_repair: str | None = None, admission_must_attempt: bool | None = None, admission_delivery_allowed: bool | None = None, + receipt_replan_obligation_id: str | None = None, + retained_selection: bool = False, ) -> None: self.kind = kind self.requested_todo_id = requested_todo_id @@ -98,6 +100,8 @@ def __init__( self.unsettled_repair = unsettled_repair self.admission_must_attempt = admission_must_attempt self.admission_delivery_allowed = admission_delivery_allowed + self.receipt_replan_obligation_id = receipt_replan_obligation_id + self.retained_selection = retained_selection if kind is QuotaActionSelectionConflictKind.UNQUALIFIED: reason = ( "the current projection carries no typed action-selection " @@ -135,6 +139,21 @@ def __init__( else "" ) ) + elif retained_selection: + # The Turn's receipt is bound to an autonomous replan obligation, so + # the requested Todo cannot replace the selection that Turn already + # retains. The default conflict sentence calls that id "the + # projection's current selection", which is not what the caller is + # up against: name the retained selection and the obligation that + # owns the Turn. + reason = ( + f"requested Todo {requested_todo_id or '(none)'} cannot replace " + "the retained pending selection " + f"{selected_todo_id or 'none'} on this Turn: the Turn's receipt is " + "bound to the autonomous replan obligation " + f"{receipt_replan_obligation_id or '(unnamed)'}, which owns its " + "settlement" + ) else: reason = ( f"requested Todo {requested_todo_id or '(none)'} is neither the " @@ -148,6 +167,12 @@ def __init__( "the prior Turn named in the reason is the blocker, settle that " "Turn first and then rerun this Turn" ) + elif retained_selection: + self.recommended_action = ( + "settle the autonomous replan obligation that owns this Turn, or " + "rerun `loopx quota should-run` without --todo-id to read the " + "selection the Turn retains; do not rebind the retained selection" + ) else: self.recommended_action = ( "rerun `loopx quota should-run` without --todo-id to read the current " diff --git a/tests/control_plane/test_quota_action_selection_conflict.py b/tests/control_plane/test_quota_action_selection_conflict.py index 2893d5e90f..4dfde67741 100644 --- a/tests/control_plane/test_quota_action_selection_conflict.py +++ b/tests/control_plane/test_quota_action_selection_conflict.py @@ -230,3 +230,52 @@ def test_refused_delivery_boundary_is_published_as_a_typed_admission_fact() -> N "agent_must_attempt": True, "delivery_allowed": False, } + + +def test_retained_selection_names_the_replan_obligation_that_owns_the_turn() -> None: + """A receipt-bound replan Turn cannot hand its settlement to another Todo.""" + + retained_todo_id = "todo_retained_selection" + replan_obligation_id = "replan-retained-selection-fixture" + with pytest.raises(QuotaActionSelectionConflictError) as raised: + _requested_quota_action_selection_preflight( + _payload(selected_todo={"todo_id": retained_todo_id}), + requested_todo_id=REQUESTED_TODO_ID, + receipt_bound_todo_id=None, + receipt_bound_replan_obligation_id=replan_obligation_id, + receipt_pending_action_todo_id=retained_todo_id, + receipt_identity_upgraded=True, + ) + error = raised.value + + assert error.kind is QuotaActionSelectionConflictKind.CONFLICT + assert error.retained_selection is True + assert error.receipt_replan_obligation_id == replan_obligation_id + assert retained_todo_id in str(error) + assert replan_obligation_id in str(error) + assert "retained pending selection" in str(error) + assert "own" in str(error.recommended_action) + + args = argparse.Namespace( + quota_command="should-run", + goal_id="quota-conflict-fixture", + agent_id="agent-fixture", + runtime_root=None, + verbose=False, + ) + payload = quota_failure_payload( + args, + registry_path=Path("/tmp/quota-conflict-registry.json"), + runtime_root_arg=None, + error=error, + ) + + assert payload["action_selection_conflict"] == { + "kind": "conflict", + "requested_todo_id": REQUESTED_TODO_ID, + "selected_todo_id": retained_todo_id, + "qualification_state": "retained_selection", + "retained_selection": True, + "retained_selection_todo_id": retained_todo_id, + "receipt_replan_obligation_id": replan_obligation_id, + } From d5150c58e452391e8b7bea0f15c5be112774c216 Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Thu, 24 Sep 2026 18:21:05 +0800 Subject: [PATCH 09/76] docs: define reusable conversation work surface and steward adoption Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- .../capable-manager-semantic-handoff-v0.md | 12 ++++++ ...pable-manager-semantic-handoff-v0.zh-CN.md | 12 ++++++ ...lligent-review-presentation-surfaces-v0.md | 40 +++++++++++++++++++ ...t-review-presentation-surfaces-v0.zh-CN.md | 10 +++++ .../rfcs/loopx-overall-roadmap-v0.md | 9 +++++ .../rfcs/loopx-overall-roadmap-v0.zh-CN.md | 2 + 6 files changed, 85 insertions(+) diff --git a/docs/architecture/rfcs/capable-manager-semantic-handoff-v0.md b/docs/architecture/rfcs/capable-manager-semantic-handoff-v0.md index fce0d94526..7becd26656 100644 --- a/docs/architecture/rfcs/capable-manager-semantic-handoff-v0.md +++ b/docs/architecture/rfcs/capable-manager-semantic-handoff-v0.md @@ -500,6 +500,14 @@ Stage A replaces the current Todo note; it does not provide immutable historical Qualify worker→worker through this adapter as the concrete second M2 consumer **only after** it consumes the general request/context and emits the shared assessment/result/return relations. A standalone `adopt` success is insufficient. Reuse the Stage A real CLI fixtures for context readback, stale note/revision, lease rejection, unavailable artifacts, ordinary foreign-owner claim rejection, operation replay and uncertain-write recovery. Keep context separate from action/actor/target/revision fields: operational-key collisions and scalar/array roots fail before mutation, with revision/note/owner/receipts unchanged. Add A5/A7/A13–A16 integration cases: a rejected approach plus correction changes receiver planning; historical replay does not prove current ownership; the final conclusion returns without a manager-only dependency. Retiring the old caller requires this evidence and the TS §5 review artifact; no new generic continuation framework is a prerequisite. +### 5.14 Steward adoption of the reusable conversation work surface + +The shared [conversation work surface](intelligent-review-presentation-surfaces-v0.md#88-reusable-conversation-work-surface) owns adaptive reports, truthful event presentation, Turn-scoped stop/steer, reconnect and cross-channel density for all LoopX conversations. This RFC applies those same rules to the steward's owner conversation; it owns recipient selection, receiver assessment and the original-route return. A manager-specific answer format or transport must not become a second presentation authority. + +Routing uses §5.5 rather than a static Agent name list. For a product-design request addressed to the steward, first inspect authorized current Goal, registration, claimed work and fresh session reachability; then rank eligible receivers by responsibility and context, with model/profile fit and actual capacity as separate constraints. Explain the selected recipient or the exact gap. The receiver must acknowledge and assess the full corrected intent, then either work or defer with an owner and condition. The original conversation receives the assessment and final evidenced result through §5.6; the catalog, a stored inbox request and a spinner are three distinct incomplete states. This must pass with a real active worker plus stopped, registered-only, stale and model-mismatched decoys before advertising automatic delegation. + +Delivery order is: (1) qualify the reusable report, activity and stop/steer surface in Chat, frontend and Lark; (2) add context-affine steward selection through the existing collaboration owner; (3) prove one original-conversation request through real receiver assessment, work and final return. These are independently reviewable slices; the steward product claim waits for the third. Characterize and retire duplicated answer-shape prose and message/Turn correlation rules where parity is proven. + ## 6. Alternatives and disposition of #4306 - **Choose normal runtime tools + LoopX semantic state.** It preserves agent flexibility and reuses existing tooling. Its cost is real host-profile qualification and clear private/shared-scope isolation. @@ -568,6 +576,10 @@ The following IDs are durable acceptance anchors for engineering Todos and PRs. | A18 | Old session stays live or returns; concurrent replacement, cancellation and a late correction | Make the stale executor actually attempt a conflicting Core and external effect after replacement: reject at the owning enforceable boundary, or withhold replacement execution where fencing is failed/unsupported. Reconcile already submitted effects; test late return/correction/cancellation and read back current binding/claim; no duplicate effect or false cancellation | | A19 | Decision-gap recall with same-Agent replacement versus another Agent; disabled provider, stale index, timeout and zero hits | Stage 1 never auto-calls; Stage 2 requires qualified admission/readback. Reject out-of-scope returned rows; another Agent receives only explicitly authorized source-authored context, not raw private provider hits or archive access. No source impersonation; zero hits preserve unknown; no-provider continuation works; revalidate historical facts | | A20 | Context compaction and bounded projection omit a material rejected approach or unresolved question | Coverage exposes the omission; authorized drill-down restores required context or records a real gap; no unbounded TurnEnvelope, lost obligation or false completed handoff; frontend/Lark/CLI show the same actual restoration and result | +| A21 | Short question and long evidence-rich investigation through owner Chat and Lark | The short answer is direct; the long answer has a readable conclusion, preserved full Markdown report, source/version links and bounded gaps. Frontend rendering treats model HTML as inert; Lark does not truncate away the conclusion or silently lose the report. Neither answer requires identical boilerplate sections | +| A22 | Tool/progress events, reconnect, SSE replay and delayed final answer | The current phase and only host-emitted public activity are visible; replay deduplicates by event identity, keeps the complete final answer and does not restart the Turn. Failures and absent activity remain truthful | +| A23 | Stop and steer an active Turn; stale button, duplicate ingress, completion race and unsupported adapter | Stop affects only the selected Turn and reports the actual outcome. Steering is received in that Turn or explicitly queued with a receipt; no correction silently disappears, later Turn stops, duplicate model run or worker cancellation | +| A24 | Steward routes a product request to a responsible active Agent amid stopped, registered-only, stale and model-mismatched decoys | Fresh responsibility, authorization, runtime reachability, capacity and profile fit determine the recipient; receiver assessment, work and final evidenced conclusion return once to the original frontend/Lark conversation. Catalog discovery and inbox delivery alone fail | Run deterministic transition/compatibility tests, real installed-runtime qualification, then real frontend/Lark roundtrips with synthetic safe tasks and an authorized private canary. Record runtime/source versions and emitted receipts. Include mobile Lark and packaged frontend render/readback; backend tests alone do not pass A10. Provider receipt ambiguity and offline failure cases are required, not optional happy-path add-ons. diff --git a/docs/architecture/rfcs/capable-manager-semantic-handoff-v0.zh-CN.md b/docs/architecture/rfcs/capable-manager-semantic-handoff-v0.zh-CN.md index 00a0904cfe..8fa9d3215c 100644 --- a/docs/architecture/rfcs/capable-manager-semantic-handoff-v0.zh-CN.md +++ b/docs/architecture/rfcs/capable-manager-semantic-handoff-v0.zh-CN.md @@ -465,6 +465,14 @@ Stage A 替换当前 Todo note,不提供不可变历史版本或私有 memory 只有此 adapter 消费通用 request/context,并产生共享 assessment/result/return 关系后,才把 worker→worker 计为 M2 的真实第二消费者;单独 `adopt` 成功不够。复用 Stage A 真实 CLI 用例:context 读回、过期 note/revision、lease 拒绝、工件不可用、普通 foreign-owner claim 拒绝、operation replay、不确定写入恢复。context 与 action/actor/target/revision 必须分离;operational-key collision、scalar/array root 在 mutation 前失败,revision/note/owner/receipts 不变。追加 A5/A7/A13–A16 整合用例:失败方案与后续纠正确实影响接收方规划,历史 replay 不冒充当前所有权,最终结论不依赖管家专用路径也能回传。旧 caller 退役需要这些证据及 TS §5 审阅工件;不以前置建设新通用 continuation framework 才能推进。 +### 5.14 管家接入可复用的对话工作界面 + +共用的[对话工作界面](intelligent-review-presentation-surfaces-v0.zh-CN.md#88-可复用的对话工作界面)拥有适应问题的报告、真实事件展示、Turn 级停止/纠偏、重连与跨渠道展示密度,适用于所有 LoopX 对话。本文将同一规则接入管家与主人的对话,负责接收者选择、评估及原路回传。管家专属的回答模板或传输方式不应成为第二套展示权威。 + +路由沿用 §5.5,而非固定 Agent 名单。管家收到产品设计请求时,先查看获授权的当前 Goal、注册、已认领工作及新鲜的 session 可达性;再按职责与上下文选择合格接收者,单独约束模型/profile 适配和实际容量。说明选择理由或真实缺口。接收者要确认、评估包含历史修正的完整意图,随后执行或明确延期条件和负责人。通过 §5.6 将评估与有证据的最终结果送回原对话;候选列表、已存入收件箱、正在处理是三种不同的未完成状态。对真实活跃 worker 与已停止、仅注册、过期、模型不适配的干扰候选都验收后,才能宣传自动委派。 + +交付顺序:(1)在 Chat、前端和飞书验收可复用的报告、活动与停止/纠偏界面;(2)通过现有 collaboration owner 做好管家的上下文亲和选择;(3)让同一原始对话经过真实接收方评估、执行与最终回传。各阶段可独立审阅,管家产品主张要等第三阶段。等价行为刻画通过后,消除重复的回答格式说明和消息/Turn 归属规则。 + ## 6. 备选与 #4306 裁决 - **选择普通 runtime 工具 + LoopX 语义状态。** 保留 Agent 的灵活性,复用成熟工具;代价是要真实验收主机 profile 和私人/共享受众隔离。 @@ -533,6 +541,10 @@ M0 盘点真实字段和 producer;以下是迁移验收底线,不代表已 | A18 | 旧 session 仍活跃或后来恢复;并发替换、取消和迟到纠正 | 替换后让旧执行者真实尝试冲突 Core 及外部效果:在所属可强制边界拒绝;若 fencing 失败/不支持,则不得启动替换者的冲突执行。对账已提交效果,覆盖迟到恢复/纠正/取消,读回 binding/claim;不重复效果、不误报取消 | | A19 | 同 Agent 替换与跨 Agent 的决策缺口召回;provider 关闭、索引旧、超时、零命中 | Stage 1 不自动调用;Stage 2 需已验收准入/读回;越 scope 返回行拒绝。另一 Agent 只收明确授权的来源撰写上下文,不收原始私有 provider 命中或 archive 权限。不冒充来源;零命中保留未知;无 provider 续接可用;采用历史事实前重核 | | A20 | 压缩和有界投影遗漏重要否决路线或未结问题 | 覆盖说明暴露遗漏;有权限下钻恢复必要上下文或记录真实缺口;不无限放大 TurnEnvelope、不丢义务、不误报交接完成;前端/飞书/CLI 展示同一真实恢复和结果 | +| A21 | 主人通过 Chat 和飞书分别提出简单问题、长篇取证问题 | 简单回答直接;长篇回答含可读结论、完整 Markdown 报告、来源/版本链接和有界缺口。前端将模型 HTML 视为惰性文本;飞书不截断结论或悄悄丢掉报告。两类回答不强制套同一段落模板 | +| A22 | 工具/进度事件、重连、SSE 重放与延迟的最终答复 | 当前阶段和宿主真实公开活动可见;按事件身份去重,保留完整最终答复,不重启 Turn;失败与没有可显示活动均如实呈现 | +| A23 | 中断和纠偏活跃 Turn;旧按钮、重复入口、完成竞态及不支持的 adapter | 停止只影响指定 Turn 并回报真实结果;纠偏进入本轮或有回执地排入后续回合;不发生无声丢失、停止后续 Turn、重复模型执行或误停 worker | +| A24 | 管家在已停止、仅注册、过期、模型不适配的干扰候选中,将产品请求路由到负责的活跃 Agent | 依据新鲜的职责、授权、运行时可达性、容量和 profile 适配选定接收者;其评估、工作和有证据的最终结论恰好一次回到原前端/飞书对话;只有候选发现或收件箱送达不能通过 | 先跑确定性转移/兼容测试,再真实安装 runtime 验证,再用无副作用合成任务和已授权私人 canary 做前端/飞书回环。记录源码/runtime 版本和回执。包含移动端飞书、打包前端渲染/读回;后端单测不等于 A10。provider 送达不确定、离线失败必须验,不只有成功路径。 diff --git a/docs/architecture/rfcs/intelligent-review-presentation-surfaces-v0.md b/docs/architecture/rfcs/intelligent-review-presentation-surfaces-v0.md index 694236b92d..f30631822d 100644 --- a/docs/architecture/rfcs/intelligent-review-presentation-surfaces-v0.md +++ b/docs/architecture/rfcs/intelligent-review-presentation-surfaces-v0.md @@ -685,6 +685,46 @@ Draft presentation slice, not a shipped team stream or new scheduling authority. Its L1–L3 plan and V1–V7 acceptance extend this RFC's Stage 3 presentation journey; they do not close cross-channel or governed settlement acceptance here. +### 8.8 Reusable conversation work surface + +Steward Chat, Goal Chat, direct Agent conversations and their frontend/Lark +projections share one interaction pattern. A short factual question deserves a +direct answer and source; a complex investigation deserves a leading conclusion, +readable Markdown report, evidence links, decisions and bounded uncertainty. +Answer shape follows the task, not a compulsory four-section template. Complete +answer bytes and a separately addressable report reference are preserved when +the existing artifact owner supports one. Render model Markdown with an admitted +safe subset; executable HTML is never accepted from answer text. Channel limits +may change the presentation density, but cannot silently remove the conclusion +or evidence path. A report attachment alone does not settle an answer obligation. + +Project only real host events into a compact current-phase line and expandable +history: accepted, queued, started, tool/public progress, waiting, interrupted, +failed and completed. The final answer has priority; completed routine activity +folds, while refusal, missing result and lost receiver remain visible. Preserve +source message, admitted Turn, current continuation owner, event cursor and +final-result identities separately. Reconnect and replay must neither start a +second model Turn nor duplicate events or drop the final result. No adapter may +claim tool activity it did not emit. + +Stop and correction bind the current session and Turn. An old control cannot +affect a later Turn. Stop readback distinguishes actual interruption, already +terminal and unsupported/refused. A busy correction is accepted as native +in-Turn steering or explicitly queued for a later Turn with a recoverable ingress +receipt; completion races and lost acknowledgements cannot silently discard it. +Stopping a conversation Turn has no implicit effect on a delegated worker's +Todo/lease or an outstanding return obligation. Frontend and Lark qualify the +same identity, interruption, replay and audience-isolation cases at their own +display densities. This shared contract reuses Chat/session, artifact, and +presentation owners; it creates no second conversation store or scheduler. + +Botmux is an interaction reference: its [live card](https://github.com/deepcoldy/botmux/blob/982e2c9f16e4f45ae2581967bc1a35a286e7bfa2/docs-site/docs/zh/cards.md) +keeps final text ahead of collapsible recorded activity, its [session model](https://github.com/deepcoldy/botmux/blob/982e2c9f16e4f45ae2581967bc1a35a286e7bfa2/docs-site/docs/zh/session-model.md) +distinguishes talk and operation rights, and its [Codex steering study](https://github.com/deepcoldy/botmux/blob/982e2c9f16e4f45ae2581967bc1a35a286e7bfa2/docs/design/2026-05-28-codex-type-ahead-steer-design.md) +records merged versus separate replies under type-ahead. Stop support varies by +backend. These public sources guide the race and display cases; they do not +qualify LoopX adapters or require installing Botmux on an existing Lark token. + ## 9. Coverage across the long-horizon lifecycle | Phase | Intelligent surface responsibility | diff --git a/docs/architecture/rfcs/intelligent-review-presentation-surfaces-v0.zh-CN.md b/docs/architecture/rfcs/intelligent-review-presentation-surfaces-v0.zh-CN.md index 30d56c5a1e..aad9063874 100644 --- a/docs/architecture/rfcs/intelligent-review-presentation-surfaces-v0.zh-CN.md +++ b/docs/architecture/rfcs/intelligent-review-presentation-surfaces-v0.zh-CN.md @@ -560,6 +560,16 @@ Adaptive policy 必须 inspectable、resettable,其输出携带 reason codes 展示切片,不是已交付的团队流,也不新增调度权限。其 L1–L3 计划与 V1–V7 验收 展开本 RFC Stage 3 的展示旅程,不关闭本文跨渠道或受治理 settlement 验收。 +### 8.8 可复用的对话工作界面 + +管家 Chat、Goal Chat、直接 Agent 对话及其前端/飞书投影,共用一种交互方式。简单事实问题直接回答并给来源;复杂调查给出先行结论、可读 Markdown 报告、证据链接、判断和有界的不确定性。回答结构适应任务,不强制四段模板。保存完整答复;现有工件 owner 支持时提供可独立打开的报告引用。仅以受控安全子集渲染模型 Markdown,不把答复中的 HTML 当可执行内容。渠道长度限制可以调整密度,不能无声删掉结论或证据入口。只有附件不能结清答复义务。 + +把宿主真实事件投影成紧凑的当前阶段和可展开历史:已接受、排队、开始、工具/公开进度、等待、中断、失败、完成。最终答复优先;完成的日常过程收起,拒绝、无结果、接收方失联保持可见。分别保留来源消息、已准入 Turn、当前续接 owner、事件游标和最终结果身份。重连及重放不能启动第二次模型 Turn、重复事件或丢失最终结果;adapter 未发出的工具活动不能臆造。 + +停止和修正绑定当前 session 与 Turn,旧控件不能影响后来的 Turn。停止读回区分真实中断、已经结束、不支持或拒绝。忙时修正要么作为本轮原生 steering 接收,要么带可恢复入口回执明确排入后续回合;完成竞态与丢失 ACK 不能使它无声消失。停止对话 Turn 不隐式影响被委派 worker 的 Todo/lease 或待回传义务。前端与飞书以各自展示密度验收同一身份、中断、重放及受众隔离用例。此共用合同复用 Chat/session、工件和展示 owner,不新增第二套对话存储或调度器。 + +Botmux 是交互参考:[实时卡片](https://github.com/deepcoldy/botmux/blob/982e2c9f16e4f45ae2581967bc1a35a286e7bfa2/docs-site/docs/zh/cards.md)优先保留最终答复、折叠真实过程;[会话模型](https://github.com/deepcoldy/botmux/blob/982e2c9f16e4f45ae2581967bc1a35a286e7bfa2/docs-site/docs/zh/session-model.md)区分对话权与操作权;[Codex 纠偏研究](https://github.com/deepcoldy/botmux/blob/982e2c9f16e4f45ae2581967bc1a35a286e7bfa2/docs/design/2026-05-28-codex-type-ahead-steer-design.md)记录忙时消息会合并或分开回复。停止能力因后端而异。这些公开来源指导竞态和展示验收,不能替代 LoopX adapter 的真实资格,也不要求把 Botmux 装到已有飞书 token 上。 + ## 9. 覆盖长程工作的完整生命周期 | 阶段 | 智能化界面的职责 | diff --git a/docs/architecture/rfcs/loopx-overall-roadmap-v0.md b/docs/architecture/rfcs/loopx-overall-roadmap-v0.md index b3575ab2a0..b69ef61bc0 100644 --- a/docs/architecture/rfcs/loopx-overall-roadmap-v0.md +++ b/docs/architecture/rfcs/loopx-overall-roadmap-v0.md @@ -339,6 +339,15 @@ requests, coalesced inputs, interrupted/no-answer members and result-commit vers notification restart races before residency optimization. These are proposed acceptance refinements, not new runtime guarantees or changes to G1–G4 gates. +The next reusable conversation checkpoint, with the steward as first adopter, is the original conversation itself: a +question receives a proportionate, readable result; genuine work events remain +inspectable; stop and correction affect the right Turn; a substantive request +reaches a context-affine active Agent; and its assessed, evidenced conclusion +returns to that same frontend or Lark audience. The [presentation RFC §8.8](intelligent-review-presentation-surfaces-v0.md#88-reusable-conversation-work-surface) owns the shared interaction; [manager RFC §5.14](capable-manager-semantic-handoff-v0.md#514-steward-adoption-of-the-reusable-conversation-work-surface) owns the steward adoption and A21–A24 journey. Deliver it through the existing +Chat, session, collaboration and presentation owners as R2/R3 integration work. +Do not call a candidate catalog, spinner or queued inbox receipt a completed +worker handoff. This checkpoint does not lower R1–R3 or G1 gates. + ### Collaboration and Handoff Between LoopX Agents Participants are long-running LoopX Agents with their own goals, commitments, frontiers and execution bindings, not merely temporary subtasks inside the steward process. Manager→worker and worker→worker share one collaboration contract. Workers can request help, provide results, challenge dependencies and propose replanning without asking the steward to relay every message. The steward owns overall progress and synthesis, not a serial transit point for every message or commit. diff --git a/docs/architecture/rfcs/loopx-overall-roadmap-v0.zh-CN.md b/docs/architecture/rfcs/loopx-overall-roadmap-v0.zh-CN.md index 0d0d388605..298aa45125 100644 --- a/docs/architecture/rfcs/loopx-overall-roadmap-v0.zh-CN.md +++ b/docs/architecture/rfcs/loopx-overall-roadmap-v0.zh-CN.md @@ -313,6 +313,8 @@ phase。先让本地/云端 managed 工作通过同一 governed Turn 合同, R2 的一条依赖必须通过真实 LoopX Agent 间的请求/产物交接完成;这是 P0 小团队退出门槛,不能推迟到百 Agent 阶段。R3 补齐通用 peer 协作、持久返回和恢复迁移;R4/R6 再资格化有 lease 与跨主机转移。所有阶段禁止循环等待无人发现:依赖环、拒绝、超时与失效输入需成为管家可见阻塞,沿已有 replan owner 求解,不能另建全局调度器。前端与 Lark 应显示请求→采纳→工作→产物→验收→回报的关系和当前阻塞,不能只显示 Agent 在线数或消息历史。 +下一项可复用的对话检查点以管家为首个接入者,聚焦原始对话:问题得到相称、可读的结果,真实工作事件可查;停止和纠偏作用于正确的 Turn;实质请求到达上下文最合适的活跃 Agent;其评估和有证据的结论返回同一个前端或飞书受众。[展示 RFC §8.8](intelligent-review-presentation-surfaces-v0.zh-CN.md#88-可复用的对话工作界面)拥有共用交互;[管家 RFC §5.14](capable-manager-semantic-handoff-v0.zh-CN.md#514-管家接入可复用的对话工作界面)拥有管家接入与 A21–A24 旅程。沿既有 Chat、session、collaboration、presentation owner 作为 R2/R3 集成推进。候选列表、转圈提示、已排队的收件箱回执均不等于完成 worker 交接;该检查点不降低 R1–R3 或 G1 门槛。 + ## 6. 核心交付路径:R1–R7 执行卡 | 卡 | 优先级 / 可验收结果 | 硬前置 | 可同时推进但无需等待 | From a2995a68b3fa0ccce99470d427a0c55f1198c16c Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Thu, 24 Sep 2026 18:58:57 +0800 Subject: [PATCH 10/76] feat(chat): expose real turn activity and scoped interruption Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- apps/presentation/dashboard/src/data/chat.ts | 9 ++- .../personal-workspace/channel-timeline.tsx | 46 +++++++++++-- .../personal-workspace-model.ts | 3 + .../personal-workspace-page.tsx | 8 ++- .../personal-workspace/personal-workspace.css | 12 ++++ .../dashboard/src/views/dashboard-page.tsx | 64 +++++++++++++------ 6 files changed, 113 insertions(+), 29 deletions(-) diff --git a/apps/presentation/dashboard/src/data/chat.ts b/apps/presentation/dashboard/src/data/chat.ts index a0403790c2..bbb321cb27 100644 --- a/apps/presentation/dashboard/src/data/chat.ts +++ b/apps/presentation/dashboard/src/data/chat.ts @@ -876,10 +876,14 @@ export async function streamChatTurn( } export async function interruptChatTurn(sessionId: string, turnId: string) { - return requestJson<{ ok: true; session_id: string; turn_id: string; status: string }>( + const receipt = await requestJson<{ ok: true; session_id: string; turn_id: string; status: string }>( `/api/chat/sessions/${sessionId}/turns/${turnId}/interrupt`, { method: "POST", body: "{}" }, ); + if (receipt.ok !== true || receipt.session_id !== sessionId || receipt.turn_id !== turnId) { + throw new ChatApiError("中断回执与本次请求不一致,请刷新后查看。", { error_code: "interrupt_receipt_mismatch" }); + } + return receipt; } export type LoopXModeSnapshot = { @@ -1007,7 +1011,8 @@ async function receiveChatTurnStreaming( options.onDelta?.(String(event.payload.text ?? "")); } if (event.kind === "agent.phase") { - options.onActivity?.(String(event.payload.label ?? "Agent 正在处理")); + const label = typeof event.payload.label === "string" ? event.payload.label.trim() : ""; + if (label) options.onActivity?.(label); } if (event.kind === "turn.completed") { finalResponse = event.payload.response; diff --git a/apps/presentation/dashboard/src/features/personal-workspace/channel-timeline.tsx b/apps/presentation/dashboard/src/features/personal-workspace/channel-timeline.tsx index 4bae190b7c..faaff69f53 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/channel-timeline.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/channel-timeline.tsx @@ -1,6 +1,6 @@ -import {Fragment} from "react"; +import {Fragment, useState} from "react"; import { CollaborationCard } from "./collaboration-card"; -import { Activity, Bot, Sparkles } from "lucide-react"; +import { Activity, Bot, Sparkles, Square } from "lucide-react"; import { AttentionRow } from "./cards/attention-row"; import { MarkdownText } from "./markdown"; @@ -10,7 +10,39 @@ import { ScheduleRow } from "./cards/schedule-row"; import { useWorkspaceI18n } from "./i18n"; import { ReturnDeliveryStatus } from "./return-delivery-status"; import {ManagerTeamResult} from "./manager-team-result"; -import type { WorkspaceDrawerSelection, WorkspaceGoal, WorkspaceTimelineItem } from "./personal-workspace-model"; +import type { WorkspaceDrawerSelection, WorkspaceGoal, WorkspaceMessage, WorkspaceTimelineItem } from "./personal-workspace-model"; + +function MessageActivity({ message, onInterruptTurn }: { + message: WorkspaceMessage; + onInterruptTurn?: (turnId: string) => Promise; +}) { + const { locale, t } = useWorkspaceI18n(); + const zh = locale === "zh-CN"; + const [stopping, setStopping] = useState(false); + const [error, setError] = useState(null); + const activity = message.activity ?? []; + async function interrupt() { + if (!message.sourceTurnId || !onInterruptTurn || stopping) return; + setStopping(true); + setError(null); + try { await onInterruptTurn(message.sourceTurnId); } + catch (cause) { setError(cause instanceof Error ? cause.message : (zh ? "中断失败,请重试。" : "Could not interrupt. Try again.")); } + finally { setStopping(false); } + } + return
+ {message.pending ?
+ {activity.at(-1) || t("timeline.pending")} + {message.sourceTurnId && onInterruptTurn ? : null} +
: null} + {activity.length ?
+ {zh ? "最近活动" : "Recent activity"}{activity.length} +
    {activity.map((label, index) =>
  1. {label}
  2. )}
+
: null} + {message.pending && error ?

{error}

: null} +
; +} export function ChannelTimeline({ items, @@ -18,12 +50,14 @@ export function ChannelTimeline({ selectedGoal, showManagerTeamResults = false, onOpenGoalEvidence, + onInterruptTurn, }: { items: WorkspaceTimelineItem[]; onSelect: (selection: WorkspaceDrawerSelection) => void; selectedGoal: WorkspaceGoal | null; showManagerTeamResults?: boolean; onOpenGoalEvidence?: (goalId: string) => void; + onInterruptTurn?: (turnId: string) => Promise; }) { const { locale, t } = useWorkspaceI18n(); if (items.length === 0) { @@ -41,7 +75,7 @@ export function ChannelTimeline({ || (item.kind === "proposal" && ["applied", "stale", "error", "gated"].includes(item.proposal.status)) || (item.kind === "run" && item.run.status === "completed")); const liveAnnouncement = latestAnnounceable?.kind === "message" - ? `${latestAnnounceable.message.agentLabel ?? t("header.manager")}:${latestAnnounceable.message.pending ? t("timeline.pending") : latestAnnounceable.message.text}` + ? `${latestAnnounceable.message.agentLabel ?? t("header.manager")}:${latestAnnounceable.message.pending ? latestAnnounceable.message.activity?.at(-1) || t("timeline.pending") : latestAnnounceable.message.text}` : latestAnnounceable?.kind === "proposal" ? `${latestAnnounceable.proposal.title}:${latestAnnounceable.proposal.status}` : latestAnnounceable?.kind === "run" @@ -99,8 +133,8 @@ export function ChannelTimeline({
{item.message.role === "user" ? t("common.you") : item.message.agentLabel ?? t("header.manager")}{item.message.time ? : null}
{item.message.attachments?.length ?
{item.message.attachments.map((attachment) => {attachment.name})}
: null} - {item.message.role === "user" ?

{item.message.text}

: } - {item.message.pending ? {t("timeline.pending")} : null} + {item.message.role === "user" ?

{item.message.text}

: item.message.text ? : null} + {item.message.role !== "user" && (item.message.pending || item.message.activity?.length) ? : null}
diff --git a/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace-model.ts b/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace-model.ts index b194167595..d06fc9bf16 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace-model.ts +++ b/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace-model.ts @@ -260,6 +260,7 @@ export type WorkspaceActionPreview = { }; export type WorkspaceMessage = { + activity?: string[]; collaboration?: CollaborationReadback; agentLabel?: string; attachments?: WorkspaceImageAttachment[]; @@ -267,6 +268,7 @@ export type WorkspaceMessage = { pending?: boolean; returnDelivery?: WorkspaceReturnDelivery; role: "assistant" | "user" | "system"; + sourceTurnId?: string; text: string; time?: string; }; @@ -389,6 +391,7 @@ export type PersonalWorkspaceCallbacks = { onExplainDecision?: (attention: WorkspaceAttention) => void | Promise; onExportOutput?: (output: WorkspaceOutput) => void | Promise; onInterruptRun?: (run: WorkspaceRun) => void | Promise; + onInterruptConversationTurn?: (contextId: string, turnId: string) => Promise; onOpenGoal?: (goalId: string) => void | Promise; onOpenGoalView?: (tab: WorkspaceGoalTab) => void; onOpenRunSession?: (run: WorkspaceRun) => void | Promise; diff --git a/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace-page.tsx b/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace-page.tsx index 80ea58cf9a..ced71b3aab 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace-page.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace-page.tsx @@ -2039,13 +2039,19 @@ export function PersonalWorkspacePage({ run={activeSessionRun} /> ) : null} - + callbacks.onInterruptConversationTurn!(selectedGoal.goalId, turnId) + : undefined} /> ), }} /> ) : !managerChatOpen ? ( void callbacks.onRefresh?.()} onSelectGoal={selectGoal} systemHealth={model.systemHealth} /> ) : ( callbacks.onInterruptConversationTurn!("manager", turnId) + : undefined} onOpenGoalEvidence={(goalId) => { selectGoal(goalId); openGoalConversation(); }} /> )}
diff --git a/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace.css b/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace.css index d759b8335e..af98bc53db 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace.css +++ b/apps/presentation/dashboard/src/features/personal-workspace/personal-workspace.css @@ -322,6 +322,18 @@ .personal-message time { color: var(--pw-faint); font-size: 10px; } .personal-message p { margin: 6px 0 0; white-space: pre-wrap; line-height: 1.7; font-size: 13.5px; } .personal-message-pending { color: var(--pw-muted); font-size: 11px; } +.personal-message-work { margin-top: 8px; } +.personal-message-work-current { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 8px 16px; } +.personal-message-work-current .personal-message-pending { font-size: 13px; line-height: 1.5; } +.personal-message-work-current button { display: inline-flex; align-items: center; gap: 6px; min-height: 36px; padding: 6px 10px; border: 1px solid var(--pw-line-strong); border-radius: 6px; font-size: 12px; color: var(--pw-text); background: var(--pw-card); cursor: pointer; } +.personal-message-work-current button:disabled { opacity: .6; cursor: wait; } +.personal-message-work-current button:focus-visible, .personal-message-activity summary:focus-visible { outline: 2px solid var(--pw-blue-ink); outline-offset: 3px; } +.personal-message-activity { color: var(--pw-muted); font-size: 12px; } +.personal-message-activity summary { cursor: pointer; padding: 8px 0; width: fit-content; } +.personal-message-activity summary span { margin-left: 6px; font-variant-numeric: tabular-nums; } +.personal-message-activity ol { margin: 0; padding: 0 0 4px 20px; list-style: decimal; } +.personal-message-activity li { display: list-item; margin: 4px 0; overflow-wrap: anywhere; } +.personal-message-work .personal-message-work-error { color: var(--pw-red); font-size: 12px; } .personal-return-delivery { display: inline-block; margin-top: 7px; color: var(--pw-muted); font-size: 11px; font-weight: 600; } .personal-return-delivery.is-delivered { color: var(--pw-green); } .personal-return-delivery.is-verification_required { color: var(--pw-blue-ink); } diff --git a/apps/presentation/dashboard/src/views/dashboard-page.tsx b/apps/presentation/dashboard/src/views/dashboard-page.tsx index 1648679d1d..fbbe68837c 100644 --- a/apps/presentation/dashboard/src/views/dashboard-page.tsx +++ b/apps/presentation/dashboard/src/views/dashboard-page.tsx @@ -1479,7 +1479,7 @@ function PersonalGoalHome({ const newSessionRequired = useRef(new Set()); const activeTurnIds = useRef(new Map()); const streamControllers = useRef(new Map()); - const interruptedContexts = useRef(new Set()); + const interruptedTurnIds = useRef(new Set()); const recoveringTurnKeys = useRef(new Set()); const agentMenuRef = useRef(null); const agentTriggerRef = useRef(null); @@ -1771,6 +1771,7 @@ function PersonalGoalHome({ let streamedText = ""; const streamingMessageId = appendManagerAssistantMessage(targetContextId, { activity: ["正在恢复进行中的 Agent 回合"], + sourceTurnId: activeTurnId, agentLabel: answerIdentityLabel(targetContextId, selectedAgent.label), lines: [], pending: true, @@ -1796,7 +1797,7 @@ function PersonalGoalHome({ ? message : { ...message, - activity: [...new Set([...(message.activity ?? []), label])].slice(-6), + activity: message.activity?.at(-1) === label ? message.activity : [...(message.activity ?? []), label].slice(-6), } ), })); @@ -1839,13 +1840,14 @@ function PersonalGoalHome({ } } catch (error) { if (cancelled) return; + const interrupted = interruptedTurnIds.current.delete(activeTurnId) + || (error instanceof ChatApiError && error.payload.error_code === "turn_interrupted"); updateManagerAssistantMessage(targetContextId, streamingMessageId, { - activity: [], lines: [], pending: false, reconnect: error instanceof ChatApiError && error.payload.reconnectable === true, sourceLabel: "LoopX Chat 本地后端", - text: error instanceof Error ? error.message : "无法恢复进行中的 Agent 回合。", + text: interrupted ? [streamedText.trim(), "已中断。你可以在当前会话继续发送消息。"].filter(Boolean).join("\n\n") : error instanceof Error ? error.message : "无法恢复进行中的 Agent 回合。", }); } finally { recoveringTurnKeys.current.delete(recoveryKey); @@ -2123,6 +2125,8 @@ function PersonalGoalHome({ const sessionKey = `${targetContextId}:${selectedRoute.agentId}`; let streamingMessageId: number | null = null; + let submittedTurnId: string | undefined; + let streamedText = ""; try { let sessionId = targetContextId === "manager" ? sessionIds.current.get(sessionKey) : await prepareGoalConversation(targetContextId, selectedRoute.agentId); if (!sessionId) { @@ -2148,7 +2152,6 @@ function PersonalGoalHome({ }); newSessionRequired.current.delete(sessionKey); } - let streamedText = ""; streamingMessageId = appendManagerAssistantMessage(targetContextId, { activity: [targetContextId === "manager" ? "正在连接管家" : "正在连接 Agent"], agentLabel: answerIdentityLabel(targetContextId, selectedRoute.label), @@ -2183,12 +2186,13 @@ function PersonalGoalHome({ ? message : { ...message, - activity: [...new Set([...(message.activity ?? []), label])].slice(-6), + activity: message.activity?.at(-1) === label ? message.activity : [...(message.activity ?? []), label].slice(-6), } ), })); }, onPhase: (_phase: string, turnId: string) => { + submittedTurnId = turnId; if (streamingMessageId !== null) updateManagerAssistantMessage(targetContextId, streamingMessageId, { sourceTurnId: turnId }); activeTurnIds.current.set(targetContextId, turnId); recordRuntimeBinding(targetContextId, { @@ -2249,7 +2253,8 @@ function PersonalGoalHome({ if (protectedPreview) return protectedPreview; } } catch (error) { - const userInterrupted = interruptedContexts.current.delete(targetContextId) || (Boolean(route?.loopxMode) && error instanceof ChatApiError && error.payload.error_code === "turn_interrupted"); + const userInterrupted = (submittedTurnId && interruptedTurnIds.current.delete(submittedTurnId)) + || (error instanceof ChatApiError && error.payload.error_code === "turn_interrupted"); if (userInterrupted) { const interruptedMessage = { agentLabel: answerIdentityLabel(targetContextId, selectedRoute.label), @@ -2258,7 +2263,7 @@ function PersonalGoalHome({ sourceLabel: targetContextId === "manager" ? `${t("header.manager")}会话` : `${selectedRoute.label} 会话`, - text: "已中断。你可以在当前会话继续发送消息。", + text: [streamedText.trim(), "已中断。你可以在当前会话继续发送消息。"].filter(Boolean).join("\n\n"), }; if (streamingMessageId === null) { appendManagerAssistantMessage(targetContextId, interruptedMessage); @@ -2326,14 +2331,15 @@ function PersonalGoalHome({ const sessionId = run?.sessionId ?? binding?.sessionId ?? sessionIds.current.get(sessionKey); const turnId = run?.turnId ?? binding?.turnId ?? activeTurnIds.current.get(targetContextId); if (!sessionId || !turnId) return; - try { - interruptedContexts.current.add(targetContextId); - await interruptChatTurn(sessionId, turnId); - streamControllers.current.get(targetContextId)?.abort(); - } catch (error) { - interruptedContexts.current.delete(targetContextId); - throw error; - } finally { + const controller = streamControllers.current.get(targetContextId); + const receipt = await interruptChatTurn(sessionId, turnId); + // A completed Turn wins the race. A failed request leaves its stream live. + // Never let a late receipt abort or reset a newer Turn in this context. + if (receipt.status !== "interrupted" || activeTurnIds.current.get(targetContextId) !== turnId) return; + if (controller && streamControllers.current.get(targetContextId) === controller) { + interruptedTurnIds.current.add(turnId); + controller.abort(); + } else { activeTurnIds.current.delete(targetContextId); recordRuntimeBinding(targetContextId, { agentId, @@ -2341,7 +2347,6 @@ function PersonalGoalHome({ sessionId, status: "ready", }); - streamControllers.current.delete(targetContextId); setSendingContextId((current) => current === targetContextId ? null : current); } } @@ -2607,6 +2612,7 @@ function PersonalGoalHome({ id: `message:${message.id}`, kind: "message", message: { + activity: message.activity, agentLabel: message.agentLabel, attachments: message.attachments, id: String(message.id), @@ -2614,7 +2620,8 @@ function PersonalGoalHome({ returnDelivery: message.returnDelivery, collaboration: message.collaboration, role: message.role, - text: message.text || (message.pending ? "Agent 正在处理…" : message.lines.join("\n")), + sourceTurnId: message.sourceTurnId, + text: message.text || (message.pending ? "" : message.lines.join("\n")), }, })), ...(selectedGoal && periodicReport ? [{ @@ -2716,6 +2723,7 @@ function PersonalGoalHome({ let streamedText = ""; const messageId = appendManagerAssistantMessage(run.goalId, { activity: ["正在把纠偏送入原执行 Session"], + sourceTurnId: turnId, agentLabel: run.agentLabel, lines: [], pending: true, @@ -2736,11 +2744,12 @@ function PersonalGoalHome({ text: visibleAgentMessage(streamed.response.message || streamedText.trim()) || `${run.agentLabel} 已完成纠偏。`, }); } catch (error) { - const interrupted = interruptedContexts.current.delete(run.goalId); + const interrupted = interruptedTurnIds.current.delete(turnId) + || (error instanceof ChatApiError && error.payload.error_code === "turn_interrupted"); updateManagerAssistantMessage(run.goalId, messageId, { activity: [], pending: false, - text: interrupted ? "已中断。你可以在当前会话继续发送消息。" : error instanceof Error ? error.message : "纠偏回合失败。", + text: interrupted ? [streamedText.trim(), "已中断。你可以在当前会话继续发送消息。"].filter(Boolean).join("\n\n") : error instanceof Error ? error.message : "纠偏回合失败。", }); } finally { activeTurnIds.current.delete(run.goalId); @@ -2756,6 +2765,21 @@ function PersonalGoalHome({ }, onCloseRunSession: closeManagerSession, onInterruptRun: async (run) => interruptManagerTurn(run), + onInterruptConversationTurn: async (targetContextId, turnId) => { + if (activeTurnIds.current.get(targetContextId) !== turnId) { + throw new Error("该回合已结束或已被新的回合取代,请刷新后查看。"); + } + const binding = runtimeBindings[targetContextId]; + if (!binding?.sessionId || binding.turnId !== turnId) { + throw new Error("当前会话与回合不匹配,请刷新后查看。"); + } + await interruptManagerTurn({ + agentId: binding.agentId, + goalId: targetContextId, + sessionId: binding.sessionId, + turnId, + }); + }, onOpenGoal: openGoalChat, onOpenRunSession: async (run) => { if (!run.sessionId) return; From 102589025d25d2e54eb3697852e7a78c9445a0c5 Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Thu, 24 Sep 2026 19:04:48 +0800 Subject: [PATCH 11/76] Strengthen PR review scope evidence and published conclusions Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- examples/fixtures/pr-review.body.md | 24 +++++ examples/pr-review-command-smoke.py | 27 ++---- .../pr_review_queue/result_check.py | 44 +++++++++ .../pr_review_queue/review_body.py | 96 +++++++++++++++++++ .../pr_review_queue/review_contract.py | 59 ++++++++---- loopx/pr_review.py | 44 +++------ tests/capabilities/test_pr_review_behavior.py | 33 +++++++ tests/capabilities/test_pr_review_body.py | 71 ++++++++++++++ .../test_pr_review_result_check.py | 84 ++++++++++++++++ tests/test_pr_review_github_scan.py | 25 +++-- 10 files changed, 428 insertions(+), 79 deletions(-) create mode 100644 examples/fixtures/pr-review.body.md create mode 100644 loopx/capabilities/pr_review_queue/review_body.py create mode 100644 tests/capabilities/test_pr_review_body.py diff --git a/examples/fixtures/pr-review.body.md b/examples/fixtures/pr-review.body.md new file mode 100644 index 0000000000..ea2f8b2eb6 --- /dev/null +++ b/examples/fixtures/pr-review.body.md @@ -0,0 +1,24 @@ + +## 动机 + +这个合成变更修复导出命令把其他任务的结果误当作当前任务结果的问题。验收目标是只导出请求指定的记录,并让请求者能够读回已写出的内容;增加一个成功状态字段不能证明这个结果。 + +## 改动思路 + +沿用现有记录读取器和序列化入口,在写文件前比较请求的稳定标识与实际记录标识。决定是否允许导出的规则集中在原有导出模块,命令行只负责传参和展示。不存在第二个缓存、后台调度器或手工同步的授权表,因此恢复与错误处理仍由已有调用链负责。 + +## 具体改动 + +### 关键代码讲解 + +导出入口首先解析请求标识,然后调用读取器取得完整记录;匹配函数接收这两项事实,返回允许写入或者明确拒绝的结果。写入器只在匹配成功后执行,命令行从结果中展示输出位置。未找到记录和标识不一致是两个独立分支,均不能产生输出文件。已有的序列化函数继续负责内容格式,调用者不再自己拼接一份简化记录。测试使用真实临时目录通过命令行执行有效、缺失和错配三类输入,并独立读取导出文件,与源记录的必要字段比较。相关文档更新了错误后的修复方法;没有修改权限配置、调度规则或默认启动行为。 + +## 对主干的风险 + +最危险的回归是读取器返回错误记录而导出仍报告成功。普通成功用例无法发现它,因此反例固定请求标识,只替换读取结果,要求在写文件之前拒绝并保留诊断。缺失记录同样不得留下半成品。真实命令行测试验证失败无副作用,成功路径另行读回文件;没有用模拟写入成功替代实际结果。回滚只需恢复原导出模块,不涉及持久化结构迁移。 + +## 我的整体评价 + +这份合成审查覆盖了现有入口、决定边界、失败路径和独立读回,修复范围与问题一致。已验证的证据只支持导出标识隔离,不推导为其他命令也正确。示例结论用于检查评审格式和状态一致性,不能作为任何真实项目的批准或合并授权。 + +English verdict: VERDICT - exact head HEAD_OID; synthetic review fixture only. diff --git a/examples/pr-review-command-smoke.py b/examples/pr-review-command-smoke.py index 5ab4bdecf7..a8a58e87ad 100644 --- a/examples/pr-review-command-smoke.py +++ b/examples/pr-review-command-smoke.py @@ -371,12 +371,7 @@ def fake_run_gh_json(args: list[str], *, cwd: Path | None = None) -> object: "reviews": [ { "state": "APPROVED", - "body": ( - "## 动机\n动机。\n\n## 改动思路\n思路。\n\n" - "## 具体改动\n改动。\n\n## 对主干的风险\n风险。\n\n" - "## 我的整体评价\n通过。\n\n" - f"English verdict: APPROVE at exact head {merge_head}." - ), + "body": (REPO_ROOT / "examples/fixtures/pr-review.body.md").read_text().replace("HEAD_OID", merge_head).replace("VERDICT", "APPROVE"), "author": {"login": "maintainer"}, "commit": {"oid": merge_head}, "submittedAt": "2026-09-09T11:14:01Z", @@ -511,13 +506,7 @@ def approved_open_head( "reviews": [ { "state": review_state, - "body": ( - f"{title}\n\n" - "## 动机\n动机。\n\n## 改动思路\n思路。\n\n" - "## 具体改动\n改动。\n\n## 对主干的风险\n风险。\n\n" - "## 我的整体评价\n通过。\n\n" - f"English verdict: {verdict} at exact head {approval_head}." - ), + "body": title + "\n\n" + (REPO_ROOT / "examples/fixtures/pr-review.body.md").read_text().replace("HEAD_OID", approval_head).replace("VERDICT", verdict), "author": {"login": "maintainer"}, "commit": {"oid": approval_head}, "submittedAt": "2026-09-09T11:14:01Z", @@ -640,7 +629,7 @@ def approved_open_head( assert section["word_hint"], section assert section["agent_instruction"], section assert "quota.py" not in section["agent_instruction"], section - assert all("无最低字数" in section["word_hint"] for section in template["sections"]) + assert all(section["minimum_prose_characters"] > 0 for section in template["sections"]) concrete_change = next( section for section in template["sections"] if section["label"] == "具体改动" ) @@ -1334,11 +1323,11 @@ def approved_open_head( assert "template below is intentionally blank" in markdown, markdown assert "- 推荐阅读顺序:" in markdown, markdown assert "- 五块模板(留空给 agentloop 填写):" in markdown, markdown - assert "动机(按证据需要;无最低字数)" in markdown, markdown - assert "改动思路(按证据需要;无最低字数)" in markdown, markdown - assert "具体改动(按证据需要;无最低字数)" in markdown, markdown - assert "对主干的风险(按证据需要;无最低字数)" in markdown, markdown - assert "我的整体评价(按证据需要;无最低字数)" in markdown, markdown + assert "动机(至少 " in markdown, markdown + assert "改动思路(至少 " in markdown, markdown + assert "具体改动(至少 " in markdown, markdown + assert "对主干的风险(至少 " in markdown, markdown + assert "我的整体评价(至少 " in markdown, markdown assert "main regression risk:" not in markdown, markdown assert "## Combined Review Sequence" in markdown, markdown assert "PR #771" in markdown, markdown diff --git a/loopx/capabilities/pr_review_queue/result_check.py b/loopx/capabilities/pr_review_queue/result_check.py index 1d823a5ca4..c1cb2954da 100644 --- a/loopx/capabilities/pr_review_queue/result_check.py +++ b/loopx/capabilities/pr_review_queue/result_check.py @@ -5,10 +5,12 @@ from .review_contract import ( COMPATIBILITY_ASSESSMENT, + SCOPE_COVERAGE_ASSESSMENT, SEMANTIC_CANDIDATE_DECISIONS, build_review_execution_contract, build_review_plan, ) +from .review_body import check_review_body def _missing(value: object) -> bool: @@ -116,6 +118,39 @@ def _check_compatibility_assessment(blockers: list[str], value: object) -> None: blockers.append(f"{key}:unknown_boundary_cannot_justify_decision") +def _check_scope_coverage(blockers: list[str], value: object) -> None: + key = "observable_semantics:scope_coverage" + contract = SCOPE_COVERAGE_ASSESSMENT + _require_fields(blockers, evidence_id=key, value=value, fields=contract["fields"]) + if not isinstance(value, Mapping): + return + decision = value.get("decision") + if decision not in contract["decision_values"]: + blockers.append(f"{key}:invalid_decision") + if decision in {"overbroad", "not_yet_proven"}: + blockers.append(f"{key}:blocking_decision") + if decision == "not_applicable": + return + _require_fields(blockers, evidence_id=key, value=value, fields=contract["applicable_fields"]) + cases = _require_items(blockers, evidence_id=key, row=value, + requirement={"items_field": "cases", "item_fields": contract["case_fields"]}) + ids = [case.get("case_id") for case in cases] + for case_id in contract["case_ids"]: + if ids.count(case_id) != 1: + blockers.append(f"{key}:missing_or_duplicate_case:{case_id}") + for case in cases: + case_id = case.get("case_id") + status = case.get("status") + if case_id not in contract["case_ids"] or status not in contract["case_statuses"]: + blockers.append(f"{key}:invalid_case") + elif status in {"failed", "unverified"}: + blockers.append(f"{key}:case_not_proven:{case_id}") + elif status == "not_applicable" and _missing(case.get("reason")): + blockers.append(f"{key}:missing_case_reason:{case_id}") + if case_id == "covered_subject" and status != "passed": + blockers.append(f"{key}:covered_subject_not_proven") + + def check_review_result( packet: Mapping[str, Any], result: Mapping[str, Any], @@ -179,6 +214,8 @@ def check_review_result( requirement = requirements[key] if key == "code_volume": _check_compatibility_assessment(blockers, row.get("compatibility_assessment")) + if key == "observable_semantics": + _check_scope_coverage(blockers, row.get("scope_coverage")) if key == "semantic_alignment": decision = row.get("candidate_decision") verdict = row.get("verdict") @@ -269,6 +306,12 @@ def check_review_result( if finding.get("blocking") is True or severity in {"P0", "P1"}: blockers.append("unresolved_blocking_finding") verdict = result.get("verdict") + body = check_review_body(str(result.get("review_body") or ""), + head_oid=str(matches[0].get("head_oid") or ""), + behavior_bearing=applicability.get("behavior_bearing_change") is True) + errors.extend(f"review_body:{reason}" for reason in body["invalid_reasons"]) + if body["verdict"] is not None and body["verdict"] != verdict: + errors.append("review_body:verdict_mismatch") if verdict not in {"APPROVE", "REQUEST_CHANGES"}: errors.append("unsupported_verdict") if verdict == "APPROVE" and blockers: @@ -281,6 +324,7 @@ def check_review_result( "approval_consistent": not errors and not blockers, "errors": sorted(set(errors)), "approval_blockers": sorted(set(blockers)), + "review_body_check": body, "evidence_truth_verified": False, "remote_head_verified": False, "external_writes_performed": False, diff --git a/loopx/capabilities/pr_review_queue/review_body.py b/loopx/capabilities/pr_review_queue/review_body.py new file mode 100644 index 0000000000..9a768ec242 --- /dev/null +++ b/loopx/capabilities/pr_review_queue/review_body.py @@ -0,0 +1,96 @@ +"""Shared publication/readback shape checks; length does not prove review quality.""" + +from __future__ import annotations + +import re +from collections.abc import Iterator +from typing import Any + +REQUIRED_FINAL_SECTIONS = ["动机", "改动思路", "具体改动", "对主干的风险", "我的整体评价"] + + +def review_body_requirements(*, behavior_bearing: bool) -> dict[str, int]: + # Count letters/numbers in explanatory prose, not Markdown, URLs or code. + # Documentation-only fixes need less space than an executable contract. + return dict(zip(REQUIRED_FINAL_SECTIONS, + (40, 80, 180, 120, 60) if behavior_bearing else (20, 30, 50, 30, 20))) + + +def english_review_verdict(body: str) -> str | None: + verdicts = _english_verdicts(body) + return verdicts[0] if len(verdicts) == 1 else None + + +def _english_verdicts(body: str) -> list[str]: + verdicts: list[str] = [] + for line in _visible_lines(body): + match = re.match(r"(?i)^english verdict\s*:\s*(APPROVE|REQUEST_CHANGES)\b", + line.strip().replace("**", "")) + if match: + verdicts.append(match.group(1).upper()) + return verdicts + + +def _visible_lines(body: str) -> Iterator[str]: + fence: str | None = None + for line in body.splitlines(): + stripped = line.strip() + if stripped.startswith(("```", "~~~")): + marker = stripped[:3] + if fence is None: + fence = marker + elif fence == marker: + fence = None + continue + if fence is None: + yield line + + +def _prose_size(lines: list[str]) -> int: + prose = "\n".join(dict.fromkeys(lines)) + prose = re.sub(r"!?\[([^\]]*)\]\([^)]*\)", r"\1", prose) + prose = re.sub(r"https?://\S+|\b[0-9a-fA-F]{40,64}\b", "", prose) + return sum(char.isalnum() for char in prose) + + +def check_review_body(body: str, *, head_oid: str, behavior_bearing: bool) -> dict[str, Any]: + floors = review_body_requirements(behavior_bearing=behavior_bearing) + sections: dict[str, list[str]] = {} + current: str | None = None + section_level = 0 + reasons: list[str] = [] + visible_lines = list(_visible_lines(body)) + for line in visible_lines: + stripped = line.strip() + heading = re.match(r"^(#{1,6})\s+(.+?)\s*#*\s*$", stripped) + if heading: + level, label = len(heading[1]), heading[2] + if label in floors: + if label in sections: + reasons.append(f"duplicate_section:{label}") + sections.setdefault(label, []) + current, section_level = label, level + elif level <= section_level: + current = None + continue + if english_review_verdict(line): + continue + if current and stripped: + sections[current].append(stripped) + sizes = {label: _prose_size(lines) for label, lines in sections.items()} + for label, floor in floors.items(): + if label not in sections: + reasons.append(f"missing_section:{label}") + elif sizes[label] < floor: + reasons.append(f"section_too_short:{label}:{sizes[label]}<{floor}") + if not head_oid or head_oid.casefold() not in "\n".join(visible_lines).casefold(): + reasons.append("missing_exact_head") + verdicts = _english_verdicts(body) + verdict = verdicts[0] if len(verdicts) == 1 else None + if len(verdicts) > 1: + reasons.append("ambiguous_english_verdict") + elif verdict is None: + reasons.append("missing_english_verdict") + return {"valid": not reasons, "invalid_reasons": reasons, + "section_lengths": sizes, "minimum_prose_characters": floors, + "verdict": verdict, "evidence_truth_verified": False} diff --git a/loopx/capabilities/pr_review_queue/review_contract.py b/loopx/capabilities/pr_review_queue/review_contract.py index b7d126764a..de12243f73 100644 --- a/loopx/capabilities/pr_review_queue/review_contract.py +++ b/loopx/capabilities/pr_review_queue/review_contract.py @@ -4,8 +4,10 @@ from copy import deepcopy from typing import Any +from .review_body import REQUIRED_FINAL_SECTIONS, review_body_requirements + # Increment when review requirements change without changing the packet shape. -REVIEW_POLICY_REVISION = 8 +REVIEW_POLICY_REVISION = 9 # One bounded replacement for the former free-text compatibility justification. COMPATIBILITY_ASSESSMENT = { @@ -38,13 +40,30 @@ ), } -REQUIRED_FINAL_SECTIONS = [ - "动机", - "改动思路", - "具体改动", - "对主干的风险", - "我的整体评价", -] +SCOPE_COVERAGE_ASSESSMENT = { + "decision_values": ["not_applicable", "verified", "overbroad", "not_yet_proven"], + "fields": ["decision", "reason"], + "applicable_fields": ["authorized_scope", "scope_source", "enforcement_selector", "recovery_owner", "cases"], + "case_ids": ["covered_subject", "uncovered_same_container", "new_subject_after_activation", + "scope_escape_attempt", "recovery_to_progress"], + "case_fields": ["case_id", "status", "input_and_authority", "expected_outcome", + "observed_outcome", "entrypoint_and_evidence"], + "case_statuses": ["passed", "failed", "unverified", "not_applicable"], + "rule": ( + "For an added, widened or retained gate on the touched caller path, separate authorization " + "to enable it, the subjects it covers, and whether each covered subject is ready/bound. " + "Goal/project activation alone does not prove authority over every current or future item. " + "Establish scope from owner intent or the accepted contract, never from the selector being reviewed. " + "Run covered, uncovered-in-the-same-container and newly-created-subject counterfactuals through " + "the real entrypoint; also test that mutable fields cannot let covered work escape. " + "For explicitly authorized global scope, assert that future subjects are intentionally covered. " + "Trace refusal through its authorized recovery owner to renewed useful work; a blocker receipt, " + "replan ACK or retry recommendation alone is not recovery. Share existing walkthrough/validation " + "references. Each inapplicable case needs a scoped reason. If the boundary contains no gate or " + "coverage decision, use not_applicable plus the inspected path. Retest the opposite failure " + "direction after a bypass or overblocking fix; fixing the latest finding is not whole-PR proof." + ), +} CODE_AREAS = { "product_runtime", @@ -94,16 +113,19 @@ def _review_order( return [str(item.get("path") or "") for item in ranked[:limit] if item.get("path")] -def _section(label: str, word_hint: str, instruction: str) -> dict[str, str]: +def _section(label: str, minimum: int, instruction: str) -> dict[str, Any]: return { "label": label, - "word_hint": word_hint, + "word_hint": f"至少 {minimum} 个正文字符;不含标题、链接地址、代码和重复行", + "minimum_prose_characters": minimum, "content": "", "agent_instruction": instruction, } def build_review_template(item: Mapping[str, Any]) -> dict[str, Any]: + floors = review_body_requirements(behavior_bearing=bool( + set(_as_mapping(item.get("areas"))) & (CODE_AREAS | BEHAVIORAL_POLICY_AREAS))) key_files = [ candidate for candidate in _as_sequence(item.get("key_files")) @@ -115,34 +137,34 @@ def build_review_template(item: Mapping[str, Any]) -> dict[str, Any]: "sections": [ _section( "动机", - "按证据需要;无最低字数", + floors["动机"], "Use `problem_context`: verified goal basis, old behavior, before/after outcome and delivery verdict. Distinguish completing the scoped goal from a justified increment; explain why this is a complete useful slice, not just why the code works.", ), _section( "改动思路", - "按证据需要;无最低字数", + floors["改动思路"], "Use `architecture_flow`, `repository_reuse`, and `walkthroughs`: entry point, authoritative state, decision boundary, positive path, existing implementation comparison, and ownership trade-off. For introduced or newly enforced state, explain derivation versus irreducible intent and the real producer/trigger, not just its serializer.", ), _section( "具体改动", - "按证据需要;无最低字数", + floors["具体改动"], "Use `changed_line_classification` and `symbol_map`. Code changes require `### 关键代码讲解` for 2-5 behavior-bearing exact-head symbols; docs-only changes use `### 关键内容讲解`.", ), _section( "对主干的风险", - "按证据需要;无最低字数", + floors["对主干的风险"], "Use `failure_analysis`, `walkthroughs.negative`, and `validation_matrix`; trace each finding from triggering state to observed outcome and minimum repair. When `scope_fit` applies, name the active production caller or explicitly record a coverage-only boundary. When `change_proportionality` applies, compare verified problem impact with mechanism and maintenance cost; a resolved implementation blocker does not justify approval when the full exact-head scope remains disproportionate. For opt-in changes, prove disabled-path parity through `default_off_isolation`; do not infer isolation from an absent feature object. Use `authority_semantics` to verify that public protocol names do not claim a broader actor lifecycle or authority model than the implementation provides. For a `semantic_alignment` contract impact or finding, include a concise `### 语义与 CI 对齐` subsection; ordinary `not_applicable` triage needs no separate subsection. For a blocker, name the current obligation, triggering change, observed evidence, minimum repair and rerun command. Surface typed-state-rule, domain-neutrality, behavior-change-disclosure, and guidance-vs-obligation findings when their evidence applies.", ), _section( "我的整体评价", - "按证据需要;无最低字数", + floors["我的整体评价"], "Use `observable_semantics` to report baseline/head comparisons and remaining compatibility gaps; equal decision codes are insufficient. Use `code_volume` (including its compatibility assessment and bounded simplification decision), `change_proportionality`, `default_off_isolation`, `authority_semantics`, validation results, residual risk, and exact-head freshness to state the verdict and the evidence needed for re-review. For semantic or constraint-related changes, state whether the PR reuses an existing vocabulary, extends one, creates one, stays local, or remains unknown, and link any required registry/RFC/CI repair.", ), ], "review_order": _review_order(key_files), "output_hint": ( "Render the verified structured result using the five sections. " - "The capability-owned review_execution_contract is the evidence and completeness authority. Scale prose to evidence and complexity; simple changes can use one or two sentences per section. Do not repeat evidence or pad to a word count." + "The capability-owned review_execution_contract is the evidence and completeness authority. Save the exact final Markdown in result.review_body before check-result; publish that checked body and read it back. Section floors reject empty shells, not certify reasoning. Explain concrete paths and counterexamples; do not pad or duplicate evidence to meet a floor." ), } @@ -191,7 +213,7 @@ def build_review_execution_contract(*, wait_for_ci: bool = True) -> dict[str, An "Ask what could still be false when the author's tests pass, then probe " "that counterexample through the owning real boundary. Parent exit does " "not prove descendants drained; receipt/hash existence does not prove " - "authentic execution; feature-on success does not prove baseline parity. " + "authentic execution; feature-on success does not prove baseline parity. A gate may prevent bypass and still wrongly capture independent work: prove its enabled-but-out-of-scope and future-subject behavior as well. A recorded blocker is not restored progress. " "If a mock supplies the very postcondition under review, it is not proof. " "Inspect related open/merged changes sharing the contract, not only files " "that conflict textually. Bound the search to shared callers/owners; do " @@ -458,6 +480,7 @@ def build_review_execution_contract(*, wait_for_ci: bool = True) -> dict[str, An }, { "evidence_id": "observable_semantics", + "scope_coverage": SCOPE_COVERAGE_ASSESSMENT, "required_when": "behavior_bearing_change", "verdict_values": [ "equivalent", @@ -475,6 +498,7 @@ def build_review_execution_contract(*, wait_for_ci: bool = True) -> dict[str, An "intentional_deltas", "regression_sensitivity", "state_projection_counterfactuals", + "scope_coverage", "unverified_dimensions", "verdict", ], @@ -1163,6 +1187,7 @@ def build_review_plan(item: Mapping[str, Any]) -> dict[str, Any]: }, "findings": [], "residual_risk": "", + "review_body": "", "verdict": "unverified", }, } diff --git a/loopx/pr_review.py b/loopx/pr_review.py index 29263d0ee8..c6b8110eb6 100644 --- a/loopx/pr_review.py +++ b/loopx/pr_review.py @@ -31,6 +31,11 @@ attach_pr_review_details_concurrently as _attach_pr_review_details_concurrently, ) from .capabilities.pr_review_queue.check_attempts import latest_check_attempts +from .capabilities.pr_review_queue.review_body import ( + check_review_body, + english_review_verdict as _english_review_verdict, +) +from .capabilities.pr_review_queue.review_contract import CODE_AREAS, BEHAVIORAL_POLICY_AREAS from .control_plane.runtime.time import now_utc_iso from .presentation.markdown import as_dict as _as_dict from .presentation.markdown import as_list as _as_list @@ -48,13 +53,6 @@ "GitHub pull request status check rollup", ] -REQUIRED_REVIEW_SECTION_HEADINGS = ( - "动机", - "改动思路", - "具体改动", - "对主干的风险", - "我的整体评价", -) AUTHOR_OWNED_APPROVAL_FALLBACK_TITLE = ( "Approval conclusion (author-owned PR; GitHub blocks formal self-approval)" ) @@ -782,34 +780,11 @@ def _review_ready_timestamp(pr: Mapping[str, Any]) -> datetime | None: ) -def _english_review_verdict(body: str) -> str | None: - for line in body.splitlines(): - normalized = line.strip().replace("**", "") - match = re.match( - r"(?i)^english verdict\s*:\s*(APPROVE|REQUEST_CHANGES)\b", - normalized, - ) - if match: - return match.group(1).upper() - return None - - -def _review_body_has_required_format(body: str, *, head_oid: str) -> bool: - return ( - bool(head_oid) - and head_oid.lower() in body.lower() - and all( - re.search(rf"(?m)^#+\s*{re.escape(heading)}\s*$", body) - for heading in REQUIRED_REVIEW_SECTION_HEADINGS - ) - and _english_review_verdict(body) is not None - ) - - def _review_conclusion( pr: Mapping[str, Any], *, reviewer_login: str | None, + behavior_bearing: bool = True, ) -> dict[str, Any]: head_oid = str(pr.get("headRefOid") or pr.get("head_oid") or "").strip() pr_author = str( @@ -852,8 +827,10 @@ def evaluate(review: Mapping[str, Any]) -> dict[str, Any]: reasons: list[str] = [] if not head_oid or commit_oid.casefold() != head_oid.casefold(): reasons.append("review_not_bound_to_current_head") - if not _review_body_has_required_format(body, head_oid=head_oid): + body_check = check_review_body(body, head_oid=head_oid, behavior_bearing=behavior_bearing) + if not body_check["valid"]: reasons.append("review_body_missing_standalone_bilingual_format") + reasons.extend(f"review_body:{reason}" for reason in body_check["invalid_reasons"]) if author_owned_fallback: expected_title = { "APPROVE": AUTHOR_OWNED_APPROVAL_FALLBACK_TITLE, @@ -952,7 +929,8 @@ def _normalize_pr( if ready_at is not None else 0.0 ) - conclusion = _review_conclusion(pr, reviewer_login=reviewer_login) + conclusion = _review_conclusion(pr, reviewer_login=reviewer_login, + behavior_bearing=bool({item["area"] for item in files} & (CODE_AREAS | BEHAVIORAL_POLICY_AREAS))) item: dict[str, Any] = { "number": number, "title": _redact_text(pr.get("title"), limit=180), diff --git a/tests/capabilities/test_pr_review_behavior.py b/tests/capabilities/test_pr_review_behavior.py index 4f56b4c6d8..da3afb61a6 100644 --- a/tests/capabilities/test_pr_review_behavior.py +++ b/tests/capabilities/test_pr_review_behavior.py @@ -193,6 +193,39 @@ ] CASES.extend(COMPATIBILITY_CASES) +# Scope approval and subject readiness are distinct; refusal is not recovery. +SCOPE_CASES = [ + ( + {"request": "Review an owner-configured acceptance gate after bypass fixes.", + "problem": "The owner enabled checks for two validation jobs in a project containing other independent work.", + "proposal": "On project activation, every existing or future advancement job must have an owner binding. Changing a selected job's role no longer bypasses the gate.", + "evidence": "Selected-job, selected-job recovery and feature-off tests pass. A newly created unrelated job is rejected as unbound even though its ordinary validator passes. No owner instruction authorizes a project-wide contract. Prior review approved the bypass repair."}, + "REQUEST_CHANGES", "architecture", + ), + ( + {"request": "Review an owner-configured acceptance gate after bypass fixes.", + "problem": "The owner enabled checks for two validation jobs in a project containing other independent work.", + "proposal": "The shared gate distinguishes explicit selected-job coverage from binding readiness. Covered unbound jobs stay held even after editable role changes. Unselected jobs retain ordinary admission.", + "evidence": "Real CLI tests cover selected missing binding, existing independent work, a new independent job after activation, role-change escape, and owner repair followed by resumed selected work. Feature-off and ordinary validation remain unchanged; other required evidence is verified."}, + "APPROVE", "none", + ), + ( + {"request": "Review recovery of jobs stranded behind a policy gate.", + "problem": "The accepted outcome is to restore useful work after an overly broad gate captured independent jobs.", + "proposal": "When admission fails, persist a blocker receipt and mark replan complete. Require the same per-job owner binding on every retry.", + "evidence": "The receipt write, replan completion and retry recommendation tests pass. The real job remains rejected after following those steps. No runnable owner route, scope correction or accepted prerequisite boundary is delivered. Author calls this automatic recovery."}, + "REQUEST_CHANGES", "lifecycle", + ), + ( + {"request": "Review a deliberately project-wide owner policy gate and its recovery.", + "problem": "The owner explicitly requires every current and future job in the project to satisfy an approval contract.", + "proposal": "The gate applies to all jobs, including newly created jobs. Unbound jobs fail closed with a repair command owned by the authorized operator.", + "evidence": "Owner intent explicitly covers future work. Real CLI tests prove unbound new work is held, owner correction restores execution, workers cannot change scope, and disabling the optional feature preserves baseline behavior. All other required evidence is verified. Global coverage is deliberate, not inferred from activation."}, + "APPROVE", "none", + ), +] +CASES.extend(SCOPE_CASES) + def test_decision_procedure_is_in_the_real_packet_before_prose(): response = build_agent_response_contract() diff --git a/tests/capabilities/test_pr_review_body.py b/tests/capabilities/test_pr_review_body.py new file mode 100644 index 0000000000..02c5dbac0a --- /dev/null +++ b/tests/capabilities/test_pr_review_body.py @@ -0,0 +1,71 @@ +from pathlib import Path + +import pytest + +from loopx.capabilities.pr_review_queue.review_body import check_review_body + +HEAD = "a" * 40 + + +def review_body(): + return (Path(__file__).parents[2] / "examples/fixtures/pr-review.body.md").read_text().replace( + "HEAD_OID", HEAD).replace("VERDICT", "APPROVE") + + +def test_standalone_body_contains_enough_explanation_but_does_not_certify_truth(): + result = check_review_body(review_body(), head_oid=HEAD, behavior_bearing=True) + assert result["valid"] + assert not result["evidence_truth_verified"] + + +@pytest.mark.parametrize("padding", [ + "很好。\n" * 100, + "[证据](https://example.com/" + "long-path" * 100 + ")", + "```text\n" + "代码不会证明审阅了真实调用路径" * 100 + "\n```", + "## 空标题\n" * 100, +]) +def test_padding_cannot_replace_risk_explanation(padding): + body = review_body() + start, end = body.index("## 对主干的风险"), body.index("## 我的整体评价") + body = body[:start] + "## 对主干的风险\n" + padding + "\n" + body[end:] + result = check_review_body(body, head_oid=HEAD, behavior_bearing=True) + assert not result["valid"] + assert any(reason.startswith("section_too_short:对主干的风险") for reason in result["invalid_reasons"]) + + +def test_headings_inside_code_do_not_count_as_review_sections(): + result = check_review_body("```\n" + review_body() + "\n```", head_oid=HEAD, behavior_bearing=True) + assert "missing_section:具体改动" in result["invalid_reasons"] + + +def test_verdict_and_head_inside_code_do_not_count_as_published_conclusion(): + body = review_body().replace( + f"English verdict: APPROVE - exact head {HEAD}; synthetic review fixture only.", "" + ) + body += f"\n```text\nEnglish verdict: APPROVE - {HEAD}\n```" + result = check_review_body(body, head_oid=HEAD, behavior_bearing=True) + assert "missing_english_verdict" in result["invalid_reasons"] + assert "missing_exact_head" in result["invalid_reasons"] + + +def test_duplicate_sections_are_not_merged_into_a_passing_review(): + result = check_review_body(review_body() + "\n## 动机\n重复。", head_oid=HEAD, behavior_bearing=True) + assert "duplicate_section:动机" in result["invalid_reasons"] + + +def test_multiple_english_verdict_lines_cannot_hide_a_contradiction(): + result = check_review_body(review_body() + "\nEnglish verdict: REQUEST_CHANGES", head_oid=HEAD, + behavior_bearing=True) + assert "ambiguous_english_verdict" in result["invalid_reasons"] + + +def test_docs_can_use_shorter_explanation_than_behavior_changes(): + body = "\n".join(f"## {label}\n{content}" for label, content in [ + ("动机", "文档中的命令参数已失效,用户照着操作无法读取当前配置。"), + ("改动思路", "对照当前发布版本的帮助输出,修正原有示例参数,并删除同页与它冲突的旧说明。"), + ("具体改动", "更新配置读回示例和错误提示说明,使参数名称与实际帮助一致。保留原有配置位置与操作顺序;通过发布包执行示例,检查输出内容能够找到用户刚写入的配置。"), + ("对主干的风险", "此变更仅修改说明文字;主要风险是命令仍不能运行,因此使用实际发布包执行文档示例并验证结果。"), + ("我的整体评价", "命令和读回均已验证,文档修复完成;无需引入新的配置选项。"), + ]) + f"\nEnglish verdict: APPROVE - {HEAD}" + assert check_review_body(body, head_oid=HEAD, behavior_bearing=False)["valid"] + assert not check_review_body(body, head_oid=HEAD, behavior_bearing=True)["valid"] diff --git a/tests/capabilities/test_pr_review_result_check.py b/tests/capabilities/test_pr_review_result_check.py index a8961220c6..1b52cc5930 100644 --- a/tests/capabilities/test_pr_review_result_check.py +++ b/tests/capabilities/test_pr_review_result_check.py @@ -2,6 +2,7 @@ import copy import json +from pathlib import Path import pytest @@ -38,6 +39,9 @@ def _review(*, area="product_runtime"): ) if "verdict_values" in requirement: row["verdict"] = requirement["verdict_values"][0] + if key == "observable_semantics": + row["scope_coverage"] = {"decision": "not_applicable", + "reason": "Synthetic local formatter has no eligibility gate or covered subjects."} if key == "code_volume": row["compatibility_assessment"] = { "decision": "not_applicable", @@ -77,6 +81,7 @@ def _review(*, area="product_runtime"): for field in fields } result["verdict"] = "APPROVE" + result["review_body"] = (Path(__file__).parents[2] / "examples/fixtures/pr-review.body.md").read_text().replace("HEAD_OID", "a" * 40).replace("VERDICT", "APPROVE") return {"pull_requests": [item]}, result @@ -89,6 +94,77 @@ def test_result_check_is_not_semantic_or_merge_authority(): assert not checked["external_writes_performed"] +def _scoped_review(): + packet, result = _review() + coverage = { + "decision": "verified", "reason": "The owner selected one existing job for this gate.", + "authorized_scope": "Only job A; unrelated job B and future job C are excluded.", + "scope_source": "Owner configuration selects the immutable job A id.", + "enforcement_selector": "Shared gate checks coverage before readiness; job A stays held if unbound.", + "recovery_owner": "Owner repairs the selected job binding; worker cannot edit acceptance scope.", + "cases": [ + {"case_id": case_id, "status": "passed", "input_and_authority": source, + "expected_outcome": expected, "observed_outcome": expected, + "entrypoint_and_evidence": "Synthetic real-entrypoint receipt reference for checker fixture."} + for case_id, source, expected in [ + ("covered_subject", "Selected A has no binding", "A is held"), + ("uncovered_same_container", "Existing B is not selected", "B retains baseline admission"), + ("new_subject_after_activation", "Create C after scope activation", "C retains baseline admission"), + ("scope_escape_attempt", "Change A's editable role", "A stays held"), + ("recovery_to_progress", "Owner fixes A's binding", "A resumes through its real command"), + ] + ], + } + result["evidence"]["observable_semantics"]["scope_coverage"] = coverage + return packet, result, coverage + + +def test_enabled_but_uncovered_and_future_subjects_cannot_be_omitted(): + packet, result, coverage = _scoped_review() + assert check_review_result(packet, result)["approval_consistent"] + coverage["cases"] = [case for case in coverage["cases"] if case["case_id"] != "new_subject_after_activation"] + checked = check_review_result(packet, result) + assert "observable_semantics:scope_coverage:missing_or_duplicate_case:new_subject_after_activation" in checked["approval_blockers"] + + +@pytest.mark.parametrize("decision", ["overbroad", "not_yet_proven"]) +def test_correct_implementation_cannot_approve_wrong_or_unproven_scope(decision): + packet, result, coverage = _scoped_review() + coverage["decision"] = decision + assert not check_review_result(packet, result)["approval_consistent"] + + +@pytest.mark.parametrize("status", ["failed", "unverified"]) +def test_blocker_record_without_proven_recovery_cannot_approve(status): + packet, result, coverage = _scoped_review() + coverage["cases"][-1]["status"] = status + coverage["cases"][-1]["observed_outcome"] = "Blocker recorded but the affected work is still rejected." + assert "observable_semantics:scope_coverage:case_not_proven:recovery_to_progress" in check_review_result(packet, result)["approval_blockers"] + + +def test_case_inapplicability_needs_a_reason(): + packet, result, coverage = _scoped_review() + coverage["cases"][-1]["status"] = "not_applicable" + assert not check_review_result(packet, result)["approval_consistent"] + coverage["cases"][-1]["reason"] = "Read-only diagnostic change; recovery is unchanged and outside its accepted outcome." + assert check_review_result(packet, result)["approval_consistent"] + + +def test_verified_scope_needs_a_real_covered_subject(): + packet, result, coverage = _scoped_review() + coverage["cases"][0]["status"] = "not_applicable" + coverage["cases"][0]["reason"] = "No selected job was exercised." + assert "observable_semantics:scope_coverage:covered_subject_not_proven" in check_review_result(packet, result)["approval_blockers"] + + +def test_final_body_cannot_drop_the_risk_explanation_or_change_verdict(): + packet, result = _review() + result["review_body"] = result["review_body"].replace("English verdict: APPROVE", "English verdict: REQUEST_CHANGES") + assert "review_body:verdict_mismatch" in check_review_result(packet, result)["errors"] + result["review_body"] = "" + assert "review_body:missing_section:对主干的风险" in check_review_result(packet, result)["errors"] + + @pytest.mark.parametrize( ("candidate_decision", "verdict", "blocker"), [ @@ -174,6 +250,7 @@ def test_contract_blocker_requires_actionable_repair(verdict: str) -> None: ) assert not check_review_result(packet, result)["approval_consistent"] result["verdict"] = "REQUEST_CHANGES" + result["review_body"] = result["review_body"].replace("English verdict: APPROVE", "English verdict: REQUEST_CHANGES") assert check_review_result(packet, result)["ok"] del row["minimum_repair"] assert "semantic_alignment:missing_field:minimum_repair" in ( @@ -224,6 +301,7 @@ def test_approval_cannot_hide_missing_or_contradictory_evidence(kind): assert not checked["ok"] assert "approval_contradicts_evidence" in checked["errors"] result["verdict"] = "REQUEST_CHANGES" + result["review_body"] = result["review_body"].replace("English verdict: APPROVE", "English verdict: REQUEST_CHANGES") assert check_review_result(packet, result)["ok"] @@ -241,6 +319,7 @@ def test_old_or_invalid_policy_cannot_certify_current_approval(revision): assert "review_policy_revision:stale_or_missing" in checked["approval_blockers"] assert not checked["ok"] result["verdict"] = "REQUEST_CHANGES" + result["review_body"] = result["review_body"].replace("English verdict: APPROVE", "English verdict: REQUEST_CHANGES") assert check_review_result(packet, result)["ok"] @@ -258,6 +337,7 @@ def test_pinned_result_is_rejected_after_installed_policy_bump(monkeypatch): assert "review_policy_revision:stale_or_missing" in checked["approval_blockers"] assert not checked["ok"] result["verdict"] = "REQUEST_CHANGES" + result["review_body"] = result["review_body"].replace("English verdict: APPROVE", "English verdict: REQUEST_CHANGES") assert check_review_result(packet, result)["ok"] @@ -271,6 +351,7 @@ def test_verified_label_and_generic_prose_do_not_replace_rule_ownership(): ) assert not checked["ok"] result["verdict"] = "REQUEST_CHANGES" + result["review_body"] = result["review_body"].replace("English verdict: APPROVE", "English verdict: REQUEST_CHANGES") assert check_review_result(packet, result)["ok"] @@ -293,6 +374,7 @@ def test_generic_prose_cannot_replace_structured_evidence(evidence_id): ) assert "approval_contradicts_evidence" in checked["errors"] result["verdict"] = "REQUEST_CHANGES" + result["review_body"] = result["review_body"].replace("English verdict: APPROVE", "English verdict: REQUEST_CHANGES") assert check_review_result(packet, result)["ok"] @@ -441,6 +523,7 @@ def test_green_review_cannot_approve_unjustified_delivery(area, verdict): assert not checked["approval_consistent"] assert "problem_context:blocking_verdict" in checked["approval_blockers"] result["verdict"] = "REQUEST_CHANGES" + result["review_body"] = result["review_body"].replace("English verdict: APPROVE", "English verdict: REQUEST_CHANGES") assert check_review_result(packet, result)["ok"] @@ -587,6 +670,7 @@ def test_required_simplification_or_material_unknown_cannot_claim_approval(decis assert not checked["approval_consistent"] assert "code_volume:compatibility_assessment:blocking_decision" in checked["approval_blockers"] result["verdict"] = "REQUEST_CHANGES" + result["review_body"] = result["review_body"].replace("English verdict: APPROVE", "English verdict: REQUEST_CHANGES") assert check_review_result(packet, result)["ok"] diff --git a/tests/test_pr_review_github_scan.py b/tests/test_pr_review_github_scan.py index f1b624262b..b2836a323a 100644 --- a/tests/test_pr_review_github_scan.py +++ b/tests/test_pr_review_github_scan.py @@ -452,14 +452,8 @@ def _full_review_body( if verdict == "APPROVE" else "Request changes conclusion (author-owned PR; GitHub blocks formal self-review)" ) + "\n\n" - return ( - f"{fallback}## 动机\n完整动机。\n\n" - "## 改动思路\n完整思路。\n\n" - "## 具体改动\n完整改动。\n\n" - "## 对主干的风险\n完整风险。\n\n" - "## 我的整体评价\n整体通过。\n\n" - f"**English verdict:** {verdict} at exact head {head}." - ) + return fallback + (Path(__file__).parents[1] / "examples/fixtures/pr-review.body.md").read_text().replace("HEAD_OID", head).replace("VERDICT", verdict) + def _merge_ready_pr( @@ -566,12 +560,20 @@ def capture( return capture +@pytest.mark.parametrize("heading_only_review", [False, True]) def test_merge_readiness_cli_qualifies_one_fixture_exact_head( tmp_path: Path, + heading_only_review: bool, ) -> None: fixture_path = tmp_path / "pull-request.json" pull_request = _merge_ready_pr() pull_request["review_thread_summary"] = _complete_review_threads() + if heading_only_review: + pull_request["reviews"][0]["body"] = ( + "\n".join(f"## {label}\n已验证。" for label in + ("动机", "改动思路", "具体改动", "对主干的风险", "我的整体评价")) + + f"\nEnglish verdict: APPROVE - {HEAD_1}" + ) fixture_path.write_text( json.dumps( { @@ -591,8 +593,11 @@ def test_merge_readiness_cli_qualifies_one_fixture_exact_head( print_payload=_capture_payload(out), ) - assert result == 0 - assert out[0]["ready"] is True + assert result == (1 if heading_only_review else 0) + assert out[0]["ready"] is not heading_only_review + if heading_only_review: + assert any("review_body:section_too_short:具体改动" in reason for reason in + out[0]["review_conclusion"]["invalid_reasons"]) assert out[0]["source"] == "fixture" assert out[0]["expected_exact_head"] == f"4110@{HEAD_1}" From 43b65eb8e974a9bb2e5b87ac41e4a85ffd581830 Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Thu, 24 Sep 2026 19:04:56 +0800 Subject: [PATCH 12/76] Document review depth policy and scope self-repair pattern Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- loopx/capabilities/pr_review_queue/README.md | 26 ++++++++++++++++++- skills/loopx-pr-review/SKILL.md | 12 ++++----- .../references/repair-patterns.md | 1 + 3 files changed, 32 insertions(+), 7 deletions(-) diff --git a/loopx/capabilities/pr_review_queue/README.md b/loopx/capabilities/pr_review_queue/README.md index f709ca3a18..ae1098e835 100644 --- a/loopx/capabilities/pr_review_queue/README.md +++ b/loopx/capabilities/pr_review_queue/README.md @@ -50,9 +50,33 @@ or `not_applicable`. A required simplification or material unknown cannot suppor APPROVE; an evidenced non-blocking follow-up can. Unrelated changes need only a scoped not-applicable reason. The checker enforces these declarations, not their truth: real caller inspection and old-data/mixed-version readback still belong -to the reviewer. Policy revision 8 requires fresh evidence rather than relabeling +to the reviewer. Policy revision 9 requires fresh evidence rather than relabeling an older result. It does not add a new wire schema or a new review authority. +Policy revision 9 also requires `observable_semantics.scope_coverage` for +behavior-bearing reviews. First establish whether the touched path owns or +retains a gate; a scoped `not_applicable` reason is sufficient otherwise. For a +gate, distinguish activation authority, covered subjects and binding readiness. +Validate covered work, independent work in the same container, new work after +activation, mutable-field escape and recovery back to useful execution. Global +coverage is valid when explicitly authorized; feature-off parity alone does not +prove enabled-but-out-of-scope isolation. A blocker receipt or replan ACK does +not establish recovery. These are reviewer-executed counterfactuals, not semantic +facts inferred by the checker. + +Save the exact final Markdown in the result's `review_body` before `--check-result`. +The same body validator is used for published review readback and merge readiness. +For behavior-bearing changes, the five sections require respectively 40, 80, +180, 120 and 60 explanatory letters/numbers; reviews without executable or +policy changes use 20, 30, 50, 30 and 20. Headings, code blocks, URL targets, +commit hashes and repeated lines within a section do not count. These modest +floors reject empty shells; they do not prove +correct reasoning or replace evidence. Explain concrete symbols, decisions, +counterexamples and results rather than padding. A sufficiently long body with +unverified scope evidence still cannot support approval. Existing short reviews +on open heads must be expanded and checked before they qualify again; queue +ordering and explicit post-merge audit selection remain unchanged. + Codex agents should use the dedicated `loopx-pr-review` skill for this slash command. Do not route `/loopx-pr-review` through the broader `loopx-project` workflow or the merge-focused `loopx-pr-merge` skill. diff --git a/skills/loopx-pr-review/SKILL.md b/skills/loopx-pr-review/SKILL.md index bf6a382e29..bc5ea8e236 100644 --- a/skills/loopx-pr-review/SKILL.md +++ b/skills/loopx-pr-review/SKILL.md @@ -74,8 +74,9 @@ When `review_action_kind` is null, the row stays in `pull_requests` inventory bu preserve missing evidence as `unverified`. Execute its repository-reuse, default-off, authority and real-path counterfactual requirements rather than repeating them as prose. Never infer `verified` from metadata or CI. -3. Apply `completion_gate` literally. Save the filled result and check it before - publication: +3. Apply `completion_gate` literally: save final Markdown in `review_body`, then check + evidence and that exact body. Follow capability-owned floors and scope + counterfactuals; prose cannot replace missing execution: ```bash loopx --format json pr-review --check-result review-result.json --packet review-packet.json @@ -86,13 +87,12 @@ When `review_action_kind` is null, the row stays in `pull_requests` inventory bu an old result relabeled without executing the current plan. Verified rows fill their declared fields; validation rows bind typed `case_id` coverage, and missing material evidence needs a concrete request-changes reason. -4. Render the verified result through `review_template`. The five sections are - output structure, while the execution contract is the evidence authority. +4. Publish the checked `review_body`; recheck after edits. Remote readback uses + the same body rules. Headings and a verdict alone cannot certify a review. 5. Re-read the remote head immediately before verdict and publication. Restart the evidence pass if it changed. -Each PR gets an independent evidence pass and standalone card; a queue table is -only a preface. Finish fewer complete cards rather than metadata-only reviews. +Each PR needs independent evidence and a standalone card; a queue table is only a preface. For managed review, pass `--goal-id GOAL` and follow the packet’s resolved `wait_for_ci`: false means never fetch, poll, or wait for CI; true retains CI validation. Required local failures/skips always block. Configure one Goal with `configure-goal --goal-id GOAL --no-pr-review-wait-for-ci --execute`; clear with `--clear-pr-review-configuration --execute`. diff --git a/skills/loopx-self-repair/references/repair-patterns.md b/skills/loopx-self-repair/references/repair-patterns.md index e80306ed43..287f46d644 100644 --- a/skills/loopx-self-repair/references/repair-patterns.md +++ b/skills/loopx-self-repair/references/repair-patterns.md @@ -9,6 +9,7 @@ teaches a reusable control-plane lesson. | `acceptance_hold_recovery_selection_split` | Newly created advancement work is acceptance-unbound, repeated vision replans never expose its hold, or a replan packet also selects an unrelated due monitor. | Canonical acceptance tasks, scoped source Todos, bounded trigger checkpoints, effective action and original Turn receipt. | Recovery covered stale associations only; generic vision gaps displaced hold identities; candidate inventory leaked into the selected execution target. | Route missing and stale associations through the existing bounded replan lane, retain exact hold checkpoints before generic gaps, and separate replan from candidate selection. Keep owner association and completion validation enforced. A new unbound repair Todo is not runnable recovery; only a qualified successor or concrete blocker settles the exact hold. Validate real File/SQLite CLI paths and receipt reentry without mutating an active Goal. | | `acceptance_validation_failure_flattened` | A bound Todo is `ready` and its ordinary validator passes, yet completion reports only `goal_acceptance_validation_rejected`; the agent searches contract bindings before discovering a workspace or runner failure. | Exact Todo acceptance state, completion's typed criterion failure, recorded delivery workspace, current worktree cleanliness, and the privacy-safe runner receipt. | The completion boundary collapsed a failed criterion receipt into a generic contract error, hiding the workspace or command status. | Project the failed criterion ID, allowlisted validation status, safe exit code and bounded next action without command output or local paths. Repair the execution context and retry under the same Turn/lease; do not rebind owner criteria or infer a Goal-wide hold. | | `review_compatibility_assumption_gap` | A correct fix retains parallel protocol paths, and the review treats historical receipt recovery as proof that every old request decoder is needed. | Published review, structured compatibility rationale, real caller/deployment inventory, stored request versus receipt shape, and smaller-design readback. | Re-review verifies the last bug but does not separate compatibility obligations or test consolidation; free-text claims pass as evidence. | Replace the capability's existing compatibility rationale with a bounded structured assessment. Distinguish transient requests, independent client rollout and persisted replay formats; compare one typed current contract; preserve real legacy consumers. Cover needless retention and unsafe removal with positive twins. Keep optional simplifications advisory and do not make field completeness certify evidence truth. | +| `review_gate_scope_counterexample_gap` | A review proves that covered work cannot evade a gate, yet an enabled gate captures unrelated or newly created work; recording a blocker does not restore admission. | Accepted scope, published review, actual selector, covered and uncovered subjects, future-subject creation, and the real caller after recovery. | Activation, coverage and per-subject readiness were treated as one authority; review tested bypass but omitted overblocking and useful-work recovery. | Require both directions of scope counterexamples in review evidence and distinguish a receipt from resumed work. Check the final published explanation for substantive sections while recognizing that length and declared evidence cannot certify truth. | | `archive_capture_classification_gap` | Whole-Goal capture rejects a reachable archived Agent record although its active read was valid. | Recorded role/class, existing legacy read classification, transitive dependency closure, bootstrap and writer-outbox readback. | Archive storage preserved the role but omitted the resolved class; capture treated missing class as missing authority. | Keep recorded identity separate from compatibility classification. Only a recorded Agent role can adopt the existing read class; use it consistently for closure and materialization. Preserve the class on new archive moves, keep user authority fail-closed, and validate full source capture in disposable real providers without changing the active Goal. | | `shadow_proof_transport_amplification` | A large Goal cannot capture its first mutation or finish drain although the same tiny Goal succeeds; RPC rejects an oversized response. | Same source population, base/head serialized response sizes, actual sequence/drain callers, qualified lineage and cursor readback. | A consumer needing progress or partition markers received the full head and every historical projection across the language boundary. | Keep full history verification in the typed owner and return a purpose-specific compact proof. Preserve receipts, sequence and lineage checks; do not raise transport limits, truncate source records or weaken qualification to make the test pass. Cover the old oversized response and real CLI capture, drain and reviewed cutover on a disposable snapshot. | | `qualification_host_contract_mismatch` | A model stops on ordinary inspection, shell composition or draft correction and the result is reported as a semantic-control failure. | Actual synthetic operation, advertised tool contract, OS isolation, subprocess exit status, returned diagnostics and durable writeback attempts. | A shell-labelled host imposed a separate command language or ended execution without returning normal tool errors. | Use a normal shell inside an isolated execution environment, with real CLI effects supervised at their existing authority boundary. Observe source evidence and durable outcomes instead of requiring a command spelling or read ritual. Return errors within a disclosed scenario budget; keep original inputs and authority stores protected. Separate host rejection, budget exhaustion and core semantic admission, retaining earlier failures. Do not insert model answers, waive evidence or grow a command whitelist one failed trajectory at a time. | From 12283f900c66b4ba88aff5188a2afe10c4c0a4de Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Thu, 24 Sep 2026 18:59:04 +0800 Subject: [PATCH 13/76] test(chat): exercise conversation activity and interruption in browser Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- .../conversation-activity-before.png | Bin 0 -> 69131 bytes .../conversation-activity-desktop.png | Bin 0 -> 81583 bytes .../conversation-activity-error.png | Bin 0 -> 85329 bytes .../conversation-activity-interrupted.png | Bin 0 -> 82311 bytes .../conversation-activity-mobile.png | Bin 0 -> 38483 bytes docs/guides/personal-workspace-user-guide.md | 8 ++ examples/personal-workspace-browser-smoke.mjs | 3 +- .../conversation-activity.mjs | 101 ++++++++++++++++++ 8 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 docs/assets/personal-workspace/conversation-activity-before.png create mode 100644 docs/assets/personal-workspace/conversation-activity-desktop.png create mode 100644 docs/assets/personal-workspace/conversation-activity-error.png create mode 100644 docs/assets/personal-workspace/conversation-activity-interrupted.png create mode 100644 docs/assets/personal-workspace/conversation-activity-mobile.png create mode 100644 examples/personal-workspace-browser/conversation-activity.mjs diff --git a/docs/assets/personal-workspace/conversation-activity-before.png b/docs/assets/personal-workspace/conversation-activity-before.png new file mode 100644 index 0000000000000000000000000000000000000000..a80c7565647470f516c26dea00ff596636c2620b GIT binary patch literal 69131 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 literal 0 HcmV?d00001 diff --git a/docs/assets/personal-workspace/conversation-activity-desktop.png b/docs/assets/personal-workspace/conversation-activity-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..768b2fa62aecc845c3757cc3b8d956ba11bce006 GIT binary patch literal 81583 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 UQCNWitIB1)oI> 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%0DTv>%LFDI!|sM0+QVsbZN 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 literal 0 HcmV?d00001 diff --git a/docs/assets/personal-workspace/conversation-activity-error.png b/docs/assets/personal-workspace/conversation-activity-error.png new file mode 100644 index 0000000000000000000000000000000000000000..111f9f22ddf497b40cf4b0360d87d3db05beb46a GIT binary patch literal 85329 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�k4V(R07$NN>bPeBVS|^D2GzLati`kok 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 OEGwxbk#_#N`~Lu03wGH6 literal 0 HcmV?d00001 diff --git a/docs/assets/personal-workspace/conversation-activity-interrupted.png b/docs/assets/personal-workspace/conversation-activity-interrupted.png new file mode 100644 index 0000000000000000000000000000000000000000..6485a76312b47a4fadabfd45de526e1358741c52 GIT binary patch literal 82311 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