From 15d4d0db257bdff8c0e50b7d30ba650db4957bde Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Mon, 21 Sep 2026 02:26:58 +0800 Subject: [PATCH 1/3] feat(dashboard): compare version-bound team artifacts Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- apps/presentation/dashboard/package.json | 3 +- .../smoke/team-artifact-comparison-smoke.mjs | 27 ++++++++ .../personal-workspace/goal-loopx-mode.css | 17 +++++ .../goal-team-comparison.tsx | 68 +++++++++++++++++++ .../personal-workspace/goal-team-evidence.tsx | 5 +- .../team-artifact-comparison.ts | 21 ++++++ .../team-evidence.mjs | 29 ++++++++ loopx/web/chat/asset-retention.json | 6 +- loopx/web/chat/assets/index-HEW_sO3r.css | 1 + .../{index-YyYQIQ2W.js => index-i1QlYZUg.js} | 31 +++++---- loopx/web/chat/index.html | 4 +- 11 files changed, 190 insertions(+), 22 deletions(-) create mode 100644 apps/presentation/dashboard/smoke/team-artifact-comparison-smoke.mjs create mode 100644 apps/presentation/dashboard/src/features/personal-workspace/goal-team-comparison.tsx create mode 100644 apps/presentation/dashboard/src/features/personal-workspace/team-artifact-comparison.ts create mode 100644 loopx/web/chat/assets/index-HEW_sO3r.css rename loopx/web/chat/assets/{index-YyYQIQ2W.js => index-i1QlYZUg.js} (76%) diff --git a/apps/presentation/dashboard/package.json b/apps/presentation/dashboard/package.json index 1b9f9f649..37135d6ac 100644 --- a/apps/presentation/dashboard/package.json +++ b/apps/presentation/dashboard/package.json @@ -49,7 +49,8 @@ "smoke:usage-progress": "rm -rf /tmp/loopx-usage-progress-smoke && tsc --ignoreConfig --target ES2022 --module CommonJS --moduleResolution Node --ignoreDeprecations 6.0 --resolveJsonModule --esModuleInterop --jsx react-jsx --skipLibCheck --strict --outDir /tmp/loopx-usage-progress-smoke smoke/usage-progress-smoke.ts src/features/personal-workspace/personal-workspace-model.ts && node /tmp/loopx-usage-progress-smoke/apps/presentation/dashboard/smoke/usage-progress-smoke.js", "smoke:action-review-plan": "rm -rf .local/action-review-plan-smoke && tsc --ignoreConfig --target ES2022 --module ES2022 --moduleResolution Bundler --skipLibCheck --strict --rootDir ../../.. --outDir .local/action-review-plan-smoke smoke/action-review-plan-smoke.ts ../../../loopx/control_plane/presentation/action_review_plan.ts src/vite-env.d.ts && node .local/action-review-plan-smoke/apps/presentation/dashboard/smoke/action-review-plan-smoke.js", "smoke:attention-details": "tsc --ignoreConfig --target ES2022 --module CommonJS --moduleResolution Node --ignoreDeprecations 6.0 --resolveJsonModule --esModuleInterop --skipLibCheck --strict --outDir /tmp/loopx-attention-details-smoke smoke/attention-details-smoke.ts && NODE_PATH=\"$PWD/node_modules\" node /tmp/loopx-attention-details-smoke/apps/presentation/dashboard/smoke/attention-details-smoke.js", - "smoke:delivery-review": "tsc --ignoreConfig --target ES2022 --module NodeNext --moduleResolution NodeNext --skipLibCheck --strict --rootDir src --outDir node_modules/.cache/delivery-review src/data/delivery-review.ts src/data/goal-acceptance-observation.ts src/features/personal-workspace/delivery-review-copy.ts && node smoke/delivery-review-smoke.mjs" + "smoke:delivery-review": "tsc --ignoreConfig --target ES2022 --module NodeNext --moduleResolution NodeNext --skipLibCheck --strict --rootDir src --outDir node_modules/.cache/delivery-review src/data/delivery-review.ts src/data/goal-acceptance-observation.ts src/features/personal-workspace/delivery-review-copy.ts && node smoke/delivery-review-smoke.mjs", + "smoke:team-artifact-comparison": "tsc --ignoreConfig --target ES2022 --module ES2022 --moduleResolution Bundler --skipLibCheck --strict --rootDir src --outDir node_modules/.cache/team-comparison src/features/personal-workspace/team-artifact-comparison.ts src/vite-env.d.ts && node smoke/team-artifact-comparison-smoke.mjs" }, "dependencies": { "@fontsource-variable/geist": "^5.3.0", diff --git a/apps/presentation/dashboard/smoke/team-artifact-comparison-smoke.mjs b/apps/presentation/dashboard/smoke/team-artifact-comparison-smoke.mjs new file mode 100644 index 000000000..089f191e5 --- /dev/null +++ b/apps/presentation/dashboard/smoke/team-artifact-comparison-smoke.mjs @@ -0,0 +1,27 @@ +import assert from "node:assert/strict"; +import {comparisonSource, changedRange} from "../node_modules/.cache/team-comparison/features/personal-workspace/team-artifact-comparison.js"; + +const link = {operation_id: "original", ref: "report.txt", sha256: "a".repeat(64), + input_ref: "input.txt", relation: "revises", state: "current"}; +const source = {operation_id: "original", request_id: "request", agent_id: "author", todo_id: "work", + status: "accepted", worker_active: false, recovery_required: false, + artifacts: [{ref: link.ref, sha256: link.sha256, text: "unchanged\nold\nend"}]}; +assert.equal(comparisonSource(link, source)?.text, "unchanged\nold\nend"); +for (const patch of [{operation_id: "other"}, {status: "rejected"}, {recovery_required: true}, {error: "unavailable"}, + {artifacts: [{ref: link.ref, sha256: "b".repeat(64), text: "new"}]}, + {artifacts: [{ref: "other.txt", sha256: link.sha256, text: "new"}]}, + {artifacts: [...source.artifacts, ...source.artifacts]}]) { + assert.equal(comparisonSource(link, {...source, ...patch}), null); +} +assert.equal(comparisonSource({...link, state: "unavailable"}, source), null); +assert.deepEqual(changedRange("unchanged\nold\nend", "unchanged\nnew\nend"), { + left: ["unchanged", "old", "end"], right: ["unchanged", "new", "end"], start: 1, leftEnd: 2, rightEnd: 2, +}); +const equal = changedRange("one\ntwo", "one\ntwo"); +assert.equal(equal.start, equal.leftEnd); +assert.equal(equal.start, equal.rightEnd); +const inserted = changedRange("one\nend", "one\nadded\nend"); +assert.equal(inserted.leftEnd, 1); assert.equal(inserted.rightEnd, 2); +const removed = changedRange("one\nremoved\nend", "one\nend"); +assert.equal(removed.leftEnd, 2); assert.equal(removed.rightEnd, 1); +console.log("team artifact comparison: exact-version rejection and changed-range cases passed"); 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 d36b53396..7e2208f32 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,3 +53,20 @@ .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-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; } +.goal-team-comparison-heading h4 { font-size: 20px; letter-spacing: -.02em; } +.goal-team-comparison-heading > span { font-size: 12px; color: var(--pw-muted, #666); } +.goal-team-comparison-sources { display: flex; gap: 8px; flex-wrap: wrap; margin-block: 16px; } +.goal-team-comparison-sources button { flex-direction: column; align-items: flex-start; max-width: 100%; overflow-wrap: anywhere; text-align: left; } +.goal-team-comparison-sources button > span { color: var(--pw-muted, #666); font-size: 12px; } +.goal-team-comparison-sources button[aria-pressed="true"] { border-color: var(--pw-text, #171717); } +.goal-team-comparison-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; } +.goal-team-comparison-grid article { margin: 0; min-width: 0; border: 1px solid var(--pw-line, #ebebeb); border-radius: 12px; overflow: hidden; } +.goal-team-comparison-grid header { display: grid; gap: 4px; padding: 16px; border-bottom: 1px solid var(--pw-line, #ebebeb); overflow-wrap: anywhere; } +.goal-team-comparison-grid header span { color: var(--pw-muted, #666); font-size: 12px; } +.goal-team-comparison-grid pre { margin: 0; max-height: 400px; border: 0; border-radius: 0; padding: 16px; font-size: 13px; line-height: 1.8; } +.goal-team-comparison-grid pre span[data-changed="true"] { background: color-mix(in srgb, var(--pw-text, #171717) 7%, transparent); text-decoration: underline; text-decoration-color: var(--pw-muted, #666); text-underline-offset: 4px; } +.goal-team-comparison select { min-height: 44px; padding: 8px; background: var(--pw-surface, #fff); color: inherit; border: 1px solid var(--pw-line, #ebebeb); border-radius: 6px; } +@media (max-width: 640px) { .goal-team-comparison-grid { grid-template-columns: 1fr; } } diff --git a/apps/presentation/dashboard/src/features/personal-workspace/goal-team-comparison.tsx b/apps/presentation/dashboard/src/features/personal-workspace/goal-team-comparison.tsx new file mode 100644 index 000000000..6f5812f4a --- /dev/null +++ b/apps/presentation/dashboard/src/features/personal-workspace/goal-team-comparison.tsx @@ -0,0 +1,68 @@ +import {useEffect, useRef, useState} from "react"; +import {readLoopXTeamWork, type DelegationDependency, type DelegationReadback} from "../../data/chat"; +import {changedRange, comparisonSource} from "./team-artifact-comparison"; + +export function GoalTeamComparison({sessionId, result, zh}: { + sessionId: string; result: DelegationReadback; zh: boolean; +}) { + const [selection, setSelection] = useState<{link: DelegationDependency; source: DelegationReadback} | null>(null); + const [outputIndex, setOutputIndex] = useState(0); + const [busy, setBusy] = useState(false); + const [error, setError] = useState(""); + const generation = useRef(0); + useEffect(() => { + generation.current++; setSelection(null); setError(""); setBusy(false); setOutputIndex(0); + return () => {generation.current++;}; + }, [result, sessionId]); + const artifacts = result.status === "accepted" && !result.error && !result.recovery_required ? result.artifacts ?? [] : []; + const links = result.dependencies ?? []; + async function compare(link: DelegationDependency) { + const current = ++generation.current; + setSelection(null); setError(""); setBusy(true); setOutputIndex(0); + try { + const source = await readLoopXTeamWork(sessionId, link.operation_id); + if (current !== generation.current) return; + if (!comparisonSource(link, source)) { + setError(zh ? "指定来源版本无法核验,未展示对照。" : "The referenced source version cannot be verified. Comparison withheld."); + } else setSelection({link, source}); + } catch { + if (current === generation.current) setError(zh ? "来源读取失败,已清除上次对照。可重试或查看执行详情。" : "Source read failed; previous comparison cleared. Retry or inspect the execution."); + } finally {if (current === generation.current) setBusy(false);} + } + if (!links.length || !artifacts.length) return null; + const before = selection ? comparisonSource(selection.link, selection.source) : null; + const after = artifacts[outputIndex]; + const range = before && after ? changedRange(before.text, after.text) : null; + const labels = zh ? {revises: "修订依据", responds_to: "回应依据", uses: "使用依据"} + : {revises: "Revision source", responds_to: "Response source", uses: "Input source"}; + return
+

{zh ? "看清这次变化" : "See what changed"}

+ {zh ? "按需核验" : "On-demand verification"}
+
{links.map((link, index) => )}
+ {busy ?

{zh ? "正在读取指定来源版本…" : "Reading the referenced source version…"}

: null} + {error ?

{error}

: null} + {before && after && range ? <> + {artifacts.length > 1 ? : null} +
+ {([{kind: "source", title: zh ? "指定来源" : "Referenced source", artifact: before, lines: range.left, end: range.leftEnd}, + {kind: "result", title: zh ? "本次产物" : "This output", artifact: after, lines: range.right, end: range.rightEnd}]).map(pane =>
+
{pane.title}{pane.artifact.ref}
+
{pane.lines.map((line, i) => = range.start && i < pane.end}>{line}{i < pane.lines.length - 1 ? "\n" : ""})}
+
)} +
+

{before.text === after.text ? (zh ? "两个版本的文本相同。" : "Both versions contain the same text.") + : (zh ? "标记文本变化所在范围;不代表结论正确或已被采用。" : "Marks the range containing text changes; does not establish correctness or adoption.")}

+
{zh ? "核验的版本" : "Verified versions"} + {before.ref} · sha256:{before.sha256}{after.ref} · sha256:{after.sha256} +
+ :

{zh ? "选择一份依据,与本次产物并排阅读。" : "Choose a source to read beside this output."}

} +
; +} 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 054b9f458..226d1132a 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 {GoalTeamComparison} from "./goal-team-comparison"; import {useEffect, useRef, useState} from "react"; import {delegationStateLabel, readLoopXTeamWork, sendLoopXMessage, type DelegationReadback, type LoopXModeSnapshot} from "../../data/chat"; @@ -56,19 +57,19 @@ export function GoalTeamEvidence({sessionId, operationId, zh, canMessage, ingres return

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

- {operationId} {busy ?

{zh ? "正在核验绑定、验收与文件…" : "Checking bindings, acceptance and files…"}

: null} {error ?

{zh ? "无法核验,已清除上次证据。" : "Cannot verify; previous evidence cleared."} {error}

: null} {result ? <>

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

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

+ {result.error ?

{result.error}

: null} {result.status === "accepted" && result.artifacts?.length ? result.artifacts.map(artifact =>

{artifact.ref}

{artifact.text}
{zh ? "版本与来源标识" : "Version and source identifiers"} - sha256:{artifact.sha256}{result.request_id}{result.todo_id} + {operationId}sha256:{artifact.sha256}{result.request_id}{result.todo_id}
) :

{zh ? "本次读取没有可展示的已验收产物。" : "No accepted artifact is available in this readback."}

}
{event.preventDefault(); void send();}}> diff --git a/apps/presentation/dashboard/src/features/personal-workspace/team-artifact-comparison.ts b/apps/presentation/dashboard/src/features/personal-workspace/team-artifact-comparison.ts new file mode 100644 index 000000000..aba801981 --- /dev/null +++ b/apps/presentation/dashboard/src/features/personal-workspace/team-artifact-comparison.ts @@ -0,0 +1,21 @@ +import type {DelegationDependency, DelegationReadback} from "../../data/chat"; + +type Artifact = NonNullable[number]; + +/** Compare only the exact source version bound to the request, never a newer file. */ +export function comparisonSource(link: DelegationDependency, source: DelegationReadback): Artifact | null { + if (link.state !== "current" || source.operation_id !== link.operation_id || + source.status !== "accepted" || source.recovery_required || source.error) return null; + const matches = (source.artifacts ?? []).filter(row => row.ref === link.ref && row.sha256 === link.sha256); + return matches.length === 1 ? matches[0] : null; +} + +/** A changed range, not a semantic diff: unchanged lines inside the range may remain. */ +export function changedRange(before: string, after: string) { + const left = before.split("\n"), right = after.split("\n"); + let start = 0, suffix = 0; + while (start < Math.min(left.length, right.length) && left[start] === right[start]) start++; + while (suffix < Math.min(left.length, right.length) - start && + left[left.length - suffix - 1] === right[right.length - suffix - 1]) suffix++; + return {left, right, start, leftEnd: left.length - suffix, rightEnd: right.length - suffix}; +} diff --git a/examples/personal-workspace-browser/team-evidence.mjs b/examples/personal-workspace-browser/team-evidence.mjs index 1bce8090e..4933a23ac 100644 --- a/examples/personal-workspace-browser/team-evidence.mjs +++ b/examples/personal-workspace-browser/team-evidence.mjs @@ -37,6 +37,35 @@ export const teamEvidenceScenario = { await evidence.getByRole("button", {name: "查看后续结果", exact: true}).click(); await evidence.getByLabel("证据内容: synthesis.json").waitFor(); await evidence.getByText("源产物与接收方输入一致", {exact: true}).waitFor(); + const compare = evidence.getByRole("region", {name: "依据与结果对照"}); + await compare.getByRole("button", {name: /使用依据 report.json/}).click(); + await compare.getByLabel("指定来源: report.json").waitFor(); + assert.match(await compare.getByLabel("本次产物: synthesis.json").textContent(), /accepted_cash_flow/); + assert.equal(await page.evaluate(() => window.artifactExecuted), undefined); + await page.screenshot({path: resolve(outputDir, "team-comparison-desktop.png"), animations: "disabled"}); + await page.setViewportSize({width: 390, height: 844}); + await page.emulateMedia({reducedMotion: "reduce"}); + assert(await dialog.evaluate(el => el.scrollWidth <= el.clientWidth)); + await page.screenshot({path: resolve(outputDir, "team-comparison-mobile.png"), animations: "disabled"}); + await page.setViewportSize({width: 1512, height: 982}); + // A changed source hash must not silently compare the newest file. + const changedSource = async route => { + const body = route.request().method() === "POST" ? route.request().postDataJSON() : {}; + if (body.operation === "read" && body.operation_id === "accepted-analysis") { + return route.fulfill({json: {operation_id: body.operation_id, status: "accepted", recovery_required: false, + artifacts: [{ref: "report.json", sha256: "f".repeat(64), text: "newer content must not appear"}]}}); + } + return route.fallback(); + }; + await page.route("**/api/chat/sessions/*/loopx", changedSource); + await compare.getByRole("button", {name: /使用依据 report.json/}).click(); + await compare.getByRole("alert").filter({hasText: "指定来源版本无法核验"}).waitFor(); + assert.equal(await compare.getByLabel("指定来源: report.json").count(), 0); + assert.equal(await compare.getByText("newer content must not appear").count(), 0); + await page.screenshot({path: resolve(outputDir, "team-comparison-unavailable.png"), animations: "disabled"}); + await page.unroute("**/api/chat/sessions/*/loopx", changedSource); + await compare.getByRole("button", {name: /使用依据 report.json/}).click(); + await compare.getByLabel("指定来源: report.json").waitFor(); await evidence.getByRole("button", {name: "accepted-analysis", exact: true}).click(); await content.waitFor(); mode.fixtureAdoptionState = "unavailable"; diff --git a/loopx/web/chat/asset-retention.json b/loopx/web/chat/asset-retention.json index 563d20b3e..4bde6cae6 100644 --- a/loopx/web/chat/asset-retention.json +++ b/loopx/web/chat/asset-retention.json @@ -13,8 +13,8 @@ "assets/geist-mono-symbols2-wght-normal-CO5SzqOn.woff2", "assets/geist-mono-vietnamese-wght-normal-DadHysG0.woff2", "assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2", - "assets/index-Bm1n7i_7.css", - "assets/index-DXN3tqaA.js" + "assets/index-HEW_sO3r.css", + "assets/index-i1QlYZUg.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-Bm1n7i_7.css", - "assets/index-YyYQIQ2W.js" + "assets/index-DXN3tqaA.js" ] ] } diff --git a/loopx/web/chat/assets/index-HEW_sO3r.css b/loopx/web/chat/assets/index-HEW_sO3r.css new file mode 100644 index 000000000..b8593638d --- /dev/null +++ b/loopx/web/chat/assets/index-HEW_sO3r.css @@ -0,0 +1 @@ +.personal-collaboration{border:1px solid var(--color-border,#ebebeb);overflow-wrap:anywhere;border-radius:6px;margin-top:12px;padding:12px 16px}.personal-collaboration header{flex-wrap:wrap;justify-content:space-between;gap:8px;display:flex}.personal-collaboration header span,.personal-collaboration-status{opacity:.75;font-size:12px}.personal-collaboration-status{flex-wrap:wrap;gap:8px 16px;display:flex}.personal-collaboration summary{cursor:pointer;align-content:center;min-height:44px;display:list-item}.personal-collaboration h4{margin:12px 0 4px;font-size:13px}.personal-collaboration p{white-space:pre-wrap}.personal-collaboration ul{padding-left:20px}.personal-collaboration small{font-family:var(--font-mono);font-size:11px;display:block}.personal-collaboration summary:focus-visible{outline:2px solid var(--color-link,#0070f3);outline-offset:2px}.goal-loopx-mode{color:var(--pw-text,#171717);border-bottom:1px solid var(--pw-line,#ebebeb);padding:8px 26px;font-size:13px}.goal-loopx-mode-bar,.goal-loopx-mode-actions{align-items:center;gap:8px;display:flex}.goal-loopx-mode-bar{justify-content:space-between;gap:16px}.goal-loopx-mode-status{align-items:center;gap:8px;min-width:0;font-weight:500;display:inline-flex}.goal-loopx-mode-status>i{background:var(--pw-muted,#666);border-radius:50%;flex:0 0 7px;width:7px;height:7px}.goal-loopx-mode-status[data-active=true]>i{background:var(--pw-green,#13804a)}.goal-loopx-mode p{color:var(--pw-muted,#666);margin:8px 0;font-size:12px;line-height:1.6}.goal-loopx-mode .personal-composer-error{color:var(--pw-red,#b42318)}.goal-loopx-mode button{border:1px solid var(--pw-line,#ebebeb);background:var(--pw-surface,#fff);min-width:44px;min-height:44px;color:inherit;font:inherit;cursor:pointer;border-radius:6px;justify-content:center;align-items:center;gap:6px;padding:8px 12px;display:inline-flex}.goal-loopx-mode .goal-loopx-primary{border-color:var(--pw-line-strong,#ddd);font-weight:500}.goal-loopx-mode .goal-loopx-team-trigger{background:0 0;border-color:#0000}.goal-loopx-mode button:disabled{opacity:.5;cursor:default}.goal-loopx-mode button:focus-visible,.goal-loopx-mode input:focus-visible,.goal-loopx-mode select:focus-visible,.goal-loopx-mode summary:focus-visible{outline-offset:2px;outline:2px solid #0070f3}.goal-loopx-alert-dot{background:var(--pw-amber,#a66b00);border-radius:50%;width:7px;height:7px}.goal-loopx-mode .goal-loopx-review-notice{color:var(--pw-amber,#a66b00);text-align:left;background:0 0;border:0;padding-inline:0}.goal-loopx-dialog{border:1px solid var(--pw-line,#ebebeb);background:var(--pw-bg,#fafafa);width:min(680px,100vw - 32px);max-height:calc(100dvh - 48px);color:var(--pw-text,#171717);overscroll-behavior:contain;border-radius:16px;margin:auto;padding:0;overflow:auto}.goal-loopx-dialog::backdrop{background:#00000047}.goal-loopx-dialog-content{padding:24px}.goal-loopx-dialog header{justify-content:space-between;align-items:center;gap:16px;display:flex}.goal-loopx-dialog h2{letter-spacing:-.02em;margin:0;font-size:20px;font-weight:600}.goal-loopx-dialog h3{margin:24px 0 8px;font-size:13px;font-weight:600}.goal-loopx-mode-settings{grid-template-columns:1fr 1fr;gap:16px;margin-block:24px;display:grid}.goal-loopx-mode-settings label{flex-direction:column;gap:8px;display:flex}.goal-loopx-mode-settings input,.goal-loopx-mode-settings select{border:1px solid var(--pw-line,#ddd);background:var(--pw-surface,#fff);width:100%;min-width:0;min-height:44px;color:inherit;font:inherit;border-radius:6px;padding:8px}.goal-loopx-mode-settings label:nth-child(3),.goal-loopx-mode-settings p{grid-column:1/-1}.goal-loopx-message-mode{flex-wrap:wrap;align-items:center;gap:8px;margin:0 0 8px;font-size:12px;display:flex}.goal-loopx-message-mode select{font:inherit;color:inherit;border:1px solid var(--pw-line,#ebebeb);background:var(--pw-surface,#fff);border-radius:6px;min-height:44px;padding:6px}.goal-team-work ul{margin:8px 0 24px;padding:0;list-style:none}.goal-team-work li{border-bottom:1px solid var(--pw-line,#ebebeb);overflow-wrap:anywhere;padding:12px 0}.goal-team-bindings li>div,.goal-team-work-actions{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px;display:flex}.goal-team-work code{overflow-wrap:anywhere;white-space:normal;padding-bottom:8px;font-size:12px;display:block}.goal-team-work summary{cursor:pointer;min-height:44px;color:var(--pw-muted,#666);padding:12px 0;font-size:12px}@media (width<=640px){.goal-loopx-mode{padding:6px 14px}.goal-loopx-mode-bar{flex-wrap:wrap;gap:0}.goal-loopx-mode-status{min-height:32px}.goal-loopx-mode-actions{gap:2px;margin-left:auto}.goal-loopx-mode-actions button{padding-inline:8px}.goal-loopx-mode-settings{grid-template-columns:1fr}.goal-loopx-dialog-content{padding:16px}}.goal-team-evidence{border:1px solid var(--pw-line,#ebebeb);background:var(--pw-surface,#fff);border-radius:12px;margin-block:16px;padding:16px}.goal-team-evidence h3,.goal-team-evidence h4{margin:0;font-size:13px}.goal-team-evidence article{margin-block:16px}.goal-team-evidence pre{white-space:pre-wrap;overflow-wrap:anywhere;max-height:320px;font:12px/1.6 var(--font-mono,monospace);border:1px solid var(--pw-line,#ebebeb);border-radius:6px;padding:12px;overflow:auto}.goal-team-evidence label{gap:8px;font-weight:500;display:grid}.goal-team-evidence textarea{box-sizing:border-box;resize:vertical;border:1px solid var(--pw-line,#ebebeb);background:var(--pw-bg,#fafafa);width:100%;min-height:88px;color:inherit;font:inherit;border-radius:6px;padding:8px}.goal-team-evidence textarea:focus-visible,.goal-team-evidence pre:focus-visible{outline-offset:2px;outline:2px solid #0070f3}.goal-team-control{border-top:1px solid var(--pw-line,#ebebeb);padding-top:16px}.goal-team-evidence [role=alert]{color:var(--pw-red,#b42318)}.goal-team-lineage{border-block:1px solid var(--pw-line,#ebebeb);margin-block:16px;padding-block:16px}.goal-team-lineage ul{margin:12px 0;padding:0;list-style:none}.goal-team-lineage li{border-left:2px solid var(--pw-line,#ebebeb);overflow-wrap:anywhere;gap:8px;padding:0 0 16px 16px;display:grid}.goal-team-lineage button{overflow-wrap:anywhere;text-align:start;justify-self:start;max-width:100%}.goal-loopx-dialog:has(.goal-team-comparison){width:min(1040px,100vw - 32px)}.goal-team-comparison{margin-block:24px}.goal-team-comparison-heading{justify-content:space-between;align-items:baseline;gap:16px;display:flex}.goal-team-comparison-heading h4{letter-spacing:-.02em;font-size:20px}.goal-team-comparison-heading>span{color:var(--pw-muted,#666);font-size:12px}.goal-team-comparison-sources{flex-wrap:wrap;gap:8px;margin-block:16px;display:flex}.goal-team-comparison-sources button{overflow-wrap:anywhere;text-align:left;flex-direction:column;align-items:flex-start;max-width:100%}.goal-team-comparison-sources button>span{color:var(--pw-muted,#666);font-size:12px}.goal-team-comparison-sources button[aria-pressed=true]{border-color:var(--pw-text,#171717)}.goal-team-comparison-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.goal-team-comparison-grid article{border:1px solid var(--pw-line,#ebebeb);border-radius:12px;min-width:0;margin:0;overflow:hidden}.goal-team-comparison-grid header{border-bottom:1px solid var(--pw-line,#ebebeb);overflow-wrap:anywhere;gap:4px;padding:16px;display:grid}.goal-team-comparison-grid header span{color:var(--pw-muted,#666);font-size:12px}.goal-team-comparison-grid pre{border:0;border-radius:0;max-height:400px;margin:0;padding:16px;font-size:13px;line-height:1.8}.goal-team-comparison-grid pre span[data-changed=true]{background:color-mix(in srgb, var(--pw-text,#171717) 7%, transparent);text-decoration:underline;-webkit-text-decoration-color:var(--pw-muted,#666);text-decoration-color:var(--pw-muted,#666);text-underline-offset:4px}.goal-team-comparison select{background:var(--pw-surface,#fff);min-height:44px;color:inherit;border:1px solid var(--pw-line,#ebebeb);border-radius:6px;padding:8px}@media (width<=640px){.goal-team-comparison-grid{grid-template-columns:1fr}}.delivery-review{min-width:0;color:var(--pw-text);gap:20px;padding:0;display:grid}.delivery-review h2,.delivery-review h3,.delivery-review h4,.delivery-review p{margin:0}.delivery-review h2{font-size:20px;font-weight:600;line-height:28px}.delivery-review h3{font-size:16px;font-weight:600;line-height:24px}.delivery-review h4{font-size:14px;line-height:20px}.delivery-review p{overflow-wrap:anywhere;line-height:1.6}.delivery-review button,.delivery-review select,.delivery-review input{color:inherit;font:inherit}.delivery-review button,.delivery-review select{border:1px solid var(--pw-line);background:var(--pw-card);cursor:pointer;border-radius:6px;min-height:44px;padding:8px 12px}.delivery-review button:disabled{opacity:.5;cursor:not-allowed}.delivery-review button[aria-pressed=true]{border-color:var(--pw-text);background:var(--pw-hover,var(--pw-card))}.delivery-review :is(button,input,select,summary,[tabindex]):focus-visible{outline:2px solid var(--color-link,#0070f3);outline-offset:3px}.delivery-review-toolbar,.delivery-chain-toolbar{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.delivery-review-toolbar>div,.delivery-chain-toolbar>div,.delivery-source-actions{flex-wrap:wrap;gap:8px;display:flex}.delivery-review-toolbar button,.delivery-source-actions button{align-items:center;gap:8px;display:inline-flex}.delivery-snapshot-time,.delivery-boundary,.delivery-chain-toolbar>span{color:var(--pw-muted);font-size:12px}.delivery-notice{border:1px solid var(--pw-line);border-left:3px solid var(--pw-amber,#a96500);border-radius:6px;padding:12px 16px;font-size:13px}.delivery-notice dl{flex-wrap:wrap;gap:8px 24px;margin:12px 0 0;display:flex}.delivery-notice dl>div{gap:8px;display:flex}.delivery-notice dd{margin:0;font-weight:600}.delivery-chain{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:12px;min-width:0;overflow:hidden}.delivery-chain-toolbar{border-bottom:1px solid var(--pw-line);padding:16px}.delivery-chain-toolbar h3{margin-right:auto}.delivery-filters{border-bottom:1px solid var(--pw-line);flex-wrap:wrap;gap:8px;padding:12px 16px;display:flex}.delivery-filters label{flex:1;align-items:center;gap:8px;min-width:160px;display:flex}.delivery-filters input{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:6px;width:100%;min-width:0;padding:10px 8px}.delivery-map-scroll{overscroll-behavior:contain;max-height:540px;overflow:auto}.delivery-map{width:960px;min-height:172px;position:relative}.delivery-map-heading{color:var(--pw-muted);font-size:12px;font-weight:500;position:absolute;top:16px}.delivery-map svg{color:var(--pw-muted);pointer-events:none;position:absolute;inset:0}.delivery-map svg>path{fill:none;stroke:currentColor;stroke-width:1px;opacity:.3}.delivery-map svg>path.is-related{stroke-width:2px;opacity:1}.delivery-map .delivery-map-node{text-align:left;background:var(--pw-card);border-radius:12px;gap:8px;width:280px;height:100px;padding:12px;display:grid;position:absolute}.delivery-map-node>span{color:var(--pw-muted);justify-content:space-between;align-items:center;font-size:11px;display:flex}.delivery-map-node>strong{text-overflow:ellipsis;white-space:nowrap;font-size:13px;overflow:hidden}.delivery-map-node>small{color:var(--pw-muted);white-space:nowrap;text-overflow:ellipsis;font-size:11px;overflow:hidden}.delivery-review em{color:var(--pw-muted);font-size:11px;font-style:normal}.delivery-review em[data-state=blocked],.delivery-review em[data-state=waiting]{color:var(--pw-amber,#a96500)}.delivery-node-list,.delivery-relations{margin:0;padding:0;list-style:none}.delivery-node-list li+li{border-top:1px solid var(--pw-line)}.delivery-node-list button{text-align:left;border-radius:0;grid-template-columns:88px minmax(0,1fr) 120px 72px;align-items:center;gap:12px;width:100%;padding:16px;display:grid}.delivery-node-list strong,.delivery-node-list small{overflow-wrap:anywhere}.delivery-node-list span,.delivery-node-list small{color:var(--pw-muted);font-size:12px}.delivery-node-detail{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:12px;gap:16px;padding:20px;display:grid}.delivery-node-detail header{gap:8px;display:grid}.delivery-node-detail header>span,.delivery-node-detail header>p,.delivery-source-actions p{color:var(--pw-muted);font-size:12px}.delivery-node-detail summary{cursor:pointer;min-height:44px;padding-top:12px}.delivery-node-detail code,.delivery-node-detail details p{overflow-wrap:anywhere;font-size:12px}.delivery-relations{gap:12px;display:grid}.delivery-relations li{border-bottom:1px solid var(--pw-line);padding-bottom:12px}.delivery-relations li>div{grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);align-items:center;gap:8px;display:grid}.delivery-relations button{text-align:left;overflow-wrap:anywhere;font-size:12px}.delivery-relations span{align-items:center;gap:4px;font-size:11px;display:flex}.delivery-relations p{color:var(--pw-muted);padding-top:8px;font-size:12px}.delivery-empty{padding:24px}.delivery-acceptance-contract{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:12px;min-width:0}.delivery-acceptance-contract summary{cursor:pointer;min-height:44px;padding:12px 16px;font-weight:500}.delivery-acceptance-content{gap:16px;padding:0 16px 16px;font-size:14px;display:grid}.delivery-acceptance-content ul{margin:0;padding-left:20px}.delivery-acceptance-content :is(li,dd,code){overflow-wrap:anywhere}.delivery-acceptance-source{gap:8px;margin:0;display:grid}.delivery-acceptance-source>div{grid-template-columns:minmax(100px,1fr) minmax(0,3fr);gap:12px;display:grid}.delivery-acceptance-source dt{color:var(--pw-muted)}.delivery-acceptance-source dd{margin:0}.delivery-acceptance-content code{font-family:var(--font-mono);font-size:12px}.delivery-acceptance-tasks{gap:12px;display:grid}.delivery-acceptance-content details{border-top:1px solid var(--pw-line)}.delivery-acceptance-content details summary{padding-left:0}.delivery-acceptance-content a{color:var(--color-link,#0070f3);text-decoration:underline}.delivery-acceptance-content a:focus-visible{outline:2px solid var(--color-link,#0070f3);outline-offset:3px}@media (width<=640px){.delivery-review{gap:16px}.delivery-review-toolbar>div{width:100%}.delivery-review-toolbar button{flex:1;justify-content:center;font-size:12px}.delivery-filters label{flex-basis:100%}.delivery-filters select{flex:1;min-width:0}.delivery-node-list button{grid-template-columns:minmax(0,1fr) auto;gap:8px}.delivery-node-list strong{grid-column:1/-1}.delivery-relations li>div{grid-template-columns:minmax(0,1fr)}.delivery-node-detail{padding:16px}}.delivery-notice summary{cursor:pointer;min-height:24px}.personal-goal-view-panel{min-width:0}.personal-goal-view-panel[hidden]{display:none}.personal-goal-view-panel[data-goal-panel=tasks]{height:100%}.goal-overview{gap:24px;min-width:0;display:grid}.goal-overview h2,.goal-overview h3,.goal-overview p{margin:0}.goal-overview h2{font-size:20px;font-weight:600}.goal-overview h3{font-size:14px;font-weight:600}.goal-overview button{border:1px solid var(--pw-line);background:var(--pw-card);min-height:40px;color:var(--pw-text);font:inherit;cursor:pointer;text-align:left;border-radius:6px;align-items:center;gap:8px;padding:8px 12px;display:inline-flex}.goal-overview button:focus-visible{outline:2px solid var(--pw-blue);outline-offset:3px}.goal-overview-heading,.goal-overview-summary header{justify-content:space-between;align-items:center;gap:16px;display:flex}.goal-overview-heading button,.goal-overview-summary header span{color:var(--pw-muted);font-size:12px}.goal-overview-summary{gap:20px;display:grid}.goal-overview-summary.has-attention{grid-template-columns:1fr 1fr}.goal-overview-summary>section{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:12px;align-content:start;gap:16px;min-width:0;padding:20px;display:grid}.goal-overview-summary p,.goal-overview-source-note{color:var(--pw-muted);font-size:13px;line-height:1.6}.goal-overview-summary strong,.goal-overview-summary p,.goal-overview-summary button span{overflow-wrap:anywhere}.goal-overview-summary ul{margin:0;padding:0;list-style:none}.goal-overview-summary li+li{margin-top:8px}.goal-overview-summary li button{justify-content:space-between;width:100%;display:flex}.goal-overview-summary .goal-overview-run{grid-template-columns:1fr auto;gap:4px 12px;display:grid}.goal-overview-run small{color:var(--pw-muted);font-size:12px}.goal-overview-run strong{grid-row:2;font-size:13px}.goal-overview-run svg{grid-area:1/2/3}.goal-overview-usage{border-block:1px solid var(--pw-line);flex-wrap:wrap;align-items:center;gap:12px 24px;padding-block:12px;display:flex}.goal-overview-usage h3{color:var(--pw-muted);font-size:12px;font-weight:400}.goal-overview-usage dl{flex-wrap:wrap;gap:12px 24px;margin:0;display:flex}.goal-overview-usage dl>div{align-items:baseline;gap:8px;font-size:12px;display:flex}.goal-overview-usage dt{color:var(--pw-muted)}.goal-overview-usage dd{font-variant-numeric:tabular-nums;margin:0}@media (width<=640px){.goal-overview-summary.has-attention{grid-template-columns:1fr}}.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-title p.personal-manager-execution{flex-wrap:wrap;align-items:center;gap:6px;display:flex}.personal-execution-chip{border:1px solid var(--pw-line);background:var(--pw-card);border-radius:999px;flex:none;align-items:center;gap:6px;padding:0 8px;font-family:SFMono-Regular,Consolas,monospace;font-size:11px;line-height:18px;display:inline-flex}.personal-execution-chip-endpoint{color:var(--pw-text);font-weight:650}.personal-execution-chip-kind{color:var(--pw-faint)}.personal-execution-chip-model,.personal-execution-chip-budget{color:var(--pw-muted)}.personal-execution-chip.is-unavailable{border-color:var(--pw-amber);background:var(--pw-amber-bg)}.personal-execution-chip.is-unavailable .personal-execution-chip-endpoint,.personal-execution-chip.is-unavailable .personal-execution-chip-kind,.personal-execution-chip.is-unavailable .personal-execution-chip-model,.personal-execution-chip.is-unavailable .personal-execution-chip-budget{color:var(--pw-amber)}@media (width<=640px){.personal-channel-header:has(.personal-execution-chip-budget) .personal-channel-title{display:contents}.personal-channel-header:has(.personal-execution-chip-budget) .personal-channel-title h1{grid-area:1/2}.personal-channel-header:has(.personal-execution-chip-budget) .personal-channel-actions{grid-area:1/3}.personal-channel-header:has(.personal-execution-chip-budget) p.personal-manager-execution{grid-area:2/1/auto/-1;overflow:visible}.personal-channel-header:has(.personal-execution-chip-budget) .personal-execution-chip{border-radius:6px;flex-wrap:wrap;gap:0 6px;max-width:100%}}.personal-execution-note{color:var(--pw-muted);text-overflow:ellipsis;font-size:11px;overflow:hidden}.personal-execution-rule-note{color:var(--pw-faint);text-overflow:ellipsis;font-size:11px;overflow:hidden}.personal-workspace-shell[data-pw-theme=brutal] .personal-execution-chip{border-color:#141414;border-radius:4px}.personal-channel-actions{flex:none;align-items:center;gap:9px;display:flex}.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-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[data-active-goal-view=tasks]:has(.personal-task-kanban){padding-inline:max(26px,50vw - 770px)}.personal-channel-scroll[data-active-goal-view=tasks]:has(.personal-task-board){overflow:hidden}.personal-manager-greeting{align-items:center;gap:14px;margin-bottom:16px;padding:18px 20px;display:flex}.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(auto-fit,minmax(min(100%,240px),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:0;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{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{background:var(--pw-amber)}.personal-home-lane.is-running>header i{background:var(--pw-green)}.personal-home-lane.is-observing>header i{background:var(--pw-blue)}.personal-home-lane.is-scheduled>header 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-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{gap:3px;min-width:0;display:grid}.personal-row-copy strong,.personal-row-copy small,.personal-row-copy span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.personal-row-copy strong{font-size:13.5px;font-weight:600}.personal-row-copy 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-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-return-delivery{color:var(--pw-muted);margin-top:7px;font-size:11px;font-weight:600;display:inline-block}.personal-return-delivery.is-delivered{color:var(--pw-green)}.personal-return-delivery.is-verification_required{color:var(--pw-blue-ink)}.personal-return-delivery.is-explicit_unverified{color:var(--pw-amber)}.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);height:100dvh;min-height:0;color:var(--pw-text);grid-template-rows:minmax(0,1fr);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;overflow:hidden}.personal-settings-sidebar{overscroll-behavior:contain;scrollbar-gutter:stable;border-right:1px solid var(--pw-line);background:#f5f3ee;flex-direction:column;gap:14px;min-width:0;height:100%;min-height:0;padding:18px 14px;display:flex;position:relative;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-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-body{overscroll-behavior:contain;scrollbar-gutter:stable;min-width:0;min-height:0;padding:30px clamp(24px,5vw,72px);overflow:auto}.personal-settings-body:has(>.personal-capability-settings){grid-template-rows:auto minmax(0,1fr);display:grid;overflow:hidden}.personal-settings-body>.personal-settings-header{min-width:0}.personal-settings-page *,.personal-settings-page :before,.personal-settings-page :after{box-sizing:border-box}.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:60px;color:inherit;cursor:pointer;text-align:left;background:#fff;border-radius:12px;grid-template-columns:34px minmax(0,1fr);align-items:center;gap: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:center;font-size:13px}.personal-settings-theme-swatch{border:1px solid var(--pw-line-strong);border-radius:10px;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{grid-template-columns:repeat(2,minmax(0,1fr));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-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-route-readiness{background:var(--pw-amber-bg);color:var(--pw-amber);border:1px solid #ead49a;border-radius:10px;align-items:center;gap:8px;margin:0 0 12px;padding:10px 12px;font-size:12px;font-weight:650;line-height:1.5;display:flex}.personal-lark-route-readiness svg{flex:none}.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{grid-template-rows:auto minmax(0,1fr);gap:16px;width:100%;min-width:0;max-width:1050px;min-height:0;display:grid;overflow:hidden}.personal-capability-body{flex-direction:column;gap:16px;min-width:0;min-height:0;display:flex;overflow:hidden}.personal-capability-body>.personal-capability-layout{flex:auto}.personal-provider-settings{width:100%;min-width:0;max-width:1050px}.personal-provider-settings>.personal-operator-credential{margin-top:0}.personal-capability-scope-note{overscroll-behavior:contain;max-height:120px;color:var(--pw-muted);padding:12px 0;overflow:auto}.personal-capability-scope-note summary{cursor:pointer;align-items:center;gap:8px;font-size:12px;display:flex}.personal-capability-scope-note p{padding:10px 0 0 25px}.personal-capability-scope-note svg{flex:none;margin-top:2px}.personal-operator-credential{border:1px solid var(--pw-border);background:var(--pw-surface);border-radius:10px;gap:12px;margin:16px 0 24px;padding:16px;display:grid}.personal-operator-credential>header{grid-template-columns:auto 1fr auto;align-items:start;gap:10px;display:grid}.personal-operator-credential>header strong{font-size:13px;display:block}.personal-operator-credential>header p{color:var(--pw-muted);margin:4px 0 0;font-size:12px;line-height:1.5}.personal-operator-credential-status{color:var(--pw-muted);font-family:var(--pw-font-mono);font-size:11px}.personal-operator-credential-readback{gap:6px;margin:0;font-size:12px;display:grid}.personal-operator-credential-readback>div{grid-template-columns:140px 1fr;gap:10px;display:grid}.personal-operator-credential-readback dt{color:var(--pw-muted)}.personal-operator-credential-readback dd{overflow-wrap:anywhere;margin:0}.personal-operator-credential label{gap:4px;font-size:12px;display:grid}.personal-operator-credential input{border:1px solid var(--pw-border);background:var(--pw-canvas);color:inherit;border-radius:8px;padding:7px 9px;font-size:12px}.personal-operator-credential input:disabled{opacity:.6}.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:220px minmax(0,1fr);align-items:stretch;gap:24px;min-width:0;min-height:0;display:grid;overflow:hidden}.personal-capability-list{overscroll-behavior:contain;scrollbar-gutter:stable;align-content:start;gap:6px;min-height:0;padding:3px;display:grid;overflow-y:auto}.personal-capability-list button{min-height:44px;color:var(--pw-text);cursor:pointer;text-align:left;background:#fff;border:1px solid #0000;border-radius:6px;justify-content:space-between;align-items:center;gap:8px;padding:10px 12px;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 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-list strong{overflow-wrap:anywhere;font-size:13px;font-weight:500;line-height:1.5}.personal-capability-detail{overscroll-behavior:contain;scrollbar-gutter:stable;border:1px solid var(--pw-line);background:#fff;border-radius:14px;align-self:start;min-width:0;min-height:0;max-height:100%;overflow:auto}.personal-capability-detail>header{border-bottom:1px solid var(--pw-line);align-items:flex-start;gap:12px;padding:24px;display:flex}.personal-capability-detail>header>div{flex:1;min-width:0}.personal-capability-help{color:var(--pw-muted);margin-top:8px;font-size:12px}.personal-capability-help summary{cursor:pointer}.personal-capability-help p{padding-top:12px}.personal-capability-help dl{gap:12px;margin-bottom:0;display:grid}.personal-capability-help dt{color:var(--pw-text);font-weight:500}.personal-capability-help dd{margin:4px 0 0;line-height:1.6}.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:20px 24px;padding:12px;display:flex}.personal-capability-heading-row{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:8px 16px;display:flex}.personal-capability-heading-row .personal-capability-effective-source{color:var(--pw-muted);align-items:center;gap:6px;margin:0;display:flex}.personal-capability-effective-source span{color:var(--pw-muted);flex-wrap:wrap;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-linked-setting{border:1px solid var(--pw-line);background:var(--pw-bg);border-radius:10px;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:16px;margin:0 24px 20px;padding:14px;display:grid}.personal-capability-linked-setting>div{gap:4px;display:grid}.personal-capability-linked-setting strong{font-size:12px}.personal-capability-linked-setting .personal-notification-toggle{justify-self:end;min-height:44px}.personal-capability-linked-setting .personal-notification-error{grid-column:1/-1}.personal-capability-behavior-note{border:1px solid var(--pw-line);background:var(--pw-amber-bg);color:var(--pw-amber);border-radius:6px;align-items:flex-start;gap:10px;margin:16px 24px;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:flex-end;align-items:center;gap:12px;margin:8px 24px 0;font-size:11px;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:hover{background:var(--pw-blue-soft);color:var(--pw-text)}.personal-capability-editor-mode button:disabled{cursor:not-allowed;opacity:.45}.personal-capability-field-summary{padding:20px 24px 24px}.personal-capability-field-summary .personal-capability-fields{margin-top:0}.personal-capability-fields{border:0;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:0;padding:0;display:grid}.personal-report-schedule{grid-column:1/-1;grid-template-columns:repeat(auto-fit,minmax(min(180px,100%),1fr));gap:12px;min-width:0;display:grid}.personal-report-schedule p{color:var(--pw-muted);overflow-wrap:anywhere;grid-column:1/-1;margin:0;font-size:12px}.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 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{border-bottom:1px solid var(--pw-line);grid-column:1/-1;grid-template-columns:minmax(0,1fr) auto;align-items:center;min-height:48px;padding-bottom:12px}.personal-capability-enabled-row{border-bottom:1px solid var(--pw-line);grid-column:1/-1;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:16px;min-width:0;min-height:60px;padding-bottom:12px;display:grid}.personal-capability-enabled-row>.is-boolean{display:contents}.personal-capability-enabled-row>.is-boolean>span{grid-area:1/1}.personal-capability-enabled-row>.is-boolean>input{grid-area:1/3}.personal-capability-enabled-row>.personal-capability-edit-json{grid-area:1/2}.personal-capability-edit-json{min-height:44px;color:var(--pw-muted);font:inherit;cursor:pointer;background:0 0;border:0;border-radius:6px;flex:none;align-items:center;gap:6px;padding:0 8px;font-size:11px;display:inline-flex}.personal-capability-edit-json:hover{background:var(--pw-blue-soft);color:var(--pw-text)}.personal-capability-edit-json:disabled{cursor:not-allowed;opacity:.45}.personal-capability-fields .is-boolean input{appearance:none;border:1px solid var(--pw-line-strong);background:var(--pw-line);cursor:pointer;border-radius:999px;width:40px;height:24px;margin:0;padding:2px}.personal-capability-fields .is-boolean input:before{content:"";background:#fff;border-radius:50%;width:18px;height:18px;display:block}.personal-capability-fields .is-boolean input:checked{background:var(--pw-text)}.personal-capability-fields .is-boolean input:checked:before{transform:translate(16px)}.personal-capability-fields .is-boolean input:focus-visible{outline:2px solid var(--pw-blue);outline-offset:3px}.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,.personal-operator-credential-actions{border-top:1px solid var(--pw-line);background:0 0;justify-content:flex-end;gap:9px;padding:14px 18px;display:flex}.personal-capability-actions button,.personal-operator-credential-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,.personal-operator-credential-actions button.is-primary{border-color:var(--pw-blue);background:var(--pw-blue);color:#fff}.personal-capability-actions button.is-danger,.personal-operator-credential-actions button.is-danger{color:var(--pw-red);align-items:center;gap:6px;margin-right:auto;display:inline-flex}.personal-capability-actions button:disabled,.personal-operator-credential-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[data-active-goal-view=tasks]: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[data-active-goal-view=tasks] .is-list-view){flex-wrap:wrap}.personal-channel-header:has(~.personal-channel-scroll[data-active-goal-view=tasks] .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 .personal-task-reply-preview{min-width:0;overflow:hidden}.personal-task-chat-receipt .personal-task-reply-preview .personal-md{margin:0}.personal-task-chat-receipt .personal-task-reply-preview p{color:var(--pw-text);text-overflow:ellipsis;white-space:nowrap;margin:3px 0;font-size:12px;line-height:1.4;display:block;overflow:hidden}.personal-task-chat-receipt footer{gap:6px;display:flex}.personal-task-chat-receipt footer button{min-height:36px;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:6px 10px;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[data-active-goal-view=tasks]: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 strong{font-size:16px;font-weight:600;line-height:24px}.personal-manager-conversation-tray>header small{color:var(--pw-faint);font-size:12px;font-weight:500;line-height:16px}.personal-manager-conversation-actions{align-items:center;gap:8px;display:flex}.personal-manager-conversation-btn{min-height:32px;color:var(--pw-blue-ink);cursor:pointer;background:#f4f7fe;border:1px solid #b9c9ee;border-radius:8px;align-items:center;gap:5px;padding:5px 10px;font-size:12px;font-weight:600;line-height:16px;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{min-height:32px;color:var(--pw-blue);cursor:pointer;background:0 0;border:0;border-radius:7px;align-items:center;padding:5px 8px;font-size:14px;font-weight:500;line-height:20px;transition:background .12s;display:inline-flex}.personal-manager-conversation-link:hover{background:var(--pw-blue-soft)}.personal-manager-conversation-close{width:32px;height:32px;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:10px;padding:10px 12px;font-size:14px;line-height:20px;display:grid}.personal-manager-conversation-messages article.is-user{background:#edf3ff}.personal-manager-conversation-messages article strong{color:var(--pw-muted);font-size:12px;font-weight:500;line-height:16px}.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:14px;line-height:20px}.personal-manager-conversation-bubble small{color:var(--pw-blue);margin-top:4px;font-size:12px;line-height:16px;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:disabled{opacity:.45;cursor:default}.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: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 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-context-drawer .personal-team-plan-result{border-color:var(--pw-line);background:var(--pw-card)}.personal-context-drawer .personal-team-plan-result h3{margin:0;font-size:18px;font-weight:600}.personal-context-drawer .personal-team-plan-result>p{color:var(--pw-muted);margin:16px 0 0;font-weight:400}.personal-team-plan-result .personal-team-plan-assignments{gap:16px;margin:20px 0}.personal-team-plan-result .personal-team-plan-assignments>div{grid-template-columns:minmax(0,1fr);gap:4px;font-size:13px}.personal-team-plan-result .personal-team-plan-assignments dt{color:var(--pw-muted);font-size:12px}.personal-team-plan-result .is-pending dd{color:var(--pw-muted)}.personal-team-plan-result details{border-top:1px solid var(--pw-line);margin-top:16px;padding-top:12px}.personal-team-plan-result summary{cursor:pointer;color:var(--pw-muted);font-size:12px}.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 ul.personal-md-list{list-style-type:disc}.personal-md ol.personal-md-list{list-style-type:decimal}.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-channel-title p{max-width:260px}}@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]{z-index:30;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}}@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-title p.personal-manager-execution{display:flex}.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-tabs{order:4;grid-column:1/-1;align-self:auto;margin-left:0;overflow-x:auto}.personal-channel-scroll,.personal-composer-wrap{padding-left:14px;padding-right:14px}.personal-channel-scroll[data-active-goal-view=tasks]: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{flex-wrap:nowrap;overflow-x:auto}.personal-quick-prompts button{flex:none;min-height:36px}.personal-manager-conversation-tray>header{flex-wrap:wrap;align-items:flex-start}.personal-manager-conversation-actions{justify-content:flex-end;width:100%}.personal-manager-conversation-messages article{grid-template-columns:minmax(0,1fr);gap:4px}.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-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,.personal-capability-linked-setting{grid-template-columns:minmax(0,1fr)}.personal-capability-linked-setting .personal-notification-toggle{justify-self:start}.personal-capability-layout{grid-template-rows:auto minmax(0,1fr)}.personal-capability-list{min-width:0;max-height:90px;padding:3px;display:flex;overflow-x:auto}.personal-capability-list button{flex:0 0 180px}.personal-task-chat-icon{width:32px;height:32px}.personal-task-chat-receipt footer{flex-wrap:wrap;grid-column:1/-1;justify-content:flex-end}.personal-task-chat-receipt footer button{min-height:44px}.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-rows:auto minmax(0,1fr);grid-template-columns:minmax(0,1fr)}.personal-settings-sidebar{border-right:0;border-bottom:1px solid var(--pw-line);gap:10px;height:auto;max-height:30dvh;padding:12px 14px;position:static;overflow:auto}.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-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:0;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-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:#171717;box-shadow:none;background:#fff;border-color:#dedede;border-radius:6px}.personal-workspace-shell[data-pw-theme=loopx] .personal-quick-prompts button:hover,.personal-workspace-shell[data-pw-theme=loopx] .personal-quick-prompts button:hover{color:#171717;box-shadow:none;background:#f2f2f2;border-color:#a1a1a1}.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 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<=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-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-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}.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}}.personal-goal-acceptance h4{margin:16px 0 8px;font-size:14px}.personal-goal-acceptance .personal-acceptance-observation{border-top:1px solid var(--color-border,#ebebeb);padding:8px 0}.personal-goal-acceptance dd,.personal-goal-acceptance p{overflow-wrap:anywhere}.personal-goal-acceptance details{margin-top:16px}.personal-channel-scroll[data-active-goal-view=overview]{padding-inline:max(24px,50% - 560px)}.personal-channel-header[data-goal-selected=true]{grid-template-columns:auto minmax(0,1fr) auto;gap:4px 16px;padding-block:12px 0;display:grid}.personal-channel-header[data-goal-selected=true] .personal-channel-title{grid-area:1/1/auto/3}.personal-channel-header[data-goal-selected=true] .personal-channel-title h1{white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.personal-channel-header[data-goal-selected=true] .personal-channel-actions{grid-area:1/3}.personal-goal-navigation{grid-area:2/1/auto/-1;justify-content:space-between;align-items:center;gap:16px;min-width:0;display:flex}.personal-channel-header[data-goal-selected=true] .personal-goal-tabs{order:0;margin-left:0;overflow:visible}.personal-channel-actions>.personal-goal-settings-action{justify-content:center;align-items:center;min-width:44px;min-height:44px;display:inline-flex}@media (width<=1050px){.personal-channel-header[data-goal-selected=true] .personal-mobile-menu{grid-area:1/1}.personal-channel-header[data-goal-selected=true] .personal-channel-title{grid-column:2}}@media (width<=720px){.personal-channel-header[data-goal-selected=true]{gap:4px 8px}.personal-goal-navigation{gap:12px}.personal-goal-navigation .personal-agent-select{max-width:132px}.personal-goal-navigation .personal-select-value>small{display:none}.personal-channel-header[data-goal-selected=true] .personal-goal-tabs{gap:8px}.personal-goal-navigation .personal-goal-tabs button{min-width:44px;padding-inline:0}.personal-goal-navigation .personal-read-only-source{max-width:132px}.personal-channel-scroll[data-active-goal-view=overview]{padding-inline:14px}}.personal-channel:has(>.goal-loopx-mode){grid-template-rows:auto auto minmax(0,1fr) auto}.personal-run-row{grid-template-columns:38px minmax(0,1fr) auto 16px}.personal-activity-summary{border-bottom:1px solid var(--pw-line)}.personal-activity-summary>summary{cursor:pointer;min-height:44px;color:var(--pw-muted);flex-wrap:wrap;align-items:center;gap:10px;font-size:12px;display:flex}.personal-activity-summary>summary:after{content:"+";margin-left:auto}.personal-activity-summary[open]>summary:after{content:"−"}.personal-activity-summary>div{gap:8px;padding:8px 0 16px;display:grid}.personal-composer-tools{margin-bottom:6px}.personal-composer-tools>summary,.personal-runtime-details>summary{cursor:pointer;color:var(--pw-muted);min-height:44px;padding-block:12px;font-size:12px}.personal-composer-tools .personal-quick-prompts{flex-wrap:wrap;overflow:visible}.personal-composer-tools .personal-quick-prompts button{min-height:44px}.personal-runtime-details{position:relative}.personal-runtime-details[open]{padding-bottom:8px}.personal-channel-composer textarea{min-width:0}@media (width<=720px){.personal-run-row{grid-template-columns:32px minmax(0,1fr) auto 16px;gap:8px}.personal-run-row .personal-row-copy{display:grid}.personal-run-row>.personal-row-status{display:inline-flex}.personal-run-row .personal-row-copy strong,.personal-run-row .personal-row-copy small{overflow-wrap:anywhere;white-space:normal}}.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;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@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)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-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}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}} diff --git a/loopx/web/chat/assets/index-YyYQIQ2W.js b/loopx/web/chat/assets/index-i1QlYZUg.js similarity index 76% rename from loopx/web/chat/assets/index-YyYQIQ2W.js rename to loopx/web/chat/assets/index-i1QlYZUg.js index ddb21702a..2685ebf3b 100644 --- a/loopx/web/chat/assets/index-YyYQIQ2W.js +++ b/loopx/web/chat/assets/index-i1QlYZUg.js @@ -28,7 +28,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.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.subagentAppliedRestart":`Applied and verified. The raised Codex child-agent limit takes effect in new Sessions.`,"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.subagentExecutionConfig":`Delegation bindings`,"drawer.subagentExecutionConfigHint":`Optional repo-relative ignored JSON under .loopx/config/. Planning sees only authorized route status; the file remains the execution-grant owner.`,"drawer.subagentExecutionConfigNone":`Not configured`,"drawer.subagentMaxChildren":`Maximum child agents`,"drawer.subagentHostCapacityImplicit":`implicit default`,"drawer.subagentHostCapacityRaise":`Confirming also raises the Codex child-agent limit to at least {required} (currently {configured}). Existing higher values are preserved; new Sessions are required.`,"drawer.subagentHostCapacityReady":`Codex child-agent capacity ({configured}) already satisfies this Goal ({required}).`,"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.overview":`Overview`,"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":`Configure this Goal’s capabilities`,"header.goalNavigation":`Goal navigation`,"header.goalView":`Goal view`,"header.live":`Live`,"header.manager":`LoopX Manager`,"header.managerDescription":`Your personal workspace across Goals`,"header.managerRuntime":`{profile} · {sandbox}`,"header.managerRuntimeFallback":`Configuration invalid; fell back to {profile} · {sandbox}. Repair it in Machine capabilities.`,"header.managerExecutorKindIndividual":`individual CLI login`,"header.managerExecutorKindManaged":`operator credential`,"header.managerExecutorKindRegistered":`registered endpoint`,"header.managerExecutionUnavailable":`Selected {executor} cannot start here; this channel does not fall back to an individual CLI login.`,"header.managerExecutionUnavailableCredential":`Selected {executor} needs the operator credential {credential} before this channel can start it.`,"header.managerExecutionUnavailableRuntime":`Selected {executor} cannot start here because its runtime is not installed on this machine.`,"header.managerExecutionUnavailableEffort":`Selected {executor} rejected the configured reasoning effort; set a supported effort and reload.`,"header.managerExecutionUnavailableOutputBudget":`Selected {executor} has an invalid per-request output-token limit; set a positive integer and reload.`,"header.managerEndpointStewardDefault":`Runs {executor}, the steward channel's shipped default. Select an executor explicitly to move it.`,"header.managerOutputTokenBudget":`{tokens} tok/request`,"header.managerAllocation":`Selection: {policy} · {reason}`,"header.managerSelectionPreferred":`preferred`,"header.managerSelectionPinned":`pinned`,"header.managerSelectionFlexible":`flexible pool`,"header.managerAllocationUser":`explicit user choice`,"header.managerAllocationPinned":`pinned by machine configuration`,"header.managerAllocationFallback":`primary unavailable; used an eligible fallback`,"header.managerAllocationUnavailable":`no eligible route is currently available`,"header.managerAllocationPrimary":`primary route is available`,"header.managerAllocationProductDefault":`product default`,"header.managerAllocationService":`service environment override`,"header.managerAllocationConfigured":`configured route`,"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.contextCaptured":`Group context captured`,"lark.health.contextCapturedDetail":`The message is retained as non-authoritative context. It did not start or steer a Manager turn; send a direct @ mention or verified reply when action is required.`,"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.`,"drawer.recoverEditResult":`Recover edit result`,"drawer.retryOriginal":`Retry original operation`,"actionReview.canonical_update_retry":`The edit is not yet verified. Retry this operation to recover its result.`,"actionReview.canonical_update_projection_pending":`The edit was committed; display delivery is pending. Retry this operation to restore the current view.`,"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.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.teamPlan.gapReason.capabilityNotGranted":`Required capability not granted`,"proposal.teamPlan.gapReason.audienceNotAuthorized":`Required access not authorized`,"proposal.teamPlan.pending":`Pending`,"proposal.teamPlan.assignedHint":`Assignment recorded. See the Goal for execution progress.`,"proposal.teamPlan.recoveredHint":`No new tasks created. See the Goal for current progress.`,"proposal.teamPlan.originalPlan":`View original plan`,"proposal.teamPlan.viewResult":`View result`,"proposal.teamPlan.openGoal":`Open Goal`,"proposal.teamPlan.resultTitle":`Assignment result`,"proposal.teamPlan.retry":`Retry assignment`,"proposal.teamPlan.retryHint":`Retry this assignment to recover its result without duplicating tasks.`,"proposal.summary.teamPlan":`Assign {count} tasks for {goal}`,"proposal.impact.teamPlan":`Confirm to assign the ready tasks. Unavailable assignments stay pending.`,"proposal.primary.teamPlan":`Confirm assignment`,"proposal.field.laneGaps":`Unstaffed lanes`,"proposal.field.quotaEnvelope":`Quota envelope`,"proposal.teamPlan.acceptanceShort":`acceptance reference`,"proposal.teamPlan.advisory":`planning context; not enforced by this confirmation`,"proposal.teamPlan.appliedPartially":`{created} assigned · {gaps} pending`,"proposal.teamPlan.appliedAlreadyPresent":`Original assignment recovered`,"proposal.teamPlan.applied":`{count} tasks assigned`,"proposal.teamPlan.gapLane":`unstaffed`,"proposal.teamPlan.laneUnstaffed":`staffing gap, no first Todo`,"proposal.teamPlan.gapReason.agentNotRegistered":`the Agent is not registered for this Goal`,"proposal.teamPlan.gapReason.actionKindNotSupported":`this host does not ship that action kind`,"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.credentialTitle":`Operator model credential`,"machine.credentialDescription":`The key and endpoint the steward channel and the managed host authenticate with on this machine. The key is stored in its own owner-only file, never in the machine configuration that is projected here, and it is never read back — only its fingerprint is.`,"machine.credentialApiKey":`API key`,"machine.credentialApiKeyPlaceholder":`Paste a key to store it; leave blank to keep the stored one`,"machine.credentialBaseUrl":`Endpoint base URL`,"machine.credentialBaseUrlPlaceholder":`https://endpoint.example/v1 (blank keeps the endpoint default)`,"machine.credentialStore":`Store credential`,"machine.credentialClearKey":`Clear stored key`,"machine.credentialClearUrl":`Clear stored endpoint`,"machine.credentialConfigured":`configured`,"machine.credentialAbsent":`not configured`,"machine.credentialInvalid":`unreadable — repair required`,"machine.credentialSourceMachine":`this machine's stored credential`,"machine.credentialSourceEnvironment":`the service environment`,"machine.credentialSourceUnset":`no source`,"machine.credentialFingerprint":`fingerprint`,"machine.credentialStored":`Credential stored. The next turn uses it; no restart is needed.`,"machine.credentialCleared":`Stored credential cleared.`,"machine.credentialError":`The credential could not be stored.`,"machine.credentialBoundary":`Storing a credential grants no authority: it does not select an executor, model, or reasoning effort.`,"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.invalidStoredConfiguration":`Stored machine configuration needs repair`,"machine.invalidStoredConfigurationDescription":`Stored values are hidden because they no longer match the installed contract. Review the affected capability, then Preview and Apply its replacement; unrelated namespaces remain unchanged.`,"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.larkInboxNotificationDescription":`This switch controls automatic group messages for human gates. Incoming Lark events remain available when it is off.`,"capabilities.larkInboxNotificationSetting":`Human-gate group notifications`,"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.hostCapacityPartialWrite":`Goal value saved; Codex host capacity still needs alignment`,"capabilities.hostCapacityPartialWriteDescription":`The Goal configuration and shared projection were verified, but the Codex host limit was not updated. Refresh the preview after repairing the host configuration; do not resubmit the Goal change.`,"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.modelProvider":`Model provider`,"settings.globalCapabilities":`Global capabilities`,"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":`New conversation reply`,"tasks.chatPending":`Conversation in progress`,"tasks.chatReturn":`Collaboration receipt`,"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":`Draft a 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…`,"returnDelivery.queued":`Return queued`,"returnDelivery.verifying":`Verifying delivery without resending`,"returnDelivery.delivered":`Delivered to the original audience`,"returnDelivery.reconciled":`Delivery verified after recovery`,"returnDelivery.unverified":`Delivery remains explicitly unverified`,"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.blockers":`看阻塞`,"composer.attachImageHint":`选择、粘贴或拖入图片`,"composer.clarifyDefer":`暂缓 Todo 需要可自动判断的恢复条件。请补充 todo_done:、pr_merged:[owner/repo]#、capacity_available: 或 resume_at:<带时区 RFC3339 时间>。`,"composer.clarifySingleAction":`这句话包含多个可能修改状态的操作。请一次描述一项操作,我会逐项展示确认预览。`,"composer.evidence":`查证据`,"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.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.subagentAppliedRestart":`Applied and verified. The raised Codex child-agent limit takes effect in new Sessions.`,"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.subagentExecutionConfig":`Delegation bindings`,"drawer.subagentExecutionConfigHint":`Optional repo-relative ignored JSON under .loopx/config/. Planning sees only authorized route status; the file remains the execution-grant owner.`,"drawer.subagentExecutionConfigNone":`Not configured`,"drawer.subagentMaxChildren":`Maximum child agents`,"drawer.subagentHostCapacityImplicit":`implicit default`,"drawer.subagentHostCapacityRaise":`Confirming also raises the Codex child-agent limit to at least {required} (currently {configured}). Existing higher values are preserved; new Sessions are required.`,"drawer.subagentHostCapacityReady":`Codex child-agent capacity ({configured}) already satisfies this Goal ({required}).`,"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.taskPriority":`Priority`,"drawer.taskPriorityChoose":`Choose priority`,"drawer.taskPriorityClear":`No priority`,"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.overview":`Overview`,"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":`Configure this Goal’s capabilities`,"header.goalNavigation":`Goal navigation`,"header.goalView":`Goal view`,"header.live":`Live`,"header.manager":`LoopX Manager`,"header.managerDescription":`Your personal workspace across Goals`,"header.managerRuntime":`{profile} · {sandbox}`,"header.managerRuntimeFallback":`Configuration invalid; fell back to {profile} · {sandbox}. Repair it in Machine capabilities.`,"header.managerExecutorKindIndividual":`individual CLI login`,"header.managerExecutorKindManaged":`operator credential`,"header.managerExecutorKindRegistered":`registered endpoint`,"header.managerExecutionUnavailable":`Selected {executor} cannot start here; this channel does not fall back to an individual CLI login.`,"header.managerExecutionUnavailableCredential":`Selected {executor} needs the operator credential {credential} before this channel can start it.`,"header.managerExecutionUnavailableRuntime":`Selected {executor} cannot start here because its runtime is not installed on this machine.`,"header.managerExecutionUnavailableEffort":`Selected {executor} rejected the configured reasoning effort; set a supported effort and reload.`,"header.managerExecutionUnavailableOutputBudget":`Selected {executor} has an invalid per-request output-token limit; set a positive integer and reload.`,"header.managerEndpointStewardDefault":`Runs {executor}, the steward channel's shipped default. Select an executor explicitly to move it.`,"header.managerOutputTokenBudget":`{tokens} tok/request`,"header.managerAllocation":`Selection: {policy} · {reason}`,"header.managerSelectionPreferred":`preferred`,"header.managerSelectionPinned":`pinned`,"header.managerSelectionFlexible":`flexible pool`,"header.managerAllocationUser":`explicit user choice`,"header.managerAllocationPinned":`pinned by machine configuration`,"header.managerAllocationFallback":`primary unavailable; used an eligible fallback`,"header.managerAllocationUnavailable":`no eligible route is currently available`,"header.managerAllocationPrimary":`primary route is available`,"header.managerAllocationProductDefault":`product default`,"header.managerAllocationService":`service environment override`,"header.managerAllocationConfigured":`configured route`,"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.contextCaptured":`Group context captured`,"lark.health.contextCapturedDetail":`The message is retained as non-authoritative context. It did not start or steer a Manager turn; send a direct @ mention or verified reply when action is required.`,"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.`,"drawer.recoverEditResult":`Recover edit result`,"drawer.retryOriginal":`Retry original operation`,"actionReview.canonical_update_retry":`The edit is not yet verified. Retry this operation to recover its result.`,"actionReview.canonical_update_projection_pending":`The edit was committed; display delivery is pending. Retry this operation to restore the current view.`,"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.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.teamPlan.gapReason.capabilityNotGranted":`Required capability not granted`,"proposal.teamPlan.gapReason.audienceNotAuthorized":`Required access not authorized`,"proposal.teamPlan.pending":`Pending`,"proposal.teamPlan.assignedHint":`Assignment recorded. See the Goal for execution progress.`,"proposal.teamPlan.recoveredHint":`No new tasks created. See the Goal for current progress.`,"proposal.teamPlan.originalPlan":`View original plan`,"proposal.teamPlan.viewResult":`View result`,"proposal.teamPlan.openGoal":`Open Goal`,"proposal.teamPlan.resultTitle":`Assignment result`,"proposal.teamPlan.retry":`Retry assignment`,"proposal.teamPlan.retryHint":`Retry this assignment to recover its result without duplicating tasks.`,"proposal.summary.teamPlan":`Assign {count} tasks for {goal}`,"proposal.impact.teamPlan":`Confirm to assign the ready tasks. Unavailable assignments stay pending.`,"proposal.primary.teamPlan":`Confirm assignment`,"proposal.field.laneGaps":`Unstaffed lanes`,"proposal.field.quotaEnvelope":`Quota envelope`,"proposal.teamPlan.acceptanceShort":`acceptance reference`,"proposal.teamPlan.advisory":`planning context; not enforced by this confirmation`,"proposal.teamPlan.appliedPartially":`{created} assigned · {gaps} pending`,"proposal.teamPlan.appliedAlreadyPresent":`Original assignment recovered`,"proposal.teamPlan.applied":`{count} tasks assigned`,"proposal.teamPlan.gapLane":`unstaffed`,"proposal.teamPlan.laneUnstaffed":`staffing gap, no first Todo`,"proposal.teamPlan.gapReason.agentNotRegistered":`the Agent is not registered for this Goal`,"proposal.teamPlan.gapReason.actionKindNotSupported":`this host does not ship that action kind`,"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.credentialTitle":`Operator model credential`,"machine.credentialDescription":`The key and endpoint the steward channel and the managed host authenticate with on this machine. The key is stored in its own owner-only file, never in the machine configuration that is projected here, and it is never read back — only its fingerprint is.`,"machine.credentialApiKey":`API key`,"machine.credentialApiKeyPlaceholder":`Paste a key to store it; leave blank to keep the stored one`,"machine.credentialBaseUrl":`Endpoint base URL`,"machine.credentialBaseUrlPlaceholder":`https://endpoint.example/v1 (blank keeps the endpoint default)`,"machine.credentialStore":`Store credential`,"machine.credentialClearKey":`Clear stored key`,"machine.credentialClearUrl":`Clear stored endpoint`,"machine.credentialConfigured":`configured`,"machine.credentialAbsent":`not configured`,"machine.credentialInvalid":`unreadable — repair required`,"machine.credentialSourceMachine":`this machine's stored credential`,"machine.credentialSourceEnvironment":`the service environment`,"machine.credentialSourceUnset":`no source`,"machine.credentialFingerprint":`fingerprint`,"machine.credentialStored":`Credential stored. The next turn uses it; no restart is needed.`,"machine.credentialCleared":`Stored credential cleared.`,"machine.credentialError":`The credential could not be stored.`,"machine.credentialBoundary":`Storing a credential grants no authority: it does not select an executor, model, or reasoning effort.`,"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.invalidStoredConfiguration":`Stored machine configuration needs repair`,"machine.invalidStoredConfigurationDescription":`Stored values are hidden because they no longer match the installed contract. Review the affected capability, then Preview and Apply its replacement; unrelated namespaces remain unchanged.`,"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.larkInboxNotificationDescription":`This switch controls automatic group messages for human gates. Incoming Lark events remain available when it is off.`,"capabilities.larkInboxNotificationSetting":`Human-gate group notifications`,"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.hostCapacityPartialWrite":`Goal value saved; Codex host capacity still needs alignment`,"capabilities.hostCapacityPartialWriteDescription":`The Goal configuration and shared projection were verified, but the Codex host limit was not updated. Refresh the preview after repairing the host configuration; do not resubmit the Goal change.`,"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.modelProvider":`Model provider`,"settings.globalCapabilities":`Global capabilities`,"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":`New conversation reply`,"tasks.chatPending":`Conversation in progress`,"tasks.chatReturn":`Collaboration receipt`,"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":`Draft a 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…`,"returnDelivery.queued":`Return queued`,"returnDelivery.verifying":`Verifying delivery without resending`,"returnDelivery.delivered":`Delivered to the original audience`,"returnDelivery.reconciled":`Delivery verified after recovery`,"returnDelivery.unverified":`Delivery remains explicitly unverified`,"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.blockers":`看阻塞`,"composer.attachImageHint":`选择、粘贴或拖入图片`,"composer.clarifyDefer":`暂缓 Todo 需要可自动判断的恢复条件。请补充 todo_done:、pr_merged:[owner/repo]#、capacity_available: 或 resume_at:<带时区 RFC3339 时间>。`,"composer.clarifySingleAction":`这句话包含多个可能修改状态的操作。请一次描述一项操作,我会逐项展示确认预览。`,"composer.evidence":`查证据`,"composer.createGoal":`创建新 Goal`,"composer.createGoalDraft":`Goal 草稿`,"composer.createGoalDraftDescription":`补充内容后发送,LoopX 会先展示待确认操作。`,"composer.createGoalDraftLead":`我想创建一个长期 Goal:`,"composer.createGoalTemplate":`我想创建一个长期 Goal: 目标: 完成标准: 执行边界(可选): @@ -50,7 +50,7 @@ Goal: Goal: 频率:每天 停止条件:Goal 完成 -通知:仅在需要我时`,"composer.nextAction":`询问下一步`,"composer.nextActionPrompt":`我现在该做什么?`,"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.subagentAppliedRestart":`已写入并完成读回校验;提升后的 Codex 子 Agent 上限将在新 Session 中生效。`,"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.subagentExecutionConfig":`委托执行绑定`,"drawer.subagentExecutionConfigHint":`可选;填写 .loopx/config/ 下仓库相对、已忽略的 JSON。规划只读取已授权路由状态,执行授权仍由该文件持有。`,"drawer.subagentExecutionConfigNone":`未配置`,"drawer.subagentMaxChildren":`最多子代理数`,"drawer.subagentHostCapacityImplicit":`隐式默认值`,"drawer.subagentHostCapacityRaise":`确认后还会把 Codex 子 Agent 上限从当前 {configured} 提升到至少 {required};已有更高值不会降低,并需新建 Session 生效。`,"drawer.subagentHostCapacityReady":`Codex 子 Agent 容量({configured})已满足该 Goal({required})。`,"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.overview":`概览`,"header.chat":`对话`,"header.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.managerRuntime":`{profile} · {sandbox}`,"header.managerRuntimeFallback":`配置无效,已回退到 {profile} · {sandbox};请在机器能力设置中修复。`,"header.managerExecutorKindIndividual":`个人 CLI 登录`,"header.managerExecutorKindManaged":`operator 凭据`,"header.managerExecutorKindRegistered":`注册端点`,"header.managerExecutionUnavailable":`所选执行器 {executor} 无法在本机启动;该通道不会回落到个人 CLI 登录。`,"header.managerExecutionUnavailableCredential":`所选执行器 {executor} 需要 operator 凭据 {credential},配置后该通道才能启动它。`,"header.managerExecutionUnavailableRuntime":`所选执行器 {executor} 无法在本机启动:本机未安装其 runtime。`,"header.managerExecutionUnavailableEffort":`所选执行器 {executor} 拒绝了当前配置的推理档位;请改为受支持的档位后刷新。`,"header.managerExecutionUnavailableOutputBudget":`所选执行器 {executor} 的每请求输出 token 上限无效;请设置为正整数后刷新。`,"header.managerEndpointStewardDefault":`当前运行 {executor},管家通道的出货默认值;如需改指请显式选择执行器。`,"header.managerOutputTokenBudget":`每次请求 {tokens} token`,"header.managerAllocation":`选择:{policy} · {reason}`,"header.managerSelectionPreferred":`偏好`,"header.managerSelectionPinned":`锁定`,"header.managerSelectionFlexible":`灵活资源池`,"header.managerAllocationUser":`用户明确选择`,"header.managerAllocationPinned":`由本机配置锁定`,"header.managerAllocationFallback":`首选不可用,使用池内合格替代`,"header.managerAllocationUnavailable":`当前没有可用的合格路径`,"header.managerAllocationPrimary":`首选路径可用`,"header.managerAllocationProductDefault":`产品默认路径`,"header.managerAllocationService":`服务环境覆盖`,"header.managerAllocationConfigured":`按已配置路径`,"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":`任务`,"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.contextCaptured":`已捕获群聊上下文`,"lark.health.contextCapturedDetail":`该消息仅作为非权威上下文保留,不会启动或引导管家 Turn;需要执行时请直接 @ 机器人或回复机器人的消息。`,"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":`操作结果已经记录,但原群结果卡尚未通过回读核验。`,"drawer.recoverEditResult":`恢复编辑结果`,"drawer.retryOriginal":`重试原操作`,"actionReview.canonical_update_retry":`编辑结果尚未确认。重试此操作以恢复原结果。`,"actionReview.canonical_update_projection_pending":`编辑已提交,展示尚未同步。重试此操作以恢复当前视图。`,"actionReview.apply_failed":`执行未完成。请检查失败原因并重新生成预览后再试。`,"actionReview.inactive_proposal":`此提案当前不可执行。请重新检查后再继续。`,"proposal.gate.default":`需要宿主确认`,"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.teamPlan.gapReason.capabilityNotGranted":`尚未授予所需能力`,"proposal.teamPlan.gapReason.audienceNotAuthorized":`尚未获得所需访问权限`,"proposal.teamPlan.pending":`待安排`,"proposal.teamPlan.assignedHint":`分配已记录,执行进度请查看目标。`,"proposal.teamPlan.recoveredHint":`未新增任务,当前进度请查看目标。`,"proposal.teamPlan.originalPlan":`查看原计划`,"proposal.teamPlan.viewResult":`查看结果`,"proposal.teamPlan.openGoal":`打开目标`,"proposal.teamPlan.resultTitle":`分配结果`,"proposal.teamPlan.retry":`重试分配`,"proposal.teamPlan.retryHint":`重试会恢复本次分配结果,不会重复创建任务。`,"proposal.summary.teamPlan":`为 {goal} 分配 {count} 项任务`,"proposal.impact.teamPlan":`确认后分配可安排的任务,其余保留为待安排。`,"proposal.primary.teamPlan":`确认分配`,"proposal.field.laneGaps":`未配齐的 lane`,"proposal.field.quotaEnvelope":`配额包络`,"proposal.teamPlan.acceptanceShort":`验收参考`,"proposal.teamPlan.advisory":`计划参考;本次确认不执行该约束`,"proposal.teamPlan.appliedPartially":`已分配 {created} 项,{gaps} 项待安排`,"proposal.teamPlan.appliedAlreadyPresent":`已恢复原分配结果`,"proposal.teamPlan.applied":`已分配 {count} 项任务`,"proposal.teamPlan.gapLane":`待安排`,"proposal.teamPlan.laneUnstaffed":`待安排,尚无任务`,"proposal.teamPlan.gapReason.agentNotRegistered":`尚未加入此目标`,"proposal.teamPlan.gapReason.actionKindNotSupported":`当前环境不支持此任务类型`,"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.credentialTitle":`操作者模型凭据`,"machine.credentialDescription":`管家通道与托管宿主在本机认证用的 key 与 endpoint。key 单独存放于仅属主可读的文件,不会进入这里展示的机器配置,也不会被回读——回读的是它的指纹。`,"machine.credentialApiKey":`API key`,"machine.credentialApiKeyPlaceholder":`粘贴 key 以保存;留空则保留已存的 key`,"machine.credentialBaseUrl":`Endpoint base URL`,"machine.credentialBaseUrlPlaceholder":`https://endpoint.example/v1(留空则使用 endpoint 默认值)`,"machine.credentialStore":`保存凭据`,"machine.credentialClearKey":`清除已存 key`,"machine.credentialClearUrl":`清除已存 endpoint`,"machine.credentialConfigured":`已配置`,"machine.credentialAbsent":`未配置`,"machine.credentialInvalid":`无法读取——需要修复`,"machine.credentialSourceMachine":`本机已存凭据`,"machine.credentialSourceEnvironment":`服务环境变量`,"machine.credentialSourceUnset":`无来源`,"machine.credentialFingerprint":`指纹`,"machine.credentialStored":`凭据已保存。下一轮即生效,无需重启。`,"machine.credentialCleared":`已清除本机存储的凭据。`,"machine.credentialError":`凭据保存失败。`,"machine.credentialBoundary":`保存凭据不授予任何权限:它不会选择执行器、模型或推理强度。`,"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.invalidStoredConfiguration":`已保存的机器配置需要修复`,"machine.invalidStoredConfigurationDescription":`已保存值不再符合当前契约,因此不会在这里显示。请检查已定位的能力,并通过“预览”和“应用”替换它;无关 namespace 保持不变。`,"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.larkInboxNotificationDescription":`此开关只控制遇到人工 Gate 时是否自动发群消息;关闭后仍会保留飞书事件收件箱能力。`,"capabilities.larkInboxNotificationSetting":`Gate 群通知`,"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.hostCapacityPartialWrite":`Goal 值已保存;Codex 宿主容量仍待对齐`,"capabilities.hostCapacityPartialWriteDescription":`Goal 配置与共享投影均已校验,但 Codex 宿主上限尚未更新。修复宿主配置后请重新预览容量对齐,不要重复提交 Goal 变更。`,"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.modelProvider":`模型 Provider 配置`,"settings.globalCapabilities":`全局能力配置`,"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":`对话有新回复`,"tasks.chatPending":`对话处理中`,"tasks.chatReturn":`协作回执`,"tasks.chatPendingDescription":`正在处理;只有经过确认的任务操作才会更新 Tasks。`,"tasks.chatRecent":`最近对话`,"tasks.chatUnchangedDescription":`本次对话没有直接修改 Tasks。需要执行时,可先转成 Task 草稿并确认。`,"tasks.chatViewReply":`查看回复`,"tasks.convertToTask":`转为任务草稿`,"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":`正在整理…`,"returnDelivery.queued":`结论等待回传`,"returnDelivery.verifying":`正在核验送达,不会重复发送`,"returnDelivery.delivered":`已送达原受众`,"returnDelivery.reconciled":`恢复后已核验送达`,"returnDelivery.unverified":`送达仍明确未核验`,"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(` +通知:仅在需要我时`,"composer.nextAction":`询问下一步`,"composer.nextActionPrompt":`我现在该做什么?`,"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.subagentAppliedRestart":`已写入并完成读回校验;提升后的 Codex 子 Agent 上限将在新 Session 中生效。`,"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.subagentExecutionConfig":`委托执行绑定`,"drawer.subagentExecutionConfigHint":`可选;填写 .loopx/config/ 下仓库相对、已忽略的 JSON。规划只读取已授权路由状态,执行授权仍由该文件持有。`,"drawer.subagentExecutionConfigNone":`未配置`,"drawer.subagentMaxChildren":`最多子代理数`,"drawer.subagentHostCapacityImplicit":`隐式默认值`,"drawer.subagentHostCapacityRaise":`确认后还会把 Codex 子 Agent 上限从当前 {configured} 提升到至少 {required};已有更高值不会降低,并需新建 Session 生效。`,"drawer.subagentHostCapacityReady":`Codex 子 Agent 容量({configured})已满足该 Goal({required})。`,"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.taskPriority":`优先级`,"drawer.taskPriorityChoose":`选择优先级`,"drawer.taskPriorityClear":`不设优先级`,"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.overview":`概览`,"header.chat":`对话`,"header.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.managerRuntime":`{profile} · {sandbox}`,"header.managerRuntimeFallback":`配置无效,已回退到 {profile} · {sandbox};请在机器能力设置中修复。`,"header.managerExecutorKindIndividual":`个人 CLI 登录`,"header.managerExecutorKindManaged":`operator 凭据`,"header.managerExecutorKindRegistered":`注册端点`,"header.managerExecutionUnavailable":`所选执行器 {executor} 无法在本机启动;该通道不会回落到个人 CLI 登录。`,"header.managerExecutionUnavailableCredential":`所选执行器 {executor} 需要 operator 凭据 {credential},配置后该通道才能启动它。`,"header.managerExecutionUnavailableRuntime":`所选执行器 {executor} 无法在本机启动:本机未安装其 runtime。`,"header.managerExecutionUnavailableEffort":`所选执行器 {executor} 拒绝了当前配置的推理档位;请改为受支持的档位后刷新。`,"header.managerExecutionUnavailableOutputBudget":`所选执行器 {executor} 的每请求输出 token 上限无效;请设置为正整数后刷新。`,"header.managerEndpointStewardDefault":`当前运行 {executor},管家通道的出货默认值;如需改指请显式选择执行器。`,"header.managerOutputTokenBudget":`每次请求 {tokens} token`,"header.managerAllocation":`选择:{policy} · {reason}`,"header.managerSelectionPreferred":`偏好`,"header.managerSelectionPinned":`锁定`,"header.managerSelectionFlexible":`灵活资源池`,"header.managerAllocationUser":`用户明确选择`,"header.managerAllocationPinned":`由本机配置锁定`,"header.managerAllocationFallback":`首选不可用,使用池内合格替代`,"header.managerAllocationUnavailable":`当前没有可用的合格路径`,"header.managerAllocationPrimary":`首选路径可用`,"header.managerAllocationProductDefault":`产品默认路径`,"header.managerAllocationService":`服务环境覆盖`,"header.managerAllocationConfigured":`按已配置路径`,"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":`任务`,"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.contextCaptured":`已捕获群聊上下文`,"lark.health.contextCapturedDetail":`该消息仅作为非权威上下文保留,不会启动或引导管家 Turn;需要执行时请直接 @ 机器人或回复机器人的消息。`,"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":`操作结果已经记录,但原群结果卡尚未通过回读核验。`,"drawer.recoverEditResult":`恢复编辑结果`,"drawer.retryOriginal":`重试原操作`,"actionReview.canonical_update_retry":`编辑结果尚未确认。重试此操作以恢复原结果。`,"actionReview.canonical_update_projection_pending":`编辑已提交,展示尚未同步。重试此操作以恢复当前视图。`,"actionReview.apply_failed":`执行未完成。请检查失败原因并重新生成预览后再试。`,"actionReview.inactive_proposal":`此提案当前不可执行。请重新检查后再继续。`,"proposal.gate.default":`需要宿主确认`,"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.teamPlan.gapReason.capabilityNotGranted":`尚未授予所需能力`,"proposal.teamPlan.gapReason.audienceNotAuthorized":`尚未获得所需访问权限`,"proposal.teamPlan.pending":`待安排`,"proposal.teamPlan.assignedHint":`分配已记录,执行进度请查看目标。`,"proposal.teamPlan.recoveredHint":`未新增任务,当前进度请查看目标。`,"proposal.teamPlan.originalPlan":`查看原计划`,"proposal.teamPlan.viewResult":`查看结果`,"proposal.teamPlan.openGoal":`打开目标`,"proposal.teamPlan.resultTitle":`分配结果`,"proposal.teamPlan.retry":`重试分配`,"proposal.teamPlan.retryHint":`重试会恢复本次分配结果,不会重复创建任务。`,"proposal.summary.teamPlan":`为 {goal} 分配 {count} 项任务`,"proposal.impact.teamPlan":`确认后分配可安排的任务,其余保留为待安排。`,"proposal.primary.teamPlan":`确认分配`,"proposal.field.laneGaps":`未配齐的 lane`,"proposal.field.quotaEnvelope":`配额包络`,"proposal.teamPlan.acceptanceShort":`验收参考`,"proposal.teamPlan.advisory":`计划参考;本次确认不执行该约束`,"proposal.teamPlan.appliedPartially":`已分配 {created} 项,{gaps} 项待安排`,"proposal.teamPlan.appliedAlreadyPresent":`已恢复原分配结果`,"proposal.teamPlan.applied":`已分配 {count} 项任务`,"proposal.teamPlan.gapLane":`待安排`,"proposal.teamPlan.laneUnstaffed":`待安排,尚无任务`,"proposal.teamPlan.gapReason.agentNotRegistered":`尚未加入此目标`,"proposal.teamPlan.gapReason.actionKindNotSupported":`当前环境不支持此任务类型`,"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.credentialTitle":`操作者模型凭据`,"machine.credentialDescription":`管家通道与托管宿主在本机认证用的 key 与 endpoint。key 单独存放于仅属主可读的文件,不会进入这里展示的机器配置,也不会被回读——回读的是它的指纹。`,"machine.credentialApiKey":`API key`,"machine.credentialApiKeyPlaceholder":`粘贴 key 以保存;留空则保留已存的 key`,"machine.credentialBaseUrl":`Endpoint base URL`,"machine.credentialBaseUrlPlaceholder":`https://endpoint.example/v1(留空则使用 endpoint 默认值)`,"machine.credentialStore":`保存凭据`,"machine.credentialClearKey":`清除已存 key`,"machine.credentialClearUrl":`清除已存 endpoint`,"machine.credentialConfigured":`已配置`,"machine.credentialAbsent":`未配置`,"machine.credentialInvalid":`无法读取——需要修复`,"machine.credentialSourceMachine":`本机已存凭据`,"machine.credentialSourceEnvironment":`服务环境变量`,"machine.credentialSourceUnset":`无来源`,"machine.credentialFingerprint":`指纹`,"machine.credentialStored":`凭据已保存。下一轮即生效,无需重启。`,"machine.credentialCleared":`已清除本机存储的凭据。`,"machine.credentialError":`凭据保存失败。`,"machine.credentialBoundary":`保存凭据不授予任何权限:它不会选择执行器、模型或推理强度。`,"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.invalidStoredConfiguration":`已保存的机器配置需要修复`,"machine.invalidStoredConfigurationDescription":`已保存值不再符合当前契约,因此不会在这里显示。请检查已定位的能力,并通过“预览”和“应用”替换它;无关 namespace 保持不变。`,"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.larkInboxNotificationDescription":`此开关只控制遇到人工 Gate 时是否自动发群消息;关闭后仍会保留飞书事件收件箱能力。`,"capabilities.larkInboxNotificationSetting":`Gate 群通知`,"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.hostCapacityPartialWrite":`Goal 值已保存;Codex 宿主容量仍待对齐`,"capabilities.hostCapacityPartialWriteDescription":`Goal 配置与共享投影均已校验,但 Codex 宿主上限尚未更新。修复宿主配置后请重新预览容量对齐,不要重复提交 Goal 变更。`,"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.modelProvider":`模型 Provider 配置`,"settings.globalCapabilities":`全局能力配置`,"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":`对话有新回复`,"tasks.chatPending":`对话处理中`,"tasks.chatReturn":`协作回执`,"tasks.chatPendingDescription":`正在处理;只有经过确认的任务操作才会更新 Tasks。`,"tasks.chatRecent":`最近对话`,"tasks.chatUnchangedDescription":`本次对话没有直接修改 Tasks。需要执行时,可先转成 Task 草稿并确认。`,"tasks.chatViewReply":`查看回复`,"tasks.convertToTask":`转为任务草稿`,"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":`正在整理…`,"returnDelivery.queued":`结论等待回传`,"returnDelivery.verifying":`正在核验送达,不会重复发送`,"returnDelivery.delivered":`已送达原受众`,"returnDelivery.reconciled":`恢复后已核验送达`,"returnDelivery.unverified":`送达仍明确未核验`,"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) { @@ -121,18 +121,21 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs. `);for(;i>=0;){let e=l.slice(0,i);l=l.slice(i+2);let n=ig(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 Rh(`Agent 事件流连接已断开。`,{reconnect_attempts:i})}async function og(e,t){return Yh(`/api/chat/sessions/${e}/turns/${t}/interrupt`,{method:`POST`,body:`{}`})}function sg(e){return Yh(`/api/chat/sessions/${e}/loopx`)}function cg(e,t){return Yh(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`read`,operation_id:t})})}function lg(e,t){return e.status===`unavailable`?t?`无法核验`:`Unavailable`:e.status===`accepted`?t?`已通过当前验收`:`Currently accepted`:e.status===`rejected`?t?`未通过验收`:`Rejected`:e.recovery_required?t?`需要恢复原执行`:`Original execution needs recovery`:e.status===`running`&&e.worker_active?t?`执行中`:`Executing`:e.status===`turn_returned`&&e.worker_active?t?`正在验收`:`Validating`:[`prepared`,`running`,`turn_returned`].includes(e.status)?t?`已派发,等待执行回读`:`Dispatched; awaiting execution readback`:t?`状态未知`:`Unknown state`}function ug(e,t){return Yh(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`operations`,limit:10,...t?{cursor:t}:{}})})}function dg(e,t){return Yh(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`inspect`,binding_id:t})})}function fg(e,t,n,r=crypto.randomUUID()){return Yh(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:t,operation_id:r,...n?{settings:n}:{}})})}function pg(e,t,n,r=crypto.randomUUID()){return Yh(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`message`,operation_id:r,message:t,delivery_mode:n})})}async function mg(e,t,n={}){let r=await rg(e,t,n.clientTurnId??crypto.randomUUID(),n.attachments);return n.onPhase?.(`turn.accepted`,r.turn_id),hg(e,r.turn_id,r.events_url,n)}async function hg(e,t,n,r={}){let i=null,a={failure:null,interrupted:null};try{await ag(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 Rh&&!r.signal?.aborted?new Rh(i.message,{...i.payload,events_url:n,reconnectable:!0,session_id:e,turn_id:t}):i}if(a.failure)throw new Rh(String(a.failure.message||`Agent 回合失败。`),a.failure);if(a.interrupted)throw new Rh(`Agent 回合已中断。`,{...a.interrupted,error_code:`turn_interrupted`,session_id:e,turn_id:t});return{response:jh.parse(i),sessionId:e,turnId:t}}async function gg(e,t,n={}){return hg(e,t,`/api/chat/sessions/${e}/turns/${t}/events`,n)}async function _g(e){let t=Mh.parse(await Yh(`/api/chat/sessions/${e}`,{keepalive:!0,method:`DELETE`}));if(t.session_id!==e)throw new Rh(`Agent 会话关闭回执与本次请求不一致。`,{session_id:t.session_id});return t}async function vg(e){return Yh(`/api/chat/sessions/${e}/resume`,{method:`POST`,body:`{}`})}function yg(e){return{goal_id:e.goalId,enabled:e.enabled,align_codex_host_capacity:e.alignCodexHostCapacity??!1,...e.modelConfig===void 0?{}:{model_config:e.modelConfig},...e.executionConfig===void 0?{}:{execution_config:e.executionConfig},...e.enabled?{max_children:e.maxChildren,allowed_domains:e.allowedDomains}:{}}}function bg(e,t){let n=e.after.orchestration,r=[...new Set(t.allowedDomains)],i=e.feature_summary.multi_subagent===`enabled`,a=e.goal_id===t.goalId&&i===t.enabled&&(t.modelConfig===void 0||JSON.stringify(n.model_config??null)===JSON.stringify(t.modelConfig))&&(t.executionConfig===void 0||(n.execution_config??``)===t.executionConfig)&&(t.enabled?n.max_children===t.maxChildren&&JSON.stringify(n.allowed_domains)===JSON.stringify(r):n.spawn_allowed===!1&&n.max_children===0),o=!t.alignCodexHostCapacity||!t.enabled||e.codex_host_capacity.required_children===t.maxChildren;if(!a||!o)throw new Rh(`Goal 子代理配置回执与本次请求不一致,界面已停止更新。`,{after:e.after,goal_id:e.goal_id});return e}async function xg(e){let t=Ih.parse(await Yh(`/api/chat/goal-subagents/dry-run`,{method:`POST`,body:JSON.stringify(yg(e))}));if(!t.dry_run||t.execute||t.written)throw new Rh(`Goal 子代理预览返回了非预览回执,已停止进入确认状态。`,{result:t});return bg(t,e)}async function Sg(e,t){let n=Ih.parse(await Yh(`/api/chat/goal-subagents/apply`,{method:`POST`,body:JSON.stringify({...yg(e),preview_id:t})}));if(n.preview_id!==t||n.dry_run||!n.execute)throw new Rh(`Goal 子代理写入回执与本次确认不一致,界面已停止更新。`,{result:n});if(n.changed&&(!n.written||n.goal_configuration_changed&&(!n.global_sync.executed||!n.global_sync.readback.verified)||e.alignCodexHostCapacity&&n.codex_host_capacity.write_required&&!n.codex_host_capacity.written))throw new Rh(`Goal 子代理设置未通过共享状态读回验证。`,{result:n});return bg(n,e)}var Cg=J({ok:X(!0),targets:q(J({enabled:K(),provider:W(),target_name:W()}))});async function wg(){return Cg.parse(await Yh(`/api/chat/goal-channel/targets`)).targets}var Tg=J({ok:K(),blocker:W().optional(),public_summary:W().optional(),status:W().optional()});async function Eg(e){return Tg.parse(await Yh(`/api/chat/goal-channel/setup`,{method:`POST`,body:JSON.stringify({execute:e.execute,goal_id:e.goalId,target:e.target})}))}async function Dg(e){return Tg.parse(await Yh(`/api/chat/goal-channel/configure`,{method:`POST`,body:JSON.stringify({auto_notify_human_gates:e.autoNotify,goal_id:e.goalId})}))}var Og=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:Og.nullable().optional()});var kg=J({schema_version:X(`loopx_machine_configuration_v0`),namespaces:yd(W(),yd(W(),ad()))}),Ag=J({namespace:W(),title:W(),description:W(),schema_versions:q(W()).min(1),configuration_template:yd(W(),ad()),template_status:Y([`ready`,`schema_only`])}),jg=J({schema_version:X(`machine_configuration_catalog_v0`),namespaces:q(Ag)}),Mg=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()}),Ng=J({schema_version:X(`capability_configuration_editor_v0`),editable:K(),supported_scopes:q(Y([`goal`,`machine`])),writable_scopes:q(Y([`goal`,`machine`])),fields:q(Mg),read_only_reason:W().optional()}),Pg=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:yd(W(),ad()).optional(),current:yd(W(),ad()).optional(),machine_current:yd(W(),ad()).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:yd(W(),ad()).nullable(),inherited:K(),goal_override_present:K(),machine_default_present:K(),effective_revision:W()}).optional(),documentation:yd(W(),ad()).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:Ng}))}),Fg=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:Pg}),Ig=J({ok:X(!0),goal_id:W(),capability_id:W(),changed_fields:q(W()),goal_configuration:yd(W(),ad()).nullable(),capability_catalog:Pg,codex_host_capacity:Fh.optional()}),Lg=Ig.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()}),Rg=dd([Ig.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:K(),host_capacity_pending:K().optional().default(!1),readback_verified:K(),changed_fields:q(W()),goal_configuration:yd(W(),ad()).nullable(),capability_catalog:Pg,error:W(),recommended_action:W(),codex_host_capacity:Fh.optional()})]),zg=J({ok:X(!0),available_namespaces:q(W()),namespace_catalog:jg.optional().default({schema_version:`machine_configuration_catalog_v0`,namespaces:[]}),capability_catalog:Pg,changed_namespaces:q(W()).optional().default([]),invalid_namespaces:q(W()).optional().default([]),machine_configuration:kg.nullable().optional()}),Bg=zg.extend({schema_version:X(`machine_configuration_inspection_v0`),status:Y([`configured`,`absent`,`invalid`]),revision:W()}),Vg=zg.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:kg.nullable()}),Hg=zg.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()}),Ug=zg.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=zg.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)}),Gg=J({configured:K(),source:Y([`machine_store`,`service_environment`,`unset`]),env_var:W().optional(),fingerprint:W().nullable().optional(),value:W().nullable().optional(),blocked_by:W().optional()}),Kg=J({ok:X(!0),schema_version:X(`operator_provider_credential_projection_v0`),action:W().optional(),store_ref:W(),store_revision:W(),record_present:K(),status:Y([`configured`,`absent`,`invalid`]),repair:W(),provider_key:Gg,base_url:Gg});async function qg(){return Kg.parse(await Yh(`/api/chat/operator-credential`))}async function Jg(e){return Kg.parse(await Yh(`/api/chat/operator-credential`,{method:`POST`,body:JSON.stringify(e)}))}async function Yg(){return Bg.parse(await Yh(`/api/chat/machine-configuration`))}async function Xg(e){let t=new URLSearchParams({goal_id:e});return Fg.parse(await Yh(`/api/chat/goal-configuration?${t.toString()}`))}async function Zg(e,t,n){return Lg.parse(await Yh(`/api/chat/goal-configuration/preview`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n})}))}async function Qg(e,t,n,r){return Rg.parse(await Yh(`/api/chat/goal-configuration/apply`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n,expected_plan_revision:r})}))}async function $g(e,t){return Vg.parse(await Yh(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,namespace_configuration:t})}))}async function e_(e,t,n){return Hg.parse(await Yh(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:n,namespace:e,namespace_configuration:t})}))}async function t_(e){return Vg.parse(await Yh(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,operation:`remove`})}))}async function n_(e,t){return Hg.parse(await Yh(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:t,namespace:e,operation:`remove`})}))}async function r_(e){return Ug.parse(await Yh(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!1,transaction_id:e})}))}async function i_(e,t){return Wg.parse(await Yh(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!0,expected_plan_revision:t,transaction_id:e})}))}var a_=J({ok:X(!0),goals:q(J({goal_id:W(),repository:J({branch:W(),identity:W(),label:W(),read_only:X(!0)})}))});async function o_(){return a_.parse(await Yh(`/api/chat/goals/contexts`)).goals}var s_=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 c_(){return s_.parse(await Yh(`/api/chat/lark/apps`)).apps}var l_=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 u_(e){return l_.parse(await Yh(`/api/chat/lark/app-setups`,{method:`POST`,body:JSON.stringify({app_ref:e.appRef,brand:e.brand})}))}async function d_(e){return l_.parse(await Yh(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`))}async function f_(e){return l_.parse(await Yh(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`,{method:`DELETE`}))}var p_=[`invalid_event`,`binding_unavailable`,`chat_mismatch`,`topic_mismatch`,`route_ambiguous`,`self_message`,`invalid_routing_state`,`not_addressed`],m_=J({ok:X(!0),chats:q(J({chat_id:W(),chat_name:W()}))});async function h_(e,t){let n=new URLSearchParams({app_ref:e});return t&&n.set(`query`,t),m_.parse(await Yh(`/api/chat/lark/chats?${n.toString()}`)).chats}var g_=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:_d([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(p_).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 __(){return g_.parse(await Yh(`/api/chat/lark/connections`)).connections}async function v_(e){return Tg.parse(await Yh(`/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 y_(e,t){let n=new URLSearchParams({goal_id:e,connection_id:t});return Tg.parse(await Yh(`/api/chat/lark/connections?${n.toString()}`,{method:`DELETE`}))}function b_(e){return{loadedUrl:null,projectionRevision:0,requestedUrl:e,selectionRevision:0,requestGeneration:0}}function x_(e,t){return e.selectionRevision+=1,e.requestedUrl=t,e.selectionRevision}function S_(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 C_(e,t){return t.generation===e.requestGeneration&&e.projectionRevision===t.projectionRevision&&e.selectionRevision===t.selectionRevision}function w_(e,t){return C_(e,t)&&(!t.background||e.requestedUrl===null&&e.loadedUrl===t.url)}function T_(e,t,n){return t.get(e)===n}function E_(e,t,n,r){return e.filter(e=>T_(r(e),n,t))}function D_(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 O_=[`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`],k_=[`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`],A_=[`accounting`,`decision`,`evidence`,`state`,`work`],j_={accounting:0,decision:0,evidence:0,state:0,work:0},M_={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 N_(e,t){let n={...e};for(let r of O_)n[r]=(Number(e[r])||0)+(Number(t[r])||0);for(let r of k_)(e[r]!==void 0||t[r]!==void 0)&&(n[r]=(e[r]??0)+(t[r]??0));return n}function P_(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 A_)n[r]=(e[r]??0)+(t[r]??0);return n}function I_(e){let t={events_24h:0,events_7d:0,by_class_24h:{...j_},by_class_7d:{...j_}};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 L_(e,t,n){if(!e&&!t)return null;let r=E_(e?.goals??[],`active`,n,e=>e.goal_id),i=E_(t?.goals??[],`stopped`,n,e=>e.goal_id),a=D_(r,i,e=>e.goal_id),o=I_(r),s=I_(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 R_(e,t,n){if(!e&&!t)return null;let r=D_([...E_(e?.items??[],`active`,n,e=>e.goal_id),...E_(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 z_(e,t){return D_([...e,...t].sort((e,t)=>t.generated_at.localeCompare(e.generated_at)),[],e=>`${e.goal_id}:${e.generated_at}:${e.classification??``}`)}function B_(e,t,n){let r=D_(E_(e.items,`active`,n,e=>e.goal_id),E_(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 H_(e){let t={...M_};for(let n of e){for(let e of O_)t[e]+=Number(n[e])||0;for(let e of k_)n[e]!==void 0&&(t[e]=(t[e]??0)+n[e])}return t}function U_(e,t,n){if(!e&&!t)return null;let r=E_(e?.items??[],`active`,n,e=>e.goal_id),i=E_(t?.items??[],`stopped`,n,e=>e.goal_id),a=D_(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 W_(e,t,n){if(!e&&!t)return null;let r=E_(e?.goals??[],`active`,n,e=>e.goal_id),i=E_(t?.goals??[],`stopped`,n,e=>e.goal_id),a=D_(r,i,e=>e.goal_id),o=N_(H_(r),H_(i));return{...e??t,goals:P_(a,Number(o.runs_24h)||0),sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),totals:o}}function G_(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=D_(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 K_(e,t,n){if(!e&&!t)return null;let r=D_(E_(e?.goals??[],`active`,n,e=>e.goal_id),E_(t?.goals??[],`stopped`,n,e=>e.goal_id),e=>e.goal_id);return{...e??t,goals:r}}function q_(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=D_(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:G_(c.agent_management_projection,l.agent_management_projection,s),attention_queue:B_(c.attention_queue,l.attention_queue,s),decision_freshness_summary:R_(c.decision_freshness_summary,l.decision_freshness_summary,s),event_ledger_summary:L_(c.event_ledger_summary,l.event_ledger_summary,s),goal_channel_notification_projection:K_(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:z_(c.run_history.recent_runs,l.run_history.recent_runs),run_count:c.run_history.run_count+l.run_history.run_count},todo_index:U_(c.todo_index,l.todo_index,s),usage_summary:W_(c.usage_summary,l.usage_summary,s)}}function J_(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,Z_=Y_,Q_=(e,t)=>n=>{if(t?.variants==null)return Z_(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=X_(t)||X_(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 Z_(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)},$_=(e,t)=>{let n=Array(e.length+t.length);for(let t=0;t({classGroupId:e,validator:t}),tv=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),nv=`-`,rv=[],iv=`arbitrary..`,av=e=>{let t=cv(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:e=>{if(e.startsWith(`[`)&&e.endsWith(`]`))return sv(e);let n=e.split(nv);return ov(n,+(n[0]===``&&n.length>1),t)},getConflictingClassGroupIds:(e,t)=>{if(t){let t=r[e],i=n[e];return t?i?$_(i,t):t:i||rv}return n[e]||rv}}},ov=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;let r=e[t],i=n.nextPart.get(r);if(i){let n=ov(e,t+1,i);if(n)return n}let a=n.validators;if(a===null)return;let o=t===0?e.join(nv):e.slice(t).join(nv),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?iv+r:void 0})(),cv=e=>{let{theme:t,classGroups:n}=e;return lv(n,t)},lv=(e,t)=>{let n=tv();for(let r in e){let i=e[r];uv(i,n,r,t)}return n},uv=(e,t,n,r)=>{let i=e.length;for(let a=0;a{if(typeof e==`string`){fv(e,t,n);return}if(typeof e==`function`){pv(e,t,n,r);return}mv(e,t,n,r)},fv=(e,t,n)=>{let r=e===``?t:hv(t,e);r.classGroupId=n},pv=(e,t,n,r)=>{if(gv(e)){uv(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(ev(n,e))},mv=(e,t,n,r)=>{let i=Object.entries(e),a=i.length;for(let e=0;e{let n=e,r=t.split(nv),i=r.length;for(let e=0;e`isThemeGetter`in e&&e.isThemeGetter===!0,_v=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)}}},vv=`!`,yv=`:`,bv=[],xv=(e,t,n,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:i}),Sv=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 xv(t,l,c,u)};if(t){let e=t+yv,n=r;r=t=>t.startsWith(e)?n(t.slice(e.length)):xv(bv,!1,t,void 0,!0)}if(n){let e=r;r=t=>n({className:t,parseClassName:e})}return r},Cv=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}},wv=e=>({cache:_v(e.cacheSize),parseClassName:Sv(e),sortModifiers:Cv(e),postfixLookupClassGroupIds:Tv(e),...av(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(Ev),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?_+vv:_,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},Ov=(...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=wv(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=Dv(e,n);return i(e,a),a};return a=o,(...e)=>a(Ov(...e))},jv=[],Mv=e=>{let t=t=>t[e]||jv;return t.isThemeGetter=!0,t},Nv=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Pv=/^\((?:(\w[\w-]*):)?(.+)\)$/i,Fv=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,Iv=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Lv=/\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$/,Rv=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,zv=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Bv=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Vv=e=>Fv.test(e),Hv=e=>!!e&&!Number.isNaN(Number(e)),Uv=e=>!!e&&Number.isInteger(Number(e)),Wv=e=>e.endsWith(`%`)&&Hv(e.slice(0,-1)),Gv=e=>Iv.test(e),Kv=()=>!0,qv=e=>Lv.test(e)&&!Rv.test(e),Jv=()=>!1,Yv=e=>zv.test(e),Xv=e=>Bv.test(e),Zv=e=>!Q(e)&&!$(e),Qv=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)),$v=e=>my(e,vy,Jv),Q=e=>Nv.test(e),ey=e=>my(e,yy,qv),ty=e=>my(e,by,Hv),ny=e=>my(e,Sy,Kv),ry=e=>my(e,xy,Jv),iy=e=>my(e,gy,Jv),ay=e=>my(e,_y,Xv),oy=e=>my(e,Cy,Yv),$=e=>Pv.test(e),sy=e=>hy(e,yy),cy=e=>hy(e,xy),ly=e=>hy(e,gy),uy=e=>hy(e,vy),dy=e=>hy(e,_y),fy=e=>hy(e,Cy,!0),py=e=>hy(e,Sy,!0),my=(e,t,n)=>{let r=Nv.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},hy=(e,t,n=!1)=>{let r=Pv.exec(e);return r?r[1]?t(r[1]):n:!1},gy=e=>e===`position`||e===`percentage`,_y=e=>e===`image`||e===`url`,vy=e=>e===`length`||e===`size`||e===`bg-size`,yy=e=>e===`length`,by=e=>e===`number`,xy=e=>e===`family-name`,Sy=e=>e===`number`||e===`weight`,Cy=e=>e===`shadow`,wy=Av(()=>{let e=Mv(`color`),t=Mv(`font`),n=Mv(`text`),r=Mv(`font-weight`),i=Mv(`tracking`),a=Mv(`leading`),o=Mv(`breakpoint`),s=Mv(`container`),c=Mv(`spacing`),l=Mv(`radius`),u=Mv(`shadow`),d=Mv(`inset-shadow`),f=Mv(`text-shadow`),p=Mv(`drop-shadow`),m=Mv(`blur`),h=Mv(`perspective`),g=Mv(`aspect`),_=Mv(`ease`),v=Mv(`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=()=>[Uv,`none`,`subgrid`,$,Q],D=()=>[`auto`,{span:[`full`,Uv,$,Q]},Uv,$,Q],O=()=>[Uv,`auto`,$,Q],k=()=>[`auto`,`min`,`max`,`fr`,$,Q],A=()=>[`start`,`end`,`center`,`between`,`around`,`evenly`,`stretch`,`baseline`,`center-safe`,`end-safe`],ee=()=>[`start`,`end`,`center`,`stretch`,`center-safe`,`end-safe`],j=()=>[`auto`,...w()],M=()=>[Vv,`auto`,`full`,`dvw`,`dvh`,`lvw`,`lvh`,`svw`,`svh`,`min`,`max`,`fit`,...w()],te=()=>[Vv,`screen`,`full`,`dvw`,`lvw`,`svw`,`min`,`max`,`fit`,...w()],ne=()=>[Vv,`screen`,`full`,`lh`,`dvh`,`lvh`,`svh`,`min`,`max`,`fit`,...w()],N=()=>[e,$,Q],P=()=>[...b(),ly,iy,{position:[$,Q]}],re=()=>[`no-repeat`,{repeat:[``,`x`,`y`,`space`,`round`]}],ie=()=>[`auto`,`cover`,`contain`,uy,$v,{size:[$,Q]}],ae=()=>[Wv,sy,ey],F=()=>[``,`none`,`full`,l,$,Q],oe=()=>[``,Hv,sy,ey],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`],L=()=>[Hv,Wv,ly,iy],ce=()=>[``,`none`,m,$,Q],le=()=>[`none`,Hv,$,Q],ue=()=>[`none`,Hv,$,Q],de=()=>[Hv,$,Q],fe=()=>[Vv,`full`,...w()];return{cacheSize:500,theme:{animate:[`spin`,`ping`,`pulse`,`bounce`],aspect:[`video`],blur:[Gv],breakpoint:[Gv],color:[Kv],container:[Gv],"drop-shadow":[Gv],ease:[`in`,`out`,`in-out`],font:[Zv],"font-weight":[`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`],"inset-shadow":[Gv],leading:[`none`,`tight`,`snug`,`normal`,`relaxed`,`loose`],perspective:[`dramatic`,`near`,`normal`,`midrange`,`distant`,`none`],radius:[Gv],shadow:[Gv],spacing:[`px`,Hv],text:[Gv],"text-shadow":[Gv],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":[Qv],columns:[{columns:[Hv,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:[Uv,`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:[Hv,Vv,`auto`,`initial`,`none`,Q]}],grow:[{grow:[``,Hv,$,Q]}],shrink:[{shrink:[``,Hv,$,Q]}],order:[{order:[Uv,`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:[...A(),`normal`]}],"justify-items":[{"justify-items":[...ee(),`normal`]}],"justify-self":[{"justify-self":[`auto`,...ee()]}],"align-content":[{content:[`normal`,...A()]}],"align-items":[{items:[...ee(),{baseline:[``,`last`]}]}],"align-self":[{self:[`auto`,...ee(),{baseline:[``,`last`]}]}],"place-content":[{"place-content":A()}],"place-items":[{"place-items":[...ee(),`baseline`]}],"place-self":[{"place-self":[`auto`,...ee()]}],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:M()}],"inline-size":[{inline:[`auto`,...te()]}],"min-inline-size":[{"min-inline":[`auto`,...te()]}],"max-inline-size":[{"max-inline":[`none`,...te()]}],"block-size":[{block:[`auto`,...ne()]}],"min-block-size":[{"min-block":[`auto`,...ne()]}],"max-block-size":[{"max-block":[`none`,...ne()]}],w:[{w:[s,`screen`,...M()]}],"min-w":[{"min-w":[s,`screen`,`none`,...M()]}],"max-w":[{"max-w":[s,`screen`,`none`,`prose`,{screen:[o]},...M()]}],h:[{h:[`screen`,`lh`,...M()]}],"min-h":[{"min-h":[`screen`,`lh`,`none`,...M()]}],"max-h":[{"max-h":[`screen`,`lh`,...M()]}],"font-size":[{text:[`base`,n,sy,ey]}],"font-smoothing":[`antialiased`,`subpixel-antialiased`],"font-style":[`italic`,`not-italic`],"font-weight":[{font:[r,py,ny]}],"font-stretch":[{"font-stretch":[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`,Wv,Q]}],"font-family":[{font:[cy,ry,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":[Hv,`none`,$,ty]}],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:[...I(),`wavy`]}],"text-decoration-thickness":[{decoration:[Hv,`from-font`,`auto`,$,ey]}],"text-decoration-color":[{decoration:N()}],"underline-offset":[{"underline-offset":[Hv,`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:[Uv,$,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:re()}],"bg-size":[{bg:ie()}],"bg-image":[{bg:[`none`,{linear:[{to:[`t`,`tr`,`r`,`br`,`b`,`bl`,`l`,`tl`]},Uv,$,Q],radial:[``,$,Q],conic:[Uv,$,Q]},dy,ay]}],"bg-color":[{bg:N()}],"gradient-from-pos":[{from:ae()}],"gradient-via-pos":[{via:ae()}],"gradient-to-pos":[{to:ae()}],"gradient-from":[{from:N()}],"gradient-via":[{via:N()}],"gradient-to":[{to:N()}],rounded:[{rounded:F()}],"rounded-s":[{"rounded-s":F()}],"rounded-e":[{"rounded-e":F()}],"rounded-t":[{"rounded-t":F()}],"rounded-r":[{"rounded-r":F()}],"rounded-b":[{"rounded-b":F()}],"rounded-l":[{"rounded-l":F()}],"rounded-ss":[{"rounded-ss":F()}],"rounded-se":[{"rounded-se":F()}],"rounded-ee":[{"rounded-ee":F()}],"rounded-es":[{"rounded-es":F()}],"rounded-tl":[{"rounded-tl":F()}],"rounded-tr":[{"rounded-tr":F()}],"rounded-br":[{"rounded-br":F()}],"rounded-bl":[{"rounded-bl":F()}],"border-w":[{border:oe()}],"border-w-x":[{"border-x":oe()}],"border-w-y":[{"border-y":oe()}],"border-w-s":[{"border-s":oe()}],"border-w-e":[{"border-e":oe()}],"border-w-bs":[{"border-bs":oe()}],"border-w-be":[{"border-be":oe()}],"border-w-t":[{"border-t":oe()}],"border-w-r":[{"border-r":oe()}],"border-w-b":[{"border-b":oe()}],"border-w-l":[{"border-l":oe()}],"divide-x":[{"divide-x":oe()}],"divide-x-reverse":[`divide-x-reverse`],"divide-y":[{"divide-y":oe()}],"divide-y-reverse":[`divide-y-reverse`],"border-style":[{border:[...I(),`hidden`,`none`]}],"divide-style":[{divide:[...I(),`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:[...I(),`none`,`hidden`]}],"outline-offset":[{"outline-offset":[Hv,$,Q]}],"outline-w":[{outline:[``,Hv,sy,ey]}],"outline-color":[{outline:N()}],shadow:[{shadow:[``,`none`,u,fy,oy]}],"shadow-color":[{shadow:N()}],"inset-shadow":[{"inset-shadow":[`none`,d,fy,oy]}],"inset-shadow-color":[{"inset-shadow":N()}],"ring-w":[{ring:oe()}],"ring-w-inset":[`ring-inset`],"ring-color":[{ring:N()}],"ring-offset-w":[{"ring-offset":[Hv,ey]}],"ring-offset-color":[{"ring-offset":N()}],"inset-ring-w":[{"inset-ring":oe()}],"inset-ring-color":[{"inset-ring":N()}],"text-shadow":[{"text-shadow":[`none`,f,fy,oy]}],"text-shadow-color":[{"text-shadow":N()}],opacity:[{opacity:[Hv,$,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":[Hv]}],"mask-image-linear-from-pos":[{"mask-linear-from":L()}],"mask-image-linear-to-pos":[{"mask-linear-to":L()}],"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":L()}],"mask-image-t-to-pos":[{"mask-t-to":L()}],"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":L()}],"mask-image-r-to-pos":[{"mask-r-to":L()}],"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":L()}],"mask-image-b-to-pos":[{"mask-b-to":L()}],"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":L()}],"mask-image-l-to-pos":[{"mask-l-to":L()}],"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":L()}],"mask-image-x-to-pos":[{"mask-x-to":L()}],"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":L()}],"mask-image-y-to-pos":[{"mask-y-to":L()}],"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":L()}],"mask-image-radial-to-pos":[{"mask-radial-to":L()}],"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":[Hv]}],"mask-image-conic-from-pos":[{"mask-conic-from":L()}],"mask-image-conic-to-pos":[{"mask-conic-to":L()}],"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:re()}],"mask-size":[{mask:ie()}],"mask-type":[{"mask-type":[`alpha`,`luminance`]}],"mask-image":[{mask:[`none`,$,Q]}],filter:[{filter:[``,`none`,$,Q]}],blur:[{blur:ce()}],brightness:[{brightness:[Hv,$,Q]}],contrast:[{contrast:[Hv,$,Q]}],"drop-shadow":[{"drop-shadow":[``,`none`,p,fy,oy]}],"drop-shadow-color":[{"drop-shadow":N()}],grayscale:[{grayscale:[``,Hv,$,Q]}],"hue-rotate":[{"hue-rotate":[Hv,$,Q]}],invert:[{invert:[``,Hv,$,Q]}],saturate:[{saturate:[Hv,$,Q]}],sepia:[{sepia:[``,Hv,$,Q]}],"backdrop-filter":[{"backdrop-filter":[``,`none`,$,Q]}],"backdrop-blur":[{"backdrop-blur":ce()}],"backdrop-brightness":[{"backdrop-brightness":[Hv,$,Q]}],"backdrop-contrast":[{"backdrop-contrast":[Hv,$,Q]}],"backdrop-grayscale":[{"backdrop-grayscale":[``,Hv,$,Q]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Hv,$,Q]}],"backdrop-invert":[{"backdrop-invert":[``,Hv,$,Q]}],"backdrop-opacity":[{"backdrop-opacity":[Hv,$,Q]}],"backdrop-saturate":[{"backdrop-saturate":[Hv,$,Q]}],"backdrop-sepia":[{"backdrop-sepia":[``,Hv,$,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:[Hv,`initial`,$,Q]}],ease:[{ease:[`linear`,`initial`,_,$,Q]}],delay:[{delay:[Hv,$,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:[Uv,$,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:[Hv,sy,ey,ty]}],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 wy(Y_(e))}var Ey=Q_(`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 Dy({className:e,variant:t,size:n,...r}){return(0,z.jsx)(`button`,{className:Ty(Ey({variant:t,size:n}),e),type:`button`,...r})}function Oy({className:e,...t}){return(0,z.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 ky({className:e,...t}){return(0,z.jsx)(`div`,{className:Ty(`p-4 pt-0`,e),...t})}var Ay=[`codex`,`claude`,`kiro`,`trae`,`coco`,`openai`,`anthropic`],jy=new Set([`acp`,`status_projection`]);function My(e){let t=e.trim().toLowerCase().replace(/_/gu,`-`);for(let e of Ay)if(t===e||t.startsWith(`${e}-`))return e;return t}function Ny(e,t){let n=t?.trim().toLowerCase()??``;return n.length>0&&!jy.has(n)?My(n):My(e)}var Py={"zh-CN":{title:`交办说明`,context:`背景与补充`,constraints:`约束`,inputs:`输入材料`,acceptance:`验收要求`,return:`需要回传`,supplied:`已提供给接收方`,pending:`等待接收方读取`,decision:`接收方判断`,unknown:`尚未记录`,unavailable:`暂时无法读取`,adopt:`已采纳`,defer:`已暂缓`,reject:`未采纳`,no_change:`无需调整`,result:`结论已保存`,delivered:`结论已回传`,details:`查看交办内容`},en:{title:`Delegation brief`,context:`Context & corrections`,constraints:`Constraints`,inputs:`Inputs`,acceptance:`Acceptance`,return:`Expected return`,supplied:`Supplied to receiver`,pending:`Awaiting receiver read`,decision:`Receiver decision`,unknown:`Not recorded`,unavailable:`Readback unavailable`,adopt:`Adopted`,defer:`Deferred`,reject:`Rejected`,no_change:`No change needed`,result:`Conclusion saved`,delivered:`Conclusion returned`,details:`View delegation details`}};function Fy({request:e}){let{locale:t}=Ji();if(!e)return null;let n=Py[t],r=e.brief,i=e.decision,a=e.returns.find(e=>e.phase===`conclusion`);return(0,z.jsxs)(`section`,{className:`personal-collaboration`,"aria-label":n.title,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:r.purpose}),(0,z.jsx)(`span`,{children:e.agent_id})]}),(0,z.jsxs)(`p`,{className:`personal-collaboration-status`,children:[(0,z.jsx)(`span`,{children:e.read_status===`supplied`?n.supplied:e.read_status===`unavailable`?n.unavailable:n.pending}),(0,z.jsxs)(`span`,{children:[n.decision,`: `,n[i]??(e.decision===`unavailable`?n.unavailable:n.unknown)]}),a?(0,z.jsx)(`span`,{children:a.status===`delivered`?n.delivered:n.result}):null]}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n.details}),(0,z.jsx)(`h4`,{children:n.context}),(0,z.jsx)(`p`,{children:r.context}),r.constraints.length?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h4`,{children:n.constraints}),(0,z.jsx)(`ul`,{children:r.constraints.map((e,t)=>(0,z.jsx)(`li`,{children:e},t))})]}):null,r.inputs.length?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h4`,{children:n.inputs}),(0,z.jsx)(`ul`,{children:r.inputs.map((e,t)=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`code`,{children:e.ref}),` — `,e.description,e.sha256?(0,z.jsxs)(`small`,{children:[`sha256:`,e.sha256]}):null]},t))})]}):null,(0,z.jsx)(`h4`,{children:n.acceptance}),(0,z.jsx)(`ul`,{children:r.acceptance.map((e,t)=>(0,z.jsx)(`li`,{children:e},t))}),(0,z.jsx)(`h4`,{children:n.return}),(0,z.jsx)(`p`,{children:r.return_requirement})]})]})}var Iy={stop:`ready_stop`,resume:`resume_review`,delete:`delete_review`};function Ly(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function Ry(e){return typeof e==`string`&&e.trim().length>0?e:null}function zy(e,t=240){let n=typeof e==`string`?e.replace(/\s+/g,` `).trim():``;return n.length>t?`${n.slice(0,t-1)}…`:n}function By(e){let t=Ly(e)??{},n=zy(t.agent_id,80)||`unknown-agent`,r=zy(t.acceptance,200);if(t.staffing===`gap`){let e=Ly(t.declined_first_todo)??{};return[`${n} · gap`,zy(t.gap_reason_code,80),zy(e.text,200)].filter(Boolean).join(` · `)}let i=Ly(t.first_todo)??{};return[`${n} · ready`,zy(i.priority,8),zy(i.action_kind,40),zy(i.text,240),r?`acceptance: ${r}`:``].filter(Boolean).join(` · `)}function Vy(e){let t=Ly(e)??{};return Object.entries(t).map(([e,t])=>`${e}: ${typeof t==`object`&&t?JSON.stringify(t):String(t)}`).join(` · `)}function Hy(e){let t=Ly(e);if(t?.action_kind!==`team.plan`||t.status!==`preview_ready`&&t.status!==`deferred`)return;let n=Ly(Ly(t.normalized_parameters)?.plan);if(!n||n.kind!==`steward_team_plan_preview`||n.applies!==!1)return;let r=Ry(t.proposal_id),i=Ry(t.expected_state_fingerprint),a=Ry(n.goal_id);if(!r||!i||!a)return;let o=Array.isArray(n.lanes)?n.lanes:[],s=Array.isArray(n.gaps)?n.gaps:[],c=[{key:`goal`,value:a},{key:`objective`,value:zy(n.objective)},...o.map((e,t)=>({key:`lane_${t+1}`,value:By(e)})),...s.length>0?[{key:`lane_gaps`,value:s.map(e=>{let t=Ly(e)??{};return[zy(t.lane_id,80),zy(t.reason_code,80)].filter(Boolean).join(`: `)}).filter(Boolean).join(` · `)}]:[],{key:`quota_envelope`,value:Vy(n.quota_envelope)},{key:`stop_condition`,value:zy(n.stop_condition)}].filter(e=>e.value.length>0);return{schemaVersion:`review_card_frame_v0`,actionKind:`team.plan`,proposalId:r,stateFingerprint:i,kind:`confirmation`,attentionKind:`authority`,interactionMode:`confirm_reject`,decisions:[`confirm`,`reject`],titleKey:`team_plan_preview`,subtitleKey:`preview_only_no_lane_exists`,confirmLabelKey:`confirm_team_plan`,rejectLabelKey:`reject_team_plan`,warningKey:`confirming_creates_each_ready_lane_first_todo`,focus:`${a} · ${o.length} lane${o.length===1?``:`s`}`,fields:c}}function Uy(e){let t=Ly(e.projection);if(t?.schema_version!==`loopx_operation_projection_v0`)return null;let n=Ry(t.title),r=Ry(t.subtitle),i=Ry(t.focus),a=Ry(t.warning);if(!n||!r||!i||!a||!Array.isArray(t.fields))return null;let o=[];for(let e of t.fields){let t=Ly(e),n=Ry(t?.label),r=Ry(t?.value);if(!n||!r)return null;o.push({label:n,value:r})}return{title:n,subtitle:r,focus:i,fields:o,warning:a}}function Wy(e){let t=Ly(e);if(t?.action_kind!==`operation.execute`)return;let n=Ly(t.normalized_parameters),r=Ly(t.operation);if(!n||r?.schema_version!==`loopx_operation_envelope_v0`)return;let i=Ry(r.operation_id),a=Ry(r.confirmation_digest),o=Ry(r.expires_at),s=Uy(n);if(!i||!a||!o||!s||i!==t.proposal_id)return;let c=r.lifecycle_state;if(c!==`awaiting_confirmation`&&c!==`claimed`&&c!==`outcome_observed`)return;let l={schemaVersion:`operation_review_frame_v0`,operationId:i,confirmationDigest:a,lifecycleState:c,simulated:Ly(n.projection).simulated===!0,expiresAt:o,content:s};if(c===`awaiting_confirmation`)return{...l,kind:`confirmation`,attentionKind:`authority`,interactionMode:`confirm_reject`,decisions:[`confirm`,`reject`]};if(c===`claimed`)return{...l,kind:`pending`,attentionKind:`progress`,interactionMode:`inform`};let u=Ly(r.outcome);if(!u)return;let d=u.outcome===`rejected_by_operator`,f=u.simulation===!0||l.simulated;return{...l,kind:`result`,attentionKind:`progress`,interactionMode:`inform`,resultKind:d?`rejected`:f?`simulation_completed`:`completed`,resultDeliveryVerified:Ly(r.result_delivery)!==null,summary:Ry(u.summary)??``}}function Gy(e){let t=Ly(e)??{},n={schemaVersion:`action_review_plan_v0`,proposalId:typeof t.proposal_id==`string`?t.proposal_id:``,sourceFingerprint:typeof t.expected_state_fingerprint==`string`?t.expected_state_fingerprint:``},r=Wy(t),i=Hy(t),a=e=>({...n,...e,...r?{operationFrame:r}:{},...i?{reviewCardFrame:i}:{}}),o=(e,t)=>a({interaction:e,reason:t,canApply:!1}),s=t.action_kind===`goal.lifecycle`;if(s&&t.gate!=null||t.status===`gated`)return o(`gated`,`authority_gate`);if(s&&t.stale!=null||t.status===`stale`)return o(`refresh`,`stale_proposal`);if(t.status===`applied`)return Ly(t.receipt)?.projection_verified===!0&&(t.action_kind!==`operation.execute`||Ly(Ly(t.operation)?.result_delivery)!==null)?o(`completed`,`readback_verified`):o(`repair`,`readback_unverified`);let c=Ly(t.canonical_update_basis),l=Ly(t.normalized_parameters);if(c?.schema_version===`loopx_chat_canonical_update_basis_v0`&&Ry(c.provider_revision)!==null&&Ry(c.registry_sha256)!==null&&(t.action_kind===`todo.update`||t.action_kind===`monitor.update`&&[`pause`,`resume`,`edit`].includes(String(l?.operation)))&&(t.status===`applying`||t.status===`failed`))return{...a({interaction:`review`,canApply:!0,reason:Ly(t.failure)?.error_code===`canonical_update_projection_pending`?`canonical_update_projection_pending`:`canonical_update_retry`}),retryOriginal:!0};if(t.status===`applying`)return o(`pending`,`apply_pending`);if(t.status===`failed`||t.error!=null)return o(`repair`,`apply_failed`);if(t.status!==`preview_ready`&&t.status!==`deferred`)return o(`inactive`,`inactive_proposal`);let u=(e,t=!0)=>a({interaction:`review`,reason:e,canApply:t});if(t.action_kind!==`goal.lifecycle`)return u(t.permission_classification===`protected`?`protected_action`:`action_review`);let d=t.validation_evidence,f=t.available_transitions;if(!(Ry(t.proposal_id)!==null&&Ry(t.expected_state_fingerprint)!==null&&Array.isArray(d)&&d.length>0&&d.every(e=>Ry(e)!==null)&&Array.isArray(f)&&f.includes(`apply`)))return o(`refresh`,`incomplete_proposal`);let p=Ly(t.context),m=l?.operation,h=Ry(l?.goal_id);if(!h||p?.goal_id!=null&&p.goal_id!==h)return o(`refresh`,`incomplete_proposal`);if(m!==`stop`&&m!==`resume`&&m!==`delete`)return u(`unknown_action`,!1);if(t.permission_classification===`protected`)return u(`protected_action`);if(t.permission_classification!==`durable_write`)return u(`unknown_permission`,!1);let g=Iy[m];return g===`ready_stop`&&t.status===`preview_ready`?a({interaction:`direct`,reason:g,canApply:!0}):u(g===`ready_stop`?`action_review`:g)}function Ky(e){return e.error_code===`action_stale`||e.error_code===`action_conflict`||Ly(e.proposal)?.status===`stale`}function qy(e){return typeof e==`object`&&e?e:{}}function Jy(e){return typeof e==`string`?e:``}function Yy(e,t){let n=qy(e.plan),r=[],i=Jy(e.goal_id)||Jy(n.goal_id);i&&r.push({key:`goal_id`,label:t(`proposal.field.goalId`),value:i});let a=Jy(n.objective);a&&r.push({key:`objective`,label:t(`proposal.field.objective`),value:a}),(Array.isArray(n.lanes)?n.lanes:[]).forEach((e,n)=>{let i=qy(e),a=Jy(i.lane_id)||`lane-${n+1}`,o=Jy(i.agent_id),s=Jy(i.acceptance);if(Jy(i.staffing)===`gap`){let e=qy(i.declined_first_todo);r.push({key:`lane_${a}`,label:o||a,value:[t(`proposal.teamPlan.gapLane`),eb(Jy(i.gap_reason_code),t),Jy(e.text)].filter(Boolean).join(` · `)});return}let c=qy(i.first_todo),l=[Jy(c.priority),Jy(c.action_kind),Jy(c.text)].filter(Boolean).join(` · `);r.push({key:`lane_${a}`,label:o||a,value:[l||t(`proposal.teamPlan.laneUnstaffed`),s?`${t(`proposal.teamPlan.acceptanceShort`)}: ${s}`:``].filter(Boolean).join(` · `)})});let o=qy(n.quota_envelope),s=Object.entries(o);s.length>0&&r.push({key:`quota_envelope`,label:t(`proposal.field.quotaEnvelope`),value:s.map(([e,t])=>`${e}: ${String(t??``)}`).join(` · `)+` · ${t(`proposal.teamPlan.advisory`)}`});let c=Jy(n.stop_condition);return c&&r.push({key:`stop_condition`,label:t(`proposal.field.stopCondition`),value:`${c} · ${t(`proposal.teamPlan.advisory`)}`}),r}function Xy(e){let t=qy(e.plan);return Array.isArray(t.lanes)?t.lanes.length:0}function Zy(e){let t=qy(e.plan);return Jy(e.goal_id)||Jy(t.goal_id)}function Qy(e,t){let n=qy(e),r=qy(t.plan),i=(Array.isArray(r.lanes)?r.lanes:[]).map(qy);return(Array.isArray(n.lanes)?n.lanes:[]).map(e=>{let t=qy(e),n=Jy(t.lane_id),r=i.find(e=>e.lane_id===n);return{laneId:n,agentId:Jy(t.agent_id),task:Jy(qy(r?.first_todo).text)||n}}).filter(e=>e.laneId.length>0)}function $y(e,t={}){let n=qy(e),r=qy(t.plan),i=(Array.isArray(r.lanes)?r.lanes:[]).map(qy);return(Array.isArray(n.gap_lanes)?n.gap_lanes:[]).map(e=>{let t=qy(e);return{laneId:Jy(t.lane_id),agentId:Jy(t.agent_id),reasonCode:Jy(t.reason_code),task:Jy(qy(i.find(e=>e.lane_id===t.lane_id)?.declined_first_todo).text)}}).filter(e=>e.laneId.length>0)}function eb(e,t){return e===`agent_not_registered`?t(`proposal.teamPlan.gapReason.agentNotRegistered`):e===`action_kind_not_supported`?t(`proposal.teamPlan.gapReason.actionKindNotSupported`):e===`capability_not_granted`?t(`proposal.teamPlan.gapReason.capabilityNotGranted`):e===`audience_not_authorized`?t(`proposal.teamPlan.gapReason.audienceNotAuthorized`):e}function tb(e){let t=qy(e),n=Jy(t.outcome),r=Array.isArray(t.lanes)?t.lanes.length:0,i=typeof t.gap_count==`number`?t.gap_count:0;return n===`team_plan_partially_applied`?{kind:`partially_applied`,created:r,gaps:i}:n===`team_plan_lanes_already_present`||n===`team_plan_commit_recovered`?{kind:`already_present`,created:r,gaps:i}:n===`team_plan_applied`?{kind:`applied`,created:r,gaps:i}:null}function nb(e,t){return e?.kind===`partially_applied`?t(`proposal.teamPlan.appliedPartially`,{created:String(e.created),gaps:String(e.gaps)}):e?.kind===`already_present`?t(`proposal.teamPlan.appliedAlreadyPresent`):t(e?.kind===`applied`?`proposal.teamPlan.applied`:`drawer.proposalApplied`,{count:e?.created??0})}function rb({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)(sm,{"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)(om,{"aria-hidden":!0,size:15}):null]})]},e.value)})}):null]})}function ib({agents:e,managerChannelBinding:t,managerChatOpen:n,managerRuntime:r,mobileNavigationOpen:i,onOpenGoalCapabilities:a,onOpenManagerChat:o,onRefresh:s,onOpenNavigation:c,onSelectGoalTab:l,onSelectAgent:u,onReturnManagerHome:d,refreshState:f,readOnlySourceLabel:p,selectedAgentId:m,selectedGoal:h,selectedGoalTab:g}){let{locale:_,t:v}=Ji(),y=t?t.executor_kind===`individual`?v(`header.managerExecutorKindIndividual`):t.executor_kind===`managed`?v(`header.managerExecutorKindManaged`):v(`header.managerExecutorKindRegistered`):null,b=t?.available===!1,x=t?.output_token_budget,S=x?.scope===`per_model_request`&&x.valid&&typeof x.max_tokens==`number`?v(`header.managerOutputTokenBudget`,{tokens:new Intl.NumberFormat(_).format(x.max_tokens)}):null,C=t?.available===!1?t.unavailable_reason:null,w=C===`operator_credential_unconfigured`?`header.managerExecutionUnavailableCredential`:C===`dsh_runtime_unavailable`?`header.managerExecutionUnavailableRuntime`:C===`invalid_reasoning_effort`?`header.managerExecutionUnavailableEffort`:C===`invalid_output_token_limit`?`header.managerExecutionUnavailableOutputBudget`:`header.managerExecutionUnavailable`,T=t&&t.executor_endpoint_source===`product_default`&&t.executor_endpoint_default_reason===`steward_channel_default`?`header.managerEndpointStewardDefault`:null,E=t?v(t.selection_policy===`pinned`?`header.managerSelectionPinned`:t.selection_policy===`flexible`?`header.managerSelectionFlexible`:`header.managerSelectionPreferred`):null,D=t?.allocation_reason?v(t.allocation_reason===`user_explicit`?`header.managerAllocationUser`:t.allocation_reason===`pinned_configuration`?`header.managerAllocationPinned`:t.allocation_reason===`flexible_availability_fallback`?`header.managerAllocationFallback`:t.allocation_reason===`flexible_pool_unavailable`?`header.managerAllocationUnavailable`:t.allocation_reason===`flexible_primary_available`?`header.managerAllocationPrimary`:t.allocation_reason===`product_default`?`header.managerAllocationProductDefault`:t.allocation_reason===`service_override`?`header.managerAllocationService`:`header.managerAllocationConfigured`):null,O=p?(0,z.jsxs)(`span`,{className:`personal-read-only-source`,title:v(`header.readOnlySourceDescription`,{source:p}),children:[(0,z.jsx)(ym,{size:15}),p,(0,z.jsx)(`small`,{children:v(`common.readOnly`)})]}):(0,z.jsx)(rb,{ariaLabel:v(`header.selectChatRuntime`),className:`personal-agent-select`,icon:(0,z.jsx)(rm,{size:16}),onChange:u,options:e.map(e=>({disabled:!e.available,label:`${e.label}${e.available?``:` · ${v(`header.agentUnavailable`)}`}`,value:e.agentId})),prefixLabel:v(`header.chatRuntime`),value:m});return(0,z.jsxs)(`header`,{className:`personal-channel-header`,"data-goal-selected":!!h,children:[(0,z.jsx)(`button`,{"aria-expanded":i??!1,"aria-label":v(`header.openGoalNavigation`),className:`personal-icon-button personal-mobile-menu`,onClick:c,type:`button`,children:(0,z.jsx)(Mm,{size:18})}),(0,z.jsxs)(`div`,{className:`personal-channel-title`,children:[(0,z.jsx)(`h1`,{children:h?.title??v(`header.manager`)}),h&&!h.loadState&&![`安静运行`,`推进中`].includes(h.state)?(0,z.jsx)(`p`,{children:Yi(h.state,_)}):null,!h&&t?(0,z.jsxs)(`p`,{className:`personal-manager-execution`,children:[(0,z.jsxs)(`span`,{className:b?`personal-execution-chip is-unavailable`:`personal-execution-chip`,children:[(0,z.jsx)(`span`,{className:`personal-execution-chip-endpoint`,children:t.executor_endpoint}),y?(0,z.jsx)(`span`,{className:`personal-execution-chip-kind`,children:y}):null,(0,z.jsx)(`span`,{className:`personal-execution-chip-model`,children:t.model}),S?(0,z.jsx)(`span`,{className:`personal-execution-chip-budget`,children:S}):null]}),b?(0,z.jsx)(`span`,{className:`personal-execution-note`,children:v(w,{executor:t.executor_endpoint,credential:t.credential_env_var})}):null]}):null,!h&&(r||T)?(0,z.jsxs)(`details`,{className:`personal-runtime-details`,open:r!=null&&r.status!==`ready`||void 0,children:[(0,z.jsx)(`summary`,{children:_===`zh-CN`?`运行环境`:`Execution environment`}),!h&&r?(0,z.jsx)(`p`,{children:r.status===`ready`?v(`header.managerRuntime`,{profile:r.runtime_profile,sandbox:r.sandbox}):v(`header.managerRuntimeFallback`,{profile:r.runtime_profile,sandbox:r.sandbox})}):null,E&&D&&t?(0,z.jsx)(`p`,{children:v(`header.managerAllocation`,{policy:E,reason:D})}):null,T&&t?(0,z.jsx)(`span`,{className:`personal-execution-rule-note`,children:v(T,{executor:t.executor_endpoint})}):null]}):null,h?.loadState?(0,z.jsx)(`p`,{role:`status`,children:v(h.loadState===`error`?`startup.goalError`:`startup.goalLoading`)}):null]}),h?(0,z.jsxs)(`div`,{className:`personal-goal-navigation`,children:[(0,z.jsxs)(`nav`,{"aria-label":v(`header.goalView`),className:`personal-goal-tabs`,children:[(0,z.jsx)(`button`,{"aria-current":g===`overview`?`page`:void 0,onClick:()=>l(`overview`),type:`button`,children:v(`header.overview`)}),(0,z.jsx)(`button`,{"aria-current":g===`tasks`?`page`:void 0,onClick:()=>l(`tasks`),type:`button`,children:v(`header.tasks`)}),(0,z.jsx)(`button`,{"aria-current":g===`chat`?`page`:void 0,onClick:()=>l(`chat`),type:`button`,children:v(`header.chat`)}),(0,z.jsx)(`button`,{"aria-current":g===`files`?`page`:void 0,onClick:()=>l(`files`),type:`button`,children:v(`header.files`)})]}),O]}):(0,z.jsxs)(`nav`,{"aria-label":v(`header.managerView`),className:`personal-goal-tabs`,children:[(0,z.jsx)(`button`,{"aria-current":n?void 0:`page`,onClick:d,type:`button`,children:v(`header.managerOverview`)}),(0,z.jsx)(`button`,{"aria-current":n?`page`:void 0,onClick:o,type:`button`,children:v(`header.chat`)})]}),(0,z.jsxs)(`div`,{className:`personal-channel-actions`,children:[h&&a?(0,z.jsx)(`button`,{"aria-label":v(`header.goalSettings`),title:v(`header.goalSettingsDescription`),className:`personal-icon-button personal-goal-settings-action`,onClick:a,type:`button`,children:(0,z.jsx)(Qm,{"aria-hidden":!0,size:17})}):null,h?null:O,s?(0,z.jsxs)(`span`,{className:`personal-refresh-control is-${f??`idle`}`,children:[f===`loading`?(0,z.jsx)(`small`,{children:v(`header.refreshing`)}):f===`done`?(0,z.jsx)(`small`,{children:v(`header.refreshDone`)}):f===`error`?(0,z.jsx)(`small`,{children:v(`header.refreshFailed`)}):null,(0,z.jsx)(`button`,{"aria-label":v(f===`loading`?`header.refreshing`:`header.refresh`),className:`personal-icon-button`,disabled:f===`loading`,onClick:s,type:`button`,children:(0,z.jsx)(Um,{className:f===`loading`?`is-spinning`:void 0,size:17})})]}):null]})]})}function ab({result:e,zh:t,onInspect:n}){let r=t?{responds_to:`回应此版本`,revises:`修订此版本`,uses:`使用此版本`}:{responds_to:`Respond to this version`,revises:`Revise this version`,uses:`Use this version`};return(0,z.jsxs)(`section`,{className:`goal-team-lineage`,"aria-label":t?`版本与采用关系`:`Versions and adoption`,children:[e.dependencies?.length?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h4`,{children:t?`请求中的版本依据`:`Versions in the request`}),(0,z.jsx)(`ul`,{children:e.dependencies.map((e,i)=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`strong`,{children:r[e.relation]??(t?`未知关系`:`Unknown relationship`)}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>n(e.operation_id),children:e.operation_id}),(0,z.jsx)(`span`,{children:e.state===`current`?t?`源产物与接收方输入一致`:`Source and receiver input match`:t?`此版本无法核验`:`This version cannot be verified`}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`指定版本`:`Referenced version`}),(0,z.jsxs)(`code`,{children:[e.ref,` · sha256:`,e.sha256]}),(0,z.jsx)(`code`,{children:e.input_ref})]})]},`${e.operation_id}:${e.input_ref}:${i}`))}),(0,z.jsx)(`p`,{children:t?`这是请求的关系;完成修订或采用仍需结果和回执。`:`These are requested relationships; revision or adoption still needs results and receipts.`})]}):null,(0,z.jsx)(`h4`,{children:t?`请求方采用`:`Requester adoption`}),e.adoptions?.length?(0,z.jsx)(`ul`,{children:e.adoptions.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`strong`,{children:e.state===`current`?t?`已记录采用 · 后续结果验收有效`:`Adoption recorded · downstream result currently accepted`:t?`采用证据已失效或无法核验`:`Adoption evidence stale or unavailable`}),(0,z.jsxs)(`span`,{children:[e.requester_agent_id,` → `,e.consumer_agent_id]}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>n(e.consumer_operation_id),children:t?`查看后续结果`:`Inspect downstream result`}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`采用版本与结果版本`:`Source and result versions`}),e.source_artifacts.map(e=>(0,z.jsxs)(`code`,{children:[t?`来源`:`Source`,`: `,e.ref,` · sha256:`,e.sha256]},`source:${e.ref}`)),e.consumer_artifacts.map(e=>(0,z.jsxs)(`code`,{children:[t?`结果`:`Result`,`: `,e.ref,` · sha256:`,e.sha256]},`result:${e.ref}`))]})]},e.consumer_operation_id))}):(0,z.jsx)(`p`,{children:t?`尚无请求方采用记录。`:`No requester adoption is recorded.`})]})}function ob({sessionId:e,operationId:t,zh:n,canMessage:r,ingress:i,onInspect:a}){let[o,s]=(0,R.useState)(null),[c,l]=(0,R.useState)(``),[u,d]=(0,R.useState)(!1),[f,p]=(0,R.useState)(``),[m,h]=(0,R.useState)(``),[g,_]=(0,R.useState)(!1),[v,y]=(0,R.useState)(``),[b,x]=(0,R.useState)(null),S=(0,R.useRef)(null),C=(0,R.useRef)(0);(0,R.useEffect)(()=>(w(),()=>{C.current++}),[e,t]);async function w(){let n=++C.current;s(null),l(``),p(``),d(!0);try{let r=await cg(e,t);n===C.current&&(s(r),l(new Date().toLocaleTimeString()))}catch(e){n===C.current&&p(e instanceof Error?e.message:String(e))}finally{n===C.current&&d(!1)}}async function T(){if((!o||!m.trim())&&!S.current)return;let r=S.current??{id:crypto.randomUUID(),text:[`${n?`针对团队执行`:`Regarding team execution`}: ${t}`,...(o?.artifacts??[]).map(e=>`${e.ref} · sha256:${e.sha256}`),m.trim()].join(` -`)};S.current=r,_(!0),y(``);try{let t=await pg(e,r.text,`inbox`,r.id);x({id:r.id,status:t.status})}catch(e){y(e instanceof Error?e.message:String(e))}finally{_(!1)}}let E=b?i.find(e=>e.client_ingress_id===b.id)?.status??b.status:``,D=E===`pending`?n?`已进入协调员收件箱,等待读取`:`In the coordinator inbox; awaiting read`:E===`delivered`?n?`已交给协调员;尚无应用回执`:`Delivered to coordinator; application not confirmed`:n?`投递状态待核实`:`Delivery requires reconciliation`;return(0,z.jsxs)(`section`,{className:`goal-team-evidence`,"aria-label":n?`执行证据`:`Execution evidence`,"aria-busy":u,children:[(0,z.jsxs)(`div`,{className:`goal-team-work-actions`,children:[(0,z.jsx)(`h3`,{children:n?`执行证据`:`Execution evidence`}),(0,z.jsx)(`button`,{type:`button`,disabled:u,onClick:()=>void w(),children:n?`重新读取证据`:`Recheck evidence`})]}),(0,z.jsx)(`code`,{children:t}),u?(0,z.jsx)(`p`,{role:`status`,children:n?`正在核验绑定、验收与文件…`:`Checking bindings, acceptance and files…`}):null,f?(0,z.jsxs)(`p`,{role:`alert`,children:[n?`无法核验,已清除上次证据。`:`Cannot verify; previous evidence cleared.`,` `,f]}):null,o?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`p`,{role:`status`,children:[(0,z.jsxs)(`strong`,{children:[o.agent_id,` · `,lg(o,n)]}),` · `,c]}),(0,z.jsx)(`p`,{children:n?`按需读取的当前观察,不是持续在线状态;验收不代表协调员已采用。`:`An on-demand observation, not continuous liveness; acceptance does not establish coordinator adoption.`}),(0,z.jsx)(ab,{result:o,zh:n,onInspect:a}),o.error?(0,z.jsx)(`p`,{role:`alert`,children:o.error}):null,o.status===`accepted`&&o.artifacts?.length?o.artifacts.map(e=>(0,z.jsxs)(`article`,{children:[(0,z.jsx)(`h4`,{children:e.ref}),(0,z.jsx)(`pre`,{tabIndex:0,"aria-label":`${n?`证据内容`:`Evidence content`}: ${e.ref}`,children:e.text}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n?`版本与来源标识`:`Version and source identifiers`}),(0,z.jsxs)(`code`,{children:[`sha256:`,e.sha256]}),(0,z.jsx)(`code`,{children:o.request_id}),(0,z.jsx)(`code`,{children:o.todo_id})]})]},e.ref)):(0,z.jsx)(`p`,{children:n?`本次读取没有可展示的已验收产物。`:`No accepted artifact is available in this readback.`}),(0,z.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),T()},children:[(0,z.jsxs)(`label`,{children:[n?`向协调员反馈此执行`:`Send feedback about this execution`,(0,z.jsx)(`textarea`,{value:m,maxLength:6e3,rows:3,disabled:!!S.current,onChange:e=>h(e.target.value)})]}),(0,z.jsx)(`p`,{children:n?`附上执行标识及当前产物版本,交给原协调员收件箱;不会直接改写任务或中断成员。`:`Includes the operation and observed artifact versions in the original coordinator inbox; does not change tasks or interrupt members.`}),r?null:(0,z.jsx)(`p`,{children:n?`协调员未在执行或当前观察不可用;恢复执行后可发送。`:`Coordinator inactive or observation unavailable; resume execution to send.`}),(0,z.jsx)(`button`,{type:`submit`,disabled:!r||g||!!b||!m.trim(),children:g?n?`正在投递…`:`Sending…`:v?n?`重试同一条反馈`:`Retry this feedback`:n?`发送反馈`:`Send feedback`})]})]}):null,v?(0,z.jsxs)(`p`,{role:`alert`,children:[n?`未确认投递,请重试同一条反馈,避免重复发送。`:`Delivery not confirmed; retry the same feedback to avoid duplicates.`,` `,v]}):null,b?(0,z.jsx)(`p`,{role:`status`,children:D}):null]})}var sb={authority_unavailable:{en:`Canonical authority unavailable`,zh:`缺少规范权限状态`},turn_blocked:{en:`Task admission blocked`,zh:`当前任务未获准执行`},acceptance_unavailable:{en:`Acceptance binding unavailable`,zh:`缺少有效验收绑定`},runtime_unavailable:{en:`Runtime unavailable`,zh:`运行时不可用`},runtime_unverified:{en:`Runtime availability unverified`,zh:`运行时可用性尚未验证`},launchable:{en:`Local launch prerequisites met`,zh:`本机启动条件已满足`}};function cb({check:e,zh:t}){let n=e.executor?[e.executor.host,e.executor.reason].filter(Boolean).join(` · `):e.authority_reason,r=e.state===`authority_unavailable`?t?`未检查或启动执行器`:`No executor was inspected or launched`:t?`不代表正在执行`:`Does not mean executing`;return(0,z.jsxs)(`p`,{role:`status`,children:[t?sb[e.state].zh:sb[e.state].en,n?` · ${n}`:``,` · ${r}`]})}function lb({sessionId:e,members:t,zh:n,canMessage:r,ingress:i}){let[a,o]=(0,R.useState)(null),s=(0,R.useRef)(null),c=(0,R.useRef)(null),l=(0,R.useRef)(null),[u,d]=(0,R.useState)(null),[f,p]=(0,R.useState)({}),[m,h]=(0,R.useState)(!1),[g,_]=(0,R.useState)(``),v=(0,R.useRef)(0);(0,R.useEffect)(()=>{(a?s.current:l.current)?.focus()},[a]),(0,R.useEffect)(()=>(v.current++,d(null),p({}),_(``),h(!1),y(),()=>{v.current++}),[e]);async function y(t){let n=++v.current;h(!0),_(``),d(null),o(null);try{let r=await ug(e,t);n===v.current&&d(r)}catch(e){n===v.current&&_(e instanceof Error?e.message:String(e))}finally{n===v.current&&h(!1)}}async function b(t){let n=++v.current;h(!0),_(``),p(e=>{let n={...e};return delete n[t],n});try{let r=await dg(e,t);n===v.current&&p(e=>({...e,[t]:r}))}catch(e){n===v.current&&_(e instanceof Error?e.message:String(e))}finally{n===v.current&&h(!1)}}return a?(0,z.jsxs)(`div`,{className:`goal-team-work`,children:[(0,z.jsx)(`button`,{ref:s,type:`button`,onClick:()=>o(null),children:n?`返回执行列表`:`Back to executions`}),(0,z.jsx)(ob,{sessionId:e,operationId:a,zh:n,canMessage:r,ingress:i,onInspect:o},`${e}:${a}`)]}):(0,z.jsx)(`div`,{className:`goal-team-work`,children:(0,z.jsxs)(`section`,{"aria-label":n?`团队执行详情`:`Team execution details`,children:[(0,z.jsx)(`p`,{children:n?`检查不会启动成员。暂停协调员后,已派发的工作仍会继续。`:`Inspection starts no members. Dispatched work continues when the coordinator is paused.`}),(0,z.jsx)(`h3`,{children:n?`已绑定成员`:`Bound members`}),(0,z.jsx)(`ul`,{className:`goal-team-bindings`,children:t.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e.agent_id}),(0,z.jsx)(`button`,{type:`button`,disabled:m,onClick:()=>void b(e.id),children:n?`检查启动条件`:`Check prerequisites`})]}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n?`任务与执行配置`:`Task and execution details`}),(0,z.jsx)(`code`,{children:e.todo_id}),f[e.id]?.executor?.profile?(0,z.jsx)(`code`,{children:f[e.id]?.executor?.profile}):null]}),f[e.id]?(0,z.jsx)(cb,{check:f[e.id],zh:n}):null]},e.id))}),(0,z.jsxs)(`div`,{className:`goal-team-work-actions`,children:[(0,z.jsx)(`strong`,{children:n?`此协调身份的持久工作`:`Durable work for this coordinator`}),(0,z.jsx)(`button`,{type:`button`,disabled:m,onClick:()=>{p({}),y()},children:n?`重新核验`:`Refresh`}),u?.has_more&&u.next_cursor?(0,z.jsx)(`button`,{type:`button`,disabled:m,onClick:()=>void y(u.next_cursor),children:n?`下一页`:`Next page`}):null]}),m?(0,z.jsx)(`p`,{role:`status`,children:n?`正在读取当前事实…`:`Reading current facts…`}):null,g?(0,z.jsx)(`p`,{role:`alert`,children:g}):null,u?(0,z.jsxs)(z.Fragment,{children:[u.page_readback_complete?null:(0,z.jsx)(`p`,{role:`status`,children:n?`本页有无法核验的工作,请检查原请求;不要直接重新派工。`:`Some work cannot be verified. Reconcile the original request before redispatching.`}),u.items.length?null:(0,z.jsx)(`p`,{children:n?`此页没有委派记录;不代表整个团队没有工作或 Goal 已完成。`:`No records on this page; this does not establish an idle team or a completed Goal.`}),(0,z.jsx)(`ul`,{className:`goal-team-operations`,children:u.items.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`strong`,{children:[e.agent_id??(n?`记录不可读`:`Unreadable record`),` · `,lg(e,n)]}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n?`执行标识`:`Execution identifier`}),(0,z.jsx)(`code`,{children:e.operation_id??e.record_id})]}),e.operation_id?(0,z.jsx)(`button`,{ref:e.operation_id===c.current?l:void 0,type:`button`,onClick:()=>{c.current=e.operation_id,o(e.operation_id)},children:n?`查看证据与反馈`:`Evidence and feedback`}):null]},e.record_id))}),(0,z.jsxs)(`p`,{children:[n?`仅限当前协调身份;分页不是团队快照。`:`Scoped to this coordinator; paging is not a team snapshot.`,u.has_more?n?` 还有下一页。`:` More pages remain.`:``]})]}):null]})})}function ub({sessionId:e,onPrepare:t,onExecute:n,onChange:r}){let{locale:i}=Ji(),a=i===`zh-CN`,[o,s]=(0,R.useState)(null),[c,l]=(0,R.useState)(null),u=c===`settings`,d=e=>l(e?`settings`:null),f=(0,R.useRef)(null);(0,R.useEffect)(()=>{c&&!f.current?.open?f.current?.showModal():!c&&f.current?.open&&f.current.close()},[c]);let[p,m]=(0,R.useState)(!1),[h,g]=(0,R.useState)(``),[_,v]=(0,R.useState)(``),[y,b]=(0,R.useState)({agent_id:``,token_budget:0});(0,R.useEffect)(()=>{let t=!0,n=!1;if(s(null),r(null),g(``),v(``),d(!1),!e||e===`new-session-pending`)return;async function i(){if(!n){n=!0;try{let n=await sg(e);t&&(s(n),r(n),v(``))}catch(e){t&&v(e instanceof Error?e.message:String(e))}finally{n=!1}}}i();let a=window.setInterval(()=>{document.hidden||i()},2500);return()=>{t=!1,window.clearInterval(a)}},[e]);let x=!!(o?.enabled&&o.active_turn_id),S=o?.native.status??`absent`,C=![`absent`,`complete`].includes(S),w=!!(o?.settings.agent_id&&o.settings.token_budget&&o.settings.execution_config),T=e=>{b({agent_id:e.settings.agent_id??``,token_budget:e.settings.token_budget??0}),d(!0)},E=o?.enabled?o.recovery_required?a?`LoopX · 需要恢复连接`:`LoopX · Reconnect required`:S===`blocked`?a?`LoopX · 需要处理阻塞`:`LoopX · Blocked`:x?a?`LoopX · 正在推进`:`LoopX · Working`:S===`complete`?a?`LoopX · 本轮已结束`:`LoopX · Run finished`:[`budgetLimited`,`usageLimited`].includes(S)?a?`LoopX · 已到额度限制`:`LoopX · Usage limit`:a?`LoopX · 已暂停`:`LoopX · Paused`:a?`普通对话`:`Conversation`,D=()=>{o&&!u?T(o):d(!1)};async function O(){m(!0),g(``);try{let e=await sg(await t());s(e),r(e),T(e)}catch(e){g(e instanceof Error?e.message:String(e))}finally{m(!1)}}async function k(t){if(e){m(!0),g(``);try{let n=await fg(e,t,t===`configure`?y:void 0);s(n),r(n),(t===`configure`||t===`exit`)&&d(!1)}catch(e){g(e instanceof Error?e.message:String(e))}finally{m(!1)}}}let A=o?.deliveries.some(e=>[`rejected`,`unavailable`].includes(e.status)),ee=o?.ingress.filter(e=>e.status!==`delivered`)??[];return(0,z.jsxs)(`section`,{className:`goal-loopx-mode`,"aria-label":a?`LoopX 运行模式`:`LoopX execution mode`,children:[(0,z.jsxs)(`div`,{className:`goal-loopx-mode-bar`,children:[(0,z.jsxs)(`span`,{className:`goal-loopx-mode-status`,"data-active":x,role:`status`,children:[(0,z.jsx)(`i`,{"aria-hidden":`true`}),E]}),(0,z.jsxs)(`div`,{className:`goal-loopx-mode-actions`,children:[w&&e?(0,z.jsxs)(`button`,{type:`button`,className:`goal-loopx-team-trigger`,onClick:()=>l(`team`),"aria-haspopup":`dialog`,children:[(0,z.jsx)(oh,{size:16}),a?`团队执行情况`:`Team execution`,A?(0,z.jsx)(`span`,{className:`goal-loopx-alert-dot`,"aria-label":a?`最近回读需要核验`:`Last observations need review`}):null]}):null,(0,z.jsx)(`button`,{type:`button`,disabled:p||o?.conversation_busy||!o,onClick:D,"aria-label":a?`运行设置`:`Settings`,title:a?`运行设置与用量`:`Settings and usage`,"aria-haspopup":`dialog`,children:(0,z.jsx)(Xm,{size:16})}),(0,z.jsxs)(`button`,{type:`button`,className:`goal-loopx-primary`,disabled:p||!!(o?.conversation_busy&&!x),title:x?a?`暂停协调员;已派发的成员继续执行`:`Pause coordinator; dispatched members keep working`:void 0,onClick:async()=>{if(!o){await O();return}x?k(`pause`):!w||Number(o.settings.token_budget??0)<=Number(o.native.tokensUsed??0)?D():n(C?`resume`:`start`)},children:[x?(0,z.jsx)(zm,{size:14}):(0,z.jsx)(Bm,{size:14}),x?a?`暂停协调员`:`Pause coordinator`:o?.enabled?S===`complete`?a?`开启新一轮`:`Start new run`:a?`恢复推进`:`Continue`:a?`开启 LoopX 模式`:`Enable LoopX`]})]})]}),ee.length?(0,z.jsxs)(`p`,{role:`status`,children:[a?`待处理消息:`:`Pending messages: `,ee.map(e=>`${e.mode===`loopx_queue`?`queue`:`inbox`} · ${e.status}`).join(` / `)]}):null,A?(0,z.jsx)(`button`,{className:`goal-loopx-review-notice`,type:`button`,onClick:()=>l(`team`),children:a?`最近成员回读有未通过或无法核验的结果 · 查看团队`:`Last member observations include rejected or unverified results · View team`}):null,(h||_)&&!c?(0,z.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:h||_}):null,(0,z.jsx)(`dialog`,{className:`goal-loopx-dialog`,ref:f,"aria-labelledby":`goal-loopx-dialog-title`,onClose:()=>l(null),onClick:e=>{e.target===e.currentTarget&&l(null)},children:c?(0,z.jsxs)(`div`,{className:`goal-loopx-dialog-content`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h2`,{id:`goal-loopx-dialog-title`,children:c===`team`?a?`团队执行情况`:`Team execution`:a?`运行设置`:`Execution settings`}),(0,z.jsx)(`button`,{type:`button`,autoFocus:!0,"aria-label":a?`关闭`:`Close`,onClick:()=>l(null),children:(0,z.jsx)(sh,{size:18})})]}),h||_?(0,z.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:h||_}):null,c===`team`&&e&&!_?(0,z.jsx)(lb,{sessionId:e,members:o?.members??[],zh:a,canMessage:x&&!o?.paused&&!_,ingress:o?.ingress??[]},`${e}:${o?.settings.agent_id}:${o?.settings.execution_config}`):null,c===`team`?(0,z.jsxs)(`div`,{className:`goal-team-control`,children:[(0,z.jsx)(`button`,{type:`button`,disabled:p||!x||!!_,onClick:()=>void k(`pause`),children:a?`暂停协调员`:`Pause coordinator`}),(0,z.jsxs)(`p`,{role:`status`,children:[o?.paused?x?a?`已暂停后续调度,等待当前协调轮次停止回读。`:`Further dispatch paused; awaiting coordinator turn stop readback.`:a?`协调员已暂停。`:`Coordinator paused.`:null,a?`此操作不会停止已派发成员;成员状态以上次执行回读为准。当前入口不支持停止整个团队。`:`This does not stop dispatched members; their states are last-read observations. Whole-team stop is unavailable here.`]})]}):null,u?(0,z.jsxs)(`div`,{className:`goal-loopx-mode-settings`,children:[(0,z.jsxs)(`label`,{children:[a?`已注册的协调身份`:`Registered coordinator`,(0,z.jsxs)(`select`,{value:y.agent_id,onChange:e=>b({...y,agent_id:e.target.value}),children:[(0,z.jsx)(`option`,{value:``,children:a?`选择已授权身份`:`Select authorized identity`}),o?.registered_agents.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]})]}),(0,z.jsxs)(`label`,{children:[a?`协调员总 token 额度`:`Coordinator total token allowance`,(0,z.jsx)(`input`,{type:`number`,min:1,max:2147483647,value:y.token_budget||``,onChange:e=>b({...y,token_budget:Number(e.target.value)})})]}),(0,z.jsxs)(`label`,{children:[a?`成员执行绑定文件(Goal 配置)`:`Member execution bindings (Goal configuration)`,(0,z.jsx)(`input`,{readOnly:!0,value:o?.settings.execution_config??(a?`未配置`:`Not configured`)})]}),(0,z.jsx)(`p`,{children:a?`绑定文件由 Goal 子代理设置统一管理;额度包含协调员历史用量,成员授权不会因开启模式而扩大。`:`Manage the binding file in Goal sub-agent settings. The allowance includes coordinator history; enabling this mode does not expand member grants.`}),(0,z.jsx)(`button`,{type:`button`,disabled:p||!y.agent_id||y.token_budget<1||!o?.settings.execution_config,onClick:()=>void k(`configure`),children:a?`保存设置`:`Save settings`})]}):null,c===`settings`&&o?.enabled&&o.native.tokensUsed!==void 0?(0,z.jsxs)(`p`,{className:`goal-loopx-mode-usage`,children:[a?`协调员累计用量`:`Coordinator usage`,` `,o.native.tokensUsed.toLocaleString(),` / `,o.native.tokenBudget?.toLocaleString()??`—`,` tokens`]}):null,c===`settings`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{children:a?`开启后,当前协调员持续推进本 Goal。暂停仅影响协调员,已派发成员继续执行;本轮结束不等于 Goal 完成。`:`The coordinator continues this Goal. Pausing affects only the coordinator; dispatched members keep working. A finished run does not complete the Goal.`}),o?.enabled&&!x?(0,z.jsx)(`button`,{type:`button`,disabled:p,onClick:()=>void k(`exit`),children:a?`退出模式`:`Exit mode`}):null]}):null]}):null})]})}function db({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)(um,{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)(cm,{size:17})]})}var fb=/(`[^`\n]+`)|(\*\*[^*\n]+(\*[^*\n]*)?\*\*)|(\[[^\]\n]{1,120}\]\(https?:\/\/[^)\s]+\))/g;function pb(e,t){let n=[],r=0,i=0;for(let a of e.matchAll(fb)){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=4))throw e;await new Promise(e=>globalThis.setTimeout(e,250*2**(i-1)))}}if(!a)throw new Rh(`Agent 事件流连接已断开。`,{reconnect_attempts:i})}async function og(e,t){return Yh(`/api/chat/sessions/${e}/turns/${t}/interrupt`,{method:`POST`,body:`{}`})}function sg(e){return Yh(`/api/chat/sessions/${e}/loopx`)}function cg(e,t){return Yh(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`read`,operation_id:t})})}function lg(e,t){return e.status===`unavailable`?t?`无法核验`:`Unavailable`:e.status===`accepted`?t?`已通过当前验收`:`Currently accepted`:e.status===`rejected`?t?`未通过验收`:`Rejected`:e.recovery_required?t?`需要恢复原执行`:`Original execution needs recovery`:e.status===`running`&&e.worker_active?t?`执行中`:`Executing`:e.status===`turn_returned`&&e.worker_active?t?`正在验收`:`Validating`:[`prepared`,`running`,`turn_returned`].includes(e.status)?t?`已派发,等待执行回读`:`Dispatched; awaiting execution readback`:t?`状态未知`:`Unknown state`}function ug(e,t){return Yh(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`operations`,limit:10,...t?{cursor:t}:{}})})}function dg(e,t){return Yh(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`inspect`,binding_id:t})})}function fg(e,t,n,r=crypto.randomUUID()){return Yh(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:t,operation_id:r,...n?{settings:n}:{}})})}function pg(e,t,n,r=crypto.randomUUID()){return Yh(`/api/chat/sessions/${e}/loopx`,{method:`POST`,body:JSON.stringify({operation:`message`,operation_id:r,message:t,delivery_mode:n})})}async function mg(e,t,n={}){let r=await rg(e,t,n.clientTurnId??crypto.randomUUID(),n.attachments);return n.onPhase?.(`turn.accepted`,r.turn_id),hg(e,r.turn_id,r.events_url,n)}async function hg(e,t,n,r={}){let i=null,a={failure:null,interrupted:null};try{await ag(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 Rh&&!r.signal?.aborted?new Rh(i.message,{...i.payload,events_url:n,reconnectable:!0,session_id:e,turn_id:t}):i}if(a.failure)throw new Rh(String(a.failure.message||`Agent 回合失败。`),a.failure);if(a.interrupted)throw new Rh(`Agent 回合已中断。`,{...a.interrupted,error_code:`turn_interrupted`,session_id:e,turn_id:t});return{response:jh.parse(i),sessionId:e,turnId:t}}async function gg(e,t,n={}){return hg(e,t,`/api/chat/sessions/${e}/turns/${t}/events`,n)}async function _g(e){let t=Mh.parse(await Yh(`/api/chat/sessions/${e}`,{keepalive:!0,method:`DELETE`}));if(t.session_id!==e)throw new Rh(`Agent 会话关闭回执与本次请求不一致。`,{session_id:t.session_id});return t}async function vg(e){return Yh(`/api/chat/sessions/${e}/resume`,{method:`POST`,body:`{}`})}function yg(e){return{goal_id:e.goalId,enabled:e.enabled,align_codex_host_capacity:e.alignCodexHostCapacity??!1,...e.modelConfig===void 0?{}:{model_config:e.modelConfig},...e.executionConfig===void 0?{}:{execution_config:e.executionConfig},...e.enabled?{max_children:e.maxChildren,allowed_domains:e.allowedDomains}:{}}}function bg(e,t){let n=e.after.orchestration,r=[...new Set(t.allowedDomains)],i=e.feature_summary.multi_subagent===`enabled`,a=e.goal_id===t.goalId&&i===t.enabled&&(t.modelConfig===void 0||JSON.stringify(n.model_config??null)===JSON.stringify(t.modelConfig))&&(t.executionConfig===void 0||(n.execution_config??``)===t.executionConfig)&&(t.enabled?n.max_children===t.maxChildren&&JSON.stringify(n.allowed_domains)===JSON.stringify(r):n.spawn_allowed===!1&&n.max_children===0),o=!t.alignCodexHostCapacity||!t.enabled||e.codex_host_capacity.required_children===t.maxChildren;if(!a||!o)throw new Rh(`Goal 子代理配置回执与本次请求不一致,界面已停止更新。`,{after:e.after,goal_id:e.goal_id});return e}async function xg(e){let t=Ih.parse(await Yh(`/api/chat/goal-subagents/dry-run`,{method:`POST`,body:JSON.stringify(yg(e))}));if(!t.dry_run||t.execute||t.written)throw new Rh(`Goal 子代理预览返回了非预览回执,已停止进入确认状态。`,{result:t});return bg(t,e)}async function Sg(e,t){let n=Ih.parse(await Yh(`/api/chat/goal-subagents/apply`,{method:`POST`,body:JSON.stringify({...yg(e),preview_id:t})}));if(n.preview_id!==t||n.dry_run||!n.execute)throw new Rh(`Goal 子代理写入回执与本次确认不一致,界面已停止更新。`,{result:n});if(n.changed&&(!n.written||n.goal_configuration_changed&&(!n.global_sync.executed||!n.global_sync.readback.verified)||e.alignCodexHostCapacity&&n.codex_host_capacity.write_required&&!n.codex_host_capacity.written))throw new Rh(`Goal 子代理设置未通过共享状态读回验证。`,{result:n});return bg(n,e)}var Cg=J({ok:X(!0),targets:q(J({enabled:K(),provider:W(),target_name:W()}))});async function wg(){return Cg.parse(await Yh(`/api/chat/goal-channel/targets`)).targets}var Tg=J({ok:K(),blocker:W().optional(),public_summary:W().optional(),status:W().optional()});async function Eg(e){return Tg.parse(await Yh(`/api/chat/goal-channel/setup`,{method:`POST`,body:JSON.stringify({execute:e.execute,goal_id:e.goalId,target:e.target})}))}async function Dg(e){return Tg.parse(await Yh(`/api/chat/goal-channel/configure`,{method:`POST`,body:JSON.stringify({auto_notify_human_gates:e.autoNotify,goal_id:e.goalId})}))}var Og=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:Og.nullable().optional()});var kg=J({schema_version:X(`loopx_machine_configuration_v0`),namespaces:yd(W(),yd(W(),ad()))}),Ag=J({namespace:W(),title:W(),description:W(),schema_versions:q(W()).min(1),configuration_template:yd(W(),ad()),template_status:Y([`ready`,`schema_only`])}),jg=J({schema_version:X(`machine_configuration_catalog_v0`),namespaces:q(Ag)}),Mg=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()}),Ng=J({schema_version:X(`capability_configuration_editor_v0`),editable:K(),supported_scopes:q(Y([`goal`,`machine`])),writable_scopes:q(Y([`goal`,`machine`])),fields:q(Mg),read_only_reason:W().optional()}),Pg=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:yd(W(),ad()).optional(),current:yd(W(),ad()).optional(),machine_current:yd(W(),ad()).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:yd(W(),ad()).nullable(),inherited:K(),goal_override_present:K(),machine_default_present:K(),effective_revision:W()}).optional(),documentation:yd(W(),ad()).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:Ng}))}),Fg=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:Pg}),Ig=J({ok:X(!0),goal_id:W(),capability_id:W(),changed_fields:q(W()),goal_configuration:yd(W(),ad()).nullable(),capability_catalog:Pg,codex_host_capacity:Fh.optional()}),Lg=Ig.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()}),Rg=dd([Ig.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:K(),host_capacity_pending:K().optional().default(!1),readback_verified:K(),changed_fields:q(W()),goal_configuration:yd(W(),ad()).nullable(),capability_catalog:Pg,error:W(),recommended_action:W(),codex_host_capacity:Fh.optional()})]),zg=J({ok:X(!0),available_namespaces:q(W()),namespace_catalog:jg.optional().default({schema_version:`machine_configuration_catalog_v0`,namespaces:[]}),capability_catalog:Pg,changed_namespaces:q(W()).optional().default([]),invalid_namespaces:q(W()).optional().default([]),machine_configuration:kg.nullable().optional()}),Bg=zg.extend({schema_version:X(`machine_configuration_inspection_v0`),status:Y([`configured`,`absent`,`invalid`]),revision:W()}),Vg=zg.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:kg.nullable()}),Hg=zg.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()}),Ug=zg.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=zg.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)}),Gg=J({configured:K(),source:Y([`machine_store`,`service_environment`,`unset`]),env_var:W().optional(),fingerprint:W().nullable().optional(),value:W().nullable().optional(),blocked_by:W().optional()}),Kg=J({ok:X(!0),schema_version:X(`operator_provider_credential_projection_v0`),action:W().optional(),store_ref:W(),store_revision:W(),record_present:K(),status:Y([`configured`,`absent`,`invalid`]),repair:W(),provider_key:Gg,base_url:Gg});async function qg(){return Kg.parse(await Yh(`/api/chat/operator-credential`))}async function Jg(e){return Kg.parse(await Yh(`/api/chat/operator-credential`,{method:`POST`,body:JSON.stringify(e)}))}async function Yg(){return Bg.parse(await Yh(`/api/chat/machine-configuration`))}async function Xg(e){let t=new URLSearchParams({goal_id:e});return Fg.parse(await Yh(`/api/chat/goal-configuration?${t.toString()}`))}async function Zg(e,t,n){return Lg.parse(await Yh(`/api/chat/goal-configuration/preview`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n})}))}async function Qg(e,t,n,r){return Rg.parse(await Yh(`/api/chat/goal-configuration/apply`,{method:`POST`,body:JSON.stringify({goal_id:e,capability_id:t,configuration:n,expected_plan_revision:r})}))}async function $g(e,t){return Vg.parse(await Yh(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,namespace_configuration:t})}))}async function e_(e,t,n){return Hg.parse(await Yh(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:n,namespace:e,namespace_configuration:t})}))}async function t_(e){return Vg.parse(await Yh(`/api/chat/machine-configuration/preview`,{method:`POST`,body:JSON.stringify({namespace:e,operation:`remove`})}))}async function n_(e,t){return Hg.parse(await Yh(`/api/chat/machine-configuration/apply`,{method:`POST`,body:JSON.stringify({expected_plan_revision:t,namespace:e,operation:`remove`})}))}async function r_(e){return Ug.parse(await Yh(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!1,transaction_id:e})}))}async function i_(e,t){return Wg.parse(await Yh(`/api/chat/machine-configuration/rollback`,{method:`POST`,body:JSON.stringify({execute:!0,expected_plan_revision:t,transaction_id:e})}))}var a_=J({ok:X(!0),goals:q(J({goal_id:W(),repository:J({branch:W(),identity:W(),label:W(),read_only:X(!0)})}))});async function o_(){return a_.parse(await Yh(`/api/chat/goals/contexts`)).goals}var s_=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 c_(){return s_.parse(await Yh(`/api/chat/lark/apps`)).apps}var l_=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 u_(e){return l_.parse(await Yh(`/api/chat/lark/app-setups`,{method:`POST`,body:JSON.stringify({app_ref:e.appRef,brand:e.brand})}))}async function d_(e){return l_.parse(await Yh(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`))}async function f_(e){return l_.parse(await Yh(`/api/chat/lark/app-setups/${encodeURIComponent(e)}`,{method:`DELETE`}))}var p_=[`invalid_event`,`binding_unavailable`,`chat_mismatch`,`topic_mismatch`,`route_ambiguous`,`self_message`,`invalid_routing_state`,`not_addressed`],m_=J({ok:X(!0),chats:q(J({chat_id:W(),chat_name:W()}))});async function h_(e,t){let n=new URLSearchParams({app_ref:e});return t&&n.set(`query`,t),m_.parse(await Yh(`/api/chat/lark/chats?${n.toString()}`)).chats}var g_=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:_d([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(p_).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 __(){return g_.parse(await Yh(`/api/chat/lark/connections`)).connections}async function v_(e){return Tg.parse(await Yh(`/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 y_(e,t){let n=new URLSearchParams({goal_id:e,connection_id:t});return Tg.parse(await Yh(`/api/chat/lark/connections?${n.toString()}`,{method:`DELETE`}))}function b_(e){return{loadedUrl:null,projectionRevision:0,requestedUrl:e,selectionRevision:0,requestGeneration:0}}function x_(e,t){return e.selectionRevision+=1,e.requestedUrl=t,e.selectionRevision}function S_(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 C_(e,t){return t.generation===e.requestGeneration&&e.projectionRevision===t.projectionRevision&&e.selectionRevision===t.selectionRevision}function w_(e,t){return C_(e,t)&&(!t.background||e.requestedUrl===null&&e.loadedUrl===t.url)}function T_(e,t,n){return t.get(e)===n}function E_(e,t,n,r){return e.filter(e=>T_(r(e),n,t))}function D_(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 O_=[`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`],k_=[`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`],A_=[`accounting`,`decision`,`evidence`,`state`,`work`],j_={accounting:0,decision:0,evidence:0,state:0,work:0},M_={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 N_(e,t){let n={...e};for(let r of O_)n[r]=(Number(e[r])||0)+(Number(t[r])||0);for(let r of k_)(e[r]!==void 0||t[r]!==void 0)&&(n[r]=(e[r]??0)+(t[r]??0));return n}function P_(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 A_)n[r]=(e[r]??0)+(t[r]??0);return n}function I_(e){let t={events_24h:0,events_7d:0,by_class_24h:{...j_},by_class_7d:{...j_}};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 L_(e,t,n){if(!e&&!t)return null;let r=E_(e?.goals??[],`active`,n,e=>e.goal_id),i=E_(t?.goals??[],`stopped`,n,e=>e.goal_id),a=D_(r,i,e=>e.goal_id),o=I_(r),s=I_(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 R_(e,t,n){if(!e&&!t)return null;let r=D_([...E_(e?.items??[],`active`,n,e=>e.goal_id),...E_(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 z_(e,t){return D_([...e,...t].sort((e,t)=>t.generated_at.localeCompare(e.generated_at)),[],e=>`${e.goal_id}:${e.generated_at}:${e.classification??``}`)}function B_(e,t,n){let r=D_(E_(e.items,`active`,n,e=>e.goal_id),E_(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 H_(e){let t={...M_};for(let n of e){for(let e of O_)t[e]+=Number(n[e])||0;for(let e of k_)n[e]!==void 0&&(t[e]=(t[e]??0)+n[e])}return t}function U_(e,t,n){if(!e&&!t)return null;let r=E_(e?.items??[],`active`,n,e=>e.goal_id),i=E_(t?.items??[],`stopped`,n,e=>e.goal_id),a=D_(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 W_(e,t,n){if(!e&&!t)return null;let r=E_(e?.goals??[],`active`,n,e=>e.goal_id),i=E_(t?.goals??[],`stopped`,n,e=>e.goal_id),a=D_(r,i,e=>e.goal_id),o=N_(H_(r),H_(i));return{...e??t,goals:P_(a,Number(o.runs_24h)||0),sample_run_count:(e?.sample_run_count??0)+(t?.sample_run_count??0),totals:o}}function G_(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=D_(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 K_(e,t,n){if(!e&&!t)return null;let r=D_(E_(e?.goals??[],`active`,n,e=>e.goal_id),E_(t?.goals??[],`stopped`,n,e=>e.goal_id),e=>e.goal_id);return{...e??t,goals:r}}function q_(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=D_(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:G_(c.agent_management_projection,l.agent_management_projection,s),attention_queue:B_(c.attention_queue,l.attention_queue,s),decision_freshness_summary:R_(c.decision_freshness_summary,l.decision_freshness_summary,s),event_ledger_summary:L_(c.event_ledger_summary,l.event_ledger_summary,s),goal_channel_notification_projection:K_(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:z_(c.run_history.recent_runs,l.run_history.recent_runs),run_count:c.run_history.run_count+l.run_history.run_count},todo_index:U_(c.todo_index,l.todo_index,s),usage_summary:W_(c.usage_summary,l.usage_summary,s)}}function J_(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,Z_=Y_,Q_=(e,t)=>n=>{if(t?.variants==null)return Z_(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=X_(t)||X_(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 Z_(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)},$_=(e,t)=>{let n=Array(e.length+t.length);for(let t=0;t({classGroupId:e,validator:t}),tv=(e=new Map,t=null,n)=>({nextPart:e,validators:t,classGroupId:n}),nv=`-`,rv=[],iv=`arbitrary..`,av=e=>{let t=cv(e),{conflictingClassGroups:n,conflictingClassGroupModifiers:r}=e;return{getClassGroupId:e=>{if(e.startsWith(`[`)&&e.endsWith(`]`))return sv(e);let n=e.split(nv);return ov(n,+(n[0]===``&&n.length>1),t)},getConflictingClassGroupIds:(e,t)=>{if(t){let t=r[e],i=n[e];return t?i?$_(i,t):t:i||rv}return n[e]||rv}}},ov=(e,t,n)=>{if(e.length-t===0)return n.classGroupId;let r=e[t],i=n.nextPart.get(r);if(i){let n=ov(e,t+1,i);if(n)return n}let a=n.validators;if(a===null)return;let o=t===0?e.join(nv):e.slice(t).join(nv),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?iv+r:void 0})(),cv=e=>{let{theme:t,classGroups:n}=e;return lv(n,t)},lv=(e,t)=>{let n=tv();for(let r in e){let i=e[r];uv(i,n,r,t)}return n},uv=(e,t,n,r)=>{let i=e.length;for(let a=0;a{if(typeof e==`string`){fv(e,t,n);return}if(typeof e==`function`){pv(e,t,n,r);return}mv(e,t,n,r)},fv=(e,t,n)=>{let r=e===``?t:hv(t,e);r.classGroupId=n},pv=(e,t,n,r)=>{if(gv(e)){uv(e(r),t,n,r);return}t.validators===null&&(t.validators=[]),t.validators.push(ev(n,e))},mv=(e,t,n,r)=>{let i=Object.entries(e),a=i.length;for(let e=0;e{let n=e,r=t.split(nv),i=r.length;for(let e=0;e`isThemeGetter`in e&&e.isThemeGetter===!0,_v=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)}}},vv=`!`,yv=`:`,bv=[],xv=(e,t,n,r,i)=>({modifiers:e,hasImportantModifier:t,baseClassName:n,maybePostfixModifierPosition:r,isExternal:i}),Sv=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 xv(t,l,c,u)};if(t){let e=t+yv,n=r;r=t=>t.startsWith(e)?n(t.slice(e.length)):xv(bv,!1,t,void 0,!0)}if(n){let e=r;r=t=>n({className:t,parseClassName:e})}return r},Cv=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}},wv=e=>({cache:_v(e.cacheSize),parseClassName:Sv(e),sortModifiers:Cv(e),postfixLookupClassGroupIds:Tv(e),...av(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(Ev),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?_+vv:_,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},Ov=(...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=wv(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=Dv(e,n);return i(e,a),a};return a=o,(...e)=>a(Ov(...e))},jv=[],Mv=e=>{let t=t=>t[e]||jv;return t.isThemeGetter=!0,t},Nv=/^\[(?:(\w[\w-]*):)?(.+)\]$/i,Pv=/^\((?:(\w[\w-]*):)?(.+)\)$/i,Fv=/^\d+(?:\.\d+)?\/\d+(?:\.\d+)?$/,Iv=/^(\d+(\.\d+)?)?(xs|sm|md|lg|xl)$/,Lv=/\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$/,Rv=/^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\(.+\)$/,zv=/^(inset_)?-?((\d+)?\.?(\d+)[a-z]+|0)_-?((\d+)?\.?(\d+)[a-z]+|0)/,Bv=/^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\(.+\)$/,Vv=e=>Fv.test(e),Hv=e=>!!e&&!Number.isNaN(Number(e)),Uv=e=>!!e&&Number.isInteger(Number(e)),Wv=e=>e.endsWith(`%`)&&Hv(e.slice(0,-1)),Gv=e=>Iv.test(e),Kv=()=>!0,qv=e=>Lv.test(e)&&!Rv.test(e),Jv=()=>!1,Yv=e=>zv.test(e),Xv=e=>Bv.test(e),Zv=e=>!Q(e)&&!$(e),Qv=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)),$v=e=>my(e,vy,Jv),Q=e=>Nv.test(e),ey=e=>my(e,yy,qv),ty=e=>my(e,by,Hv),ny=e=>my(e,Sy,Kv),ry=e=>my(e,xy,Jv),iy=e=>my(e,gy,Jv),ay=e=>my(e,_y,Xv),oy=e=>my(e,Cy,Yv),$=e=>Pv.test(e),sy=e=>hy(e,yy),cy=e=>hy(e,xy),ly=e=>hy(e,gy),uy=e=>hy(e,vy),dy=e=>hy(e,_y),fy=e=>hy(e,Cy,!0),py=e=>hy(e,Sy,!0),my=(e,t,n)=>{let r=Nv.exec(e);return r?r[1]?t(r[1]):n(r[2]):!1},hy=(e,t,n=!1)=>{let r=Pv.exec(e);return r?r[1]?t(r[1]):n:!1},gy=e=>e===`position`||e===`percentage`,_y=e=>e===`image`||e===`url`,vy=e=>e===`length`||e===`size`||e===`bg-size`,yy=e=>e===`length`,by=e=>e===`number`,xy=e=>e===`family-name`,Sy=e=>e===`number`||e===`weight`,Cy=e=>e===`shadow`,wy=Av(()=>{let e=Mv(`color`),t=Mv(`font`),n=Mv(`text`),r=Mv(`font-weight`),i=Mv(`tracking`),a=Mv(`leading`),o=Mv(`breakpoint`),s=Mv(`container`),c=Mv(`spacing`),l=Mv(`radius`),u=Mv(`shadow`),d=Mv(`inset-shadow`),f=Mv(`text-shadow`),p=Mv(`drop-shadow`),m=Mv(`blur`),h=Mv(`perspective`),g=Mv(`aspect`),_=Mv(`ease`),v=Mv(`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=()=>[Uv,`none`,`subgrid`,$,Q],D=()=>[`auto`,{span:[`full`,Uv,$,Q]},Uv,$,Q],O=()=>[Uv,`auto`,$,Q],k=()=>[`auto`,`min`,`max`,`fr`,$,Q],A=()=>[`start`,`end`,`center`,`between`,`around`,`evenly`,`stretch`,`baseline`,`center-safe`,`end-safe`],ee=()=>[`start`,`end`,`center`,`stretch`,`center-safe`,`end-safe`],j=()=>[`auto`,...w()],M=()=>[Vv,`auto`,`full`,`dvw`,`dvh`,`lvw`,`lvh`,`svw`,`svh`,`min`,`max`,`fit`,...w()],te=()=>[Vv,`screen`,`full`,`dvw`,`lvw`,`svw`,`min`,`max`,`fit`,...w()],ne=()=>[Vv,`screen`,`full`,`lh`,`dvh`,`lvh`,`svh`,`min`,`max`,`fit`,...w()],N=()=>[e,$,Q],P=()=>[...b(),ly,iy,{position:[$,Q]}],re=()=>[`no-repeat`,{repeat:[``,`x`,`y`,`space`,`round`]}],ie=()=>[`auto`,`cover`,`contain`,uy,$v,{size:[$,Q]}],ae=()=>[Wv,sy,ey],F=()=>[``,`none`,`full`,l,$,Q],oe=()=>[``,Hv,sy,ey],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`],L=()=>[Hv,Wv,ly,iy],ce=()=>[``,`none`,m,$,Q],le=()=>[`none`,Hv,$,Q],ue=()=>[`none`,Hv,$,Q],de=()=>[Hv,$,Q],fe=()=>[Vv,`full`,...w()];return{cacheSize:500,theme:{animate:[`spin`,`ping`,`pulse`,`bounce`],aspect:[`video`],blur:[Gv],breakpoint:[Gv],color:[Kv],container:[Gv],"drop-shadow":[Gv],ease:[`in`,`out`,`in-out`],font:[Zv],"font-weight":[`thin`,`extralight`,`light`,`normal`,`medium`,`semibold`,`bold`,`extrabold`,`black`],"inset-shadow":[Gv],leading:[`none`,`tight`,`snug`,`normal`,`relaxed`,`loose`],perspective:[`dramatic`,`near`,`normal`,`midrange`,`distant`,`none`],radius:[Gv],shadow:[Gv],spacing:[`px`,Hv],text:[Gv],"text-shadow":[Gv],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":[Qv],columns:[{columns:[Hv,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:[Uv,`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:[Hv,Vv,`auto`,`initial`,`none`,Q]}],grow:[{grow:[``,Hv,$,Q]}],shrink:[{shrink:[``,Hv,$,Q]}],order:[{order:[Uv,`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:[...A(),`normal`]}],"justify-items":[{"justify-items":[...ee(),`normal`]}],"justify-self":[{"justify-self":[`auto`,...ee()]}],"align-content":[{content:[`normal`,...A()]}],"align-items":[{items:[...ee(),{baseline:[``,`last`]}]}],"align-self":[{self:[`auto`,...ee(),{baseline:[``,`last`]}]}],"place-content":[{"place-content":A()}],"place-items":[{"place-items":[...ee(),`baseline`]}],"place-self":[{"place-self":[`auto`,...ee()]}],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:M()}],"inline-size":[{inline:[`auto`,...te()]}],"min-inline-size":[{"min-inline":[`auto`,...te()]}],"max-inline-size":[{"max-inline":[`none`,...te()]}],"block-size":[{block:[`auto`,...ne()]}],"min-block-size":[{"min-block":[`auto`,...ne()]}],"max-block-size":[{"max-block":[`none`,...ne()]}],w:[{w:[s,`screen`,...M()]}],"min-w":[{"min-w":[s,`screen`,`none`,...M()]}],"max-w":[{"max-w":[s,`screen`,`none`,`prose`,{screen:[o]},...M()]}],h:[{h:[`screen`,`lh`,...M()]}],"min-h":[{"min-h":[`screen`,`lh`,`none`,...M()]}],"max-h":[{"max-h":[`screen`,`lh`,...M()]}],"font-size":[{text:[`base`,n,sy,ey]}],"font-smoothing":[`antialiased`,`subpixel-antialiased`],"font-style":[`italic`,`not-italic`],"font-weight":[{font:[r,py,ny]}],"font-stretch":[{"font-stretch":[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`,Wv,Q]}],"font-family":[{font:[cy,ry,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":[Hv,`none`,$,ty]}],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:[...I(),`wavy`]}],"text-decoration-thickness":[{decoration:[Hv,`from-font`,`auto`,$,ey]}],"text-decoration-color":[{decoration:N()}],"underline-offset":[{"underline-offset":[Hv,`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:[Uv,$,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:re()}],"bg-size":[{bg:ie()}],"bg-image":[{bg:[`none`,{linear:[{to:[`t`,`tr`,`r`,`br`,`b`,`bl`,`l`,`tl`]},Uv,$,Q],radial:[``,$,Q],conic:[Uv,$,Q]},dy,ay]}],"bg-color":[{bg:N()}],"gradient-from-pos":[{from:ae()}],"gradient-via-pos":[{via:ae()}],"gradient-to-pos":[{to:ae()}],"gradient-from":[{from:N()}],"gradient-via":[{via:N()}],"gradient-to":[{to:N()}],rounded:[{rounded:F()}],"rounded-s":[{"rounded-s":F()}],"rounded-e":[{"rounded-e":F()}],"rounded-t":[{"rounded-t":F()}],"rounded-r":[{"rounded-r":F()}],"rounded-b":[{"rounded-b":F()}],"rounded-l":[{"rounded-l":F()}],"rounded-ss":[{"rounded-ss":F()}],"rounded-se":[{"rounded-se":F()}],"rounded-ee":[{"rounded-ee":F()}],"rounded-es":[{"rounded-es":F()}],"rounded-tl":[{"rounded-tl":F()}],"rounded-tr":[{"rounded-tr":F()}],"rounded-br":[{"rounded-br":F()}],"rounded-bl":[{"rounded-bl":F()}],"border-w":[{border:oe()}],"border-w-x":[{"border-x":oe()}],"border-w-y":[{"border-y":oe()}],"border-w-s":[{"border-s":oe()}],"border-w-e":[{"border-e":oe()}],"border-w-bs":[{"border-bs":oe()}],"border-w-be":[{"border-be":oe()}],"border-w-t":[{"border-t":oe()}],"border-w-r":[{"border-r":oe()}],"border-w-b":[{"border-b":oe()}],"border-w-l":[{"border-l":oe()}],"divide-x":[{"divide-x":oe()}],"divide-x-reverse":[`divide-x-reverse`],"divide-y":[{"divide-y":oe()}],"divide-y-reverse":[`divide-y-reverse`],"border-style":[{border:[...I(),`hidden`,`none`]}],"divide-style":[{divide:[...I(),`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:[...I(),`none`,`hidden`]}],"outline-offset":[{"outline-offset":[Hv,$,Q]}],"outline-w":[{outline:[``,Hv,sy,ey]}],"outline-color":[{outline:N()}],shadow:[{shadow:[``,`none`,u,fy,oy]}],"shadow-color":[{shadow:N()}],"inset-shadow":[{"inset-shadow":[`none`,d,fy,oy]}],"inset-shadow-color":[{"inset-shadow":N()}],"ring-w":[{ring:oe()}],"ring-w-inset":[`ring-inset`],"ring-color":[{ring:N()}],"ring-offset-w":[{"ring-offset":[Hv,ey]}],"ring-offset-color":[{"ring-offset":N()}],"inset-ring-w":[{"inset-ring":oe()}],"inset-ring-color":[{"inset-ring":N()}],"text-shadow":[{"text-shadow":[`none`,f,fy,oy]}],"text-shadow-color":[{"text-shadow":N()}],opacity:[{opacity:[Hv,$,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":[Hv]}],"mask-image-linear-from-pos":[{"mask-linear-from":L()}],"mask-image-linear-to-pos":[{"mask-linear-to":L()}],"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":L()}],"mask-image-t-to-pos":[{"mask-t-to":L()}],"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":L()}],"mask-image-r-to-pos":[{"mask-r-to":L()}],"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":L()}],"mask-image-b-to-pos":[{"mask-b-to":L()}],"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":L()}],"mask-image-l-to-pos":[{"mask-l-to":L()}],"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":L()}],"mask-image-x-to-pos":[{"mask-x-to":L()}],"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":L()}],"mask-image-y-to-pos":[{"mask-y-to":L()}],"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":L()}],"mask-image-radial-to-pos":[{"mask-radial-to":L()}],"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":[Hv]}],"mask-image-conic-from-pos":[{"mask-conic-from":L()}],"mask-image-conic-to-pos":[{"mask-conic-to":L()}],"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:re()}],"mask-size":[{mask:ie()}],"mask-type":[{"mask-type":[`alpha`,`luminance`]}],"mask-image":[{mask:[`none`,$,Q]}],filter:[{filter:[``,`none`,$,Q]}],blur:[{blur:ce()}],brightness:[{brightness:[Hv,$,Q]}],contrast:[{contrast:[Hv,$,Q]}],"drop-shadow":[{"drop-shadow":[``,`none`,p,fy,oy]}],"drop-shadow-color":[{"drop-shadow":N()}],grayscale:[{grayscale:[``,Hv,$,Q]}],"hue-rotate":[{"hue-rotate":[Hv,$,Q]}],invert:[{invert:[``,Hv,$,Q]}],saturate:[{saturate:[Hv,$,Q]}],sepia:[{sepia:[``,Hv,$,Q]}],"backdrop-filter":[{"backdrop-filter":[``,`none`,$,Q]}],"backdrop-blur":[{"backdrop-blur":ce()}],"backdrop-brightness":[{"backdrop-brightness":[Hv,$,Q]}],"backdrop-contrast":[{"backdrop-contrast":[Hv,$,Q]}],"backdrop-grayscale":[{"backdrop-grayscale":[``,Hv,$,Q]}],"backdrop-hue-rotate":[{"backdrop-hue-rotate":[Hv,$,Q]}],"backdrop-invert":[{"backdrop-invert":[``,Hv,$,Q]}],"backdrop-opacity":[{"backdrop-opacity":[Hv,$,Q]}],"backdrop-saturate":[{"backdrop-saturate":[Hv,$,Q]}],"backdrop-sepia":[{"backdrop-sepia":[``,Hv,$,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:[Hv,`initial`,$,Q]}],ease:[{ease:[`linear`,`initial`,_,$,Q]}],delay:[{delay:[Hv,$,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:[Uv,$,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:[Hv,sy,ey,ty]}],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 wy(Y_(e))}var Ey=Q_(`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 Dy({className:e,variant:t,size:n,...r}){return(0,z.jsx)(`button`,{className:Ty(Ey({variant:t,size:n}),e),type:`button`,...r})}function Oy({className:e,...t}){return(0,z.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 ky({className:e,...t}){return(0,z.jsx)(`div`,{className:Ty(`p-4 pt-0`,e),...t})}var Ay=[`codex`,`claude`,`kiro`,`trae`,`coco`,`openai`,`anthropic`],jy=new Set([`acp`,`status_projection`]);function My(e){let t=e.trim().toLowerCase().replace(/_/gu,`-`);for(let e of Ay)if(t===e||t.startsWith(`${e}-`))return e;return t}function Ny(e,t){let n=t?.trim().toLowerCase()??``;return n.length>0&&!jy.has(n)?My(n):My(e)}var Py={"zh-CN":{title:`交办说明`,context:`背景与补充`,constraints:`约束`,inputs:`输入材料`,acceptance:`验收要求`,return:`需要回传`,supplied:`已提供给接收方`,pending:`等待接收方读取`,decision:`接收方判断`,unknown:`尚未记录`,unavailable:`暂时无法读取`,adopt:`已采纳`,defer:`已暂缓`,reject:`未采纳`,no_change:`无需调整`,result:`结论已保存`,delivered:`结论已回传`,details:`查看交办内容`},en:{title:`Delegation brief`,context:`Context & corrections`,constraints:`Constraints`,inputs:`Inputs`,acceptance:`Acceptance`,return:`Expected return`,supplied:`Supplied to receiver`,pending:`Awaiting receiver read`,decision:`Receiver decision`,unknown:`Not recorded`,unavailable:`Readback unavailable`,adopt:`Adopted`,defer:`Deferred`,reject:`Rejected`,no_change:`No change needed`,result:`Conclusion saved`,delivered:`Conclusion returned`,details:`View delegation details`}};function Fy({request:e}){let{locale:t}=Ji();if(!e)return null;let n=Py[t],r=e.brief,i=e.decision,a=e.returns.find(e=>e.phase===`conclusion`);return(0,z.jsxs)(`section`,{className:`personal-collaboration`,"aria-label":n.title,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:r.purpose}),(0,z.jsx)(`span`,{children:e.agent_id})]}),(0,z.jsxs)(`p`,{className:`personal-collaboration-status`,children:[(0,z.jsx)(`span`,{children:e.read_status===`supplied`?n.supplied:e.read_status===`unavailable`?n.unavailable:n.pending}),(0,z.jsxs)(`span`,{children:[n.decision,`: `,n[i]??(e.decision===`unavailable`?n.unavailable:n.unknown)]}),a?(0,z.jsx)(`span`,{children:a.status===`delivered`?n.delivered:n.result}):null]}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n.details}),(0,z.jsx)(`h4`,{children:n.context}),(0,z.jsx)(`p`,{children:r.context}),r.constraints.length?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h4`,{children:n.constraints}),(0,z.jsx)(`ul`,{children:r.constraints.map((e,t)=>(0,z.jsx)(`li`,{children:e},t))})]}):null,r.inputs.length?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h4`,{children:n.inputs}),(0,z.jsx)(`ul`,{children:r.inputs.map((e,t)=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`code`,{children:e.ref}),` — `,e.description,e.sha256?(0,z.jsxs)(`small`,{children:[`sha256:`,e.sha256]}):null]},t))})]}):null,(0,z.jsx)(`h4`,{children:n.acceptance}),(0,z.jsx)(`ul`,{children:r.acceptance.map((e,t)=>(0,z.jsx)(`li`,{children:e},t))}),(0,z.jsx)(`h4`,{children:n.return}),(0,z.jsx)(`p`,{children:r.return_requirement})]})]})}var Iy={stop:`ready_stop`,resume:`resume_review`,delete:`delete_review`};function Ly(e){return typeof e==`object`&&e&&!Array.isArray(e)?e:null}function Ry(e){return typeof e==`string`&&e.trim().length>0?e:null}function zy(e,t=240){let n=typeof e==`string`?e.replace(/\s+/g,` `).trim():``;return n.length>t?`${n.slice(0,t-1)}…`:n}function By(e){let t=Ly(e)??{},n=zy(t.agent_id,80)||`unknown-agent`,r=zy(t.acceptance,200);if(t.staffing===`gap`){let e=Ly(t.declined_first_todo)??{};return[`${n} · gap`,zy(t.gap_reason_code,80),zy(e.text,200)].filter(Boolean).join(` · `)}let i=Ly(t.first_todo)??{};return[`${n} · ready`,zy(i.priority,8),zy(i.action_kind,40),zy(i.text,240),r?`acceptance: ${r}`:``].filter(Boolean).join(` · `)}function Vy(e){let t=Ly(e)??{};return Object.entries(t).map(([e,t])=>`${e}: ${typeof t==`object`&&t?JSON.stringify(t):String(t)}`).join(` · `)}function Hy(e){let t=Ly(e);if(t?.action_kind!==`team.plan`||t.status!==`preview_ready`&&t.status!==`deferred`)return;let n=Ly(Ly(t.normalized_parameters)?.plan);if(!n||n.kind!==`steward_team_plan_preview`||n.applies!==!1)return;let r=Ry(t.proposal_id),i=Ry(t.expected_state_fingerprint),a=Ry(n.goal_id);if(!r||!i||!a)return;let o=Array.isArray(n.lanes)?n.lanes:[],s=Array.isArray(n.gaps)?n.gaps:[],c=[{key:`goal`,value:a},{key:`objective`,value:zy(n.objective)},...o.map((e,t)=>({key:`lane_${t+1}`,value:By(e)})),...s.length>0?[{key:`lane_gaps`,value:s.map(e=>{let t=Ly(e)??{};return[zy(t.lane_id,80),zy(t.reason_code,80)].filter(Boolean).join(`: `)}).filter(Boolean).join(` · `)}]:[],{key:`quota_envelope`,value:Vy(n.quota_envelope)},{key:`stop_condition`,value:zy(n.stop_condition)}].filter(e=>e.value.length>0);return{schemaVersion:`review_card_frame_v0`,actionKind:`team.plan`,proposalId:r,stateFingerprint:i,kind:`confirmation`,attentionKind:`authority`,interactionMode:`confirm_reject`,decisions:[`confirm`,`reject`],titleKey:`team_plan_preview`,subtitleKey:`preview_only_no_lane_exists`,confirmLabelKey:`confirm_team_plan`,rejectLabelKey:`reject_team_plan`,warningKey:`confirming_creates_each_ready_lane_first_todo`,focus:`${a} · ${o.length} lane${o.length===1?``:`s`}`,fields:c}}function Uy(e){let t=Ly(e.projection);if(t?.schema_version!==`loopx_operation_projection_v0`)return null;let n=Ry(t.title),r=Ry(t.subtitle),i=Ry(t.focus),a=Ry(t.warning);if(!n||!r||!i||!a||!Array.isArray(t.fields))return null;let o=[];for(let e of t.fields){let t=Ly(e),n=Ry(t?.label),r=Ry(t?.value);if(!n||!r)return null;o.push({label:n,value:r})}return{title:n,subtitle:r,focus:i,fields:o,warning:a}}function Wy(e){let t=Ly(e);if(t?.action_kind!==`operation.execute`)return;let n=Ly(t.normalized_parameters),r=Ly(t.operation);if(!n||r?.schema_version!==`loopx_operation_envelope_v0`)return;let i=Ry(r.operation_id),a=Ry(r.confirmation_digest),o=Ry(r.expires_at),s=Uy(n);if(!i||!a||!o||!s||i!==t.proposal_id)return;let c=r.lifecycle_state;if(c!==`awaiting_confirmation`&&c!==`claimed`&&c!==`outcome_observed`)return;let l={schemaVersion:`operation_review_frame_v0`,operationId:i,confirmationDigest:a,lifecycleState:c,simulated:Ly(n.projection).simulated===!0,expiresAt:o,content:s};if(c===`awaiting_confirmation`)return{...l,kind:`confirmation`,attentionKind:`authority`,interactionMode:`confirm_reject`,decisions:[`confirm`,`reject`]};if(c===`claimed`)return{...l,kind:`pending`,attentionKind:`progress`,interactionMode:`inform`};let u=Ly(r.outcome);if(!u)return;let d=u.outcome===`rejected_by_operator`,f=u.simulation===!0||l.simulated;return{...l,kind:`result`,attentionKind:`progress`,interactionMode:`inform`,resultKind:d?`rejected`:f?`simulation_completed`:`completed`,resultDeliveryVerified:Ly(r.result_delivery)!==null,summary:Ry(u.summary)??``}}function Gy(e){let t=Ly(e)??{},n={schemaVersion:`action_review_plan_v0`,proposalId:typeof t.proposal_id==`string`?t.proposal_id:``,sourceFingerprint:typeof t.expected_state_fingerprint==`string`?t.expected_state_fingerprint:``},r=Wy(t),i=Hy(t),a=e=>({...n,...e,...r?{operationFrame:r}:{},...i?{reviewCardFrame:i}:{}}),o=(e,t)=>a({interaction:e,reason:t,canApply:!1}),s=t.action_kind===`goal.lifecycle`;if(s&&t.gate!=null||t.status===`gated`)return o(`gated`,`authority_gate`);if(s&&t.stale!=null||t.status===`stale`)return o(`refresh`,`stale_proposal`);if(t.status===`applied`)return Ly(t.receipt)?.projection_verified===!0&&(t.action_kind!==`operation.execute`||Ly(Ly(t.operation)?.result_delivery)!==null)?o(`completed`,`readback_verified`):o(`repair`,`readback_unverified`);let c=Ly(t.canonical_update_basis),l=Ly(t.normalized_parameters);if(c?.schema_version===`loopx_chat_canonical_update_basis_v0`&&Ry(c.provider_revision)!==null&&Ry(c.registry_sha256)!==null&&(t.action_kind===`todo.update`||t.action_kind===`monitor.update`&&[`pause`,`resume`,`edit`].includes(String(l?.operation)))&&(t.status===`applying`||t.status===`failed`))return{...a({interaction:`review`,canApply:!0,reason:Ly(t.failure)?.error_code===`canonical_update_projection_pending`?`canonical_update_projection_pending`:`canonical_update_retry`}),retryOriginal:!0};if(t.status===`applying`)return o(`pending`,`apply_pending`);if(t.status===`failed`||t.error!=null)return o(`repair`,`apply_failed`);if(t.status!==`preview_ready`&&t.status!==`deferred`)return o(`inactive`,`inactive_proposal`);let u=(e,t=!0)=>a({interaction:`review`,reason:e,canApply:t});if(t.action_kind!==`goal.lifecycle`)return u(t.permission_classification===`protected`?`protected_action`:`action_review`);let d=t.validation_evidence,f=t.available_transitions;if(!(Ry(t.proposal_id)!==null&&Ry(t.expected_state_fingerprint)!==null&&Array.isArray(d)&&d.length>0&&d.every(e=>Ry(e)!==null)&&Array.isArray(f)&&f.includes(`apply`)))return o(`refresh`,`incomplete_proposal`);let p=Ly(t.context),m=l?.operation,h=Ry(l?.goal_id);if(!h||p?.goal_id!=null&&p.goal_id!==h)return o(`refresh`,`incomplete_proposal`);if(m!==`stop`&&m!==`resume`&&m!==`delete`)return u(`unknown_action`,!1);if(t.permission_classification===`protected`)return u(`protected_action`);if(t.permission_classification!==`durable_write`)return u(`unknown_permission`,!1);let g=Iy[m];return g===`ready_stop`&&t.status===`preview_ready`?a({interaction:`direct`,reason:g,canApply:!0}):u(g===`ready_stop`?`action_review`:g)}function Ky(e){return e.error_code===`action_stale`||e.error_code===`action_conflict`||Ly(e.proposal)?.status===`stale`}function qy(e){return typeof e==`object`&&e?e:{}}function Jy(e){return typeof e==`string`?e:``}function Yy(e,t){let n=qy(e.plan),r=[],i=Jy(e.goal_id)||Jy(n.goal_id);i&&r.push({key:`goal_id`,label:t(`proposal.field.goalId`),value:i});let a=Jy(n.objective);a&&r.push({key:`objective`,label:t(`proposal.field.objective`),value:a}),(Array.isArray(n.lanes)?n.lanes:[]).forEach((e,n)=>{let i=qy(e),a=Jy(i.lane_id)||`lane-${n+1}`,o=Jy(i.agent_id),s=Jy(i.acceptance);if(Jy(i.staffing)===`gap`){let e=qy(i.declined_first_todo);r.push({key:`lane_${a}`,label:o||a,value:[t(`proposal.teamPlan.gapLane`),eb(Jy(i.gap_reason_code),t),Jy(e.text)].filter(Boolean).join(` · `)});return}let c=qy(i.first_todo),l=[Jy(c.priority),Jy(c.action_kind),Jy(c.text)].filter(Boolean).join(` · `);r.push({key:`lane_${a}`,label:o||a,value:[l||t(`proposal.teamPlan.laneUnstaffed`),s?`${t(`proposal.teamPlan.acceptanceShort`)}: ${s}`:``].filter(Boolean).join(` · `)})});let o=qy(n.quota_envelope),s=Object.entries(o);s.length>0&&r.push({key:`quota_envelope`,label:t(`proposal.field.quotaEnvelope`),value:s.map(([e,t])=>`${e}: ${String(t??``)}`).join(` · `)+` · ${t(`proposal.teamPlan.advisory`)}`});let c=Jy(n.stop_condition);return c&&r.push({key:`stop_condition`,label:t(`proposal.field.stopCondition`),value:`${c} · ${t(`proposal.teamPlan.advisory`)}`}),r}function Xy(e){let t=qy(e.plan);return Array.isArray(t.lanes)?t.lanes.length:0}function Zy(e){let t=qy(e.plan);return Jy(e.goal_id)||Jy(t.goal_id)}function Qy(e,t){let n=qy(e),r=qy(t.plan),i=(Array.isArray(r.lanes)?r.lanes:[]).map(qy);return(Array.isArray(n.lanes)?n.lanes:[]).map(e=>{let t=qy(e),n=Jy(t.lane_id),r=i.find(e=>e.lane_id===n);return{laneId:n,agentId:Jy(t.agent_id),task:Jy(qy(r?.first_todo).text)||n}}).filter(e=>e.laneId.length>0)}function $y(e,t={}){let n=qy(e),r=qy(t.plan),i=(Array.isArray(r.lanes)?r.lanes:[]).map(qy);return(Array.isArray(n.gap_lanes)?n.gap_lanes:[]).map(e=>{let t=qy(e);return{laneId:Jy(t.lane_id),agentId:Jy(t.agent_id),reasonCode:Jy(t.reason_code),task:Jy(qy(i.find(e=>e.lane_id===t.lane_id)?.declined_first_todo).text)}}).filter(e=>e.laneId.length>0)}function eb(e,t){return e===`agent_not_registered`?t(`proposal.teamPlan.gapReason.agentNotRegistered`):e===`action_kind_not_supported`?t(`proposal.teamPlan.gapReason.actionKindNotSupported`):e===`capability_not_granted`?t(`proposal.teamPlan.gapReason.capabilityNotGranted`):e===`audience_not_authorized`?t(`proposal.teamPlan.gapReason.audienceNotAuthorized`):e}function tb(e){let t=qy(e),n=Jy(t.outcome),r=Array.isArray(t.lanes)?t.lanes.length:0,i=typeof t.gap_count==`number`?t.gap_count:0;return n===`team_plan_partially_applied`?{kind:`partially_applied`,created:r,gaps:i}:n===`team_plan_lanes_already_present`||n===`team_plan_commit_recovered`?{kind:`already_present`,created:r,gaps:i}:n===`team_plan_applied`?{kind:`applied`,created:r,gaps:i}:null}function nb(e,t){return e?.kind===`partially_applied`?t(`proposal.teamPlan.appliedPartially`,{created:String(e.created),gaps:String(e.gaps)}):e?.kind===`already_present`?t(`proposal.teamPlan.appliedAlreadyPresent`):t(e?.kind===`applied`?`proposal.teamPlan.applied`:`drawer.proposalApplied`,{count:e?.created??0})}function rb({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)(sm,{"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)(om,{"aria-hidden":!0,size:15}):null]})]},e.value)})}):null]})}function ib({agents:e,managerChannelBinding:t,managerChatOpen:n,managerRuntime:r,mobileNavigationOpen:i,onOpenGoalCapabilities:a,onOpenManagerChat:o,onRefresh:s,onOpenNavigation:c,onSelectGoalTab:l,onSelectAgent:u,onReturnManagerHome:d,refreshState:f,readOnlySourceLabel:p,selectedAgentId:m,selectedGoal:h,selectedGoalTab:g}){let{locale:_,t:v}=Ji(),y=t?t.executor_kind===`individual`?v(`header.managerExecutorKindIndividual`):t.executor_kind===`managed`?v(`header.managerExecutorKindManaged`):v(`header.managerExecutorKindRegistered`):null,b=t?.available===!1,x=t?.output_token_budget,S=x?.scope===`per_model_request`&&x.valid&&typeof x.max_tokens==`number`?v(`header.managerOutputTokenBudget`,{tokens:new Intl.NumberFormat(_).format(x.max_tokens)}):null,C=t?.available===!1?t.unavailable_reason:null,w=C===`operator_credential_unconfigured`?`header.managerExecutionUnavailableCredential`:C===`dsh_runtime_unavailable`?`header.managerExecutionUnavailableRuntime`:C===`invalid_reasoning_effort`?`header.managerExecutionUnavailableEffort`:C===`invalid_output_token_limit`?`header.managerExecutionUnavailableOutputBudget`:`header.managerExecutionUnavailable`,T=t&&t.executor_endpoint_source===`product_default`&&t.executor_endpoint_default_reason===`steward_channel_default`?`header.managerEndpointStewardDefault`:null,E=t?v(t.selection_policy===`pinned`?`header.managerSelectionPinned`:t.selection_policy===`flexible`?`header.managerSelectionFlexible`:`header.managerSelectionPreferred`):null,D=t?.allocation_reason?v(t.allocation_reason===`user_explicit`?`header.managerAllocationUser`:t.allocation_reason===`pinned_configuration`?`header.managerAllocationPinned`:t.allocation_reason===`flexible_availability_fallback`?`header.managerAllocationFallback`:t.allocation_reason===`flexible_pool_unavailable`?`header.managerAllocationUnavailable`:t.allocation_reason===`flexible_primary_available`?`header.managerAllocationPrimary`:t.allocation_reason===`product_default`?`header.managerAllocationProductDefault`:t.allocation_reason===`service_override`?`header.managerAllocationService`:`header.managerAllocationConfigured`):null,O=p?(0,z.jsxs)(`span`,{className:`personal-read-only-source`,title:v(`header.readOnlySourceDescription`,{source:p}),children:[(0,z.jsx)(ym,{size:15}),p,(0,z.jsx)(`small`,{children:v(`common.readOnly`)})]}):(0,z.jsx)(rb,{ariaLabel:v(`header.selectChatRuntime`),className:`personal-agent-select`,icon:(0,z.jsx)(rm,{size:16}),onChange:u,options:e.map(e=>({disabled:!e.available,label:`${e.label}${e.available?``:` · ${v(`header.agentUnavailable`)}`}`,value:e.agentId})),prefixLabel:v(`header.chatRuntime`),value:m});return(0,z.jsxs)(`header`,{className:`personal-channel-header`,"data-goal-selected":!!h,children:[(0,z.jsx)(`button`,{"aria-expanded":i??!1,"aria-label":v(`header.openGoalNavigation`),className:`personal-icon-button personal-mobile-menu`,onClick:c,type:`button`,children:(0,z.jsx)(Mm,{size:18})}),(0,z.jsxs)(`div`,{className:`personal-channel-title`,children:[(0,z.jsx)(`h1`,{children:h?.title??v(`header.manager`)}),h&&!h.loadState&&![`安静运行`,`推进中`].includes(h.state)?(0,z.jsx)(`p`,{children:Yi(h.state,_)}):null,!h&&t?(0,z.jsxs)(`p`,{className:`personal-manager-execution`,children:[(0,z.jsxs)(`span`,{className:b?`personal-execution-chip is-unavailable`:`personal-execution-chip`,children:[(0,z.jsx)(`span`,{className:`personal-execution-chip-endpoint`,children:t.executor_endpoint}),y?(0,z.jsx)(`span`,{className:`personal-execution-chip-kind`,children:y}):null,(0,z.jsx)(`span`,{className:`personal-execution-chip-model`,children:t.model}),S?(0,z.jsx)(`span`,{className:`personal-execution-chip-budget`,children:S}):null]}),b?(0,z.jsx)(`span`,{className:`personal-execution-note`,children:v(w,{executor:t.executor_endpoint,credential:t.credential_env_var})}):null]}):null,!h&&(r||T)?(0,z.jsxs)(`details`,{className:`personal-runtime-details`,open:r!=null&&r.status!==`ready`||void 0,children:[(0,z.jsx)(`summary`,{children:_===`zh-CN`?`运行环境`:`Execution environment`}),!h&&r?(0,z.jsx)(`p`,{children:r.status===`ready`?v(`header.managerRuntime`,{profile:r.runtime_profile,sandbox:r.sandbox}):v(`header.managerRuntimeFallback`,{profile:r.runtime_profile,sandbox:r.sandbox})}):null,E&&D&&t?(0,z.jsx)(`p`,{children:v(`header.managerAllocation`,{policy:E,reason:D})}):null,T&&t?(0,z.jsx)(`span`,{className:`personal-execution-rule-note`,children:v(T,{executor:t.executor_endpoint})}):null]}):null,h?.loadState?(0,z.jsx)(`p`,{role:`status`,children:v(h.loadState===`error`?`startup.goalError`:`startup.goalLoading`)}):null]}),h?(0,z.jsxs)(`div`,{className:`personal-goal-navigation`,children:[(0,z.jsxs)(`nav`,{"aria-label":v(`header.goalView`),className:`personal-goal-tabs`,children:[(0,z.jsx)(`button`,{"aria-current":g===`overview`?`page`:void 0,onClick:()=>l(`overview`),type:`button`,children:v(`header.overview`)}),(0,z.jsx)(`button`,{"aria-current":g===`tasks`?`page`:void 0,onClick:()=>l(`tasks`),type:`button`,children:v(`header.tasks`)}),(0,z.jsx)(`button`,{"aria-current":g===`chat`?`page`:void 0,onClick:()=>l(`chat`),type:`button`,children:v(`header.chat`)}),(0,z.jsx)(`button`,{"aria-current":g===`files`?`page`:void 0,onClick:()=>l(`files`),type:`button`,children:v(`header.files`)})]}),O]}):(0,z.jsxs)(`nav`,{"aria-label":v(`header.managerView`),className:`personal-goal-tabs`,children:[(0,z.jsx)(`button`,{"aria-current":n?void 0:`page`,onClick:d,type:`button`,children:v(`header.managerOverview`)}),(0,z.jsx)(`button`,{"aria-current":n?`page`:void 0,onClick:o,type:`button`,children:v(`header.chat`)})]}),(0,z.jsxs)(`div`,{className:`personal-channel-actions`,children:[h&&a?(0,z.jsx)(`button`,{"aria-label":v(`header.goalSettings`),title:v(`header.goalSettingsDescription`),className:`personal-icon-button personal-goal-settings-action`,onClick:a,type:`button`,children:(0,z.jsx)(Qm,{"aria-hidden":!0,size:17})}):null,h?null:O,s?(0,z.jsxs)(`span`,{className:`personal-refresh-control is-${f??`idle`}`,children:[f===`loading`?(0,z.jsx)(`small`,{children:v(`header.refreshing`)}):f===`done`?(0,z.jsx)(`small`,{children:v(`header.refreshDone`)}):f===`error`?(0,z.jsx)(`small`,{children:v(`header.refreshFailed`)}):null,(0,z.jsx)(`button`,{"aria-label":v(f===`loading`?`header.refreshing`:`header.refresh`),className:`personal-icon-button`,disabled:f===`loading`,onClick:s,type:`button`,children:(0,z.jsx)(Um,{className:f===`loading`?`is-spinning`:void 0,size:17})})]}):null]})]})}function ab({result:e,zh:t,onInspect:n}){let r=t?{responds_to:`回应此版本`,revises:`修订此版本`,uses:`使用此版本`}:{responds_to:`Respond to this version`,revises:`Revise this version`,uses:`Use this version`};return(0,z.jsxs)(`section`,{className:`goal-team-lineage`,"aria-label":t?`版本与采用关系`:`Versions and adoption`,children:[e.dependencies?.length?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h4`,{children:t?`请求中的版本依据`:`Versions in the request`}),(0,z.jsx)(`ul`,{children:e.dependencies.map((e,i)=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`strong`,{children:r[e.relation]??(t?`未知关系`:`Unknown relationship`)}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>n(e.operation_id),children:e.operation_id}),(0,z.jsx)(`span`,{children:e.state===`current`?t?`源产物与接收方输入一致`:`Source and receiver input match`:t?`此版本无法核验`:`This version cannot be verified`}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`指定版本`:`Referenced version`}),(0,z.jsxs)(`code`,{children:[e.ref,` · sha256:`,e.sha256]}),(0,z.jsx)(`code`,{children:e.input_ref})]})]},`${e.operation_id}:${e.input_ref}:${i}`))}),(0,z.jsx)(`p`,{children:t?`这是请求的关系;完成修订或采用仍需结果和回执。`:`These are requested relationships; revision or adoption still needs results and receipts.`})]}):null,(0,z.jsx)(`h4`,{children:t?`请求方采用`:`Requester adoption`}),e.adoptions?.length?(0,z.jsx)(`ul`,{children:e.adoptions.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`strong`,{children:e.state===`current`?t?`已记录采用 · 后续结果验收有效`:`Adoption recorded · downstream result currently accepted`:t?`采用证据已失效或无法核验`:`Adoption evidence stale or unavailable`}),(0,z.jsxs)(`span`,{children:[e.requester_agent_id,` → `,e.consumer_agent_id]}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>n(e.consumer_operation_id),children:t?`查看后续结果`:`Inspect downstream result`}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t?`采用版本与结果版本`:`Source and result versions`}),e.source_artifacts.map(e=>(0,z.jsxs)(`code`,{children:[t?`来源`:`Source`,`: `,e.ref,` · sha256:`,e.sha256]},`source:${e.ref}`)),e.consumer_artifacts.map(e=>(0,z.jsxs)(`code`,{children:[t?`结果`:`Result`,`: `,e.ref,` · sha256:`,e.sha256]},`result:${e.ref}`))]})]},e.consumer_operation_id))}):(0,z.jsx)(`p`,{children:t?`尚无请求方采用记录。`:`No requester adoption is recorded.`})]})}function ob(e,t){if(e.state!==`current`||t.operation_id!==e.operation_id||t.status!==`accepted`||t.recovery_required||t.error)return null;let n=(t.artifacts??[]).filter(t=>t.ref===e.ref&&t.sha256===e.sha256);return n.length===1?n[0]:null}function sb(e,t){let n=e.split(` +`),r=t.split(` +`),i=0,a=0;for(;i(d.current++,i(null),u(``),c(!1),o(0),()=>{d.current++}),[t,e]);let f=t.status===`accepted`&&!t.error&&!t.recovery_required?t.artifacts??[]:[],p=t.dependencies??[];async function m(t){let r=++d.current;i(null),u(``),c(!0),o(0);try{let a=await cg(e,t.operation_id);if(r!==d.current)return;ob(t,a)?i({link:t,source:a}):u(n?`指定来源版本无法核验,未展示对照。`:`The referenced source version cannot be verified. Comparison withheld.`)}catch{r===d.current&&u(n?`来源读取失败,已清除上次对照。可重试或查看执行详情。`:`Source read failed; previous comparison cleared. Retry or inspect the execution.`)}finally{r===d.current&&c(!1)}}if(!p.length||!f.length)return null;let h=r?ob(r.link,r.source):null,g=f[a],_=h&&g?sb(h.text,g.text):null,v=n?{revises:`修订依据`,responds_to:`回应依据`,uses:`使用依据`}:{revises:`Revision source`,responds_to:`Response source`,uses:`Input source`};return(0,z.jsxs)(`section`,{className:`goal-team-comparison`,"aria-label":n?`依据与结果对照`:`Source and result comparison`,"aria-busy":s,children:[(0,z.jsxs)(`div`,{className:`goal-team-comparison-heading`,children:[(0,z.jsx)(`h4`,{children:n?`看清这次变化`:`See what changed`}),(0,z.jsx)(`span`,{children:n?`按需核验`:`On-demand verification`})]}),(0,z.jsx)(`div`,{className:`goal-team-comparison-sources`,children:p.map((e,t)=>(0,z.jsxs)(`button`,{type:`button`,disabled:s||e.state!==`current`,"aria-pressed":r?.link===e,onClick:()=>void m(e),children:[(0,z.jsx)(`span`,{children:v[e.relation]}),(0,z.jsx)(`strong`,{children:e.ref}),e.state===`current`?null:(0,z.jsx)(`span`,{children:n?`无法核验`:`Unavailable`})]},`${e.operation_id}:${e.input_ref}:${t}`))}),s?(0,z.jsx)(`p`,{role:`status`,children:n?`正在读取指定来源版本…`:`Reading the referenced source version…`}):null,l?(0,z.jsx)(`p`,{role:`alert`,children:l}):null,h&&g&&_?(0,z.jsxs)(z.Fragment,{children:[f.length>1?(0,z.jsxs)(`label`,{children:[n?`对照产物`:`Compare output`,(0,z.jsx)(`select`,{value:a,onChange:e=>o(Number(e.target.value)),children:f.map((e,t)=>(0,z.jsx)(`option`,{value:t,children:e.ref},`${e.ref}:${t}`))})]}):null,(0,z.jsx)(`div`,{className:`goal-team-comparison-grid`,children:[{kind:`source`,title:n?`指定来源`:`Referenced source`,artifact:h,lines:_.left,end:_.leftEnd},{kind:`result`,title:n?`本次产物`:`This output`,artifact:g,lines:_.right,end:_.rightEnd}].map(e=>(0,z.jsxs)(`article`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`span`,{children:e.title}),(0,z.jsx)(`strong`,{children:e.artifact.ref})]}),(0,z.jsx)(`pre`,{tabIndex:0,"aria-label":`${e.title}: ${e.artifact.ref}`,children:e.lines.map((t,n)=>(0,z.jsxs)(`span`,{"data-changed":n>=_.start&&n(w(),()=>{C.current++}),[e,t]);async function w(){let n=++C.current;s(null),l(``),p(``),d(!0);try{let r=await cg(e,t);n===C.current&&(s(r),l(new Date().toLocaleTimeString()))}catch(e){n===C.current&&p(e instanceof Error?e.message:String(e))}finally{n===C.current&&d(!1)}}async function T(){if((!o||!m.trim())&&!S.current)return;let r=S.current??{id:crypto.randomUUID(),text:[`${n?`针对团队执行`:`Regarding team execution`}: ${t}`,...(o?.artifacts??[]).map(e=>`${e.ref} · sha256:${e.sha256}`),m.trim()].join(` +`)};S.current=r,_(!0),y(``);try{let t=await pg(e,r.text,`inbox`,r.id);x({id:r.id,status:t.status})}catch(e){y(e instanceof Error?e.message:String(e))}finally{_(!1)}}let E=b?i.find(e=>e.client_ingress_id===b.id)?.status??b.status:``,D=E===`pending`?n?`已进入协调员收件箱,等待读取`:`In the coordinator inbox; awaiting read`:E===`delivered`?n?`已交给协调员;尚无应用回执`:`Delivered to coordinator; application not confirmed`:n?`投递状态待核实`:`Delivery requires reconciliation`;return(0,z.jsxs)(`section`,{className:`goal-team-evidence`,"aria-label":n?`执行证据`:`Execution evidence`,"aria-busy":u,children:[(0,z.jsxs)(`div`,{className:`goal-team-work-actions`,children:[(0,z.jsx)(`h3`,{children:n?`执行证据`:`Execution evidence`}),(0,z.jsx)(`button`,{type:`button`,disabled:u,onClick:()=>void w(),children:n?`重新读取证据`:`Recheck evidence`})]}),u?(0,z.jsx)(`p`,{role:`status`,children:n?`正在核验绑定、验收与文件…`:`Checking bindings, acceptance and files…`}):null,f?(0,z.jsxs)(`p`,{role:`alert`,children:[n?`无法核验,已清除上次证据。`:`Cannot verify; previous evidence cleared.`,` `,f]}):null,o?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`p`,{role:`status`,children:[(0,z.jsxs)(`strong`,{children:[o.agent_id,` · `,lg(o,n)]}),` · `,c]}),(0,z.jsx)(`p`,{children:n?`按需读取的当前观察,不是持续在线状态;验收不代表协调员已采用。`:`An on-demand observation, not continuous liveness; acceptance does not establish coordinator adoption.`}),(0,z.jsx)(cb,{sessionId:e,result:o,zh:n}),(0,z.jsx)(ab,{result:o,zh:n,onInspect:a}),o.error?(0,z.jsx)(`p`,{role:`alert`,children:o.error}):null,o.status===`accepted`&&o.artifacts?.length?o.artifacts.map(e=>(0,z.jsxs)(`article`,{children:[(0,z.jsx)(`h4`,{children:e.ref}),(0,z.jsx)(`pre`,{tabIndex:0,"aria-label":`${n?`证据内容`:`Evidence content`}: ${e.ref}`,children:e.text}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n?`版本与来源标识`:`Version and source identifiers`}),(0,z.jsx)(`code`,{children:t}),(0,z.jsxs)(`code`,{children:[`sha256:`,e.sha256]}),(0,z.jsx)(`code`,{children:o.request_id}),(0,z.jsx)(`code`,{children:o.todo_id})]})]},e.ref)):(0,z.jsx)(`p`,{children:n?`本次读取没有可展示的已验收产物。`:`No accepted artifact is available in this readback.`}),(0,z.jsxs)(`form`,{onSubmit:e=>{e.preventDefault(),T()},children:[(0,z.jsxs)(`label`,{children:[n?`向协调员反馈此执行`:`Send feedback about this execution`,(0,z.jsx)(`textarea`,{value:m,maxLength:6e3,rows:3,disabled:!!S.current,onChange:e=>h(e.target.value)})]}),(0,z.jsx)(`p`,{children:n?`附上执行标识及当前产物版本,交给原协调员收件箱;不会直接改写任务或中断成员。`:`Includes the operation and observed artifact versions in the original coordinator inbox; does not change tasks or interrupt members.`}),r?null:(0,z.jsx)(`p`,{children:n?`协调员未在执行或当前观察不可用;恢复执行后可发送。`:`Coordinator inactive or observation unavailable; resume execution to send.`}),(0,z.jsx)(`button`,{type:`submit`,disabled:!r||g||!!b||!m.trim(),children:g?n?`正在投递…`:`Sending…`:v?n?`重试同一条反馈`:`Retry this feedback`:n?`发送反馈`:`Send feedback`})]})]}):null,v?(0,z.jsxs)(`p`,{role:`alert`,children:[n?`未确认投递,请重试同一条反馈,避免重复发送。`:`Delivery not confirmed; retry the same feedback to avoid duplicates.`,` `,v]}):null,b?(0,z.jsx)(`p`,{role:`status`,children:D}):null]})}var ub={authority_unavailable:{en:`Canonical authority unavailable`,zh:`缺少规范权限状态`},turn_blocked:{en:`Task admission blocked`,zh:`当前任务未获准执行`},acceptance_unavailable:{en:`Acceptance binding unavailable`,zh:`缺少有效验收绑定`},runtime_unavailable:{en:`Runtime unavailable`,zh:`运行时不可用`},runtime_unverified:{en:`Runtime availability unverified`,zh:`运行时可用性尚未验证`},launchable:{en:`Local launch prerequisites met`,zh:`本机启动条件已满足`}};function db({check:e,zh:t}){let n=e.executor?[e.executor.host,e.executor.reason].filter(Boolean).join(` · `):e.authority_reason,r=e.state===`authority_unavailable`?t?`未检查或启动执行器`:`No executor was inspected or launched`:t?`不代表正在执行`:`Does not mean executing`;return(0,z.jsxs)(`p`,{role:`status`,children:[t?ub[e.state].zh:ub[e.state].en,n?` · ${n}`:``,` · ${r}`]})}function fb({sessionId:e,members:t,zh:n,canMessage:r,ingress:i}){let[a,o]=(0,R.useState)(null),s=(0,R.useRef)(null),c=(0,R.useRef)(null),l=(0,R.useRef)(null),[u,d]=(0,R.useState)(null),[f,p]=(0,R.useState)({}),[m,h]=(0,R.useState)(!1),[g,_]=(0,R.useState)(``),v=(0,R.useRef)(0);(0,R.useEffect)(()=>{(a?s.current:l.current)?.focus()},[a]),(0,R.useEffect)(()=>(v.current++,d(null),p({}),_(``),h(!1),y(),()=>{v.current++}),[e]);async function y(t){let n=++v.current;h(!0),_(``),d(null),o(null);try{let r=await ug(e,t);n===v.current&&d(r)}catch(e){n===v.current&&_(e instanceof Error?e.message:String(e))}finally{n===v.current&&h(!1)}}async function b(t){let n=++v.current;h(!0),_(``),p(e=>{let n={...e};return delete n[t],n});try{let r=await dg(e,t);n===v.current&&p(e=>({...e,[t]:r}))}catch(e){n===v.current&&_(e instanceof Error?e.message:String(e))}finally{n===v.current&&h(!1)}}return a?(0,z.jsxs)(`div`,{className:`goal-team-work`,children:[(0,z.jsx)(`button`,{ref:s,type:`button`,onClick:()=>o(null),children:n?`返回执行列表`:`Back to executions`}),(0,z.jsx)(lb,{sessionId:e,operationId:a,zh:n,canMessage:r,ingress:i,onInspect:o},`${e}:${a}`)]}):(0,z.jsx)(`div`,{className:`goal-team-work`,children:(0,z.jsxs)(`section`,{"aria-label":n?`团队执行详情`:`Team execution details`,children:[(0,z.jsx)(`p`,{children:n?`检查不会启动成员。暂停协调员后,已派发的工作仍会继续。`:`Inspection starts no members. Dispatched work continues when the coordinator is paused.`}),(0,z.jsx)(`h3`,{children:n?`已绑定成员`:`Bound members`}),(0,z.jsx)(`ul`,{className:`goal-team-bindings`,children:t.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e.agent_id}),(0,z.jsx)(`button`,{type:`button`,disabled:m,onClick:()=>void b(e.id),children:n?`检查启动条件`:`Check prerequisites`})]}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n?`任务与执行配置`:`Task and execution details`}),(0,z.jsx)(`code`,{children:e.todo_id}),f[e.id]?.executor?.profile?(0,z.jsx)(`code`,{children:f[e.id]?.executor?.profile}):null]}),f[e.id]?(0,z.jsx)(db,{check:f[e.id],zh:n}):null]},e.id))}),(0,z.jsxs)(`div`,{className:`goal-team-work-actions`,children:[(0,z.jsx)(`strong`,{children:n?`此协调身份的持久工作`:`Durable work for this coordinator`}),(0,z.jsx)(`button`,{type:`button`,disabled:m,onClick:()=>{p({}),y()},children:n?`重新核验`:`Refresh`}),u?.has_more&&u.next_cursor?(0,z.jsx)(`button`,{type:`button`,disabled:m,onClick:()=>void y(u.next_cursor),children:n?`下一页`:`Next page`}):null]}),m?(0,z.jsx)(`p`,{role:`status`,children:n?`正在读取当前事实…`:`Reading current facts…`}):null,g?(0,z.jsx)(`p`,{role:`alert`,children:g}):null,u?(0,z.jsxs)(z.Fragment,{children:[u.page_readback_complete?null:(0,z.jsx)(`p`,{role:`status`,children:n?`本页有无法核验的工作,请检查原请求;不要直接重新派工。`:`Some work cannot be verified. Reconcile the original request before redispatching.`}),u.items.length?null:(0,z.jsx)(`p`,{children:n?`此页没有委派记录;不代表整个团队没有工作或 Goal 已完成。`:`No records on this page; this does not establish an idle team or a completed Goal.`}),(0,z.jsx)(`ul`,{className:`goal-team-operations`,children:u.items.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`strong`,{children:[e.agent_id??(n?`记录不可读`:`Unreadable record`),` · `,lg(e,n)]}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n?`执行标识`:`Execution identifier`}),(0,z.jsx)(`code`,{children:e.operation_id??e.record_id})]}),e.operation_id?(0,z.jsx)(`button`,{ref:e.operation_id===c.current?l:void 0,type:`button`,onClick:()=>{c.current=e.operation_id,o(e.operation_id)},children:n?`查看证据与反馈`:`Evidence and feedback`}):null]},e.record_id))}),(0,z.jsxs)(`p`,{children:[n?`仅限当前协调身份;分页不是团队快照。`:`Scoped to this coordinator; paging is not a team snapshot.`,u.has_more?n?` 还有下一页。`:` More pages remain.`:``]})]}):null]})})}function pb({sessionId:e,onPrepare:t,onExecute:n,onChange:r}){let{locale:i}=Ji(),a=i===`zh-CN`,[o,s]=(0,R.useState)(null),[c,l]=(0,R.useState)(null),u=c===`settings`,d=e=>l(e?`settings`:null),f=(0,R.useRef)(null);(0,R.useEffect)(()=>{c&&!f.current?.open?f.current?.showModal():!c&&f.current?.open&&f.current.close()},[c]);let[p,m]=(0,R.useState)(!1),[h,g]=(0,R.useState)(``),[_,v]=(0,R.useState)(``),[y,b]=(0,R.useState)({agent_id:``,token_budget:0});(0,R.useEffect)(()=>{let t=!0,n=!1;if(s(null),r(null),g(``),v(``),d(!1),!e||e===`new-session-pending`)return;async function i(){if(!n){n=!0;try{let n=await sg(e);t&&(s(n),r(n),v(``))}catch(e){t&&v(e instanceof Error?e.message:String(e))}finally{n=!1}}}i();let a=window.setInterval(()=>{document.hidden||i()},2500);return()=>{t=!1,window.clearInterval(a)}},[e]);let x=!!(o?.enabled&&o.active_turn_id),S=o?.native.status??`absent`,C=![`absent`,`complete`].includes(S),w=!!(o?.settings.agent_id&&o.settings.token_budget&&o.settings.execution_config),T=e=>{b({agent_id:e.settings.agent_id??``,token_budget:e.settings.token_budget??0}),d(!0)},E=o?.enabled?o.recovery_required?a?`LoopX · 需要恢复连接`:`LoopX · Reconnect required`:S===`blocked`?a?`LoopX · 需要处理阻塞`:`LoopX · Blocked`:x?a?`LoopX · 正在推进`:`LoopX · Working`:S===`complete`?a?`LoopX · 本轮已结束`:`LoopX · Run finished`:[`budgetLimited`,`usageLimited`].includes(S)?a?`LoopX · 已到额度限制`:`LoopX · Usage limit`:a?`LoopX · 已暂停`:`LoopX · Paused`:a?`普通对话`:`Conversation`,D=()=>{o&&!u?T(o):d(!1)};async function O(){m(!0),g(``);try{let e=await sg(await t());s(e),r(e),T(e)}catch(e){g(e instanceof Error?e.message:String(e))}finally{m(!1)}}async function k(t){if(e){m(!0),g(``);try{let n=await fg(e,t,t===`configure`?y:void 0);s(n),r(n),(t===`configure`||t===`exit`)&&d(!1)}catch(e){g(e instanceof Error?e.message:String(e))}finally{m(!1)}}}let A=o?.deliveries.some(e=>[`rejected`,`unavailable`].includes(e.status)),ee=o?.ingress.filter(e=>e.status!==`delivered`)??[];return(0,z.jsxs)(`section`,{className:`goal-loopx-mode`,"aria-label":a?`LoopX 运行模式`:`LoopX execution mode`,children:[(0,z.jsxs)(`div`,{className:`goal-loopx-mode-bar`,children:[(0,z.jsxs)(`span`,{className:`goal-loopx-mode-status`,"data-active":x,role:`status`,children:[(0,z.jsx)(`i`,{"aria-hidden":`true`}),E]}),(0,z.jsxs)(`div`,{className:`goal-loopx-mode-actions`,children:[w&&e?(0,z.jsxs)(`button`,{type:`button`,className:`goal-loopx-team-trigger`,onClick:()=>l(`team`),"aria-haspopup":`dialog`,children:[(0,z.jsx)(oh,{size:16}),a?`团队执行情况`:`Team execution`,A?(0,z.jsx)(`span`,{className:`goal-loopx-alert-dot`,"aria-label":a?`最近回读需要核验`:`Last observations need review`}):null]}):null,(0,z.jsx)(`button`,{type:`button`,disabled:p||o?.conversation_busy||!o,onClick:D,"aria-label":a?`运行设置`:`Settings`,title:a?`运行设置与用量`:`Settings and usage`,"aria-haspopup":`dialog`,children:(0,z.jsx)(Xm,{size:16})}),(0,z.jsxs)(`button`,{type:`button`,className:`goal-loopx-primary`,disabled:p||!!(o?.conversation_busy&&!x),title:x?a?`暂停协调员;已派发的成员继续执行`:`Pause coordinator; dispatched members keep working`:void 0,onClick:async()=>{if(!o){await O();return}x?k(`pause`):!w||Number(o.settings.token_budget??0)<=Number(o.native.tokensUsed??0)?D():n(C?`resume`:`start`)},children:[x?(0,z.jsx)(zm,{size:14}):(0,z.jsx)(Bm,{size:14}),x?a?`暂停协调员`:`Pause coordinator`:o?.enabled?S===`complete`?a?`开启新一轮`:`Start new run`:a?`恢复推进`:`Continue`:a?`开启 LoopX 模式`:`Enable LoopX`]})]})]}),ee.length?(0,z.jsxs)(`p`,{role:`status`,children:[a?`待处理消息:`:`Pending messages: `,ee.map(e=>`${e.mode===`loopx_queue`?`queue`:`inbox`} · ${e.status}`).join(` / `)]}):null,A?(0,z.jsx)(`button`,{className:`goal-loopx-review-notice`,type:`button`,onClick:()=>l(`team`),children:a?`最近成员回读有未通过或无法核验的结果 · 查看团队`:`Last member observations include rejected or unverified results · View team`}):null,(h||_)&&!c?(0,z.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:h||_}):null,(0,z.jsx)(`dialog`,{className:`goal-loopx-dialog`,ref:f,"aria-labelledby":`goal-loopx-dialog-title`,onClose:()=>l(null),onClick:e=>{e.target===e.currentTarget&&l(null)},children:c?(0,z.jsxs)(`div`,{className:`goal-loopx-dialog-content`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h2`,{id:`goal-loopx-dialog-title`,children:c===`team`?a?`团队执行情况`:`Team execution`:a?`运行设置`:`Execution settings`}),(0,z.jsx)(`button`,{type:`button`,autoFocus:!0,"aria-label":a?`关闭`:`Close`,onClick:()=>l(null),children:(0,z.jsx)(sh,{size:18})})]}),h||_?(0,z.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:h||_}):null,c===`team`&&e&&!_?(0,z.jsx)(fb,{sessionId:e,members:o?.members??[],zh:a,canMessage:x&&!o?.paused&&!_,ingress:o?.ingress??[]},`${e}:${o?.settings.agent_id}:${o?.settings.execution_config}`):null,c===`team`?(0,z.jsxs)(`div`,{className:`goal-team-control`,children:[(0,z.jsx)(`button`,{type:`button`,disabled:p||!x||!!_,onClick:()=>void k(`pause`),children:a?`暂停协调员`:`Pause coordinator`}),(0,z.jsxs)(`p`,{role:`status`,children:[o?.paused?x?a?`已暂停后续调度,等待当前协调轮次停止回读。`:`Further dispatch paused; awaiting coordinator turn stop readback.`:a?`协调员已暂停。`:`Coordinator paused.`:null,a?`此操作不会停止已派发成员;成员状态以上次执行回读为准。当前入口不支持停止整个团队。`:`This does not stop dispatched members; their states are last-read observations. Whole-team stop is unavailable here.`]})]}):null,u?(0,z.jsxs)(`div`,{className:`goal-loopx-mode-settings`,children:[(0,z.jsxs)(`label`,{children:[a?`已注册的协调身份`:`Registered coordinator`,(0,z.jsxs)(`select`,{value:y.agent_id,onChange:e=>b({...y,agent_id:e.target.value}),children:[(0,z.jsx)(`option`,{value:``,children:a?`选择已授权身份`:`Select authorized identity`}),o?.registered_agents.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]})]}),(0,z.jsxs)(`label`,{children:[a?`协调员总 token 额度`:`Coordinator total token allowance`,(0,z.jsx)(`input`,{type:`number`,min:1,max:2147483647,value:y.token_budget||``,onChange:e=>b({...y,token_budget:Number(e.target.value)})})]}),(0,z.jsxs)(`label`,{children:[a?`成员执行绑定文件(Goal 配置)`:`Member execution bindings (Goal configuration)`,(0,z.jsx)(`input`,{readOnly:!0,value:o?.settings.execution_config??(a?`未配置`:`Not configured`)})]}),(0,z.jsx)(`p`,{children:a?`绑定文件由 Goal 子代理设置统一管理;额度包含协调员历史用量,成员授权不会因开启模式而扩大。`:`Manage the binding file in Goal sub-agent settings. The allowance includes coordinator history; enabling this mode does not expand member grants.`}),(0,z.jsx)(`button`,{type:`button`,disabled:p||!y.agent_id||y.token_budget<1||!o?.settings.execution_config,onClick:()=>void k(`configure`),children:a?`保存设置`:`Save settings`})]}):null,c===`settings`&&o?.enabled&&o.native.tokensUsed!==void 0?(0,z.jsxs)(`p`,{className:`goal-loopx-mode-usage`,children:[a?`协调员累计用量`:`Coordinator usage`,` `,o.native.tokensUsed.toLocaleString(),` / `,o.native.tokenBudget?.toLocaleString()??`—`,` tokens`]}):null,c===`settings`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{children:a?`开启后,当前协调员持续推进本 Goal。暂停仅影响协调员,已派发成员继续执行;本轮结束不等于 Goal 完成。`:`The coordinator continues this Goal. Pausing affects only the coordinator; dispatched members keep working. A finished run does not complete the Goal.`}),o?.enabled&&!x?(0,z.jsx)(`button`,{type:`button`,disabled:p,onClick:()=>void k(`exit`),children:a?`退出模式`:`Exit mode`}):null]}):null]}):null})]})}function mb({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)(um,{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)(cm,{size:17})]})}var hb=/(`[^`\n]+`)|(\*\*[^*\n]+(\*[^*\n]*)?\*\*)|(\[[^\]\n]{1,120}\]\(https?:\/\/[^)\s]+\))/g;function gb(e,t){let n=[],r=0,i=0;for(let a of e.matchAll(hb)){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:pb(e.text,n)},n);if(e.type===`list`){let t=e.items.map((e,t)=>(0,z.jsx)(`li`,{children:pb(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,pb(e,`${n}-${t}`)]},`${n}-${t}`))},n)})})}function vb({onSelect:e,output:t}){let{t:n}=Ji(),r=t.kind===`report`?Sm:xm;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)(cm,{size:17})]})}var yb={completed:`runs.completed`,failed:`runs.failed`,interrupted:`runs.interrupted`,queued:`runs.queued`,running:`runs.running`,waiting:`runs.waiting`};function bb({onSelect:e,run:t,showGoal:n=!0}){let{t:r}=Ji();return(0,z.jsxs)(`button`,{"aria-label":`${r(`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)(rm,{size:18})}),(0,z.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,z.jsxs)(`small`,{children:[n?`${t.goalTitle} · `:``,t.agentLabel]}),(0,z.jsx)(`strong`,{children:t.title}),t.latestActivity===t.title?null:(0,z.jsx)(`small`,{children:t.latestActivity})]}),(0,z.jsxs)(`span`,{className:`personal-row-status is-${t.status}`,children:[t.status===`running`?(0,z.jsx)(Am,{className:`personal-spin`,size:14}):null,r(yb[t.status])]}),(0,z.jsx)(cm,{size:17})]})}function xb({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)(Hm,{size:17}):(0,z.jsx)(am,{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)(cm,{size:16})]})}function Sb({delivery:e}){let{t}=Ji();if(!e)return null;let n=e.status===`delivered`?e.verification===`reconciled_after_restart`?t(`returnDelivery.reconciled`):t(`returnDelivery.delivered`):e.status===`verification_required`?t(`returnDelivery.verifying`):e.status===`explicit_unverified`?t(`returnDelivery.unverified`):t(`returnDelivery.queued`),r=e.status===`delivered`?`delivered`:e.status===`verification_required`?`verification_required`:e.status===`explicit_unverified`?`explicit_unverified`:`queued`;return(0,z.jsx)(`small`,{className:`personal-return-delivery is-${r}`,role:`status`,children:n})}function Cb({items:e,onSelect:t,selectedGoal:n}){let{locale:r,t:i}=Ji();if(e.length===0)return(0,z.jsxs)(`div`,{className:`personal-timeline-empty`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)($m,{size:20})}),(0,z.jsx)(`strong`,{children:i(n?`timeline.emptyGoal`:`timeline.emptyWorkspace`)}),(0,z.jsx)(`p`,{children:i(n?`timeline.emptyGoalDescription`:`timeline.emptyWorkspaceDescription`)})]});let a=[...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`),o=a?.kind===`message`?`${a.message.agentLabel??i(`header.manager`)}:${a.message.pending?i(`timeline.pending`):a.message.text}`:a?.kind===`proposal`?`${a.proposal.title}:${a.proposal.status}`:a?.kind===`run`?i(`timeline.runCompleted`,{run:a.run.title}):``,s=e.filter(e=>e.kind===`proposal`&&e.proposal.status===`gated`),c=e.filter(e=>e.kind===`run`&&[`queued`,`running`,`completed`].includes(e.run.status)),l=new Set(c.map(e=>e.id)),u=e.filter(e=>e.kind!==`proposal`&&!l.has(e.id)),d=c.filter(e=>e.run.status===`running`&&!!e.run.sessionId&&!!e.run.canInterrupt).length,f=c.filter(e=>e.run.status===`queued`).length,p=c.filter(e=>e.run.status===`completed`).length,m=c.length-d-f-p,h=r===`zh-CN`?[d&&`${d} 个执行中`,f&&`${f} 个排队中`,p&&`${p} 次执行已结束`,m&&`${m} 项进展更新`].filter(Boolean).join(` · `):[d&&`${d} running`,f&&`${f} queued`,p&&`${p} runs finished`,m&&`${m} progress updates`].filter(Boolean).join(` · `),g=e.filter(e=>e.kind===`proposal`&&e.proposal.status!==`gated`);function _(e){return e.kind===`attention`?(0,z.jsx)(db,{attention:e.attention,onSelect:()=>t({item:e.attention,kind:`attention`})},e.id):e.kind===`run`?(0,z.jsx)(bb,{showGoal:!n,onSelect:()=>t({item:e.run,kind:`run`}),run:e.run},e.id):e.kind===`output`?(0,z.jsx)(vb,{onSelect:()=>t({item:e.output,kind:`output`}),output:e.output},e.id):e.kind===`schedule`?(0,z.jsx)(xb,{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)($m,{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}),e.proposal.impact?(0,z.jsx)(`p`,{children:e.proposal.impact}):null]}),(0,z.jsx)(`b`,{children:e.proposal.status===`gated`&&e.proposal.actionKind!==`operation.execute`?i(`timeline.review`):e.proposal.primaryLabel??i(`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)(rm,{size:17})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:e.message.role===`user`?i(`common.you`):e.message.agentLabel??i(`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)(_b,{text:e.message.text}),e.message.pending?(0,z.jsx)(`span`,{className:`personal-message-pending`,children:i(`timeline.pending`)}):null,(0,z.jsx)(Fy,{request:e.message.collaboration}),(0,z.jsx)(Sb,{delivery:e.message.returnDelivery})]})]},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:o}),(0,z.jsxs)(`div`,{className:`personal-channel-timeline`,children:[c.length?(0,z.jsxs)(`details`,{className:`personal-activity-summary`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(Yp,{size:16,"aria-hidden":`true`}),(0,z.jsx)(`strong`,{children:r===`zh-CN`?`执行动态`:`Execution activity`}),(0,z.jsx)(`span`,{children:h})]}),(0,z.jsx)(`div`,{children:c.map(_)})]}):null,u.map(_),s.length?(0,z.jsxs)(`details`,{className:`personal-gated-summary`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(`span`,{children:(0,z.jsx)($m,{size:16})}),(0,z.jsx)(`strong`,{children:i(`timeline.waitingConfirmation`)}),(0,z.jsx)(`small`,{children:i(`timeline.gateHistory`,{count:s.length})})]}),(0,z.jsx)(`div`,{children:s.map(_)})]}):null,g.map(_)]})]})}function wb({goal:e}){let{t,locale:n}=Ji(),r=n===`zh-CN`?{checkpoint_satisfied:`检查点满足`,checkpoint_fresh:`检查点有效`,path_outcome_valid:`路径决策有效`,evidence_refs_present:`证据引用齐全`,final_outcome_claim_present:`最终成果声明齐全`,no_reported_outcome_gap:`无已报告成果缺口`}:{checkpoint_satisfied:`Checkpoint satisfied`,checkpoint_fresh:`Checkpoint current`,path_outcome_valid:`Valid path decision`,evidence_refs_present:`Evidence refs present`,final_outcome_claim_present:`Final outcome claim present`,no_reported_outcome_gap:`No reported outcome gap`},i={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`)},a=e=>i[e]??t(`acceptance.unknown`),o=e.acceptanceObservation,s=e.loadState||!o||o.goal_id!==e.goalId||o.coverage===`unavailable`;return(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-acceptance`,"aria-label":t(`acceptance.title`),children:[(0,z.jsxs)(`div`,{className:`personal-detail-card-title`,children:[(0,z.jsx)(`h3`,{children:t(`acceptance.title`)}),(0,z.jsx)(`em`,{children:t(`common.readOnly`)})]}),(0,z.jsx)(`p`,{role:`status`,children:t(s?`acceptance.unavailable`:`acceptance.partial`)}),!s&&o?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h4`,{children:t(`acceptance.gaps`)}),o.acceptance_gaps.length?o.acceptance_gaps.map((e,i)=>(0,z.jsxs)(`div`,{className:`personal-acceptance-observation`,children:[(0,z.jsx)(`p`,{children:e.reason??t(`acceptance.reasonUnknown`)}),e.resolution_hint?(0,z.jsx)(`p`,{children:e.resolution_hint}):null,e.component_checks?(0,z.jsx)(`div`,{children:Object.entries(e.component_checks).map(([e,t])=>(0,z.jsxs)(`p`,{children:[r[e],`: `,n===`zh-CN`?t?`通过`:`未通过`:t?`Passed`:`Failed`]},e))}):null,(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`common.owner`)}),(0,z.jsx)(`dd`,{children:e.owner??t(`acceptance.unknown`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`acceptance.required`)}),(0,z.jsx)(`dd`,{children:e.evidence_required??t(`acceptance.unknown`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`acceptance.observed`)}),(0,z.jsx)(`dd`,{children:e.observed_at??t(`acceptance.unknown`)})]})]})]},`${e.kind}:${e.owner}:${i}`)):(0,z.jsx)(`p`,{children:t(`acceptance.noGaps`)}),(0,z.jsx)(`h4`,{children:t(`acceptance.guards`)}),o.guards.length?o.guards.map((e,n)=>(0,z.jsxs)(`div`,{className:`personal-acceptance-observation`,children:[(0,z.jsx)(`p`,{children:e.reason??t(`acceptance.reasonUnknown`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`common.owner`)}),(0,z.jsx)(`dd`,{children:e.owner??t(`acceptance.unknown`)})]}),e.blocks_agent?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`common.agent`)}),(0,z.jsx)(`dd`,{children:e.blocks_agent})]}):null,e.todo_id?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`common.task`)}),(0,z.jsx)(`dd`,{children:e.todo_id})]}):null,(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`acceptance.required`)}),(0,z.jsx)(`dd`,{children:e.evidence_required??t(`acceptance.unknown`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`acceptance.scope`)}),(0,z.jsx)(`dd`,{children:e.decision_scope??t(`acceptance.unknown`)})]})]})]},`${e.todo_id}:${n}`)):(0,z.jsx)(`p`,{children:t(`acceptance.noGuards`)}),(0,z.jsx)(`h4`,{children:t(`acceptance.next`)}),(0,z.jsx)(`p`,{children:o.next_action??t(`acceptance.unknown`)}),(0,z.jsxs)(`details`,{children:[(0,z.jsxs)(`summary`,{children:[t(`acceptance.historical_progress`),` · `,o.historical_progress.length]}),(0,z.jsx)(`p`,{children:t(`acceptance.historical`)}),o.historical_progress.map(e=>(0,z.jsxs)(`p`,{children:[(0,z.jsx)(`strong`,{children:a(e.kind)}),` · `,e.observed_at??t(`acceptance.unknown`),` `,e.evidence_refs.join(`, `)]},e.kind))]}),o.missing_sources.length?(0,z.jsxs)(`p`,{children:[t(`acceptance.missing`),` `,o.missing_sources.map(a).join(`, `)]}):null,o.truncated?(0,z.jsx)(`p`,{children:t(`acceptance.truncated`)}):null]}):null]})}function Tb({item:e,successor:t,onSelect:n}){let{t:r}=Ji(),i=e.details;return(0,z.jsxs)(`section`,{className:`personal-detail-card`,"aria-label":r(`attentionDetail.title`),children:[(0,z.jsx)(`h3`,{children:r(`attentionDetail.title`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`attentionDetail.request`)}),(0,z.jsx)(`dd`,{children:r(i?.interaction===`decision`?`attentionDetail.decision`:`attentionDetail.unknownRequest`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`common.status`)}),(0,z.jsx)(`dd`,{children:r(`attentionDetail.${i?.lifecycle??`unknown`}`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`drawer.reason`)}),(0,z.jsx)(`dd`,{children:i?.reason??e.explanation??r(`attentionDetail.unknownReason`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Todo`}),(0,z.jsx)(`dd`,{children:e.todoId})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`attentionDetail.targetTodo`)}),(0,z.jsx)(`dd`,{children:i?.unblocksTodoId??r(`attentionDetail.notProvided`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`attentionDetail.targetAgent`)}),(0,z.jsx)(`dd`,{children:i?.blocksAgent??r(`attentionDetail.notProvided`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`attentionDetail.scope`)}),(0,z.jsx)(`dd`,{children:i?.decisionScope?`${i.decisionScope.kind} · ${i.decisionScope.granularity} · ${i.decisionScope.scopeKey}`:r(`attentionDetail.notProvided`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`drawer.evidence`)}),(0,z.jsx)(`dd`,{children:i?.evidence??e.evidence??r(`drawer.decisionDefaultEvidence`)})]})]}),i?.supersededBy?(0,z.jsxs)(`p`,{children:[r(`attentionDetail.replacement`),`: `,i.supersededBy]}):null,t&&n?(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>n(t),type:`button`,children:r(`attentionDetail.openReplacement`)}):null,(0,z.jsx)(`p`,{children:r(`attentionDetail.boundary`)})]})}function Eb(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 Db(e,t){return e.goals.find(e=>e.goalId===t)?.title??t}function Ob(e){return[`推进中`,`需修复`,`等待条件`].includes(e.state)}function kb(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 Ab(e){let t=e;return t>=1e6?`${(t/1e6).toFixed(1)}M`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}function jb(e){return`$${e.toFixed(2)}`}function Mb(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 Nb(e,t,n){return e==null?t:n(e)}function Pb({proposal:e,t}){let n=e.teamPlanOutcome?.kind===`already_present`;return(0,z.jsxs)(`section`,{className:`personal-proposal-card personal-team-plan-result`,children:[(0,z.jsx)(`h3`,{children:nb(e.teamPlanOutcome??null,t)}),(0,z.jsxs)(`dl`,{className:`personal-team-plan-assignments`,children:[e.teamPlanAssignments?.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e.agentId||e.laneId}),(0,z.jsx)(`dd`,{children:e.task})]},e.laneId)),e.teamPlanGapLanes?.map(e=>(0,z.jsxs)(`div`,{className:`is-pending`,children:[(0,z.jsx)(`dt`,{children:e.agentId||e.laneId}),(0,z.jsxs)(`dd`,{children:[e.task||e.laneId,(0,z.jsx)(`br`,{}),(0,z.jsxs)(`small`,{children:[t(`proposal.teamPlan.pending`),` · `,eb(e.reasonCode,t)]})]})]},e.laneId))]}),(0,z.jsx)(`p`,{children:t(n?`proposal.teamPlan.recoveredHint`:`proposal.teamPlan.assignedHint`)}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t(`proposal.teamPlan.originalPlan`)}),(0,z.jsx)(`dl`,{children:e.fields.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e.label}),(0,z.jsx)(`dd`,{children:e.value})]},e.key))})]})]})}function Fb(e){return e.replace(/\s+/gu,` `).trim()}function Ib(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 Lb(e){return/(我现在该做什么|下一步|哪些\s*Goal\s*在等我|需要我|谁在等我|Agent\s*在做什么|当前进度|总结(?:今天)?进展)/iu.test(e)}function Rb(e){let t=/(怎么|如何|为什么|给.*建议|分析一下|解释|只读)/u.test(e),n=/(解决一下|修复一下|处理一下|执行一下|改一下|跑(?:一下)?测试|rebase|push|提交|推送)/iu.test(e);return!t&&n&&/(帮我|请|给我|直接|现在|开始|bytedcli|codebase|git|rebase|push|提交|推送)/iu.test(e)}function zb(e){return Fb(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 Bb(e,t){let n=Fb(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&&!Ib(n,/heartbeat|心跳/iu)&&/(heartbeat|心跳|每天推进|持续推进|daily progress)/iu.test(n);if(!t.goalId&&!Ib(n,/goal|目标/iu)&&/(创建|新建|设置|create|start|set up).{0,24}(goal|目标)/iu.test(n)&&r.push({actionKind:`goal.create`,confidence:.97,normalizedParameters:{heartbeat_enabled:!Ib(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&&!Ib(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&&!Ib(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&&!Ib(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&&Rb(n)&&r.push({actionKind:`todo.create`,confidence:.9,normalizedParameters:{goal_id:t.goalId,start_execution:!0}}),t.goalId&&a){let e=!Ib(n,/完成|做完|关闭/u)&&/完成|做完|关闭/u.test(n)?`complete`:!Ib(n,/阻塞|卡住/u)&&/阻塞|卡住/u.test(n)?`block`:!Ib(n,/暂缓|稍后|推迟/u)&&/暂缓|稍后|推迟/u.test(n)?`defer`:i&&!Ib(n,/交给|分配给|改派/u)&&/交给|分配给|改派/u.test(n)?`reassign`:null;if(e){let i=e===`defer`?zb(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&&Lb(n)?{actionKind:null,confidence:.98,missingFields:[],normalizedParameters:{},route:`projection`}:{actionKind:null,confidence:.75,missingFields:[],normalizedParameters:{},route:`agent_chat`}}function Vb(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 Hb=[`a[href]`,`button:not([disabled])`,`textarea:not([disabled])`,`select:not([disabled])`,`input:not([disabled])`,`[tabindex]:not([tabindex='-1'])`].join(`,`),Ub=[{key:`drawer.taskBlock`,operation:`block`},{key:`drawer.taskSuccessor`,operation:`successor_create`}],Wb=[{key:`drawer.decisionReject`,resolution:`reject`},{key:`drawer.decisionDefer`,resolution:`defer`}],Gb=Array.from({length:32},(e,t)=>t+1),Kb=/^[a-z][a-z0-9_.-]{0,63}$/u;function qb(e){let t=String(e??``).trim().toLowerCase();return Kb.test(t)?t:null}function Jb(e,t){return e.enabled===t.enabled&&e.maxChildren===t.maxChildren&&JSON.stringify(e.modelConfig??null)===JSON.stringify(t.modelConfig??null)&&(e.executionConfig??``)===(t.executionConfig??``)&&[...e.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)===[...t.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)}function Yb({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,R.useState)(``),[_,v]=(0,R.useState)(!1),[y,b]=(0,R.useState)(`idle`),[x,S]=(0,R.useState)(`record`),[C,w]=(0,R.useState)([]),[T,E]=(0,R.useState)(null),[D,O]=(0,R.useState)(2),[k,A]=(0,R.useState)(``),[ee,j]=(0,R.useState)(``),[M,te]=(0,R.useState)(``),[ne,N]=(0,R.useState)(`idle`),[P,re]=(0,R.useState)(null),[ie,ae]=(0,R.useState)(null),F=(0,R.useRef)(null),oe=(0,R.useRef)(null),[I,se]=(0,R.useState)(e.find(e=>e.available)?.agentId??`codex`),[L,ce]=(0,R.useState)(``),le=(0,R.useRef)(null),ue=(0,R.useRef)(null),de=(0,R.useRef)(null),fe=(0,R.useRef)(null),pe=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,R.useEffect)(()=>{b(`idle`),v(!1),S(`record`),ce(``);let e=f.kind===`goal`?f.item.subagentExecution:void 0;w(e?.allowedDomains??[]),A(e?.modelConfig?.model??``),j(e?.modelConfig?.reasoning_effort??``),te(e?.executionConfig??``),O(e?.maxChildren?Math.min(e.maxChildren,32):2),E(null),N(`idle`),re(null),ae(null),F.current=e??null,oe.current=null},[pe]);let me=f.kind===`goal`?f.item.subagentExecution:void 0;(0,R.useEffect)(()=>{let e=F.current,t=me?!e||!Jb(e,me):e!==null;if(F.current=me??null,!ie){t&&me&&(w(me.allowedDomains),A(me.modelConfig?.model??``),j(me.modelConfig?.reasoning_effort??``),te(me.executionConfig??``),O(me.maxChildren||2),E(null),N(`idle`),re(null));return}let n=oe.current;(!me||Jb(ie,me)||n&&!Jb(n,me))&&(me&&(w(me.allowedDomains),A(me.modelConfig?.model??``),j(me.modelConfig?.reasoning_effort??``),te(me.executionConfig??``),O(me.maxChildren||2)),oe.current=null,ae(null))},[me,ie]),(0,R.useEffect)(()=>{let e=document.activeElement;e instanceof HTMLElement&&!ue.current?.contains(e)&&(de.current=e);let t=window.requestAnimationFrame(()=>fe.current?.focus());return()=>window.cancelAnimationFrame(t)},[pe]);let he=(0,R.useCallback)(()=>{let e=de.current;c(),window.requestAnimationFrame(()=>e?.focus())},[c]);(0,R.useEffect)(()=>{function e(e){if(e.key===`Escape`){e.preventDefault(),he();return}if(e.key===`Tab`&&f.kind!==`todo`){let t=Array.from(ue.current?.querySelectorAll(Hb)??[]).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)}},[he,f.kind]);let ge=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`&&f.item.actionKind===`team.plan`&&f.item.status===`applied`?m(`proposal.teamPlan.resultTitle`):f.kind===`proposal`?m(f.item.reviewPlan?.retryOriginal?`drawer.recoverEditResult`:f.item.status===`applied`?`drawer.titleProposalApplied`:`drawer.titleProposalConfirm`):f.kind===`schedule`?f.item.scheduleKind===`heartbeat`?`Heartbeat`:m(`drawer.titleSchedule`):m(`drawer.goalDetails`),_e=f.kind===`proposal`?f.item.goalId??`manager`:f.item.goalId,ve=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.kind===`proposal`&&f.item.status===`applied`&&f.item.actionKind===`team.plan`?f.item.goalId??m(`drawer.currentGoal`):f.item.goalId?m(`drawer.goalChanges`):m(`drawer.managerChanges`),ye=f.kind===`goal`?d.find(e=>e.goalId===f.item.goalId&&!!e.sessionId)??d.find(e=>e.goalId===f.item.goalId):null,be=f.kind===`run`&&(f.item.completedSteps>0||!!f.item.latestActivity||!!f.item.outputs?.length),xe=f.kind===`attention`?Zi(f.item.updatedAt,m):null,Se=zb(L);async function Ce(){f.kind!==`run`||!h.trim()||(await r.onCorrectRun?.(f.item,h.trim()),g(``))}async function we(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 Te(e,t,n){u||!Xd(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 Ee=f.kind===`goal`?ie??f.item.subagentExecution??{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0}:{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0},De=ne===`previewing`||ne===`applying`,Oe=(()=>{if(f.kind!==`goal`)return[];let e=new Map;for(let t of Ee.allowedDomains){let n=qb(t);n&&e.set(n,{matchingTodoCount:0,value:n})}if(Ee.domainCandidates)for(let t of Ee.domainCandidates){let n=qb(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=qb(t.taskDomain);if(!n)continue;let r=e.get(n);e.set(n,{matchingTodoCount:(r?.matchingTodoCount??0)+1,value:n})}return[...e.values()]})();function ke(){w(Ee.allowedDomains),A(Ee.modelConfig?.model??``),j(Ee.modelConfig?.reasoning_effort??``),te(Ee.executionConfig??``),O(Ee.maxChildren||2),E(null),N(`idle`),re(null)}function Ae(){let e=[...new Set(C.map(e=>qb(e)))];return e.every(e=>!!e)?e:null}function je(e,t){w(n=>t?[...n,e].filter((e,t,n)=>n.indexOf(e)===t):n.filter(t=>t!==e)),re(null),N(`idle`),E(null)}async function Me(e,t=e){if(f.kind!==`goal`||!r.onPreviewGoalSubagentConfiguration)return;let n=e?Ae():[];if(t&&!k.trim()&&ee){N(`error`),E(m(`drawer.subagentModelRequired`));return}if(e&&!n){N(`error`),E(m(`drawer.subagentDomainInvalid`)),re(null);return}let i={alignCodexHostCapacity:e,allowedDomains:n??[],enabled:e,goalId:f.item.goalId,maxChildren:e?D:0,executionConfig:M.trim(),...Vb(t,k,ee)};N(`previewing`),E(m(`drawer.subagentPreviewing`)),re(null);try{let e=await r.onPreviewGoalSubagentConfiguration(i);if(!e.changed){oe.current=me??null,ae({...e.configuration,domainCandidates:Ee.domainCandidates}),w(e.configuration.allowedDomains),A(e.configuration.modelConfig?.model??``),j(e.configuration.modelConfig?.reasoning_effort??``),te(e.configuration.executionConfig??``),O(e.configuration.maxChildren||2),N(`success`),E(m(`drawer.subagentNoChange`));return}re({...i,codexHostCapacity:e.configuration.codexHostCapacity,changed:e.changed,previewId:e.previewId}),N(`ready`),E(m(`drawer.subagentPreviewReady`))}catch(e){N(`error`),E(e instanceof Error?e.message:m(`drawer.subagentPreviewFailed`))}}async function Ne(){if(!(!P||!r.onApplyGoalSubagentConfiguration)){N(`applying`),E(m(`drawer.subagentApplying`));try{let e=await r.onApplyGoalSubagentConfiguration({allowedDomains:P.allowedDomains,alignCodexHostCapacity:P.enabled,enabled:P.enabled,goalId:P.goalId,maxChildren:P.maxChildren,modelConfig:P.modelConfig,executionConfig:P.executionConfig,previewId:P.previewId});oe.current=me??null,ae({...e,domainCandidates:Ee.domainCandidates}),w(e.allowedDomains),A(e.modelConfig?.model??``),j(e.modelConfig?.reasoning_effort??``),te(e.executionConfig??``),O(e.maxChildren||2),N(`success`),E(m(e.codexHostCapacity?.newSessionRequired?`drawer.subagentAppliedRestart`:`drawer.subagentApplied`)),re(null);try{await r.onRefresh?.()}catch{N(`warning`),E(m(`drawer.subagentAppliedRefreshFailed`))}}catch(e){N(`error`),E(e instanceof Error?e.message:m(`drawer.subagentApplyFailed`))}}}return(0,z.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:ue,role:`dialog`,children:[(0,z.jsxs)(`header`,{className:`personal-drawer-header${f.kind===`todo`?` is-task-inspector`:``}`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h2`,{id:`personal-drawer-title`,ref:fe,tabIndex:-1,children:ge}),(0,z.jsx)(`p`,{children:ve})]}),(0,z.jsxs)(`div`,{className:`personal-drawer-header-actions`,children:[f.kind===`todo`&&l?(0,z.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,z.jsx)(Fm,{size:17}):(0,z.jsx)(jm,{size:17})}):null,(0,z.jsxs)(`button`,{"aria-label":m(`drawer.closeDetail`,{context:ve}),className:`personal-icon-button personal-drawer-close`,onClick:he,ref:le,type:`button`,children:[(0,z.jsx)(Zp,{className:`personal-mobile-back`,size:18}),(0,z.jsx)(sh,{className:`personal-desktop-close`,size:18})]})]})]}),(0,z.jsxs)(`div`,{className:`personal-drawer-body`,children:[f.kind===`attention`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card is-attention`,children:[(0,z.jsx)(`small`,{children:f.item.blocking?m(`drawer.attentionBlocking`):m(`drawer.attentionWaiting`)}),(0,z.jsx)(`h3`,{children:f.item.text}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle??f.item.goalId})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.priority`)}),(0,z.jsx)(`dd`,{children:f.item.priority??`medium`})]}),xe?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`common.waiting`)}),(0,z.jsx)(`dd`,{children:m(`tasks.waitingAge`,{age:xe})})]}):null]})]}),(0,z.jsx)(Tb,{item:f.item,onSelect:n,successor:Yd(f.item,t)}),!u&&Xd(f.item)?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void Te(f.item,`approve`,m(`common.confirm`)),type:`button`,children:[(0,z.jsx)(om,{size:17}),m(`drawer.decisionReview`)]}),(0,z.jsxs)(`details`,{className:`personal-compact-menu`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(_m,{size:17}),m(`drawer.decisionMore`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`button`,{onClick:()=>void r.onExplainDecision?.(f.item),type:`button`,children:[(0,z.jsx)(Nm,{size:16}),m(`drawer.explainDecision`)]}),Wb.map(e=>(0,z.jsx)(`button`,{onClick:()=>void Te(f.item,e.resolution,m(e.key)),type:`button`,children:m(e.key)},e.resolution))]})]})]}):null]}):null,f.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:f.item.done?`is-done`:f.item.status===`blocked`?`is-blocked`:`is-open`,children:[(0,z.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,z.jsx)(`span`,{children:f.item.priority}):null,(0,z.jsx)(`span`,{children:f.item.taskClass===`advancement_task`?m(`drawer.taskAdvancement`):f.item.taskClass??m(`drawer.taskOrdinary`)})]}),(0,z.jsx)(`h3`,{children:f.item.text})]}),(0,z.jsxs)(`section`,{"aria-label":m(`drawer.taskInfo`),className:`personal-task-inspector-fields`,children:[(0,z.jsx)(`h4`,{children:m(`drawer.taskInfo`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`common.owner`)}),(0,z.jsx)(`dd`,{children:f.item.ownerLabel??f.item.claimedBy??m(`drawer.notAssigned`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`common.status`)}),(0,z.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,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.priority`)}),(0,z.jsx)(`dd`,{children:f.item.priority??m(`drawer.notSet`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.dependencies`)}),(0,z.jsx)(`dd`,{children:f.item.dependencies?.join(` · `)||m(`common.none`)})]}),f.item.status===`deferred`||f.item.resumeWhen?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.resumeWhen`)}),(0,z.jsx)(`dd`,{children:f.item.resumeWhen||m(`drawer.notSet`)})]}):null,f.item.resumeWhen?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.resumeState`)}),(0,z.jsx)(`dd`,{children:f.item.resumeReady?m(`drawer.resumeReady`):m(`drawer.resumePending`)})]}):null,f.item.resumeReceiptId?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.resumeReceipt`)}),(0,z.jsx)(`dd`,{children:f.item.resumeReceiptId})]}):null,(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.nextTransition`)}),(0,z.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,z.jsxs)(`div`,{className:`personal-task-inspector-actions`,"aria-label":m(`drawer.taskActions`),children:[(0,z.jsxs)(`details`,{className:`personal-task-management`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(_m,{size:16}),m(`drawer.taskManage`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:m(`drawer.reassign`)}),(0,z.jsxs)(`label`,{className:`personal-inline-agent-select`,children:[m(`drawer.reassign`),(0,z.jsx)(`select`,{"aria-label":m(`drawer.reassign`),onChange:e=>se(e.target.value),value:I,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 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,z.jsx)(`strong`,{children:m(`drawer.taskDeferUntil`)}),(0,z.jsxs)(`label`,{className:`personal-inline-agent-select personal-inline-resume-when`,children:[m(`drawer.taskDeferUntil`),(0,z.jsx)(`input`,{"aria-label":m(`drawer.taskDeferCondition`),"aria-invalid":!!L.trim()&&!Se,onChange:e=>ce(e.target.value),placeholder:m(`drawer.taskDeferPlaceholder`),value:L}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:!Se,onClick:()=>void we(f.item,`defer`,m(`drawer.taskDefer`),Se??void 0),type:`button`,children:m(`drawer.taskDeferReview`)}),(0,z.jsx)(`small`,{children:L.trim()&&!Se?m(`drawer.taskDeferInvalid`):m(`drawer.taskDeferSupported`)})]}),(0,z.jsx)(`div`,{className:`personal-task-management-secondary`,children:Ub.map(e=>(0,z.jsx)(`button`,{onClick:()=>void we(f.item,e.operation,m(e.key)),type:`button`,children:m(e.key)},e.operation))})]})]}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void we(f.item,`complete`,m(`drawer.taskComplete`)),type:`button`,children:[(0,z.jsx)(om,{size:17}),m(`drawer.taskComplete`)]})]}):null,f.item.done?(0,z.jsxs)(`div`,{className:`personal-task-completed-note`,children:[(0,z.jsx)(om,{size:16}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:m(`drawer.taskCompletedTitle`)}),(0,z.jsx)(`small`,{children:m(`drawer.taskCompletedNote`)})]})]}):null]}):null,f.kind===`goal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsx)(`small`,{children:Yi(f.item.state,p)}),(0,z.jsx)(`h3`,{children:f.item.title}),(0,z.jsx)(`p`,{children:f.item.agentSentence}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.tokens`)}),(0,z.jsxs)(`dd`,{children:[Nb(f.item.usage?.tokens24h,m(`drawer.usageNotMeasured`),Ab),` / `,Nb(f.item.usage?.tokens7d,m(`drawer.usageNotMeasured`),Ab)]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.cost`)}),(0,z.jsxs)(`dd`,{children:[Nb(f.item.usage?.costUsd24h,m(`drawer.usageNotMeasured`),jb),` / `,Nb(f.item.usage?.costUsd7d,m(`drawer.usageNotMeasured`),jb)]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.duration`)}),(0,z.jsxs)(`dd`,{children:[Nb(f.item.usage?.durationMs24h,m(`drawer.usageNotMeasured`),Mb),` / `,Nb(f.item.usage?.durationMs7d,m(`drawer.usageNotMeasured`),Mb)]})]})]})]}),(0,z.jsx)(wb,{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,z.jsxs)(z.Fragment,{children:[f.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:m(`drawer.repository`)}),(0,z.jsx)(`em`,{children:m(`common.readOnly`)})]}),(0,z.jsxs)(`h3`,{children:[(0,z.jsx)(Cm,{size:16}),f.item.repository.label]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.branch`)}),(0,z.jsx)(`dd`,{children:f.item.repository.branch||`detached`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Role`}),(0,z.jsx)(`dd`,{children:m(`drawer.repositoryRole`)})]})]}),(0,z.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,z.jsx)(mm,{size:15}),m(y===`copied`?`drawer.copyRepositoryDone`:`drawer.copyRepository`)]}),y===`error`?(0,z.jsx)(`p`,{className:`personal-copy-feedback is-error`,role:`status`,children:m(`drawer.copyRepositoryError`)}):y===`copied`?(0,z.jsx)(`p`,{className:`personal-copy-feedback`,role:`status`,children:m(`drawer.copyRepositorySuccess`)}):null]}):null,u?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-notification`,children:[(0,z.jsx)(`small`,{children:m(`drawer.larkConnection`)}),(0,z.jsx)(`h3`,{children:m(`drawer.remoteDetailsUnavailable`)}),(0,z.jsx)(`p`,{children:m(`drawer.remoteDetailsDescription`)})]}):(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-notification`,children:[(0,z.jsx)(`small`,{children:m(`drawer.larkConnection`)}),t?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`h3`,{children:[t.app_label,(0,z.jsx)(`span`,{className:`personal-connection-status`,children:m(`drawer.connected`)})]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.group`)}),(0,z.jsx)(`dd`,{children:t.chat_name})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.topic`)}),(0,z.jsxs)(`dd`,{children:[`# `,t.topic_name]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.trigger`)}),(0,z.jsx)(`dd`,{children:t.incoming_mode===`mentions`?m(`lark.someoneMentions`):m(`lark.allMessages`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.replyMode`)}),(0,z.jsx)(`dd`,{children:m(`lark.topicReply`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.autoNotify`)}),(0,z.jsx)(`dd`,{children:e?.humanGateAutoNotifyEnabled?m(`common.on`):m(`common.off`)})]}),e?.lastNotifiedAt?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.lastNotification`)}),(0,z.jsx)(`dd`,{children:e.lastNotifiedAt})]}):null]})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:m(`drawer.larkNotConfigured`)}),(0,z.jsx)(`p`,{children:m(`drawer.larkNotConfiguredDescription`)})]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onOpenNotificationSettings?.(f.item.goalId),type:`button`,children:[(0,z.jsx)(nm,{size:16}),m(t?`drawer.larkConfigure`:`drawer.larkConnect`)]})]})]})})(),(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-session`,children:[(0,z.jsx)(`small`,{children:m(`drawer.runDetails`)}),ye?.sessionId?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:Xi(ye.sessionStatus??ye.status,m)}),(0,z.jsx)(`p`,{children:ye.title}),r.onOpenRunSession?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onOpenRunSession?.(ye),type:`button`,children:[(0,z.jsx)(Bm,{size:16}),m(`drawer.runLatest`)]}):null]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:m(`drawer.noRun`)}),(0,z.jsx)(`p`,{children:m(`drawer.noRunDescription`)})]})]}),u?null:(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onRequestScheduleConfig?.(`heartbeat`,f.item.goalId),type:`button`,children:[(0,z.jsx)(Hm,{size:16}),m(`drawer.setupHeartbeat`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onRequestScheduleConfig?.(`monitor`,f.item.goalId),type:`button`,children:[(0,z.jsx)(am,{size:16}),m(`drawer.scheduleAdd`)]})]}),f.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:m(`drawer.subagentLabel`)}),(0,z.jsxs)(`h3`,{children:[(0,z.jsx)(rm,{size:16}),m(`drawer.subagentTitle`)]})]}),(0,z.jsxs)(`button`,{"aria-checked":Ee.enabled,"aria-label":m(P&&ne===`ready`?`drawer.subagentPending`:Ee.enabled?`drawer.subagentDisable`:`drawer.subagentEnable`),className:`personal-subagent-switch`,"data-pending":P&&ne===`ready`?`true`:void 0,disabled:u||De||!!P||!r.onPreviewGoalSubagentConfiguration,onClick:()=>void Me(!Ee.enabled),role:`switch`,type:`button`,children:[(0,z.jsx)(`span`,{}),m(P&&ne===`ready`?`drawer.subagentPending`:Ee.enabled?`common.on`:`common.off`)]})]}),(0,z.jsx)(`p`,{children:m(`drawer.subagentDescription`)}),P&&ne===`ready`?(0,z.jsxs)(`div`,{className:`personal-subagent-preview`,children:[(0,z.jsx)(`strong`,{children:m(P.enabled?`drawer.subagentConfirmEnable`:`drawer.subagentConfirmDisable`)}),(0,z.jsx)(`p`,{children:P.enabled?m(`drawer.subagentPreviewSummary`,{count:P.maxChildren,domains:P.allowedDomains.join(` · `)||m(`drawer.subagentDomainsUnrestricted`)}):m(`drawer.subagentDisableSummary`)}),P.modelConfig===void 0?null:(0,z.jsxs)(`p`,{children:[m(`drawer.subagentModel`),`: `,P.modelConfig?.model||m(`drawer.subagentModelDefault`),` · `,P.modelConfig?.reasoning_effort||m(`drawer.subagentModelDefault`)]}),(0,z.jsxs)(`p`,{children:[m(`drawer.subagentExecutionConfig`),`: `,P.executionConfig||m(`drawer.subagentExecutionConfigNone`)]}),P.enabled&&P.codexHostCapacity?(0,z.jsx)(`p`,{children:m(P.codexHostCapacity.writeRequired?`drawer.subagentHostCapacityRaise`:`drawer.subagentHostCapacityReady`,{configured:P.codexHostCapacity.configuredChildren??m(`drawer.subagentHostCapacityImplicit`),required:P.codexHostCapacity.requiredChildren})}):null,(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`button`,{className:`personal-primary-action`,onClick:()=>void Ne(),type:`button`,children:m(`common.confirm`)}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:ke,type:`button`,children:m(`common.cancel`)})]})]}):null,T?(0,z.jsxs)(`p`,{className:`personal-subagent-feedback is-${ne}`,role:`status`,children:[ne===`previewing`||ne===`applying`?(0,z.jsx)(Wm,{className:`personal-spin`,size:13}):null,T]}):null,(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentModel`)}),(0,z.jsx)(`dd`,{children:Ee.modelConfig?.model||m(`drawer.subagentModelDefault`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentEffort`)}),(0,z.jsx)(`dd`,{children:Ee.modelConfig?.reasoning_effort||m(`drawer.subagentModelDefault`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentCurrentBoundary`)}),(0,z.jsx)(`dd`,{children:Ee.allowedDomains.join(` · `)||m(`drawer.subagentDomainsUnrestricted`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentChildLimit`)}),(0,z.jsx)(`dd`,{children:Ee.maxChildren||0})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentExecutionConfig`)}),(0,z.jsx)(`dd`,{children:Ee.executionConfig||m(`drawer.subagentExecutionConfigNone`)})]})]}),u?(0,z.jsx)(`p`,{className:`personal-subagent-read-only`,children:m(`drawer.subagentRemoteReadOnly`)}):(0,z.jsxs)(`div`,{className:`personal-subagent-fields`,children:[(0,z.jsxs)(`fieldset`,{className:`personal-subagent-domain-picker`,disabled:De,children:[(0,z.jsx)(`legend`,{children:m(`drawer.subagentDomains`)}),Oe.length>0?(0,z.jsx)(`div`,{className:`personal-subagent-domain-options`,children:Oe.map(e=>{let t=C.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=>je(e.value,t.target.checked),type:`checkbox`}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.value}),(0,z.jsx)(`small`,{children:m(`drawer.subagentDomainTodoCount`,{count:e.matchingTodoCount})})]})]},e.value)})}):(0,z.jsx)(`p`,{className:`personal-subagent-domain-empty`,children:m(`drawer.subagentDomainsEmpty`)}),(0,z.jsx)(`small`,{children:m(`drawer.subagentDomainsHint`)})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:m(`drawer.subagentModel`)}),(0,z.jsx)(`input`,{"aria-label":m(`drawer.subagentModel`),disabled:De,value:k,placeholder:`gpt-5.6-luna`,onChange:e=>{A(e.target.value),re(null),N(`idle`),E(null)}})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:m(`drawer.subagentEffort`)}),(0,z.jsxs)(`select`,{"aria-label":m(`drawer.subagentEffort`),disabled:De,value:ee,onChange:e=>{j(e.target.value),re(null),N(`idle`),E(null)},children:[(0,z.jsx)(`option`,{value:``,children:m(`drawer.subagentModelDefault`)}),[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`,`ultra`].map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]})]}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:De,type:`button`,onClick:()=>{A(`gpt-5.6-luna`),j(`max`),re(null),N(`idle`),E(null)},children:m(`drawer.subagentLunaPreset`)}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:De,type:`button`,onClick:()=>{A(``),j(``),re(null),N(`idle`),E(null)},children:m(`drawer.subagentClearModel`)}),(0,z.jsx)(`p`,{children:m(`drawer.subagentModelHint`)}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:m(`drawer.subagentExecutionConfig`)}),(0,z.jsx)(`input`,{"aria-label":m(`drawer.subagentExecutionConfig`),disabled:De,onChange:e=>{te(e.target.value),re(null),N(`idle`),E(null)},placeholder:`.loopx/config/delegations.json`,value:M})]}),(0,z.jsx)(`p`,{children:m(`drawer.subagentExecutionConfigHint`)}),(0,z.jsxs)(`label`,{className:`personal-subagent-limit-field`,children:[(0,z.jsx)(`span`,{children:m(`drawer.subagentMaxChildren`)}),(0,z.jsx)(`select`,{"aria-label":m(`drawer.subagentMaxChildren`),disabled:De,onChange:e=>{O(Number(e.target.value)),re(null),N(`idle`),E(null)},value:D,children:Gb.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))})]}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:De,onClick:()=>void Me(Ee.enabled,!0),type:`button`,children:m(`drawer.subagentPreviewBoundary`)})]})]}):null]}):null,f.kind===`run`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{"aria-label":m(`drawer.runView`),className:`personal-run-drawer-tabs`,role:`tablist`,children:[(0,z.jsx)(`button`,{"aria-selected":x===`record`,onClick:()=>S(`record`),role:`tab`,type:`button`,children:m(`drawer.executionRecordAndResult`)}),(0,z.jsx)(`button`,{"aria-selected":x===`details`,onClick:()=>S(`details`),role:`tab`,type:`button`,children:m(`drawer.detailsAndActions`)})]}),x===`record`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card personal-session-summary`,children:[(0,z.jsxs)(`small`,{children:[f.item.agentLabel,` · `,Xi(f.item.sessionStatus??f.item.status,m)]}),(0,z.jsx)(`h3`,{children:f.item.title}),(0,z.jsx)(`p`,{children:f.item.latestActivity}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.progress`)}),(0,z.jsxs)(`dd`,{children:[f.item.completedSteps,`/`,f.item.totalSteps]})]})]})]}),(0,z.jsxs)(`section`,{"aria-label":m(`drawer.executionRecord`),className:`personal-session-message-record`,children:[(0,z.jsx)(`h3`,{children:m(`drawer.executionRecord`)}),f.item.sessionMessages?.length?(0,z.jsx)(`ol`,{children:f.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`?m(`drawer.runRoleUser`):e.role===`assistant`?m(`drawer.runRoleAssistant`):m(`drawer.runRoleSystem`)}),e.createdAt?(0,z.jsx)(`time`,{children:new Date(e.createdAt).toLocaleTimeString(p,{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:be?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,z.jsxs)(`div`,{className:`personal-session-active-step`,children:[(0,z.jsx)(`i`,{}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:m(`drawer.analysis`)}),(0,z.jsx)(`small`,{children:m(`drawer.agentWorking`)})]})]}):null]}),f.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:m(`drawer.outputs`)}),(0,z.jsx)(`ol`,{children:f.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??m(`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:[f.item.agentLabel,` · `,Xi(f.item.status,m)]}),(0,z.jsx)(`h3`,{children:f.item.title}),(0,z.jsx)(`p`,{children:f.item.latestActivity}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.progress`)}),(0,z.jsxs)(`dd`,{children:[f.item.completedSteps,`/`,f.item.totalSteps]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.sessionStatus`)}),(0,z.jsx)(`dd`,{children:Xi(f.item.sessionStatus??f.item.status,m)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.sessionRecoverable`)}),(0,z.jsx)(`dd`,{children:f.item.resumable===!1?m(`drawer.resumeNo`):m(`drawer.resumeYes`)})]})]})]}),f.item.sessionStatus===`resume_failed`&&!u?(0,z.jsxs)(`section`,{className:`personal-recovery-panel`,"aria-label":m(`drawer.recoveryFailed`),children:[(0,z.jsx)(`strong`,{children:m(`drawer.recoveryFailed`)}),(0,z.jsx)(`p`,{children:m(`drawer.recoveryDescription`)}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onRetryResumeRun?.(f.item),type:`button`,children:[(0,z.jsx)(Wm,{size:16}),m(`drawer.recoveryRetry`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onStartNewRunSession?.(f.item),type:`button`,children:[(0,z.jsx)(Bm,{size:16}),m(`drawer.recoveryNewSession`)]})]}):null,u?null:(0,z.jsxs)(`section`,{className:`personal-correction-panel`,children:[(0,z.jsx)(`header`,{children:(0,z.jsxs)(`span`,{children:[(0,z.jsx)(rm,{size:16}),m(`drawer.correctionLabel`,{agent:f.item.agentLabel})]})}),(0,z.jsx)(`p`,{children:m(`drawer.correctionDescription`)}),(0,z.jsxs)(`div`,{className:`personal-correction-composer`,children:[(0,z.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,z.jsx)(`button`,{"aria-label":m(`drawer.correctionSend`),disabled:!h.trim(),onClick:()=>void Ce(),type:`button`,children:(0,z.jsx)(qm,{size:16})})]})]}),u?null:(0,z.jsxs)(`details`,{className:`personal-compact-menu personal-run-more`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(_m,{size:17}),m(`drawer.moreRunActions`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`button`,{disabled:!f.item.canInterrupt,onClick:()=>void r.onInterruptRun?.(f.item),type:`button`,children:[(0,z.jsx)(zm,{size:16}),m(`drawer.runInterrupt`)]}),(0,z.jsxs)(`button`,{disabled:f.item.resumable===!1,onClick:()=>void r.onRetryResumeRun?.(f.item),type:`button`,children:[(0,z.jsx)(Wm,{size:16}),m(`drawer.recoveryRetry`)]}),(0,z.jsxs)(`button`,{onClick:()=>void r.onStartNewRunSession?.(f.item),type:`button`,children:[(0,z.jsx)(Bm,{size:16}),m(`drawer.runNewSession`)]}),(0,z.jsxs)(`button`,{onClick:()=>void r.onCloseRunSession?.(f.item),type:`button`,children:[(0,z.jsx)(eh,{size:16}),m(`drawer.runCloseSession`)]})]})]})]})]}):null,f.kind===`output`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsx)(`small`,{children:f.item.kind??`output`}),(0,z.jsx)(`h3`,{children:f.item.title}),(0,z.jsx)(`p`,{children:f.item.summary??m(`drawer.outputRecorded`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle??f.item.goalId})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.outputTodo`)}),(0,z.jsx)(`dd`,{children:f.item.todoId??m(`drawer.notLinked`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.outputRun`)}),(0,z.jsx)(`dd`,{children:f.item.runId??m(`drawer.notLinked`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Agent`}),(0,z.jsx)(`dd`,{children:f.item.agentLabel??f.item.agentId??`LoopX`})]})]})]}),f.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:[`+`,f.item.report.addedCount]}),m(`files.reportAdded`)]}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:f.item.report.changedCount}),m(`files.reportChanged`)]})]}),(0,z.jsxs)(`p`,{children:[f.item.report.periodStartAt,` → `,f.item.report.periodEndAt]}),(0,z.jsx)(`ol`,{children:f.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:[m(`files.reportPublication`),`: `,f.item.report.publicationId]}),(0,z.jsxs)(`span`,{children:[m(`files.reportGeneration`),`: `,f.item.report.generationId]})]})]}):null,f.item.safePreview?(0,z.jsx)(`pre`,{"aria-label":m(`drawer.outputSafePreview`),className:`personal-safe-preview`,children:f.item.safePreview}):(0,z.jsx)(`p`,{className:`personal-preview-unavailable`,children:m(`drawer.previewUnavailable`)}),(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:!r.onOpenOutput,onClick:()=>{r.onOpenOutput?.(f.item),c()},type:`button`,children:[(0,z.jsx)(vm,{size:16}),m(`files.openConversation`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,disabled:!r.onExportOutput,onClick:()=>void r.onExportOutput?.(f.item),type:`button`,children:[(0,z.jsx)(gm,{size:16}),m(`files.exportSummary`)]})]})]}):null,f.kind===`proposal`?(0,z.jsxs)(z.Fragment,{children:[f.item.actionKind===`team.plan`&&f.item.status===`applied`?(0,z.jsx)(Pb,{proposal:f.item,t:m}):(0,z.jsxs)(`section`,{className:`personal-proposal-card`,children:[(0,z.jsxs)(`small`,{children:[f.item.actionKind,` · `,f.item.status]}),(0,z.jsx)(`h3`,{children:f.item.title}),f.item.impact?(0,z.jsx)(`p`,{children:f.item.impact}):null,f.item.reviewPlan&&!f.item.reviewPlan.retryOriginal&&f.item.actionKind!==`team.plan`?(0,z.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`&&f.item.actionKind!==`team.plan`?(0,z.jsx)(`p`,{className:`personal-proposal-explainer`,children:m(`drawer.proposalExplainer`)}):null,(0,z.jsx)(`dl`,{children:f.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))})]}),f.item.status===`applied`&&f.item.actionKind!==`team.plan`?(0,z.jsxs)(`p`,{className:`personal-proposal-state ${f.item.actionKind===`operation.execute`&&f.item.reviewPlan?.reason===`readback_unverified`?`is-gated`:`is-applied`}`,children:[(0,z.jsx)(om,{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,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>{let e=f.item.goalId;c(),r.onOpenGoal?.(e)},type:`button`,children:[(0,z.jsx)(vm,{size:16}),f.item.actionKind===`goal.create`?m(`drawer.proposalEnterGoal`):m(f.item.actionKind===`team.plan`?`proposal.teamPlan.openGoal`:`drawer.proposalViewGoal`)]}):null,f.item.status===`stale`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-stale`,children:m(`drawer.proposalStale`)}):null,f.item.status===`error`&&!f.item.reviewPlan?.retryOriginal?(0,z.jsxs)(`div`,{className:`personal-proposal-state is-error`,children:[(0,z.jsx)(`span`,{children:f.item.reviewPlan?.reason===`readback_unverified`?m(`actionReview.readback_unverified`):m(`drawer.proposalApplyFailed`)}),f.item.errorMessage?(0,z.jsx)(`small`,{children:f.item.errorMessage}):null,(0,z.jsx)(`small`,{children:m(f.item.actionKind===`team.plan`?`proposal.teamPlan.retryHint`:`drawer.proposalApplyFailedHint`)})]}):null,f.item.status===`rejected`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-error`,children:m(`drawer.proposalRejected`)}):null,f.item.status===`deferred`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-gated`,children:m(`drawer.proposalDeferred`)}):null,f.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.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,z.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,z.jsxs)(`section`,{className:`personal-detail-card personal-gate-cli-hint`,children:[(0,z.jsx)(`small`,{children:m(`drawer.gateApproveHint`)}),(0,z.jsxs)(`code`,{children:[`loopx todo complete --goal-id `,t,` --todo-id `,n,` --decision-outcome approve`]}),(0,z.jsx)(`small`,{children:m(`drawer.gateRejectHint`)})]})})():null,!u&&f.item.workspaceCandidates?.length?(0,z.jsx)(`div`,{className:`personal-workspace-candidates`,"aria-label":m(`drawer.workspaceCandidates`),children:f.item.workspaceCandidates.map(e=>(0,z.jsxs)(`button`,{onClick:()=>void r.onSelectWorkspaceCandidate?.(f.item,e.workspaceRef),type:`button`,children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.workspaceRef})]},e.workspaceRef))}):null,!u&&f.item.actionKind!==`operation.execute`&&f.item.status===`error`?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void(f.item.actionKind===`team.plan`||f.item.reviewPlan?.retryOriginal?r.onApplyProposal?.(f.item):r.onTransitionProposal?.(f.item,`regenerate`)),type:`button`,children:[(0,z.jsx)(Wm,{size:17}),m(f.item.reviewPlan?.retryOriginal?`drawer.retryOriginal`:f.item.actionKind===`team.plan`?`proposal.teamPlan.retry`:`drawer.proposalRegenerate`)]}):!u&&f.item.actionKind!==`operation.execute`&&f.item.status!==`gated`&&(f.item.actionKind!==`team.plan`||f.item.status!==`applied`)?(0,z.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,z.jsx)(om,{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,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`regenerate`),type:`button`,children:[(0,z.jsx)(Wm,{size:16}),m(`drawer.proposalRecheck`)]}):null,!u&&f.item.actionKind!==`operation.execute`&&[`ready`,`gated`].includes(f.item.status)?(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`defer`),type:`button`,children:m(`drawer.proposalDefer`)}),(0,z.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,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:c,type:`button`,children:m(`drawer.proposalClose`)})]}):null,f.kind===`schedule`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsxs)(`small`,{children:[f.item.scheduleKind===`heartbeat`?`Goal Heartbeat`:`continuous_monitor`,` · `,f.item.status??`active`]}),(0,z.jsx)(`h3`,{children:f.item.label}),(0,z.jsx)(`p`,{children:f.item.target??f.item.schedule??m(`drawer.scheduleDefaultTarget`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleTimezone`)}),(0,z.jsx)(`dd`,{children:f.item.timezone??m(`drawer.scheduleLocalTimezone`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleNext`)}),(0,z.jsx)(`dd`,{children:f.item.nextRunAt??m(`drawer.schedulePending`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleLast`)}),(0,z.jsx)(`dd`,{children:f.item.previousRunAt??m(`drawer.scheduleNeverRun`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleNotification`)}),(0,z.jsx)(`dd`,{children:f.item.notificationRule??m(`drawer.scheduleDefaultNotification`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleStopCondition`)}),(0,z.jsx)(`dd`,{children:f.item.stopCondition??m(`drawer.scheduleDefaultStop`)})]})]})]}),!u&&f.item.scheduleKind===`monitor`?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`run_now`),type:`button`,children:[(0,z.jsx)(Bm,{size:16}),m(`drawer.scheduleRunNow`)]}):null,u?null:(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.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,z.jsx)(Bm,{size:16}):(0,z.jsx)(zm,{size:16}),f.item.status===`paused`?m(`drawer.scheduleResume`):m(`drawer.schedulePause`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`edit`),type:`button`,children:[(0,z.jsx)(am,{size:16}),m(`drawer.scheduleEdit`)]})]}),u?null:(0,z.jsxs)(`button`,{className:`personal-danger-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`stop`),type:`button`,children:[(0,z.jsx)(eh,{size:16}),m(`drawer.scheduleStop`,{kind:f.item.scheduleKind===`heartbeat`?` Heartbeat`:m(`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:m(`drawer.executionHistory`)}),f.item.executionHistory?.length?(0,z.jsx)(`ol`,{children:f.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:m(`drawer.noExecutionHistory`)})]})]}):null,f.kind===`run`||f.kind===`proposal`||f.kind===`schedule`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`button`,{"aria-expanded":_,className:`personal-diagnostics-trigger`,onClick:()=>v(e=>!e),type:`button`,children:[(0,z.jsx)(`span`,{children:m(`drawer.advancedDiagnostics`)}),(0,z.jsx)(sm,{className:_?`is-open`:``,size:16})]}),_?(0,z.jsxs)(`div`,{className:`personal-diagnostics`,children:[(0,z.jsxs)(`code`,{children:[`goal_id: `,_e]}),(0,z.jsxs)(`code`,{children:[`kind: `,f.kind]}),f.kind===`run`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`session_id: `,f.item.sessionId??m(`drawer.notLinked`)]}),(0,z.jsxs)(`code`,{children:[`turn_id: `,f.item.turnId??m(`common.none`)]}),(0,z.jsxs)(`code`,{children:[`adapter: `,f.item.agentId]}),(0,z.jsxs)(`code`,{children:[`status: `,f.item.sessionStatus??f.item.status]})]}):f.kind===`proposal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`action: `,f.item.actionKind]}),(0,z.jsxs)(`code`,{children:[`status: `,f.item.status]})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`schedule_id: `,f.item.scheduleId]}),(0,z.jsxs)(`code`,{children:[`status: `,f.item.status??`active`]})]})]}):null]}):null]})]})}var Xb=[`checking`,`connecting`,`downloading`,`installing_app`,`installing_runtime`],Zb={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 Qb(e,t=`update_failed`){return{phase:`error`,details:{code:typeof e==`string`&&Object.hasOwn(Zb,e)?e:t}}}function $b(){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=Xb.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(Qb(t))})}).catch(()=>{e&&c(Qb(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(Qb(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.`,runtime_pairing_required:t?`本机 CLI 运行时与 App 自带运行时不一致。回到 App 启动界面可「更新 App 与运行时」或「回退 CLI」。`:`This host's CLI runtime and the App's bundled runtime differ. On the App boot screen, update both or use the App's runtime.`,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:Zb[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)(gm,{size:16,"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:v}),(0,z.jsx)(lm,{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)(sh,{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)(Um,{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 ex=e=>`loopx-sidebar-goal-order-v1:${encodeURIComponent(e)}`;function tx(e){try{let t=JSON.parse(e??`null`);return Array.isArray(t)&&t.every(e=>typeof e==`string`)?[...new Set(t)]:[]}catch{return[]}}function nx(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 rx(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 ix(e,t){let n=ex(t),[r,i]=(0,R.useState)(()=>{try{return tx(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=nx(e,r),m=p.map(e=>e.goalId);function h(t,a,s){let l=rx(r,m,t,a,s);if(l===r)return;i(l);let u=nx(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 ax=`/ssh-hosts`,ox=/^[A-Za-z0-9][A-Za-z0-9._-]{0,254}$/;function sx(e){return typeof e==`string`&&ox.test(e.trim())}function cx(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!sx(t)||n.has(t)?[]:(n.add(t),[{alias:t}])}),schemaVersion:`ssh_host_catalog_v0`}}async function lx(e=fetch,t=ax){let n=await e(t,{cache:`no-store`});if(!n.ok)throw Error(`无法读取本机 SSH Host(HTTP ${n.status})。`);return cx(await n.json())}function ux(e,t){let n=e.trim();if(!sx(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 dx=`/api/ssh-source/ensure`,fx=`/api/ssh-source/goal-lifecycle`;async function px(e,t){let n=await fetch(dx,{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 mx(e,t,n,r,i=fetch){let a=await i(fx,{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 hx({activeSource:e,connectionState:t,errorMessage:n,onAdd:r,onConfiguredHostsLoaded:i,onRemove:a,onSelect:o,sources:s}){let{t:c}=Ji(),[l,u]=(0,R.useState)(!1),[d,f]=(0,R.useState)(null),[p,m]=(0,R.useState)(`configured`),[h,g]=(0,R.useState)([]),[_,v]=(0,R.useState)(null),[y,b]=(0,R.useState)(!1),[x,S]=(0,R.useState)(!1),[C,w]=(0,R.useState)(``),[T,E]=(0,R.useState)(``),[D,O]=(0,R.useState)(`8876`),[k,A]=(0,R.useState)(``),ee=`configured:`,j=[...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:`${ee}${e.alias}`}))],M=(0,R.useMemo)(()=>h.some(e=>e.alias===C)?ux(C,D):{error:c(`source.selectHost`)},[h,C,D,c]);(0,R.useEffect)(()=>{te()},[]);async function te(){b(!0),v(null);try{let e=await lx();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 ne(){u(!0),m(`configured`),f(null),te()}function N(){u(!1),m(`configured`),v(null),S(!1),w(``),f(null),E(``),O(`8876`),A(``)}function P(){let e=r({label:T,statusUrl:k});if(e.error){f(e.error);return}N()}function re(){if(`error`in M){f(M.error??c(`source.invalid`));return}let e=r({ensureTunnel:!0,hostAlias:M.hostAlias,label:M.label,statusUrl:M.statusUrl});if(e.error){f(e.error);return}N()}function ie(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=ux(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 ae(){if(`error`in M){f(M.error??c(`source.invalid`));return}try{await navigator.clipboard.writeText(M.command),S(!0),f(null)}catch{f(c(`source.copyError`))}}return(0,z.jsxs)(`section`,{"aria-label":c(`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":c(`source.addSsh`),onClick:ne,title:c(`source.add`),type:`button`,children:(0,z.jsx)(Vm,{size:14})})]}),(0,z.jsx)(rb,{ariaLabel:c(`source.select`),className:`personal-status-source-select`,icon:(0,z.jsx)(Ym,{size:15}),onChange:e=>{if(e.startsWith(ee)){ie(e.slice(11));return}o(e)},options:j,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`,{}),c(t===`loading`?`source.connecting`:t===`error`?`source.notAvailable`:`source.connected`)]}),(0,z.jsx)(`small`,{children:e.readOnly?c(`source.readOnly`):c(`source.localInteractive`)}),e.kind===`ssh_tunnel`?(0,z.jsx)(`button`,{"aria-label":c(`source.remove`,{source:e.label}),onClick:()=>a(e.id),title:c(`source.removeCurrent`),type:`button`,children:(0,z.jsx)(rh,{size:12})}):null]}),n?(0,z.jsx)(`p`,{className:`personal-status-source-error`,role:`alert`,children:n}):null,l?(0,z.jsxs)(`div`,{className:`personal-status-source-form`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:c(`source.addSsh`)}),(0,z.jsx)(`button`,{"aria-label":c(`source.closeForm`),onClick:N,type:`button`,children:(0,z.jsx)(sh,{size:13})})]}),(0,z.jsxs)(`div`,{"aria-label":c(`source.addMethod`),className:`personal-status-source-modes`,role:`tablist`,children:[(0,z.jsx)(`button`,{"aria-selected":p===`configured`,onClick:()=>{m(`configured`),f(null)},role:`tab`,type:`button`,children:c(`source.configured`)}),(0,z.jsx)(`button`,{"aria-selected":p===`manual`,onClick:()=>{m(`manual`),f(null)},role:`tab`,type:`button`,children:c(`source.manual`)})]}),p===`configured`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:c(`source.configuredCount`,{count:h.length})}),(0,z.jsxs)(`span`,{className:`personal-status-source-field-row`,children:[(0,z.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,z.jsx)(`datalist`,{id:`loopx-configured-ssh-hosts`,children:h.map(e=>(0,z.jsx)(`option`,{value:e.alias},e.alias))}),(0,z.jsx)(`button`,{"aria-label":c(`source.refreshHosts`),disabled:y,onClick:()=>void te(),title:c(`source.refreshHosts`),type:`button`,children:(0,z.jsx)(Gm,{size:13})})]})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:c(`source.localPort`)}),(0,z.jsx)(`input`,{"aria-label":c(`source.localPort`),inputMode:`numeric`,onChange:e=>{O(e.target.value),S(!1)},value:D})]}),(0,z.jsxs)(`div`,{className:`personal-status-source-command`,children:[(0,z.jsx)(`code`,{children:`error`in M?c(`source.tunnelCommandPending`):M.command}),(0,z.jsxs)(`button`,{"aria-label":c(`source.copyCommand`),disabled:`error`in M,onClick:()=>void ae(),type:`button`,children:[(0,z.jsx)(mm,{size:12}),c(x?`source.copied`:`source.copy`)]})]}),_?(0,z.jsx)(`p`,{className:`is-error`,children:_}):null,(0,z.jsx)(`p`,{children:c(`source.description`)}),(0,z.jsx)(`button`,{className:`personal-status-source-add`,disabled:`error`in M,onClick:re,type:`button`,children:c(`source.addConfigured`)})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:c(`source.name`)}),(0,z.jsx)(`input`,{autoFocus:!0,maxLength:48,onChange:e=>E(e.target.value),placeholder:c(`source.namePlaceholder`),value:T})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:c(`source.statusUrl`)}),(0,z.jsx)(`input`,{onChange:e=>A(e.target.value),placeholder:`http://127.0.0.1:8876/status.json`,value:k})]}),(0,z.jsx)(`p`,{children:(0,z.jsx)(`code`,{children:`ssh -N -L 8876:127.0.0.1:8766 `})}),(0,z.jsx)(`p`,{children:c(`source.manualDescription`)}),(0,z.jsx)(`button`,{className:`personal-status-source-add`,onClick:P,type:`button`,children:c(`source.addConfigured`)})]}),d?(0,z.jsx)(`p`,{className:`is-error`,role:`alert`,children:d}):null]}):null]})}var gx={需修复:`is-danger`,等你:`is-warning`,等待条件:`is-info`,推进中:`is-success`,安静运行:`is-quiet`,已完成:`is-quiet`,已停止:`is-stopped`};function _x({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,R.useState)(!1),g=ix(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,z.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,z.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,z.jsx)(`span`,{className:`personal-goal-state-dot ${e.loadState?``:gx[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||u===e.goalId)?p(e.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(e.state,f),e.needsYou&&!t?` · ${p(`home.lane.needsYou`)}`:``]})]}),(0,z.jsx)(cm,{size:15})]}),!t&&m?(0,z.jsxs)(`div`,{className:`personal-goal-move-actions`,children:[(0,z.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,z.jsx)(em,{"aria-hidden":`true`,size:13})}),(0,z.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,z.jsx)(Xp,{"aria-hidden":`true`,size:13})})]}):null,c&&y(t?`resume`:`stop`)?(0,z.jsxs)(z.Fragment,{children:[(0,z.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,z.jsx)(Am,{size:13}):t?(0,z.jsx)(Wm,{size:13}):(0,z.jsx)(zm,{size:13})}),t&&y(`delete`)?(0,z.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,z.jsx)(rh,{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)(rm,{size:18})}),(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:`LoopX`})})]}),d?(0,z.jsx)(hx,{...d}):null,(0,z.jsxs)(`nav`,{"aria-label":p(`home.workspace`),className:`personal-sidebar-nav`,children:[(0,z.jsxs)(`button`,{"aria-current":u===null?`page`:void 0,className:`personal-manager-link`,onClick:()=>l(null),type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-manager-icon`,children:(0,z.jsx)(rm,{size:17})}),(0,z.jsx)(`span`,{children:p(`sidebar.manager`)}),e>0?(0,z.jsx)(`span`,{className:`personal-sidebar-count`,children:e}):null,(0,z.jsx)(cm,{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:_.length}),(0,z.jsx)(`button`,{"aria-label":p(`sidebar.sortGoals`),title:p(`sidebar.sortGoals`),"aria-pressed":m,onClick:()=>h(!m),type:`button`,children:(0,z.jsx)($p,{"aria-hidden":`true`,size:15})}),a?(0,z.jsx)(`button`,{"aria-label":p(`sidebar.createGoal`),onClick:a,type:`button`,children:(0,z.jsx)(Vm,{size:15})}):null]})]}),g.saveFailed?(0,z.jsx)(`p`,{role:`status`,children:p(`sidebar.orderNotSaved`)}):null,(0,z.jsx)(`span`,{className:`personal-sr-only`,role:`status`,children:g.lastMoved?p(`sidebar.goalMoved`,{goal:g.lastMoved.title,position:g.lastMoved.position}):``}),(0,z.jsx)(`div`,{className:`personal-goal-list`,children:_.map(e=>b(e,!1))}),v.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)(sm,{size:13}),(0,z.jsx)(`span`,{children:p(`sidebar.stopped`)}),n.phase===`loading`?(0,z.jsx)(Am,{"aria-label":p(`sidebar.stoppedLoading`),className:`is-spinning`,size:13}):(0,z.jsx)(`small`,{children:v.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:p(`sidebar.stoppedLoadFailed`)}),s?(0,z.jsx)(`button`,{onClick:s,type:`button`,children:p(`sidebar.retryStopped`)}):null]}):null,v.map(e=>b(e,!0))]})]}):null]}),(0,z.jsxs)(`div`,{className:`personal-sidebar-footer`,children:[(0,z.jsx)($b,{}),o?(0,z.jsxs)(`button`,{"aria-label":p(`settings.open`),className:`personal-sidebar-utility`,onClick:o,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-sidebar-utility-icon`,children:(0,z.jsx)(Xm,{size:17})}),(0,z.jsx)(`span`,{className:`personal-sidebar-utility-copy`,children:(0,z.jsx)(`strong`,{children:p(`settings.open`)})}),(0,z.jsx)(cm,{"aria-hidden":`true`,size:15})]}):null]})]})}var vx=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 yx({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),[A,ee]=(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=vx.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,A,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 M=Math.max(0,Math.floor(w.top/d)-3),te=Math.min(f.length,Math.ceil((w.top+w.height)/d)+3),ne=Array.from({length:Math.max(0,te-M)},(e,t)=>M+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:ne.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),ee(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 bx({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)(sm,{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 xx({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,A=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.jsx)(`div`,{children:(0,z.jsx)(`strong`,{children:u(`header.tasks`)})}),(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)(rm,{size:15}),(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:u(`tasks.agentLane`)})})]}),(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)(sm,{"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)(Pm,{size:18})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:u(A?`tasks.chatPending`:k?`tasks.chatAgentReplied`:`tasks.chatRecent`)}),(0,z.jsx)(`small`,{children:k?.returnDelivery?u(`tasks.chatReturn`):k?.agentLabel})]}),(0,z.jsx)(`div`,{className:`personal-task-reply-preview`,children:(0,z.jsx)(_b,{text:A?u(`tasks.chatPendingDescription`):(k?.text??O.text).trim().split(/\r?\n/,1)[0]})})]}),(0,z.jsxs)(`footer`,{children:[(0,z.jsxs)(`button`,{onClick:i,type:`button`,children:[(0,z.jsx)(Pm,{size:14}),u(`tasks.chatViewReply`)]}),k&&!A&&r?(0,z.jsxs)(`button`,{onClick:()=>r(k.text),type:`button`,children:[(0,z.jsx)(km,{size:14}),u(`tasks.convertToTask`)]}):null]})]}):null,(0,z.jsxs)(`div`,{className:d?`personal-task-grouped-list`:`personal-task-kanban`,children:[(0,z.jsxs)(bx,{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)(bx,{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)(vm,{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)(Am,{className:`personal-spin`,size:14}):(0,z.jsx)(om,{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)(_m,{size:14})})]})]},e.todoId)}),x.length?null:(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyRunning`)})]}),(0,z.jsxs)(bx,{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)(yx,{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]})}var Sx=yd(W(),q(W())),Cx=J({node_id:W().min(1),kind:Y([`deliverable`,`gate`,`gate_summary`,`lease`,`validation`,`repair`,`handoff`,`evidence`]),title:W(),state:Y([`open`,`ready`,`blocked`,`done`,`waiting`,`unknown`]),refs:Sx,owner_agent:W().optional(),actor_agent:W().optional(),from_agent:W().optional(),to_agent:W().optional()}),wx=J({edge_id:W().min(1),from_node_id:W(),to_node_id:W(),relation:Y([`depends_on`,`blocks`,`validates`,`repairs`,`audits`,`continues`,`hands_off_to`,`supersedes`]),reason:W(),refs:Sx.optional()}),Tx=J({schema_version:X(`task_graph_projection_v0`),mode:X(`read_only`),goal_id:W(),generated_at:W().nullable(),truth_contract:J({projection_is_writable:X(!1),write_api:X(!1)}),limits:J({user_gate_node_limit:G().int().nonnegative(),user_gate_open_count:G().int().nonnegative(),user_gate_truncated_count:G().int().nonnegative(),source_truncated:K().optional(),predecessor_truncated:K().optional(),missing_predecessor_count:G().int().nonnegative().optional(),topology_complete:K().optional()}),nodes:q(Cx),edges:q(wx)}).superRefine((e,t)=>{let n=new Set(e.nodes.map(e=>e.node_id)),r=new Set(e.edges.map(e=>e.edge_id));(n.size!==e.nodes.length||r.size!==e.edges.length||e.edges.some(e=>!n.has(e.from_node_id)||!n.has(e.to_node_id)))&&t.addIssue({code:`custom`,message:`Graph identities or endpoints are invalid`})}),Ex=J({ok:X(!0),goal_id:W(),observed_at:W().datetime({offset:!0}),graph:Tx.nullable(),acceptance:ef.nullable()});function Dx(e,t){let n=Ex.parse(e);if(n.goal_id!==t||n.graph&&n.graph.goal_id!==t||n.acceptance&&n.acceptance.goal_id!==t)throw Error(`Review source does not match the selected Goal`);return n}async function Ox(e,t){let n=new URLSearchParams({goal_id:e}),r=await fetch(`/api/chat/delivery-review?${n}`,{signal:t,cache:`no-store`});if(!r.ok)throw Error(`Review unavailable (${r.status})`);return Dx(await r.json(),e)}function kx(e,t,n,r){let i=new Set([r]);for(let t of e.edges)t.from_node_id===r&&i.add(t.to_node_id),t.to_node_id===r&&i.add(t.from_node_id);let a=t.trim().toLocaleLowerCase();return e.nodes.filter(e=>{let t=[e.title,e.owner_agent,e.actor_agent,e.from_agent,e.to_agent,...Object.values(e.refs).flat()].some(e=>e?.toLocaleLowerCase().includes(a)),r=n===`all`||n===`related`&&i.has(e.node_id)||n===`conditions`&&[`gate`,`gate_summary`,`lease`].includes(e.kind)||n===`evidence`&&[`evidence`,`validation`,`repair`,`handoff`].includes(e.kind);return t&&r})}function Ax(e){let t=e.limits;return t.topology_complete!==!0||t.source_truncated===!0||t.predecessor_truncated===!0||(t.missing_predecessor_count??0)>0||t.user_gate_truncated_count>0}function jx(e){return[`gate`,`gate_summary`,`lease`].includes(e.kind)?0:e.kind===`deliverable`?1:2}function Mx(e,t){let n=e=>String(e??t.unavailable).replace(/[\\`*_{}[\]<>|#]/g,`\\$&`).replace(/[\r\n]+/g,` `),r=[`# ${t.title}`,``,`Goal: ${n(e.goal_id)}`,`${t.observed}: ${n(e.observed_at)}`,``,t.scope,``,t.acceptanceBoundary,``,`## ${t.chain}`,``],i=e.graph;if(!i)r.push(t.noGraph);else{Ax(i)&&r.push(t.incomplete,``),r.push("```json",JSON.stringify(i.limits,null,2),"```",``);for(let e of i.nodes)r.push(`- ${n(e.title)} · ${t.kind[e.kind]} · ${t.state[e.state]}${e.owner_agent?` · ${n(e.owner_agent)}`:``}`,` ${t.refs}: ${n(e.node_id)}; ${n(JSON.stringify(e.refs))}`),(e.from_agent||e.to_agent)&&r.push(` ${n(e.from_agent)} → ${n(e.to_agent)}`),e.actor_agent&&r.push(` actor: ${n(e.actor_agent)}`);let e=new Map(i.nodes.map(e=>[e.node_id,e.title]));r.push(``,`## ${t.relations}`,``);for(let a of i.edges)r.push(`- ${n(e.get(a.from_node_id))} → ${t.relation[a.relation]} → ${n(e.get(a.to_node_id))}: ${n(a.reason)} (${n(a.edge_id)})`,` ${t.refs}: ${n(JSON.stringify(a.refs??{}))}`)}r.push(``,`## ${t.acceptance}`,``);let a=e.acceptance;if(!a)r.push(t.unavailable);else{let e=a.coverage===`partial`;r.push(`${t.required}: ${e?a.acceptance_gaps.length:t.unavailable}`,`${t.guards}: ${e?a.guards.length:t.unavailable}`,``);for(let e of a.acceptance_gaps)r.push(`### ${n(e.evidence_required)}`,``,`${t.owner}: ${n(e.owner)}`,`${t.reason}: ${n(e.reason)}`,`${t.observed}: ${n(e.observed_at)}`,`${t.refs}: ${n(e.source)}`),e.resolution_hint&&r.push(n(e.resolution_hint)),e.component_checks&&r.push(`${t.checks}:`,"```json",JSON.stringify(e.component_checks,null,2),"```"),r.push(``);r.push(`### ${t.guards}`,``);for(let e of a.guards)r.push(`- ${n(e.reason)}`,` ${t.owner}: ${n(e.owner)}; ${t.required}: ${n(e.evidence_required)}`,` ${t.refs}: ${n(e.todo_id)}; ${n(e.blocks_agent)}; ${n(e.decision_scope)}`);r.push(``,`### ${t.historical}`,``);for(let e of a.historical_progress)r.push(`- ${n(e.kind)} · ${n(e.observed_at)} · ${n(e.source)} · ${n(e.evidence_refs.join(`, `))}`);r.push(``,`${t.observedScope}: ${n(a.coverage)}; truncated=${a.truncated}`,`${t.missingSources}: ${n(a.missing_sources.join(`, `))}`,`${t.next}: ${n(a.next_action)} (${n(a.next_action_source)})`)}let o=a?.goal_acceptance_contract;if(o?.enabled===!0){let i=t.contract;r.push(``,`## ${i.title}`,``,i.boundary,`${i.source}: ${n(e.goal_id)}`,`${i.revision}: ${o.revision}`,`${i.digest}: ${n(o.digest)}`,``,`### ${i.objective}`,n(o.objective||i.unknown),``,`### ${i.criteria}`),o.non_goals.length&&r.push(`${i.nonGoals}: ${n(o.non_goals.join(`; `))}`),o.criteria.length||r.push(i.noCriteria);for(let e of o.criteria)r.push(`- ${n(e.id)}: ${n(e.description)}`);r.push(``,`### ${i.tasks}`),o.tasks.length||r.push(i.noTasks);for(let e of o.tasks)r.push(`- ${n(e.todo_id)}: ${i.taskState[e.state]}`,` ${i.criteria}: ${n(e.criterion_ids.join(`, `)||i.unknown)}`),e.reason&&r.push(` ${n(e.reason)}`),e.applicable===!1&&r.push(` ${i.notApplicable}`);r.push(``,`### ${i.verification}`,i.verificationState[o.status]),o.held_todo_ids.length&&r.push(`${i.heldTasks}: ${n(o.held_todo_ids.join(`, `))}`),r.push(``,`### ${i.receipt}`);let a=o.verification;if(!a)r.push(i.unknown);else{r.push(i.receiptNote,`${i.operation}: ${n(a.operation_id)}`,`${i.revision}: ${a.contract_revision}`,`${i.digest}: ${n(a.contract_digest)}`,`${i.verificationScope}: ${n(a.todo_id??i.allCriteria)}`);for(let e of a.results)r.push(`- ${n(e.criterion_id)}: ${e.passed?i.passed:i.failed}; ${i.exitCode}: ${e.exit_code??i.unknown}`)}}return r.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(_b.test(e)||vb.test(e)){i();let r=vb.test(e),o=r?vb:_b,s=[];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:gb(e.text,n)},n);if(e.type===`list`){let t=e.items.map((e,t)=>(0,z.jsx)(`li`,{children:gb(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,gb(e,`${n}-${t}`)]},`${n}-${t}`))},n)})})}function xb({onSelect:e,output:t}){let{t:n}=Ji(),r=t.kind===`report`?Sm:xm;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)(cm,{size:17})]})}var Sb={completed:`runs.completed`,failed:`runs.failed`,interrupted:`runs.interrupted`,queued:`runs.queued`,running:`runs.running`,waiting:`runs.waiting`};function Cb({onSelect:e,run:t,showGoal:n=!0}){let{t:r}=Ji();return(0,z.jsxs)(`button`,{"aria-label":`${r(`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)(rm,{size:18})}),(0,z.jsxs)(`span`,{className:`personal-row-copy`,children:[(0,z.jsxs)(`small`,{children:[n?`${t.goalTitle} · `:``,t.agentLabel]}),(0,z.jsx)(`strong`,{children:t.title}),t.latestActivity===t.title?null:(0,z.jsx)(`small`,{children:t.latestActivity})]}),(0,z.jsxs)(`span`,{className:`personal-row-status is-${t.status}`,children:[t.status===`running`?(0,z.jsx)(Am,{className:`personal-spin`,size:14}):null,r(Sb[t.status])]}),(0,z.jsx)(cm,{size:17})]})}function wb({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)(Hm,{size:17}):(0,z.jsx)(am,{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)(cm,{size:16})]})}function Tb({delivery:e}){let{t}=Ji();if(!e)return null;let n=e.status===`delivered`?e.verification===`reconciled_after_restart`?t(`returnDelivery.reconciled`):t(`returnDelivery.delivered`):e.status===`verification_required`?t(`returnDelivery.verifying`):e.status===`explicit_unverified`?t(`returnDelivery.unverified`):t(`returnDelivery.queued`),r=e.status===`delivered`?`delivered`:e.status===`verification_required`?`verification_required`:e.status===`explicit_unverified`?`explicit_unverified`:`queued`;return(0,z.jsx)(`small`,{className:`personal-return-delivery is-${r}`,role:`status`,children:n})}function Eb({items:e,onSelect:t,selectedGoal:n}){let{locale:r,t:i}=Ji();if(e.length===0)return(0,z.jsxs)(`div`,{className:`personal-timeline-empty`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)($m,{size:20})}),(0,z.jsx)(`strong`,{children:i(n?`timeline.emptyGoal`:`timeline.emptyWorkspace`)}),(0,z.jsx)(`p`,{children:i(n?`timeline.emptyGoalDescription`:`timeline.emptyWorkspaceDescription`)})]});let a=[...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`),o=a?.kind===`message`?`${a.message.agentLabel??i(`header.manager`)}:${a.message.pending?i(`timeline.pending`):a.message.text}`:a?.kind===`proposal`?`${a.proposal.title}:${a.proposal.status}`:a?.kind===`run`?i(`timeline.runCompleted`,{run:a.run.title}):``,s=e.filter(e=>e.kind===`proposal`&&e.proposal.status===`gated`),c=e.filter(e=>e.kind===`run`&&[`queued`,`running`,`completed`].includes(e.run.status)),l=new Set(c.map(e=>e.id)),u=e.filter(e=>e.kind!==`proposal`&&!l.has(e.id)),d=c.filter(e=>e.run.status===`running`&&!!e.run.sessionId&&!!e.run.canInterrupt).length,f=c.filter(e=>e.run.status===`queued`).length,p=c.filter(e=>e.run.status===`completed`).length,m=c.length-d-f-p,h=r===`zh-CN`?[d&&`${d} 个执行中`,f&&`${f} 个排队中`,p&&`${p} 次执行已结束`,m&&`${m} 项进展更新`].filter(Boolean).join(` · `):[d&&`${d} running`,f&&`${f} queued`,p&&`${p} runs finished`,m&&`${m} progress updates`].filter(Boolean).join(` · `),g=e.filter(e=>e.kind===`proposal`&&e.proposal.status!==`gated`);function _(e){return e.kind===`attention`?(0,z.jsx)(mb,{attention:e.attention,onSelect:()=>t({item:e.attention,kind:`attention`})},e.id):e.kind===`run`?(0,z.jsx)(Cb,{showGoal:!n,onSelect:()=>t({item:e.run,kind:`run`}),run:e.run},e.id):e.kind===`output`?(0,z.jsx)(xb,{onSelect:()=>t({item:e.output,kind:`output`}),output:e.output},e.id):e.kind===`schedule`?(0,z.jsx)(wb,{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)($m,{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}),e.proposal.impact?(0,z.jsx)(`p`,{children:e.proposal.impact}):null]}),(0,z.jsx)(`b`,{children:e.proposal.status===`gated`&&e.proposal.actionKind!==`operation.execute`?i(`timeline.review`):e.proposal.primaryLabel??i(`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)(rm,{size:17})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:e.message.role===`user`?i(`common.you`):e.message.agentLabel??i(`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)(bb,{text:e.message.text}),e.message.pending?(0,z.jsx)(`span`,{className:`personal-message-pending`,children:i(`timeline.pending`)}):null,(0,z.jsx)(Fy,{request:e.message.collaboration}),(0,z.jsx)(Tb,{delivery:e.message.returnDelivery})]})]},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:o}),(0,z.jsxs)(`div`,{className:`personal-channel-timeline`,children:[c.length?(0,z.jsxs)(`details`,{className:`personal-activity-summary`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(Yp,{size:16,"aria-hidden":`true`}),(0,z.jsx)(`strong`,{children:r===`zh-CN`?`执行动态`:`Execution activity`}),(0,z.jsx)(`span`,{children:h})]}),(0,z.jsx)(`div`,{children:c.map(_)})]}):null,u.map(_),s.length?(0,z.jsxs)(`details`,{className:`personal-gated-summary`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(`span`,{children:(0,z.jsx)($m,{size:16})}),(0,z.jsx)(`strong`,{children:i(`timeline.waitingConfirmation`)}),(0,z.jsx)(`small`,{children:i(`timeline.gateHistory`,{count:s.length})})]}),(0,z.jsx)(`div`,{children:s.map(_)})]}):null,g.map(_)]})]})}function Db({goal:e}){let{t,locale:n}=Ji(),r=n===`zh-CN`?{checkpoint_satisfied:`检查点满足`,checkpoint_fresh:`检查点有效`,path_outcome_valid:`路径决策有效`,evidence_refs_present:`证据引用齐全`,final_outcome_claim_present:`最终成果声明齐全`,no_reported_outcome_gap:`无已报告成果缺口`}:{checkpoint_satisfied:`Checkpoint satisfied`,checkpoint_fresh:`Checkpoint current`,path_outcome_valid:`Valid path decision`,evidence_refs_present:`Evidence refs present`,final_outcome_claim_present:`Final outcome claim present`,no_reported_outcome_gap:`No reported outcome gap`},i={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`)},a=e=>i[e]??t(`acceptance.unknown`),o=e.acceptanceObservation,s=e.loadState||!o||o.goal_id!==e.goalId||o.coverage===`unavailable`;return(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-acceptance`,"aria-label":t(`acceptance.title`),children:[(0,z.jsxs)(`div`,{className:`personal-detail-card-title`,children:[(0,z.jsx)(`h3`,{children:t(`acceptance.title`)}),(0,z.jsx)(`em`,{children:t(`common.readOnly`)})]}),(0,z.jsx)(`p`,{role:`status`,children:t(s?`acceptance.unavailable`:`acceptance.partial`)}),!s&&o?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h4`,{children:t(`acceptance.gaps`)}),o.acceptance_gaps.length?o.acceptance_gaps.map((e,i)=>(0,z.jsxs)(`div`,{className:`personal-acceptance-observation`,children:[(0,z.jsx)(`p`,{children:e.reason??t(`acceptance.reasonUnknown`)}),e.resolution_hint?(0,z.jsx)(`p`,{children:e.resolution_hint}):null,e.component_checks?(0,z.jsx)(`div`,{children:Object.entries(e.component_checks).map(([e,t])=>(0,z.jsxs)(`p`,{children:[r[e],`: `,n===`zh-CN`?t?`通过`:`未通过`:t?`Passed`:`Failed`]},e))}):null,(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`common.owner`)}),(0,z.jsx)(`dd`,{children:e.owner??t(`acceptance.unknown`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`acceptance.required`)}),(0,z.jsx)(`dd`,{children:e.evidence_required??t(`acceptance.unknown`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`acceptance.observed`)}),(0,z.jsx)(`dd`,{children:e.observed_at??t(`acceptance.unknown`)})]})]})]},`${e.kind}:${e.owner}:${i}`)):(0,z.jsx)(`p`,{children:t(`acceptance.noGaps`)}),(0,z.jsx)(`h4`,{children:t(`acceptance.guards`)}),o.guards.length?o.guards.map((e,n)=>(0,z.jsxs)(`div`,{className:`personal-acceptance-observation`,children:[(0,z.jsx)(`p`,{children:e.reason??t(`acceptance.reasonUnknown`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`common.owner`)}),(0,z.jsx)(`dd`,{children:e.owner??t(`acceptance.unknown`)})]}),e.blocks_agent?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`common.agent`)}),(0,z.jsx)(`dd`,{children:e.blocks_agent})]}):null,e.todo_id?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`common.task`)}),(0,z.jsx)(`dd`,{children:e.todo_id})]}):null,(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`acceptance.required`)}),(0,z.jsx)(`dd`,{children:e.evidence_required??t(`acceptance.unknown`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:t(`acceptance.scope`)}),(0,z.jsx)(`dd`,{children:e.decision_scope??t(`acceptance.unknown`)})]})]})]},`${e.todo_id}:${n}`)):(0,z.jsx)(`p`,{children:t(`acceptance.noGuards`)}),(0,z.jsx)(`h4`,{children:t(`acceptance.next`)}),(0,z.jsx)(`p`,{children:o.next_action??t(`acceptance.unknown`)}),(0,z.jsxs)(`details`,{children:[(0,z.jsxs)(`summary`,{children:[t(`acceptance.historical_progress`),` · `,o.historical_progress.length]}),(0,z.jsx)(`p`,{children:t(`acceptance.historical`)}),o.historical_progress.map(e=>(0,z.jsxs)(`p`,{children:[(0,z.jsx)(`strong`,{children:a(e.kind)}),` · `,e.observed_at??t(`acceptance.unknown`),` `,e.evidence_refs.join(`, `)]},e.kind))]}),o.missing_sources.length?(0,z.jsxs)(`p`,{children:[t(`acceptance.missing`),` `,o.missing_sources.map(a).join(`, `)]}):null,o.truncated?(0,z.jsx)(`p`,{children:t(`acceptance.truncated`)}):null]}):null]})}function Ob({item:e,successor:t,onSelect:n}){let{t:r}=Ji(),i=e.details;return(0,z.jsxs)(`section`,{className:`personal-detail-card`,"aria-label":r(`attentionDetail.title`),children:[(0,z.jsx)(`h3`,{children:r(`attentionDetail.title`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`attentionDetail.request`)}),(0,z.jsx)(`dd`,{children:r(i?.interaction===`decision`?`attentionDetail.decision`:`attentionDetail.unknownRequest`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`common.status`)}),(0,z.jsx)(`dd`,{children:r(`attentionDetail.${i?.lifecycle??`unknown`}`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`drawer.reason`)}),(0,z.jsx)(`dd`,{children:i?.reason??e.explanation??r(`attentionDetail.unknownReason`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Todo`}),(0,z.jsx)(`dd`,{children:e.todoId})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`attentionDetail.targetTodo`)}),(0,z.jsx)(`dd`,{children:i?.unblocksTodoId??r(`attentionDetail.notProvided`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`attentionDetail.targetAgent`)}),(0,z.jsx)(`dd`,{children:i?.blocksAgent??r(`attentionDetail.notProvided`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`attentionDetail.scope`)}),(0,z.jsx)(`dd`,{children:i?.decisionScope?`${i.decisionScope.kind} · ${i.decisionScope.granularity} · ${i.decisionScope.scopeKey}`:r(`attentionDetail.notProvided`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:r(`drawer.evidence`)}),(0,z.jsx)(`dd`,{children:i?.evidence??e.evidence??r(`drawer.decisionDefaultEvidence`)})]})]}),i?.supersededBy?(0,z.jsxs)(`p`,{children:[r(`attentionDetail.replacement`),`: `,i.supersededBy]}):null,t&&n?(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>n(t),type:`button`,children:r(`attentionDetail.openReplacement`)}):null,(0,z.jsx)(`p`,{children:r(`attentionDetail.boundary`)})]})}function kb(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 Ab(e,t){return e.goals.find(e=>e.goalId===t)?.title??t}function jb(e){return[`推进中`,`需修复`,`等待条件`].includes(e.state)}function Mb(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 Nb(e){let t=e;return t>=1e6?`${(t/1e6).toFixed(1)}M`:t>=1e3?`${(t/1e3).toFixed(1)}k`:String(t)}function Pb(e){return`$${e.toFixed(2)}`}function Fb(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 Ib(e,t,n){return e==null?t:n(e)}function Lb({proposal:e,t}){let n=e.teamPlanOutcome?.kind===`already_present`;return(0,z.jsxs)(`section`,{className:`personal-proposal-card personal-team-plan-result`,children:[(0,z.jsx)(`h3`,{children:nb(e.teamPlanOutcome??null,t)}),(0,z.jsxs)(`dl`,{className:`personal-team-plan-assignments`,children:[e.teamPlanAssignments?.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e.agentId||e.laneId}),(0,z.jsx)(`dd`,{children:e.task})]},e.laneId)),e.teamPlanGapLanes?.map(e=>(0,z.jsxs)(`div`,{className:`is-pending`,children:[(0,z.jsx)(`dt`,{children:e.agentId||e.laneId}),(0,z.jsxs)(`dd`,{children:[e.task||e.laneId,(0,z.jsx)(`br`,{}),(0,z.jsxs)(`small`,{children:[t(`proposal.teamPlan.pending`),` · `,eb(e.reasonCode,t)]})]})]},e.laneId))]}),(0,z.jsx)(`p`,{children:t(n?`proposal.teamPlan.recoveredHint`:`proposal.teamPlan.assignedHint`)}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:t(`proposal.teamPlan.originalPlan`)}),(0,z.jsx)(`dl`,{children:e.fields.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e.label}),(0,z.jsx)(`dd`,{children:e.value})]},e.key))})]})]})}function Rb(e){return e.replace(/\s+/gu,` `).trim()}function zb(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 Bb(e){return/(我现在该做什么|下一步|哪些\s*Goal\s*在等我|需要我|谁在等我|Agent\s*在做什么|当前进度|总结(?:今天)?进展)/iu.test(e)}function Vb(e){let t=/(怎么|如何|为什么|给.*建议|分析一下|解释|只读)/u.test(e),n=/(解决一下|修复一下|处理一下|执行一下|改一下|跑(?:一下)?测试|rebase|push|提交|推送)/iu.test(e);return!t&&n&&/(帮我|请|给我|直接|现在|开始|bytedcli|codebase|git|rebase|push|提交|推送)/iu.test(e)}function Hb(e){return Rb(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 Ub(e,t){let n=Rb(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&&!zb(n,/heartbeat|心跳/iu)&&/(heartbeat|心跳|每天推进|持续推进|daily progress)/iu.test(n);if(!t.goalId&&!zb(n,/goal|目标/iu)&&/(创建|新建|设置|create|start|set up).{0,24}(goal|目标)/iu.test(n)&&r.push({actionKind:`goal.create`,confidence:.97,normalizedParameters:{heartbeat_enabled:!zb(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&&!zb(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&&!zb(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&&!zb(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&&Vb(n)&&r.push({actionKind:`todo.create`,confidence:.9,normalizedParameters:{goal_id:t.goalId,start_execution:!0}}),t.goalId&&a){let e=!zb(n,/完成|做完|关闭/u)&&/完成|做完|关闭/u.test(n)?`complete`:!zb(n,/阻塞|卡住/u)&&/阻塞|卡住/u.test(n)?`block`:!zb(n,/暂缓|稍后|推迟/u)&&/暂缓|稍后|推迟/u.test(n)?`defer`:i&&!zb(n,/交给|分配给|改派/u)&&/交给|分配给|改派/u.test(n)?`reassign`:null;if(e){let i=e===`defer`?Hb(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&&Bb(n)?{actionKind:null,confidence:.98,missingFields:[],normalizedParameters:{},route:`projection`}:{actionKind:null,confidence:.75,missingFields:[],normalizedParameters:{},route:`agent_chat`}}function Wb(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 Gb=[`a[href]`,`button:not([disabled])`,`textarea:not([disabled])`,`select:not([disabled])`,`input:not([disabled])`,`[tabindex]:not([tabindex='-1'])`].join(`,`),Kb=[{key:`drawer.taskBlock`,operation:`block`},{key:`drawer.taskSuccessor`,operation:`successor_create`}],qb=[{key:`drawer.decisionReject`,resolution:`reject`},{key:`drawer.decisionDefer`,resolution:`defer`}],Jb=Array.from({length:32},(e,t)=>t+1),Yb=/^[a-z][a-z0-9_.-]{0,63}$/u;function Xb(e){let t=String(e??``).trim().toLowerCase();return Yb.test(t)?t:null}function Zb(e,t){return e.enabled===t.enabled&&e.maxChildren===t.maxChildren&&JSON.stringify(e.modelConfig??null)===JSON.stringify(t.modelConfig??null)&&(e.executionConfig??``)===(t.executionConfig??``)&&[...e.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)===[...t.allowedDomains].sort((e,t)=>e.localeCompare(t)).join(`\0`)}function Qb({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,R.useState)(``),[_,v]=(0,R.useState)(!1),[y,b]=(0,R.useState)(`idle`),[x,S]=(0,R.useState)(`record`),[C,w]=(0,R.useState)([]),[T,E]=(0,R.useState)(null),[D,O]=(0,R.useState)(2),[k,A]=(0,R.useState)(``),[ee,j]=(0,R.useState)(``),[M,te]=(0,R.useState)(``),[ne,N]=(0,R.useState)(`idle`),[P,re]=(0,R.useState)(null),[ie,ae]=(0,R.useState)(null),F=(0,R.useRef)(null),oe=(0,R.useRef)(null),[I,se]=(0,R.useState)(e.find(e=>e.available)?.agentId??`codex`),[L,ce]=(0,R.useState)(``),[le,ue]=(0,R.useState)(``),de=(0,R.useRef)(null),fe=(0,R.useRef)(null),pe=(0,R.useRef)(null),me=(0,R.useRef)(null),he=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,R.useEffect)(()=>{b(`idle`),v(!1),S(`record`),ue(``);let e=f.kind===`goal`?f.item.subagentExecution:void 0;w(e?.allowedDomains??[]),A(e?.modelConfig?.model??``),j(e?.modelConfig?.reasoning_effort??``),te(e?.executionConfig??``),O(e?.maxChildren?Math.min(e.maxChildren,32):2),E(null),N(`idle`),re(null),ae(null),F.current=e??null,oe.current=null},[he]);let ge=f.kind===`goal`?f.item.subagentExecution:void 0;(0,R.useEffect)(()=>{let e=F.current,t=ge?!e||!Zb(e,ge):e!==null;if(F.current=ge??null,!ie){t&&ge&&(w(ge.allowedDomains),A(ge.modelConfig?.model??``),j(ge.modelConfig?.reasoning_effort??``),te(ge.executionConfig??``),O(ge.maxChildren||2),E(null),N(`idle`),re(null));return}let n=oe.current;(!ge||Zb(ie,ge)||n&&!Zb(n,ge))&&(ge&&(w(ge.allowedDomains),A(ge.modelConfig?.model??``),j(ge.modelConfig?.reasoning_effort??``),te(ge.executionConfig??``),O(ge.maxChildren||2)),oe.current=null,ae(null))},[ge,ie]),(0,R.useEffect)(()=>{let e=document.activeElement;e instanceof HTMLElement&&!fe.current?.contains(e)&&(pe.current=e);let t=window.requestAnimationFrame(()=>me.current?.focus());return()=>window.cancelAnimationFrame(t)},[he]);let _e=(0,R.useCallback)(()=>{let e=pe.current;c(),window.requestAnimationFrame(()=>e?.focus())},[c]);(0,R.useEffect)(()=>{function e(e){if(e.key===`Escape`){e.preventDefault(),_e();return}if(e.key===`Tab`&&f.kind!==`todo`){let t=Array.from(fe.current?.querySelectorAll(Gb)??[]).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)}},[_e,f.kind]);let ve=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`&&f.item.actionKind===`team.plan`&&f.item.status===`applied`?m(`proposal.teamPlan.resultTitle`):f.kind===`proposal`?m(f.item.reviewPlan?.retryOriginal?`drawer.recoverEditResult`:f.item.status===`applied`?`drawer.titleProposalApplied`:`drawer.titleProposalConfirm`):f.kind===`schedule`?f.item.scheduleKind===`heartbeat`?`Heartbeat`:m(`drawer.titleSchedule`):m(`drawer.goalDetails`),ye=f.kind===`proposal`?f.item.goalId??`manager`:f.item.goalId,be=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.kind===`proposal`&&f.item.status===`applied`&&f.item.actionKind===`team.plan`?f.item.goalId??m(`drawer.currentGoal`):f.item.goalId?m(`drawer.goalChanges`):m(`drawer.managerChanges`),xe=f.kind===`goal`?d.find(e=>e.goalId===f.item.goalId&&!!e.sessionId)??d.find(e=>e.goalId===f.item.goalId):null,Se=f.kind===`run`&&(f.item.completedSteps>0||!!f.item.latestActivity||!!f.item.outputs?.length),Ce=f.kind===`attention`?Zi(f.item.updatedAt,m):null,we=Hb(le);async function Te(){f.kind!==`run`||!h.trim()||(await r.onCorrectRun?.(f.item,h.trim()),g(``))}async function Ee(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 De(e,t,n){u||!Xd(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 Oe=f.kind===`goal`?ie??f.item.subagentExecution??{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0}:{allowedDomains:[],domainCandidates:[],enabled:!1,maxChildren:0},ke=ne===`previewing`||ne===`applying`,Ae=(()=>{if(f.kind!==`goal`)return[];let e=new Map;for(let t of Oe.allowedDomains){let n=Xb(t);n&&e.set(n,{matchingTodoCount:0,value:n})}if(Oe.domainCandidates)for(let t of Oe.domainCandidates){let n=Xb(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=Xb(t.taskDomain);if(!n)continue;let r=e.get(n);e.set(n,{matchingTodoCount:(r?.matchingTodoCount??0)+1,value:n})}return[...e.values()]})();function je(){w(Oe.allowedDomains),A(Oe.modelConfig?.model??``),j(Oe.modelConfig?.reasoning_effort??``),te(Oe.executionConfig??``),O(Oe.maxChildren||2),E(null),N(`idle`),re(null)}function Me(){let e=[...new Set(C.map(e=>Xb(e)))];return e.every(e=>!!e)?e:null}function Ne(e,t){w(n=>t?[...n,e].filter((e,t,n)=>n.indexOf(e)===t):n.filter(t=>t!==e)),re(null),N(`idle`),E(null)}async function Pe(e,t=e){if(f.kind!==`goal`||!r.onPreviewGoalSubagentConfiguration)return;let n=e?Me():[];if(t&&!k.trim()&&ee){N(`error`),E(m(`drawer.subagentModelRequired`));return}if(e&&!n){N(`error`),E(m(`drawer.subagentDomainInvalid`)),re(null);return}let i={alignCodexHostCapacity:e,allowedDomains:n??[],enabled:e,goalId:f.item.goalId,maxChildren:e?D:0,executionConfig:M.trim(),...Wb(t,k,ee)};N(`previewing`),E(m(`drawer.subagentPreviewing`)),re(null);try{let e=await r.onPreviewGoalSubagentConfiguration(i);if(!e.changed){oe.current=ge??null,ae({...e.configuration,domainCandidates:Oe.domainCandidates}),w(e.configuration.allowedDomains),A(e.configuration.modelConfig?.model??``),j(e.configuration.modelConfig?.reasoning_effort??``),te(e.configuration.executionConfig??``),O(e.configuration.maxChildren||2),N(`success`),E(m(`drawer.subagentNoChange`));return}re({...i,codexHostCapacity:e.configuration.codexHostCapacity,changed:e.changed,previewId:e.previewId}),N(`ready`),E(m(`drawer.subagentPreviewReady`))}catch(e){N(`error`),E(e instanceof Error?e.message:m(`drawer.subagentPreviewFailed`))}}async function Fe(){if(!(!P||!r.onApplyGoalSubagentConfiguration)){N(`applying`),E(m(`drawer.subagentApplying`));try{let e=await r.onApplyGoalSubagentConfiguration({allowedDomains:P.allowedDomains,alignCodexHostCapacity:P.enabled,enabled:P.enabled,goalId:P.goalId,maxChildren:P.maxChildren,modelConfig:P.modelConfig,executionConfig:P.executionConfig,previewId:P.previewId});oe.current=ge??null,ae({...e,domainCandidates:Oe.domainCandidates}),w(e.allowedDomains),A(e.modelConfig?.model??``),j(e.modelConfig?.reasoning_effort??``),te(e.executionConfig??``),O(e.maxChildren||2),N(`success`),E(m(e.codexHostCapacity?.newSessionRequired?`drawer.subagentAppliedRestart`:`drawer.subagentApplied`)),re(null);try{await r.onRefresh?.()}catch{N(`warning`),E(m(`drawer.subagentAppliedRefreshFailed`))}}catch(e){N(`error`),E(e instanceof Error?e.message:m(`drawer.subagentApplyFailed`))}}}return(0,z.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:fe,role:`dialog`,children:[(0,z.jsxs)(`header`,{className:`personal-drawer-header${f.kind===`todo`?` is-task-inspector`:``}`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`h2`,{id:`personal-drawer-title`,ref:me,tabIndex:-1,children:ve}),(0,z.jsx)(`p`,{children:be})]}),(0,z.jsxs)(`div`,{className:`personal-drawer-header-actions`,children:[f.kind===`todo`&&l?(0,z.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,z.jsx)(Fm,{size:17}):(0,z.jsx)(jm,{size:17})}):null,(0,z.jsxs)(`button`,{"aria-label":m(`drawer.closeDetail`,{context:be}),className:`personal-icon-button personal-drawer-close`,onClick:_e,ref:de,type:`button`,children:[(0,z.jsx)(Zp,{className:`personal-mobile-back`,size:18}),(0,z.jsx)(sh,{className:`personal-desktop-close`,size:18})]})]})]}),(0,z.jsxs)(`div`,{className:`personal-drawer-body`,children:[f.kind===`attention`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card is-attention`,children:[(0,z.jsx)(`small`,{children:f.item.blocking?m(`drawer.attentionBlocking`):m(`drawer.attentionWaiting`)}),(0,z.jsx)(`h3`,{children:f.item.text}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle??f.item.goalId})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.priority`)}),(0,z.jsx)(`dd`,{children:f.item.priority??`medium`})]}),Ce?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`common.waiting`)}),(0,z.jsx)(`dd`,{children:m(`tasks.waitingAge`,{age:Ce})})]}):null]})]}),(0,z.jsx)(Ob,{item:f.item,onSelect:n,successor:Yd(f.item,t)}),!u&&Xd(f.item)?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void De(f.item,`approve`,m(`common.confirm`)),type:`button`,children:[(0,z.jsx)(om,{size:17}),m(`drawer.decisionReview`)]}),(0,z.jsxs)(`details`,{className:`personal-compact-menu`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(_m,{size:17}),m(`drawer.decisionMore`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`button`,{onClick:()=>void r.onExplainDecision?.(f.item),type:`button`,children:[(0,z.jsx)(Nm,{size:16}),m(`drawer.explainDecision`)]}),qb.map(e=>(0,z.jsx)(`button`,{onClick:()=>void De(f.item,e.resolution,m(e.key)),type:`button`,children:m(e.key)},e.resolution))]})]})]}):null]}):null,f.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:f.item.done?`is-done`:f.item.status===`blocked`?`is-blocked`:`is-open`,children:[(0,z.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,z.jsx)(`span`,{children:f.item.priority}):null,(0,z.jsx)(`span`,{children:f.item.taskClass===`advancement_task`?m(`drawer.taskAdvancement`):f.item.taskClass??m(`drawer.taskOrdinary`)})]}),(0,z.jsx)(`h3`,{children:f.item.text})]}),(0,z.jsxs)(`section`,{"aria-label":m(`drawer.taskInfo`),className:`personal-task-inspector-fields`,children:[(0,z.jsx)(`h4`,{children:m(`drawer.taskInfo`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`common.owner`)}),(0,z.jsx)(`dd`,{children:f.item.ownerLabel??f.item.claimedBy??m(`drawer.notAssigned`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`common.status`)}),(0,z.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,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.priority`)}),(0,z.jsx)(`dd`,{children:f.item.priority??m(`drawer.notSet`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.dependencies`)}),(0,z.jsx)(`dd`,{children:f.item.dependencies?.join(` · `)||m(`common.none`)})]}),f.item.status===`deferred`||f.item.resumeWhen?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.resumeWhen`)}),(0,z.jsx)(`dd`,{children:f.item.resumeWhen||m(`drawer.notSet`)})]}):null,f.item.resumeWhen?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.resumeState`)}),(0,z.jsx)(`dd`,{children:f.item.resumeReady?m(`drawer.resumeReady`):m(`drawer.resumePending`)})]}):null,f.item.resumeReceiptId?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.resumeReceipt`)}),(0,z.jsx)(`dd`,{children:f.item.resumeReceiptId})]}):null,(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.nextTransition`)}),(0,z.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,z.jsxs)(`div`,{className:`personal-task-inspector-actions`,"aria-label":m(`drawer.taskActions`),children:[(0,z.jsxs)(`details`,{className:`personal-task-management`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(_m,{size:16}),m(`drawer.taskManage`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:m(`drawer.reassign`)}),(0,z.jsxs)(`label`,{className:`personal-inline-agent-select`,children:[m(`drawer.reassign`),(0,z.jsx)(`select`,{"aria-label":m(`drawer.reassign`),onChange:e=>se(e.target.value),value:I,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 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,z.jsxs)(`label`,{className:`personal-inline-agent-select`,children:[m(`drawer.taskPriority`),(0,z.jsxs)(`select`,{"aria-label":m(`drawer.taskPriority`),value:L,onChange:e=>ce(e.target.value),children:[(0,z.jsx)(`option`,{value:``,children:m(`drawer.taskPriorityChoose`)}),[`P0`,`P1`,`P2`,`P3`,`P4`].map(e=>(0,z.jsx)(`option`,{value:e,children:e},e)),(0,z.jsx)(`option`,{value:`clear`,children:m(`drawer.taskPriorityClear`)})]}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:!L,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}-priority-${L}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:f.item.goalId,todo_id:f.item.todoId,operation:`edit`,...L===`clear`?{clear_priority:!0}:{priority:L}},summary:`${m(`drawer.taskPriority`)}: ${L===`clear`?m(`drawer.taskPriorityClear`):L}`}),type:`button`,children:m(`timeline.review`)})]}),(0,z.jsx)(`strong`,{children:m(`drawer.taskDeferUntil`)}),(0,z.jsxs)(`label`,{className:`personal-inline-agent-select personal-inline-resume-when`,children:[m(`drawer.taskDeferUntil`),(0,z.jsx)(`input`,{"aria-label":m(`drawer.taskDeferCondition`),"aria-invalid":!!le.trim()&&!we,onChange:e=>ue(e.target.value),placeholder:m(`drawer.taskDeferPlaceholder`),value:le}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:!we,onClick:()=>void Ee(f.item,`defer`,m(`drawer.taskDefer`),we??void 0),type:`button`,children:m(`drawer.taskDeferReview`)}),(0,z.jsx)(`small`,{children:le.trim()&&!we?m(`drawer.taskDeferInvalid`):m(`drawer.taskDeferSupported`)})]}),(0,z.jsx)(`div`,{className:`personal-task-management-secondary`,children:Kb.map(e=>(0,z.jsx)(`button`,{onClick:()=>void Ee(f.item,e.operation,m(e.key)),type:`button`,children:m(e.key)},e.operation))})]})]}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void Ee(f.item,`complete`,m(`drawer.taskComplete`)),type:`button`,children:[(0,z.jsx)(om,{size:17}),m(`drawer.taskComplete`)]})]}):null,f.item.done?(0,z.jsxs)(`div`,{className:`personal-task-completed-note`,children:[(0,z.jsx)(om,{size:16}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:m(`drawer.taskCompletedTitle`)}),(0,z.jsx)(`small`,{children:m(`drawer.taskCompletedNote`)})]})]}):null]}):null,f.kind===`goal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsx)(`small`,{children:Yi(f.item.state,p)}),(0,z.jsx)(`h3`,{children:f.item.title}),(0,z.jsx)(`p`,{children:f.item.agentSentence}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.tokens`)}),(0,z.jsxs)(`dd`,{children:[Ib(f.item.usage?.tokens24h,m(`drawer.usageNotMeasured`),Nb),` / `,Ib(f.item.usage?.tokens7d,m(`drawer.usageNotMeasured`),Nb)]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.cost`)}),(0,z.jsxs)(`dd`,{children:[Ib(f.item.usage?.costUsd24h,m(`drawer.usageNotMeasured`),Pb),` / `,Ib(f.item.usage?.costUsd7d,m(`drawer.usageNotMeasured`),Pb)]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.duration`)}),(0,z.jsxs)(`dd`,{children:[Ib(f.item.usage?.durationMs24h,m(`drawer.usageNotMeasured`),Fb),` / `,Ib(f.item.usage?.durationMs7d,m(`drawer.usageNotMeasured`),Fb)]})]})]})]}),(0,z.jsx)(Db,{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,z.jsxs)(z.Fragment,{children:[f.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:m(`drawer.repository`)}),(0,z.jsx)(`em`,{children:m(`common.readOnly`)})]}),(0,z.jsxs)(`h3`,{children:[(0,z.jsx)(Cm,{size:16}),f.item.repository.label]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.branch`)}),(0,z.jsx)(`dd`,{children:f.item.repository.branch||`detached`})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Role`}),(0,z.jsx)(`dd`,{children:m(`drawer.repositoryRole`)})]})]}),(0,z.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,z.jsx)(mm,{size:15}),m(y===`copied`?`drawer.copyRepositoryDone`:`drawer.copyRepository`)]}),y===`error`?(0,z.jsx)(`p`,{className:`personal-copy-feedback is-error`,role:`status`,children:m(`drawer.copyRepositoryError`)}):y===`copied`?(0,z.jsx)(`p`,{className:`personal-copy-feedback`,role:`status`,children:m(`drawer.copyRepositorySuccess`)}):null]}):null,u?(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-notification`,children:[(0,z.jsx)(`small`,{children:m(`drawer.larkConnection`)}),(0,z.jsx)(`h3`,{children:m(`drawer.remoteDetailsUnavailable`)}),(0,z.jsx)(`p`,{children:m(`drawer.remoteDetailsDescription`)})]}):(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-notification`,children:[(0,z.jsx)(`small`,{children:m(`drawer.larkConnection`)}),t?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`h3`,{children:[t.app_label,(0,z.jsx)(`span`,{className:`personal-connection-status`,children:m(`drawer.connected`)})]}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.group`)}),(0,z.jsx)(`dd`,{children:t.chat_name})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.topic`)}),(0,z.jsxs)(`dd`,{children:[`# `,t.topic_name]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.trigger`)}),(0,z.jsx)(`dd`,{children:t.incoming_mode===`mentions`?m(`lark.someoneMentions`):m(`lark.allMessages`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.replyMode`)}),(0,z.jsx)(`dd`,{children:m(`lark.topicReply`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.autoNotify`)}),(0,z.jsx)(`dd`,{children:e?.humanGateAutoNotifyEnabled?m(`common.on`):m(`common.off`)})]}),e?.lastNotifiedAt?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.lastNotification`)}),(0,z.jsx)(`dd`,{children:e.lastNotifiedAt})]}):null]})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:m(`drawer.larkNotConfigured`)}),(0,z.jsx)(`p`,{children:m(`drawer.larkNotConfiguredDescription`)})]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onOpenNotificationSettings?.(f.item.goalId),type:`button`,children:[(0,z.jsx)(nm,{size:16}),m(t?`drawer.larkConfigure`:`drawer.larkConnect`)]})]})]})})(),(0,z.jsxs)(`section`,{className:`personal-detail-card personal-goal-session`,children:[(0,z.jsx)(`small`,{children:m(`drawer.runDetails`)}),xe?.sessionId?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:Xi(xe.sessionStatus??xe.status,m)}),(0,z.jsx)(`p`,{children:xe.title}),r.onOpenRunSession?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onOpenRunSession?.(xe),type:`button`,children:[(0,z.jsx)(Bm,{size:16}),m(`drawer.runLatest`)]}):null]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:m(`drawer.noRun`)}),(0,z.jsx)(`p`,{children:m(`drawer.noRunDescription`)})]})]}),u?null:(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onRequestScheduleConfig?.(`heartbeat`,f.item.goalId),type:`button`,children:[(0,z.jsx)(Hm,{size:16}),m(`drawer.setupHeartbeat`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>r.onRequestScheduleConfig?.(`monitor`,f.item.goalId),type:`button`,children:[(0,z.jsx)(am,{size:16}),m(`drawer.scheduleAdd`)]})]}),f.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:m(`drawer.subagentLabel`)}),(0,z.jsxs)(`h3`,{children:[(0,z.jsx)(rm,{size:16}),m(`drawer.subagentTitle`)]})]}),(0,z.jsxs)(`button`,{"aria-checked":Oe.enabled,"aria-label":m(P&&ne===`ready`?`drawer.subagentPending`:Oe.enabled?`drawer.subagentDisable`:`drawer.subagentEnable`),className:`personal-subagent-switch`,"data-pending":P&&ne===`ready`?`true`:void 0,disabled:u||ke||!!P||!r.onPreviewGoalSubagentConfiguration,onClick:()=>void Pe(!Oe.enabled),role:`switch`,type:`button`,children:[(0,z.jsx)(`span`,{}),m(P&&ne===`ready`?`drawer.subagentPending`:Oe.enabled?`common.on`:`common.off`)]})]}),(0,z.jsx)(`p`,{children:m(`drawer.subagentDescription`)}),P&&ne===`ready`?(0,z.jsxs)(`div`,{className:`personal-subagent-preview`,children:[(0,z.jsx)(`strong`,{children:m(P.enabled?`drawer.subagentConfirmEnable`:`drawer.subagentConfirmDisable`)}),(0,z.jsx)(`p`,{children:P.enabled?m(`drawer.subagentPreviewSummary`,{count:P.maxChildren,domains:P.allowedDomains.join(` · `)||m(`drawer.subagentDomainsUnrestricted`)}):m(`drawer.subagentDisableSummary`)}),P.modelConfig===void 0?null:(0,z.jsxs)(`p`,{children:[m(`drawer.subagentModel`),`: `,P.modelConfig?.model||m(`drawer.subagentModelDefault`),` · `,P.modelConfig?.reasoning_effort||m(`drawer.subagentModelDefault`)]}),(0,z.jsxs)(`p`,{children:[m(`drawer.subagentExecutionConfig`),`: `,P.executionConfig||m(`drawer.subagentExecutionConfigNone`)]}),P.enabled&&P.codexHostCapacity?(0,z.jsx)(`p`,{children:m(P.codexHostCapacity.writeRequired?`drawer.subagentHostCapacityRaise`:`drawer.subagentHostCapacityReady`,{configured:P.codexHostCapacity.configuredChildren??m(`drawer.subagentHostCapacityImplicit`),required:P.codexHostCapacity.requiredChildren})}):null,(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`button`,{className:`personal-primary-action`,onClick:()=>void Fe(),type:`button`,children:m(`common.confirm`)}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:je,type:`button`,children:m(`common.cancel`)})]})]}):null,T?(0,z.jsxs)(`p`,{className:`personal-subagent-feedback is-${ne}`,role:`status`,children:[ne===`previewing`||ne===`applying`?(0,z.jsx)(Wm,{className:`personal-spin`,size:13}):null,T]}):null,(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentModel`)}),(0,z.jsx)(`dd`,{children:Oe.modelConfig?.model||m(`drawer.subagentModelDefault`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentEffort`)}),(0,z.jsx)(`dd`,{children:Oe.modelConfig?.reasoning_effort||m(`drawer.subagentModelDefault`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentCurrentBoundary`)}),(0,z.jsx)(`dd`,{children:Oe.allowedDomains.join(` · `)||m(`drawer.subagentDomainsUnrestricted`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentChildLimit`)}),(0,z.jsx)(`dd`,{children:Oe.maxChildren||0})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.subagentExecutionConfig`)}),(0,z.jsx)(`dd`,{children:Oe.executionConfig||m(`drawer.subagentExecutionConfigNone`)})]})]}),u?(0,z.jsx)(`p`,{className:`personal-subagent-read-only`,children:m(`drawer.subagentRemoteReadOnly`)}):(0,z.jsxs)(`div`,{className:`personal-subagent-fields`,children:[(0,z.jsxs)(`fieldset`,{className:`personal-subagent-domain-picker`,disabled:ke,children:[(0,z.jsx)(`legend`,{children:m(`drawer.subagentDomains`)}),Ae.length>0?(0,z.jsx)(`div`,{className:`personal-subagent-domain-options`,children:Ae.map(e=>{let t=C.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=>Ne(e.value,t.target.checked),type:`checkbox`}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:e.value}),(0,z.jsx)(`small`,{children:m(`drawer.subagentDomainTodoCount`,{count:e.matchingTodoCount})})]})]},e.value)})}):(0,z.jsx)(`p`,{className:`personal-subagent-domain-empty`,children:m(`drawer.subagentDomainsEmpty`)}),(0,z.jsx)(`small`,{children:m(`drawer.subagentDomainsHint`)})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:m(`drawer.subagentModel`)}),(0,z.jsx)(`input`,{"aria-label":m(`drawer.subagentModel`),disabled:ke,value:k,placeholder:`gpt-5.6-luna`,onChange:e=>{A(e.target.value),re(null),N(`idle`),E(null)}})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:m(`drawer.subagentEffort`)}),(0,z.jsxs)(`select`,{"aria-label":m(`drawer.subagentEffort`),disabled:ke,value:ee,onChange:e=>{j(e.target.value),re(null),N(`idle`),E(null)},children:[(0,z.jsx)(`option`,{value:``,children:m(`drawer.subagentModelDefault`)}),[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`,`ultra`].map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))]})]}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:ke,type:`button`,onClick:()=>{A(`gpt-5.6-luna`),j(`max`),re(null),N(`idle`),E(null)},children:m(`drawer.subagentLunaPreset`)}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:ke,type:`button`,onClick:()=>{A(``),j(``),re(null),N(`idle`),E(null)},children:m(`drawer.subagentClearModel`)}),(0,z.jsx)(`p`,{children:m(`drawer.subagentModelHint`)}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:m(`drawer.subagentExecutionConfig`)}),(0,z.jsx)(`input`,{"aria-label":m(`drawer.subagentExecutionConfig`),disabled:ke,onChange:e=>{te(e.target.value),re(null),N(`idle`),E(null)},placeholder:`.loopx/config/delegations.json`,value:M})]}),(0,z.jsx)(`p`,{children:m(`drawer.subagentExecutionConfigHint`)}),(0,z.jsxs)(`label`,{className:`personal-subagent-limit-field`,children:[(0,z.jsx)(`span`,{children:m(`drawer.subagentMaxChildren`)}),(0,z.jsx)(`select`,{"aria-label":m(`drawer.subagentMaxChildren`),disabled:ke,onChange:e=>{O(Number(e.target.value)),re(null),N(`idle`),E(null)},value:D,children:Jb.map(e=>(0,z.jsx)(`option`,{value:e,children:e},e))})]}),(0,z.jsx)(`button`,{className:`personal-secondary-action`,disabled:ke,onClick:()=>void Pe(Oe.enabled,!0),type:`button`,children:m(`drawer.subagentPreviewBoundary`)})]})]}):null]}):null,f.kind===`run`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`div`,{"aria-label":m(`drawer.runView`),className:`personal-run-drawer-tabs`,role:`tablist`,children:[(0,z.jsx)(`button`,{"aria-selected":x===`record`,onClick:()=>S(`record`),role:`tab`,type:`button`,children:m(`drawer.executionRecordAndResult`)}),(0,z.jsx)(`button`,{"aria-selected":x===`details`,onClick:()=>S(`details`),role:`tab`,type:`button`,children:m(`drawer.detailsAndActions`)})]}),x===`record`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card personal-session-summary`,children:[(0,z.jsxs)(`small`,{children:[f.item.agentLabel,` · `,Xi(f.item.sessionStatus??f.item.status,m)]}),(0,z.jsx)(`h3`,{children:f.item.title}),(0,z.jsx)(`p`,{children:f.item.latestActivity}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.progress`)}),(0,z.jsxs)(`dd`,{children:[f.item.completedSteps,`/`,f.item.totalSteps]})]})]})]}),(0,z.jsxs)(`section`,{"aria-label":m(`drawer.executionRecord`),className:`personal-session-message-record`,children:[(0,z.jsx)(`h3`,{children:m(`drawer.executionRecord`)}),f.item.sessionMessages?.length?(0,z.jsx)(`ol`,{children:f.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`?m(`drawer.runRoleUser`):e.role===`assistant`?m(`drawer.runRoleAssistant`):m(`drawer.runRoleSystem`)}),e.createdAt?(0,z.jsx)(`time`,{children:new Date(e.createdAt).toLocaleTimeString(p,{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:Se?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,z.jsxs)(`div`,{className:`personal-session-active-step`,children:[(0,z.jsx)(`i`,{}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:m(`drawer.analysis`)}),(0,z.jsx)(`small`,{children:m(`drawer.agentWorking`)})]})]}):null]}),f.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:m(`drawer.outputs`)}),(0,z.jsx)(`ol`,{children:f.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??m(`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:[f.item.agentLabel,` · `,Xi(f.item.status,m)]}),(0,z.jsx)(`h3`,{children:f.item.title}),(0,z.jsx)(`p`,{children:f.item.latestActivity}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.progress`)}),(0,z.jsxs)(`dd`,{children:[f.item.completedSteps,`/`,f.item.totalSteps]})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.sessionStatus`)}),(0,z.jsx)(`dd`,{children:Xi(f.item.sessionStatus??f.item.status,m)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.sessionRecoverable`)}),(0,z.jsx)(`dd`,{children:f.item.resumable===!1?m(`drawer.resumeNo`):m(`drawer.resumeYes`)})]})]})]}),f.item.sessionStatus===`resume_failed`&&!u?(0,z.jsxs)(`section`,{className:`personal-recovery-panel`,"aria-label":m(`drawer.recoveryFailed`),children:[(0,z.jsx)(`strong`,{children:m(`drawer.recoveryFailed`)}),(0,z.jsx)(`p`,{children:m(`drawer.recoveryDescription`)}),(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onRetryResumeRun?.(f.item),type:`button`,children:[(0,z.jsx)(Wm,{size:16}),m(`drawer.recoveryRetry`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onStartNewRunSession?.(f.item),type:`button`,children:[(0,z.jsx)(Bm,{size:16}),m(`drawer.recoveryNewSession`)]})]}):null,u?null:(0,z.jsxs)(`section`,{className:`personal-correction-panel`,children:[(0,z.jsx)(`header`,{children:(0,z.jsxs)(`span`,{children:[(0,z.jsx)(rm,{size:16}),m(`drawer.correctionLabel`,{agent:f.item.agentLabel})]})}),(0,z.jsx)(`p`,{children:m(`drawer.correctionDescription`)}),(0,z.jsxs)(`div`,{className:`personal-correction-composer`,children:[(0,z.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,z.jsx)(`button`,{"aria-label":m(`drawer.correctionSend`),disabled:!h.trim(),onClick:()=>void Te(),type:`button`,children:(0,z.jsx)(qm,{size:16})})]})]}),u?null:(0,z.jsxs)(`details`,{className:`personal-compact-menu personal-run-more`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(_m,{size:17}),m(`drawer.moreRunActions`)]}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`button`,{disabled:!f.item.canInterrupt,onClick:()=>void r.onInterruptRun?.(f.item),type:`button`,children:[(0,z.jsx)(zm,{size:16}),m(`drawer.runInterrupt`)]}),(0,z.jsxs)(`button`,{disabled:f.item.resumable===!1,onClick:()=>void r.onRetryResumeRun?.(f.item),type:`button`,children:[(0,z.jsx)(Wm,{size:16}),m(`drawer.recoveryRetry`)]}),(0,z.jsxs)(`button`,{onClick:()=>void r.onStartNewRunSession?.(f.item),type:`button`,children:[(0,z.jsx)(Bm,{size:16}),m(`drawer.runNewSession`)]}),(0,z.jsxs)(`button`,{onClick:()=>void r.onCloseRunSession?.(f.item),type:`button`,children:[(0,z.jsx)(eh,{size:16}),m(`drawer.runCloseSession`)]})]})]})]})]}):null,f.kind===`output`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsx)(`small`,{children:f.item.kind??`output`}),(0,z.jsx)(`h3`,{children:f.item.title}),(0,z.jsx)(`p`,{children:f.item.summary??m(`drawer.outputRecorded`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Goal`}),(0,z.jsx)(`dd`,{children:f.item.goalTitle??f.item.goalId})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.outputTodo`)}),(0,z.jsx)(`dd`,{children:f.item.todoId??m(`drawer.notLinked`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.outputRun`)}),(0,z.jsx)(`dd`,{children:f.item.runId??m(`drawer.notLinked`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Agent`}),(0,z.jsx)(`dd`,{children:f.item.agentLabel??f.item.agentId??`LoopX`})]})]})]}),f.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:[`+`,f.item.report.addedCount]}),m(`files.reportAdded`)]}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:f.item.report.changedCount}),m(`files.reportChanged`)]})]}),(0,z.jsxs)(`p`,{children:[f.item.report.periodStartAt,` → `,f.item.report.periodEndAt]}),(0,z.jsx)(`ol`,{children:f.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:[m(`files.reportPublication`),`: `,f.item.report.publicationId]}),(0,z.jsxs)(`span`,{children:[m(`files.reportGeneration`),`: `,f.item.report.generationId]})]})]}):null,f.item.safePreview?(0,z.jsx)(`pre`,{"aria-label":m(`drawer.outputSafePreview`),className:`personal-safe-preview`,children:f.item.safePreview}):(0,z.jsx)(`p`,{className:`personal-preview-unavailable`,children:m(`drawer.previewUnavailable`)}),(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:!r.onOpenOutput,onClick:()=>{r.onOpenOutput?.(f.item),c()},type:`button`,children:[(0,z.jsx)(vm,{size:16}),m(`files.openConversation`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,disabled:!r.onExportOutput,onClick:()=>void r.onExportOutput?.(f.item),type:`button`,children:[(0,z.jsx)(gm,{size:16}),m(`files.exportSummary`)]})]})]}):null,f.kind===`proposal`?(0,z.jsxs)(z.Fragment,{children:[f.item.actionKind===`team.plan`&&f.item.status===`applied`?(0,z.jsx)(Lb,{proposal:f.item,t:m}):(0,z.jsxs)(`section`,{className:`personal-proposal-card`,children:[(0,z.jsxs)(`small`,{children:[f.item.actionKind,` · `,f.item.status]}),(0,z.jsx)(`h3`,{children:f.item.title}),f.item.impact?(0,z.jsx)(`p`,{children:f.item.impact}):null,f.item.reviewPlan&&!f.item.reviewPlan.retryOriginal&&f.item.actionKind!==`team.plan`?(0,z.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`&&f.item.actionKind!==`team.plan`?(0,z.jsx)(`p`,{className:`personal-proposal-explainer`,children:m(`drawer.proposalExplainer`)}):null,(0,z.jsx)(`dl`,{children:f.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))})]}),f.item.status===`applied`&&f.item.actionKind!==`team.plan`?(0,z.jsxs)(`p`,{className:`personal-proposal-state ${f.item.actionKind===`operation.execute`&&f.item.reviewPlan?.reason===`readback_unverified`?`is-gated`:`is-applied`}`,children:[(0,z.jsx)(om,{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,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>{let e=f.item.goalId;c(),r.onOpenGoal?.(e)},type:`button`,children:[(0,z.jsx)(vm,{size:16}),f.item.actionKind===`goal.create`?m(`drawer.proposalEnterGoal`):m(f.item.actionKind===`team.plan`?`proposal.teamPlan.openGoal`:`drawer.proposalViewGoal`)]}):null,f.item.status===`stale`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-stale`,children:m(`drawer.proposalStale`)}):null,f.item.status===`error`&&!f.item.reviewPlan?.retryOriginal?(0,z.jsxs)(`div`,{className:`personal-proposal-state is-error`,children:[(0,z.jsx)(`span`,{children:f.item.reviewPlan?.reason===`readback_unverified`?m(`actionReview.readback_unverified`):m(`drawer.proposalApplyFailed`)}),f.item.errorMessage?(0,z.jsx)(`small`,{children:f.item.errorMessage}):null,(0,z.jsx)(`small`,{children:m(f.item.actionKind===`team.plan`?`proposal.teamPlan.retryHint`:`drawer.proposalApplyFailedHint`)})]}):null,f.item.status===`rejected`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-error`,children:m(`drawer.proposalRejected`)}):null,f.item.status===`deferred`?(0,z.jsx)(`p`,{className:`personal-proposal-state is-gated`,children:m(`drawer.proposalDeferred`)}):null,f.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.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,z.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,z.jsxs)(`section`,{className:`personal-detail-card personal-gate-cli-hint`,children:[(0,z.jsx)(`small`,{children:m(`drawer.gateApproveHint`)}),(0,z.jsxs)(`code`,{children:[`loopx todo complete --goal-id `,t,` --todo-id `,n,` --decision-outcome approve`]}),(0,z.jsx)(`small`,{children:m(`drawer.gateRejectHint`)})]})})():null,!u&&f.item.workspaceCandidates?.length?(0,z.jsx)(`div`,{className:`personal-workspace-candidates`,"aria-label":m(`drawer.workspaceCandidates`),children:f.item.workspaceCandidates.map(e=>(0,z.jsxs)(`button`,{onClick:()=>void r.onSelectWorkspaceCandidate?.(f.item,e.workspaceRef),type:`button`,children:[(0,z.jsx)(`strong`,{children:e.label}),(0,z.jsx)(`small`,{children:e.workspaceRef})]},e.workspaceRef))}):null,!u&&f.item.actionKind!==`operation.execute`&&f.item.status===`error`?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void(f.item.actionKind===`team.plan`||f.item.reviewPlan?.retryOriginal?r.onApplyProposal?.(f.item):r.onTransitionProposal?.(f.item,`regenerate`)),type:`button`,children:[(0,z.jsx)(Wm,{size:17}),m(f.item.reviewPlan?.retryOriginal?`drawer.retryOriginal`:f.item.actionKind===`team.plan`?`proposal.teamPlan.retry`:`drawer.proposalRegenerate`)]}):!u&&f.item.actionKind!==`operation.execute`&&f.item.status!==`gated`&&(f.item.actionKind!==`team.plan`||f.item.status!==`applied`)?(0,z.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,z.jsx)(om,{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,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`regenerate`),type:`button`,children:[(0,z.jsx)(Wm,{size:16}),m(`drawer.proposalRecheck`)]}):null,!u&&f.item.actionKind!==`operation.execute`&&[`ready`,`gated`].includes(f.item.status)?(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onTransitionProposal?.(f.item,`defer`),type:`button`,children:m(`drawer.proposalDefer`)}),(0,z.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,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:c,type:`button`,children:m(`drawer.proposalClose`)})]}):null,f.kind===`schedule`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`section`,{className:`personal-detail-card`,children:[(0,z.jsxs)(`small`,{children:[f.item.scheduleKind===`heartbeat`?`Goal Heartbeat`:`continuous_monitor`,` · `,f.item.status??`active`]}),(0,z.jsx)(`h3`,{children:f.item.label}),(0,z.jsx)(`p`,{children:f.item.target??f.item.schedule??m(`drawer.scheduleDefaultTarget`)}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleTimezone`)}),(0,z.jsx)(`dd`,{children:f.item.timezone??m(`drawer.scheduleLocalTimezone`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleNext`)}),(0,z.jsx)(`dd`,{children:f.item.nextRunAt??m(`drawer.schedulePending`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleLast`)}),(0,z.jsx)(`dd`,{children:f.item.previousRunAt??m(`drawer.scheduleNeverRun`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleNotification`)}),(0,z.jsx)(`dd`,{children:f.item.notificationRule??m(`drawer.scheduleDefaultNotification`)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:m(`drawer.scheduleStopCondition`)}),(0,z.jsx)(`dd`,{children:f.item.stopCondition??m(`drawer.scheduleDefaultStop`)})]})]})]}),!u&&f.item.scheduleKind===`monitor`?(0,z.jsxs)(`button`,{className:`personal-primary-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`run_now`),type:`button`,children:[(0,z.jsx)(Bm,{size:16}),m(`drawer.scheduleRunNow`)]}):null,u?null:(0,z.jsxs)(`div`,{className:`personal-drawer-action-grid`,children:[(0,z.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,z.jsx)(Bm,{size:16}):(0,z.jsx)(zm,{size:16}),f.item.status===`paused`?m(`drawer.scheduleResume`):m(`drawer.schedulePause`)]}),(0,z.jsxs)(`button`,{className:`personal-secondary-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`edit`),type:`button`,children:[(0,z.jsx)(am,{size:16}),m(`drawer.scheduleEdit`)]})]}),u?null:(0,z.jsxs)(`button`,{className:`personal-danger-action`,onClick:()=>void r.onUpdateSchedule?.(f.item,`stop`),type:`button`,children:[(0,z.jsx)(eh,{size:16}),m(`drawer.scheduleStop`,{kind:f.item.scheduleKind===`heartbeat`?` Heartbeat`:m(`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:m(`drawer.executionHistory`)}),f.item.executionHistory?.length?(0,z.jsx)(`ol`,{children:f.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:m(`drawer.noExecutionHistory`)})]})]}):null,f.kind===`run`||f.kind===`proposal`||f.kind===`schedule`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`button`,{"aria-expanded":_,className:`personal-diagnostics-trigger`,onClick:()=>v(e=>!e),type:`button`,children:[(0,z.jsx)(`span`,{children:m(`drawer.advancedDiagnostics`)}),(0,z.jsx)(sm,{className:_?`is-open`:``,size:16})]}),_?(0,z.jsxs)(`div`,{className:`personal-diagnostics`,children:[(0,z.jsxs)(`code`,{children:[`goal_id: `,ye]}),(0,z.jsxs)(`code`,{children:[`kind: `,f.kind]}),f.kind===`run`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`session_id: `,f.item.sessionId??m(`drawer.notLinked`)]}),(0,z.jsxs)(`code`,{children:[`turn_id: `,f.item.turnId??m(`common.none`)]}),(0,z.jsxs)(`code`,{children:[`adapter: `,f.item.agentId]}),(0,z.jsxs)(`code`,{children:[`status: `,f.item.sessionStatus??f.item.status]})]}):f.kind===`proposal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`action: `,f.item.actionKind]}),(0,z.jsxs)(`code`,{children:[`status: `,f.item.status]})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`code`,{children:[`schedule_id: `,f.item.scheduleId]}),(0,z.jsxs)(`code`,{children:[`status: `,f.item.status??`active`]})]})]}):null]}):null]})]})}var $b=[`checking`,`connecting`,`downloading`,`installing_app`,`installing_runtime`],ex={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 tx(e,t=`update_failed`){return{phase:`error`,details:{code:typeof e==`string`&&Object.hasOwn(ex,e)?e:t}}}function nx(){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=$b.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(tx(t))})}).catch(()=>{e&&c(tx(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(tx(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.`,runtime_pairing_required:t?`本机 CLI 运行时与 App 自带运行时不一致。回到 App 启动界面可「更新 App 与运行时」或「回退 CLI」。`:`This host's CLI runtime and the App's bundled runtime differ. On the App boot screen, update both or use the App's runtime.`,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:ex[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)(gm,{size:16,"aria-hidden":`true`}),(0,z.jsx)(`span`,{children:v}),(0,z.jsx)(lm,{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)(sh,{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)(Um,{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 rx=e=>`loopx-sidebar-goal-order-v1:${encodeURIComponent(e)}`;function ix(e){try{let t=JSON.parse(e??`null`);return Array.isArray(t)&&t.every(e=>typeof e==`string`)?[...new Set(t)]:[]}catch{return[]}}function ax(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 ox(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 sx(e,t){let n=rx(t),[r,i]=(0,R.useState)(()=>{try{return ix(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=ax(e,r),m=p.map(e=>e.goalId);function h(t,a,s){let l=ox(r,m,t,a,s);if(l===r)return;i(l);let u=ax(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 cx=`/ssh-hosts`,lx=/^[A-Za-z0-9][A-Za-z0-9._-]{0,254}$/;function ux(e){return typeof e==`string`&&lx.test(e.trim())}function dx(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!ux(t)||n.has(t)?[]:(n.add(t),[{alias:t}])}),schemaVersion:`ssh_host_catalog_v0`}}async function fx(e=fetch,t=cx){let n=await e(t,{cache:`no-store`});if(!n.ok)throw Error(`无法读取本机 SSH Host(HTTP ${n.status})。`);return dx(await n.json())}function px(e,t){let n=e.trim();if(!ux(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 mx=`/api/ssh-source/ensure`,hx=`/api/ssh-source/goal-lifecycle`;async function gx(e,t){let n=await fetch(mx,{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 _x(e,t,n,r,i=fetch){let a=await i(hx,{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 vx({activeSource:e,connectionState:t,errorMessage:n,onAdd:r,onConfiguredHostsLoaded:i,onRemove:a,onSelect:o,sources:s}){let{t:c}=Ji(),[l,u]=(0,R.useState)(!1),[d,f]=(0,R.useState)(null),[p,m]=(0,R.useState)(`configured`),[h,g]=(0,R.useState)([]),[_,v]=(0,R.useState)(null),[y,b]=(0,R.useState)(!1),[x,S]=(0,R.useState)(!1),[C,w]=(0,R.useState)(``),[T,E]=(0,R.useState)(``),[D,O]=(0,R.useState)(`8876`),[k,A]=(0,R.useState)(``),ee=`configured:`,j=[...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:`${ee}${e.alias}`}))],M=(0,R.useMemo)(()=>h.some(e=>e.alias===C)?px(C,D):{error:c(`source.selectHost`)},[h,C,D,c]);(0,R.useEffect)(()=>{te()},[]);async function te(){b(!0),v(null);try{let e=await fx();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 ne(){u(!0),m(`configured`),f(null),te()}function N(){u(!1),m(`configured`),v(null),S(!1),w(``),f(null),E(``),O(`8876`),A(``)}function P(){let e=r({label:T,statusUrl:k});if(e.error){f(e.error);return}N()}function re(){if(`error`in M){f(M.error??c(`source.invalid`));return}let e=r({ensureTunnel:!0,hostAlias:M.hostAlias,label:M.label,statusUrl:M.statusUrl});if(e.error){f(e.error);return}N()}function ie(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=px(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 ae(){if(`error`in M){f(M.error??c(`source.invalid`));return}try{await navigator.clipboard.writeText(M.command),S(!0),f(null)}catch{f(c(`source.copyError`))}}return(0,z.jsxs)(`section`,{"aria-label":c(`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":c(`source.addSsh`),onClick:ne,title:c(`source.add`),type:`button`,children:(0,z.jsx)(Vm,{size:14})})]}),(0,z.jsx)(rb,{ariaLabel:c(`source.select`),className:`personal-status-source-select`,icon:(0,z.jsx)(Ym,{size:15}),onChange:e=>{if(e.startsWith(ee)){ie(e.slice(11));return}o(e)},options:j,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`,{}),c(t===`loading`?`source.connecting`:t===`error`?`source.notAvailable`:`source.connected`)]}),(0,z.jsx)(`small`,{children:e.readOnly?c(`source.readOnly`):c(`source.localInteractive`)}),e.kind===`ssh_tunnel`?(0,z.jsx)(`button`,{"aria-label":c(`source.remove`,{source:e.label}),onClick:()=>a(e.id),title:c(`source.removeCurrent`),type:`button`,children:(0,z.jsx)(rh,{size:12})}):null]}),n?(0,z.jsx)(`p`,{className:`personal-status-source-error`,role:`alert`,children:n}):null,l?(0,z.jsxs)(`div`,{className:`personal-status-source-form`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:c(`source.addSsh`)}),(0,z.jsx)(`button`,{"aria-label":c(`source.closeForm`),onClick:N,type:`button`,children:(0,z.jsx)(sh,{size:13})})]}),(0,z.jsxs)(`div`,{"aria-label":c(`source.addMethod`),className:`personal-status-source-modes`,role:`tablist`,children:[(0,z.jsx)(`button`,{"aria-selected":p===`configured`,onClick:()=>{m(`configured`),f(null)},role:`tab`,type:`button`,children:c(`source.configured`)}),(0,z.jsx)(`button`,{"aria-selected":p===`manual`,onClick:()=>{m(`manual`),f(null)},role:`tab`,type:`button`,children:c(`source.manual`)})]}),p===`configured`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:c(`source.configuredCount`,{count:h.length})}),(0,z.jsxs)(`span`,{className:`personal-status-source-field-row`,children:[(0,z.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,z.jsx)(`datalist`,{id:`loopx-configured-ssh-hosts`,children:h.map(e=>(0,z.jsx)(`option`,{value:e.alias},e.alias))}),(0,z.jsx)(`button`,{"aria-label":c(`source.refreshHosts`),disabled:y,onClick:()=>void te(),title:c(`source.refreshHosts`),type:`button`,children:(0,z.jsx)(Gm,{size:13})})]})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:c(`source.localPort`)}),(0,z.jsx)(`input`,{"aria-label":c(`source.localPort`),inputMode:`numeric`,onChange:e=>{O(e.target.value),S(!1)},value:D})]}),(0,z.jsxs)(`div`,{className:`personal-status-source-command`,children:[(0,z.jsx)(`code`,{children:`error`in M?c(`source.tunnelCommandPending`):M.command}),(0,z.jsxs)(`button`,{"aria-label":c(`source.copyCommand`),disabled:`error`in M,onClick:()=>void ae(),type:`button`,children:[(0,z.jsx)(mm,{size:12}),c(x?`source.copied`:`source.copy`)]})]}),_?(0,z.jsx)(`p`,{className:`is-error`,children:_}):null,(0,z.jsx)(`p`,{children:c(`source.description`)}),(0,z.jsx)(`button`,{className:`personal-status-source-add`,disabled:`error`in M,onClick:re,type:`button`,children:c(`source.addConfigured`)})]}):(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:c(`source.name`)}),(0,z.jsx)(`input`,{autoFocus:!0,maxLength:48,onChange:e=>E(e.target.value),placeholder:c(`source.namePlaceholder`),value:T})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:c(`source.statusUrl`)}),(0,z.jsx)(`input`,{onChange:e=>A(e.target.value),placeholder:`http://127.0.0.1:8876/status.json`,value:k})]}),(0,z.jsx)(`p`,{children:(0,z.jsx)(`code`,{children:`ssh -N -L 8876:127.0.0.1:8766 `})}),(0,z.jsx)(`p`,{children:c(`source.manualDescription`)}),(0,z.jsx)(`button`,{className:`personal-status-source-add`,onClick:P,type:`button`,children:c(`source.addConfigured`)})]}),d?(0,z.jsx)(`p`,{className:`is-error`,role:`alert`,children:d}):null]}):null]})}var yx={需修复:`is-danger`,等你:`is-warning`,等待条件:`is-info`,推进中:`is-success`,安静运行:`is-quiet`,已完成:`is-quiet`,已停止:`is-stopped`};function bx({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,R.useState)(!1),g=sx(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,z.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,z.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,z.jsx)(`span`,{className:`personal-goal-state-dot ${e.loadState?``:yx[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||u===e.goalId)?p(e.loadState===`error`?`startup.goalError`:`startup.goalLoading`):Yi(e.state,f),e.needsYou&&!t?` · ${p(`home.lane.needsYou`)}`:``]})]}),(0,z.jsx)(cm,{size:15})]}),!t&&m?(0,z.jsxs)(`div`,{className:`personal-goal-move-actions`,children:[(0,z.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,z.jsx)(em,{"aria-hidden":`true`,size:13})}),(0,z.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,z.jsx)(Xp,{"aria-hidden":`true`,size:13})})]}):null,c&&y(t?`resume`:`stop`)?(0,z.jsxs)(z.Fragment,{children:[(0,z.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,z.jsx)(Am,{size:13}):t?(0,z.jsx)(Wm,{size:13}):(0,z.jsx)(zm,{size:13})}),t&&y(`delete`)?(0,z.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,z.jsx)(rh,{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)(rm,{size:18})}),(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:`LoopX`})})]}),d?(0,z.jsx)(vx,{...d}):null,(0,z.jsxs)(`nav`,{"aria-label":p(`home.workspace`),className:`personal-sidebar-nav`,children:[(0,z.jsxs)(`button`,{"aria-current":u===null?`page`:void 0,className:`personal-manager-link`,onClick:()=>l(null),type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-manager-icon`,children:(0,z.jsx)(rm,{size:17})}),(0,z.jsx)(`span`,{children:p(`sidebar.manager`)}),e>0?(0,z.jsx)(`span`,{className:`personal-sidebar-count`,children:e}):null,(0,z.jsx)(cm,{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:_.length}),(0,z.jsx)(`button`,{"aria-label":p(`sidebar.sortGoals`),title:p(`sidebar.sortGoals`),"aria-pressed":m,onClick:()=>h(!m),type:`button`,children:(0,z.jsx)($p,{"aria-hidden":`true`,size:15})}),a?(0,z.jsx)(`button`,{"aria-label":p(`sidebar.createGoal`),onClick:a,type:`button`,children:(0,z.jsx)(Vm,{size:15})}):null]})]}),g.saveFailed?(0,z.jsx)(`p`,{role:`status`,children:p(`sidebar.orderNotSaved`)}):null,(0,z.jsx)(`span`,{className:`personal-sr-only`,role:`status`,children:g.lastMoved?p(`sidebar.goalMoved`,{goal:g.lastMoved.title,position:g.lastMoved.position}):``}),(0,z.jsx)(`div`,{className:`personal-goal-list`,children:_.map(e=>b(e,!1))}),v.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)(sm,{size:13}),(0,z.jsx)(`span`,{children:p(`sidebar.stopped`)}),n.phase===`loading`?(0,z.jsx)(Am,{"aria-label":p(`sidebar.stoppedLoading`),className:`is-spinning`,size:13}):(0,z.jsx)(`small`,{children:v.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:p(`sidebar.stoppedLoadFailed`)}),s?(0,z.jsx)(`button`,{onClick:s,type:`button`,children:p(`sidebar.retryStopped`)}):null]}):null,v.map(e=>b(e,!0))]})]}):null]}),(0,z.jsxs)(`div`,{className:`personal-sidebar-footer`,children:[(0,z.jsx)(nx,{}),o?(0,z.jsxs)(`button`,{"aria-label":p(`settings.open`),className:`personal-sidebar-utility`,onClick:o,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-sidebar-utility-icon`,children:(0,z.jsx)(Xm,{size:17})}),(0,z.jsx)(`span`,{className:`personal-sidebar-utility-copy`,children:(0,z.jsx)(`strong`,{children:p(`settings.open`)})}),(0,z.jsx)(cm,{"aria-hidden":`true`,size:15})]}):null]})]})}var xx=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 Sx({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),[A,ee]=(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=xx.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,A,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 M=Math.max(0,Math.floor(w.top/d)-3),te=Math.min(f.length,Math.ceil((w.top+w.height)/d)+3),ne=Array.from({length:Math.max(0,te-M)},(e,t)=>M+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:ne.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),ee(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 Cx({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)(sm,{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 wx({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:e.priority===`P3`?3:e.priority===`P4`?4:50,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,A=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.jsx)(`div`,{children:(0,z.jsx)(`strong`,{children:u(`header.tasks`)})}),(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)(rm,{size:15}),(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:u(`tasks.agentLane`)})})]}),(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)(sm,{"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)(Pm,{size:18})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`strong`,{children:u(A?`tasks.chatPending`:k?`tasks.chatAgentReplied`:`tasks.chatRecent`)}),(0,z.jsx)(`small`,{children:k?.returnDelivery?u(`tasks.chatReturn`):k?.agentLabel})]}),(0,z.jsx)(`div`,{className:`personal-task-reply-preview`,children:(0,z.jsx)(bb,{text:A?u(`tasks.chatPendingDescription`):(k?.text??O.text).trim().split(/\r?\n/,1)[0]})})]}),(0,z.jsxs)(`footer`,{children:[(0,z.jsxs)(`button`,{onClick:i,type:`button`,children:[(0,z.jsx)(Pm,{size:14}),u(`tasks.chatViewReply`)]}),k&&!A&&r?(0,z.jsxs)(`button`,{onClick:()=>r(k.text),type:`button`,children:[(0,z.jsx)(km,{size:14}),u(`tasks.convertToTask`)]}):null]})]}):null,(0,z.jsxs)(`div`,{className:d?`personal-task-grouped-list`:`personal-task-kanban`,children:[(0,z.jsxs)(Cx,{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)(Cx,{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)(vm,{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)(Am,{className:`personal-spin`,size:14}):(0,z.jsx)(om,{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)(_m,{size:14})})]})]},e.todoId)}),x.length?null:(0,z.jsx)(`p`,{className:`personal-task-empty`,children:u(`tasks.emptyRunning`)})]}),(0,z.jsxs)(Cx,{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)(Sx,{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]})}var Tx=yd(W(),q(W())),Ex=J({node_id:W().min(1),kind:Y([`deliverable`,`gate`,`gate_summary`,`lease`,`validation`,`repair`,`handoff`,`evidence`]),title:W(),state:Y([`open`,`ready`,`blocked`,`done`,`waiting`,`unknown`]),refs:Tx,owner_agent:W().optional(),actor_agent:W().optional(),from_agent:W().optional(),to_agent:W().optional()}),Dx=J({edge_id:W().min(1),from_node_id:W(),to_node_id:W(),relation:Y([`depends_on`,`blocks`,`validates`,`repairs`,`audits`,`continues`,`hands_off_to`,`supersedes`]),reason:W(),refs:Tx.optional()}),Ox=J({schema_version:X(`task_graph_projection_v0`),mode:X(`read_only`),goal_id:W(),generated_at:W().nullable(),truth_contract:J({projection_is_writable:X(!1),write_api:X(!1)}),limits:J({user_gate_node_limit:G().int().nonnegative(),user_gate_open_count:G().int().nonnegative(),user_gate_truncated_count:G().int().nonnegative(),source_truncated:K().optional(),predecessor_truncated:K().optional(),missing_predecessor_count:G().int().nonnegative().optional(),topology_complete:K().optional()}),nodes:q(Ex),edges:q(Dx)}).superRefine((e,t)=>{let n=new Set(e.nodes.map(e=>e.node_id)),r=new Set(e.edges.map(e=>e.edge_id));(n.size!==e.nodes.length||r.size!==e.edges.length||e.edges.some(e=>!n.has(e.from_node_id)||!n.has(e.to_node_id)))&&t.addIssue({code:`custom`,message:`Graph identities or endpoints are invalid`})}),kx=J({ok:X(!0),goal_id:W(),observed_at:W().datetime({offset:!0}),graph:Ox.nullable(),acceptance:ef.nullable()});function Ax(e,t){let n=kx.parse(e);if(n.goal_id!==t||n.graph&&n.graph.goal_id!==t||n.acceptance&&n.acceptance.goal_id!==t)throw Error(`Review source does not match the selected Goal`);return n}async function jx(e,t){let n=new URLSearchParams({goal_id:e}),r=await fetch(`/api/chat/delivery-review?${n}`,{signal:t,cache:`no-store`});if(!r.ok)throw Error(`Review unavailable (${r.status})`);return Ax(await r.json(),e)}function Mx(e,t,n,r){let i=new Set([r]);for(let t of e.edges)t.from_node_id===r&&i.add(t.to_node_id),t.to_node_id===r&&i.add(t.from_node_id);let a=t.trim().toLocaleLowerCase();return e.nodes.filter(e=>{let t=[e.title,e.owner_agent,e.actor_agent,e.from_agent,e.to_agent,...Object.values(e.refs).flat()].some(e=>e?.toLocaleLowerCase().includes(a)),r=n===`all`||n===`related`&&i.has(e.node_id)||n===`conditions`&&[`gate`,`gate_summary`,`lease`].includes(e.kind)||n===`evidence`&&[`evidence`,`validation`,`repair`,`handoff`].includes(e.kind);return t&&r})}function Nx(e){let t=e.limits;return t.topology_complete!==!0||t.source_truncated===!0||t.predecessor_truncated===!0||(t.missing_predecessor_count??0)>0||t.user_gate_truncated_count>0}function Px(e){return[`gate`,`gate_summary`,`lease`].includes(e.kind)?0:e.kind===`deliverable`?1:2}function Fx(e,t){let n=e=>String(e??t.unavailable).replace(/[\\`*_{}[\]<>|#]/g,`\\$&`).replace(/[\r\n]+/g,` `),r=[`# ${t.title}`,``,`Goal: ${n(e.goal_id)}`,`${t.observed}: ${n(e.observed_at)}`,``,t.scope,``,t.acceptanceBoundary,``,`## ${t.chain}`,``],i=e.graph;if(!i)r.push(t.noGraph);else{Nx(i)&&r.push(t.incomplete,``),r.push("```json",JSON.stringify(i.limits,null,2),"```",``);for(let e of i.nodes)r.push(`- ${n(e.title)} · ${t.kind[e.kind]} · ${t.state[e.state]}${e.owner_agent?` · ${n(e.owner_agent)}`:``}`,` ${t.refs}: ${n(e.node_id)}; ${n(JSON.stringify(e.refs))}`),(e.from_agent||e.to_agent)&&r.push(` ${n(e.from_agent)} → ${n(e.to_agent)}`),e.actor_agent&&r.push(` actor: ${n(e.actor_agent)}`);let e=new Map(i.nodes.map(e=>[e.node_id,e.title]));r.push(``,`## ${t.relations}`,``);for(let a of i.edges)r.push(`- ${n(e.get(a.from_node_id))} → ${t.relation[a.relation]} → ${n(e.get(a.to_node_id))}: ${n(a.reason)} (${n(a.edge_id)})`,` ${t.refs}: ${n(JSON.stringify(a.refs??{}))}`)}r.push(``,`## ${t.acceptance}`,``);let a=e.acceptance;if(!a)r.push(t.unavailable);else{let e=a.coverage===`partial`;r.push(`${t.required}: ${e?a.acceptance_gaps.length:t.unavailable}`,`${t.guards}: ${e?a.guards.length:t.unavailable}`,``);for(let e of a.acceptance_gaps)r.push(`### ${n(e.evidence_required)}`,``,`${t.owner}: ${n(e.owner)}`,`${t.reason}: ${n(e.reason)}`,`${t.observed}: ${n(e.observed_at)}`,`${t.refs}: ${n(e.source)}`),e.resolution_hint&&r.push(n(e.resolution_hint)),e.component_checks&&r.push(`${t.checks}:`,"```json",JSON.stringify(e.component_checks,null,2),"```"),r.push(``);r.push(`### ${t.guards}`,``);for(let e of a.guards)r.push(`- ${n(e.reason)}`,` ${t.owner}: ${n(e.owner)}; ${t.required}: ${n(e.evidence_required)}`,` ${t.refs}: ${n(e.todo_id)}; ${n(e.blocks_agent)}; ${n(e.decision_scope)}`);r.push(``,`### ${t.historical}`,``);for(let e of a.historical_progress)r.push(`- ${n(e.kind)} · ${n(e.observed_at)} · ${n(e.source)} · ${n(e.evidence_refs.join(`, `))}`);r.push(``,`${t.observedScope}: ${n(a.coverage)}; truncated=${a.truncated}`,`${t.missingSources}: ${n(a.missing_sources.join(`, `))}`,`${t.next}: ${n(a.next_action)} (${n(a.next_action_source)})`)}let o=a?.goal_acceptance_contract;if(o?.enabled===!0){let i=t.contract;r.push(``,`## ${i.title}`,``,i.boundary,`${i.source}: ${n(e.goal_id)}`,`${i.revision}: ${o.revision}`,`${i.digest}: ${n(o.digest)}`,``,`### ${i.objective}`,n(o.objective||i.unknown),``,`### ${i.criteria}`),o.non_goals.length&&r.push(`${i.nonGoals}: ${n(o.non_goals.join(`; `))}`),o.criteria.length||r.push(i.noCriteria);for(let e of o.criteria)r.push(`- ${n(e.id)}: ${n(e.description)}`);r.push(``,`### ${i.tasks}`),o.tasks.length||r.push(i.noTasks);for(let e of o.tasks)r.push(`- ${n(e.todo_id)}: ${i.taskState[e.state]}`,` ${i.criteria}: ${n(e.criterion_ids.join(`, `)||i.unknown)}`),e.reason&&r.push(` ${n(e.reason)}`),e.applicable===!1&&r.push(` ${i.notApplicable}`);r.push(``,`### ${i.verification}`,i.verificationState[o.status]),o.held_todo_ids.length&&r.push(`${i.heldTasks}: ${n(o.held_todo_ids.join(`, `))}`),r.push(``,`### ${i.receipt}`);let a=o.verification;if(!a)r.push(i.unknown);else{r.push(i.receiptNote,`${i.operation}: ${n(a.operation_id)}`,`${i.revision}: ${a.contract_revision}`,`${i.digest}: ${n(a.contract_digest)}`,`${i.verificationScope}: ${n(a.todo_id??i.allCriteria)}`);for(let e of a.results)r.push(`- ${n(e.criterion_id)}: ${e.passed?i.passed:i.failed}; ${i.exitCode}: ${e.exit_code??i.unknown}`)}}return r.join(` `)+` -`}function Nx({goalId:e,contract:t,copy:n,current:r}){if(t?.enabled!==!0)return null;let i=`loopx --format json goal-acceptance inspect --goal-id '${e.replace(/'/g,`'\\''`)}'`;return(0,z.jsxs)(`details`,{className:`delivery-acceptance-contract`,children:[(0,z.jsx)(`summary`,{children:n.title}),(0,z.jsxs)(`div`,{className:`delivery-acceptance-content`,children:[(0,z.jsx)(`p`,{children:n.boundary}),r?null:(0,z.jsx)(`p`,{role:`status`,className:`delivery-notice`,children:n.retained}),(0,z.jsxs)(`dl`,{className:`delivery-acceptance-source`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.source}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:e})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.revision}),(0,z.jsx)(`dd`,{children:t.revision})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.digest}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:t.digest})})]})]}),(0,z.jsx)(`h3`,{children:n.objective}),(0,z.jsx)(`p`,{children:t.objective||n.unknown}),t.non_goals.length?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:n.nonGoals}),(0,z.jsx)(`ul`,{children:t.non_goals.map((e,t)=>(0,z.jsx)(`li`,{children:e},t))})]}):null,(0,z.jsx)(`h3`,{children:n.criteria}),t.criteria.length?(0,z.jsx)(`ul`,{children:t.criteria.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`code`,{children:e.id}),` · `,e.description]},e.id))}):(0,z.jsx)(`p`,{children:n.noCriteria}),(0,z.jsx)(`h3`,{children:n.tasks}),t.tasks.length?(0,z.jsx)(`ul`,{className:`delivery-acceptance-tasks`,children:t.tasks.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`p`,{children:[(0,z.jsx)(`code`,{children:e.todo_id}),` · `,(0,z.jsx)(`strong`,{children:n.taskState[e.state]})]}),(0,z.jsxs)(`p`,{children:[n.criteria,`: `,e.criterion_ids.length?e.criterion_ids.join(`, `):n.unknown]}),e.applicable===!1?(0,z.jsx)(`p`,{children:n.notApplicable}):null,e.reason?(0,z.jsx)(`p`,{children:e.reason}):null]},e.todo_id))}):(0,z.jsx)(`p`,{children:n.noTasks}),(0,z.jsx)(`h3`,{children:n.verification}),(0,z.jsx)(`p`,{children:n.verificationState[t.status]}),t.held_todo_ids.length?(0,z.jsxs)(`p`,{children:[n.heldTasks,`: `,t.held_todo_ids.join(`, `)]}):null,(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n.receipt}),t.verification?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{children:n.receiptNote}),(0,z.jsxs)(`dl`,{className:`delivery-acceptance-source`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.operation}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:t.verification.operation_id})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.revision}),(0,z.jsx)(`dd`,{children:t.verification.contract_revision})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.digest}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:t.verification.contract_digest})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.verificationScope}),(0,z.jsx)(`dd`,{children:t.verification.todo_id??n.allCriteria})]})]}),(0,z.jsx)(`ul`,{children:t.verification.results.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`code`,{children:e.criterion_id}),` · `,e.passed?n.passed:n.failed,` · `,n.exitCode,`: `,e.exit_code??n.unknown]},e.criterion_id))})]}):(0,z.jsx)(`p`,{children:n.unknown})]}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n.help}),(0,z.jsx)(`p`,{children:n.guidance}),(0,z.jsx)(`p`,{children:(0,z.jsx)(`code`,{children:i})}),(0,z.jsx)(`p`,{children:(0,z.jsx)(`code`,{children:`loopx goal-acceptance --help`})}),(0,z.jsx)(`a`,{href:`https://github.com/huangruiteng/loopx/blob/main/docs/reference/goal-acceptance-observations.md#owner-authorized-contract-v0`,target:`_blank`,rel:`noreferrer`,children:n.guide})]})]})]})}var Px={en:{title:`Goal acceptance contract`,boundary:`Read-only owner contract. Task association and artifact checks are separate; neither automatically approves or completes the Goal.`,source:`Goal source`,revision:`Contract revision`,digest:`Contract digest`,objective:`Objective`,criteria:`Acceptance criteria`,nonGoals:`Outside scope`,tasks:`Task associations`,verification:`Artifact verification`,unknown:`Unknown`,noTasks:`No task associations reported. Coverage is unknown.`,noCriteria:`No acceptance criteria reported.`,retained:`Retained snapshot; refresh to read current acceptance facts.`,taskState:{ready:`Task association confirmed`,unbound:`Task association missing`,stale:`Task association stale`},verificationState:{unverified:`Artifact checks not verified`,accepted:`Artifact checks passed`,failed:`Artifact checks failed`,stale:`Artifact checks stale`,partial:`Task checks passed; Goal-wide verification unknown`,held:`Task associations require confirmation`},notApplicable:`Outside the current task gate`,heldTasks:`Tasks held`,receipt:`Recorded artifact checks`,receiptNote:`Recorded results use the revision below. The current contract status above accounts for stale checks and task holds.`,operation:`Verification reference`,verificationScope:`Verification scope`,allCriteria:`All contract criteria`,passed:`Passed`,failed:`Failed`,exitCode:`Exit code`,help:`Setup and readback`,guide:`Owner setup guide (v0)`,guidance:`The local Goal owner configures this contract through the CLI using configure --document and the inspected --expected-provider-revision. Changes and verification require --execute. Inspect before changing the contract; refresh this snapshot afterward. Disable with the current provider revision to hide this section.`},"zh-CN":{title:`Goal 验收合同`,boundary:`只读的所有者合同。任务关联与产物检查是独立事实,均不会自动批准或完成 Goal。`,source:`Goal 来源`,revision:`合同版本`,digest:`合同摘要`,objective:`目标`,criteria:`验收条件`,nonGoals:`范围之外`,tasks:`任务关联`,verification:`产物验证`,unknown:`未知`,noTasks:`未提供任务关联,覆盖范围未知。`,noCriteria:`未提供验收条件。`,retained:`当前保留旧快照,请刷新读取最新验收事实。`,taskState:{ready:`任务关联已确认`,unbound:`任务关联缺失`,stale:`任务关联已过期`},verificationState:{unverified:`产物检查未验证`,accepted:`产物检查通过`,failed:`产物检查失败`,stale:`产物检查已过期`,partial:`任务检查通过;Goal 整体验证未知`,held:`任务关联需要确认`},notApplicable:`不属于当前任务门禁范围`,heldTasks:`受阻任务`,receipt:`已记录的产物检查`,receiptNote:`记录对应下方版本。上方当前合同状态已考虑检查过期和任务阻塞。`,operation:`验证引用`,verificationScope:`验证范围`,allCriteria:`全部合同条件`,passed:`通过`,failed:`失败`,exitCode:`退出码`,help:`配置与读回`,guide:`所有者配置指南(v0)`,guidance:`本地 Goal 所有者通过 CLI 的 configure --document 配置合同,并提供 inspect 读到的 --expected-provider-revision。变更和验证都需要 --execute。变更前先检查合同,操作后刷新此快照;使用当前 provider revision 执行 disable 可隐藏本区块。`}},Fx={en:{contract:Px.en,title:`Delivery & evidence`,scope:`Current work and a limited set of predecessors. Use Tasks for the full task inventory.`,observed:`Snapshot read`,chain:`Delivery chain`,relations:`Relationships`,acceptance:`Acceptance observations`,acceptanceBoundary:`Completed tasks and recorded evidence do not certify Goal acceptance.`,noGraph:`No delivery chain is available in this snapshot. This does not mean all work is complete.`,incomplete:`Some related information is missing or not expanded.`,unavailable:`Unknown`,refs:`Source references`,required:`Evidence still required`,guards:`Pending decisions`,next:`Next action`,owner:`Owner`,reason:`Reason`,historical:`Historical observations`,checks:`Component checks`,missingSources:`Missing sources`,observedScope:`Observation coverage`,kind:{deliverable:`Work`,gate:`Decision`,gate_summary:`Other decisions`,lease:`Ownership`,validation:`Validation`,repair:`Recovery`,handoff:`Handoff`,evidence:`Evidence`},state:{open:`Open`,ready:`Ready`,blocked:`Blocked`,done:`Done`,waiting:`Waiting`,unknown:`Unknown`},relation:{depends_on:`depends on`,blocks:`blocks`,validates:`validates / contextualizes`,repairs:`repairs`,audits:`audits`,continues:`continues`,hands_off_to:`hands off to`,supersedes:`supersedes`},refresh:`Refresh snapshot`,export:`Export delivery snapshot`,exported:`Snapshot downloaded`,loading:`Reading the current delivery chain…`,error:`The delivery snapshot could not be read. Refresh to retry.`,refreshError:`Refresh failed. The previous snapshot remains visible; refresh before opening linked work or exporting.`,changed:`Workspace facts changed after this snapshot. Refresh before opening linked work or exporting.`,search:`Search title, owner or reference`,all:`All nodes`,conditions:`Conditions & owners`,evidence:`Evidence & handoffs`,related:`Directly related`,map:`Map`,list:`List`,view:`Delivery chain layout`,filter:`Delivery chain focus`,visible:`Visible`,empty:`No nodes match these filters.`,reset:`Reset filters`,select:`Select a node to trace its relationships and open its source.`,work:`Work`,context:`Evidence & recovery`,details:`Selected item`,noRelations:`No relationships are recorded for this item.`,openTask:`Open task`,openGate:`Review decision`,openRun:`Open execution`,sourceUnavailable:`The linked item is not in the current workspace. Use its reference in the task board or CLI.`,omittedGates:`Decisions not expanded`,missing:`Missing predecessors`,clipped:`Expansion limited`,sourceClipped:`Source truncated`,yes:`Yes`,no:`No`,chainOnly:`Bounded chain`,exportFailed:`Download failed. Please retry.`},"zh-CN":{contract:Px[`zh-CN`],title:`交付与依据`,scope:`仅含当前工作及有限前序,完整任务清单见任务页。`,observed:`快照读取时间`,chain:`交付链`,relations:`关联关系`,acceptance:`验收观察`,acceptanceBoundary:`任务完成、已有证据均不等于 Goal 已通过验收。`,noGraph:`当前快照没有可展示的交付链,这不代表工作已经全部完成。`,incomplete:`部分关联信息缺失或未展开。`,unavailable:`未知`,refs:`来源引用`,required:`仍需补齐的证据`,guards:`待你处理`,next:`下一步`,owner:`负责人`,reason:`原因`,historical:`历史观察`,checks:`组成检查`,missingSources:`缺失来源`,observedScope:`观察范围`,kind:{deliverable:`工作`,gate:`决策`,gate_summary:`其他决策`,lease:`责任归属`,validation:`验证`,repair:`恢复`,handoff:`交接`,evidence:`证据`},state:{open:`待处理`,ready:`就绪`,blocked:`受阻`,done:`已完成`,waiting:`等待`,unknown:`未知`},relation:{depends_on:`依赖`,blocks:`阻塞`,validates:`验证 / 提供背景`,repairs:`修复`,audits:`复核`,continues:`延续`,hands_off_to:`交接给`,supersedes:`替代`},refresh:`刷新快照`,export:`导出交付快照`,exported:`快照已下载`,loading:`正在读取当前交付链…`,error:`交付快照读取失败,请刷新重试。`,refreshError:`刷新失败,当前保留上次快照;请刷新后再打开关联工作或导出。`,changed:`工作区状态已在此快照之后变化,请刷新后再打开关联工作或导出。`,search:`搜索标题、负责人或引用`,all:`全部节点`,conditions:`条件与责任`,evidence:`证据与交接`,related:`直接关联`,map:`关系图`,list:`列表`,view:`交付链布局`,filter:`交付链范围`,visible:`当前显示`,empty:`没有匹配当前筛选的节点。`,reset:`重置筛选`,select:`选择一个节点,追溯关联关系并打开来源。`,work:`工作`,context:`证据与恢复`,details:`选中事项`,noRelations:`当前快照未记录此事项的关联关系。`,openTask:`打开任务`,openGate:`查看决策`,openRun:`打开执行`,sourceUnavailable:`关联事项未出现在当前工作区,可使用其引用到任务看板或 CLI 查找。`,omittedGates:`未展开决策`,missing:`缺失前序`,clipped:`展开受限`,sourceClipped:`来源被裁剪`,yes:`是`,no:`否`,chainOnly:`当前局部链`,exportFailed:`下载失败,请重试。`}};function Ix({graph:e,nodes:t,selected:n,onSelect:r,copy:i}){let a=(0,R.useId)().replace(/:/g,``),o=[0,1,2].map(e=>t.filter(t=>jx(t)===e)),s=new Map(o.flatMap((e,t)=>e.map((e,n)=>[e.node_id,{x:t*320+12,y:n*124+48}]))),c=Math.max(1,...o.map(e=>e.length))*124+48;return(0,z.jsx)(`div`,{className:`delivery-map-scroll`,role:`region`,"aria-label":i.map,tabIndex:0,children:(0,z.jsxs)(`div`,{className:`delivery-map`,style:{height:c},children:[[i.conditions,i.work,i.context].map((e,t)=>(0,z.jsx)(`strong`,{className:`delivery-map-heading`,style:{left:t*320+12},children:e},e)),(0,z.jsxs)(`svg`,{"aria-hidden":`true`,width:`960`,height:c,children:[(0,z.jsx)(`defs`,{children:(0,z.jsx)(`marker`,{id:a,viewBox:`0 0 10 10`,refX:`9`,refY:`5`,markerWidth:`6`,markerHeight:`6`,orient:`auto-start-reverse`,children:(0,z.jsx)(`path`,{d:`M 0 0 L 10 5 L 0 10 z`,fill:`currentColor`})})}),e.edges.map(e=>{let t=s.get(e.from_node_id),r=s.get(e.to_node_id);if(!t||!r)return null;let i=t.x{let t=s.get(e.node_id);return(0,z.jsxs)(`button`,{className:`delivery-map-node`,style:{left:t.x,top:t.y},"aria-pressed":n===e.node_id,onClick:()=>r(e.node_id),type:`button`,children:[(0,z.jsxs)(`span`,{children:[i.kind[e.kind],(0,z.jsx)(`em`,{"data-state":e.state,children:i.state[e.state]})]}),(0,z.jsx)(`strong`,{title:e.title,children:e.title}),(0,z.jsx)(`small`,{children:e.owner_agent??i.unavailable})]},e.node_id)})]})})}function Lx({goal:e,items:t,userTodos:n,onSelect:r,active:i}){let{locale:a}=Ji(),o=Fx[a],[s,c]=(0,R.useState)({kind:`loading`}),[l,u]=(0,R.useState)(0),[d,f]=(0,R.useState)(``),[p,m]=(0,R.useState)(`all`),[h,g]=(0,R.useState)(null),[_,v]=(0,R.useState)(()=>window.matchMedia(`(min-width: 1024px)`).matches),[y,b]=(0,R.useState)(``),x=(0,R.useRef)(null),S=n.filter(t=>t.goalId===e.goalId),C=JSON.stringify([e.agentTodos,e.acceptanceObservation,S]),w=(0,R.useRef)(C);w.current=C,(0,R.useEffect)(()=>{if(!i)return;let t=new AbortController,n=w.current;return c(e=>({...e,kind:`loading`})),b(``),Ox(e.goalId,t.signal).then(e=>{t.signal.aborted||c({kind:`ready`,snapshot:e,sourceKey:n})}).catch(()=>{t.signal.aborted||c(e=>({...e,kind:`error`}))}),()=>t.abort()},[e.goalId,l,i]);let T=s.snapshot?.goal_id===e.goalId?s.snapshot:null,E=!!T&&s.sourceKey!==C,D=!!T&&s.kind===`ready`&&!E,O=T?.graph,k=O?.nodes.find(e=>e.node_id===h),A=p===`related`&&!k?`all`:p,ee=(0,R.useMemo)(()=>O?kx(O,d,A,h):[],[O,d,A,h]),j=O?.edges.filter(e=>e.from_node_id===h||e.to_node_id===h)??[],M=new Map(O?.nodes.map(e=>[e.node_id,e])),te=()=>{f(``),m(`all`)},ne=e=>{g(e),b(``),window.requestAnimationFrame(()=>x.current?.scrollIntoView({block:`nearest`}))};function N(n){let r=new Set(n.refs.todo_ids??[]),i=new Set(n.refs.gate_ids??[]),a=new Set(n.refs.run_ids??[]);return[...e.agentTodos.filter(e=>r.has(e.todoId)).map(t=>({kind:`todo`,item:{...t,goalId:e.goalId,goalTitle:e.title,ownerLabel:t.claimedBy}})),...S.filter(e=>i.has(e.todoId)||r.has(e.todoId)).map(e=>({kind:`attention`,item:e})),...t.filter(t=>t.kind===`run`&&t.run.goalId===e.goalId&&a.has(t.run.runId)).map(e=>({kind:`run`,item:e.run}))]}let P=k?N(k):[];function re(){if(!T||!D)return;let e;try{e=URL.createObjectURL(new Blob([Mx(T,o)],{type:`text/markdown;charset=utf-8`}));let t=document.createElement(`a`);t.href=e,t.download=`loopx-delivery-review.md`,t.click(),b(o.exported)}catch{b(o.exportFailed)}finally{e&&window.setTimeout(()=>URL.revokeObjectURL(e),1e3)}}return(0,z.jsxs)(`section`,{className:`delivery-review`,"aria-label":o.title,children:[(0,z.jsxs)(`header`,{className:`delivery-review-toolbar`,children:[(0,z.jsx)(`h2`,{children:o.title}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`button`,{type:`button`,disabled:s.kind===`loading`,onClick:()=>u(e=>e+1),children:[(0,z.jsx)(Um,{size:15}),o.refresh]}),(0,z.jsxs)(`button`,{type:`button`,disabled:!D,onClick:re,children:[(0,z.jsx)(gm,{size:15}),o.export]})]})]}),y?(0,z.jsx)(`p`,{role:`status`,children:y}):null,T?(0,z.jsxs)(z.Fragment,{children:[s.kind===`ready`?null:(0,z.jsx)(`p`,{role:s.kind===`error`?`alert`:`status`,className:`delivery-notice`,children:s.kind===`error`?o.refreshError:o.loading}),(0,z.jsxs)(`p`,{className:`delivery-snapshot-time`,children:[o.observed,` · `,(0,z.jsx)(`time`,{dateTime:T.observed_at,children:new Date(T.observed_at).toLocaleString(a)})]}),E?(0,z.jsx)(`p`,{role:`alert`,className:`delivery-notice`,children:o.changed}):null,(0,z.jsxs)(`p`,{className:`delivery-boundary`,children:[o.scope,` `,o.acceptanceBoundary]}),O?(0,z.jsxs)(z.Fragment,{children:[Ax(O)?(0,z.jsxs)(`details`,{className:`delivery-notice`,children:[(0,z.jsx)(`summary`,{children:o.incomplete}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:o.omittedGates}),(0,z.jsx)(`dd`,{children:O.limits.user_gate_truncated_count})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:o.missing}),(0,z.jsx)(`dd`,{children:O.limits.missing_predecessor_count??o.unavailable})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:o.clipped}),(0,z.jsx)(`dd`,{children:O.limits.predecessor_truncated===void 0?o.unavailable:O.limits.predecessor_truncated?o.yes:o.no})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:o.sourceClipped}),(0,z.jsx)(`dd`,{children:O.limits.source_truncated===void 0?o.unavailable:O.limits.source_truncated?o.yes:o.no})]})]})]}):null,(0,z.jsxs)(`section`,{className:`delivery-chain`,"aria-label":o.chain,children:[(0,z.jsxs)(`header`,{className:`delivery-chain-toolbar`,children:[(0,z.jsx)(`h3`,{children:o.chain}),(0,z.jsxs)(`span`,{children:[o.visible,` `,ee.length,`/`,O.nodes.length]}),(0,z.jsxs)(`div`,{role:`group`,"aria-label":o.view,children:[(0,z.jsx)(`button`,{type:`button`,"aria-pressed":_,onClick:()=>v(!0),children:o.map}),(0,z.jsx)(`button`,{type:`button`,"aria-pressed":!_,onClick:()=>v(!1),children:o.list})]})]}),(0,z.jsxs)(`div`,{className:`delivery-filters`,children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(Km,{size:16}),(0,z.jsx)(`input`,{"aria-label":o.search,placeholder:o.search,value:d,onChange:e=>f(e.target.value)})]}),(0,z.jsxs)(`select`,{"aria-label":o.filter,value:A,onChange:e=>m(e.target.value),children:[(0,z.jsx)(`option`,{value:`all`,children:o.all}),(0,z.jsx)(`option`,{value:`conditions`,children:o.conditions}),(0,z.jsx)(`option`,{value:`evidence`,children:o.evidence}),(0,z.jsx)(`option`,{value:`related`,disabled:!k,children:o.related})]}),(0,z.jsx)(`button`,{type:`button`,onClick:te,children:o.reset})]}),ee.length?_?(0,z.jsx)(Ix,{graph:O,nodes:ee,selected:h,onSelect:ne,copy:o}):(0,z.jsx)(`ul`,{className:`delivery-node-list`,children:ee.map(e=>(0,z.jsx)(`li`,{children:(0,z.jsxs)(`button`,{type:`button`,"aria-pressed":h===e.node_id,onClick:()=>ne(e.node_id),children:[(0,z.jsx)(`span`,{children:o.kind[e.kind]}),(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`small`,{children:e.owner_agent??o.unavailable}),(0,z.jsx)(`em`,{"data-state":e.state,children:o.state[e.state]})]})},e.node_id))}):(0,z.jsx)(`p`,{className:`delivery-empty`,role:`status`,children:o.empty})]}),(0,z.jsx)(`section`,{className:`delivery-node-detail`,"aria-label":o.details,ref:x,children:k?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[o.kind[k.kind],` · `,o.state[k.state]]}),(0,z.jsx)(`h3`,{children:k.title}),k.owner_agent?(0,z.jsx)(`p`,{children:k.owner_agent}):null]}),k.from_agent||k.to_agent?(0,z.jsxs)(`p`,{children:[k.from_agent??o.unavailable,` → `,k.to_agent??o.unavailable]}):null,(0,z.jsx)(`div`,{className:`delivery-source-actions`,children:P.length?P.map((e,t)=>(0,z.jsxs)(`button`,{type:`button`,disabled:!D,onClick:()=>r(e),children:[(0,z.jsx)(vm,{size:15}),e.kind===`todo`?o.openTask:e.kind===`attention`?o.openGate:o.openRun]},`${e.kind}:${t}`)):(0,z.jsx)(`p`,{children:o.sourceUnavailable})}),(0,z.jsx)(`h4`,{children:o.relations}),j.length?(0,z.jsx)(`ul`,{className:`delivery-relations`,children:j.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>ne(e.from_node_id),children:M.get(e.from_node_id).title}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(Qp,{size:13}),o.relation[e.relation],(0,z.jsx)(Qp,{size:13})]}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>ne(e.to_node_id),children:M.get(e.to_node_id).title})]}),(0,z.jsx)(`p`,{children:e.reason})]},e.edge_id))}):(0,z.jsx)(`p`,{children:o.noRelations}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:o.refs}),(0,z.jsx)(`code`,{children:k.node_id}),Object.entries(k.refs).map(([e,t])=>(0,z.jsxs)(`p`,{children:[(0,z.jsx)(`strong`,{children:e}),` `,t.join(`, `)]},e))]})]}):(0,z.jsx)(`p`,{children:o.select})})]}):(0,z.jsx)(`p`,{className:`delivery-notice`,children:o.noGraph})]}):(0,z.jsx)(`p`,{role:s.kind===`error`?`alert`:`status`,className:`delivery-notice`,children:s.kind===`error`?o.error:o.loading}),(0,z.jsx)(Nx,{goalId:e.goalId,contract:T?.acceptance?.goal_acceptance_contract,copy:o.contract,current:D}),(0,z.jsx)(wb,{goal:T?{...e,acceptanceObservation:T.acceptance}:e})]})}function Rx({active:e,goal:t,items:n,userTodos:r,readOnly:i,onOpenDetails:a,onSelect:o,onView:s}){let{t:c,locale:l}=Ji(),u=l===`zh-CN`?{progress:`当前进展`,attention:`需要你`,none:`当前没有已加载的待处理决定。`,details:`Goal 信息`,tasks:`查看任务`,usage:`最近 24 小时`,execution:`执行记录`,remote:`此来源仅提供同步的状态与验收观察,交付链需要实时本机来源。`}:{progress:`Current progress`,attention:`Needs you`,none:`No pending decisions are loaded.`,details:`Goal information`,tasks:`View tasks`,usage:`Last 24 hours`,execution:`Execution`,remote:`This source provides synchronized status and acceptance observations. The delivery chain requires the live local source.`},d=r.filter(e=>e.goalId===t.goalId),f=n.find(e=>e.kind===`run`&&e.run.goalId===t.goalId);return(0,z.jsxs)(`section`,{className:`goal-overview`,"aria-label":c(`header.overview`),children:[(0,z.jsxs)(`header`,{className:`goal-overview-heading`,children:[(0,z.jsx)(`h2`,{children:c(`header.overview`)}),(0,z.jsxs)(`button`,{onClick:a,type:`button`,children:[(0,z.jsx)(Tm,{size:15}),u.details]})]}),(0,z.jsxs)(`div`,{className:`goal-overview-summary${d.length?` has-attention`:``}`,children:[(0,z.jsxs)(`section`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h3`,{children:u.progress}),(0,z.jsx)(`span`,{children:Yi(t.state,l)})]}),(0,z.jsx)(`strong`,{children:t.nextSentence}),t.agentSentence&&t.agentSentence!==t.nextSentence?(0,z.jsx)(`p`,{children:t.agentSentence}):null,d.length?null:(0,z.jsx)(`p`,{className:`goal-overview-quiet`,children:u.none}),f?(0,z.jsxs)(`button`,{className:`goal-overview-run`,type:`button`,onClick:()=>o({kind:`run`,item:f.run}),children:[(0,z.jsxs)(`small`,{children:[u.execution,` · `,f.run.agentLabel]}),(0,z.jsx)(`strong`,{children:f.run.title}),(0,z.jsx)(Qp,{size:15})]}):null]}),d.length?(0,z.jsxs)(`section`,{className:`goal-overview-attention`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h3`,{children:u.attention}),(0,z.jsx)(`span`,{children:d.length})]}),(0,z.jsx)(`ul`,{children:d.slice(0,3).map(e=>(0,z.jsx)(`li`,{children:(0,z.jsxs)(`button`,{type:`button`,onClick:()=>o({kind:`attention`,item:e}),children:[(0,z.jsx)(`span`,{children:e.text}),(0,z.jsx)(Qp,{size:15})]})},e.todoId))}),d.length>3?(0,z.jsxs)(`button`,{type:`button`,onClick:()=>s(`tasks`),children:[u.tasks,` (`,d.length,`)`,(0,z.jsx)(Qp,{size:14})]}):null]}):null]}),(0,z.jsxs)(`section`,{className:`goal-overview-usage`,"aria-label":u.usage,children:[(0,z.jsx)(`h3`,{children:u.usage}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:c(`drawer.tokensShort`)}),(0,z.jsx)(`dd`,{children:Nb(t.usage?.tokens24h,c(`drawer.usageNotMeasured`),Ab)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:c(`drawer.costShort`)}),(0,z.jsx)(`dd`,{children:Nb(t.usage?.costUsd24h,c(`drawer.usageNotMeasured`),jb)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:c(`drawer.durationShort`)}),(0,z.jsx)(`dd`,{children:Nb(t.usage?.durationMs24h,c(`drawer.usageNotMeasured`),Mb)})]})]})]}),i?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{className:`goal-overview-source-note`,children:u.remote}),(0,z.jsx)(wb,{goal:t})]}):(0,z.jsx)(Lx,{active:e,goal:t,items:n,userTodos:r,onSelect:o})]})}function zx({activeTab:e,panels:t,scrollRef:n}){let[r,i]=(0,R.useState)(()=>new Set([e])),a=(0,R.useRef)({});return(0,R.useEffect)(()=>i(t=>t.has(e)?t:new Set([...t,e])),[e]),(0,R.useLayoutEffect)(()=>{let t=n.current;if(!t)return;t.scrollTop=a.current[e]??0;let r=()=>{a.current[e]=t.scrollTop};return t.addEventListener(`scroll`,r,{passive:!0}),()=>t.removeEventListener(`scroll`,r)},[e,n]),Object.keys(t).map(n=>r.has(n)||n===e?(0,z.jsx)(`div`,{className:`personal-goal-view-panel`,"data-goal-panel":n,hidden:n!==e,children:t[n]},n):null)}function Bx(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 Vx(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===`context_only_captured`||e.last_event_status===`context_only_already_captured`?{label:t(`lark.health.contextCaptured`),detail:t(`lark.health.contextCapturedDetail`),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 Hx(e){return e.history_permission_guidance?.api_document_url??null}function Ux(e,t,n){if(e instanceof Rh){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 Wx({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,A]=(0,R.useState)(``),[ee,j]=(0,R.useState)(!1),[M,te]=(0,R.useState)(null),[ne,N]=(0,R.useState)(`addressed_only`),[P,re]=(0,R.useState)(t&&r?`goal`:`manager`),[ie,ae]=(0,R.useState)(`async_inbox`),[F,oe]=(0,R.useState)(`topic_reply`),[I,se]=(0,R.useState)(``),[L,ce]=(0,R.useState)(!1),[le,ue]=(0,R.useState)({}),[de,fe]=(0,R.useState)(!1),[pe,me]=(0,R.useState)(null),[he,ge]=(0,R.useState)(null),[_e,ve]=(0,R.useState)(null),[ye,be]=(0,R.useState)(null),[xe,Se]=(0,R.useState)(!1),[Ce,we]=(0,R.useState)(`loopx-workspace-bot`),[Te,Ee]=(0,R.useState)(`feishu`),[De,Oe]=(0,R.useState)(null),[ke,Ae]=(0,R.useState)(!1),[je,Me]=(0,R.useState)(null),Ne=(0,R.useRef)(null),Pe=(0,R.useRef)(null),Fe=(0,R.useRef)(!1);async function Ie(){m(!0),g(null);try{let[e,t]=await Promise.all([c_(),__()]);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(Ux(e,o(`lark.error.configuration`),o))}finally{m(!1)}}(0,R.useEffect)(()=>{Ie()},[]),(0,R.useEffect)(()=>{if(!t||p||Fe.current||!r)return;Fe.current=!0;let e=d.find(e=>e.goal_id===r);e?Je(e):V(n.find(e=>e.goalId===r))},[d,t,n,r,p]),(0,R.useEffect)(()=>{if(!y||!x||_e){O([]),A(``),j(!1),te(null);return}let e=!1;j(!0),te(null);let t=window.setTimeout(()=>{h_(x,T).then(t=>{e||(O(t),A(e=>t.some(t=>t.chat_id===e)?e:t[0]?.chat_id??``))}).catch(t=>{e||(O([]),A(``),te(Ux(t,o(`lark.error.groupLoad`),o)))}).finally(()=>{e||j(!1)})},180);return()=>{e=!0,window.clearTimeout(t)}},[x,T,y,_e]),(0,R.useEffect)(()=>{if(!xe||!De||[`ready`,`failed`,`cancelled`].includes(De.status))return;let e=!1,t=window.setTimeout(()=>{d_(De.setup_id).then(async t=>{e||(Oe(t),t.verification_url&&Pe.current!==t.verification_url&&(Pe.current=t.verification_url,Ne.current&&!Ne.current.closed&&(Ne.current.location.href=t.verification_url)),t.status===`ready`&&(await Ie(),S(t.app_ref),ue({}),Se(!1)),t.status===`failed`&&Me(t.error??o(`lark.error.appCreate`)))}).catch(t=>{e||Me(Ux(t,o(`lark.error.setupPoll`),o))})},650);return()=>{e=!0,window.clearTimeout(t)}},[xe,De]);let Le=n.find(e=>e.goalId===C),Re=Le?.agentId?[{agentId:Le.agentId,label:Le.agentLabel??Le.agentId}]:[],B=Le?.agentLanes?.length?Le.agentLanes:Re,ze=B.some(e=>e.agentId===I),Be=[];L?Be=B.map(e=>({agentId:e.agentId,appRef:le[e.agentId]??x})):ze&&(Be=[{agentId:I,appRef:x}]);let Ve=Be.map(e=>e.agentId),He=!!_e||Be.length>0&&Be.every(e=>l.some(t=>t.app_ref===e.appRef&&t.reply_ready)),Ue=o(`lark.connect`);he?Ue=o(`lark.saveConnection`):L&&(Ue=o(`lark.connectAllAgentsAction`,{count:Ve.length}));let We=l.find(e=>e.app_ref===x),Ge=D.find(e=>e.chat_id===k),Ke=(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,_]),qe=(0,R.useMemo)(()=>d.filter(e=>Vx(e,o).state===`unverified`).length,[d,o]);function V(e){let i=e??n.find(e=>e.goalId===r)??n[0];ge(null),ve(null),re(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??``),A(``),w(i?.goalId??``),se(i?.agentId??``),ce(!1),ue({}),N(`addressed_only`),ae(`async_inbox`),oe(`topic_reply`),E(``),me(null),b(!0)}function Je(e){ge(e.goal_id),ve(e),re(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}]:[];se(e.agent_id??(r.length===1?r[0].agentId:``)),ce(!1),ue({}),N(e.capture_scope),ae(e.ingress_mode===`direct_session`?`async_inbox`:e.ingress_mode),oe(e.reply_mode),E(e.chat_name),me(null),b(!0)}function Ye(){Oe(null),Me(null),Pe.current=null,Se(!0)}async function Xe(){if(!(ke||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce))){Ae(!0),Me(null),Pe.current=null,Ne.current=window.open(window.location.href,`_blank`);try{let e=await u_({appRef:Ce,brand:Te});Oe(e)}catch(e){Ne.current?.close(),Me(Ux(e,o(`lark.error.setupStart`),o))}finally{Ae(!1)}}}async function Ze(){let e=De;if(Se(!1),Ne.current?.close(),e&&![`ready`,`failed`,`cancelled`].includes(e.status))try{await f_(e.setup_id)}catch{}}async function Qe(){if(!(!x||!C||!_e&&!Ge||P===`goal`&&Ve.length===0||de)){fe(!0),me(null);try{let e={...P===`manager`?{..._e?{connectionId:_e.connection_id}:{appRef:x,chatId:Ge.chat_id,chatName:Ge.chat_name}}:_e?{connectionId:_e.connection_id,agentId:I}:{agentBindings:Be,chatId:Ge.chat_id,chatName:Ge.chat_name},conversationKind:P,captureScope:P===`manager`?`addressed_only`:ne,goalId:C,incomingMode:ne===`configured_chat_all`?`all`:`mentions`,ingressMode:P===`manager`?`session_queue`:ie,replyMode:F},t=await v_({...e,execute:!1});if(!t.ok)throw new Rh(t.public_summary??t.blocker??o(`lark.error.bindPreview`),{error_code:t.blocker??`provider_api_failed`});let n=await v_({...e,execute:!0});if(!n.ok)throw new Rh(n.public_summary??n.blocker??o(`lark.error.bind`),{error_code:n.blocker??`provider_api_failed`});b(!1),await Ie(),i?.()}catch(e){me(Ux(e,o(`lark.error.bind`),o))}finally{fe(!1)}}}async function $e(e,t){if(ye!==t){be(t);return}try{await y_(e,t),be(null),await Ie(),i?.()}catch(e){g(Ux(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)(`button`,{"aria-label":o(`lark.closeSettings`),className:`personal-icon-button`,onClick:a,type:`button`,children:(0,z.jsx)(sh,{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)(Am,{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:Ye,type:`button`,children:[(0,z.jsx)(Vm,{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)(rm,{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:[qe>0?(0,z.jsxs)(`p`,{className:`personal-lark-route-readiness`,role:`status`,children:[(0,z.jsx)(Pm,{size:15}),o(`lark.routesUnverified`,{count:qe})]}):null,(0,z.jsxs)(`div`,{className:`personal-lark-toolbar`,children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(Km,{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:()=>V(),type:`button`,children:[(0,z.jsx)(Vm,{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`)})]}),Ke.map(e=>{let t=Vx(e,o);return(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,` · `,t.label]}),(0,z.jsx)(`small`,{children:t.detail}),t.state===`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)(vm,{size:12}),o(`lark.openEventSettings`)]}):null,Hx(e)?(0,z.jsxs)(`a`,{href:Hx(e)??void 0,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(vm,{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:e.conversation_kind===`manager`?o(`lark.managerConversation`):Bx(e.ingress_mode,o).label}),(0,z.jsx)(`small`,{children:e.conversation_kind===`manager`?o(`lark.managerConversationDescription`):e.agent_id??Bx(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:()=>Je(e),type:`button`,children:(0,z.jsx)(Xm,{size:15})}),(0,z.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,z.jsx)(ah,{size:15}),ye===e.connection_id?o(`common.confirm`):null]})]})]},e.connection_id)}),Ke.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(he?`lark.editConnection`:`lark.connectApp`)})]}),(0,z.jsx)(`button`,{"aria-label":o(`lark.closeConnection`),onClick:()=>b(!1),type:`button`,children:(0,z.jsx)(sh,{size:18})})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.conversationKind`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.conversationKind`),disabled:!!_e,value:P,onChange:e=>re(e.target.value),children:[(0,z.jsx)(`option`,{value:`manager`,children:o(`lark.managerConversation`)}),(0,z.jsx)(`option`,{value:`goal`,children:o(`lark.workerConversation`)})]})]}),P===`manager`?(0,z.jsx)(`p`,{children:o(`lark.managerConversationDescription`)}):null,_e?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.appProfile`)}),(0,z.jsx)(`div`,{children:_e.app_label})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.groupChat`)}),(0,z.jsx)(`div`,{children:_e.chat_name})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.bindGoal`)}),(0,z.jsx)(`div`,{children:_e.goal_title})]}),(0,z.jsx)(`small`,{children:o(`lark.editPreservesIdentity`)})]}):(0,z.jsxs)(z.Fragment,{children:[(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__`?Ye():(S(e.target.value),ue({}))},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`)})]}),We?.ready&&!We.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}),ee?(0,z.jsxs)(`div`,{className:`personal-lark-group-state`,role:`status`,children:[(0,z.jsx)(Am,{className:`is-spinning`,size:15}),o(`lark.groupLoading`)]}):null,!ee&&M?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:M}):null,!ee&&!M&&D.length===0?(0,z.jsx)(`div`,{className:`personal-lark-group-state`,role:`status`,children:o(`lark.groupEmpty`)}):null,!ee&&!M&&D.length>0?(0,z.jsx)(`select`,{"aria-label":o(`lark.groupChat`),onChange:e=>A(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),se(n.find(e=>e.goalId===t)?.agentId??``),ue({})},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)(Pm,{size:15}),`# `,Le?.title??Le?.goalId??`Goal`]})]}),P===`goal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.captureScope`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.captureScope`),disabled:_e?.ingress_mode===`direct_session`,onChange:e=>N(e.target.value),value:ne,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=Bx(e,o);return(0,z.jsxs)(`label`,{className:ie===e?`is-active`:``,children:[(0,z.jsx)(`input`,{"aria-label":t.label,checked:ie===e,name:`lark-agent-ingress`,onChange:()=>ae(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`),disabled:!!_e?.agent_id,onChange:e=>se(e.target.value),value:I,children:[ze?null:(0,z.jsx)(`option`,{disabled:!0,value:I,children:I?o(`lark.agentUnavailable`,{agent:I}):o(`lark.noAgentConfigured`)}),B.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`)})]}),!he&&B.length>1?(0,z.jsxs)(`label`,{"aria-label":o(`lark.connectAllAgents`),className:`personal-lark-check`,children:[(0,z.jsx)(`input`,{checked:L,onChange:e=>ce(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:B.length})})]})]}):null,!he&&L&&B.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:B.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=>ue(n=>({...n,[e.agentId]:t.target.value})),value:le[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,L&&Be.length>0&&!He?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:o(`lark.agentAppPermissions`)}):null,Ve.length===0?(0,z.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:o(`lark.selectRegisteredAgent`)}):null]}):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:F,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)(om,{size:15}),o(`lark.cardinality`)]}),pe?(0,z.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:pe}):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||!_e&&(!We?.reply_ready||!k)||P===`goal`&&(!He||Ve.length===0)||!C||de,onClick:()=>void Qe(),type:`button`,children:[de?(0,z.jsx)(Am,{className:`is-spinning`,size:15}):null,Ue]})]})]})}):null,xe?(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 Ze(),type:`button`,children:(0,z.jsx)(sh,{size:18})})]}),De?(0,z.jsxs)(`div`,{className:`personal-lark-setup-progress`,children:[(0,z.jsx)(`span`,{className:`personal-lark-setup-icon is-${De.status}`,children:De.status===`ready`?(0,z.jsx)(om,{size:22}):(0,z.jsx)(Am,{className:De.status===`failed`?``:`is-spinning`,size:22})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:De.status===`ready`?o(`lark.appCreated`):De.status===`failed`?o(`lark.appCreateFailed`):o(`lark.waitingFeishu`)}),(0,z.jsx)(`p`,{children:De.status===`waiting_for_feishu`?o(`lark.waitingFeishuDescription`):De.status===`starting`?o(`lark.waitingLink`):De.error})]}),De.verification_url?(0,z.jsxs)(`a`,{href:De.verification_url,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(vm,{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=>we(e.target.value),placeholder:`loopx-workspace-bot`,value:Ce})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.region`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.region`),onChange:e=>Ee(e.target.value),value:Te,children:[(0,z.jsx)(`option`,{value:`feishu`,children:`Feishu`}),(0,z.jsx)(`option`,{value:`lark`,children:`Lark`})]})]}),Ce&&!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce)?(0,z.jsx)(`p`,{className:`personal-notification-error`,children:o(`lark.profileValidation`)}):null]}),je?(0,z.jsx)(`p`,{className:`personal-notification-error`,children:je}):null,(0,z.jsxs)(`footer`,{children:[(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void Ze(),type:`button`,children:o(`lark.cancel`)}),De?null:(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:ke||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce),onClick:()=>void Xe(),type:`button`,children:[ke?(0,z.jsx)(Am,{className:`is-spinning`,size:15}):(0,z.jsx)(vm,{size:15}),o(`lark.continueFeishu`)]})]})]})}):null]})}function Gx(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function Kx(e,t,n){let r=Gx(t),i=Gx(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 qx(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 Jx(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 Yx({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,z.jsxs)(`div`,{className:`personal-report-schedule`,children:[(0,z.jsxs)(`label`,{className:`is-boolean`,htmlFor:e,children:[(0,z.jsx)(`span`,{children:a?`按日历汇报`:`Calendar reports`}),(0,z.jsx)(`input`,{id:e,type:`checkbox`,role:`switch`,checked:!!o,disabled:!r,onChange:e=>e.target.checked?p({}):r?.(null)})]}),o?(0,z.jsxs)(z.Fragment,{children:[d?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{htmlFor:`${e}-frequency`,children:[(0,z.jsx)(`span`,{children:a?`频率`:`Frequency`}),(0,z.jsxs)(`select`,{id:`${e}-frequency`,value:c.FREQ,disabled:!r,onChange:e=>p({FREQ:e.target.value}),children:[(0,z.jsx)(`option`,{value:`DAILY`,children:a?`每天`:`Daily`}),(0,z.jsx)(`option`,{value:`WEEKLY`,children:a?`每周`:`Weekly`})]})]}),c.FREQ===`WEEKLY`&&(0,z.jsxs)(`label`,{htmlFor:`${e}-day`,children:[(0,z.jsx)(`span`,{children:a?`星期`:`Weekday`}),(0,z.jsx)(`select`,{id:`${e}-day`,value:c.BYDAY,disabled:!r,onChange:e=>p({BYDAY:e.target.value}),children:l.map((e,t)=>(0,z.jsx)(`option`,{value:e,children:f[t]},e))})]}),(0,z.jsxs)(`label`,{htmlFor:`${e}-time`,children:[(0,z.jsxs)(`span`,{children:[a?`当地时间`:`Local time`,` (`,n,`)`]}),(0,z.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,z.jsx)(`p`,{role:`alert`,children:a?`此计划需在 JSON 模式中编辑;当前内容已保留。`:`Edit this schedule in JSON mode; its current value is preserved.`}),(0,z.jsx)(`p`,{children:a?`由现有唤醒检查到期计划;实际送达以回执为准。`:`Existing wakes check the schedule; delivery is confirmed by its receipt.`})]}):(0,z.jsx)(`p`,{children:a?`未设置日历计划;保持阶段结束时汇报。`:`No calendar schedule; report at validated stage boundaries.`})]})}function Xx({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,z.jsx)(Yx,{id:n,value:i,timezone:a,onChange:r?e=>r(t.key,e):void 0});if(t.input_kind===`boolean`)return(0,z.jsxs)(`label`,{className:`is-boolean`,htmlFor:n,children:[(0,z.jsx)(`span`,{children:o}),(0,z.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,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:o}),(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))]})]});if(t.input_kind===`string_list`)return(0,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:o}),(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(` -`):``})]});let c=t.input_kind===`number`;return(0,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:o}),(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:``})]})}function Zx({copy:e={},disabled:t=!1,editor:n,enabledAction:r,omitKeys:i=[],onChange:a,value:o}){let s=(0,R.useId)(),c=new Set(i);return(0,z.jsx)(`fieldset`,{className:`personal-capability-fields`,disabled:t,children:n.fields.filter(e=>!c.has(e.key)).map(t=>{let n=(0,z.jsx)(Xx,{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,z.jsxs)(`div`,{className:`personal-capability-enabled-row`,children:[n,r]},t.key):n})})}var Qx={en:{manager_runtime:{displayName:`Manager runtime`,description:`Selects the persistent host-tool profile used by owner manager conversations.`},steward_executor:{displayName:`Steward executor`,description:`Guides the steward executor, model, and selection boundary for this machine. A pinned route blocks substitution; a flexible pool permits only authorized fallback.`},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":{manager_runtime:{displayName:`管家 Runtime`,description:`选择管家会话持续生效的宿主工具模式。`},steward_executor:{displayName:`管家执行器`,description:`配置本机管家的执行器、模型与选择边界;锁定路径禁止替代,灵活池只允许在已授权范围内回退。`},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 绑定。`}}},$x={en:{runtime_profile:{label:`Runtime profile`,description:`Restricted keeps scoped LoopX reads only. Trusted owner enables normal host tools while protected operations retain separate checks.`},selection_policy:{label:`Selection policy`,description:`Preferred allows an explicit user choice; pinned rejects another executor; flexible permits fallback only inside the eligible pool.`},executor_endpoint:{label:`Primary steward executor`,description:`The preferred or pinned executor for this machine. In a flexible pool it is tried first when available.`},eligible_endpoints:{label:`Flexible eligible executors`,description:`One authorized executor per line. Use only with flexible selection and include the primary executor.`},executor_model:{label:`Model`,description:`Optional model for the selected executor. Leave blank to keep the executor's own default.`},executor_reasoning_effort:{label:`Reasoning effort`,description:`Optional reasoning effort for the selected executor. Leave blank to keep the executor's own default.`},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.`},wait_for_ci:{label:`Wait for CI`,description:`Disable to use local validation without querying or waiting for CI. Merge authority is unchanged.`},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":{runtime_profile:{label:`运行模式`,description:`restricted 仅使用受限 LoopX 读取;trusted_owner 开放常规宿主工具,但受保护操作仍单独校验。`},selection_policy:{label:`选择策略`,description:`preferred 允许用户显式改选;pinned 拒绝其他执行器;flexible 只在已授权资源池内回退。`},executor_endpoint:{label:`首选管家执行器`,description:`本机首选或锁定的执行器;灵活池模式下优先尝试它。`},eligible_endpoints:{label:`灵活池可用执行器`,description:`每行一个已授权执行器,仅用于 flexible;必须包含首选执行器。`},executor_model:{label:`模型`,description:`所选执行器使用的模型,可留空;留空表示沿用执行器自身的默认模型。`},executor_reasoning_effort:{label:`推理档位`,description:`所选执行器使用的推理档位,可留空;留空表示沿用执行器自身的默认档位。`},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。`},wait_for_ci:{label:`等待 CI`,description:`关闭后使用本地验证,不查询或等待 CI;不改变合并权限。`},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 eS(e,t){let n=Qx[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 tS(e){return $x[e]}Object.freeze(Object.keys(Qx.en).sort());function nS(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 rS({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 iS({source:e,t}){return e?(0,z.jsxs)(`p`,{className:`personal-capability-effective-source`,children:[(0,z.jsx)(Zm,{"aria-hidden":!0,size:15}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:t(`capabilities.effectiveSource`)}),t(`capabilities.source.${e}`)]})]}):null}function aS({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)(ih,{"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 oS(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 sS(e,t){return[...e].sort((e,n)=>{let r=oS(e)-oS(n);if(r!==0)return r;let i=eS(e,t),a=eS(n,t);return i.display_name.localeCompare(a.display_name,t)||e.capability_id.localeCompare(n.capability_id)})}function cS({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`,tabIndex:0,children:sS(e,t).map(e=>{let o=eS(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.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:o.display_name})}),(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 lS({capability:e,locale:t,source:n}){let{t:r}=Ji(),i=eS(e,t);return(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`span`,{className:`personal-settings-icon`,children:(0,z.jsx)(Qm,{"aria-hidden":!0,size:18})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`personal-capability-heading-row`,children:[(0,z.jsx)(`h2`,{children:i.display_name}),(0,z.jsx)(iS,{source:n,t:r})]}),e.context_contribution&&(0,z.jsxs)(`details`,{className:`personal-capability-help`,"data-testid":`capability-context-phases`,children:[(0,z.jsx)(`summary`,{children:t===`zh-CN`?`主 Agent 协作指导`:`Coordinator workflow guidance`}),(0,z.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,z.jsx)(`dl`,{children:e.context_contribution.supported_phases.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:(0,z.jsx)(`code`,{children:e})}),(0,z.jsx)(`dd`,{children:uS[e][t===`zh-CN`?`zh`:`en`]})]},e))}),(0,z.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,z.jsxs)(`details`,{className:`personal-capability-help`,children:[(0,z.jsx)(`summary`,{children:t===`zh-CN`?`配置说明`:`Configuration help`}),(0,z.jsx)(`p`,{children:i.description}),(0,z.jsx)(`dl`,{children:e.configuration_editor.fields.map(e=>{let n=tS(t)[e.key],r=n?.description??e.description;return r?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n?.label??e.label}),(0,z.jsx)(`dd`,{children:r})]},e.key):null})})]},e.capability_id)]})]})}var uS={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 dS({callbacks:e,goalId:t,notification:n,onChanged:r}){let{t:i}=Ji(),[a,o]=(0,R.useState)(!1),[s,c]=(0,R.useState)(null);async function l(n){if(e.onToggleGoalAutoNotify){o(!0),c(null);try{let a=await e.onToggleGoalAutoNotify({autoNotify:n,goalId:t});if(!a.ok){c(a.public_summary??a.blocker??i(`notifications.setupFailed`));return}r()}catch(e){c(e instanceof Error?e.message:i(`notifications.setupFailed`))}finally{o(!1)}}}return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{className:`personal-notification-toggle`,children:[(0,z.jsx)(`input`,{checked:n?.humanGateAutoNotifyEnabled??!1,disabled:a||n?.configured!==!0||!e.onToggleGoalAutoNotify,onChange:e=>void l(e.target.checked),type:`checkbox`}),(0,z.jsx)(`span`,{children:i(`notifications.autoNotify`)}),a?(0,z.jsx)(Am,{"aria-hidden":!0,className:`is-spinning`,size:14}):null]}),s?(0,z.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:s}):null]})}function fS({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),[c,l]=(0,R.useState)(`guided`),[u,d]=(0,R.useState)(``),f=(0,R.useMemo)(()=>n?qx(n.configuration_editor,u):null,[n,u]),p=c===`guided`||f!==null;(0,R.useEffect)(()=>{l(`guided`),d(``),a({busy:null,draft:Kx(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 Zg(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=Kx(n.configuration_editor,i.draft,n.default),o=await Qg(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`?Jx(r.draft,e,t):{...r.draft,[e]:t},preview:null})),s(null)}function _(e){if(!n||i.busy)return;d(e);let t=qx(n.configuration_editor,e);a(e=>({...e,preview:null,draft:t?Kx(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 pS({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)(ih,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:i(n.host_capacity_pending?`capabilities.hostCapacityPartialWrite`:`capabilities.partialWrite`)}),(0,z.jsx)(`p`,{children:i(n.host_capacity_pending?`capabilities.hostCapacityPartialWriteDescription`:`capabilities.partialWriteDescription`)}),(0,z.jsx)(`small`,{children:n.recommended_action})]}),(0,z.jsxs)(`button`,{onClick:t,type:`button`,children:[(0,z.jsx)(Um,{"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}`)}),r.codex_host_capacity?(0,z.jsx)(`span`,{children:i(r.codex_host_capacity.write_required?`drawer.subagentHostCapacityRaise`:`drawer.subagentHostCapacityReady`,{configured:r.codex_host_capacity.configured_children??i(`drawer.subagentHostCapacityImplicit`),required:r.codex_host_capacity.required_children})}):null,(0,z.jsx)(`small`,{children:i(`capabilities.previewLocked`)})]}):null]})}function mS({callbacks:e,catalog:t,goalId:n,notification:r,onApplied:i,onNotificationChanged:a}){let{locale:o,t:s}=Ji(),c=(0,R.useMemo)(()=>sS(t.capabilities,o),[t.capabilities,o]),[l,u]=(0,R.useState)(()=>c[0]?.capability_id??``),d=(0,R.useMemo)(()=>c.find(e=>e.capability_id===l)??c[0],[c,l]),f=(0,R.useMemo)(()=>d?eS(d,o):void 0,[o,d]),{apply:p,changeDraft:m,changeJson:h,changeMode:g,editorMode:_,jsonDraft:v,jsonValid:y,error:b,mutation:x,preview:S}=fS({goalId:n,onApplied:i,selected:f,t:s}),{busy:C,draft:w,partialWrite:T,preview:E}=x;if(!d||!f)return(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:s(`capabilities.empty`)});let D=f.available_scopes.includes(`goal`),O=nS(f,`goal`),k=f.configuration_editor.read_only_reason??s(D?`capabilities.previewOnly`:`capabilities.machineOnly`);async function A(){if(!f||!O||C||!y)return;let e=Kx(f.configuration_editor,w,f.default);await S(e)}async function ee(){!O||C||await S(null)}return(0,z.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,z.jsx)(cS,{capabilities:t.capabilities,locale:o,onSelect:u,scope:`goal`,selectedCapabilityId:f.capability_id,t:s}),(0,z.jsxs)(`article`,{"aria-label":f.display_name,className:`personal-capability-detail`,tabIndex:0,children:[(0,z.jsx)(lS,{capability:d,locale:o,source:f.effective_configuration?.source}),(0,z.jsx)(aS,{available:O,t:s,description:k}),f.capability_id===`lark_event_inbox`?(0,z.jsxs)(`section`,{className:`personal-capability-linked-setting`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:s(`capabilities.larkInboxNotificationSetting`)}),(0,z.jsx)(`p`,{children:s(`capabilities.larkInboxNotificationDescription`)})]}),(0,z.jsx)(dS,{callbacks:e,goalId:n,notification:r,onChanged:a})]}):null,O?(0,z.jsxs)(z.Fragment,{children:[_===`json`||!f.configuration_editor.fields.some(e=>e.key===`enabled`&&e.input_kind===`boolean`)?(0,z.jsx)(`div`,{className:`personal-capability-editor-mode`,children:(0,z.jsxs)(`button`,{disabled:!!C||!y,onClick:g,type:`button`,children:[(0,z.jsx)(pm,{"aria-hidden":!0,size:14}),s(_===`guided`?`machine.editJson`:`machine.backToForm`)]})}):null,_===`guided`?(0,z.jsx)(`section`,{className:`personal-capability-field-summary`,children:(0,z.jsx)(Zx,{disabled:!!C,copy:tS(o),editor:f.configuration_editor,onChange:m,value:w,enabledAction:(0,z.jsxs)(`button`,{className:`personal-capability-edit-json`,onClick:g,type:`button`,children:[(0,z.jsx)(pm,{"aria-hidden":!0,size:14}),s(`machine.editJson`)]})})}):(0,z.jsxs)(`label`,{className:`personal-capability-json-editor`,htmlFor:`goal-configuration-json`,children:[(0,z.jsx)(`span`,{children:s(`capabilities.jsonConfiguration`)}),(0,z.jsx)(`textarea`,{id:`goal-configuration-json`,"aria-describedby":`goal-configuration-json-help`,disabled:!!C,onChange:e=>h(e.target.value),rows:12,spellCheck:!1,value:v}),(0,z.jsx)(`small`,{id:`goal-configuration-json-help`,children:s(`capabilities.jsonHelp`)}),y?null:(0,z.jsx)(`span`,{className:`personal-machine-validation`,role:`alert`,children:s(`capabilities.jsonInvalid`)})]})]}):null,(0,z.jsx)(pS,{mutationError:b,onApplied:i,partialWrite:T,preview:E}),O?(0,z.jsxs)(`footer`,{className:`personal-capability-actions`,children:[f.current&&f.available_scopes.includes(`machine`)?(0,z.jsx)(`button`,{disabled:!!C||!y,onClick:()=>void ee(),type:`button`,children:s(`capabilities.restoreInheritance`)}):null,(0,z.jsx)(`button`,{disabled:!!C||!y,onClick:()=>void A(),type:`button`,children:s(C===`preview`?`common.loading`:`capabilities.previewChanges`)}),(0,z.jsx)(`button`,{className:`is-primary`,disabled:!!C||!E||!y,onClick:()=>void p(),type:`button`,children:s(C===`apply`?`common.loading`:`capabilities.applyPreview`)})]}):null,(0,z.jsx)(rS,{values:[{label:s(`capabilities.goalValue`),value:f.current},{label:s(f.machine_current?`capabilities.machineValue`:`capabilities.defaultValue`),value:f.machine_current??f.default}],t:s},d.capability_id)]})]})}function hS({callbacks:e,goalId:t,notification:n,onChanged:r}){let{t:i}=Ji(),[a,o]=(0,R.useState)(null),[s,c]=(0,R.useState)(null),[l,u]=(0,R.useState)(!1);function d(){t&&(u(!0),c(null),Xg(t).then(o).catch(e=>c(e instanceof Error?e.message:i(`capabilities.loadFailed`))).finally(()=>u(!1)))}return(0,R.useEffect)(d,[t]),t?l&&!a?(0,z.jsxs)(`p`,{"aria-live":`polite`,className:`personal-capability-empty`,children:[(0,z.jsx)(Am,{className:`personal-spin`,size:18}),i(`capabilities.loading`)]}):s?(0,z.jsxs)(`section`,{className:`personal-capability-error`,role:`alert`,children:[(0,z.jsx)(ih,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:i(`capabilities.loadFailed`)}),(0,z.jsx)(`small`,{children:s})]}),(0,z.jsxs)(`button`,{onClick:d,type:`button`,children:[(0,z.jsx)(Um,{"aria-hidden":!0,size:15}),i(`capabilities.retry`)]})]}):a?(0,z.jsxs)(`section`,{className:`personal-capability-settings`,"data-revision":a.revision,children:[(0,z.jsxs)(`details`,{className:`personal-capability-scope-note`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(Zm,{"aria-hidden":!0,size:17}),i(`capabilities.atomicOverride`)]}),(0,z.jsx)(`p`,{children:i(`capabilities.atomicOverrideDescription`)})]}),(0,z.jsx)(mS,{callbacks:e,catalog:a.capability_catalog,goalId:t,notification:n,onApplied:d,onNotificationChanged:r})]}):null:(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:i(`capabilities.chooseGoal`)})}function gS(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function _S(e,t){let n=t?.machine_namespace;return n?e?.machine_configuration?.namespaces[n]:void 0}function vS(e,t,n){let r={...gS(e.default),...gS(t),...n};return e.capability_id===`steward_executor`&&(Object.hasOwn(n,`selection_policy`)||Object.hasOwn(n,`eligible_endpoints`))&&(r.schema_version=gS(e.default).schema_version),r}function yS(e,t){for(let n of e.configuration_editor.fields){let e=t[n.key];if(n.required&&(e==null||e===``))return!1}if(e.capability_id===`periodic_report`&&t.enabled===!0)return!!(String(t.profile_preset??``).trim()&&String(t.route_ref??``).trim()&&String(t.timezone??``).trim());if(e.capability_id===`steward_executor`){let e=String(t.selection_policy??`preferred`),n=String(t.executor_endpoint??``),r=Array.isArray(t.eligible_endpoints)?t.eligible_endpoints.map(e=>String(e)):[];return e===`flexible`?r.length>0&&r.includes(n)&&new Set(r).size===r.length:r.length===0}return!0}function bS(e){try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}function xS(e){return e?e===`absent`?e:e.replace(/^sha256:/,``).slice(0,12):`—`}function SS(){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=(0,R.useMemo)(()=>sS(n?.capability_catalog.capabilities??[],e),[n,e]),D=n?.invalid_namespaces[0],O=E.find(e=>e.capability_id===i)??(D?E.find(e=>e.machine_namespace===D):void 0)??E.find(e=>nS(e,`machine`))??E[0],k=O?eS(O,e):void 0,A=_S(n,k),ee=!!(k?.machine_namespace&&A),j=!!(k&&nS(k,`machine`)),M=(0,R.useMemo)(()=>bS(c),[c]),te=k?u===`json`?M:vS(k,A,o):null,ne=!!(k&&(u===`json`?M:yS(k,te??{})));async function N(){r(await Yg())}(0,R.useEffect)(()=>{let e=!0;return Yg().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,R.useEffect)(()=>{if(!k)return;let e=_S(n,k),t=Kx(k.configuration_editor,e??k.default,k.default),r=vS(k,e,t);s(t),l(JSON.stringify(r,null,2)),d(j?`guided`:`json`),p(null),h(`upsert`),y(null)},[n,i,e]);function P(e,t){s(n=>k?.capability_id===`periodic_report`?Jx(n,e,t):{...n,[e]:t}),p(null),h(`upsert`),C(null),T(null)}function re(e){if(k){if(e===`json`)l(JSON.stringify(vS(k,A,o),null,2));else if(M)s(Kx(k.configuration_editor,M,k.default));else{C(t(`machine.jsonInvalid`));return}d(e),p(null),h(`upsert`),C(null)}}async function ie(){if(!(!j||!k?.machine_namespace||!te||!ne||b)){x(`preview`),C(null),T(null);try{h(`upsert`),p(await $g(k.machine_namespace,te))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function ae(){if(!(!j||!k?.machine_namespace||!ee||b)){x(`preview`),C(null),T(null);try{h(`remove`),p(await t_(k.machine_namespace))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function F(){if(!j||!k?.machine_namespace||!f||b||m===`upsert`&&!te)return;x(`apply`),C(null);let e=m;try{let n=e===`remove`?await n_(k.machine_namespace,f.plan_revision):await e_(k.machine_namespace,te,f.plan_revision);_(n),p(null),h(`upsert`),y(null),await N(),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 oe(){if(!(!g?.transaction_id||b)){x(`rollback-preview`),C(null);try{y(await r_(g.transaction_id))}catch(e){C(e instanceof Error?e.message:t(`machine.rollbackError`))}finally{x(null)}}}async function I(){if(!(!g?.transaction_id||!v||b)){x(`rollback`),C(null);try{await i_(g.transaction_id,v.plan_revision),_(null),y(null),p(null),await N(),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`)}):k?(0,z.jsxs)(`section`,{className:`personal-capability-settings`,"data-revision":n?.revision,children:[(0,z.jsxs)(`details`,{className:`personal-capability-scope-note`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(Zm,{"aria-hidden":!0,size:17}),t(`machine.liveDefault`)]}),(0,z.jsx)(`p`,{children:t(`machine.liveDefaultDescription`)})]}),(0,z.jsxs)(`div`,{className:`personal-capability-body`,children:[n?.status===`invalid`?(0,z.jsxs)(`section`,{className:`personal-machine-error`,"data-testid":`machine-invalid-repair`,role:`alert`,children:[(0,z.jsx)(`strong`,{children:t(`machine.invalidStoredConfiguration`)}),(0,z.jsx)(`p`,{children:t(`machine.invalidStoredConfigurationDescription`)})]}):null,(0,z.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,z.jsx)(cS,{capabilities:E,locale:e,onSelect:a,scope:`machine`,selectedCapabilityId:k.capability_id,t}),(0,z.jsxs)(`article`,{"aria-label":k.display_name,className:`personal-capability-detail`,tabIndex:0,children:[(0,z.jsx)(lS,{capability:O,locale:e,source:k.available_scopes.includes(`machine`)?ee?`machine_default`:`capability_default`:void 0}),(0,z.jsx)(aS,{available:j,t,description:k.available_scopes.includes(`machine`)?t(`machine.editorUnavailableDescription`):t(`machine.goalOnly`)}),k.capability_id===`periodic_report`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(Zm,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:A?.schedule?e===`zh-CN`?`日历与阶段汇报`:`Calendar and stage reports`:t(`machine.periodicReportActivation`)}),(0,z.jsx)(`p`,{children:A?.schedule?A.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,k.capability_id===`change_quality_qualification`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(Zm,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.changeQualityActivation`)}),(0,z.jsx)(`p`,{children:t(`machine.changeQualityActivationDescription`)})]})]}):null,k.capability_id===`todo_replan_cadence`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(Zm,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.replanCadenceActivation`)}),(0,z.jsx)(`p`,{children:t(`machine.replanCadenceActivationDescription`)})]})]}):null,k.capability_id===`pull_request_review`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(Zm,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e===`zh-CN`?`只改变队列排序`:`Queue ordering only`}),(0,z.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,j?(0,z.jsxs)(z.Fragment,{children:[u===`json`||!k.configuration_editor.fields.some(e=>e.key===`enabled`&&e.input_kind===`boolean`)?(0,z.jsx)(`div`,{className:`personal-capability-editor-mode`,children:(0,z.jsxs)(`button`,{onClick:()=>re(u===`guided`?`json`:`guided`),type:`button`,children:[(0,z.jsx)(pm,{"aria-hidden":!0,size:14}),t(u===`guided`?`machine.editJson`:`machine.backToForm`)]})}):null,u===`guided`?(0,z.jsxs)(`section`,{className:`personal-capability-field-summary`,children:[(0,z.jsx)(Zx,{copy:tS(e),disabled:!!b,editor:k.configuration_editor,onChange:P,value:o,enabledAction:(0,z.jsxs)(`button`,{className:`personal-capability-edit-json`,onClick:()=>re(`json`),type:`button`,children:[(0,z.jsx)(pm,{"aria-hidden":!0,size:14}),t(`machine.editJson`)]})}),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`)}),M?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)(om,{"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:xS(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:xS(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?I():oe()),type:`button`,children:[(0,z.jsx)(Wm,{"aria-hidden":!0,size:15}),t(b===`rollback`||b===`rollback-preview`?`common.loading`:v?`machine.confirmRollback`:`machine.previewRollback`)]})]}):null,j?(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)(rh,{"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 F(),type:`button`,children:t(b===`apply`?`common.loading`:`machine.applyPreview`)})]}):null,k.available_scopes.includes(`machine`)?(0,z.jsx)(rS,{values:[{label:t(`machine.currentValue`),value:A},{label:t(`capabilities.defaultValue`),value:k.default}],t},k.capability_id):null]})]})]})]}):(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:t(`machine.capabilityEmpty`)})}function CS(e,t){return t(e===`invalid`?`machine.credentialInvalid`:e===`configured`?`machine.credentialConfigured`:`machine.credentialAbsent`)}function wS(e,t){return t(e===`machine_store`?`machine.credentialSourceMachine`:e===`service_environment`?`machine.credentialSourceEnvironment`:`machine.credentialSourceUnset`)}function TS(){let{t:e}=Ji(),[t,n]=(0,R.useState)(null),[r,i]=(0,R.useState)(``),[a,o]=(0,R.useState)(``),[s,c]=(0,R.useState)(``),[l,u]=(0,R.useState)(null),[d,f]=(0,R.useState)(null),p=(0,R.useCallback)(async()=>{c(`load`);try{let e=await qg();n(e),o(String(e.base_url.value??``))}catch(t){u(t instanceof Error?t.message:e(`machine.credentialError`))}finally{c(``)}},[e]);(0,R.useEffect)(()=>{p()},[p]);async function m(t,r){c(`store`),u(null),f(null);try{let e=await Jg(t);n(e),o(String(e.base_url.value??``)),i(``),f(r)}catch(t){u(t instanceof Error?t.message:e(`machine.credentialError`))}finally{c(``)}}if(!t&&s===`load`)return(0,z.jsx)(`div`,{className:`personal-machine-loading`,role:`status`,children:e(`common.loading`)});let h=t?`${CS(t.provider_key.configured?`configured`:`absent`,e)} · ${wS(t.provider_key.source,e)}`:``,g=t?`${t.base_url.value??e(`machine.credentialAbsent`)} · ${wS(t.base_url.source,e)}`:``;return(0,z.jsxs)(`section`,{className:`personal-operator-credential`,"data-testid":`operator-credential-settings`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(Em,{"aria-hidden":!0,size:17}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e(`machine.credentialTitle`)}),(0,z.jsx)(`p`,{children:e(`machine.credentialDescription`)})]}),(0,z.jsx)(`span`,{className:`personal-operator-credential-status`,children:t?CS(t.status,e):e(`common.loading`)})]}),t?(0,z.jsxs)(`dl`,{className:`personal-operator-credential-readback`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e(`machine.credentialApiKey`)}),(0,z.jsx)(`dd`,{children:h})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e(`machine.credentialFingerprint`)}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:t.provider_key.fingerprint??e(`common.none`)})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e(`machine.credentialBaseUrl`)}),(0,z.jsx)(`dd`,{children:g})]})]}):null,t?.status===`invalid`&&t.repair?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:t.repair}):null,(0,z.jsxs)(`label`,{htmlFor:`operator-credential-api-key`,children:[(0,z.jsx)(`span`,{children:e(`machine.credentialApiKey`)}),(0,z.jsx)(`input`,{autoComplete:`off`,disabled:!!s,id:`operator-credential-api-key`,onChange:e=>i(e.target.value),placeholder:e(`machine.credentialApiKeyPlaceholder`),type:`password`,value:r})]}),(0,z.jsxs)(`label`,{htmlFor:`operator-credential-base-url`,children:[(0,z.jsx)(`span`,{children:e(`machine.credentialBaseUrl`)}),(0,z.jsx)(`input`,{autoComplete:`off`,disabled:!!s,id:`operator-credential-base-url`,onChange:e=>o(e.target.value),placeholder:e(`machine.credentialBaseUrlPlaceholder`),type:`text`,value:a})]}),l?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:l}):null,d?(0,z.jsxs)(`p`,{className:`personal-machine-notice`,role:`status`,"aria-live":`polite`,children:[(0,z.jsx)(om,{"aria-hidden":!0,size:16}),d]}):null,(0,z.jsxs)(`footer`,{className:`personal-operator-credential-actions`,children:[(0,z.jsx)(`button`,{className:`is-primary`,disabled:!!s||!r.trim()&&!a.trim(),onClick:()=>void m({...r.trim()?{provider_key:r}:{},...a.trim()?{base_url:a}:{}},e(`machine.credentialStored`)),type:`button`,children:e(s===`store`?`common.loading`:`machine.credentialStore`)}),(0,z.jsxs)(`button`,{disabled:!!s||t?.provider_key.configured!==!0,onClick:()=>void m({clear_provider_key:!0},e(`machine.credentialCleared`)),type:`button`,children:[(0,z.jsx)(rh,{"aria-hidden":!0,size:15}),e(`machine.credentialClearKey`)]}),(0,z.jsxs)(`button`,{disabled:!!s||t?.base_url.configured!==!0,onClick:()=>void m({clear_base_url:!0},e(`machine.credentialCleared`)),type:`button`,children:[(0,z.jsx)(rh,{"aria-hidden":!0,size:15}),e(`machine.credentialClearUrl`)]})]}),(0,z.jsxs)(`details`,{className:`personal-capability-scope-note`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(Zm,{"aria-hidden":!0,size:17}),e(`machine.credentialTitle`)]}),(0,z.jsx)(`p`,{children:e(`machine.credentialBoundary`)})]})]})}var ES={appearance:Lm,capabilities:Qm,language:Dm,lark:Xm,machine:Jm,provider:Em};function DS({callbacks:e,focusGoalConnection:t=!1,goals:n,initialGoalId:r,initialTab:i=`lark`,goalNotifications:a,onChanged:o,onClose:s,onThemeChange:c,theme:l}){let{locale:u,setLocale:d,t:f}=Ji(),[p,m]=(0,R.useState)(i),h=(0,R.useRef)(null);(0,R.useEffect)(()=>{let e=h.current;if(!e)return;let t=()=>{if(e.scrollWidth<=e.clientWidth)return;let t=e.querySelector(`[aria-current="page"]`);if(!t)return;let n=e.getBoundingClientRect(),r=t.getBoundingClientRect(),i=r.leftn.right?r.right-n.right:0;i&&(e.scrollLeft+=i)};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[p]);let g=[...r?[{key:`capabilities`,label:f(`capabilities.title`)}]:[],{key:`provider`,label:f(`settings.modelProvider`)},{key:`machine`,label:f(`settings.globalCapabilities`)},{key:`lark`,label:`Lark`},{key:`appearance`,label:f(`settings.appearance`)},{key:`language`,label:f(`settings.language`)}],_=[{label:f(`settings.languageEnglish`),value:`en`},{label:f(`settings.languageSimplifiedChinese`),value:`zh-CN`}],v={appearance:{title:f(`settings.appearance`)},capabilities:{title:f(`capabilities.title`)},language:{title:f(`settings.language`)},lark:{title:`Lark`},machine:{title:f(`settings.globalCapabilities`)},provider:{title:f(`settings.modelProvider`)}}[p];return(0,z.jsxs)(`section`,{"aria-label":f(`settings.title`),className:`personal-settings-page`,"data-pw-theme":l,children:[(0,z.jsxs)(`aside`,{className:`personal-settings-sidebar`,children:[(0,z.jsxs)(`button`,{autoFocus:!0,className:`personal-settings-back`,onClick:s,type:`button`,children:[(0,z.jsx)(Zp,{size:17}),(0,z.jsx)(`span`,{children:f(`settings.back`)})]}),(0,z.jsx)(`div`,{className:`personal-settings-title`,children:(0,z.jsx)(`strong`,{children:f(`settings.title`)})}),(0,z.jsx)(`nav`,{"aria-label":f(`settings.categories`),className:`personal-settings-tabs`,ref:h,children:g.map(e=>{let t=ES[e.key];return(0,z.jsxs)(`button`,{"aria-current":p===e.key?`page`:void 0,onClick:()=>m(e.key),type:`button`,children:[(0,z.jsx)(t,{size:17}),(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:e.label})})]},e.key)})})]}),(0,z.jsxs)(`main`,{className:`personal-settings-body`,children:[(0,z.jsx)(`header`,{className:`personal-settings-header`,children:(0,z.jsx)(`div`,{children:(0,z.jsx)(`h1`,{children:v.title})})}),p===`lark`?(0,z.jsx)(Wx,{embedded:!0,focusGoalConnection:t,goals:n,initialGoalId:r,onChanged:o,onClose:s}):null,p===`provider`?(0,z.jsx)(`div`,{className:`personal-provider-settings`,children:(0,z.jsx)(TS,{})}):null,p===`machine`?(0,z.jsx)(SS,{}):null,p===`capabilities`?(0,z.jsx)(hS,{callbacks:e,goalId:r,notification:a.find(e=>e.goalId===r),onChanged:o}):null,p===`appearance`?(0,z.jsx)(`section`,{className:`personal-detail-card personal-appearance-settings`,children:(0,z.jsxs)(`div`,{className:`personal-settings-choice-group`,role:`radiogroup`,"aria-label":f(`settings.workspaceTheme`),children:[(0,z.jsxs)(`button`,{"aria-checked":l===`loopx`,onClick:()=>c(`loopx`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-loopx`}),(0,z.jsx)(`strong`,{children:f(`settings.themeLoopx`)})]}),(0,z.jsxs)(`button`,{"aria-checked":l===`paper`,onClick:()=>c(`paper`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-paper`}),(0,z.jsx)(`strong`,{children:f(`settings.themeDefault`)})]}),(0,z.jsxs)(`button`,{"aria-checked":l===`brutal`,onClick:()=>c(`brutal`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-brutal`}),(0,z.jsx)(`strong`,{children:f(`settings.themeHighContrast`)})]})]})}):null,p===`language`?(0,z.jsx)(`section`,{className:`personal-settings-card`,children:(0,z.jsx)(`div`,{"aria-label":f(`settings.language`),className:`personal-language-options`,role:`radiogroup`,children:_.map(e=>(0,z.jsxs)(`button`,{"aria-checked":u===e.value,className:u===e.value?`is-selected`:``,onClick:()=>d(e.value),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:e.label})}),u===e.value?(0,z.jsx)(om,{"aria-hidden":!0,size:17}):null]},e.value))})}):null]})]})}var OS=`loopx-pw-theme`,kS=`loopx`;function AS(){try{let e=window.localStorage.getItem(OS);return e===`loopx`||e===`paper`||e===`brutal`?e:kS}catch{return kS}}function jS(e){try{window.localStorage.setItem(OS,e)}catch{}}function MS({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 NS(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 PS(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 FS(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 IS({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=[];e.filter(e=>!e.loadState).forEach(e=>{let t=kb(e);t===`history`?u.push(e):t!==`stopped`&&l[t].push(e)});let d=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.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`span`,{className:`personal-home-goal-meta`,children:e.agentLaneCount&&e.agentLaneCount>1?a(`header.workAgentCount`,{count:e.agentLaneCount}):e.agentLabel??e.agentId}),(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?FS(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)(um,{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(d)]}):null,(0,z.jsx)(`div`,{className:`personal-home-lanes`,children:c.filter(e=>l[e.key].length>0).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)(`div`,{className:`personal-home-lane-list`,children:l[e.key].map(d)})]},e.key))}),u.length?(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.map(d)})]}):null]})}function LS({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)(Um,{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)(um,{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)(Sm,{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)(Sm,{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.kind===`report`?i(`files.verifiedReport`):null,FS(e.output.createdAt,r,i)].filter(Boolean).join(` · `)})]},e.id))]})}function RS({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)(rm,{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)(km,{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)(sh,{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)(_b,{text:t.text}),t.pending?(0,z.jsx)(`small`,{children:o(`conversation.agentPending`)}):null,(0,z.jsx)(Fy,{request:t.collaboration}),(0,z.jsx)(Sb,{delivery:t.returnDelivery})]})]},t.id))})]})}function zS({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)(rm,{size:17}),r(`session.record`)]}),(0,z.jsx)(`button`,{"aria-label":r(`session.closeRecord`),onClick:e,type:`button`,children:(0,z.jsx)(sh,{size:15})})]}),(0,z.jsx)(`div`,{children:(0,z.jsx)(`strong`,{children:n.title})}),(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 BS(e,t,n){let r=[];if(t===null)return e.userTodos.slice(0,4).forEach(t=>r.push({attention:{...t,goalTitle:t.goalTitle??Db(e,t.goalId)},id:`attention:${t.todoId}`,kind:`attention`})),e.goals.filter(e=>kb(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`})}Ob(i)&&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 VS(e){return e===`preview_ready`?`ready`:e===`cancelled`?`draft`:e===`failed`?`error`:e}function HS(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 US(e,t,n){let r=t.operationFrame,i=r?.content.fields.map((e,t)=>({key:`projection:${t}`,label:e.label,value:e.value})).slice(0,8)??[];return[{key:`operation_state`,label:n(`proposal.field.operationState`),value:r?.lifecycleState??e.status},...r?.kind===`result`?[{key:`result_delivery`,label:n(`proposal.field.resultDelivery`),value:r.resultDeliveryVerified?n(`proposal.resultDelivery.verified`):n(`proposal.resultDelivery.pending`)}]:[],...i,...r?[{key:`warning`,label:n(`proposal.field.confirmationBoundary`),value:r.content.warning}]:[],...r?[{key:`expires_at`,label:n(`proposal.field.expiresAt`),value:r.expiresAt}]:[]].slice(0,10)}function WS(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 GS(e,t){let n=WS(e),r=Gy(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=r.operationFrame,s=o?.content.title??e.summary,c=e.action_kind===`operation.execute`?s:e.action_kind===`team.plan`?e.status===`applied`?nb(tb(e.receipt),t):t(`proposal.summary.teamPlan`,{goal:Zy(e.normalized_parameters),count:Xy(e.normalized_parameters)}):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`?US(e,r,t):e.action_kind===`team.plan`?Yy(e.normalized_parameters,t):HS(e.normalized_parameters,t),goalId:typeof e.normalized_parameters.goal_id==`string`?e.normalized_parameters.goal_id:void 0,impact:r.retryOriginal?t(`actionReview.${r.reason}`):e.action_kind===`operation.execute`?t(`proposal.impact.operation`):e.action_kind===`team.plan`?e.status===`applied`?t(`proposal.teamPlan.assignedHint`):t(`proposal.impact.teamPlan`):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`):``,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:r.retryOriginal?t(`drawer.retryOriginal`):e.action_kind===`operation.execute`?o?.kind===`result`?o.resultDeliveryVerified?t(`proposal.primary.operationResultVerified`):t(`proposal.primary.operationResultPending`):t(`proposal.primary.operationGroup`):e.action_kind===`team.plan`?t(e.status===`applied`?`proposal.teamPlan.viewResult`:`proposal.primary.teamPlan`):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:r.retryOriginal||e.status===`applied`&&e.action_kind!==`operation.execute`&&r.interaction!==`completed`?`error`:VS(e.status),teamPlanOutcome:e.action_kind===`team.plan`?tb(e.receipt)??void 0:void 0,teamPlanAssignments:e.action_kind===`team.plan`?Qy(e.receipt,e.normalized_parameters):void 0,teamPlanGapLanes:e.action_kind===`team.plan`?$y(e.receipt,e.normalized_parameters):void 0,title:c}}function KS(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 qS(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 JS(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 YS(e,t){let n=JS(e,[`目标`,`Objective`]),r=JS(e,[`完成标准`,`Completion criteria`]),i=JS(e,[`执行边界(可选)`,`执行边界`,`边界`,`Execution boundary (optional)`,`Execution boundary`,`Boundary`]),a=(n||qS(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 XS(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 ZS(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 QS(e,t){return JS(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 $S(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 eC(e,t){let n=e.toLowerCase();return t.find(e=>n.includes(e.agentId.toLowerCase())||n.includes(e.label.toLowerCase()))}function tC(e){let t=JS(e,[`标题`,`任务标题`,`Todo 标题`]),n=JS(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 nC=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]),rC=5242880,iC=4;function aC(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 oC({conversationSessionId:e,agents:t=[{agentId:`codex`,available:!0,capability:`代码与项目执行`,label:`Codex`}],callbacks:n={},goalArchiveLoadState:r={error:null,phase:`ready`},managerChannelBinding:i,managerRuntime:a,model:o,readOnly:s=!1,selectedAgentId:c,selectedGoalId:l,statusSourceControl:u}){let{locale:d,t:f}=Ji(),[p,m]=(0,R.useState)(l??null),[h,g]=(0,R.useState)(c??t.find(e=>e.available)?.agentId??`codex`),[_,v]=(0,R.useState)(null),[y,b]=(0,R.useState)(!1),[x,S]=(0,R.useState)(null),[C,w]=(0,R.useState)({}),[T,E]=(0,R.useState)(`chat`),[D,O]=(0,R.useState)(!1),[k,A]=(0,R.useState)(!1),[ee,j]=(0,R.useState)(!1),[M,te]=(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{}}}),[ne,N]=(0,R.useState)(!1),[P,re]=(0,R.useState)(null),[ie,ae]=(0,R.useState)(`queue`),[F,oe]=(0,R.useState)(``),[I,se]=(0,R.useState)([]),[L,ce]=(0,R.useState)(null),[le,ue]=(0,R.useState)(null),[de,fe]=(0,R.useState)(()=>new Set),[pe,me]=(0,R.useState)(()=>new Set),[he,ge]=(0,R.useState)(`idle`),[_e,ve]=(0,R.useState)([]),[ye,be]=(0,R.useState)([]),[xe,Se]=(0,R.useState)(!1),[Ce,we]=(0,R.useState)(AS),[Te,Ee]=(0,R.useState)({}),[De,Oe]=(0,R.useState)([]),ke=(0,R.useRef)(!1),Ae=(0,R.useRef)(NaN),je=(0,R.useRef)(null),Me=(0,R.useRef)(null),Ne=(0,R.useRef)(null),Pe=(0,R.useRef)(null),Fe=(0,R.useRef)(new Set),Ie=(0,R.useRef)(new Set),[Le,Re]=(0,R.useState)(null),B=l===void 0?p:l,ze=c??h,Be=`${B??`manager`}:${ze}`,Ve=M[Be]??``;(0,R.useEffect)(()=>{se([]),ce(null)},[Be]);function He(e,t){te(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 Ue(e){He(Be,e)}function We(e){return bh.find(t=>t.id===e)?.prompt??``}(0,R.useEffect)(()=>{let e=je.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,120)}px`)},[Ve]);let Ge=(0,R.useMemo)(()=>o.goals.map(e=>{let t=Te[e.goalId];return t?{...e,repository:{branch:t.branch,identity:t.identity,label:t.label,readOnly:!0}}:e}),[Te,o.goals]),Ke=(0,R.useMemo)(()=>Ge.filter(e=>kb(e)===`needs_you`).length,[Ge]),qe=(0,R.useMemo)(()=>Ge.filter(e=>kb(e)===`needs_you`&&(e.needsYouBlocking||e.state===`等你`)).length,[Ge]),V=Ge.find(e=>e.goalId===B)??null;function Je(e){Ne.current=document.activeElement instanceof HTMLElement?document.activeElement:null,Se(!1),v(e)}function Ye(){v(null),window.requestAnimationFrame(()=>{let e=Ne.current;e?.isConnected&&e.getClientRects().length?e.focus({preventScroll:!0}):document.querySelector(`.personal-mobile-menu`)?.focus({preventScroll:!0})})}let Xe=_?.kind===`settings`,Ze=B,Qe=(0,R.useMemo)(()=>{let e=Object.values(C).filter(e=>e.actionKind===`heartbeat.bind`&&e.goalId&&e.status===`applied`).map(e=>({id:`schedule:${e.goalId}:heartbeat`,kind:`schedule`,schedule:{agentId:ze,executionHistory:[],goalId:e.goalId,label:e.title,nextRunAt:f(`drawer.schedulePending`),notificationRule:f(`drawer.scheduleDefaultNotification`),schedule:e.fields.find(e=>e.key===`cadence`)?.value??f(`schedule.summary`),scheduleId:`${e.goalId}:heartbeat`,scheduleKind:`heartbeat`,status:e.status===`applied`?`active`:`draft`,stopCondition:e.fields.find(e=>e.key===`stop_condition`)?.value??f(`drawer.scheduleDefaultStop`),timezone:e.fields.find(e=>e.key===`timezone`)?.value??`Asia/Shanghai`}})),t=[...BS(o,Ze,f),...o.timeline??[],...e,...PS(Object.values(C)).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)||e.proposal.reviewPlan?.retryOriginal===!0||_e.includes(e.proposal.previewId)).filter(e=>!B||e.kind===`message`?!0:e.kind===`proposal`?!e.proposal.goalId||e.proposal.goalId===B:e.kind===`attention`?e.attention.goalId===B:e.kind===`run`?e.run.goalId===B:e.kind===`schedule`?e.schedule.goalId===B:e.output.goalId===B)},[Ze,o,C,ze,B,_e,f]),$e=(0,R.useMemo)(()=>x?Qe.filter(e=>e.kind===`message`?!0:e.kind===`run`?e.run.runId===x.runId:e.kind===`output`&&e.output.runId===x.runId):Qe,[x,Qe]);(0,R.useEffect)(()=>{if(!x)return;let e=Qe.find(e=>e.kind===`run`&&e.run.runId===x.runId);!e||e.kind!==`run`||JSON.stringify({completedSteps:x.completedSteps,latestActivity:x.latestActivity,messages:x.sessionMessages,sessionStatus:x.sessionStatus,status:x.status,totalSteps:x.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})&&S(e.run)},[x,Qe]);let et=(0,R.useMemo)(()=>Qe.flatMap(e=>e.kind===`message`?[e.message]:[]),[Qe]),tt=(0,R.useMemo)(()=>V?Qe.flatMap(e=>e.kind===`message`?[e.message]:[]):[],[Qe,V]);(0,R.useEffect)(()=>{V||D||et.some(e=>e.pending)&&A(!0)},[D,et,V]),(0,R.useEffect)(()=>{!V||T===`chat`||tt.some(e=>e.pending)&&j(!0)},[tt,V,T]);let nt=(0,R.useMemo)(()=>Qe.filter(e=>e.kind===`message`||e.kind===`proposal`&&(_e.includes(e.proposal.previewId)||ye.includes(e.proposal.previewId))),[Qe,_e,ye]),rt=nt[nt.length-1],it=rt?.kind===`message`?rt.message.text.length:0;(0,R.useEffect)(()=>{if(!D||!Me.current)return;let e=window.requestAnimationFrame(()=>{Me.current&&(Me.current.scrollTop=Me.current.scrollHeight)});return()=>window.cancelAnimationFrame(e)},[nt.length,D,it]);let at=(0,R.useMemo)(()=>{if(_?.kind===`settings`)return null;if(_?.kind===`attention`)return{kind:`attention`,item:Jd(_.item,o.attentionHistory??o.userTodos)};if(_?.kind===`goal`){let e=Ge.find(e=>e.goalId===_.item.goalId);return e?{item:e,kind:`goal`}:_}if(_?.kind!==`run`)return _;let e=Qe.find(e=>e.kind===`run`&&e.run.runId===_.item.runId);return e?{item:e.run,kind:`run`}:_},[Qe,_,Ge,o.attentionHistory,o.userTodos]);(0,R.useEffect)(()=>{if(s){Ee({}),Oe([]);return}let e=!1;return Promise.all([o_(),__()]).then(([t,n])=>{e||(Ee(Object.fromEntries(t.map(e=>[e.goal_id,e.repository]))),Oe(n))}).catch(()=>{}),()=>{e=!0}},[s]),(0,R.useEffect)(()=>{if(!xe)return;function e(e){e.key===`Escape`&&Se(!1)}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[xe]),(0,R.useEffect)(()=>{if(B||!Qe.length)return;if(!ke.current){ke.current=!0;try{Ae.current=Date.parse(window.localStorage.getItem(`loopx-pw-last-visit`)??``),window.localStorage.setItem(`loopx-pw-last-visit`,new Date().toISOString())}catch{Ae.current=NaN}}let e=Ae.current,t=Qe.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={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};Re(e=>e?.done===r.done&&e.failed===r.failed?e:r)},[Qe,B]),(0,R.useEffect)(()=>{if(s){w({});return}let e=!1;return Gh(B?{goalId:B}:{contextKind:`manager`}).then(t=>{if(e)return;let n=t.filter(e=>[`preview_ready`,`gated`,`deferred`,`applying`].includes(e.status)||Gy(e).retryOriginal===!0||e.action_kind===`operation.execute`&&e.status===`applied`).map(e=>GS(e,f)),r=Object.fromEntries(n.map(e=>[e.previewId,e]));w(e=>({...e,...r})),B||be(n.map(e=>e.previewId))}).catch(()=>{}),()=>{e=!0}},[s,B,f]);async function ot(e,t={}){if(s)throw Error(f(`source.readOnlyWriteError`));let r;try{r=n.onPreviewAction?await n.onPreviewAction(e):GS(await Uh(e),f)}catch(t){if(!(t instanceof Rh)||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??f(`proposal.workspaceGate.defaultSummary`))},impact:f(o?`proposal.workspaceGate.agentImpact`:`proposal.workspaceGate.selectionImpact`),previewId:`workspace-choice-${Date.now().toString(36)}`,sourceRequest:e,status:`gated`,title:f(o?`proposal.workspaceGate.agentTitle`:`proposal.workspaceGate.selectionTitle`),workspaceCandidates:i}}return ve(e=>e.includes(r.previewId)?e:[...e,r.previewId]),w(e=>({...e,[r.previewId]:r})),t.select!==!1&&v({item:r,kind:`proposal`}),r}function st(){_t(null),He(`manager:${ze}`,f(`composer.createGoalTemplate`)),window.requestAnimationFrame(()=>je.current?.focus())}async function ct(e,t){Se(!1);let r={delete:`Deleted from the owner workspace`,resume:`Resumed from the owner workspace`,stop:`Stopped from the owner workspace`},i={delete:f(`proposal.summary.lifecycleDelete`,{title:e.title}),resume:f(`proposal.summary.lifecycleResume`,{title:e.title}),stop:f(`proposal.summary.lifecycleStop`,{title:e.title})},a=null,o=!1;try{if(t===`stop`){if(Fe.current.has(e.goalId))return;Fe.current.add(e.goalId),fe(new Set(Fe.current)),v(null),a={goalId:e.goalId,next:`stopped`,optimisticApplied:!0,previous:e.activationState},ue(f(`feedback.applying`,{title:i.stop})),n.onGoalActivationStateChange?.(e.goalId,`stopped`)}if(n.onExecuteGoalLifecycle){if(t===`delete`)throw Error(`The selected status source does not authorize Goal deletion.`);let a=await n.onExecuteGoalLifecycle({goalId:e.goalId,operation:t,reason:r[t]});if(!a.projectionVerified)throw Error(`Goal lifecycle projection did not verify.`);o=!0,n.onGoalActivationStateChange?.(e.goalId,a.activationState),ue(f(`feedback.completed`,{title:i[t]})),t===`stop`&&_t(null),await ft([e.goalId]);return}let s=await ot({actionKind:`goal.lifecycle`,context:{kind:`goal_directory`,goal_id:e.goalId},idempotencyKey:`workspace-goal-${t}-${e.goalId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,operation:t,reason:r[t]},summary:i[t]},{select:t!==`stop`});if(s.goalId!==e.goalId||s.lifecycleOperation!==t)throw v(null),Error(f(`actionReview.targetChanged`));t===`stop`&&(s.reviewPlan?.interaction===`direct`?(o=!0,await pt(s,{lifecycleProjection:a??void 0,presentation:`feedback`})):(a&&n.onGoalActivationStateChange?.(a.goalId,a.previous),ue(s.gate?f(`feedback.gateRequired`,{summary:s.gate.summary}):f(`feedback.notCompleted`,{status:s.status})),v({item:s,kind:`proposal`})))}catch(e){a&&!o&&n.onGoalActivationStateChange?.(a.goalId,a.previous),ue(f(`feedback.executionFailed`,{error:e instanceof Error?e.message:String(e)}))}finally{t===`stop`&&(Fe.current.delete(e.goalId),fe(new Set(Fe.current)))}}function lt(e,t){Ue(f(t?e===`heartbeat`?`composer.heartbeatTemplate`:`composer.monitorTemplate`:e===`heartbeat`?`composer.heartbeatTemplateWithoutGoal`:`composer.monitorTemplateWithoutGoal`)),v(null),window.requestAnimationFrame(()=>je.current?.focus())}async function ut(e,t,r=``){let i=await n.onRequestScheduleConfig?.(e,t);if(i){ve(e=>e.includes(i.previewId)?e:[...e,i.previewId]),w(e=>({...e,[i.previewId]:i})),v({item:i,kind:`proposal`});return}if(!t){Ue(f(e===`heartbeat`?`composer.heartbeatGoalQuestion`:`composer.monitorGoalQuestion`));return}let a=Date.now().toString(36);await ot({actionKind:e===`heartbeat`?`heartbeat.bind`:`monitor.create`,context:{kind:`schedule`,goal_id:t},idempotencyKey:`workspace-${e}-${t}-${a}`,normalizedParameters:e===`heartbeat`?{agent_id:ze,cadence:XS(r),goal_id:t,stop_condition:$S(r),timezone:`Asia/Shanghai`}:{agent_id:ze,cadence:XS(r),goal_id:t,stop_condition:$S(r),target:QS(r,f),target_key:`goal-${t}`,timezone:`Asia/Shanghai`},summary:e===`heartbeat`?f(`proposal.summary.heartbeat`):f(`proposal.summary.monitor`,{target:QS(r,f)})})}async function dt(e){if(!Ie.current.has(e.todoId)){Ie.current.add(e.todoId),me(new Set(Ie.current)),ue(f(`feedback.preparingPreview`,{title:e.text}));try{await ot({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:f(`tasks.markComplete`,{name:e.text})}),ue(null)}catch(e){ue(f(`feedback.previewFailed`,{error:e instanceof Error?e.message:String(e)}))}finally{Ie.current.delete(e.todoId),me(new Set(Ie.current))}}}function ft(e){let t=n.onReconcileStatus,r=t?t({invalidateGoalIds:e}):n.onRefresh?.();return Promise.resolve(r).catch(()=>{ue(f(`feedback.goalRefreshFailed`))})}async function pt(e,t={}){let r=e.actionKind===`team.plan`&&e.status===`error`&&[`apply_failed`,`readback_unverified`].includes(e.reviewPlan?.reason??``);if(e.reviewPlan&&!e.reviewPlan.canApply&&!r)return;let i=t.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:o.goals.find(t=>t.goalId===e.goalId)?.activationState??(e.lifecycleOperation===`stop`?`active`:`stopped`)}:null,s=t.lifecycleProjection??a;ue(f(`feedback.applying`,{title:e.title}));let c={...e,reviewPlan:e.reviewPlan?{...e.reviewPlan,interaction:`pending`,reason:`apply_pending`,canApply:!1}:void 0,status:`applying`};w(t=>({...t,[e.previewId]:c})),i&&v({item:c,kind:`proposal`}),s&&!s.optimisticApplied&&n.onGoalActivationStateChange?.(s.goalId,s.next);try{if(n.onApplyProposal){await n.onApplyProposal(e);let t={...e,status:`applied`};w(n=>({...n,[e.previewId]:t})),i&&v({item:t,kind:`proposal`}),ue(f(`feedback.completed`,{title:e.title})),e.actionKind===`goal.lifecycle`&&((e.lifecycleOperation===`stop`||e.lifecycleOperation===`delete`)&&_t(null),e.lifecycleOperation===`delete`&&e.goalId&&n.onGoalDeleted?.(e.goalId),ft(e.goalId?[e.goalId]:void 0));return}let t=await Kh(e.previewId);if(t.proposal.proposal_id!==e.previewId||t.proposal.action_kind!==e.actionKind||e.actionKind===`goal.lifecycle`&&(t.proposal.normalized_parameters.goal_id!==e.goalId||WS(t.proposal)!==e.lifecycleOperation))throw new Rh(f(`actionReview.targetChanged`),{error_code:`action_response_mismatch`});let r=GS(t.proposal,f);if(w(t=>({...t,[e.previewId]:r})),i&&v({item:r,kind:`proposal`}),r.reviewPlan?.interaction!==`completed`){s&&n.onGoalActivationStateChange?.(s.goalId,s.previous),v({item:r,kind:`proposal`}),ue(t.proposal.status===`stale`?f(`feedback.stale`):f(`actionReview.${r.reviewPlan.reason}`));return}ue(f(`feedback.completed`,{title:r.title})),r.actionKind===`todo.create`&&await n.onRefresh?.(),r.actionKind===`goal.lifecycle`&&(r.lifecycleOperation===`stop`||r.lifecycleOperation===`delete`)&&_t(null),r.actionKind===`goal.lifecycle`&&r.lifecycleOperation===`delete`&&r.goalId&&n.onGoalDeleted?.(r.goalId),r.actionKind===`goal.lifecycle`&&ft(r.goalId?[r.goalId]:void 0)}catch(t){if(s&&n.onGoalActivationStateChange?.(s.goalId,s.previous),t instanceof Rh&&t.payload.error_code===`protected_action`){let r=t.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??t.message)},status:`gated`};w(t=>({...t,[e.previewId]:a})),v({item:a,kind:`proposal`}),ue(f(`feedback.gateRequired`,{summary:a.gate.summary})),e.actionKind===`goal.create`&&e.goalId&&(n.onRefresh?.(),_t(e.goalId));return}let r=t instanceof Rh&&Ky(t.payload),i=t instanceof Rh&&t.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:t instanceof Error?t.message:String(t),status:r?`stale`:`error`};w(t=>({...t,[e.previewId]:a})),v({item:a,kind:`proposal`}),ue(f(`feedback.executionFailed`,{error:a.errorMessage}))}}function mt(){E(`chat`),S(null),j(!1),window.requestAnimationFrame(()=>{let e=Me.current?.querySelectorAll(`.personal-message.is-assistant`);e?.item(e.length-1)?.scrollIntoView({block:`start`})})}let ht={...n,onOpenRunSession:async e=>{e.goalId!==B&&_t(e.goalId),E(`chat`),await n.onOpenRunSession?.(e),S(e),v(null)},onOpenGoal:e=>{_t(e),ft([e])},onOpenGoalView:e=>{e===`chat`?mt():E(e),v(null)},onOpenOutput:e=>{e.goalId!==B&&_t(e.goalId),E(`files`),n.onOpenOutput?.(e)},onApplyProposal:pt,onCancelProposal:async e=>{v(null),w(t=>{let n={...t};return delete n[e.previewId],n});try{n.onCancelProposal?.(e),n.onCancelProposal||await qh(e.previewId)}catch(t){w(t=>({...t,[e.previewId]:e})),ue(f(`feedback.cancelFailed`,{error:t instanceof Error?t.message:String(t)}))}},onTransitionProposal:async(e,t)=>{let n=GS(await Jh(e.previewId,t),f);ve(e=>e.includes(n.previewId)?e:[...e,n.previewId]),w(r=>{let i={...r};return t===`regenerate`&&delete i[e.previewId],i[n.previewId]=n,i}),v({item:n,kind:`proposal`})},onSelectWorkspaceCandidate:async(e,t)=>{e.sourceRequest&&(w(t=>{let n={...t};return delete n[e.previewId],n}),await ot({...e.sourceRequest,idempotencyKey:`${e.sourceRequest.idempotencyKey}-${t}`,normalizedParameters:{...e.sourceRequest.normalizedParameters,workspace_ref:t}}))},onPreviewAction:ot,onRequestScheduleConfig:(e,t)=>lt(e,t),onOpenNotificationSettings:e=>Je({goalId:e,kind:`settings`,tab:`lark`}),onFetchNotificationTargets:()=>wg(),onSetupGoalChannel:e=>Eg(e),onToggleGoalAutoNotify:e=>Dg(e),onUpdateSchedule:async(e,t)=>{let n=Date.now().toString(36),r=e.scheduleKind===`heartbeat`;await ot({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??ze,...!r&&t===`run_now`?{endpoint_id:ze}:{},...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}`})}},gt=s?{onOpenGoal:ht.onOpenGoal,onOpenGoalView:ht.onOpenGoalView,onOpenOutput:ht.onOpenOutput}:ht;function _t(e){m(e),O(!1),A(!1),j(!1),S(null),v(null),E(`tasks`),Se(!1),n.onSelectGoal?.(e)}function vt(e){g(e),n.onSelectAgent?.(e)}function yt(e){we(e),jS(e)}async function bt(r){let i=r?[]:I,a=(r??Ve).trim()||(i.length?f(`composer.imageAnalysisPrompt`):``);if(!(!a||ne)){if(P?.session_id===e&&P?.enabled&&P.active_turn_id&&e){if(i.length){ce(d===`zh-CN`?`运行中的消息投递暂不支持图片,请暂停后发送。`:`Pause execution before sending images.`);return}N(!0);try{let t=await pg(e,a,ie);r||Ue(``),oe(d===`zh-CN`?`${ie===`queue`?`已排队,等待后续回合`:ie===`inbox`?`已进入收件箱`:`已提交纠偏`} · ${t.status}`:`${ie}: ${t.status}`)}catch(e){ce(e instanceof Error?e.message:String(e))}finally{N(!1)}return}r||(Ue(``),se([])),ce(null),N(!0);try{if(i.length){B?T!==`chat`&&j(!0):A(!0);let e=await n.onSendMessage?.(a,ze,B,i);e&&await ot(e);return}let e=Bb(a,{agents:t.map(e=>({agentId:e.agentId,label:e.label})),goalId:B,todos:(V?.agentTodos??[]).map(e=>({text:e.text,todoId:e.todoId}))});if(e.route===`clarify`){Ue(a);let t=f(`composer.clarifySingleAction`);e.missingFields.includes(`resume_when`)&&(t=f(`composer.clarifyDefer`)),ue(t);return}if(e.actionKind===`goal.create`){let t=YS(a,f),n=KS(t.title);await ot({actionKind:`goal.create`,context:{kind:`manager`,goal_id:null,natural_language:a},idempotencyKey:`workspace-goal-intent-${n}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:ze,completion_criteria:t.completionCriteria,execution_boundary:t.executionBoundary,goal_id:n,heartbeat:{cadence:XS(a),enabled:e.normalizedParameters.heartbeat_enabled===!0,timezone:`Asia/Shanghai`},initial_todos:t.initialTodos,objective:t.objective,permission:t.permission,stop_condition:$S(a),title:t.title,workspace_ref:`current`},summary:f(`proposal.summary.goalCreate`,{title:t.title})});return}if(B&&e.actionKind===`heartbeat.bind`){await ut(`heartbeat`,B,a);return}if(B&&e.actionKind===`monitor.create`){let e=ZS(a,f);if(e){Ue(a),ue(e);return}await ut(`monitor`,B,a);return}let r=eC(a,t);if(B&&r&&e.actionKind===`agent.bind`){await ot({actionKind:`agent.bind`,context:{kind:`goal`,goal_id:B,natural_language:a},idempotencyKey:`workspace-agent-bind-${B}-${r.agentId}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:r.agentId,goal_id:B},summary:`将 ${r.label} 绑定到 ${V?.title??B}`});return}if(B&&e.actionKind===`todo.create`){if(e.normalizedParameters.start_execution===!0){await ot({actionKind:`todo.create`,context:{kind:`goal`,goal_id:B,natural_language:a},idempotencyKey:`workspace-task-start-${B}-${Date.now().toString(36)}`,normalizedParameters:{endpoint_id:r?.agentId??ze,goal_id:B,start_execution:!0,text:a},summary:`交给 Agent 执行:${a.slice(0,120)}`});return}let t=r?.agentId??(/(交给|分配给|让).{0,24}(agent|codex|claude|kiro|kimi)/iu.test(a)?ze:null);await ot({actionKind:`todo.create`,context:{kind:`goal`,goal_id:B,natural_language:a},idempotencyKey:`workspace-todo-create-${B}-${Date.now().toString(36)}`,normalizedParameters:{...t?{endpoint_id:t}:{},goal_id:B,text:tC(a)},summary:`创建 Todo:${tC(a)}`});return}let o=V?.agentTodos.find(e=>a.includes(e.todoId)||a.includes(e.text)),s=typeof e.normalizedParameters.operation==`string`?e.normalizedParameters.operation:null;if(B&&o&&e.actionKind===`todo.update`&&s){await ot({actionKind:`todo.update`,context:{kind:`todo`,goal_id:B,todo_id:o.todoId,natural_language:a},idempotencyKey:`workspace-todo-update-${o.todoId}-${s}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:ze,...s===`reassign`&&r?{endpoint_id:r.agentId}:{},...s===`block`?{note:a}:{},...s===`defer`&&typeof e.normalizedParameters.resume_when==`string`?{resume_when:e.normalizedParameters.resume_when}:{},goal_id:B,operation:s,todo_id:o.todoId},summary:`更新 Todo:${o.text}`});return}B?T!==`chat`&&j(!0):A(!0);let c=await n.onSendMessage?.(a,ze,B);c&&await ot(c)}catch(e){r||(Ue(a),se(i));let t=e instanceof Error?e.message:f(`feedback.sendGenericError`);ue(f(`feedback.sendFailed`,{error:t}))}finally{N(!1)}}}let xt=t.find(e=>e.agentId===ze)?.label??ze,St=!V&&Ve.startsWith(f(`composer.createGoalDraftLead`));async function Ct(e){if(!e?.length)return;let t=iC-I.length,n=Array.from(e).slice(0,Math.max(0,t)),r=n.find(e=>!nC.has(e.type)),i=n.find(e=>e.size>rC);if(t<=0){ce(f(`composer.imageCountError`,{count:iC}));return}if(r){ce(f(`composer.imageTypeError`));return}if(i){ce(f(`composer.imageSizeError`,{size:rC/1024/1024}));return}try{let t=await Promise.all(n.map(e=>aC(e,f)));se(e=>[...e,...t].slice(0,iC)),ce(e.length>n.length?f(`composer.imageCountError`,{count:iC}):null)}catch(e){ce(e instanceof Error?e.message:f(`composer.imageReadGenericError`))}finally{Pe.current&&(Pe.current.value=``)}}function wt(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 Tt(){let e=await __();Oe(e)}async function Et(){await Promise.all([Tt(),n.onRefresh?.()])}async function Dt(){if(!(!n.onRefresh||he===`loading`)){ge(`loading`);try{await n.onRefresh(),ge(`done`)}catch{ge(`error`)}window.setTimeout(()=>ge(`idle`),1800)}}let Ot=Xe?(0,z.jsx)(DS,{callbacks:gt,focusGoalConnection:!!(_?.kind===`settings`&&_.goalId),goalNotifications:o.goalNotifications??[],goals:Ge,initialGoalId:_?.kind===`settings`?_.goalId??B:B,initialTab:_?.kind===`settings`?_.tab??`lark`:`lark`,onChanged:()=>void Et(),onClose:Ye,onThemeChange:yt,theme:Ce}):null;return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`div`,{hidden:Xe,children:(0,z.jsx)(MS,{drawer:at?(0,z.jsx)(Yb,{agents:t,attentionHistory:o.attentionHistory??o.userTodos,onSelectAttention:e=>v({kind:`attention`,item:e}),callbacks:gt,goalNotifications:o.goalNotifications??[],goals:Ge,inspectorExpanded:y,larkConnections:s?[]:De,onClose:()=>{at.kind===`proposal`&&[`applied`,`rejected`].includes(at.item.status)&&(at.item.actionKind!==`heartbeat.bind`||at.item.status!==`applied`)&&w(e=>{let t={...e};return delete t[at.item.previewId],t}),b(!1),v(null)},onToggleInspectorSize:()=>b(e=>!e),readOnly:s,runs:Qe.flatMap(e=>e.kind===`run`?[e.run]:[]),selection:at}):null,drawerMode:at?.kind===`todo`?y?`inspector-full`:`inspector`:`panel`,drawerOpen:at!==null,mobileSidebarOpen:xe,onCloseMobileSidebar:()=>Se(!1),theme:Ce,main:(0,z.jsxs)(`div`,{className:`personal-channel`,children:[(0,z.jsx)(ib,{agents:t,managerChatOpen:D,managerChannelBinding:i,managerRuntime:a,mobileNavigationOpen:xe,onOpenGoalCapabilities:V&&!s?()=>Je({goalId:V.goalId,kind:`settings`,tab:`capabilities`}):void 0,onRefresh:n.onRefresh?()=>void Dt():void 0,onOpenNavigation:()=>Se(!0),onOpenManagerChat:()=>{A(!1),O(!0)},onSelectGoalTab:e=>{e===`chat`?mt():E(e)},onSelectAgent:vt,onReturnManagerHome:()=>{O(!1),A(!1),window.requestAnimationFrame(()=>Me.current?.scrollTo({behavior:`smooth`,top:0}))},selectedAgentId:ze,refreshState:he,readOnlySourceLabel:s?u?.activeSource.label:void 0,selectedGoal:V,selectedGoalTab:T}),B&&T===`chat`&&!s&&ze===`codex`&&n.onStartLoopX?(0,z.jsx)(ub,{onPrepare:()=>n.onPrepareLoopX(ze,B),sessionId:e,onChange:re,onExecute:(e,t)=>n.onStartLoopX?.(e,ze,B,t)},`${B}:${ze}`):null,(0,z.jsxs)(`div`,{className:`personal-channel-scroll`,"data-active-goal-view":V?T:void 0,ref:Me,children:[!V&&!D&&Le&&Le.done+Le.failed>0?(0,z.jsxs)(`section`,{className:`personal-digest-card`,"aria-label":f(`digest.away`),children:[(0,z.jsx)(`strong`,{children:f(`digest.away`)}),(0,z.jsxs)(`div`,{className:`personal-digest-stats`,children:[Le.done>0?(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Le.done}),f(`digest.completed`)]}):null,Le.failed>0?(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Le.failed}),f(`digest.failed`)]}):null]})]}):null,!V&&!D?(0,z.jsxs)(`section`,{className:`personal-manager-greeting`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(rm,{size:20})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:f(`home.greeting`)}),(0,z.jsx)(`p`,{children:o.goals.some(e=>e.activationState===`active`&&e.loadState)?f(`startup.partial`):(0,z.jsxs)(z.Fragment,{children:[f(`home.waitingCount`,{count:Ke}),` `,qe>0?f(`home.blockingSummary`,{count:qe}):null]})})]})]}):null,V?.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:f(V.loadState===`error`?`startup.goalError`:`startup.goalLoading`)}),(0,z.jsx)(`p`,{children:f(V.loadError?`startup.error.${V.loadError}`:`startup.independent`)}),V.loadState===`error`?(0,z.jsx)(`button`,{className:`min-h-11 rounded-md border px-3 py-2 text-sm`,type:`button`,onClick:()=>void n.onRefresh?.(),children:f(`startup.retry`)}):null]})}):V?(0,z.jsx)(zx,{activeTab:T,scrollRef:Me,panels:{overview:(0,z.jsx)(Rx,{active:!Xe&&T===`overview`,goal:V,items:Qe,userTodos:o.userTodos,readOnly:s,onOpenDetails:()=>v({kind:`goal`,item:V}),onSelect:v,onView:E}),tasks:(0,z.jsx)(xx,{historyEnabled:!s,goal:V,items:Qe,onDraftTaskFromMessage:s?void 0:e=>{Ue(`创建一个 Task:${NS(e)}`),ue(f(`feedback.taskDraftCreated`)),window.requestAnimationFrame(()=>je.current?.focus())},onOpenChat:mt,onQuickComplete:s?void 0:dt,onSelect:v,quickCompletingTodoIds:pe,selectedTodoId:at?.kind===`todo`?at.item.todoId:null,userTodos:o.userTodos}),files:(0,z.jsx)(LS,{items:Qe.filter(e=>e.kind===`output`),onSelect:v,reportState:o.periodicReports}),chat:(0,z.jsxs)(z.Fragment,{children:[V&&x?.goalId===V.goalId?(0,z.jsx)(zS,{onClose:()=>S(null),onOpenDetails:()=>v({item:x,kind:`run`}),run:x}):null,(0,z.jsx)(Cb,{items:$e,onSelect:v,selectedGoal:V})]})}},`${u?.activeSource.statusUrl??`/status.json`}:${V.goalId}`):D?(0,z.jsx)(Cb,{items:nt,onSelect:v,selectedGoal:null}):(0,z.jsx)(IS,{goals:Ge,onRetry:()=>void n.onRefresh?.(),onSelectGoal:_t,systemHealth:o.systemHealth})]}),(0,z.jsxs)(`div`,{className:`personal-composer-wrap`,children:[P?.session_id===e&&P?.enabled&&P.active_turn_id?(0,z.jsxs)(`label`,{className:`goal-loopx-message-mode`,children:[d===`zh-CN`?`消息处理`:`Message delivery`,(0,z.jsxs)(`select`,{"aria-label":d===`zh-CN`?`消息处理方式`:`Message delivery mode`,value:ie,onChange:e=>ae(e.target.value),children:[(0,z.jsx)(`option`,{value:`queue`,children:d===`zh-CN`?`下一轮处理`:`Next turn`}),(0,z.jsx)(`option`,{value:`inbox`,children:d===`zh-CN`?`放入收件箱`:`Inbox`}),(0,z.jsx)(`option`,{value:`steer`,children:d===`zh-CN`?`立即纠偏`:`Steer now`})]}),(0,z.jsx)(`span`,{role:`status`,children:F})]}):null,s?(0,z.jsxs)(`div`,{className:`personal-read-only-notice`,children:[(0,z.jsx)(`strong`,{children:f(`source.readOnlyNoticeTitle`)}),(0,z.jsx)(`span`,{children:f(`source.readOnlyNoticeDescription`)})]}):(0,z.jsxs)(z.Fragment,{children:[!V&&!D&&k&&et.length?(0,z.jsx)(RS,{messages:et,onClose:()=>A(!1),onOpenConversation:()=>{A(!1),O(!0)}}):null,V&&T!==`chat`&&ee&&tt.length?(0,z.jsx)(RS,{agentLabel:xt,messages:tt,onClose:()=>j(!1),onDraftTask:T===`tasks`?e=>{Ue(`创建一个 Task:${NS(e)}`),ue(f(`feedback.taskDraftCreated`)),window.requestAnimationFrame(()=>je.current?.focus())}:void 0,onOpenConversation:mt,title:`${V.title} · ${xt}`}):null,le?(0,z.jsxs)(`div`,{className:`personal-action-feedback`,role:`status`,children:[(0,z.jsx)(`span`,{children:le}),(0,z.jsx)(`button`,{"aria-label":f(`common.closeActionReceipt`),onClick:()=>ue(null),type:`button`,children:(0,z.jsx)(sh,{size:14})})]}):null,(0,z.jsxs)(`details`,{className:`personal-composer-tools`,children:[(0,z.jsx)(`summary`,{children:d===`zh-CN`?`快捷提问`:`Suggestions`}),V?(0,z.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,z.jsxs)(`button`,{"aria-label":f(`composer.nextAction`),disabled:ne,onClick:()=>void bt(f(`composer.nextActionPrompt`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(Nm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.nextAction`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.agentProgress`),disabled:ne,onClick:()=>void bt(f(`composer.agentProgressPrompt`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(qm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.agentProgress`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.monitor`),disabled:ne,onClick:()=>void bt(f(`composer.monitorShortcutTemplate`,{target:f(`schedule.defaultTarget`)})),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(am,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.monitor`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.blockers`),disabled:ne||!We(`gate`),onClick:()=>void bt(We(`gate`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(um,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.blockers`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.evidence`),disabled:ne||!We(`evidence`),onClick:()=>void bt(We(`evidence`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(Sm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.evidence`)})]})]}):(0,z.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,z.jsxs)(`button`,{"aria-label":f(`composer.globalTasks`),disabled:ne,onClick:()=>void bt(f(`composer.globalTasksPrompt`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(Nm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.globalTasks`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.globalProgress`),disabled:ne,onClick:()=>void bt(f(`composer.globalProgressPrompt`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(qm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.globalProgress`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.createGoal`),onClick:st,title:f(`composer.createGoalHint`),type:`button`,children:[(0,z.jsx)(Vm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.createGoal`)})]})]})]},B??`manager`),St?(0,z.jsxs)(`div`,{className:`personal-goal-draft-status`,role:`status`,children:[(0,z.jsx)(`strong`,{children:f(`composer.createGoalDraft`)}),(0,z.jsx)(`span`,{children:f(`composer.createGoalDraftDescription`)})]}):null,I.length?(0,z.jsx)(`div`,{className:`personal-composer-images`,"aria-label":f(`composer.imagesPending`),children:I.map(e=>(0,z.jsxs)(`figure`,{children:[(0,z.jsx)(`img`,{alt:e.name,src:e.dataUrl}),(0,z.jsx)(`button`,{"aria-label":f(`composer.sentImageAlt`,{name:e.name}),onClick:()=>se(t=>t.filter(t=>t.id!==e.id)),type:`button`,children:(0,z.jsx)(sh,{size:13})})]},e.id))}):null,L?(0,z.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:L}):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.jsx)(`button`,{"aria-label":f(`composer.addImage`),className:`personal-composer-attach`,disabled:ne||I.length>=iC,onClick:()=>Pe.current?.click(),title:f(`composer.attachImageHint`),type:`button`,children:(0,z.jsx)(Rm,{size:17})}),(0,z.jsx)(`input`,{accept:`image/png,image/jpeg,image/webp,image/gif`,"aria-label":f(`composer.imagePicker`),className:`personal-composer-file-input`,disabled:ne||I.length>=iC,multiple:!0,onChange:e=>void Ct(e.target.files),ref:Pe,type:`file`}),(0,z.jsx)(`textarea`,{"aria-label":f(`composer.sendMessage`),onChange:e=>Ue(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),bt())},onPaste:wt,placeholder:V?f(`composer.goalPlaceholder`,{goal:V.title}):f(`composer.managerPlaceholder`),ref:je,rows:1,value:Ve}),(0,z.jsx)(`button`,{"aria-label":f(St?`composer.createGoal`:`composer.send`),disabled:!Ve.trim()&&I.length===0||ne,onClick:()=>void bt(),title:f(St?`composer.createGoalHint`:`composer.sendMessageHint`),type:`button`,children:(0,z.jsx)(qm,{size:18})})]})]})]})]}),sidebar:(0,z.jsx)(_x,{attentionCount:Ke,goals:Ge,goalArchiveLoadState:r,goalLifecycleOperations:n.onExecuteGoalLifecycle?[`stop`,`resume`]:void 0,lifecycleBusyGoalIds:de,onRequestGoalCreate:s?void 0:st,onRequestGoalLifecycle:s&&!n.onExecuteGoalLifecycle?void 0:(e,t)=>void ct(e,t),onRetryGoalArchive:n.onRetryGoalArchive||n.onRefresh?()=>void(n.onRetryGoalArchive??n.onRefresh)?.():void 0,onOpenSettings:s?void 0:()=>Je({kind:`settings`}),onSelectGoal:_t,selectedGoalId:B,statusSourceControl:u},u?.activeSource.statusUrl??`/status.json`)})}),Ot]})}function sC(e){return(e??``).replace(/\s+/gu,` `).trim()}function cC(e,t=120){let n=Array.from(e);return n.length<=t?e:`${n.slice(0,t-1).join(``)}…`}function lC(e,t,n){let r=sC(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`):cC(r)}function uC(e,t){return t({advancing:`projection.agentAdvancingGoal`,idle:`projection.agentIdle`,needs_you:`projection.agentNeedsDecision`,stopped:`projection.agentStopped`,waiting_external:`projection.agentWaitingExternal`}[e])}function dC({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 fC=`/status.json`,pC=`loopx-status-source-catalog-v1`,mC={id:`local`,kind:`local`,label:`本机`,readOnly:!1,statusUrl:fC};function hC(e,t){let n=fh(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 gC(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 _C(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=hC(n.statusUrl,t);if(!r||r.length>48||!(`url`in i))return null;let a=sx(n.hostAlias)?n.hostAlias.trim():void 0;return{...a?{hostAlias:a}:{},id:gC(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url}}function vC(){return{schemaVersion:1,sources:[mC]}}function yC(e,t){try{let n=e.getItem(pC);if(!n)return vC();let r=JSON.parse(n);if(r.schemaVersion!==1||!Array.isArray(r.sources))return vC();let i=new Set([mC.statusUrl]);return{schemaVersion:1,sources:[mC,...r.sources.flatMap(e=>{let n=_C(e,t);return!n||i.has(n.statusUrl)?[]:(i.add(n.statusUrl),[n])})]}}catch{return vC()}}function bC(e,t){e.setItem(pC,JSON.stringify({schemaVersion:1,sources:t.sources.filter(e=>e.kind===`ssh_tunnel`)}))}function xC(e,t){let n=new Set(t.filter(sx).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 SC(e,t,n){let r=t.label.trim();if(!r)return{error:`请填写来源名称。`};if(r.length>48)return{error:`来源名称不能超过 48 个字符。`};let i=hC(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&&!sx(t.hostAlias))return{error:`请选择有效的 SSH Host。`};let a=t.hostAlias?.trim(),o={...a?{hostAlias:a}:{},id:gC(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url};return{catalog:{...e,sources:[...e.sources,o]},source:o}}function CC(e,t){return{...e,sources:e.sources.filter(e=>e.kind===`local`||e.id!==t)}}function wC(e,t,n){if(!t.trim()||fh(t,n).source?.isRelative)return mC;let r=t.trim();try{r=new URL(r,n).toString()}catch{return null}return e.sources.find(e=>e.statusUrl===r)??null}function TC(e,t,n){return wC(e,t,n)||(fh(t,n).source?.isRelative?mC:{id:`temporary`,kind:`ssh_tunnel`,label:`临时来源`,readOnly:!0,statusUrl:t.trim()})}function EC(e,t,n,r){return TC(e,t??n,r)}var DC={delete:`删除`,deploy:`部署`,merge:`合并`,payment:`付款`,release:`发布`};function OC(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:`请求受保护操作:${DC[n.operation]} · ${n.target}`}}var kC=fC;async function AC(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 Ap(await t.json())}function jC(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 MC(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??jC(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 NC(e){return(e??``).replace(/\s+/g,` `).trim()}function PC(e,t=132){let n=NC(e);return n.length<=t?n:`${n.slice(0,Math.max(0,t-1))}…`}function FC(e){let t=new Map;for(let n of e?.goals??[])t.set(n.goal_id,n);return t}function IC(e,t){return e===void 0||t===void 0?void 0:e+t}function LC(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 RC(e){return e?.items.find(e=>!e.done)}function zC(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 BC(e){return e?.queueItem?.project_asset?.quota?.state??e?.queueItem?.quota?.state??e?.goal.quota?.state??`waiting`}function VC(e,t,n){let r=[];for(let t of e){let e=LC(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 HC(e){return e?.map(e=>({dataUrl:e.data_url,id:e.id,mimeType:e.mime_type,name:e.name,size:e.size}))}var UC=`loopx.personal-agent-selection.v1`;function WC(){if(typeof window>`u`)return{};try{let e=JSON.parse(window.localStorage.getItem(UC)??`{}`);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 GC={需修复:`danger`,等你:`warning`,等待条件:`info`,推进中:`success`,安静运行:`neutral`,已停止:`neutral`,已完成:`neutral`};function KC(e,t){return NC(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 qC(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 JC(e,t){return[`agent`,`assistant`].includes(e.trim().toLowerCase())&&t.trim().length>0}var YC=`已发现的项目 Agent`;function XC(e){switch(My(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 KC(e)}}function ZC(e,t){switch(Ny(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 YC}}function QC(e,t){let n=e.project_asset;return t===`user`?zC(n?.user_todos,e.user_todos,`project_asset.user_todos`):zC(n?.agent_todos,e.agent_todos,`project_asset.agent_todos`)}function $C(e){return PC(e.title??e.text,112)}function ew(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 tw(e,t){return{resumeWhen:e.resume_when??null,resumeReady:e.resume_ready??null,resumeReceiptId:ew(e),claimedBy:e.claimed_by??null,done:e.status!==`deferred`&&e.done,evidence:e.evidence?PC(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:$C(e),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.index}`}}function nw(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 rw(e){return nw(e).map(t=>tw(t,e))}function iw(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=tw(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 aw(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:PC(e.title,112),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.claimed_by??`unknown`}:current`}}function ow(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=aw(t,n);r.has(i.todoId)||r.set(i.todoId,i)}return[...r.values()]}function sw(e){let t=e.queueItem?.project_asset?.agent_todos,n=e.queueItem?.agent_todos,r=nw(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=>tw(t,e)),l=r.find(e=>!e.done);return{doneTodoCount:o,nextTodoText:NC(t?.next??``)||(l?NC(l.title??``)||NC(l.text??``):``)||null,recentCompleted:c}}function cw(e,t){let n=NC(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`):lC(n,t,`projection.validationRecorded`):``}function lw(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 uw(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=[cw(r?.summary,n),lC(i?.health_check,n),lC(i?.recommended_action,n)].find(e=>e!==``&&e!==`暂无`)??n(`projection.runRecorded`),s=dC({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 dw(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 fw(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 pw(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 mw(e,t){let n=t.queueItem?.stale_latest_run_warning;return t.severity===`high`||!!fw(e,t)||!!(n?.requires_refresh_state||n?.severity===`high`)||pw(t)}function hw(e,t){let n=fw(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 gw(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 _w(e,t){let n=e.latestRun?.operator_gate;return lC(n?.operator_question??n?.reason_summary??n?.follow_up??e.queueItem?.recommended_action??e.latestRun?.recommended_action,t,`projection.confirmAgentDecision`)}function vw(e,t){if(t.goal.activation_state===`stopped`)return`已停止`;let n=LC(t,`user`),r=LC(t,`agent`),i=!!RC(n),a=!!RC(r);return[`user_or_controller`,`controller`].includes(t.waitingOn)||i||gw(t)?`等你`:mw(e,t)?`需修复`:t.waitingOn===`external_evidence`?`等待条件`:BC(t)===`eligible`||a?`推进中`:dw(t)?`已完成`:`安静运行`}function yw(e,t,n,r){if(n===`已停止`)return uC(`stopped`,r);if(n===`需修复`)return lC(hw(e,t),r,`projection.statusRefreshNeeded`);if(n===`等你`)return uC(`needs_you`,r);if(n===`推进中`){let e=[(LC(t,`agent`)?.items??[]).filter(e=>!e.done).flatMap(e=>[e.title,e.text]).map(e=>NC(e)).find(e=>e!==``&&e!==`暂无`),t.queueItem?.recommended_action,t.latestRun?.recommended_action].map(e=>NC(e)).find(e=>e!==``&&e!==`暂无`);return e?lC(e,r,`projection.agentAdvancingGoal`):uC(`advancing`,r)}return uC(n===`等待条件`?`waiting_external`:`idle`,r)}function bw(e,t){return t.some(t=>e.includes(t))}function xw(e,t,n){if(t.goals.some(e=>e.activationState===`active`&&e.loadState))return{text:`Goal 状态尚未全部加载,暂不能给出完整统计。可先打开已加载的 Goal,失败项可重试。`,lines:[]};if(bw(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(bw(n,[`现在`,`下一步`,`我该`,`该做什么`,`优先处理`])){let e=t.userTodos[0];if(e)return{text:e.blocking?`先处理「${KC(e.goalId)}」:${e.text}`:`当前最先处理「${KC(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(bw(n,[`等我`,`阻塞`,`需要我`,`全局待办`]))return t.userTodos.length===0?{text:`目前没有 Goal 在等你,开放用户待办为 0。`,lines:[]}:{text:`有 ${t.userTodos.length} 项开放用户待办,阻塞项优先:`,lines:t.userTodos.slice(0,3).map(e=>`${KC(e.goalId)} · ${e.blocking?`阻塞`:`待处理`} · ${e.text}`)};if(bw(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 Sw(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=FC(e.usage_summary),s=VC(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(QC(e,`user`)?.items??[]).map((r,i)=>({projectedDone:r.done,details:Kd(r),actionKind:r.action_kind??null,blocking:n,goalId:e.goal_id,sourceOrder:t,taskClass:r.task_class??null,text:$C(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)||!gw(t)?[]:[{details:Kd({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:_w(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=vw(e,a),l=f.find(e=>e.goalId===t.id),u=l?.text??null,d=sw(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=ow(rw(a),h,a),b=[d.nextTodoText,a.queueItem?.recommended_action,a.latestRun?.recommended_action,yw(e,a,c,n)].map(e=>lC(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:yw(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:uw(e,a,n),state:c,...r?{subagentExecution:{allowedDomains:t.spawn_policy?.allowed_domains??[],domainCandidates:iw(e,a,y),enabled:t.spawn_policy?.mode===`multi_subagent`&&t.spawn_policy.spawn_allowed===!0&&t.spawn_policy.max_children>0,executionConfig:t.spawn_policy?.execution_config,maxChildren:t.spawn_policy?.max_children??0,modelConfig:t.spawn_policy?.model_config}}:{},title:KC(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:IC(e.input_tokens_24h,e.output_tokens_24h),tokens7d:IC(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?PC(e.current_todo.title,96):null,lastActivityAt:e.last_activity_at??null,state:e.state??null}))}}function Cw({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,R.useState)([]),[b,x]=(0,R.useState)(!1),[S,C]=(0,R.useState)(null),[w,T]=(0,R.useState)(null),E=(0,R.useMemo)(()=>{let e=Sw(c,u,_,b);if(!l)return e;let t=Object.values(l.snapshots).map(e=>Sw(e,MC(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,_]),D=E.goals.find(e=>e.goalId===d)??null,O=l?.snapshots[d]??c,[k,A]=(0,R.useState)(null),[ee,j]=(0,R.useState)(null),[M,te]=(0,R.useState)(!1),ne=E.goals.some(e=>e.activationState===`active`&&e.loadState===`loading`)?`loading`:E.goals.map(e=>`${e.goalId}:${e.agentId}`).join(`|`),N=D?.goalId??`manager`;E.goals.some(e=>e.activationState===`active`&&e.loadState)||(E.systemHealth?!E.systemHealth.ok:!c.ok)||E.openUserTodoCount>0&&`${E.openUserTodoCount}${E.blockingTodoCount}`;let P=v.length>0?v.map(e=>({agentId:e.agent_id,adapterKind:e.adapter_kind,available:e.available,capability:ZC(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:ZC(`codex`),label:`Codex`,statusLabel:`正在检测`}],re=[...P,{agentId:`status-only`,available:!0,capability:`不调用模型`,adapterKind:`status_projection`,interrupt:!1,label:`仅查状态`,resume:!0,statusLabel:`只读`,streaming:!1,toolCalls:!1,trustScope:`read_only`}],ie=P.find(e=>e.label===`Codex`&&e.available)?.agentId??P.find(e=>e.available)?.agentId??`status-only`,ae=w?.executor_endpoint?.trim()??``,F=ae?P.find(e=>e.agentId===ae)?.agentId:void 0,oe=e=>e===`manager`?F??ie:ie,[I,se]=(0,R.useState)(WC),L=vh(re,I[N]??oe(N),ie),[ce,le]=(0,R.useState)(!1),[ue,de]=(0,R.useState)(!1),[fe,pe]=(0,R.useState)(`chat`),[me,he]=(0,R.useState)(``),[ge,_e]=(0,R.useState)({}),[ve,ye]=(0,R.useState)({}),[be,xe]=(0,R.useState)(null),[Se,Ce]=(0,R.useState)({}),[we,Te]=(0,R.useState)([]),[Ee,De]=(0,R.useState)(null),[Oe,ke]=(0,R.useState)({}),Ae=(0,R.useRef)(1),je=(0,R.useRef)(1),Me=(0,R.useRef)(new Map),Ne=(0,R.useRef)(new Set),Pe=(0,R.useRef)(new Map),Fe=(0,R.useRef)(new Map),Ie=(0,R.useRef)(new Set),Le=(0,R.useRef)(new Set),Re=(0,R.useRef)(null),B=(0,R.useRef)(null),ze=(0,R.useRef)(null),Be=(0,R.useRef)(null);(0,R.useRef)(null);let Ve=ge[N]??[];ve[N];let He=(e,t)=>e===`manager`?_(`header.manager`):t,Ue=D?E.userTodos.filter(e=>e.goalId===D.goalId):E.userTodos,We=D?.agentTodos??[];lw(We,D?.needsYou?3:4);let Ge=We.filter(e=>e.done).length,Ke=We.length>0?`${Ge}/${We.length}`:`暂无计划`;D&&({...E},Ue.filter(e=>e.blocking).length,Ue.length),(0,R.useEffect)(()=>{let e=dh(f.activeSource.statusUrl,window.location.href),t=e.source?hh(O,e.source):null;if(!D||!t?.indexUrl||!t.detailUrl){A(null),j(null),te(!1);return}let{detailUrl:n,indexUrl:r}=t,i=!1;return A(null),j(null),te(!0),gh(r,D.goalId).then(async e=>{let t=e.items[0]?.detail_ref;return t?_h(n,t):null}).then(e=>{i||A(e)}).catch(e=>{i||j(jp(e))}).finally(()=>{i||te(!1)}),()=>{i=!0}},[O,D?.goalId,f.activeSource.statusUrl]);let qe=Se[N]?.sessionId;(0,R.useEffect)(()=>{if(h||!qe)return;let e=!1,t,n=async()=>{try{let t=await $h(qe);if(e)return;let n=t.messages.filter(e=>e.origin===`manager_followup`);_e(e=>{let r=e[N]??[],i=new Set(r.map(e=>e.sourceMessageId)),a=n.filter(e=>!i.has(e.message_id)),o=new Map(n.map(e=>[e.message_id,e.return_delivery])),s=new Map(t.messages.filter(e=>e.role!==`user`&&e.origin!==`manager_followup`).map(e=>[e.turn_id,e])),c=new Map(t.messages.map(e=>[e.message_id,e.collaboration])),l=!1,u=r.map(e=>{let t=e.sourceMessageId?o.get(e.sourceMessageId):void 0,n=e.sourceTurnId?s.get(e.sourceTurnId):void 0,r=e.sourceMessageId?c.get(e.sourceMessageId):n?.collaboration;return JSON.stringify(t)===JSON.stringify(e.returnDelivery)&&JSON.stringify(r)===JSON.stringify(e.collaboration)?e:(l=!0,{...e,sourceMessageId:e.sourceMessageId??n?.message_id,returnDelivery:t,collaboration:r})});return!a.length&&!l?e:{...e,[N]:[...u,...a.map(e=>({id:Ae.current++,sourceMessageId:e.message_id,role:`assistant`,agentLabel:`协作回执`,sourceLabel:`协作回执`,text:qC(e.text),lines:[],returnDelivery:e.return_delivery}))]}})}catch{}finally{e||(t=setTimeout(n,3e3))}};return n(),()=>{e=!0,t&&clearTimeout(t)}},[h,qe,N,L.label]);function V(e,t){Ce(n=>{if(t===null){let t={...n};return delete t[e],t}return{...n,[e]:t}})}(0,R.useEffect)(()=>{if(h){y([]),x(!1),C(null),T(null);return}let e=!1;return Xh().then(t=>{if(!e){y(t.adapters??[]);let e=t.manager?.runtime;T(t.manager?.channel_binding??null),C(e?{schema_version:`manager_runtime_session_readback_v0`,runtime_profile:e.runtime_profile,configuration_revision:e.configuration_revision,status:e.status,sandbox:e.sandbox,standing_grant:e.standing_grant,tool_classes:e.tool_classes}:null),x(t.goal_subagent_configuration===`preview_locked`)}}).catch(()=>{e||x(!1)}),()=>{e=!0}},[h]),(0,R.useEffect)(()=>{try{window.localStorage.setItem(UC,JSON.stringify(I))}catch{}},[I]),(0,R.useEffect)(()=>{if(h||!L.available)return;let e=N,t=`${e}:${L.agentId}`,n=D?`goal`:`manager`,r=D?`goal.${D.goalId}`:`manager`,i=!1,a=null,o=null;return(async()=>{try{let s=await ng({agentId:n===`manager`?void 0:L.agentId,channelId:r,goalId:D?.goalId});if(i||(_e(t=>(t[e]?.length??0)>0?t:{...t,[e]:s.messages.map(t=>({sourceMessageId:t.message_id,agentLabel:t.role===`user`?void 0:t.origin===`manager_followup`?`协作回执`:He(e,L.label),attachments:HC(t.attachments),id:Ae.current++,lines:[],role:t.role===`user`?`user`:`assistant`,returnDelivery:t.return_delivery,collaboration:t.collaboration,sourceLabel:t.role===`user`?void 0:t.role===`error`?`本地会话记录`:e===`manager`?`恢复的${_(`header.manager`)}会话`:`恢复的 ${L.label} 会话`,text:t.role===`user`?t.text:qC(t.text)}))}),L.agentId===`status-only`))return;let c=s.sessions[0];if(o=c?.session_id??null,c&&!c.resumable){Ne.current.add(t),V(e,{agentId:L.agentId,resumable:!1,sessionId:c.session_id,status:`resume_failed`});return}let l=n===`manager`?``:D?.goalId??``;if(n===`goal`&&!l)return;let u=await Qh(l,n===`manager`?I[e]:L.agentId,`resume_latest`,n);if(i)return;n===`manager`&&u.session.manager_runtime&&C(u.session.manager_runtime),Me.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(V(e,{agentId:u.agent_id||L.agentId,resumable:!0,sessionId:u.session_id,status:f?`running`:`ready`,turnId:f||void 0}),Ne.current.delete(t),!f)return;let p=`${u.session_id}:${f}`;if(Le.current.has(p))return;Le.current.add(p),Pe.current.set(e,f),V(e,{agentId:L.agentId,resumable:!0,sessionId:u.session_id,status:`running`,turnId:f}),xe(e),a=new AbortController,Fe.current.set(e,a);let m=``,h=Je(e,{activity:[`正在恢复进行中的 Agent 回合`],agentLabel:He(e,L.label),lines:[],pending:!0,sourceLabel:e===`manager`?`恢复的${_(`header.manager`)}会话`:`恢复的 ${L.label} 会话`,text:``});try{let t=await gg(u.session_id,f,{signal:a.signal,onDelta:t=>{m+=t,Ye(e,h,{text:m})},onActivity:t=>{_e(n=>({...n,[e]:(n[e]??[]).map(e=>e.id===h?{...e,activity:[...new Set([...e.activity??[],t])].slice(-6)}:e)}))}});if(i)return;Ye(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()||`${He(e,L.label)} 已完成分析。`});let n=E.goals.find(e=>e.goalId===d?.session.goal_id)??D??E.goals[0]??null;if(n&&t.response.proposals.length>0){let r=t.response.proposals.filter(yh).map(e=>({goalId:n.goalId,id:je.current++,previewId:null,proposal:e,receiptLabel:null,state:`candidate`,statusMessage:null}));r.length>0&&ye(t=>({...t,[e]:[...t[e]??[],...r]}))}}catch(t){if(i)return;Ye(e,h,{activity:[],lines:[],pending:!1,reconnect:t instanceof Rh&&t.payload.reconnectable===!0,sourceLabel:`LoopX Chat 本地后端`,text:t instanceof Error?t.message:`无法恢复进行中的 Agent 回合。`})}finally{Le.current.delete(p),Pe.current.get(e)===f&&Pe.current.delete(e),V(e,{agentId:L.agentId,resumable:!0,sessionId:u.session_id,status:`ready`}),Fe.current.get(e)===a&&Fe.current.delete(e),i||xe(t=>t===e?null:t)}}catch(n){if(i)return;n instanceof Rh&&n.payload.error_code===`resume_failed`&&(Ne.current.add(t),o&&V(e,{agentId:L.agentId,resumable:!1,sessionId:o,status:`resume_failed`}))}})(),()=>{i=!0,a?.abort()}},[N,E.goals[0]?.goalId,h,D?.goalId,L.agentId,L.available,L.label,I]),(0,R.useEffect)(()=>{if(h||D||E.goals.length===0||ne===`loading`)return;let e=!1;return Promise.all(E.goals.filter(e=>!e.loadState).map(async e=>{let t=await eg({agentId:e.agentId,channelId:`goal.${e.goalId}`,goalId:e.goalId});return{goalId:e.goalId,session:t.sessions[0]??null}})).then(t=>{e||Ce(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,D?.goalId]),(0,R.useEffect)(()=>{if(De(null),h){Te([]),ke({});return}if(!D){Te([]),ke({});return}let e=!1,t=0,n=0;Te([]),ke({});let r=async()=>{if(!e){if(document.hidden){t=window.setTimeout(()=>void r(),1e4);return}try{let t=await eg({goalId:D.goalId});if(!e){let r=t.sessions.filter(e=>e.channel_id?.startsWith(`task.`));Te(r);let i=await Promise.allSettled(r.map(e=>$h(e.session_id)));if(!e){let e=i.some(e=>e.status===`rejected`);n=e?n+1:0,De(e?`partial`:null),ke(Object.fromEntries(i.flatMap((e,t)=>e.status===`fulfilled`?[[r[t].session_id,e.value]]:[])))}}}catch{n+=1,e||De(`offline`)}e||(t=window.setTimeout(()=>void r(),Math.min(3e4,2e3*2**Math.min(n,4))))}};return r(),()=>{e=!0,window.clearTimeout(t)}},[h,D?.goalId]),(0,R.useEffect)(()=>{if(!ce)return;let e=window.requestAnimationFrame(()=>{Re.current?.querySelector(`[role="menuitem"]:not(:disabled)`)?.focus()});return()=>{window.cancelAnimationFrame(e),B.current?.focus()}},[ce]),(0,R.useEffect)(()=>{if(!ue)return;let e=window.requestAnimationFrame(()=>ze.current?.focus());return()=>{window.cancelAnimationFrame(e),Be.current?.focus()}},[ue]),(0,R.useEffect)(()=>{if(!ce&&!ue)return;let e=e=>{e.key===`Escape`&&(le(!1),de(!1))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[ce,ue]);function Je(e,t){let n=Ae.current++;return _e(r=>({...r,[e]:[...r[e]??[],{...t,id:n,role:`assistant`}]})),n}function Ye(e,t,n){_e(r=>({...r,[e]:(r[e]??[]).map(e=>e.id===t?{...e,...n}:e)}))}async function Xe(e,t){let n=`${e}:${t}`,r=Me.current.get(n);if(r)return r;let i=await Qh(e,t,Ne.current.has(n)?`new`:`resume_latest`,`goal`);return Me.current.set(n,i.session_id),Ne.current.delete(n),V(e,{agentId:t,resumable:!0,sessionId:i.session_id,status:i.session.status}),i.session_id}async function Ze(e,t){let n=e.trim();if(!n)return;let r=t&&`goalId`in t?t.goalId??`manager`:N,i=r===`manager`?null:E.goals.find(e=>e.goalId===r)??null,a=t?.agentId?vh(re,t.agentId,ie):L,o=r===`manager`?E:i?{...E,blockingTodoCount:E.userTodos.filter(e=>e.goalId===i.goalId&&e.blocking).length,goals:[i],openUserTodoCount:E.userTodos.filter(e=>e.goalId===i.goalId).length,userTodos:E.userTodos.filter(e=>e.goalId===i.goalId),visibleUserTodos:E.userTodos.filter(e=>e.goalId===i.goalId)}:E,s=Ae.current++;if(_e(e=>({...e,[r]:[...e[r]??[],{attachments:t?.attachments,id:s,lines:[],role:`user`,text:n}]})),he(``),xe(r),a.agentId===`status-only`||!i&&r!==`manager`){let e=xw(O,o,n),t=a.agentId===`status-only`;Je(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(()=>{}),xe(null);return}let c=`${r}:${a.agentId}`,l=null;try{let e=r===`manager`?Me.current.get(c):await Xe(r,a.agentId);if(!e){let t=Ne.current.has(c)?`new`:`resume_latest`,n=r===`manager`?I[r]:a.agentId,o=await Qh(r===`manager`?``:i.goalId,n,t,r===`manager`?`manager`:`goal`);r===`manager`&&o.session.manager_runtime&&C(o.session.manager_runtime),e=o.session_id,Me.current.set(c,e),V(r,{agentId:o.agent_id||a.agentId,resumable:!0,sessionId:e,status:`ready`}),Ne.current.delete(c)}let o=``;l=Je(r,{activity:[r===`manager`?`正在连接管家`:`正在连接 Agent`],agentLabel:He(r,a.label),lines:[],pending:!0,sourceLabel:r===`manager`?`${_(`header.manager`)} · 跨 Goal`:`${a.label} Agent · ${KC(i.goalId)}`,text:``});let s={attachments:t?.attachments,signal:(()=>{let e=new AbortController;return Fe.current.set(r,e),e.signal})(),onDelta:e=>{o+=e,l!==null&&Ye(r,l,{text:o})},onActivity:e=>{l!==null&&_e(t=>({...t,[r]:(t[r]??[]).map(t=>t.id===l?{...t,activity:[...new Set([...t.activity??[],e])].slice(-6)}:t)}))},onPhase:(t,n)=>{l!==null&&Ye(r,l,{sourceTurnId:n}),Pe.current.set(r,n),V(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`running`,turnId:n})}},u;if(t?.loopxMode){let n=await fg(e,t.loopxMode.operation,t.loopxMode.settings);if(!n.turn_id)throw Error(`LoopX execution returned no turn identity`);s.onPhase(`turn.accepted`,n.turn_id),u=await gg(e,n.turn_id,s)}else u=await mg(e,n,s);let d=u.response;Ye(r,l,{lines:d.gate?[d.gate.summary,d.gate.next_action].filter(Boolean).slice(0,2):[],pending:!1,text:qC(d.message||o.trim())||`${He(r,a.label)} 已完成分析。`});let f=d.proposals.filter(yh);if(f.length>0&&!i&&Ye(r,l,{lines:[`请进入要修改的 Goal,预览并确认具体变更。`]}),f.length>0&&i){let e=f.map(e=>({goalId:i.goalId,id:je.current++,previewId:null,proposal:e,receiptLabel:null,state:`candidate`,statusMessage:null}));ye(t=>({...t,[r]:[...t[r]??[],...e]}))}if(r!==`manager`&&d.protected_action){let e=OC(r,n,d.protected_action);if(e)return e}}catch(e){if(Ie.current.delete(r)||t?.loopxMode&&e instanceof Rh&&e.payload.error_code===`turn_interrupted`){let e={agentLabel:He(r,a.label),lines:[],pending:!1,sourceLabel:r===`manager`?`${_(`header.manager`)}会话`:`${a.label} 会话`,text:`已中断。你可以在当前会话继续发送消息。`};l===null?Je(r,e):Ye(r,l,e);return}let n=e instanceof Rh?e.payload:null;n&&xh(n)&&Me.current.delete(c),n?.error_code===`resume_failed`&&(Me.current.delete(c),Ne.current.add(c),V(r,{agentId:a.agentId,resumable:!1,sessionId:Se[r]?.sessionId??`resume-failed`,status:`resume_failed`}));let i=n?.gate,o=i&&typeof i==`object`?String(i.summary??``):``,s={agentLabel:He(r,a.label),lines:o?[o]:[],pending:!1,reconnect:n?.reconnectable===!0,sourceLabel:`LoopX Chat 本地后端`,text:n?.error_code===`resume_failed`?`原 ${He(r,a.label)} 会话无法恢复。本地历史已经保留,请在运行详情里选择“重试恢复”或“开始新 Session”。`:e instanceof Error?e.message:`${He(r,a.label)} 会话暂时不可用。`};l===null?Je(r,s):Ye(r,l,s)}finally{Pe.current.delete(r),Fe.current.delete(r);let e=Me.current.get(c);e&&V(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`ready`}),xe(e=>e===r?null:e)}}async function Qe(e){let t=e?.goalId??N,n=Se[t],r=e?.agentId??n?.agentId??L.agentId,i=`${t}:${r}`,a=e?.sessionId??n?.sessionId??Me.current.get(i),o=e?.turnId??n?.turnId??Pe.current.get(t);if(!(!a||!o))try{Ie.current.add(t),await og(a,o),Fe.current.get(t)?.abort()}catch(e){throw Ie.current.delete(t),e}finally{Pe.current.delete(t),V(t,{agentId:r,resumable:!0,sessionId:a,status:`ready`}),Fe.current.delete(t),xe(e=>e===t?null:e)}}async function $e(e){let t=e.goalId,n=`${t}:${e.agentId}`,r=e.sessionId??Se[t]?.sessionId??Me.current.get(n);if(r)try{let i=await vg(r);Me.current.set(n,r),Ne.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 et(e){let t=`${e.goalId}:${e.agentId}`;Me.current.delete(t),Ne.current.add(t),V(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:`new-session-pending`,status:`ready`})}async function tt(e){let t=`${e.goalId}:${e.agentId}`,n=e.sessionId??Se[e.goalId]?.sessionId??Me.current.get(t);n&&n!==`new-session-pending`&&await _g(n),Me.current.delete(t),Ne.current.add(t),V(e.goalId,null)}function nt(e){re.some(t=>t.agentId===e&&t.available)&&(se(t=>({...t,[N]:e})),le(!1))}function rt(){i(``),pe(`chat`)}function it(e){i(e),pe(`chat`)}D&&GC[D.state],D&&(`${L.label}${D.state}`,We.length>0&&`${Ke}`,Ue.length>0&&`${Ue.length}`),D?.state===`需修复`||!D&&!c.ok?(D&&XC(D.agentId),D?.nextSentence,D?.agentSentence):D?.state===`等你`?(D.needsYouBlocking,D.needsYouBlocking,D.needsYou??D.nextSentence,D.needsYou):(D&&XC(D.agentId),D?.nextSentence);let at=[...!D&&Se.manager?.status===`resume_failed`?[{id:`run:manager:resume-failed`,kind:`run`,run:{agentId:Se.manager.agentId,agentLabel:XC(Se.manager.agentId),canInterrupt:!1,completedSteps:0,goalId:`manager`,goalTitle:`LoopX 管家`,latestActivity:`本地聊天记录已保留,点我查看恢复方式。`,resumable:!1,runId:`manager:resume-failed`,sessionId:Se.manager.sessionId,sessionStatus:`resume_failed`,status:`failed`,title:`上次会话需要恢复`,totalSteps:1,outputs:[]}}]:[],...D?we.map(e=>{let t=e.channel_id?.startsWith(`task.`)?e.channel_id.slice(5):void 0,n=D.agentTodos.find(e=>e.todoId===t),r=!!e.active_turn_id,i=Oe[e.session_id],a=i?.messages.some(e=>JC(e.role,e.text))===!0;return{id:`run:task:${e.session_id}`,kind:`run`,run:{agentId:e.agent_id,agentLabel:XC(e.agent_id),canInterrupt:r,completedSteps:n?.done||a?1:0,goalId:D.goalId,goalTitle:D.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`:JC(e.role,e.text)?`assistant`:`error`,text:e.role===`user`?e.text:qC(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}}}):[],...D&&(Se[D.goalId]?.turnId||D.runEvidence||Ob(D))?[{id:`run:${D.goalId}`,kind:`run`,run:{agentId:Se[D.goalId]?.agentId??D.agentId,agentLabel:XC(Se[D.goalId]?.agentId??D.agentId),canInterrupt:!!Se[D.goalId]?.turnId,completedSteps:D.agentTodos.filter(e=>e.done).length,goalId:D.goalId,goalTitle:D.title,latestActivity:D.agentSentence,resumable:Se[D.goalId]?.resumable??!0,runId:`goal:${D.goalId}`,sessionId:Se[D.goalId]?.sessionId,sessionStatus:Se[D.goalId]?.status,status:Se[D.goalId]?.turnId?`running`:D.state===`需修复`?`failed`:`waiting`,title:D.nextSentence,totalSteps:D.agentTodos.length||1,turnId:Se[D.goalId]?.turnId,outputs:D.runEvidence?[{createdAt:D.runEvidence.generatedAt,kind:`evidence`,outputId:`${D.goalId}:latest-evidence`,title:D.runEvidence.label}]:[]}}]:[],...Ve.map(e=>({id:`message:${e.id}`,kind:`message`,message:{agentLabel:e.agentLabel,attachments:e.attachments,id:String(e.id),pending:e.pending,returnDelivery:e.returnDelivery,collaboration:e.collaboration,role:e.role,text:e.text||(e.pending?`Agent 正在处理…`:e.lines.join(` -`))}})),...(D?[D]:E.goals).flatMap(e=>e.runEvidence?[{id:`output:${e.goalId}:${e.runEvidence.generatedAt||`latest`}`,kind:`output`,output:{agentLabel:XC(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}}]:[]),...D&&k?[{id:`output:${D.goalId}:report:${k.publication.publication_id}`,kind:`output`,output:{agentId:k.agent_id,agentLabel:XC(k.agent_id),createdAt:k.publication.delivered_at,goalId:D.goalId,goalTitle:D.title,kind:`report`,outputId:k.publication.publication_id,report:{addedCount:k.delta.added_count,changedCount:k.delta.changed_count,deliveredAt:k.publication.delivered_at,generationId:k.generation_id,items:k.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:k.period_window.end_at,periodStartAt:k.period_window.start_at,predecessorPublicationId:k.publication.predecessor_publication_id,publicationId:k.publication.publication_id},safePreview:k.delta.items.map(e=>`${e.change_kind===`added`?`+`:`~`} ${e.title}\n${e.summary}`).join(` +`}function Ix({goalId:e,contract:t,copy:n,current:r}){if(t?.enabled!==!0)return null;let i=`loopx --format json goal-acceptance inspect --goal-id '${e.replace(/'/g,`'\\''`)}'`;return(0,z.jsxs)(`details`,{className:`delivery-acceptance-contract`,children:[(0,z.jsx)(`summary`,{children:n.title}),(0,z.jsxs)(`div`,{className:`delivery-acceptance-content`,children:[(0,z.jsx)(`p`,{children:n.boundary}),r?null:(0,z.jsx)(`p`,{role:`status`,className:`delivery-notice`,children:n.retained}),(0,z.jsxs)(`dl`,{className:`delivery-acceptance-source`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.source}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:e})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.revision}),(0,z.jsx)(`dd`,{children:t.revision})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.digest}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:t.digest})})]})]}),(0,z.jsx)(`h3`,{children:n.objective}),(0,z.jsx)(`p`,{children:t.objective||n.unknown}),t.non_goals.length?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`h3`,{children:n.nonGoals}),(0,z.jsx)(`ul`,{children:t.non_goals.map((e,t)=>(0,z.jsx)(`li`,{children:e},t))})]}):null,(0,z.jsx)(`h3`,{children:n.criteria}),t.criteria.length?(0,z.jsx)(`ul`,{children:t.criteria.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`code`,{children:e.id}),` · `,e.description]},e.id))}):(0,z.jsx)(`p`,{children:n.noCriteria}),(0,z.jsx)(`h3`,{children:n.tasks}),t.tasks.length?(0,z.jsx)(`ul`,{className:`delivery-acceptance-tasks`,children:t.tasks.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`p`,{children:[(0,z.jsx)(`code`,{children:e.todo_id}),` · `,(0,z.jsx)(`strong`,{children:n.taskState[e.state]})]}),(0,z.jsxs)(`p`,{children:[n.criteria,`: `,e.criterion_ids.length?e.criterion_ids.join(`, `):n.unknown]}),e.applicable===!1?(0,z.jsx)(`p`,{children:n.notApplicable}):null,e.reason?(0,z.jsx)(`p`,{children:e.reason}):null]},e.todo_id))}):(0,z.jsx)(`p`,{children:n.noTasks}),(0,z.jsx)(`h3`,{children:n.verification}),(0,z.jsx)(`p`,{children:n.verificationState[t.status]}),t.held_todo_ids.length?(0,z.jsxs)(`p`,{children:[n.heldTasks,`: `,t.held_todo_ids.join(`, `)]}):null,(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n.receipt}),t.verification?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{children:n.receiptNote}),(0,z.jsxs)(`dl`,{className:`delivery-acceptance-source`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.operation}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:t.verification.operation_id})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.revision}),(0,z.jsx)(`dd`,{children:t.verification.contract_revision})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.digest}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:t.verification.contract_digest})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n.verificationScope}),(0,z.jsx)(`dd`,{children:t.verification.todo_id??n.allCriteria})]})]}),(0,z.jsx)(`ul`,{children:t.verification.results.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsx)(`code`,{children:e.criterion_id}),` · `,e.passed?n.passed:n.failed,` · `,n.exitCode,`: `,e.exit_code??n.unknown]},e.criterion_id))})]}):(0,z.jsx)(`p`,{children:n.unknown})]}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:n.help}),(0,z.jsx)(`p`,{children:n.guidance}),(0,z.jsx)(`p`,{children:(0,z.jsx)(`code`,{children:i})}),(0,z.jsx)(`p`,{children:(0,z.jsx)(`code`,{children:`loopx goal-acceptance --help`})}),(0,z.jsx)(`a`,{href:`https://github.com/huangruiteng/loopx/blob/main/docs/reference/goal-acceptance-observations.md#owner-authorized-contract-v0`,target:`_blank`,rel:`noreferrer`,children:n.guide})]})]})]})}var Lx={en:{title:`Goal acceptance contract`,boundary:`Read-only owner contract. Task association and artifact checks are separate; neither automatically approves or completes the Goal.`,source:`Goal source`,revision:`Contract revision`,digest:`Contract digest`,objective:`Objective`,criteria:`Acceptance criteria`,nonGoals:`Outside scope`,tasks:`Task associations`,verification:`Artifact verification`,unknown:`Unknown`,noTasks:`No task associations reported. Coverage is unknown.`,noCriteria:`No acceptance criteria reported.`,retained:`Retained snapshot; refresh to read current acceptance facts.`,taskState:{ready:`Task association confirmed`,unbound:`Task association missing`,stale:`Task association stale`},verificationState:{unverified:`Artifact checks not verified`,accepted:`Artifact checks passed`,failed:`Artifact checks failed`,stale:`Artifact checks stale`,partial:`Task checks passed; Goal-wide verification unknown`,held:`Task associations require confirmation`},notApplicable:`Outside the current task gate`,heldTasks:`Tasks held`,receipt:`Recorded artifact checks`,receiptNote:`Recorded results use the revision below. The current contract status above accounts for stale checks and task holds.`,operation:`Verification reference`,verificationScope:`Verification scope`,allCriteria:`All contract criteria`,passed:`Passed`,failed:`Failed`,exitCode:`Exit code`,help:`Setup and readback`,guide:`Owner setup guide (v0)`,guidance:`The local Goal owner configures this contract through the CLI using configure --document and the inspected --expected-provider-revision. Changes and verification require --execute. Inspect before changing the contract; refresh this snapshot afterward. Disable with the current provider revision to hide this section.`},"zh-CN":{title:`Goal 验收合同`,boundary:`只读的所有者合同。任务关联与产物检查是独立事实,均不会自动批准或完成 Goal。`,source:`Goal 来源`,revision:`合同版本`,digest:`合同摘要`,objective:`目标`,criteria:`验收条件`,nonGoals:`范围之外`,tasks:`任务关联`,verification:`产物验证`,unknown:`未知`,noTasks:`未提供任务关联,覆盖范围未知。`,noCriteria:`未提供验收条件。`,retained:`当前保留旧快照,请刷新读取最新验收事实。`,taskState:{ready:`任务关联已确认`,unbound:`任务关联缺失`,stale:`任务关联已过期`},verificationState:{unverified:`产物检查未验证`,accepted:`产物检查通过`,failed:`产物检查失败`,stale:`产物检查已过期`,partial:`任务检查通过;Goal 整体验证未知`,held:`任务关联需要确认`},notApplicable:`不属于当前任务门禁范围`,heldTasks:`受阻任务`,receipt:`已记录的产物检查`,receiptNote:`记录对应下方版本。上方当前合同状态已考虑检查过期和任务阻塞。`,operation:`验证引用`,verificationScope:`验证范围`,allCriteria:`全部合同条件`,passed:`通过`,failed:`失败`,exitCode:`退出码`,help:`配置与读回`,guide:`所有者配置指南(v0)`,guidance:`本地 Goal 所有者通过 CLI 的 configure --document 配置合同,并提供 inspect 读到的 --expected-provider-revision。变更和验证都需要 --execute。变更前先检查合同,操作后刷新此快照;使用当前 provider revision 执行 disable 可隐藏本区块。`}},Rx={en:{contract:Lx.en,title:`Delivery & evidence`,scope:`Current work and a limited set of predecessors. Use Tasks for the full task inventory.`,observed:`Snapshot read`,chain:`Delivery chain`,relations:`Relationships`,acceptance:`Acceptance observations`,acceptanceBoundary:`Completed tasks and recorded evidence do not certify Goal acceptance.`,noGraph:`No delivery chain is available in this snapshot. This does not mean all work is complete.`,incomplete:`Some related information is missing or not expanded.`,unavailable:`Unknown`,refs:`Source references`,required:`Evidence still required`,guards:`Pending decisions`,next:`Next action`,owner:`Owner`,reason:`Reason`,historical:`Historical observations`,checks:`Component checks`,missingSources:`Missing sources`,observedScope:`Observation coverage`,kind:{deliverable:`Work`,gate:`Decision`,gate_summary:`Other decisions`,lease:`Ownership`,validation:`Validation`,repair:`Recovery`,handoff:`Handoff`,evidence:`Evidence`},state:{open:`Open`,ready:`Ready`,blocked:`Blocked`,done:`Done`,waiting:`Waiting`,unknown:`Unknown`},relation:{depends_on:`depends on`,blocks:`blocks`,validates:`validates / contextualizes`,repairs:`repairs`,audits:`audits`,continues:`continues`,hands_off_to:`hands off to`,supersedes:`supersedes`},refresh:`Refresh snapshot`,export:`Export delivery snapshot`,exported:`Snapshot downloaded`,loading:`Reading the current delivery chain…`,error:`The delivery snapshot could not be read. Refresh to retry.`,refreshError:`Refresh failed. The previous snapshot remains visible; refresh before opening linked work or exporting.`,changed:`Workspace facts changed after this snapshot. Refresh before opening linked work or exporting.`,search:`Search title, owner or reference`,all:`All nodes`,conditions:`Conditions & owners`,evidence:`Evidence & handoffs`,related:`Directly related`,map:`Map`,list:`List`,view:`Delivery chain layout`,filter:`Delivery chain focus`,visible:`Visible`,empty:`No nodes match these filters.`,reset:`Reset filters`,select:`Select a node to trace its relationships and open its source.`,work:`Work`,context:`Evidence & recovery`,details:`Selected item`,noRelations:`No relationships are recorded for this item.`,openTask:`Open task`,openGate:`Review decision`,openRun:`Open execution`,sourceUnavailable:`The linked item is not in the current workspace. Use its reference in the task board or CLI.`,omittedGates:`Decisions not expanded`,missing:`Missing predecessors`,clipped:`Expansion limited`,sourceClipped:`Source truncated`,yes:`Yes`,no:`No`,chainOnly:`Bounded chain`,exportFailed:`Download failed. Please retry.`},"zh-CN":{contract:Lx[`zh-CN`],title:`交付与依据`,scope:`仅含当前工作及有限前序,完整任务清单见任务页。`,observed:`快照读取时间`,chain:`交付链`,relations:`关联关系`,acceptance:`验收观察`,acceptanceBoundary:`任务完成、已有证据均不等于 Goal 已通过验收。`,noGraph:`当前快照没有可展示的交付链,这不代表工作已经全部完成。`,incomplete:`部分关联信息缺失或未展开。`,unavailable:`未知`,refs:`来源引用`,required:`仍需补齐的证据`,guards:`待你处理`,next:`下一步`,owner:`负责人`,reason:`原因`,historical:`历史观察`,checks:`组成检查`,missingSources:`缺失来源`,observedScope:`观察范围`,kind:{deliverable:`工作`,gate:`决策`,gate_summary:`其他决策`,lease:`责任归属`,validation:`验证`,repair:`恢复`,handoff:`交接`,evidence:`证据`},state:{open:`待处理`,ready:`就绪`,blocked:`受阻`,done:`已完成`,waiting:`等待`,unknown:`未知`},relation:{depends_on:`依赖`,blocks:`阻塞`,validates:`验证 / 提供背景`,repairs:`修复`,audits:`复核`,continues:`延续`,hands_off_to:`交接给`,supersedes:`替代`},refresh:`刷新快照`,export:`导出交付快照`,exported:`快照已下载`,loading:`正在读取当前交付链…`,error:`交付快照读取失败,请刷新重试。`,refreshError:`刷新失败,当前保留上次快照;请刷新后再打开关联工作或导出。`,changed:`工作区状态已在此快照之后变化,请刷新后再打开关联工作或导出。`,search:`搜索标题、负责人或引用`,all:`全部节点`,conditions:`条件与责任`,evidence:`证据与交接`,related:`直接关联`,map:`关系图`,list:`列表`,view:`交付链布局`,filter:`交付链范围`,visible:`当前显示`,empty:`没有匹配当前筛选的节点。`,reset:`重置筛选`,select:`选择一个节点,追溯关联关系并打开来源。`,work:`工作`,context:`证据与恢复`,details:`选中事项`,noRelations:`当前快照未记录此事项的关联关系。`,openTask:`打开任务`,openGate:`查看决策`,openRun:`打开执行`,sourceUnavailable:`关联事项未出现在当前工作区,可使用其引用到任务看板或 CLI 查找。`,omittedGates:`未展开决策`,missing:`缺失前序`,clipped:`展开受限`,sourceClipped:`来源被裁剪`,yes:`是`,no:`否`,chainOnly:`当前局部链`,exportFailed:`下载失败,请重试。`}};function zx({graph:e,nodes:t,selected:n,onSelect:r,copy:i}){let a=(0,R.useId)().replace(/:/g,``),o=[0,1,2].map(e=>t.filter(t=>Px(t)===e)),s=new Map(o.flatMap((e,t)=>e.map((e,n)=>[e.node_id,{x:t*320+12,y:n*124+48}]))),c=Math.max(1,...o.map(e=>e.length))*124+48;return(0,z.jsx)(`div`,{className:`delivery-map-scroll`,role:`region`,"aria-label":i.map,tabIndex:0,children:(0,z.jsxs)(`div`,{className:`delivery-map`,style:{height:c},children:[[i.conditions,i.work,i.context].map((e,t)=>(0,z.jsx)(`strong`,{className:`delivery-map-heading`,style:{left:t*320+12},children:e},e)),(0,z.jsxs)(`svg`,{"aria-hidden":`true`,width:`960`,height:c,children:[(0,z.jsx)(`defs`,{children:(0,z.jsx)(`marker`,{id:a,viewBox:`0 0 10 10`,refX:`9`,refY:`5`,markerWidth:`6`,markerHeight:`6`,orient:`auto-start-reverse`,children:(0,z.jsx)(`path`,{d:`M 0 0 L 10 5 L 0 10 z`,fill:`currentColor`})})}),e.edges.map(e=>{let t=s.get(e.from_node_id),r=s.get(e.to_node_id);if(!t||!r)return null;let i=t.x{let t=s.get(e.node_id);return(0,z.jsxs)(`button`,{className:`delivery-map-node`,style:{left:t.x,top:t.y},"aria-pressed":n===e.node_id,onClick:()=>r(e.node_id),type:`button`,children:[(0,z.jsxs)(`span`,{children:[i.kind[e.kind],(0,z.jsx)(`em`,{"data-state":e.state,children:i.state[e.state]})]}),(0,z.jsx)(`strong`,{title:e.title,children:e.title}),(0,z.jsx)(`small`,{children:e.owner_agent??i.unavailable})]},e.node_id)})]})})}function Bx({goal:e,items:t,userTodos:n,onSelect:r,active:i}){let{locale:a}=Ji(),o=Rx[a],[s,c]=(0,R.useState)({kind:`loading`}),[l,u]=(0,R.useState)(0),[d,f]=(0,R.useState)(``),[p,m]=(0,R.useState)(`all`),[h,g]=(0,R.useState)(null),[_,v]=(0,R.useState)(()=>window.matchMedia(`(min-width: 1024px)`).matches),[y,b]=(0,R.useState)(``),x=(0,R.useRef)(null),S=n.filter(t=>t.goalId===e.goalId),C=JSON.stringify([e.agentTodos,e.acceptanceObservation,S]),w=(0,R.useRef)(C);w.current=C,(0,R.useEffect)(()=>{if(!i)return;let t=new AbortController,n=w.current;return c(e=>({...e,kind:`loading`})),b(``),jx(e.goalId,t.signal).then(e=>{t.signal.aborted||c({kind:`ready`,snapshot:e,sourceKey:n})}).catch(()=>{t.signal.aborted||c(e=>({...e,kind:`error`}))}),()=>t.abort()},[e.goalId,l,i]);let T=s.snapshot?.goal_id===e.goalId?s.snapshot:null,E=!!T&&s.sourceKey!==C,D=!!T&&s.kind===`ready`&&!E,O=T?.graph,k=O?.nodes.find(e=>e.node_id===h),A=p===`related`&&!k?`all`:p,ee=(0,R.useMemo)(()=>O?Mx(O,d,A,h):[],[O,d,A,h]),j=O?.edges.filter(e=>e.from_node_id===h||e.to_node_id===h)??[],M=new Map(O?.nodes.map(e=>[e.node_id,e])),te=()=>{f(``),m(`all`)},ne=e=>{g(e),b(``),window.requestAnimationFrame(()=>x.current?.scrollIntoView({block:`nearest`}))};function N(n){let r=new Set(n.refs.todo_ids??[]),i=new Set(n.refs.gate_ids??[]),a=new Set(n.refs.run_ids??[]);return[...e.agentTodos.filter(e=>r.has(e.todoId)).map(t=>({kind:`todo`,item:{...t,goalId:e.goalId,goalTitle:e.title,ownerLabel:t.claimedBy}})),...S.filter(e=>i.has(e.todoId)||r.has(e.todoId)).map(e=>({kind:`attention`,item:e})),...t.filter(t=>t.kind===`run`&&t.run.goalId===e.goalId&&a.has(t.run.runId)).map(e=>({kind:`run`,item:e.run}))]}let P=k?N(k):[];function re(){if(!T||!D)return;let e;try{e=URL.createObjectURL(new Blob([Fx(T,o)],{type:`text/markdown;charset=utf-8`}));let t=document.createElement(`a`);t.href=e,t.download=`loopx-delivery-review.md`,t.click(),b(o.exported)}catch{b(o.exportFailed)}finally{e&&window.setTimeout(()=>URL.revokeObjectURL(e),1e3)}}return(0,z.jsxs)(`section`,{className:`delivery-review`,"aria-label":o.title,children:[(0,z.jsxs)(`header`,{className:`delivery-review-toolbar`,children:[(0,z.jsx)(`h2`,{children:o.title}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`button`,{type:`button`,disabled:s.kind===`loading`,onClick:()=>u(e=>e+1),children:[(0,z.jsx)(Um,{size:15}),o.refresh]}),(0,z.jsxs)(`button`,{type:`button`,disabled:!D,onClick:re,children:[(0,z.jsx)(gm,{size:15}),o.export]})]})]}),y?(0,z.jsx)(`p`,{role:`status`,children:y}):null,T?(0,z.jsxs)(z.Fragment,{children:[s.kind===`ready`?null:(0,z.jsx)(`p`,{role:s.kind===`error`?`alert`:`status`,className:`delivery-notice`,children:s.kind===`error`?o.refreshError:o.loading}),(0,z.jsxs)(`p`,{className:`delivery-snapshot-time`,children:[o.observed,` · `,(0,z.jsx)(`time`,{dateTime:T.observed_at,children:new Date(T.observed_at).toLocaleString(a)})]}),E?(0,z.jsx)(`p`,{role:`alert`,className:`delivery-notice`,children:o.changed}):null,(0,z.jsxs)(`p`,{className:`delivery-boundary`,children:[o.scope,` `,o.acceptanceBoundary]}),O?(0,z.jsxs)(z.Fragment,{children:[Nx(O)?(0,z.jsxs)(`details`,{className:`delivery-notice`,children:[(0,z.jsx)(`summary`,{children:o.incomplete}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:o.omittedGates}),(0,z.jsx)(`dd`,{children:O.limits.user_gate_truncated_count})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:o.missing}),(0,z.jsx)(`dd`,{children:O.limits.missing_predecessor_count??o.unavailable})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:o.clipped}),(0,z.jsx)(`dd`,{children:O.limits.predecessor_truncated===void 0?o.unavailable:O.limits.predecessor_truncated?o.yes:o.no})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:o.sourceClipped}),(0,z.jsx)(`dd`,{children:O.limits.source_truncated===void 0?o.unavailable:O.limits.source_truncated?o.yes:o.no})]})]})]}):null,(0,z.jsxs)(`section`,{className:`delivery-chain`,"aria-label":o.chain,children:[(0,z.jsxs)(`header`,{className:`delivery-chain-toolbar`,children:[(0,z.jsx)(`h3`,{children:o.chain}),(0,z.jsxs)(`span`,{children:[o.visible,` `,ee.length,`/`,O.nodes.length]}),(0,z.jsxs)(`div`,{role:`group`,"aria-label":o.view,children:[(0,z.jsx)(`button`,{type:`button`,"aria-pressed":_,onClick:()=>v(!0),children:o.map}),(0,z.jsx)(`button`,{type:`button`,"aria-pressed":!_,onClick:()=>v(!1),children:o.list})]})]}),(0,z.jsxs)(`div`,{className:`delivery-filters`,children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(Km,{size:16}),(0,z.jsx)(`input`,{"aria-label":o.search,placeholder:o.search,value:d,onChange:e=>f(e.target.value)})]}),(0,z.jsxs)(`select`,{"aria-label":o.filter,value:A,onChange:e=>m(e.target.value),children:[(0,z.jsx)(`option`,{value:`all`,children:o.all}),(0,z.jsx)(`option`,{value:`conditions`,children:o.conditions}),(0,z.jsx)(`option`,{value:`evidence`,children:o.evidence}),(0,z.jsx)(`option`,{value:`related`,disabled:!k,children:o.related})]}),(0,z.jsx)(`button`,{type:`button`,onClick:te,children:o.reset})]}),ee.length?_?(0,z.jsx)(zx,{graph:O,nodes:ee,selected:h,onSelect:ne,copy:o}):(0,z.jsx)(`ul`,{className:`delivery-node-list`,children:ee.map(e=>(0,z.jsx)(`li`,{children:(0,z.jsxs)(`button`,{type:`button`,"aria-pressed":h===e.node_id,onClick:()=>ne(e.node_id),children:[(0,z.jsx)(`span`,{children:o.kind[e.kind]}),(0,z.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`small`,{children:e.owner_agent??o.unavailable}),(0,z.jsx)(`em`,{"data-state":e.state,children:o.state[e.state]})]})},e.node_id))}):(0,z.jsx)(`p`,{className:`delivery-empty`,role:`status`,children:o.empty})]}),(0,z.jsx)(`section`,{className:`delivery-node-detail`,"aria-label":o.details,ref:x,children:k?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsxs)(`span`,{children:[o.kind[k.kind],` · `,o.state[k.state]]}),(0,z.jsx)(`h3`,{children:k.title}),k.owner_agent?(0,z.jsx)(`p`,{children:k.owner_agent}):null]}),k.from_agent||k.to_agent?(0,z.jsxs)(`p`,{children:[k.from_agent??o.unavailable,` → `,k.to_agent??o.unavailable]}):null,(0,z.jsx)(`div`,{className:`delivery-source-actions`,children:P.length?P.map((e,t)=>(0,z.jsxs)(`button`,{type:`button`,disabled:!D,onClick:()=>r(e),children:[(0,z.jsx)(vm,{size:15}),e.kind===`todo`?o.openTask:e.kind===`attention`?o.openGate:o.openRun]},`${e.kind}:${t}`)):(0,z.jsx)(`p`,{children:o.sourceUnavailable})}),(0,z.jsx)(`h4`,{children:o.relations}),j.length?(0,z.jsx)(`ul`,{className:`delivery-relations`,children:j.map(e=>(0,z.jsxs)(`li`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`button`,{type:`button`,onClick:()=>ne(e.from_node_id),children:M.get(e.from_node_id).title}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(Qp,{size:13}),o.relation[e.relation],(0,z.jsx)(Qp,{size:13})]}),(0,z.jsx)(`button`,{type:`button`,onClick:()=>ne(e.to_node_id),children:M.get(e.to_node_id).title})]}),(0,z.jsx)(`p`,{children:e.reason})]},e.edge_id))}):(0,z.jsx)(`p`,{children:o.noRelations}),(0,z.jsxs)(`details`,{children:[(0,z.jsx)(`summary`,{children:o.refs}),(0,z.jsx)(`code`,{children:k.node_id}),Object.entries(k.refs).map(([e,t])=>(0,z.jsxs)(`p`,{children:[(0,z.jsx)(`strong`,{children:e}),` `,t.join(`, `)]},e))]})]}):(0,z.jsx)(`p`,{children:o.select})})]}):(0,z.jsx)(`p`,{className:`delivery-notice`,children:o.noGraph})]}):(0,z.jsx)(`p`,{role:s.kind===`error`?`alert`:`status`,className:`delivery-notice`,children:s.kind===`error`?o.error:o.loading}),(0,z.jsx)(Ix,{goalId:e.goalId,contract:T?.acceptance?.goal_acceptance_contract,copy:o.contract,current:D}),(0,z.jsx)(Db,{goal:T?{...e,acceptanceObservation:T.acceptance}:e})]})}function Vx({active:e,goal:t,items:n,userTodos:r,readOnly:i,onOpenDetails:a,onSelect:o,onView:s}){let{t:c,locale:l}=Ji(),u=l===`zh-CN`?{progress:`当前进展`,attention:`需要你`,none:`当前没有已加载的待处理决定。`,details:`Goal 信息`,tasks:`查看任务`,usage:`最近 24 小时`,execution:`执行记录`,remote:`此来源仅提供同步的状态与验收观察,交付链需要实时本机来源。`}:{progress:`Current progress`,attention:`Needs you`,none:`No pending decisions are loaded.`,details:`Goal information`,tasks:`View tasks`,usage:`Last 24 hours`,execution:`Execution`,remote:`This source provides synchronized status and acceptance observations. The delivery chain requires the live local source.`},d=r.filter(e=>e.goalId===t.goalId),f=n.find(e=>e.kind===`run`&&e.run.goalId===t.goalId);return(0,z.jsxs)(`section`,{className:`goal-overview`,"aria-label":c(`header.overview`),children:[(0,z.jsxs)(`header`,{className:`goal-overview-heading`,children:[(0,z.jsx)(`h2`,{children:c(`header.overview`)}),(0,z.jsxs)(`button`,{onClick:a,type:`button`,children:[(0,z.jsx)(Tm,{size:15}),u.details]})]}),(0,z.jsxs)(`div`,{className:`goal-overview-summary${d.length?` has-attention`:``}`,children:[(0,z.jsxs)(`section`,{children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h3`,{children:u.progress}),(0,z.jsx)(`span`,{children:Yi(t.state,l)})]}),(0,z.jsx)(`strong`,{children:t.nextSentence}),t.agentSentence&&t.agentSentence!==t.nextSentence?(0,z.jsx)(`p`,{children:t.agentSentence}):null,d.length?null:(0,z.jsx)(`p`,{className:`goal-overview-quiet`,children:u.none}),f?(0,z.jsxs)(`button`,{className:`goal-overview-run`,type:`button`,onClick:()=>o({kind:`run`,item:f.run}),children:[(0,z.jsxs)(`small`,{children:[u.execution,` · `,f.run.agentLabel]}),(0,z.jsx)(`strong`,{children:f.run.title}),(0,z.jsx)(Qp,{size:15})]}):null]}),d.length?(0,z.jsxs)(`section`,{className:`goal-overview-attention`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`h3`,{children:u.attention}),(0,z.jsx)(`span`,{children:d.length})]}),(0,z.jsx)(`ul`,{children:d.slice(0,3).map(e=>(0,z.jsx)(`li`,{children:(0,z.jsxs)(`button`,{type:`button`,onClick:()=>o({kind:`attention`,item:e}),children:[(0,z.jsx)(`span`,{children:e.text}),(0,z.jsx)(Qp,{size:15})]})},e.todoId))}),d.length>3?(0,z.jsxs)(`button`,{type:`button`,onClick:()=>s(`tasks`),children:[u.tasks,` (`,d.length,`)`,(0,z.jsx)(Qp,{size:14})]}):null]}):null]}),(0,z.jsxs)(`section`,{className:`goal-overview-usage`,"aria-label":u.usage,children:[(0,z.jsx)(`h3`,{children:u.usage}),(0,z.jsxs)(`dl`,{children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:c(`drawer.tokensShort`)}),(0,z.jsx)(`dd`,{children:Ib(t.usage?.tokens24h,c(`drawer.usageNotMeasured`),Nb)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:c(`drawer.costShort`)}),(0,z.jsx)(`dd`,{children:Ib(t.usage?.costUsd24h,c(`drawer.usageNotMeasured`),Pb)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:c(`drawer.durationShort`)}),(0,z.jsx)(`dd`,{children:Ib(t.usage?.durationMs24h,c(`drawer.usageNotMeasured`),Fb)})]})]})]}),i?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`p`,{className:`goal-overview-source-note`,children:u.remote}),(0,z.jsx)(Db,{goal:t})]}):(0,z.jsx)(Bx,{active:e,goal:t,items:n,userTodos:r,onSelect:o})]})}function Hx({activeTab:e,panels:t,scrollRef:n}){let[r,i]=(0,R.useState)(()=>new Set([e])),a=(0,R.useRef)({});return(0,R.useEffect)(()=>i(t=>t.has(e)?t:new Set([...t,e])),[e]),(0,R.useLayoutEffect)(()=>{let t=n.current;if(!t)return;t.scrollTop=a.current[e]??0;let r=()=>{a.current[e]=t.scrollTop};return t.addEventListener(`scroll`,r,{passive:!0}),()=>t.removeEventListener(`scroll`,r)},[e,n]),Object.keys(t).map(n=>r.has(n)||n===e?(0,z.jsx)(`div`,{className:`personal-goal-view-panel`,"data-goal-panel":n,hidden:n!==e,children:t[n]},n):null)}function Ux(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 Wx(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===`context_only_captured`||e.last_event_status===`context_only_already_captured`?{label:t(`lark.health.contextCaptured`),detail:t(`lark.health.contextCapturedDetail`),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 Gx(e){return e.history_permission_guidance?.api_document_url??null}function Kx(e,t,n){if(e instanceof Rh){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 qx({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,A]=(0,R.useState)(``),[ee,j]=(0,R.useState)(!1),[M,te]=(0,R.useState)(null),[ne,N]=(0,R.useState)(`addressed_only`),[P,re]=(0,R.useState)(t&&r?`goal`:`manager`),[ie,ae]=(0,R.useState)(`async_inbox`),[F,oe]=(0,R.useState)(`topic_reply`),[I,se]=(0,R.useState)(``),[L,ce]=(0,R.useState)(!1),[le,ue]=(0,R.useState)({}),[de,fe]=(0,R.useState)(!1),[pe,me]=(0,R.useState)(null),[he,ge]=(0,R.useState)(null),[_e,ve]=(0,R.useState)(null),[ye,be]=(0,R.useState)(null),[xe,Se]=(0,R.useState)(!1),[Ce,we]=(0,R.useState)(`loopx-workspace-bot`),[Te,Ee]=(0,R.useState)(`feishu`),[De,Oe]=(0,R.useState)(null),[ke,Ae]=(0,R.useState)(!1),[je,Me]=(0,R.useState)(null),Ne=(0,R.useRef)(null),Pe=(0,R.useRef)(null),Fe=(0,R.useRef)(!1);async function Ie(){m(!0),g(null);try{let[e,t]=await Promise.all([c_(),__()]);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(Kx(e,o(`lark.error.configuration`),o))}finally{m(!1)}}(0,R.useEffect)(()=>{Ie()},[]),(0,R.useEffect)(()=>{if(!t||p||Fe.current||!r)return;Fe.current=!0;let e=d.find(e=>e.goal_id===r);e?Je(e):V(n.find(e=>e.goalId===r))},[d,t,n,r,p]),(0,R.useEffect)(()=>{if(!y||!x||_e){O([]),A(``),j(!1),te(null);return}let e=!1;j(!0),te(null);let t=window.setTimeout(()=>{h_(x,T).then(t=>{e||(O(t),A(e=>t.some(t=>t.chat_id===e)?e:t[0]?.chat_id??``))}).catch(t=>{e||(O([]),A(``),te(Kx(t,o(`lark.error.groupLoad`),o)))}).finally(()=>{e||j(!1)})},180);return()=>{e=!0,window.clearTimeout(t)}},[x,T,y,_e]),(0,R.useEffect)(()=>{if(!xe||!De||[`ready`,`failed`,`cancelled`].includes(De.status))return;let e=!1,t=window.setTimeout(()=>{d_(De.setup_id).then(async t=>{e||(Oe(t),t.verification_url&&Pe.current!==t.verification_url&&(Pe.current=t.verification_url,Ne.current&&!Ne.current.closed&&(Ne.current.location.href=t.verification_url)),t.status===`ready`&&(await Ie(),S(t.app_ref),ue({}),Se(!1)),t.status===`failed`&&Me(t.error??o(`lark.error.appCreate`)))}).catch(t=>{e||Me(Kx(t,o(`lark.error.setupPoll`),o))})},650);return()=>{e=!0,window.clearTimeout(t)}},[xe,De]);let Le=n.find(e=>e.goalId===C),Re=Le?.agentId?[{agentId:Le.agentId,label:Le.agentLabel??Le.agentId}]:[],B=Le?.agentLanes?.length?Le.agentLanes:Re,ze=B.some(e=>e.agentId===I),Be=[];L?Be=B.map(e=>({agentId:e.agentId,appRef:le[e.agentId]??x})):ze&&(Be=[{agentId:I,appRef:x}]);let Ve=Be.map(e=>e.agentId),He=!!_e||Be.length>0&&Be.every(e=>l.some(t=>t.app_ref===e.appRef&&t.reply_ready)),Ue=o(`lark.connect`);he?Ue=o(`lark.saveConnection`):L&&(Ue=o(`lark.connectAllAgentsAction`,{count:Ve.length}));let We=l.find(e=>e.app_ref===x),Ge=D.find(e=>e.chat_id===k),Ke=(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,_]),qe=(0,R.useMemo)(()=>d.filter(e=>Wx(e,o).state===`unverified`).length,[d,o]);function V(e){let i=e??n.find(e=>e.goalId===r)??n[0];ge(null),ve(null),re(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??``),A(``),w(i?.goalId??``),se(i?.agentId??``),ce(!1),ue({}),N(`addressed_only`),ae(`async_inbox`),oe(`topic_reply`),E(``),me(null),b(!0)}function Je(e){ge(e.goal_id),ve(e),re(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}]:[];se(e.agent_id??(r.length===1?r[0].agentId:``)),ce(!1),ue({}),N(e.capture_scope),ae(e.ingress_mode===`direct_session`?`async_inbox`:e.ingress_mode),oe(e.reply_mode),E(e.chat_name),me(null),b(!0)}function Ye(){Oe(null),Me(null),Pe.current=null,Se(!0)}async function Xe(){if(!(ke||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce))){Ae(!0),Me(null),Pe.current=null,Ne.current=window.open(window.location.href,`_blank`);try{let e=await u_({appRef:Ce,brand:Te});Oe(e)}catch(e){Ne.current?.close(),Me(Kx(e,o(`lark.error.setupStart`),o))}finally{Ae(!1)}}}async function Ze(){let e=De;if(Se(!1),Ne.current?.close(),e&&![`ready`,`failed`,`cancelled`].includes(e.status))try{await f_(e.setup_id)}catch{}}async function Qe(){if(!(!x||!C||!_e&&!Ge||P===`goal`&&Ve.length===0||de)){fe(!0),me(null);try{let e={...P===`manager`?{..._e?{connectionId:_e.connection_id}:{appRef:x,chatId:Ge.chat_id,chatName:Ge.chat_name}}:_e?{connectionId:_e.connection_id,agentId:I}:{agentBindings:Be,chatId:Ge.chat_id,chatName:Ge.chat_name},conversationKind:P,captureScope:P===`manager`?`addressed_only`:ne,goalId:C,incomingMode:ne===`configured_chat_all`?`all`:`mentions`,ingressMode:P===`manager`?`session_queue`:ie,replyMode:F},t=await v_({...e,execute:!1});if(!t.ok)throw new Rh(t.public_summary??t.blocker??o(`lark.error.bindPreview`),{error_code:t.blocker??`provider_api_failed`});let n=await v_({...e,execute:!0});if(!n.ok)throw new Rh(n.public_summary??n.blocker??o(`lark.error.bind`),{error_code:n.blocker??`provider_api_failed`});b(!1),await Ie(),i?.()}catch(e){me(Kx(e,o(`lark.error.bind`),o))}finally{fe(!1)}}}async function $e(e,t){if(ye!==t){be(t);return}try{await y_(e,t),be(null),await Ie(),i?.()}catch(e){g(Kx(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)(`button`,{"aria-label":o(`lark.closeSettings`),className:`personal-icon-button`,onClick:a,type:`button`,children:(0,z.jsx)(sh,{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)(Am,{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:Ye,type:`button`,children:[(0,z.jsx)(Vm,{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)(rm,{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:[qe>0?(0,z.jsxs)(`p`,{className:`personal-lark-route-readiness`,role:`status`,children:[(0,z.jsx)(Pm,{size:15}),o(`lark.routesUnverified`,{count:qe})]}):null,(0,z.jsxs)(`div`,{className:`personal-lark-toolbar`,children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(Km,{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:()=>V(),type:`button`,children:[(0,z.jsx)(Vm,{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`)})]}),Ke.map(e=>{let t=Wx(e,o);return(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,` · `,t.label]}),(0,z.jsx)(`small`,{children:t.detail}),t.state===`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)(vm,{size:12}),o(`lark.openEventSettings`)]}):null,Gx(e)?(0,z.jsxs)(`a`,{href:Gx(e)??void 0,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(vm,{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:e.conversation_kind===`manager`?o(`lark.managerConversation`):Ux(e.ingress_mode,o).label}),(0,z.jsx)(`small`,{children:e.conversation_kind===`manager`?o(`lark.managerConversationDescription`):e.agent_id??Ux(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:()=>Je(e),type:`button`,children:(0,z.jsx)(Xm,{size:15})}),(0,z.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,z.jsx)(ah,{size:15}),ye===e.connection_id?o(`common.confirm`):null]})]})]},e.connection_id)}),Ke.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(he?`lark.editConnection`:`lark.connectApp`)})]}),(0,z.jsx)(`button`,{"aria-label":o(`lark.closeConnection`),onClick:()=>b(!1),type:`button`,children:(0,z.jsx)(sh,{size:18})})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.conversationKind`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.conversationKind`),disabled:!!_e,value:P,onChange:e=>re(e.target.value),children:[(0,z.jsx)(`option`,{value:`manager`,children:o(`lark.managerConversation`)}),(0,z.jsx)(`option`,{value:`goal`,children:o(`lark.workerConversation`)})]})]}),P===`manager`?(0,z.jsx)(`p`,{children:o(`lark.managerConversationDescription`)}):null,_e?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.appProfile`)}),(0,z.jsx)(`div`,{children:_e.app_label})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.groupChat`)}),(0,z.jsx)(`div`,{children:_e.chat_name})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.bindGoal`)}),(0,z.jsx)(`div`,{children:_e.goal_title})]}),(0,z.jsx)(`small`,{children:o(`lark.editPreservesIdentity`)})]}):(0,z.jsxs)(z.Fragment,{children:[(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__`?Ye():(S(e.target.value),ue({}))},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`)})]}),We?.ready&&!We.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}),ee?(0,z.jsxs)(`div`,{className:`personal-lark-group-state`,role:`status`,children:[(0,z.jsx)(Am,{className:`is-spinning`,size:15}),o(`lark.groupLoading`)]}):null,!ee&&M?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:M}):null,!ee&&!M&&D.length===0?(0,z.jsx)(`div`,{className:`personal-lark-group-state`,role:`status`,children:o(`lark.groupEmpty`)}):null,!ee&&!M&&D.length>0?(0,z.jsx)(`select`,{"aria-label":o(`lark.groupChat`),onChange:e=>A(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),se(n.find(e=>e.goalId===t)?.agentId??``),ue({})},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)(Pm,{size:15}),`# `,Le?.title??Le?.goalId??`Goal`]})]}),P===`goal`?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.captureScope`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.captureScope`),disabled:_e?.ingress_mode===`direct_session`,onChange:e=>N(e.target.value),value:ne,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=Ux(e,o);return(0,z.jsxs)(`label`,{className:ie===e?`is-active`:``,children:[(0,z.jsx)(`input`,{"aria-label":t.label,checked:ie===e,name:`lark-agent-ingress`,onChange:()=>ae(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`),disabled:!!_e?.agent_id,onChange:e=>se(e.target.value),value:I,children:[ze?null:(0,z.jsx)(`option`,{disabled:!0,value:I,children:I?o(`lark.agentUnavailable`,{agent:I}):o(`lark.noAgentConfigured`)}),B.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`)})]}),!he&&B.length>1?(0,z.jsxs)(`label`,{"aria-label":o(`lark.connectAllAgents`),className:`personal-lark-check`,children:[(0,z.jsx)(`input`,{checked:L,onChange:e=>ce(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:B.length})})]})]}):null,!he&&L&&B.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:B.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=>ue(n=>({...n,[e.agentId]:t.target.value})),value:le[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,L&&Be.length>0&&!He?(0,z.jsx)(`div`,{className:`personal-lark-group-state is-error`,role:`alert`,children:o(`lark.agentAppPermissions`)}):null,Ve.length===0?(0,z.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:o(`lark.selectRegisteredAgent`)}):null]}):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:F,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)(om,{size:15}),o(`lark.cardinality`)]}),pe?(0,z.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:pe}):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||!_e&&(!We?.reply_ready||!k)||P===`goal`&&(!He||Ve.length===0)||!C||de,onClick:()=>void Qe(),type:`button`,children:[de?(0,z.jsx)(Am,{className:`is-spinning`,size:15}):null,Ue]})]})]})}):null,xe?(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 Ze(),type:`button`,children:(0,z.jsx)(sh,{size:18})})]}),De?(0,z.jsxs)(`div`,{className:`personal-lark-setup-progress`,children:[(0,z.jsx)(`span`,{className:`personal-lark-setup-icon is-${De.status}`,children:De.status===`ready`?(0,z.jsx)(om,{size:22}):(0,z.jsx)(Am,{className:De.status===`failed`?``:`is-spinning`,size:22})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:De.status===`ready`?o(`lark.appCreated`):De.status===`failed`?o(`lark.appCreateFailed`):o(`lark.waitingFeishu`)}),(0,z.jsx)(`p`,{children:De.status===`waiting_for_feishu`?o(`lark.waitingFeishuDescription`):De.status===`starting`?o(`lark.waitingLink`):De.error})]}),De.verification_url?(0,z.jsxs)(`a`,{href:De.verification_url,rel:`noreferrer`,target:`_blank`,children:[(0,z.jsx)(vm,{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=>we(e.target.value),placeholder:`loopx-workspace-bot`,value:Ce})]}),(0,z.jsxs)(`label`,{children:[(0,z.jsx)(`span`,{children:o(`lark.region`)}),(0,z.jsxs)(`select`,{"aria-label":o(`lark.region`),onChange:e=>Ee(e.target.value),value:Te,children:[(0,z.jsx)(`option`,{value:`feishu`,children:`Feishu`}),(0,z.jsx)(`option`,{value:`lark`,children:`Lark`})]})]}),Ce&&!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce)?(0,z.jsx)(`p`,{className:`personal-notification-error`,children:o(`lark.profileValidation`)}):null]}),je?(0,z.jsx)(`p`,{className:`personal-notification-error`,children:je}):null,(0,z.jsxs)(`footer`,{children:[(0,z.jsx)(`button`,{className:`personal-secondary-action`,onClick:()=>void Ze(),type:`button`,children:o(`lark.cancel`)}),De?null:(0,z.jsxs)(`button`,{className:`personal-primary-action`,disabled:ke||!/^[A-Za-z0-9][A-Za-z0-9._-]{0,99}$/.test(Ce),onClick:()=>void Xe(),type:`button`,children:[ke?(0,z.jsx)(Am,{className:`is-spinning`,size:15}):(0,z.jsx)(vm,{size:15}),o(`lark.continueFeishu`)]})]})]})}):null]})}function Jx(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function Yx(e,t,n){let r=Jx(t),i=Jx(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 Xx(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 Zx(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 Qx({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,z.jsxs)(`div`,{className:`personal-report-schedule`,children:[(0,z.jsxs)(`label`,{className:`is-boolean`,htmlFor:e,children:[(0,z.jsx)(`span`,{children:a?`按日历汇报`:`Calendar reports`}),(0,z.jsx)(`input`,{id:e,type:`checkbox`,role:`switch`,checked:!!o,disabled:!r,onChange:e=>e.target.checked?p({}):r?.(null)})]}),o?(0,z.jsxs)(z.Fragment,{children:[d?(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{htmlFor:`${e}-frequency`,children:[(0,z.jsx)(`span`,{children:a?`频率`:`Frequency`}),(0,z.jsxs)(`select`,{id:`${e}-frequency`,value:c.FREQ,disabled:!r,onChange:e=>p({FREQ:e.target.value}),children:[(0,z.jsx)(`option`,{value:`DAILY`,children:a?`每天`:`Daily`}),(0,z.jsx)(`option`,{value:`WEEKLY`,children:a?`每周`:`Weekly`})]})]}),c.FREQ===`WEEKLY`&&(0,z.jsxs)(`label`,{htmlFor:`${e}-day`,children:[(0,z.jsx)(`span`,{children:a?`星期`:`Weekday`}),(0,z.jsx)(`select`,{id:`${e}-day`,value:c.BYDAY,disabled:!r,onChange:e=>p({BYDAY:e.target.value}),children:l.map((e,t)=>(0,z.jsx)(`option`,{value:e,children:f[t]},e))})]}),(0,z.jsxs)(`label`,{htmlFor:`${e}-time`,children:[(0,z.jsxs)(`span`,{children:[a?`当地时间`:`Local time`,` (`,n,`)`]}),(0,z.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,z.jsx)(`p`,{role:`alert`,children:a?`此计划需在 JSON 模式中编辑;当前内容已保留。`:`Edit this schedule in JSON mode; its current value is preserved.`}),(0,z.jsx)(`p`,{children:a?`由现有唤醒检查到期计划;实际送达以回执为准。`:`Existing wakes check the schedule; delivery is confirmed by its receipt.`})]}):(0,z.jsx)(`p`,{children:a?`未设置日历计划;保持阶段结束时汇报。`:`No calendar schedule; report at validated stage boundaries.`})]})}function $x({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,z.jsx)(Qx,{id:n,value:i,timezone:a,onChange:r?e=>r(t.key,e):void 0});if(t.input_kind===`boolean`)return(0,z.jsxs)(`label`,{className:`is-boolean`,htmlFor:n,children:[(0,z.jsx)(`span`,{children:o}),(0,z.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,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:o}),(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))]})]});if(t.input_kind===`string_list`)return(0,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:o}),(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(` +`):``})]});let c=t.input_kind===`number`;return(0,z.jsxs)(`label`,{htmlFor:n,children:[(0,z.jsx)(`span`,{children:o}),(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:``})]})}function eS({copy:e={},disabled:t=!1,editor:n,enabledAction:r,omitKeys:i=[],onChange:a,value:o}){let s=(0,R.useId)(),c=new Set(i);return(0,z.jsx)(`fieldset`,{className:`personal-capability-fields`,disabled:t,children:n.fields.filter(e=>!c.has(e.key)).map(t=>{let n=(0,z.jsx)($x,{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,z.jsxs)(`div`,{className:`personal-capability-enabled-row`,children:[n,r]},t.key):n})})}var tS={en:{manager_runtime:{displayName:`Manager runtime`,description:`Selects the persistent host-tool profile used by owner manager conversations.`},steward_executor:{displayName:`Steward executor`,description:`Guides the steward executor, model, and selection boundary for this machine. A pinned route blocks substitution; a flexible pool permits only authorized fallback.`},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":{manager_runtime:{displayName:`管家 Runtime`,description:`选择管家会话持续生效的宿主工具模式。`},steward_executor:{displayName:`管家执行器`,description:`配置本机管家的执行器、模型与选择边界;锁定路径禁止替代,灵活池只允许在已授权范围内回退。`},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 绑定。`}}},nS={en:{runtime_profile:{label:`Runtime profile`,description:`Restricted keeps scoped LoopX reads only. Trusted owner enables normal host tools while protected operations retain separate checks.`},selection_policy:{label:`Selection policy`,description:`Preferred allows an explicit user choice; pinned rejects another executor; flexible permits fallback only inside the eligible pool.`},executor_endpoint:{label:`Primary steward executor`,description:`The preferred or pinned executor for this machine. In a flexible pool it is tried first when available.`},eligible_endpoints:{label:`Flexible eligible executors`,description:`One authorized executor per line. Use only with flexible selection and include the primary executor.`},executor_model:{label:`Model`,description:`Optional model for the selected executor. Leave blank to keep the executor's own default.`},executor_reasoning_effort:{label:`Reasoning effort`,description:`Optional reasoning effort for the selected executor. Leave blank to keep the executor's own default.`},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.`},wait_for_ci:{label:`Wait for CI`,description:`Disable to use local validation without querying or waiting for CI. Merge authority is unchanged.`},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":{runtime_profile:{label:`运行模式`,description:`restricted 仅使用受限 LoopX 读取;trusted_owner 开放常规宿主工具,但受保护操作仍单独校验。`},selection_policy:{label:`选择策略`,description:`preferred 允许用户显式改选;pinned 拒绝其他执行器;flexible 只在已授权资源池内回退。`},executor_endpoint:{label:`首选管家执行器`,description:`本机首选或锁定的执行器;灵活池模式下优先尝试它。`},eligible_endpoints:{label:`灵活池可用执行器`,description:`每行一个已授权执行器,仅用于 flexible;必须包含首选执行器。`},executor_model:{label:`模型`,description:`所选执行器使用的模型,可留空;留空表示沿用执行器自身的默认模型。`},executor_reasoning_effort:{label:`推理档位`,description:`所选执行器使用的推理档位,可留空;留空表示沿用执行器自身的默认档位。`},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。`},wait_for_ci:{label:`等待 CI`,description:`关闭后使用本地验证,不查询或等待 CI;不改变合并权限。`},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 rS(e,t){let n=tS[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 iS(e){return nS[e]}Object.freeze(Object.keys(tS.en).sort());function aS(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 oS({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 sS({source:e,t}){return e?(0,z.jsxs)(`p`,{className:`personal-capability-effective-source`,children:[(0,z.jsx)(Zm,{"aria-hidden":!0,size:15}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:t(`capabilities.effectiveSource`)}),t(`capabilities.source.${e}`)]})]}):null}function cS({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)(ih,{"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 lS(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 uS(e,t){return[...e].sort((e,n)=>{let r=lS(e)-lS(n);if(r!==0)return r;let i=rS(e,t),a=rS(n,t);return i.display_name.localeCompare(a.display_name,t)||e.capability_id.localeCompare(n.capability_id)})}function dS({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`,tabIndex:0,children:uS(e,t).map(e=>{let o=rS(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.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:o.display_name})}),(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 fS({capability:e,locale:t,source:n}){let{t:r}=Ji(),i=rS(e,t);return(0,z.jsxs)(`header`,{children:[(0,z.jsx)(`span`,{className:`personal-settings-icon`,children:(0,z.jsx)(Qm,{"aria-hidden":!0,size:18})}),(0,z.jsxs)(`div`,{children:[(0,z.jsxs)(`div`,{className:`personal-capability-heading-row`,children:[(0,z.jsx)(`h2`,{children:i.display_name}),(0,z.jsx)(sS,{source:n,t:r})]}),e.context_contribution&&(0,z.jsxs)(`details`,{className:`personal-capability-help`,"data-testid":`capability-context-phases`,children:[(0,z.jsx)(`summary`,{children:t===`zh-CN`?`主 Agent 协作指导`:`Coordinator workflow guidance`}),(0,z.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,z.jsx)(`dl`,{children:e.context_contribution.supported_phases.map(e=>(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:(0,z.jsx)(`code`,{children:e})}),(0,z.jsx)(`dd`,{children:pS[e][t===`zh-CN`?`zh`:`en`]})]},e))}),(0,z.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,z.jsxs)(`details`,{className:`personal-capability-help`,children:[(0,z.jsx)(`summary`,{children:t===`zh-CN`?`配置说明`:`Configuration help`}),(0,z.jsx)(`p`,{children:i.description}),(0,z.jsx)(`dl`,{children:e.configuration_editor.fields.map(e=>{let n=iS(t)[e.key],r=n?.description??e.description;return r?(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:n?.label??e.label}),(0,z.jsx)(`dd`,{children:r})]},e.key):null})})]},e.capability_id)]})]})}var pS={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 mS({callbacks:e,goalId:t,notification:n,onChanged:r}){let{t:i}=Ji(),[a,o]=(0,R.useState)(!1),[s,c]=(0,R.useState)(null);async function l(n){if(e.onToggleGoalAutoNotify){o(!0),c(null);try{let a=await e.onToggleGoalAutoNotify({autoNotify:n,goalId:t});if(!a.ok){c(a.public_summary??a.blocker??i(`notifications.setupFailed`));return}r()}catch(e){c(e instanceof Error?e.message:i(`notifications.setupFailed`))}finally{o(!1)}}}return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsxs)(`label`,{className:`personal-notification-toggle`,children:[(0,z.jsx)(`input`,{checked:n?.humanGateAutoNotifyEnabled??!1,disabled:a||n?.configured!==!0||!e.onToggleGoalAutoNotify,onChange:e=>void l(e.target.checked),type:`checkbox`}),(0,z.jsx)(`span`,{children:i(`notifications.autoNotify`)}),a?(0,z.jsx)(Am,{"aria-hidden":!0,className:`is-spinning`,size:14}):null]}),s?(0,z.jsx)(`p`,{className:`personal-notification-error`,role:`alert`,children:s}):null]})}function hS({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),[c,l]=(0,R.useState)(`guided`),[u,d]=(0,R.useState)(``),f=(0,R.useMemo)(()=>n?Xx(n.configuration_editor,u):null,[n,u]),p=c===`guided`||f!==null;(0,R.useEffect)(()=>{l(`guided`),d(``),a({busy:null,draft:Yx(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 Zg(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=Yx(n.configuration_editor,i.draft,n.default),o=await Qg(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`?Zx(r.draft,e,t):{...r.draft,[e]:t},preview:null})),s(null)}function _(e){if(!n||i.busy)return;d(e);let t=Xx(n.configuration_editor,e);a(e=>({...e,preview:null,draft:t?Yx(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 gS({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)(ih,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:i(n.host_capacity_pending?`capabilities.hostCapacityPartialWrite`:`capabilities.partialWrite`)}),(0,z.jsx)(`p`,{children:i(n.host_capacity_pending?`capabilities.hostCapacityPartialWriteDescription`:`capabilities.partialWriteDescription`)}),(0,z.jsx)(`small`,{children:n.recommended_action})]}),(0,z.jsxs)(`button`,{onClick:t,type:`button`,children:[(0,z.jsx)(Um,{"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}`)}),r.codex_host_capacity?(0,z.jsx)(`span`,{children:i(r.codex_host_capacity.write_required?`drawer.subagentHostCapacityRaise`:`drawer.subagentHostCapacityReady`,{configured:r.codex_host_capacity.configured_children??i(`drawer.subagentHostCapacityImplicit`),required:r.codex_host_capacity.required_children})}):null,(0,z.jsx)(`small`,{children:i(`capabilities.previewLocked`)})]}):null]})}function _S({callbacks:e,catalog:t,goalId:n,notification:r,onApplied:i,onNotificationChanged:a}){let{locale:o,t:s}=Ji(),c=(0,R.useMemo)(()=>uS(t.capabilities,o),[t.capabilities,o]),[l,u]=(0,R.useState)(()=>c[0]?.capability_id??``),d=(0,R.useMemo)(()=>c.find(e=>e.capability_id===l)??c[0],[c,l]),f=(0,R.useMemo)(()=>d?rS(d,o):void 0,[o,d]),{apply:p,changeDraft:m,changeJson:h,changeMode:g,editorMode:_,jsonDraft:v,jsonValid:y,error:b,mutation:x,preview:S}=hS({goalId:n,onApplied:i,selected:f,t:s}),{busy:C,draft:w,partialWrite:T,preview:E}=x;if(!d||!f)return(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:s(`capabilities.empty`)});let D=f.available_scopes.includes(`goal`),O=aS(f,`goal`),k=f.configuration_editor.read_only_reason??s(D?`capabilities.previewOnly`:`capabilities.machineOnly`);async function A(){if(!f||!O||C||!y)return;let e=Yx(f.configuration_editor,w,f.default);await S(e)}async function ee(){!O||C||await S(null)}return(0,z.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,z.jsx)(dS,{capabilities:t.capabilities,locale:o,onSelect:u,scope:`goal`,selectedCapabilityId:f.capability_id,t:s}),(0,z.jsxs)(`article`,{"aria-label":f.display_name,className:`personal-capability-detail`,tabIndex:0,children:[(0,z.jsx)(fS,{capability:d,locale:o,source:f.effective_configuration?.source}),(0,z.jsx)(cS,{available:O,t:s,description:k}),f.capability_id===`lark_event_inbox`?(0,z.jsxs)(`section`,{className:`personal-capability-linked-setting`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:s(`capabilities.larkInboxNotificationSetting`)}),(0,z.jsx)(`p`,{children:s(`capabilities.larkInboxNotificationDescription`)})]}),(0,z.jsx)(mS,{callbacks:e,goalId:n,notification:r,onChanged:a})]}):null,O?(0,z.jsxs)(z.Fragment,{children:[_===`json`||!f.configuration_editor.fields.some(e=>e.key===`enabled`&&e.input_kind===`boolean`)?(0,z.jsx)(`div`,{className:`personal-capability-editor-mode`,children:(0,z.jsxs)(`button`,{disabled:!!C||!y,onClick:g,type:`button`,children:[(0,z.jsx)(pm,{"aria-hidden":!0,size:14}),s(_===`guided`?`machine.editJson`:`machine.backToForm`)]})}):null,_===`guided`?(0,z.jsx)(`section`,{className:`personal-capability-field-summary`,children:(0,z.jsx)(eS,{disabled:!!C,copy:iS(o),editor:f.configuration_editor,onChange:m,value:w,enabledAction:(0,z.jsxs)(`button`,{className:`personal-capability-edit-json`,onClick:g,type:`button`,children:[(0,z.jsx)(pm,{"aria-hidden":!0,size:14}),s(`machine.editJson`)]})})}):(0,z.jsxs)(`label`,{className:`personal-capability-json-editor`,htmlFor:`goal-configuration-json`,children:[(0,z.jsx)(`span`,{children:s(`capabilities.jsonConfiguration`)}),(0,z.jsx)(`textarea`,{id:`goal-configuration-json`,"aria-describedby":`goal-configuration-json-help`,disabled:!!C,onChange:e=>h(e.target.value),rows:12,spellCheck:!1,value:v}),(0,z.jsx)(`small`,{id:`goal-configuration-json-help`,children:s(`capabilities.jsonHelp`)}),y?null:(0,z.jsx)(`span`,{className:`personal-machine-validation`,role:`alert`,children:s(`capabilities.jsonInvalid`)})]})]}):null,(0,z.jsx)(gS,{mutationError:b,onApplied:i,partialWrite:T,preview:E}),O?(0,z.jsxs)(`footer`,{className:`personal-capability-actions`,children:[f.current&&f.available_scopes.includes(`machine`)?(0,z.jsx)(`button`,{disabled:!!C||!y,onClick:()=>void ee(),type:`button`,children:s(`capabilities.restoreInheritance`)}):null,(0,z.jsx)(`button`,{disabled:!!C||!y,onClick:()=>void A(),type:`button`,children:s(C===`preview`?`common.loading`:`capabilities.previewChanges`)}),(0,z.jsx)(`button`,{className:`is-primary`,disabled:!!C||!E||!y,onClick:()=>void p(),type:`button`,children:s(C===`apply`?`common.loading`:`capabilities.applyPreview`)})]}):null,(0,z.jsx)(oS,{values:[{label:s(`capabilities.goalValue`),value:f.current},{label:s(f.machine_current?`capabilities.machineValue`:`capabilities.defaultValue`),value:f.machine_current??f.default}],t:s},d.capability_id)]})]})}function vS({callbacks:e,goalId:t,notification:n,onChanged:r}){let{t:i}=Ji(),[a,o]=(0,R.useState)(null),[s,c]=(0,R.useState)(null),[l,u]=(0,R.useState)(!1);function d(){t&&(u(!0),c(null),Xg(t).then(o).catch(e=>c(e instanceof Error?e.message:i(`capabilities.loadFailed`))).finally(()=>u(!1)))}return(0,R.useEffect)(d,[t]),t?l&&!a?(0,z.jsxs)(`p`,{"aria-live":`polite`,className:`personal-capability-empty`,children:[(0,z.jsx)(Am,{className:`personal-spin`,size:18}),i(`capabilities.loading`)]}):s?(0,z.jsxs)(`section`,{className:`personal-capability-error`,role:`alert`,children:[(0,z.jsx)(ih,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`strong`,{children:i(`capabilities.loadFailed`)}),(0,z.jsx)(`small`,{children:s})]}),(0,z.jsxs)(`button`,{onClick:d,type:`button`,children:[(0,z.jsx)(Um,{"aria-hidden":!0,size:15}),i(`capabilities.retry`)]})]}):a?(0,z.jsxs)(`section`,{className:`personal-capability-settings`,"data-revision":a.revision,children:[(0,z.jsxs)(`details`,{className:`personal-capability-scope-note`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(Zm,{"aria-hidden":!0,size:17}),i(`capabilities.atomicOverride`)]}),(0,z.jsx)(`p`,{children:i(`capabilities.atomicOverrideDescription`)})]}),(0,z.jsx)(_S,{callbacks:e,catalog:a.capability_catalog,goalId:t,notification:n,onApplied:d,onNotificationChanged:r})]}):null:(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:i(`capabilities.chooseGoal`)})}function yS(e){return e&&typeof e==`object`&&!Array.isArray(e)?e:{}}function bS(e,t){let n=t?.machine_namespace;return n?e?.machine_configuration?.namespaces[n]:void 0}function xS(e,t,n){let r={...yS(e.default),...yS(t),...n};return e.capability_id===`steward_executor`&&(Object.hasOwn(n,`selection_policy`)||Object.hasOwn(n,`eligible_endpoints`))&&(r.schema_version=yS(e.default).schema_version),r}function SS(e,t){for(let n of e.configuration_editor.fields){let e=t[n.key];if(n.required&&(e==null||e===``))return!1}if(e.capability_id===`periodic_report`&&t.enabled===!0)return!!(String(t.profile_preset??``).trim()&&String(t.route_ref??``).trim()&&String(t.timezone??``).trim());if(e.capability_id===`steward_executor`){let e=String(t.selection_policy??`preferred`),n=String(t.executor_endpoint??``),r=Array.isArray(t.eligible_endpoints)?t.eligible_endpoints.map(e=>String(e)):[];return e===`flexible`?r.length>0&&r.includes(n)&&new Set(r).size===r.length:r.length===0}return!0}function CS(e){try{let t=JSON.parse(e);return t&&typeof t==`object`&&!Array.isArray(t)?t:null}catch{return null}}function wS(e){return e?e===`absent`?e:e.replace(/^sha256:/,``).slice(0,12):`—`}function TS(){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=(0,R.useMemo)(()=>uS(n?.capability_catalog.capabilities??[],e),[n,e]),D=n?.invalid_namespaces[0],O=E.find(e=>e.capability_id===i)??(D?E.find(e=>e.machine_namespace===D):void 0)??E.find(e=>aS(e,`machine`))??E[0],k=O?rS(O,e):void 0,A=bS(n,k),ee=!!(k?.machine_namespace&&A),j=!!(k&&aS(k,`machine`)),M=(0,R.useMemo)(()=>CS(c),[c]),te=k?u===`json`?M:xS(k,A,o):null,ne=!!(k&&(u===`json`?M:SS(k,te??{})));async function N(){r(await Yg())}(0,R.useEffect)(()=>{let e=!0;return Yg().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,R.useEffect)(()=>{if(!k)return;let e=bS(n,k),t=Yx(k.configuration_editor,e??k.default,k.default),r=xS(k,e,t);s(t),l(JSON.stringify(r,null,2)),d(j?`guided`:`json`),p(null),h(`upsert`),y(null)},[n,i,e]);function P(e,t){s(n=>k?.capability_id===`periodic_report`?Zx(n,e,t):{...n,[e]:t}),p(null),h(`upsert`),C(null),T(null)}function re(e){if(k){if(e===`json`)l(JSON.stringify(xS(k,A,o),null,2));else if(M)s(Yx(k.configuration_editor,M,k.default));else{C(t(`machine.jsonInvalid`));return}d(e),p(null),h(`upsert`),C(null)}}async function ie(){if(!(!j||!k?.machine_namespace||!te||!ne||b)){x(`preview`),C(null),T(null);try{h(`upsert`),p(await $g(k.machine_namespace,te))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function ae(){if(!(!j||!k?.machine_namespace||!ee||b)){x(`preview`),C(null),T(null);try{h(`remove`),p(await t_(k.machine_namespace))}catch(e){C(e instanceof Error?e.message:t(`machine.previewError`))}finally{x(null)}}}async function F(){if(!j||!k?.machine_namespace||!f||b||m===`upsert`&&!te)return;x(`apply`),C(null);let e=m;try{let n=e===`remove`?await n_(k.machine_namespace,f.plan_revision):await e_(k.machine_namespace,te,f.plan_revision);_(n),p(null),h(`upsert`),y(null),await N(),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 oe(){if(!(!g?.transaction_id||b)){x(`rollback-preview`),C(null);try{y(await r_(g.transaction_id))}catch(e){C(e instanceof Error?e.message:t(`machine.rollbackError`))}finally{x(null)}}}async function I(){if(!(!g?.transaction_id||!v||b)){x(`rollback`),C(null);try{await i_(g.transaction_id,v.plan_revision),_(null),y(null),p(null),await N(),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`)}):k?(0,z.jsxs)(`section`,{className:`personal-capability-settings`,"data-revision":n?.revision,children:[(0,z.jsxs)(`details`,{className:`personal-capability-scope-note`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(Zm,{"aria-hidden":!0,size:17}),t(`machine.liveDefault`)]}),(0,z.jsx)(`p`,{children:t(`machine.liveDefaultDescription`)})]}),(0,z.jsxs)(`div`,{className:`personal-capability-body`,children:[n?.status===`invalid`?(0,z.jsxs)(`section`,{className:`personal-machine-error`,"data-testid":`machine-invalid-repair`,role:`alert`,children:[(0,z.jsx)(`strong`,{children:t(`machine.invalidStoredConfiguration`)}),(0,z.jsx)(`p`,{children:t(`machine.invalidStoredConfigurationDescription`)})]}):null,(0,z.jsxs)(`div`,{className:`personal-capability-layout`,children:[(0,z.jsx)(dS,{capabilities:E,locale:e,onSelect:a,scope:`machine`,selectedCapabilityId:k.capability_id,t}),(0,z.jsxs)(`article`,{"aria-label":k.display_name,className:`personal-capability-detail`,tabIndex:0,children:[(0,z.jsx)(fS,{capability:O,locale:e,source:k.available_scopes.includes(`machine`)?ee?`machine_default`:`capability_default`:void 0}),(0,z.jsx)(cS,{available:j,t,description:k.available_scopes.includes(`machine`)?t(`machine.editorUnavailableDescription`):t(`machine.goalOnly`)}),k.capability_id===`periodic_report`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(Zm,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:A?.schedule?e===`zh-CN`?`日历与阶段汇报`:`Calendar and stage reports`:t(`machine.periodicReportActivation`)}),(0,z.jsx)(`p`,{children:A?.schedule?A.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,k.capability_id===`change_quality_qualification`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(Zm,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.changeQualityActivation`)}),(0,z.jsx)(`p`,{children:t(`machine.changeQualityActivationDescription`)})]})]}):null,k.capability_id===`todo_replan_cadence`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(Zm,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:t(`machine.replanCadenceActivation`)}),(0,z.jsx)(`p`,{children:t(`machine.replanCadenceActivationDescription`)})]})]}):null,k.capability_id===`pull_request_review`?(0,z.jsxs)(`section`,{className:`personal-capability-behavior-note`,children:[(0,z.jsx)(Zm,{"aria-hidden":!0,size:18}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e===`zh-CN`?`只改变队列排序`:`Queue ordering only`}),(0,z.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,j?(0,z.jsxs)(z.Fragment,{children:[u===`json`||!k.configuration_editor.fields.some(e=>e.key===`enabled`&&e.input_kind===`boolean`)?(0,z.jsx)(`div`,{className:`personal-capability-editor-mode`,children:(0,z.jsxs)(`button`,{onClick:()=>re(u===`guided`?`json`:`guided`),type:`button`,children:[(0,z.jsx)(pm,{"aria-hidden":!0,size:14}),t(u===`guided`?`machine.editJson`:`machine.backToForm`)]})}):null,u===`guided`?(0,z.jsxs)(`section`,{className:`personal-capability-field-summary`,children:[(0,z.jsx)(eS,{copy:iS(e),disabled:!!b,editor:k.configuration_editor,onChange:P,value:o,enabledAction:(0,z.jsxs)(`button`,{className:`personal-capability-edit-json`,onClick:()=>re(`json`),type:`button`,children:[(0,z.jsx)(pm,{"aria-hidden":!0,size:14}),t(`machine.editJson`)]})}),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`)}),M?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)(om,{"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:wS(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:wS(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?I():oe()),type:`button`,children:[(0,z.jsx)(Wm,{"aria-hidden":!0,size:15}),t(b===`rollback`||b===`rollback-preview`?`common.loading`:v?`machine.confirmRollback`:`machine.previewRollback`)]})]}):null,j?(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)(rh,{"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 F(),type:`button`,children:t(b===`apply`?`common.loading`:`machine.applyPreview`)})]}):null,k.available_scopes.includes(`machine`)?(0,z.jsx)(oS,{values:[{label:t(`machine.currentValue`),value:A},{label:t(`capabilities.defaultValue`),value:k.default}],t},k.capability_id):null]})]})]})]}):(0,z.jsx)(`p`,{className:`personal-capability-empty`,children:t(`machine.capabilityEmpty`)})}function ES(e,t){return t(e===`invalid`?`machine.credentialInvalid`:e===`configured`?`machine.credentialConfigured`:`machine.credentialAbsent`)}function DS(e,t){return t(e===`machine_store`?`machine.credentialSourceMachine`:e===`service_environment`?`machine.credentialSourceEnvironment`:`machine.credentialSourceUnset`)}function OS(){let{t:e}=Ji(),[t,n]=(0,R.useState)(null),[r,i]=(0,R.useState)(``),[a,o]=(0,R.useState)(``),[s,c]=(0,R.useState)(``),[l,u]=(0,R.useState)(null),[d,f]=(0,R.useState)(null),p=(0,R.useCallback)(async()=>{c(`load`);try{let e=await qg();n(e),o(String(e.base_url.value??``))}catch(t){u(t instanceof Error?t.message:e(`machine.credentialError`))}finally{c(``)}},[e]);(0,R.useEffect)(()=>{p()},[p]);async function m(t,r){c(`store`),u(null),f(null);try{let e=await Jg(t);n(e),o(String(e.base_url.value??``)),i(``),f(r)}catch(t){u(t instanceof Error?t.message:e(`machine.credentialError`))}finally{c(``)}}if(!t&&s===`load`)return(0,z.jsx)(`div`,{className:`personal-machine-loading`,role:`status`,children:e(`common.loading`)});let h=t?`${ES(t.provider_key.configured?`configured`:`absent`,e)} · ${DS(t.provider_key.source,e)}`:``,g=t?`${t.base_url.value??e(`machine.credentialAbsent`)} · ${DS(t.base_url.source,e)}`:``;return(0,z.jsxs)(`section`,{className:`personal-operator-credential`,"data-testid":`operator-credential-settings`,children:[(0,z.jsxs)(`header`,{children:[(0,z.jsx)(Em,{"aria-hidden":!0,size:17}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:e(`machine.credentialTitle`)}),(0,z.jsx)(`p`,{children:e(`machine.credentialDescription`)})]}),(0,z.jsx)(`span`,{className:`personal-operator-credential-status`,children:t?ES(t.status,e):e(`common.loading`)})]}),t?(0,z.jsxs)(`dl`,{className:`personal-operator-credential-readback`,children:[(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e(`machine.credentialApiKey`)}),(0,z.jsx)(`dd`,{children:h})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e(`machine.credentialFingerprint`)}),(0,z.jsx)(`dd`,{children:(0,z.jsx)(`code`,{children:t.provider_key.fingerprint??e(`common.none`)})})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:e(`machine.credentialBaseUrl`)}),(0,z.jsx)(`dd`,{children:g})]})]}):null,t?.status===`invalid`&&t.repair?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:t.repair}):null,(0,z.jsxs)(`label`,{htmlFor:`operator-credential-api-key`,children:[(0,z.jsx)(`span`,{children:e(`machine.credentialApiKey`)}),(0,z.jsx)(`input`,{autoComplete:`off`,disabled:!!s,id:`operator-credential-api-key`,onChange:e=>i(e.target.value),placeholder:e(`machine.credentialApiKeyPlaceholder`),type:`password`,value:r})]}),(0,z.jsxs)(`label`,{htmlFor:`operator-credential-base-url`,children:[(0,z.jsx)(`span`,{children:e(`machine.credentialBaseUrl`)}),(0,z.jsx)(`input`,{autoComplete:`off`,disabled:!!s,id:`operator-credential-base-url`,onChange:e=>o(e.target.value),placeholder:e(`machine.credentialBaseUrlPlaceholder`),type:`text`,value:a})]}),l?(0,z.jsx)(`p`,{className:`personal-machine-error`,role:`alert`,children:l}):null,d?(0,z.jsxs)(`p`,{className:`personal-machine-notice`,role:`status`,"aria-live":`polite`,children:[(0,z.jsx)(om,{"aria-hidden":!0,size:16}),d]}):null,(0,z.jsxs)(`footer`,{className:`personal-operator-credential-actions`,children:[(0,z.jsx)(`button`,{className:`is-primary`,disabled:!!s||!r.trim()&&!a.trim(),onClick:()=>void m({...r.trim()?{provider_key:r}:{},...a.trim()?{base_url:a}:{}},e(`machine.credentialStored`)),type:`button`,children:e(s===`store`?`common.loading`:`machine.credentialStore`)}),(0,z.jsxs)(`button`,{disabled:!!s||t?.provider_key.configured!==!0,onClick:()=>void m({clear_provider_key:!0},e(`machine.credentialCleared`)),type:`button`,children:[(0,z.jsx)(rh,{"aria-hidden":!0,size:15}),e(`machine.credentialClearKey`)]}),(0,z.jsxs)(`button`,{disabled:!!s||t?.base_url.configured!==!0,onClick:()=>void m({clear_base_url:!0},e(`machine.credentialCleared`)),type:`button`,children:[(0,z.jsx)(rh,{"aria-hidden":!0,size:15}),e(`machine.credentialClearUrl`)]})]}),(0,z.jsxs)(`details`,{className:`personal-capability-scope-note`,children:[(0,z.jsxs)(`summary`,{children:[(0,z.jsx)(Zm,{"aria-hidden":!0,size:17}),e(`machine.credentialTitle`)]}),(0,z.jsx)(`p`,{children:e(`machine.credentialBoundary`)})]})]})}var kS={appearance:Lm,capabilities:Qm,language:Dm,lark:Xm,machine:Jm,provider:Em};function AS({callbacks:e,focusGoalConnection:t=!1,goals:n,initialGoalId:r,initialTab:i=`lark`,goalNotifications:a,onChanged:o,onClose:s,onThemeChange:c,theme:l}){let{locale:u,setLocale:d,t:f}=Ji(),[p,m]=(0,R.useState)(i),h=(0,R.useRef)(null);(0,R.useEffect)(()=>{let e=h.current;if(!e)return;let t=()=>{if(e.scrollWidth<=e.clientWidth)return;let t=e.querySelector(`[aria-current="page"]`);if(!t)return;let n=e.getBoundingClientRect(),r=t.getBoundingClientRect(),i=r.leftn.right?r.right-n.right:0;i&&(e.scrollLeft+=i)};t();let n=new ResizeObserver(t);return n.observe(e),()=>n.disconnect()},[p]);let g=[...r?[{key:`capabilities`,label:f(`capabilities.title`)}]:[],{key:`provider`,label:f(`settings.modelProvider`)},{key:`machine`,label:f(`settings.globalCapabilities`)},{key:`lark`,label:`Lark`},{key:`appearance`,label:f(`settings.appearance`)},{key:`language`,label:f(`settings.language`)}],_=[{label:f(`settings.languageEnglish`),value:`en`},{label:f(`settings.languageSimplifiedChinese`),value:`zh-CN`}],v={appearance:{title:f(`settings.appearance`)},capabilities:{title:f(`capabilities.title`)},language:{title:f(`settings.language`)},lark:{title:`Lark`},machine:{title:f(`settings.globalCapabilities`)},provider:{title:f(`settings.modelProvider`)}}[p];return(0,z.jsxs)(`section`,{"aria-label":f(`settings.title`),className:`personal-settings-page`,"data-pw-theme":l,children:[(0,z.jsxs)(`aside`,{className:`personal-settings-sidebar`,children:[(0,z.jsxs)(`button`,{autoFocus:!0,className:`personal-settings-back`,onClick:s,type:`button`,children:[(0,z.jsx)(Zp,{size:17}),(0,z.jsx)(`span`,{children:f(`settings.back`)})]}),(0,z.jsx)(`div`,{className:`personal-settings-title`,children:(0,z.jsx)(`strong`,{children:f(`settings.title`)})}),(0,z.jsx)(`nav`,{"aria-label":f(`settings.categories`),className:`personal-settings-tabs`,ref:h,children:g.map(e=>{let t=kS[e.key];return(0,z.jsxs)(`button`,{"aria-current":p===e.key?`page`:void 0,onClick:()=>m(e.key),type:`button`,children:[(0,z.jsx)(t,{size:17}),(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:e.label})})]},e.key)})})]}),(0,z.jsxs)(`main`,{className:`personal-settings-body`,children:[(0,z.jsx)(`header`,{className:`personal-settings-header`,children:(0,z.jsx)(`div`,{children:(0,z.jsx)(`h1`,{children:v.title})})}),p===`lark`?(0,z.jsx)(qx,{embedded:!0,focusGoalConnection:t,goals:n,initialGoalId:r,onChanged:o,onClose:s}):null,p===`provider`?(0,z.jsx)(`div`,{className:`personal-provider-settings`,children:(0,z.jsx)(OS,{})}):null,p===`machine`?(0,z.jsx)(TS,{}):null,p===`capabilities`?(0,z.jsx)(vS,{callbacks:e,goalId:r,notification:a.find(e=>e.goalId===r),onChanged:o}):null,p===`appearance`?(0,z.jsx)(`section`,{className:`personal-detail-card personal-appearance-settings`,children:(0,z.jsxs)(`div`,{className:`personal-settings-choice-group`,role:`radiogroup`,"aria-label":f(`settings.workspaceTheme`),children:[(0,z.jsxs)(`button`,{"aria-checked":l===`loopx`,onClick:()=>c(`loopx`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-loopx`}),(0,z.jsx)(`strong`,{children:f(`settings.themeLoopx`)})]}),(0,z.jsxs)(`button`,{"aria-checked":l===`paper`,onClick:()=>c(`paper`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-paper`}),(0,z.jsx)(`strong`,{children:f(`settings.themeDefault`)})]}),(0,z.jsxs)(`button`,{"aria-checked":l===`brutal`,onClick:()=>c(`brutal`),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{className:`personal-settings-theme-swatch is-brutal`}),(0,z.jsx)(`strong`,{children:f(`settings.themeHighContrast`)})]})]})}):null,p===`language`?(0,z.jsx)(`section`,{className:`personal-settings-card`,children:(0,z.jsx)(`div`,{"aria-label":f(`settings.language`),className:`personal-language-options`,role:`radiogroup`,children:_.map(e=>(0,z.jsxs)(`button`,{"aria-checked":u===e.value,className:u===e.value?`is-selected`:``,onClick:()=>d(e.value),role:`radio`,type:`button`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(`strong`,{children:e.label})}),u===e.value?(0,z.jsx)(om,{"aria-hidden":!0,size:17}):null]},e.value))})}):null]})]})}var jS=`loopx-pw-theme`,MS=`loopx`;function NS(){try{let e=window.localStorage.getItem(jS);return e===`loopx`||e===`paper`||e===`brutal`?e:MS}catch{return MS}}function PS(e){try{window.localStorage.setItem(jS,e)}catch{}}function FS({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 IS(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 LS(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 RS(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 zS({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=[];e.filter(e=>!e.loadState).forEach(e=>{let t=Mb(e);t===`history`?u.push(e):t!==`stopped`&&l[t].push(e)});let d=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.jsx)(`strong`,{children:e.title}),(0,z.jsx)(`span`,{className:`personal-home-goal-meta`,children:e.agentLaneCount&&e.agentLaneCount>1?a(`header.workAgentCount`,{count:e.agentLaneCount}):e.agentLabel??e.agentId}),(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?RS(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)(um,{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(d)]}):null,(0,z.jsx)(`div`,{className:`personal-home-lanes`,children:c.filter(e=>l[e.key].length>0).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)(`div`,{className:`personal-home-lane-list`,children:l[e.key].map(d)})]},e.key))}),u.length?(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.map(d)})]}):null]})}function BS({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)(Um,{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)(um,{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)(Sm,{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)(Sm,{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.kind===`report`?i(`files.verifiedReport`):null,RS(e.output.createdAt,r,i)].filter(Boolean).join(` · `)})]},e.id))]})}function VS({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)(rm,{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)(km,{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)(sh,{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)(bb,{text:t.text}),t.pending?(0,z.jsx)(`small`,{children:o(`conversation.agentPending`)}):null,(0,z.jsx)(Fy,{request:t.collaboration}),(0,z.jsx)(Tb,{delivery:t.returnDelivery})]})]},t.id))})]})}function HS({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)(rm,{size:17}),r(`session.record`)]}),(0,z.jsx)(`button`,{"aria-label":r(`session.closeRecord`),onClick:e,type:`button`,children:(0,z.jsx)(sh,{size:15})})]}),(0,z.jsx)(`div`,{children:(0,z.jsx)(`strong`,{children:n.title})}),(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 US(e,t,n){let r=[];if(t===null)return e.userTodos.slice(0,4).forEach(t=>r.push({attention:{...t,goalTitle:t.goalTitle??Ab(e,t.goalId)},id:`attention:${t.todoId}`,kind:`attention`})),e.goals.filter(e=>Mb(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`})}jb(i)&&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 WS(e){return e===`preview_ready`?`ready`:e===`cancelled`?`draft`:e===`failed`?`error`:e}function GS(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 KS(e,t,n){let r=t.operationFrame,i=r?.content.fields.map((e,t)=>({key:`projection:${t}`,label:e.label,value:e.value})).slice(0,8)??[];return[{key:`operation_state`,label:n(`proposal.field.operationState`),value:r?.lifecycleState??e.status},...r?.kind===`result`?[{key:`result_delivery`,label:n(`proposal.field.resultDelivery`),value:r.resultDeliveryVerified?n(`proposal.resultDelivery.verified`):n(`proposal.resultDelivery.pending`)}]:[],...i,...r?[{key:`warning`,label:n(`proposal.field.confirmationBoundary`),value:r.content.warning}]:[],...r?[{key:`expires_at`,label:n(`proposal.field.expiresAt`),value:r.expiresAt}]:[]].slice(0,10)}function qS(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 JS(e,t){let n=qS(e),r=Gy(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=r.operationFrame,s=o?.content.title??e.summary,c=e.action_kind===`operation.execute`?s:e.action_kind===`team.plan`?e.status===`applied`?nb(tb(e.receipt),t):t(`proposal.summary.teamPlan`,{goal:Zy(e.normalized_parameters),count:Xy(e.normalized_parameters)}):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`?KS(e,r,t):e.action_kind===`team.plan`?Yy(e.normalized_parameters,t):GS(e.normalized_parameters,t),goalId:typeof e.normalized_parameters.goal_id==`string`?e.normalized_parameters.goal_id:void 0,impact:r.retryOriginal?t(`actionReview.${r.reason}`):e.action_kind===`operation.execute`?t(`proposal.impact.operation`):e.action_kind===`team.plan`?e.status===`applied`?t(`proposal.teamPlan.assignedHint`):t(`proposal.impact.teamPlan`):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`):``,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:r.retryOriginal?t(`drawer.retryOriginal`):e.action_kind===`operation.execute`?o?.kind===`result`?o.resultDeliveryVerified?t(`proposal.primary.operationResultVerified`):t(`proposal.primary.operationResultPending`):t(`proposal.primary.operationGroup`):e.action_kind===`team.plan`?t(e.status===`applied`?`proposal.teamPlan.viewResult`:`proposal.primary.teamPlan`):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:r.retryOriginal||e.status===`applied`&&e.action_kind!==`operation.execute`&&r.interaction!==`completed`?`error`:WS(e.status),teamPlanOutcome:e.action_kind===`team.plan`?tb(e.receipt)??void 0:void 0,teamPlanAssignments:e.action_kind===`team.plan`?Qy(e.receipt,e.normalized_parameters):void 0,teamPlanGapLanes:e.action_kind===`team.plan`?$y(e.receipt,e.normalized_parameters):void 0,title:c}}function YS(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 XS(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 ZS(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 QS(e,t){let n=ZS(e,[`目标`,`Objective`]),r=ZS(e,[`完成标准`,`Completion criteria`]),i=ZS(e,[`执行边界(可选)`,`执行边界`,`边界`,`Execution boundary (optional)`,`Execution boundary`,`Boundary`]),a=(n||XS(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 $S(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 eC(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 tC(e,t){return ZS(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 nC(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 rC(e,t){let n=e.toLowerCase();return t.find(e=>n.includes(e.agentId.toLowerCase())||n.includes(e.label.toLowerCase()))}function iC(e){let t=ZS(e,[`标题`,`任务标题`,`Todo 标题`]),n=ZS(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 aC=new Set([`image/png`,`image/jpeg`,`image/webp`,`image/gif`]),oC=5242880,sC=4;function cC(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 lC({conversationSessionId:e,agents:t=[{agentId:`codex`,available:!0,capability:`代码与项目执行`,label:`Codex`}],callbacks:n={},goalArchiveLoadState:r={error:null,phase:`ready`},managerChannelBinding:i,managerRuntime:a,model:o,readOnly:s=!1,selectedAgentId:c,selectedGoalId:l,statusSourceControl:u}){let{locale:d,t:f}=Ji(),[p,m]=(0,R.useState)(l??null),[h,g]=(0,R.useState)(c??t.find(e=>e.available)?.agentId??`codex`),[_,v]=(0,R.useState)(null),[y,b]=(0,R.useState)(!1),[x,S]=(0,R.useState)(null),[C,w]=(0,R.useState)({}),[T,E]=(0,R.useState)(`chat`),[D,O]=(0,R.useState)(!1),[k,A]=(0,R.useState)(!1),[ee,j]=(0,R.useState)(!1),[M,te]=(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{}}}),[ne,N]=(0,R.useState)(!1),[P,re]=(0,R.useState)(null),[ie,ae]=(0,R.useState)(`queue`),[F,oe]=(0,R.useState)(``),[I,se]=(0,R.useState)([]),[L,ce]=(0,R.useState)(null),[le,ue]=(0,R.useState)(null),[de,fe]=(0,R.useState)(()=>new Set),[pe,me]=(0,R.useState)(()=>new Set),[he,ge]=(0,R.useState)(`idle`),[_e,ve]=(0,R.useState)([]),[ye,be]=(0,R.useState)([]),[xe,Se]=(0,R.useState)(!1),[Ce,we]=(0,R.useState)(NS),[Te,Ee]=(0,R.useState)({}),[De,Oe]=(0,R.useState)([]),ke=(0,R.useRef)(!1),Ae=(0,R.useRef)(NaN),je=(0,R.useRef)(null),Me=(0,R.useRef)(null),Ne=(0,R.useRef)(null),Pe=(0,R.useRef)(null),Fe=(0,R.useRef)(new Set),Ie=(0,R.useRef)(new Set),[Le,Re]=(0,R.useState)(null),B=l===void 0?p:l,ze=c??h,Be=`${B??`manager`}:${ze}`,Ve=M[Be]??``;(0,R.useEffect)(()=>{se([]),ce(null)},[Be]);function He(e,t){te(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 Ue(e){He(Be,e)}function We(e){return bh.find(t=>t.id===e)?.prompt??``}(0,R.useEffect)(()=>{let e=je.current;e&&(e.style.height=`auto`,e.style.height=`${Math.min(e.scrollHeight,120)}px`)},[Ve]);let Ge=(0,R.useMemo)(()=>o.goals.map(e=>{let t=Te[e.goalId];return t?{...e,repository:{branch:t.branch,identity:t.identity,label:t.label,readOnly:!0}}:e}),[Te,o.goals]),Ke=(0,R.useMemo)(()=>Ge.filter(e=>Mb(e)===`needs_you`).length,[Ge]),qe=(0,R.useMemo)(()=>Ge.filter(e=>Mb(e)===`needs_you`&&(e.needsYouBlocking||e.state===`等你`)).length,[Ge]),V=Ge.find(e=>e.goalId===B)??null;function Je(e){Ne.current=document.activeElement instanceof HTMLElement?document.activeElement:null,Se(!1),v(e)}function Ye(){v(null),window.requestAnimationFrame(()=>{let e=Ne.current;e?.isConnected&&e.getClientRects().length?e.focus({preventScroll:!0}):document.querySelector(`.personal-mobile-menu`)?.focus({preventScroll:!0})})}let Xe=_?.kind===`settings`,Ze=B,Qe=(0,R.useMemo)(()=>{let e=Object.values(C).filter(e=>e.actionKind===`heartbeat.bind`&&e.goalId&&e.status===`applied`).map(e=>({id:`schedule:${e.goalId}:heartbeat`,kind:`schedule`,schedule:{agentId:ze,executionHistory:[],goalId:e.goalId,label:e.title,nextRunAt:f(`drawer.schedulePending`),notificationRule:f(`drawer.scheduleDefaultNotification`),schedule:e.fields.find(e=>e.key===`cadence`)?.value??f(`schedule.summary`),scheduleId:`${e.goalId}:heartbeat`,scheduleKind:`heartbeat`,status:e.status===`applied`?`active`:`draft`,stopCondition:e.fields.find(e=>e.key===`stop_condition`)?.value??f(`drawer.scheduleDefaultStop`),timezone:e.fields.find(e=>e.key===`timezone`)?.value??`Asia/Shanghai`}})),t=[...US(o,Ze,f),...o.timeline??[],...e,...LS(Object.values(C)).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)||e.proposal.reviewPlan?.retryOriginal===!0||_e.includes(e.proposal.previewId)).filter(e=>!B||e.kind===`message`?!0:e.kind===`proposal`?!e.proposal.goalId||e.proposal.goalId===B:e.kind===`attention`?e.attention.goalId===B:e.kind===`run`?e.run.goalId===B:e.kind===`schedule`?e.schedule.goalId===B:e.output.goalId===B)},[Ze,o,C,ze,B,_e,f]),$e=(0,R.useMemo)(()=>x?Qe.filter(e=>e.kind===`message`?!0:e.kind===`run`?e.run.runId===x.runId:e.kind===`output`&&e.output.runId===x.runId):Qe,[x,Qe]);(0,R.useEffect)(()=>{if(!x)return;let e=Qe.find(e=>e.kind===`run`&&e.run.runId===x.runId);!e||e.kind!==`run`||JSON.stringify({completedSteps:x.completedSteps,latestActivity:x.latestActivity,messages:x.sessionMessages,sessionStatus:x.sessionStatus,status:x.status,totalSteps:x.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})&&S(e.run)},[x,Qe]);let et=(0,R.useMemo)(()=>Qe.flatMap(e=>e.kind===`message`?[e.message]:[]),[Qe]),tt=(0,R.useMemo)(()=>V?Qe.flatMap(e=>e.kind===`message`?[e.message]:[]):[],[Qe,V]);(0,R.useEffect)(()=>{V||D||et.some(e=>e.pending)&&A(!0)},[D,et,V]),(0,R.useEffect)(()=>{!V||T===`chat`||tt.some(e=>e.pending)&&j(!0)},[tt,V,T]);let nt=(0,R.useMemo)(()=>Qe.filter(e=>e.kind===`message`||e.kind===`proposal`&&(_e.includes(e.proposal.previewId)||ye.includes(e.proposal.previewId))),[Qe,_e,ye]),rt=nt[nt.length-1],it=rt?.kind===`message`?rt.message.text.length:0;(0,R.useEffect)(()=>{if(!D||!Me.current)return;let e=window.requestAnimationFrame(()=>{Me.current&&(Me.current.scrollTop=Me.current.scrollHeight)});return()=>window.cancelAnimationFrame(e)},[nt.length,D,it]);let at=(0,R.useMemo)(()=>{if(_?.kind===`settings`)return null;if(_?.kind===`attention`)return{kind:`attention`,item:Jd(_.item,o.attentionHistory??o.userTodos)};if(_?.kind===`goal`){let e=Ge.find(e=>e.goalId===_.item.goalId);return e?{item:e,kind:`goal`}:_}if(_?.kind!==`run`)return _;let e=Qe.find(e=>e.kind===`run`&&e.run.runId===_.item.runId);return e?{item:e.run,kind:`run`}:_},[Qe,_,Ge,o.attentionHistory,o.userTodos]);(0,R.useEffect)(()=>{if(s){Ee({}),Oe([]);return}let e=!1;return Promise.all([o_(),__()]).then(([t,n])=>{e||(Ee(Object.fromEntries(t.map(e=>[e.goal_id,e.repository]))),Oe(n))}).catch(()=>{}),()=>{e=!0}},[s]),(0,R.useEffect)(()=>{if(!xe)return;function e(e){e.key===`Escape`&&Se(!1)}return document.addEventListener(`keydown`,e),()=>document.removeEventListener(`keydown`,e)},[xe]),(0,R.useEffect)(()=>{if(B||!Qe.length)return;if(!ke.current){ke.current=!0;try{Ae.current=Date.parse(window.localStorage.getItem(`loopx-pw-last-visit`)??``),window.localStorage.setItem(`loopx-pw-last-visit`,new Date().toISOString())}catch{Ae.current=NaN}}let e=Ae.current,t=Qe.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={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};Re(e=>e?.done===r.done&&e.failed===r.failed?e:r)},[Qe,B]),(0,R.useEffect)(()=>{if(s){w({});return}let e=!1;return Gh(B?{goalId:B}:{contextKind:`manager`}).then(t=>{if(e)return;let n=t.filter(e=>[`preview_ready`,`gated`,`deferred`,`applying`].includes(e.status)||Gy(e).retryOriginal===!0||e.action_kind===`operation.execute`&&e.status===`applied`).map(e=>JS(e,f)),r=Object.fromEntries(n.map(e=>[e.previewId,e]));w(e=>({...e,...r})),B||be(n.map(e=>e.previewId))}).catch(()=>{}),()=>{e=!0}},[s,B,f]);async function ot(e,t={}){if(s)throw Error(f(`source.readOnlyWriteError`));let r;try{r=n.onPreviewAction?await n.onPreviewAction(e):JS(await Uh(e),f)}catch(t){if(!(t instanceof Rh)||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??f(`proposal.workspaceGate.defaultSummary`))},impact:f(o?`proposal.workspaceGate.agentImpact`:`proposal.workspaceGate.selectionImpact`),previewId:`workspace-choice-${Date.now().toString(36)}`,sourceRequest:e,status:`gated`,title:f(o?`proposal.workspaceGate.agentTitle`:`proposal.workspaceGate.selectionTitle`),workspaceCandidates:i}}return ve(e=>e.includes(r.previewId)?e:[...e,r.previewId]),w(e=>({...e,[r.previewId]:r})),t.select!==!1&&v({item:r,kind:`proposal`}),r}function st(){_t(null),He(`manager:${ze}`,f(`composer.createGoalTemplate`)),window.requestAnimationFrame(()=>je.current?.focus())}async function ct(e,t){Se(!1);let r={delete:`Deleted from the owner workspace`,resume:`Resumed from the owner workspace`,stop:`Stopped from the owner workspace`},i={delete:f(`proposal.summary.lifecycleDelete`,{title:e.title}),resume:f(`proposal.summary.lifecycleResume`,{title:e.title}),stop:f(`proposal.summary.lifecycleStop`,{title:e.title})},a=null,o=!1;try{if(t===`stop`){if(Fe.current.has(e.goalId))return;Fe.current.add(e.goalId),fe(new Set(Fe.current)),v(null),a={goalId:e.goalId,next:`stopped`,optimisticApplied:!0,previous:e.activationState},ue(f(`feedback.applying`,{title:i.stop})),n.onGoalActivationStateChange?.(e.goalId,`stopped`)}if(n.onExecuteGoalLifecycle){if(t===`delete`)throw Error(`The selected status source does not authorize Goal deletion.`);let a=await n.onExecuteGoalLifecycle({goalId:e.goalId,operation:t,reason:r[t]});if(!a.projectionVerified)throw Error(`Goal lifecycle projection did not verify.`);o=!0,n.onGoalActivationStateChange?.(e.goalId,a.activationState),ue(f(`feedback.completed`,{title:i[t]})),t===`stop`&&_t(null),await ft([e.goalId]);return}let s=await ot({actionKind:`goal.lifecycle`,context:{kind:`goal_directory`,goal_id:e.goalId},idempotencyKey:`workspace-goal-${t}-${e.goalId}-${Date.now().toString(36)}`,normalizedParameters:{goal_id:e.goalId,operation:t,reason:r[t]},summary:i[t]},{select:t!==`stop`});if(s.goalId!==e.goalId||s.lifecycleOperation!==t)throw v(null),Error(f(`actionReview.targetChanged`));t===`stop`&&(s.reviewPlan?.interaction===`direct`?(o=!0,await pt(s,{lifecycleProjection:a??void 0,presentation:`feedback`})):(a&&n.onGoalActivationStateChange?.(a.goalId,a.previous),ue(s.gate?f(`feedback.gateRequired`,{summary:s.gate.summary}):f(`feedback.notCompleted`,{status:s.status})),v({item:s,kind:`proposal`})))}catch(e){a&&!o&&n.onGoalActivationStateChange?.(a.goalId,a.previous),ue(f(`feedback.executionFailed`,{error:e instanceof Error?e.message:String(e)}))}finally{t===`stop`&&(Fe.current.delete(e.goalId),fe(new Set(Fe.current)))}}function lt(e,t){Ue(f(t?e===`heartbeat`?`composer.heartbeatTemplate`:`composer.monitorTemplate`:e===`heartbeat`?`composer.heartbeatTemplateWithoutGoal`:`composer.monitorTemplateWithoutGoal`)),v(null),window.requestAnimationFrame(()=>je.current?.focus())}async function ut(e,t,r=``){let i=await n.onRequestScheduleConfig?.(e,t);if(i){ve(e=>e.includes(i.previewId)?e:[...e,i.previewId]),w(e=>({...e,[i.previewId]:i})),v({item:i,kind:`proposal`});return}if(!t){Ue(f(e===`heartbeat`?`composer.heartbeatGoalQuestion`:`composer.monitorGoalQuestion`));return}let a=Date.now().toString(36);await ot({actionKind:e===`heartbeat`?`heartbeat.bind`:`monitor.create`,context:{kind:`schedule`,goal_id:t},idempotencyKey:`workspace-${e}-${t}-${a}`,normalizedParameters:e===`heartbeat`?{agent_id:ze,cadence:$S(r),goal_id:t,stop_condition:nC(r),timezone:`Asia/Shanghai`}:{agent_id:ze,cadence:$S(r),goal_id:t,stop_condition:nC(r),target:tC(r,f),target_key:`goal-${t}`,timezone:`Asia/Shanghai`},summary:e===`heartbeat`?f(`proposal.summary.heartbeat`):f(`proposal.summary.monitor`,{target:tC(r,f)})})}async function dt(e){if(!Ie.current.has(e.todoId)){Ie.current.add(e.todoId),me(new Set(Ie.current)),ue(f(`feedback.preparingPreview`,{title:e.text}));try{await ot({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:f(`tasks.markComplete`,{name:e.text})}),ue(null)}catch(e){ue(f(`feedback.previewFailed`,{error:e instanceof Error?e.message:String(e)}))}finally{Ie.current.delete(e.todoId),me(new Set(Ie.current))}}}function ft(e){let t=n.onReconcileStatus,r=t?t({invalidateGoalIds:e}):n.onRefresh?.();return Promise.resolve(r).catch(()=>{ue(f(`feedback.goalRefreshFailed`))})}async function pt(e,t={}){let r=e.actionKind===`team.plan`&&e.status===`error`&&[`apply_failed`,`readback_unverified`].includes(e.reviewPlan?.reason??``);if(e.reviewPlan&&!e.reviewPlan.canApply&&!r)return;let i=t.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:o.goals.find(t=>t.goalId===e.goalId)?.activationState??(e.lifecycleOperation===`stop`?`active`:`stopped`)}:null,s=t.lifecycleProjection??a;ue(f(`feedback.applying`,{title:e.title}));let c={...e,reviewPlan:e.reviewPlan?{...e.reviewPlan,interaction:`pending`,reason:`apply_pending`,canApply:!1}:void 0,status:`applying`};w(t=>({...t,[e.previewId]:c})),i&&v({item:c,kind:`proposal`}),s&&!s.optimisticApplied&&n.onGoalActivationStateChange?.(s.goalId,s.next);try{if(n.onApplyProposal){await n.onApplyProposal(e);let t={...e,status:`applied`};w(n=>({...n,[e.previewId]:t})),i&&v({item:t,kind:`proposal`}),ue(f(`feedback.completed`,{title:e.title})),e.actionKind===`goal.lifecycle`&&((e.lifecycleOperation===`stop`||e.lifecycleOperation===`delete`)&&_t(null),e.lifecycleOperation===`delete`&&e.goalId&&n.onGoalDeleted?.(e.goalId),ft(e.goalId?[e.goalId]:void 0));return}let t=await Kh(e.previewId);if(t.proposal.proposal_id!==e.previewId||t.proposal.action_kind!==e.actionKind||e.actionKind===`goal.lifecycle`&&(t.proposal.normalized_parameters.goal_id!==e.goalId||qS(t.proposal)!==e.lifecycleOperation))throw new Rh(f(`actionReview.targetChanged`),{error_code:`action_response_mismatch`});let r=JS(t.proposal,f);if(w(t=>({...t,[e.previewId]:r})),i&&v({item:r,kind:`proposal`}),r.reviewPlan?.interaction!==`completed`){s&&n.onGoalActivationStateChange?.(s.goalId,s.previous),v({item:r,kind:`proposal`}),ue(t.proposal.status===`stale`?f(`feedback.stale`):f(`actionReview.${r.reviewPlan.reason}`));return}ue(f(`feedback.completed`,{title:r.title})),r.actionKind===`todo.create`&&await n.onRefresh?.(),r.actionKind===`goal.lifecycle`&&(r.lifecycleOperation===`stop`||r.lifecycleOperation===`delete`)&&_t(null),r.actionKind===`goal.lifecycle`&&r.lifecycleOperation===`delete`&&r.goalId&&n.onGoalDeleted?.(r.goalId),r.actionKind===`goal.lifecycle`&&ft(r.goalId?[r.goalId]:void 0)}catch(t){if(s&&n.onGoalActivationStateChange?.(s.goalId,s.previous),t instanceof Rh&&t.payload.error_code===`protected_action`){let r=t.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??t.message)},status:`gated`};w(t=>({...t,[e.previewId]:a})),v({item:a,kind:`proposal`}),ue(f(`feedback.gateRequired`,{summary:a.gate.summary})),e.actionKind===`goal.create`&&e.goalId&&(n.onRefresh?.(),_t(e.goalId));return}let r=t instanceof Rh&&Ky(t.payload),i=t instanceof Rh&&t.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:t instanceof Error?t.message:String(t),status:r?`stale`:`error`};w(t=>({...t,[e.previewId]:a})),v({item:a,kind:`proposal`}),ue(f(`feedback.executionFailed`,{error:a.errorMessage}))}}function mt(){E(`chat`),S(null),j(!1),window.requestAnimationFrame(()=>{let e=Me.current?.querySelectorAll(`.personal-message.is-assistant`);e?.item(e.length-1)?.scrollIntoView({block:`start`})})}let ht={...n,onOpenRunSession:async e=>{e.goalId!==B&&_t(e.goalId),E(`chat`),await n.onOpenRunSession?.(e),S(e),v(null)},onOpenGoal:e=>{_t(e),ft([e])},onOpenGoalView:e=>{e===`chat`?mt():E(e),v(null)},onOpenOutput:e=>{e.goalId!==B&&_t(e.goalId),E(`files`),n.onOpenOutput?.(e)},onApplyProposal:pt,onCancelProposal:async e=>{v(null),w(t=>{let n={...t};return delete n[e.previewId],n});try{n.onCancelProposal?.(e),n.onCancelProposal||await qh(e.previewId)}catch(t){w(t=>({...t,[e.previewId]:e})),ue(f(`feedback.cancelFailed`,{error:t instanceof Error?t.message:String(t)}))}},onTransitionProposal:async(e,t)=>{let n=JS(await Jh(e.previewId,t),f);ve(e=>e.includes(n.previewId)?e:[...e,n.previewId]),w(r=>{let i={...r};return t===`regenerate`&&delete i[e.previewId],i[n.previewId]=n,i}),v({item:n,kind:`proposal`})},onSelectWorkspaceCandidate:async(e,t)=>{e.sourceRequest&&(w(t=>{let n={...t};return delete n[e.previewId],n}),await ot({...e.sourceRequest,idempotencyKey:`${e.sourceRequest.idempotencyKey}-${t}`,normalizedParameters:{...e.sourceRequest.normalizedParameters,workspace_ref:t}}))},onPreviewAction:ot,onRequestScheduleConfig:(e,t)=>lt(e,t),onOpenNotificationSettings:e=>Je({goalId:e,kind:`settings`,tab:`lark`}),onFetchNotificationTargets:()=>wg(),onSetupGoalChannel:e=>Eg(e),onToggleGoalAutoNotify:e=>Dg(e),onUpdateSchedule:async(e,t)=>{let n=Date.now().toString(36),r=e.scheduleKind===`heartbeat`;await ot({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??ze,...!r&&t===`run_now`?{endpoint_id:ze}:{},...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}`})}},gt=s?{onOpenGoal:ht.onOpenGoal,onOpenGoalView:ht.onOpenGoalView,onOpenOutput:ht.onOpenOutput}:ht;function _t(e){m(e),O(!1),A(!1),j(!1),S(null),v(null),E(`tasks`),Se(!1),n.onSelectGoal?.(e)}function vt(e){g(e),n.onSelectAgent?.(e)}function yt(e){we(e),PS(e)}async function bt(r){let i=r?[]:I,a=(r??Ve).trim()||(i.length?f(`composer.imageAnalysisPrompt`):``);if(!(!a||ne)){if(P?.session_id===e&&P?.enabled&&P.active_turn_id&&e){if(i.length){ce(d===`zh-CN`?`运行中的消息投递暂不支持图片,请暂停后发送。`:`Pause execution before sending images.`);return}N(!0);try{let t=await pg(e,a,ie);r||Ue(``),oe(d===`zh-CN`?`${ie===`queue`?`已排队,等待后续回合`:ie===`inbox`?`已进入收件箱`:`已提交纠偏`} · ${t.status}`:`${ie}: ${t.status}`)}catch(e){ce(e instanceof Error?e.message:String(e))}finally{N(!1)}return}r||(Ue(``),se([])),ce(null),N(!0);try{if(i.length){B?T!==`chat`&&j(!0):A(!0);let e=await n.onSendMessage?.(a,ze,B,i);e&&await ot(e);return}let e=Ub(a,{agents:t.map(e=>({agentId:e.agentId,label:e.label})),goalId:B,todos:(V?.agentTodos??[]).map(e=>({text:e.text,todoId:e.todoId}))});if(e.route===`clarify`){Ue(a);let t=f(`composer.clarifySingleAction`);e.missingFields.includes(`resume_when`)&&(t=f(`composer.clarifyDefer`)),ue(t);return}if(e.actionKind===`goal.create`){let t=QS(a,f),n=YS(t.title);await ot({actionKind:`goal.create`,context:{kind:`manager`,goal_id:null,natural_language:a},idempotencyKey:`workspace-goal-intent-${n}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:ze,completion_criteria:t.completionCriteria,execution_boundary:t.executionBoundary,goal_id:n,heartbeat:{cadence:$S(a),enabled:e.normalizedParameters.heartbeat_enabled===!0,timezone:`Asia/Shanghai`},initial_todos:t.initialTodos,objective:t.objective,permission:t.permission,stop_condition:nC(a),title:t.title,workspace_ref:`current`},summary:f(`proposal.summary.goalCreate`,{title:t.title})});return}if(B&&e.actionKind===`heartbeat.bind`){await ut(`heartbeat`,B,a);return}if(B&&e.actionKind===`monitor.create`){let e=eC(a,f);if(e){Ue(a),ue(e);return}await ut(`monitor`,B,a);return}let r=rC(a,t);if(B&&r&&e.actionKind===`agent.bind`){await ot({actionKind:`agent.bind`,context:{kind:`goal`,goal_id:B,natural_language:a},idempotencyKey:`workspace-agent-bind-${B}-${r.agentId}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:r.agentId,goal_id:B},summary:`将 ${r.label} 绑定到 ${V?.title??B}`});return}if(B&&e.actionKind===`todo.create`){if(e.normalizedParameters.start_execution===!0){await ot({actionKind:`todo.create`,context:{kind:`goal`,goal_id:B,natural_language:a},idempotencyKey:`workspace-task-start-${B}-${Date.now().toString(36)}`,normalizedParameters:{endpoint_id:r?.agentId??ze,goal_id:B,start_execution:!0,text:a},summary:`交给 Agent 执行:${a.slice(0,120)}`});return}let t=r?.agentId??(/(交给|分配给|让).{0,24}(agent|codex|claude|kiro|kimi)/iu.test(a)?ze:null);await ot({actionKind:`todo.create`,context:{kind:`goal`,goal_id:B,natural_language:a},idempotencyKey:`workspace-todo-create-${B}-${Date.now().toString(36)}`,normalizedParameters:{...t?{endpoint_id:t}:{},goal_id:B,text:iC(a)},summary:`创建 Todo:${iC(a)}`});return}let o=V?.agentTodos.find(e=>a.includes(e.todoId)||a.includes(e.text)),s=typeof e.normalizedParameters.operation==`string`?e.normalizedParameters.operation:null;if(B&&o&&e.actionKind===`todo.update`&&s){await ot({actionKind:`todo.update`,context:{kind:`todo`,goal_id:B,todo_id:o.todoId,natural_language:a},idempotencyKey:`workspace-todo-update-${o.todoId}-${s}-${Date.now().toString(36)}`,normalizedParameters:{agent_id:ze,...s===`reassign`&&r?{endpoint_id:r.agentId}:{},...s===`block`?{note:a}:{},...s===`defer`&&typeof e.normalizedParameters.resume_when==`string`?{resume_when:e.normalizedParameters.resume_when}:{},goal_id:B,operation:s,todo_id:o.todoId},summary:`更新 Todo:${o.text}`});return}B?T!==`chat`&&j(!0):A(!0);let c=await n.onSendMessage?.(a,ze,B);c&&await ot(c)}catch(e){r||(Ue(a),se(i));let t=e instanceof Error?e.message:f(`feedback.sendGenericError`);ue(f(`feedback.sendFailed`,{error:t}))}finally{N(!1)}}}let xt=t.find(e=>e.agentId===ze)?.label??ze,St=!V&&Ve.startsWith(f(`composer.createGoalDraftLead`));async function Ct(e){if(!e?.length)return;let t=sC-I.length,n=Array.from(e).slice(0,Math.max(0,t)),r=n.find(e=>!aC.has(e.type)),i=n.find(e=>e.size>oC);if(t<=0){ce(f(`composer.imageCountError`,{count:sC}));return}if(r){ce(f(`composer.imageTypeError`));return}if(i){ce(f(`composer.imageSizeError`,{size:oC/1024/1024}));return}try{let t=await Promise.all(n.map(e=>cC(e,f)));se(e=>[...e,...t].slice(0,sC)),ce(e.length>n.length?f(`composer.imageCountError`,{count:sC}):null)}catch(e){ce(e instanceof Error?e.message:f(`composer.imageReadGenericError`))}finally{Pe.current&&(Pe.current.value=``)}}function wt(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 Tt(){let e=await __();Oe(e)}async function Et(){await Promise.all([Tt(),n.onRefresh?.()])}async function Dt(){if(!(!n.onRefresh||he===`loading`)){ge(`loading`);try{await n.onRefresh(),ge(`done`)}catch{ge(`error`)}window.setTimeout(()=>ge(`idle`),1800)}}let Ot=Xe?(0,z.jsx)(AS,{callbacks:gt,focusGoalConnection:!!(_?.kind===`settings`&&_.goalId),goalNotifications:o.goalNotifications??[],goals:Ge,initialGoalId:_?.kind===`settings`?_.goalId??B:B,initialTab:_?.kind===`settings`?_.tab??`lark`:`lark`,onChanged:()=>void Et(),onClose:Ye,onThemeChange:yt,theme:Ce}):null;return(0,z.jsxs)(z.Fragment,{children:[(0,z.jsx)(`div`,{hidden:Xe,children:(0,z.jsx)(FS,{drawer:at?(0,z.jsx)(Qb,{agents:t,attentionHistory:o.attentionHistory??o.userTodos,onSelectAttention:e=>v({kind:`attention`,item:e}),callbacks:gt,goalNotifications:o.goalNotifications??[],goals:Ge,inspectorExpanded:y,larkConnections:s?[]:De,onClose:()=>{at.kind===`proposal`&&[`applied`,`rejected`].includes(at.item.status)&&(at.item.actionKind!==`heartbeat.bind`||at.item.status!==`applied`)&&w(e=>{let t={...e};return delete t[at.item.previewId],t}),b(!1),v(null)},onToggleInspectorSize:()=>b(e=>!e),readOnly:s,runs:Qe.flatMap(e=>e.kind===`run`?[e.run]:[]),selection:at}):null,drawerMode:at?.kind===`todo`?y?`inspector-full`:`inspector`:`panel`,drawerOpen:at!==null,mobileSidebarOpen:xe,onCloseMobileSidebar:()=>Se(!1),theme:Ce,main:(0,z.jsxs)(`div`,{className:`personal-channel`,children:[(0,z.jsx)(ib,{agents:t,managerChatOpen:D,managerChannelBinding:i,managerRuntime:a,mobileNavigationOpen:xe,onOpenGoalCapabilities:V&&!s?()=>Je({goalId:V.goalId,kind:`settings`,tab:`capabilities`}):void 0,onRefresh:n.onRefresh?()=>void Dt():void 0,onOpenNavigation:()=>Se(!0),onOpenManagerChat:()=>{A(!1),O(!0)},onSelectGoalTab:e=>{e===`chat`?mt():E(e)},onSelectAgent:vt,onReturnManagerHome:()=>{O(!1),A(!1),window.requestAnimationFrame(()=>Me.current?.scrollTo({behavior:`smooth`,top:0}))},selectedAgentId:ze,refreshState:he,readOnlySourceLabel:s?u?.activeSource.label:void 0,selectedGoal:V,selectedGoalTab:T}),B&&T===`chat`&&!s&&ze===`codex`&&n.onStartLoopX?(0,z.jsx)(pb,{onPrepare:()=>n.onPrepareLoopX(ze,B),sessionId:e,onChange:re,onExecute:(e,t)=>n.onStartLoopX?.(e,ze,B,t)},`${B}:${ze}`):null,(0,z.jsxs)(`div`,{className:`personal-channel-scroll`,"data-active-goal-view":V?T:void 0,ref:Me,children:[!V&&!D&&Le&&Le.done+Le.failed>0?(0,z.jsxs)(`section`,{className:`personal-digest-card`,"aria-label":f(`digest.away`),children:[(0,z.jsx)(`strong`,{children:f(`digest.away`)}),(0,z.jsxs)(`div`,{className:`personal-digest-stats`,children:[Le.done>0?(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Le.done}),f(`digest.completed`)]}):null,Le.failed>0?(0,z.jsxs)(`span`,{children:[(0,z.jsx)(`b`,{children:Le.failed}),f(`digest.failed`)]}):null]})]}):null,!V&&!D?(0,z.jsxs)(`section`,{className:`personal-manager-greeting`,children:[(0,z.jsx)(`span`,{children:(0,z.jsx)(rm,{size:20})}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`strong`,{children:f(`home.greeting`)}),(0,z.jsx)(`p`,{children:o.goals.some(e=>e.activationState===`active`&&e.loadState)?f(`startup.partial`):(0,z.jsxs)(z.Fragment,{children:[f(`home.waitingCount`,{count:Ke}),` `,qe>0?f(`home.blockingSummary`,{count:qe}):null]})})]})]}):null,V?.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:f(V.loadState===`error`?`startup.goalError`:`startup.goalLoading`)}),(0,z.jsx)(`p`,{children:f(V.loadError?`startup.error.${V.loadError}`:`startup.independent`)}),V.loadState===`error`?(0,z.jsx)(`button`,{className:`min-h-11 rounded-md border px-3 py-2 text-sm`,type:`button`,onClick:()=>void n.onRefresh?.(),children:f(`startup.retry`)}):null]})}):V?(0,z.jsx)(Hx,{activeTab:T,scrollRef:Me,panels:{overview:(0,z.jsx)(Vx,{active:!Xe&&T===`overview`,goal:V,items:Qe,userTodos:o.userTodos,readOnly:s,onOpenDetails:()=>v({kind:`goal`,item:V}),onSelect:v,onView:E}),tasks:(0,z.jsx)(wx,{historyEnabled:!s,goal:V,items:Qe,onDraftTaskFromMessage:s?void 0:e=>{Ue(`创建一个 Task:${IS(e)}`),ue(f(`feedback.taskDraftCreated`)),window.requestAnimationFrame(()=>je.current?.focus())},onOpenChat:mt,onQuickComplete:s?void 0:dt,onSelect:v,quickCompletingTodoIds:pe,selectedTodoId:at?.kind===`todo`?at.item.todoId:null,userTodos:o.userTodos}),files:(0,z.jsx)(BS,{items:Qe.filter(e=>e.kind===`output`),onSelect:v,reportState:o.periodicReports}),chat:(0,z.jsxs)(z.Fragment,{children:[V&&x?.goalId===V.goalId?(0,z.jsx)(HS,{onClose:()=>S(null),onOpenDetails:()=>v({item:x,kind:`run`}),run:x}):null,(0,z.jsx)(Eb,{items:$e,onSelect:v,selectedGoal:V})]})}},`${u?.activeSource.statusUrl??`/status.json`}:${V.goalId}`):D?(0,z.jsx)(Eb,{items:nt,onSelect:v,selectedGoal:null}):(0,z.jsx)(zS,{goals:Ge,onRetry:()=>void n.onRefresh?.(),onSelectGoal:_t,systemHealth:o.systemHealth})]}),(0,z.jsxs)(`div`,{className:`personal-composer-wrap`,children:[P?.session_id===e&&P?.enabled&&P.active_turn_id?(0,z.jsxs)(`label`,{className:`goal-loopx-message-mode`,children:[d===`zh-CN`?`消息处理`:`Message delivery`,(0,z.jsxs)(`select`,{"aria-label":d===`zh-CN`?`消息处理方式`:`Message delivery mode`,value:ie,onChange:e=>ae(e.target.value),children:[(0,z.jsx)(`option`,{value:`queue`,children:d===`zh-CN`?`下一轮处理`:`Next turn`}),(0,z.jsx)(`option`,{value:`inbox`,children:d===`zh-CN`?`放入收件箱`:`Inbox`}),(0,z.jsx)(`option`,{value:`steer`,children:d===`zh-CN`?`立即纠偏`:`Steer now`})]}),(0,z.jsx)(`span`,{role:`status`,children:F})]}):null,s?(0,z.jsxs)(`div`,{className:`personal-read-only-notice`,children:[(0,z.jsx)(`strong`,{children:f(`source.readOnlyNoticeTitle`)}),(0,z.jsx)(`span`,{children:f(`source.readOnlyNoticeDescription`)})]}):(0,z.jsxs)(z.Fragment,{children:[!V&&!D&&k&&et.length?(0,z.jsx)(VS,{messages:et,onClose:()=>A(!1),onOpenConversation:()=>{A(!1),O(!0)}}):null,V&&T!==`chat`&&ee&&tt.length?(0,z.jsx)(VS,{agentLabel:xt,messages:tt,onClose:()=>j(!1),onDraftTask:T===`tasks`?e=>{Ue(`创建一个 Task:${IS(e)}`),ue(f(`feedback.taskDraftCreated`)),window.requestAnimationFrame(()=>je.current?.focus())}:void 0,onOpenConversation:mt,title:`${V.title} · ${xt}`}):null,le?(0,z.jsxs)(`div`,{className:`personal-action-feedback`,role:`status`,children:[(0,z.jsx)(`span`,{children:le}),(0,z.jsx)(`button`,{"aria-label":f(`common.closeActionReceipt`),onClick:()=>ue(null),type:`button`,children:(0,z.jsx)(sh,{size:14})})]}):null,(0,z.jsxs)(`details`,{className:`personal-composer-tools`,children:[(0,z.jsx)(`summary`,{children:d===`zh-CN`?`快捷提问`:`Suggestions`}),V?(0,z.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,z.jsxs)(`button`,{"aria-label":f(`composer.nextAction`),disabled:ne,onClick:()=>void bt(f(`composer.nextActionPrompt`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(Nm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.nextAction`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.agentProgress`),disabled:ne,onClick:()=>void bt(f(`composer.agentProgressPrompt`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(qm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.agentProgress`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.monitor`),disabled:ne,onClick:()=>void bt(f(`composer.monitorShortcutTemplate`,{target:f(`schedule.defaultTarget`)})),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(am,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.monitor`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.blockers`),disabled:ne||!We(`gate`),onClick:()=>void bt(We(`gate`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(um,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.blockers`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.evidence`),disabled:ne||!We(`evidence`),onClick:()=>void bt(We(`evidence`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(Sm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.evidence`)})]})]}):(0,z.jsxs)(`div`,{className:`personal-quick-prompts`,children:[(0,z.jsxs)(`button`,{"aria-label":f(`composer.globalTasks`),disabled:ne,onClick:()=>void bt(f(`composer.globalTasksPrompt`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(Nm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.globalTasks`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.globalProgress`),disabled:ne,onClick:()=>void bt(f(`composer.globalProgressPrompt`)),title:f(`composer.sendMessageHint`),type:`button`,children:[(0,z.jsx)(qm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.globalProgress`)})]}),(0,z.jsxs)(`button`,{"aria-label":f(`composer.createGoal`),onClick:st,title:f(`composer.createGoalHint`),type:`button`,children:[(0,z.jsx)(Vm,{size:13}),(0,z.jsx)(`span`,{children:f(`composer.createGoal`)})]})]})]},B??`manager`),St?(0,z.jsxs)(`div`,{className:`personal-goal-draft-status`,role:`status`,children:[(0,z.jsx)(`strong`,{children:f(`composer.createGoalDraft`)}),(0,z.jsx)(`span`,{children:f(`composer.createGoalDraftDescription`)})]}):null,I.length?(0,z.jsx)(`div`,{className:`personal-composer-images`,"aria-label":f(`composer.imagesPending`),children:I.map(e=>(0,z.jsxs)(`figure`,{children:[(0,z.jsx)(`img`,{alt:e.name,src:e.dataUrl}),(0,z.jsx)(`button`,{"aria-label":f(`composer.sentImageAlt`,{name:e.name}),onClick:()=>se(t=>t.filter(t=>t.id!==e.id)),type:`button`,children:(0,z.jsx)(sh,{size:13})})]},e.id))}):null,L?(0,z.jsx)(`p`,{className:`personal-composer-error`,role:`alert`,children:L}):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.jsx)(`button`,{"aria-label":f(`composer.addImage`),className:`personal-composer-attach`,disabled:ne||I.length>=sC,onClick:()=>Pe.current?.click(),title:f(`composer.attachImageHint`),type:`button`,children:(0,z.jsx)(Rm,{size:17})}),(0,z.jsx)(`input`,{accept:`image/png,image/jpeg,image/webp,image/gif`,"aria-label":f(`composer.imagePicker`),className:`personal-composer-file-input`,disabled:ne||I.length>=sC,multiple:!0,onChange:e=>void Ct(e.target.files),ref:Pe,type:`file`}),(0,z.jsx)(`textarea`,{"aria-label":f(`composer.sendMessage`),onChange:e=>Ue(e.target.value),onKeyDown:e=>{e.key===`Enter`&&!e.shiftKey&&!e.nativeEvent.isComposing&&(e.preventDefault(),bt())},onPaste:wt,placeholder:V?f(`composer.goalPlaceholder`,{goal:V.title}):f(`composer.managerPlaceholder`),ref:je,rows:1,value:Ve}),(0,z.jsx)(`button`,{"aria-label":f(St?`composer.createGoal`:`composer.send`),disabled:!Ve.trim()&&I.length===0||ne,onClick:()=>void bt(),title:f(St?`composer.createGoalHint`:`composer.sendMessageHint`),type:`button`,children:(0,z.jsx)(qm,{size:18})})]})]})]})]}),sidebar:(0,z.jsx)(bx,{attentionCount:Ke,goals:Ge,goalArchiveLoadState:r,goalLifecycleOperations:n.onExecuteGoalLifecycle?[`stop`,`resume`]:void 0,lifecycleBusyGoalIds:de,onRequestGoalCreate:s?void 0:st,onRequestGoalLifecycle:s&&!n.onExecuteGoalLifecycle?void 0:(e,t)=>void ct(e,t),onRetryGoalArchive:n.onRetryGoalArchive||n.onRefresh?()=>void(n.onRetryGoalArchive??n.onRefresh)?.():void 0,onOpenSettings:s?void 0:()=>Je({kind:`settings`}),onSelectGoal:_t,selectedGoalId:B,statusSourceControl:u},u?.activeSource.statusUrl??`/status.json`)})}),Ot]})}function uC(e){return(e??``).replace(/\s+/gu,` `).trim()}function dC(e,t=120){let n=Array.from(e);return n.length<=t?e:`${n.slice(0,t-1).join(``)}…`}function fC(e,t,n){let r=uC(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`):dC(r)}function pC(e,t){return t({advancing:`projection.agentAdvancingGoal`,idle:`projection.agentIdle`,needs_you:`projection.agentNeedsDecision`,stopped:`projection.agentStopped`,waiting_external:`projection.agentWaitingExternal`}[e])}function mC({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 hC=`/status.json`,gC=`loopx-status-source-catalog-v1`,_C={id:`local`,kind:`local`,label:`本机`,readOnly:!1,statusUrl:hC};function vC(e,t){let n=fh(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 yC(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 bC(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=vC(n.statusUrl,t);if(!r||r.length>48||!(`url`in i))return null;let a=ux(n.hostAlias)?n.hostAlias.trim():void 0;return{...a?{hostAlias:a}:{},id:yC(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url}}function xC(){return{schemaVersion:1,sources:[_C]}}function SC(e,t){try{let n=e.getItem(gC);if(!n)return xC();let r=JSON.parse(n);if(r.schemaVersion!==1||!Array.isArray(r.sources))return xC();let i=new Set([_C.statusUrl]);return{schemaVersion:1,sources:[_C,...r.sources.flatMap(e=>{let n=bC(e,t);return!n||i.has(n.statusUrl)?[]:(i.add(n.statusUrl),[n])})]}}catch{return xC()}}function CC(e,t){e.setItem(gC,JSON.stringify({schemaVersion:1,sources:t.sources.filter(e=>e.kind===`ssh_tunnel`)}))}function wC(e,t){let n=new Set(t.filter(ux).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 TC(e,t,n){let r=t.label.trim();if(!r)return{error:`请填写来源名称。`};if(r.length>48)return{error:`来源名称不能超过 48 个字符。`};let i=vC(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&&!ux(t.hostAlias))return{error:`请选择有效的 SSH Host。`};let a=t.hostAlias?.trim(),o={...a?{hostAlias:a}:{},id:yC(i.url),kind:`ssh_tunnel`,label:r,readOnly:!0,statusUrl:i.url};return{catalog:{...e,sources:[...e.sources,o]},source:o}}function EC(e,t){return{...e,sources:e.sources.filter(e=>e.kind===`local`||e.id!==t)}}function DC(e,t,n){if(!t.trim()||fh(t,n).source?.isRelative)return _C;let r=t.trim();try{r=new URL(r,n).toString()}catch{return null}return e.sources.find(e=>e.statusUrl===r)??null}function OC(e,t,n){return DC(e,t,n)||(fh(t,n).source?.isRelative?_C:{id:`temporary`,kind:`ssh_tunnel`,label:`临时来源`,readOnly:!0,statusUrl:t.trim()})}function kC(e,t,n,r){return OC(e,t??n,r)}var AC={delete:`删除`,deploy:`部署`,merge:`合并`,payment:`付款`,release:`发布`};function jC(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:`请求受保护操作:${AC[n.operation]} · ${n.target}`}}var MC=hC;async function NC(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 Ap(await t.json())}function PC(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 FC(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??PC(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 IC(e){return(e??``).replace(/\s+/g,` `).trim()}function LC(e,t=132){let n=IC(e);return n.length<=t?n:`${n.slice(0,Math.max(0,t-1))}…`}function RC(e){let t=new Map;for(let n of e?.goals??[])t.set(n.goal_id,n);return t}function zC(e,t){return e===void 0||t===void 0?void 0:e+t}function BC(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 VC(e){return e?.items.find(e=>!e.done)}function HC(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 UC(e){return e?.queueItem?.project_asset?.quota?.state??e?.queueItem?.quota?.state??e?.goal.quota?.state??`waiting`}function WC(e,t,n){let r=[];for(let t of e){let e=BC(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 GC(e){return e?.map(e=>({dataUrl:e.data_url,id:e.id,mimeType:e.mime_type,name:e.name,size:e.size}))}var KC=`loopx.personal-agent-selection.v1`;function qC(){if(typeof window>`u`)return{};try{let e=JSON.parse(window.localStorage.getItem(KC)??`{}`);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 JC={需修复:`danger`,等你:`warning`,等待条件:`info`,推进中:`success`,安静运行:`neutral`,已停止:`neutral`,已完成:`neutral`};function YC(e,t){return IC(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 XC(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 ZC(e,t){return[`agent`,`assistant`].includes(e.trim().toLowerCase())&&t.trim().length>0}var QC=`已发现的项目 Agent`;function $C(e){switch(My(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 YC(e)}}function ew(e,t){switch(Ny(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 QC}}function tw(e,t){let n=e.project_asset;return t===`user`?HC(n?.user_todos,e.user_todos,`project_asset.user_todos`):HC(n?.agent_todos,e.agent_todos,`project_asset.agent_todos`)}function nw(e){return LC(e.title??e.text,112)}function rw(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 iw(e,t){return{resumeWhen:e.resume_when??null,resumeReady:e.resume_ready??null,resumeReceiptId:rw(e),claimedBy:e.claimed_by??null,done:e.status!==`deferred`&&e.done,evidence:e.evidence?LC(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:nw(e),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.index}`}}function aw(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 ow(e){return aw(e).map(t=>iw(t,e))}function sw(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=iw(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 cw(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:LC(e.title,112),todoId:e.todo_id?.trim()||`${t.goal.id}:agent:${e.claimed_by??`unknown`}:current`}}function lw(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=cw(t,n);r.has(i.todoId)||r.set(i.todoId,i)}return[...r.values()]}function uw(e){let t=e.queueItem?.project_asset?.agent_todos,n=e.queueItem?.agent_todos,r=aw(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=>iw(t,e)),l=r.find(e=>!e.done);return{doneTodoCount:o,nextTodoText:IC(t?.next??``)||(l?IC(l.title??``)||IC(l.text??``):``)||null,recentCompleted:c}}function dw(e,t){let n=IC(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`):fC(n,t,`projection.validationRecorded`):``}function fw(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 pw(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=[dw(r?.summary,n),fC(i?.health_check,n),fC(i?.recommended_action,n)].find(e=>e!==``&&e!==`暂无`)??n(`projection.runRecorded`),s=mC({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 mw(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 hw(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 gw(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 _w(e,t){let n=t.queueItem?.stale_latest_run_warning;return t.severity===`high`||!!hw(e,t)||!!(n?.requires_refresh_state||n?.severity===`high`)||gw(t)}function vw(e,t){let n=hw(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 yw(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 bw(e,t){let n=e.latestRun?.operator_gate;return fC(n?.operator_question??n?.reason_summary??n?.follow_up??e.queueItem?.recommended_action??e.latestRun?.recommended_action,t,`projection.confirmAgentDecision`)}function xw(e,t){if(t.goal.activation_state===`stopped`)return`已停止`;let n=BC(t,`user`),r=BC(t,`agent`),i=!!VC(n),a=!!VC(r);return[`user_or_controller`,`controller`].includes(t.waitingOn)||i||yw(t)?`等你`:_w(e,t)?`需修复`:t.waitingOn===`external_evidence`?`等待条件`:UC(t)===`eligible`||a?`推进中`:mw(t)?`已完成`:`安静运行`}function Sw(e,t,n,r){if(n===`已停止`)return pC(`stopped`,r);if(n===`需修复`)return fC(vw(e,t),r,`projection.statusRefreshNeeded`);if(n===`等你`)return pC(`needs_you`,r);if(n===`推进中`){let e=[(BC(t,`agent`)?.items??[]).filter(e=>!e.done).flatMap(e=>[e.title,e.text]).map(e=>IC(e)).find(e=>e!==``&&e!==`暂无`),t.queueItem?.recommended_action,t.latestRun?.recommended_action].map(e=>IC(e)).find(e=>e!==``&&e!==`暂无`);return e?fC(e,r,`projection.agentAdvancingGoal`):pC(`advancing`,r)}return pC(n===`等待条件`?`waiting_external`:`idle`,r)}function Cw(e,t){return t.some(t=>e.includes(t))}function ww(e,t,n){if(t.goals.some(e=>e.activationState===`active`&&e.loadState))return{text:`Goal 状态尚未全部加载,暂不能给出完整统计。可先打开已加载的 Goal,失败项可重试。`,lines:[]};if(Cw(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(Cw(n,[`现在`,`下一步`,`我该`,`该做什么`,`优先处理`])){let e=t.userTodos[0];if(e)return{text:e.blocking?`先处理「${YC(e.goalId)}」:${e.text}`:`当前最先处理「${YC(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(Cw(n,[`等我`,`阻塞`,`需要我`,`全局待办`]))return t.userTodos.length===0?{text:`目前没有 Goal 在等你,开放用户待办为 0。`,lines:[]}:{text:`有 ${t.userTodos.length} 项开放用户待办,阻塞项优先:`,lines:t.userTodos.slice(0,3).map(e=>`${YC(e.goalId)} · ${e.blocking?`阻塞`:`待处理`} · ${e.text}`)};if(Cw(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 Tw(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=RC(e.usage_summary),s=WC(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(tw(e,`user`)?.items??[]).map((r,i)=>({projectedDone:r.done,details:Kd(r),actionKind:r.action_kind??null,blocking:n,goalId:e.goal_id,sourceOrder:t,taskClass:r.task_class??null,text:nw(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)||!yw(t)?[]:[{details:Kd({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:bw(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=xw(e,a),l=f.find(e=>e.goalId===t.id),u=l?.text??null,d=uw(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=lw(ow(a),h,a),b=[d.nextTodoText,a.queueItem?.recommended_action,a.latestRun?.recommended_action,Sw(e,a,c,n)].map(e=>fC(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:Sw(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:pw(e,a,n),state:c,...r?{subagentExecution:{allowedDomains:t.spawn_policy?.allowed_domains??[],domainCandidates:sw(e,a,y),enabled:t.spawn_policy?.mode===`multi_subagent`&&t.spawn_policy.spawn_allowed===!0&&t.spawn_policy.max_children>0,executionConfig:t.spawn_policy?.execution_config,maxChildren:t.spawn_policy?.max_children??0,modelConfig:t.spawn_policy?.model_config}}:{},title:YC(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:zC(e.input_tokens_24h,e.output_tokens_24h),tokens7d:zC(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?LC(e.current_todo.title,96):null,lastActivityAt:e.last_activity_at??null,state:e.state??null}))}}function Ew({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,R.useState)([]),[b,x]=(0,R.useState)(!1),[S,C]=(0,R.useState)(null),[w,T]=(0,R.useState)(null),E=(0,R.useMemo)(()=>{let e=Tw(c,u,_,b);if(!l)return e;let t=Object.values(l.snapshots).map(e=>Tw(e,FC(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,_]),D=E.goals.find(e=>e.goalId===d)??null,O=l?.snapshots[d]??c,[k,A]=(0,R.useState)(null),[ee,j]=(0,R.useState)(null),[M,te]=(0,R.useState)(!1),ne=E.goals.some(e=>e.activationState===`active`&&e.loadState===`loading`)?`loading`:E.goals.map(e=>`${e.goalId}:${e.agentId}`).join(`|`),N=D?.goalId??`manager`;E.goals.some(e=>e.activationState===`active`&&e.loadState)||(E.systemHealth?!E.systemHealth.ok:!c.ok)||E.openUserTodoCount>0&&`${E.openUserTodoCount}${E.blockingTodoCount}`;let P=v.length>0?v.map(e=>({agentId:e.agent_id,adapterKind:e.adapter_kind,available:e.available,capability:ew(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:ew(`codex`),label:`Codex`,statusLabel:`正在检测`}],re=[...P,{agentId:`status-only`,available:!0,capability:`不调用模型`,adapterKind:`status_projection`,interrupt:!1,label:`仅查状态`,resume:!0,statusLabel:`只读`,streaming:!1,toolCalls:!1,trustScope:`read_only`}],ie=P.find(e=>e.label===`Codex`&&e.available)?.agentId??P.find(e=>e.available)?.agentId??`status-only`,ae=w?.executor_endpoint?.trim()??``,F=ae?P.find(e=>e.agentId===ae)?.agentId:void 0,oe=e=>e===`manager`?F??ie:ie,[I,se]=(0,R.useState)(qC),L=vh(re,I[N]??oe(N),ie),[ce,le]=(0,R.useState)(!1),[ue,de]=(0,R.useState)(!1),[fe,pe]=(0,R.useState)(`chat`),[me,he]=(0,R.useState)(``),[ge,_e]=(0,R.useState)({}),[ve,ye]=(0,R.useState)({}),[be,xe]=(0,R.useState)(null),[Se,Ce]=(0,R.useState)({}),[we,Te]=(0,R.useState)([]),[Ee,De]=(0,R.useState)(null),[Oe,ke]=(0,R.useState)({}),Ae=(0,R.useRef)(1),je=(0,R.useRef)(1),Me=(0,R.useRef)(new Map),Ne=(0,R.useRef)(new Set),Pe=(0,R.useRef)(new Map),Fe=(0,R.useRef)(new Map),Ie=(0,R.useRef)(new Set),Le=(0,R.useRef)(new Set),Re=(0,R.useRef)(null),B=(0,R.useRef)(null),ze=(0,R.useRef)(null),Be=(0,R.useRef)(null);(0,R.useRef)(null);let Ve=ge[N]??[];ve[N];let He=(e,t)=>e===`manager`?_(`header.manager`):t,Ue=D?E.userTodos.filter(e=>e.goalId===D.goalId):E.userTodos,We=D?.agentTodos??[];fw(We,D?.needsYou?3:4);let Ge=We.filter(e=>e.done).length,Ke=We.length>0?`${Ge}/${We.length}`:`暂无计划`;D&&({...E},Ue.filter(e=>e.blocking).length,Ue.length),(0,R.useEffect)(()=>{let e=dh(f.activeSource.statusUrl,window.location.href),t=e.source?hh(O,e.source):null;if(!D||!t?.indexUrl||!t.detailUrl){A(null),j(null),te(!1);return}let{detailUrl:n,indexUrl:r}=t,i=!1;return A(null),j(null),te(!0),gh(r,D.goalId).then(async e=>{let t=e.items[0]?.detail_ref;return t?_h(n,t):null}).then(e=>{i||A(e)}).catch(e=>{i||j(jp(e))}).finally(()=>{i||te(!1)}),()=>{i=!0}},[O,D?.goalId,f.activeSource.statusUrl]);let qe=Se[N]?.sessionId;(0,R.useEffect)(()=>{if(h||!qe)return;let e=!1,t,n=async()=>{try{let t=await $h(qe);if(e)return;let n=t.messages.filter(e=>e.origin===`manager_followup`);_e(e=>{let r=e[N]??[],i=new Set(r.map(e=>e.sourceMessageId)),a=n.filter(e=>!i.has(e.message_id)),o=new Map(n.map(e=>[e.message_id,e.return_delivery])),s=new Map(t.messages.filter(e=>e.role!==`user`&&e.origin!==`manager_followup`).map(e=>[e.turn_id,e])),c=new Map(t.messages.map(e=>[e.message_id,e.collaboration])),l=!1,u=r.map(e=>{let t=e.sourceMessageId?o.get(e.sourceMessageId):void 0,n=e.sourceTurnId?s.get(e.sourceTurnId):void 0,r=e.sourceMessageId?c.get(e.sourceMessageId):n?.collaboration;return JSON.stringify(t)===JSON.stringify(e.returnDelivery)&&JSON.stringify(r)===JSON.stringify(e.collaboration)?e:(l=!0,{...e,sourceMessageId:e.sourceMessageId??n?.message_id,returnDelivery:t,collaboration:r})});return!a.length&&!l?e:{...e,[N]:[...u,...a.map(e=>({id:Ae.current++,sourceMessageId:e.message_id,role:`assistant`,agentLabel:`协作回执`,sourceLabel:`协作回执`,text:XC(e.text),lines:[],returnDelivery:e.return_delivery}))]}})}catch{}finally{e||(t=setTimeout(n,3e3))}};return n(),()=>{e=!0,t&&clearTimeout(t)}},[h,qe,N,L.label]);function V(e,t){Ce(n=>{if(t===null){let t={...n};return delete t[e],t}return{...n,[e]:t}})}(0,R.useEffect)(()=>{if(h){y([]),x(!1),C(null),T(null);return}let e=!1;return Xh().then(t=>{if(!e){y(t.adapters??[]);let e=t.manager?.runtime;T(t.manager?.channel_binding??null),C(e?{schema_version:`manager_runtime_session_readback_v0`,runtime_profile:e.runtime_profile,configuration_revision:e.configuration_revision,status:e.status,sandbox:e.sandbox,standing_grant:e.standing_grant,tool_classes:e.tool_classes}:null),x(t.goal_subagent_configuration===`preview_locked`)}}).catch(()=>{e||x(!1)}),()=>{e=!0}},[h]),(0,R.useEffect)(()=>{try{window.localStorage.setItem(KC,JSON.stringify(I))}catch{}},[I]),(0,R.useEffect)(()=>{if(h||!L.available)return;let e=N,t=`${e}:${L.agentId}`,n=D?`goal`:`manager`,r=D?`goal.${D.goalId}`:`manager`,i=!1,a=null,o=null;return(async()=>{try{let s=await ng({agentId:n===`manager`?void 0:L.agentId,channelId:r,goalId:D?.goalId});if(i||(_e(t=>(t[e]?.length??0)>0?t:{...t,[e]:s.messages.map(t=>({sourceMessageId:t.message_id,agentLabel:t.role===`user`?void 0:t.origin===`manager_followup`?`协作回执`:He(e,L.label),attachments:GC(t.attachments),id:Ae.current++,lines:[],role:t.role===`user`?`user`:`assistant`,returnDelivery:t.return_delivery,collaboration:t.collaboration,sourceLabel:t.role===`user`?void 0:t.role===`error`?`本地会话记录`:e===`manager`?`恢复的${_(`header.manager`)}会话`:`恢复的 ${L.label} 会话`,text:t.role===`user`?t.text:XC(t.text)}))}),L.agentId===`status-only`))return;let c=s.sessions[0];if(o=c?.session_id??null,c&&!c.resumable){Ne.current.add(t),V(e,{agentId:L.agentId,resumable:!1,sessionId:c.session_id,status:`resume_failed`});return}let l=n===`manager`?``:D?.goalId??``;if(n===`goal`&&!l)return;let u=await Qh(l,n===`manager`?I[e]:L.agentId,`resume_latest`,n);if(i)return;n===`manager`&&u.session.manager_runtime&&C(u.session.manager_runtime),Me.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(V(e,{agentId:u.agent_id||L.agentId,resumable:!0,sessionId:u.session_id,status:f?`running`:`ready`,turnId:f||void 0}),Ne.current.delete(t),!f)return;let p=`${u.session_id}:${f}`;if(Le.current.has(p))return;Le.current.add(p),Pe.current.set(e,f),V(e,{agentId:L.agentId,resumable:!0,sessionId:u.session_id,status:`running`,turnId:f}),xe(e),a=new AbortController,Fe.current.set(e,a);let m=``,h=Je(e,{activity:[`正在恢复进行中的 Agent 回合`],agentLabel:He(e,L.label),lines:[],pending:!0,sourceLabel:e===`manager`?`恢复的${_(`header.manager`)}会话`:`恢复的 ${L.label} 会话`,text:``});try{let t=await gg(u.session_id,f,{signal:a.signal,onDelta:t=>{m+=t,Ye(e,h,{text:m})},onActivity:t=>{_e(n=>({...n,[e]:(n[e]??[]).map(e=>e.id===h?{...e,activity:[...new Set([...e.activity??[],t])].slice(-6)}:e)}))}});if(i)return;Ye(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()||`${He(e,L.label)} 已完成分析。`});let n=E.goals.find(e=>e.goalId===d?.session.goal_id)??D??E.goals[0]??null;if(n&&t.response.proposals.length>0){let r=t.response.proposals.filter(yh).map(e=>({goalId:n.goalId,id:je.current++,previewId:null,proposal:e,receiptLabel:null,state:`candidate`,statusMessage:null}));r.length>0&&ye(t=>({...t,[e]:[...t[e]??[],...r]}))}}catch(t){if(i)return;Ye(e,h,{activity:[],lines:[],pending:!1,reconnect:t instanceof Rh&&t.payload.reconnectable===!0,sourceLabel:`LoopX Chat 本地后端`,text:t instanceof Error?t.message:`无法恢复进行中的 Agent 回合。`})}finally{Le.current.delete(p),Pe.current.get(e)===f&&Pe.current.delete(e),V(e,{agentId:L.agentId,resumable:!0,sessionId:u.session_id,status:`ready`}),Fe.current.get(e)===a&&Fe.current.delete(e),i||xe(t=>t===e?null:t)}}catch(n){if(i)return;n instanceof Rh&&n.payload.error_code===`resume_failed`&&(Ne.current.add(t),o&&V(e,{agentId:L.agentId,resumable:!1,sessionId:o,status:`resume_failed`}))}})(),()=>{i=!0,a?.abort()}},[N,E.goals[0]?.goalId,h,D?.goalId,L.agentId,L.available,L.label,I]),(0,R.useEffect)(()=>{if(h||D||E.goals.length===0||ne===`loading`)return;let e=!1;return Promise.all(E.goals.filter(e=>!e.loadState).map(async e=>{let t=await eg({agentId:e.agentId,channelId:`goal.${e.goalId}`,goalId:e.goalId});return{goalId:e.goalId,session:t.sessions[0]??null}})).then(t=>{e||Ce(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,D?.goalId]),(0,R.useEffect)(()=>{if(De(null),h){Te([]),ke({});return}if(!D){Te([]),ke({});return}let e=!1,t=0,n=0;Te([]),ke({});let r=async()=>{if(!e){if(document.hidden){t=window.setTimeout(()=>void r(),1e4);return}try{let t=await eg({goalId:D.goalId});if(!e){let r=t.sessions.filter(e=>e.channel_id?.startsWith(`task.`));Te(r);let i=await Promise.allSettled(r.map(e=>$h(e.session_id)));if(!e){let e=i.some(e=>e.status===`rejected`);n=e?n+1:0,De(e?`partial`:null),ke(Object.fromEntries(i.flatMap((e,t)=>e.status===`fulfilled`?[[r[t].session_id,e.value]]:[])))}}}catch{n+=1,e||De(`offline`)}e||(t=window.setTimeout(()=>void r(),Math.min(3e4,2e3*2**Math.min(n,4))))}};return r(),()=>{e=!0,window.clearTimeout(t)}},[h,D?.goalId]),(0,R.useEffect)(()=>{if(!ce)return;let e=window.requestAnimationFrame(()=>{Re.current?.querySelector(`[role="menuitem"]:not(:disabled)`)?.focus()});return()=>{window.cancelAnimationFrame(e),B.current?.focus()}},[ce]),(0,R.useEffect)(()=>{if(!ue)return;let e=window.requestAnimationFrame(()=>ze.current?.focus());return()=>{window.cancelAnimationFrame(e),Be.current?.focus()}},[ue]),(0,R.useEffect)(()=>{if(!ce&&!ue)return;let e=e=>{e.key===`Escape`&&(le(!1),de(!1))};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[ce,ue]);function Je(e,t){let n=Ae.current++;return _e(r=>({...r,[e]:[...r[e]??[],{...t,id:n,role:`assistant`}]})),n}function Ye(e,t,n){_e(r=>({...r,[e]:(r[e]??[]).map(e=>e.id===t?{...e,...n}:e)}))}async function Xe(e,t){let n=`${e}:${t}`,r=Me.current.get(n);if(r)return r;let i=await Qh(e,t,Ne.current.has(n)?`new`:`resume_latest`,`goal`);return Me.current.set(n,i.session_id),Ne.current.delete(n),V(e,{agentId:t,resumable:!0,sessionId:i.session_id,status:i.session.status}),i.session_id}async function Ze(e,t){let n=e.trim();if(!n)return;let r=t&&`goalId`in t?t.goalId??`manager`:N,i=r===`manager`?null:E.goals.find(e=>e.goalId===r)??null,a=t?.agentId?vh(re,t.agentId,ie):L,o=r===`manager`?E:i?{...E,blockingTodoCount:E.userTodos.filter(e=>e.goalId===i.goalId&&e.blocking).length,goals:[i],openUserTodoCount:E.userTodos.filter(e=>e.goalId===i.goalId).length,userTodos:E.userTodos.filter(e=>e.goalId===i.goalId),visibleUserTodos:E.userTodos.filter(e=>e.goalId===i.goalId)}:E,s=Ae.current++;if(_e(e=>({...e,[r]:[...e[r]??[],{attachments:t?.attachments,id:s,lines:[],role:`user`,text:n}]})),he(``),xe(r),a.agentId===`status-only`||!i&&r!==`manager`){let e=ww(O,o,n),t=a.agentId===`status-only`;Je(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(()=>{}),xe(null);return}let c=`${r}:${a.agentId}`,l=null;try{let e=r===`manager`?Me.current.get(c):await Xe(r,a.agentId);if(!e){let t=Ne.current.has(c)?`new`:`resume_latest`,n=r===`manager`?I[r]:a.agentId,o=await Qh(r===`manager`?``:i.goalId,n,t,r===`manager`?`manager`:`goal`);r===`manager`&&o.session.manager_runtime&&C(o.session.manager_runtime),e=o.session_id,Me.current.set(c,e),V(r,{agentId:o.agent_id||a.agentId,resumable:!0,sessionId:e,status:`ready`}),Ne.current.delete(c)}let o=``;l=Je(r,{activity:[r===`manager`?`正在连接管家`:`正在连接 Agent`],agentLabel:He(r,a.label),lines:[],pending:!0,sourceLabel:r===`manager`?`${_(`header.manager`)} · 跨 Goal`:`${a.label} Agent · ${YC(i.goalId)}`,text:``});let s={attachments:t?.attachments,signal:(()=>{let e=new AbortController;return Fe.current.set(r,e),e.signal})(),onDelta:e=>{o+=e,l!==null&&Ye(r,l,{text:o})},onActivity:e=>{l!==null&&_e(t=>({...t,[r]:(t[r]??[]).map(t=>t.id===l?{...t,activity:[...new Set([...t.activity??[],e])].slice(-6)}:t)}))},onPhase:(t,n)=>{l!==null&&Ye(r,l,{sourceTurnId:n}),Pe.current.set(r,n),V(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`running`,turnId:n})}},u;if(t?.loopxMode){let n=await fg(e,t.loopxMode.operation,t.loopxMode.settings);if(!n.turn_id)throw Error(`LoopX execution returned no turn identity`);s.onPhase(`turn.accepted`,n.turn_id),u=await gg(e,n.turn_id,s)}else u=await mg(e,n,s);let d=u.response;Ye(r,l,{lines:d.gate?[d.gate.summary,d.gate.next_action].filter(Boolean).slice(0,2):[],pending:!1,text:XC(d.message||o.trim())||`${He(r,a.label)} 已完成分析。`});let f=d.proposals.filter(yh);if(f.length>0&&!i&&Ye(r,l,{lines:[`请进入要修改的 Goal,预览并确认具体变更。`]}),f.length>0&&i){let e=f.map(e=>({goalId:i.goalId,id:je.current++,previewId:null,proposal:e,receiptLabel:null,state:`candidate`,statusMessage:null}));ye(t=>({...t,[r]:[...t[r]??[],...e]}))}if(r!==`manager`&&d.protected_action){let e=jC(r,n,d.protected_action);if(e)return e}}catch(e){if(Ie.current.delete(r)||t?.loopxMode&&e instanceof Rh&&e.payload.error_code===`turn_interrupted`){let e={agentLabel:He(r,a.label),lines:[],pending:!1,sourceLabel:r===`manager`?`${_(`header.manager`)}会话`:`${a.label} 会话`,text:`已中断。你可以在当前会话继续发送消息。`};l===null?Je(r,e):Ye(r,l,e);return}let n=e instanceof Rh?e.payload:null;n&&xh(n)&&Me.current.delete(c),n?.error_code===`resume_failed`&&(Me.current.delete(c),Ne.current.add(c),V(r,{agentId:a.agentId,resumable:!1,sessionId:Se[r]?.sessionId??`resume-failed`,status:`resume_failed`}));let i=n?.gate,o=i&&typeof i==`object`?String(i.summary??``):``,s={agentLabel:He(r,a.label),lines:o?[o]:[],pending:!1,reconnect:n?.reconnectable===!0,sourceLabel:`LoopX Chat 本地后端`,text:n?.error_code===`resume_failed`?`原 ${He(r,a.label)} 会话无法恢复。本地历史已经保留,请在运行详情里选择“重试恢复”或“开始新 Session”。`:e instanceof Error?e.message:`${He(r,a.label)} 会话暂时不可用。`};l===null?Je(r,s):Ye(r,l,s)}finally{Pe.current.delete(r),Fe.current.delete(r);let e=Me.current.get(c);e&&V(r,{agentId:a.agentId,resumable:!0,sessionId:e,status:`ready`}),xe(e=>e===r?null:e)}}async function Qe(e){let t=e?.goalId??N,n=Se[t],r=e?.agentId??n?.agentId??L.agentId,i=`${t}:${r}`,a=e?.sessionId??n?.sessionId??Me.current.get(i),o=e?.turnId??n?.turnId??Pe.current.get(t);if(!(!a||!o))try{Ie.current.add(t),await og(a,o),Fe.current.get(t)?.abort()}catch(e){throw Ie.current.delete(t),e}finally{Pe.current.delete(t),V(t,{agentId:r,resumable:!0,sessionId:a,status:`ready`}),Fe.current.delete(t),xe(e=>e===t?null:e)}}async function $e(e){let t=e.goalId,n=`${t}:${e.agentId}`,r=e.sessionId??Se[t]?.sessionId??Me.current.get(n);if(r)try{let i=await vg(r);Me.current.set(n,r),Ne.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 et(e){let t=`${e.goalId}:${e.agentId}`;Me.current.delete(t),Ne.current.add(t),V(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:`new-session-pending`,status:`ready`})}async function tt(e){let t=`${e.goalId}:${e.agentId}`,n=e.sessionId??Se[e.goalId]?.sessionId??Me.current.get(t);n&&n!==`new-session-pending`&&await _g(n),Me.current.delete(t),Ne.current.add(t),V(e.goalId,null)}function nt(e){re.some(t=>t.agentId===e&&t.available)&&(se(t=>({...t,[N]:e})),le(!1))}function rt(){i(``),pe(`chat`)}function it(e){i(e),pe(`chat`)}D&&JC[D.state],D&&(`${L.label}${D.state}`,We.length>0&&`${Ke}`,Ue.length>0&&`${Ue.length}`),D?.state===`需修复`||!D&&!c.ok?(D&&$C(D.agentId),D?.nextSentence,D?.agentSentence):D?.state===`等你`?(D.needsYouBlocking,D.needsYouBlocking,D.needsYou??D.nextSentence,D.needsYou):(D&&$C(D.agentId),D?.nextSentence);let at=[...!D&&Se.manager?.status===`resume_failed`?[{id:`run:manager:resume-failed`,kind:`run`,run:{agentId:Se.manager.agentId,agentLabel:$C(Se.manager.agentId),canInterrupt:!1,completedSteps:0,goalId:`manager`,goalTitle:`LoopX 管家`,latestActivity:`本地聊天记录已保留,点我查看恢复方式。`,resumable:!1,runId:`manager:resume-failed`,sessionId:Se.manager.sessionId,sessionStatus:`resume_failed`,status:`failed`,title:`上次会话需要恢复`,totalSteps:1,outputs:[]}}]:[],...D?we.map(e=>{let t=e.channel_id?.startsWith(`task.`)?e.channel_id.slice(5):void 0,n=D.agentTodos.find(e=>e.todoId===t),r=!!e.active_turn_id,i=Oe[e.session_id],a=i?.messages.some(e=>ZC(e.role,e.text))===!0;return{id:`run:task:${e.session_id}`,kind:`run`,run:{agentId:e.agent_id,agentLabel:$C(e.agent_id),canInterrupt:r,completedSteps:n?.done||a?1:0,goalId:D.goalId,goalTitle:D.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`:ZC(e.role,e.text)?`assistant`:`error`,text:e.role===`user`?e.text:XC(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}}}):[],...D&&(Se[D.goalId]?.turnId||D.runEvidence||jb(D))?[{id:`run:${D.goalId}`,kind:`run`,run:{agentId:Se[D.goalId]?.agentId??D.agentId,agentLabel:$C(Se[D.goalId]?.agentId??D.agentId),canInterrupt:!!Se[D.goalId]?.turnId,completedSteps:D.agentTodos.filter(e=>e.done).length,goalId:D.goalId,goalTitle:D.title,latestActivity:D.agentSentence,resumable:Se[D.goalId]?.resumable??!0,runId:`goal:${D.goalId}`,sessionId:Se[D.goalId]?.sessionId,sessionStatus:Se[D.goalId]?.status,status:Se[D.goalId]?.turnId?`running`:D.state===`需修复`?`failed`:`waiting`,title:D.nextSentence,totalSteps:D.agentTodos.length||1,turnId:Se[D.goalId]?.turnId,outputs:D.runEvidence?[{createdAt:D.runEvidence.generatedAt,kind:`evidence`,outputId:`${D.goalId}:latest-evidence`,title:D.runEvidence.label}]:[]}}]:[],...Ve.map(e=>({id:`message:${e.id}`,kind:`message`,message:{agentLabel:e.agentLabel,attachments:e.attachments,id:String(e.id),pending:e.pending,returnDelivery:e.returnDelivery,collaboration:e.collaboration,role:e.role,text:e.text||(e.pending?`Agent 正在处理…`:e.lines.join(` +`))}})),...(D?[D]:E.goals).flatMap(e=>e.runEvidence?[{id:`output:${e.goalId}:${e.runEvidence.generatedAt||`latest`}`,kind:`output`,output:{agentLabel:$C(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}}]:[]),...D&&k?[{id:`output:${D.goalId}:report:${k.publication.publication_id}`,kind:`output`,output:{agentId:k.agent_id,agentLabel:$C(k.agent_id),createdAt:k.publication.delivered_at,goalId:D.goalId,goalTitle:D.title,kind:`report`,outputId:k.publication.publication_id,report:{addedCount:k.delta.added_count,changedCount:k.delta.changed_count,deliveredAt:k.publication.delivered_at,generationId:k.generation_id,items:k.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:k.period_window.end_at,periodStartAt:k.period_window.start_at,predecessorPublicationId:k.publication.predecessor_publication_id,publicationId:k.publication.publication_id},safePreview:k.delta.items.map(e=>`${e.change_kind===`added`?`+`:`~`} ${e.title}\n${e.summary}`).join(` -`),summary:k.summary,title:k.title}}]:[]],ot=f.connectionState===`connected`,st=new Map(E.goals.map(e=>[e.goalId,e.title])),ct=e=>qd(e,f.activeSource.statusUrl,ot&&!l?.errors[e.goalId],st.get(e.goalId)),lt={...Eb(E),userTodos:E.userTodos.map(ct),attentionHistory:(E.attentionHistory??E.userTodos).map(ct),periodicReports:{error:ee,loading:M},timeline:at};return(0,z.jsxs)(`div`,{className:p===`dark`?`dark`:``,"data-testid":`personal-goal-home`,children:[Ee?(0,z.jsx)(`p`,{role:`status`,className:`m-0 bg-amber-50 px-4 py-2 text-sm text-amber-900`,children:_(Ee===`partial`?`runs.discoveryPartial`:`runs.discoveryOffline`)}):null,(0,z.jsx)(oC,{agents:re.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=>it(e.goalId),onCorrectRun:async(e,t)=>{if(!e.sessionId)throw Error(`这个 Run 还没有可纠偏的执行 Session。`);let n=await Kh((await Uh({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){Pe.current.set(e.goalId,r);let t=new AbortController;Fe.current.set(e.goalId,t);let n=``,i=Je(e.goalId,{activity:[`正在把纠偏送入原执行 Session`],agentLabel:e.agentLabel,lines:[],pending:!0,sourceLabel:`${e.agentLabel} · 执行 Session`,text:``});try{let a=await gg(e.sessionId,r,{signal:t.signal,onDelta:t=>{n+=t,Ye(e.goalId,i,{text:n})}});Ye(e.goalId,i,{activity:[],pending:!1,text:qC(a.response.message||n.trim())||`${e.agentLabel} 已完成纠偏。`})}catch(t){let n=Ie.current.delete(e.goalId);Ye(e.goalId,i,{activity:[],pending:!1,text:n?`已中断。你可以在当前会话继续发送消息。`:t instanceof Error?t.message:`纠偏回合失败。`})}finally{Pe.current.delete(e.goalId),Fe.current.delete(e.goalId),V(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:e.sessionId,status:`ready`})}}},onCloseRunSession:tt,onInterruptRun:async e=>Qe(e),onOpenGoal:it,onOpenRunSession:async e=>{if(!e.sessionId)return;let t=e.sessionId,n=await $h(t);ke(e=>({...e,[t]:n})),it(e.goalId),_e(t=>({...t,[e.goalId]:n.messages.map(t=>({agentLabel:t.role===`user`?void 0:e.agentLabel,attachments:HC(t.attachments),id:Ae.current++,lines:[],role:t.role===`user`?`user`:`assistant`,sourceLabel:t.role===`user`?void 0:`${e.agentLabel} · 执行 Session`,text:t.role===`user`?t.text:qC(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=>it(e.goalId),...b?{onPreviewGoalSubagentConfiguration:async e=>{let t=await xg(e);return{changed:t.changed,configuration:{allowedDomains:t.after.orchestration.allowed_domains,codexHostCapacity:{configuredChildren:t.codex_host_capacity.configured_children,newSessionRequired:t.codex_host_capacity.new_session_required,requiredChildren:t.codex_host_capacity.required_children,status:t.codex_host_capacity.status,writeRequired:t.codex_host_capacity.write_required,written:t.codex_host_capacity.written},enabled:t.feature_summary.multi_subagent===`enabled`,executionConfig:t.after.orchestration.execution_config,maxChildren:t.after.orchestration.max_children,modelConfig:t.after.orchestration.model_config},previewId:t.preview_id}},onApplyGoalSubagentConfiguration:async({previewId:e,...t})=>{let n=await Sg(t,e);return{allowedDomains:n.after.orchestration.allowed_domains,codexHostCapacity:{configuredChildren:n.codex_host_capacity.configured_children,newSessionRequired:n.codex_host_capacity.new_session_required,requiredChildren:n.codex_host_capacity.required_children,status:n.codex_host_capacity.status,writeRequired:n.codex_host_capacity.write_required,written:n.codex_host_capacity.written},enabled:n.feature_summary.multi_subagent===`enabled`,executionConfig:n.after.orchestration.execution_config,maxChildren:n.after.orchestration.max_children,modelConfig:n.after.orchestration.model_config}}}:{},...g?{onExecuteGoalLifecycle:async({goalId:e,operation:t,reason:n})=>{let r=await mx(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:$e,onSelectAgent:nt,onSelectGoal:e=>e?it(e):rt(),onSendMessage:async(e,t,n,r)=>Ze(e,{agentId:t,goalId:n,attachments:r}),onPrepareLoopX:(e,t)=>Xe(t,e),onStartLoopX:(e,t,n,r)=>{Ze(e===`start`?`开启 LoopX 模式,持续推进当前 Goal。`:`恢复 LoopX 模式。`,{agentId:t,goalId:n,loopxMode:{operation:e,settings:r}})},onStartNewRunSession:et},goalArchiveLoadState:e,managerChannelBinding:w,managerRuntime:S,conversationSessionId:Se[N]?.sessionId,model:lt,readOnly:h,selectedAgentId:L.agentId,selectedGoalId:D?.goalId??null,statusSourceControl:f})]})}function ww({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)(Dy,{"aria-label":`切换主题`,onClick:a,size:`icon`,variant:`secondary`,children:i===`dark`?(0,z.jsx)(th,{className:`h-4 w-4`}):(0,z.jsx)(Im,{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)(Oy,{"data-testid":`initial-status-state`,children:(0,z.jsx)(ky,{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)(um,{className:`mx-auto h-6 w-6 text-rose-600 dark:text-rose-300`}):(0,z.jsx)(Um,{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)(Dy,{disabled:t,onClick:n,children:[(0,z.jsx)(Um,{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 Tw(){let e=ST.useSearch(),t=ST.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)(Mp),[u,d]=(0,R.useState)({kind:`example`,label:`bundled example`}),[f,p]=(0,R.useState)(()=>yC(window.localStorage,window.location.href)),m=(0,R.useRef)(f);m.current=f;let[h,g]=(0,R.useState)(e.statusUrl),[_,v]=(0,R.useState)(null),[y,b]=(0,R.useState)(!1),[x,S]=(0,R.useState)({error:null,phase:`idle`}),[C,w]=(0,R.useState)(e.statusUrl.trim()||null),[T,E]=(0,R.useState)(!1),D=(0,R.useRef)(null),O=(0,R.useRef)(b_(e.statusUrl.trim()||null)),k=!T&&u.kind===`example`?e.statusUrl.trim():``,A=C??k,ee=u.kind===`url`?u.label:kC,j=!!(_&&C),M=EC(f,C,ee,window.location.href),te=u.kind===`example`&&!T,ne=c.attention_queue,N=c.run_history,P=(0,R.useMemo)(()=>MC(N.goals,ne.items),[N.goals,ne.items]);function re(e,t,n=0){S({error:null,phase:`loading`}),AC(ph(e,`stopped`,window.location.href)).then(r=>{if(!w_(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=>q_(e,r)),a&&n<1){F(e,{background:!0,resyncAttempt:n+1});return}S(a?{error:`Goal 状态在加载历史时发生变化,请重试。`,phase:`error`}:{error:null,phase:`ready`})}).catch(e=>{w_(O.current,t)&&S({error:jp(e),phase:`error`})})}function ie(){let e=u.kind===`url`?u.label:h||kC,t=S_(O.current,e,{background:!0});if(i){F(e);return}t&&re(e,t)}async function ae(e,n,r){if(r.background)return l(e=>q_(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})}),C_(O.current,r)?(O.current.requestedUrl=null,w(null),!0):!1}async function F(e,t={}){let n=e.trim(),r=t.background===!0;if(!n){r||v(`状态地址不能为空`);return}let c=S_(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 Ip(n,window.location.href).catch(()=>null);if(!w_(O.current,c))return;if(e){let o=(t.retryOnly||t.reuseSnapshots)&&u.kind===`url`&&u.label===n?Pp(i,e,{invalidateGoalIds:t.invalidateGoalIds}):{};a({directory:e,snapshots:o,errors:{}});let f={...e,goals:e.goals.filter(e=>!o[e.id])},p=!1,m=Lp(e);if(r)l(m);else if(!await ae(n,m,c))return;if(S({error:null,phase:`loading`}),await zp(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})},()=>w_(O.current,c),()=>s.current,d.signal),p&&(t.resyncAttempt??0)<1&&w_(O.current,c)){await F(n,{resyncAttempt:1});return}w_(O.current,c)&&S({error:null,phase:`ready`});return}let o=await AC(ph(n,`active`,window.location.href));if(!w_(O.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){S({error:null,phase:`ready`});return}re(n,c,t.resyncAttempt??0)}catch(e){if(!C_(O.current,c))return;r||v(jp(e))}finally{!r&&C_(O.current,c)&&b(!1)}}function oe(e,t={}){o.current?.abort();let n=x_(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 px(e.label,t)}catch{}}O.current.selectionRevision===n&&await F(e.statusUrl,{selectionRevision:n})})()}function I(e){m.current=e,p(e);try{bC(window.localStorage,e)}catch{}}let se={activeSource:M,connectionState:y?`loading`:j?`error`:`connected`,errorMessage:j?`未切换到 ${C??`所选来源`}:${_}`:null,onAdd:e=>{let t=SC(f,e,window.location.href);return`error`in t?{error:t.error}:(I(t.catalog),oe(t.source,{ensureTunnel:e.ensureTunnel}),{})},onConfiguredHostsLoaded:e=>{let t=m.current,n=xC(t,e);n!==t&&I(n)},onRemove:e=>{I(CC(f,e)),M.id===e&&oe(mC)},onSelect:e=>{let t=f.sources.find(t=>t.id===e);t&&oe(t,{ensureTunnel:t.kind===`ssh_tunnel`})},sources:M.id===`temporary`?[...f.sources,M]:f.sources};(0,R.useEffect)(()=>{let t=e.statusUrl.trim();if(t){if(D.current===t||C&&C!==t)return;(u.kind!==`url`||u.label!==t)&&F(t);return}D.current=null,!T&&(C||u.kind===`example`&&F(kC))},[T,C,e.statusUrl,u.kind,u.label]),(0,R.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,R.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]&&F(u.label,{retryOnly:!0})},[e.goalId,y,i,u]);function L(e){t({search:t=>({...t,goalId:e})})}return te?(0,z.jsx)(ww,{error:_,isLoading:y,onRetry:()=>void F(A||kC),requestedUrl:A||kC,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)}):(0,z.jsx)(Cw,{goalArchiveLoadState:x,isLoading:y,onGoalActivationStateChange:(e,t)=>{O.current.projectionRevision+=1,l(n=>Op(n,e,t)),a(n=>n&&{...n,snapshots:Object.fromEntries(Object.entries(n.snapshots).map(([n,r])=>[n,Op(r,e,t)]))})},onGoalDeleted:e=>{O.current.projectionRevision+=1,l(t=>kp(t,e)),a(t=>t&&{...t,snapshots:Object.fromEntries(Object.entries(t.snapshots).filter(([t])=>t!==e))})},onSelectGoal:L,onReconcileStatus:e=>F(u.kind===`url`?u.label:h||kC,{background:!0,invalidateGoalIds:e?.invalidateGoalIds,reuseSnapshots:!0}),onRetryGoalArchive:ie,onRefresh:()=>F(u.kind===`url`?u.label:h||kC,{retryOnly:!!(i&&Object.keys(i.errors).length)}),payload:c,progress:i,rows:P,selectedGoalId:e.goalId,statusSourceControl:se,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)})}var Ew=Q_(`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 Dw({className:e,variant:t,...n}){return(0,z.jsx)(`span`,{className:Ty(Ew({variant:t}),e),...n})}var Ow=[{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`}],kw=[{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`}],Aw=[{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.`}],jw=[`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`],Mw=[{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 Nw({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 Pw(){return(0,z.jsx)(Nw,{icon:im,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:Ow.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)(Dw,{variant:`info`,children:e.label}),(0,z.jsx)(Dw,{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 Fw(){return(0,z.jsx)(Nw,{icon:wm,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:kw.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 Iw(){return(0,z.jsx)(Nw,{icon:bm,title:`Fixture Generation`,children:(0,z.jsx)(`div`,{className:`grid gap-3 p-4 md:grid-cols-3`,"data-testid":`developer-fixture-generation`,children:Aw.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 Lw(){return(0,z.jsx)(Nw,{icon:fm,title:`Smoke Checklist`,children:(0,z.jsx)(`div`,{className:`space-y-2 p-4`,"data-testid":`developer-smoke-checklist`,children:jw.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)(tm,{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 Rw(){return(0,z.jsx)(Nw,{icon:pm,title:`Component Examples`,children:(0,z.jsx)(`div`,{className:`grid gap-3 p-4 lg:grid-cols-3`,"data-testid":`developer-component-examples`,children:Mw.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)(Dw,{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 zw(){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)(nh,{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://loopx-project.github.io/loopx/`,children:[(0,z.jsx)(Om,{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://loopx-project.github.io/loopx/docs/showcases/index.en.html`,children:[(0,z.jsx)(vm,{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)(pm,{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)(Dw,{variant:`success`,children:`read-only`}),(0,z.jsx)(Dw,{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)(Dw,{variant:`info`,children:`developers/projections`}),(0,z.jsx)(Dw,{variant:`success`,children:`public-safe`}),(0,z.jsx)(Dw,{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)(Pw,{}),(0,z.jsx)(Fw,{})]}),(0,z.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(0,1fr)_420px]`,children:[(0,z.jsx)(Iw,{}),(0,z.jsx)(Lw,{})]}),(0,z.jsx)(Rw,{}),(0,z.jsx)(Nw,{icon:Zm,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 Bw=J({value:G().finite(),total:G().finite().positive().optional(),unit:W().optional(),higher_is_better:K()}).passthrough(),Vw=yd(W(),G().finite()).default({}),Hw=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(),Uw=J({arm_id:W(),selected_run_id:W().nullable(),score_countable:K(),metrics:yd(W(),Bw),effort:Vw,insight:Hw.nullable().optional()}),Ww=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:yd(W(),Bw),countability:J({integrity_qualified:K(),official_result_present:K(),score_countable:K()}).passthrough(),treatment_fidelity:W(),effort:Vw,redacted_insight:Hw.nullable().optional(),upload_provenance:J({producer_id:W(),producer_version:W(),observed_at:W(),source_revision:W()}).passthrough()}).passthrough(),Gw=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(),Kw=J({arm_id:W(),arm_role:W(),factor_assignments:yd(W(),W()),protocol_counts:yd(W(),G().int().nonnegative()).default({}),runner_revision_counts:yd(W(),G().int().nonnegative()).default({}),orchestrator_runtime_counts:yd(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:yd(W(),Gw),binary_outcomes:yd(W(),J({success_count:G().int().nonnegative(),case_denominator:G().int().nonnegative(),success_rate:G().finite().min(0).max(1).nullable()})),effort:yd(W(),J({denominator:G().int().nonnegative(),mean:G().finite().nullable(),median:G().finite().nullable()})),failure_class_counts:yd(W(),G().int().nonnegative())}).passthrough(),qw=J({baseline_value:G().finite(),candidate_value:G().finite(),delta:G().finite(),direction:Y([`improved`,`flat`,`regressed`]).optional()}).passthrough(),Jw=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:yd(W(),qw)}).passthrough(),Yw=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:yd(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:yd(W(),G().int().nonnegative())}),arms:q(Kw),contrasts:yd(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:yd(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(Uw),eligible_comparisons:q(Jw),largest_eligible_primary_contrast:Jw.nullable()})),runs:q(Ww),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 Xw(e){return Yw.parse(e)}function Zw(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 Qw=[{id:`campaign`,label:`Campaign`},{id:`arms`,label:`Arms`},{id:`cases`,label:`Cases`},{id:`runs`,label:`Runs`}];function $w(e){return e==null?`—`:`${(e*100).toFixed(e>=.995?0:1)}%`}function eT(e){return e==null?`—`:new Intl.NumberFormat(`en`,{maximumFractionDigits:2,notation:`compact`}).format(e)}function tT(e){if(e==null)return`—`;let t=e/6e4;return t>=120?`${(t/60).toFixed(1)} h`:`${eT(t)} min`}function nT(e){let t=Object.entries(e);return t.length?t.map(([e,t])=>`${e} (${t})`).join(`, `):`—`}function rT(e){if(!e)return`—`;let t=e.total==null?eT(e.value):`${eT(e.value)}/${eT(e.total)}`;return e.unit?`${t} ${e.unit}`:t}function iT(e,t){let n=e.metrics[t];return!n||n.case_denominator===0?`—`:n.suite_micro_rate==null?`${eT(n.value_mean)} mean`:`${$w(n.suite_micro_rate)} · ${eT(n.suite_micro_numerator)}/${eT(n.suite_micro_denominator)}`}function aT(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}${eT(r.delta)}`}}function oT({children:e,tone:t=`neutral`}){return(0,z.jsx)(`span`,{className:`benchmark-state benchmark-state-${t}`,children:e})}function sT({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)(oT,{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:iT(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 cT({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)(oT,{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:iT(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:tT(t.effort.duration_ms?.median)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Protocols`}),(0,z.jsx)(`dd`,{children:nT(t.protocol_counts)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Runner revisions`}),(0,z.jsx)(`dd`,{children:nT(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:nT(t.failure_class_counts)})]})]})]},t.arm_id))})}function lT({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=aT(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)(oT,{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,`: `,rT(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,`: `,rT(r.metrics[e.metric_name])]},e.metric_name)),(0,z.jsxs)(`small`,{children:[`Countable · `,tT(r.effort.duration_ms),` `,(0,z.jsx)(Qp,{"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 uT({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)(oT,{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:[tT(e.effort.duration_ms),` · `,eT(e.effort.agent_steps),` steps · `,eT(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:rT(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 dT({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)(uT,{packet:e,run:r})]})}function fT(){let e=DT.useSearch(),t=DT.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:Zw(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 Xw(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)(um,{"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)(Um,{"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)(Yp,{"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)(Zm,{"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)(oT,{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)(hm,{"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:[$w(n.campaign.selected_score_countable_coverage_rate),` declared coverage`]})]}),(0,z.jsxs)(`article`,{children:[(0,z.jsx)(dm,{"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)(Qp,{"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)(Yp,{"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:[Qw.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)(Um,{"aria-hidden":`true`,size:14}),` Refresh local readback`]})]}),(0,z.jsxs)(`div`,{className:`benchmark-content`,children:[e.view===`campaign`&&(0,z.jsx)(sT,{packet:n,primaryMetric:l}),e.view===`arms`&&(0,z.jsx)(cT,{packet:n}),e.view===`cases`&&(0,z.jsx)(lT,{onOpenRun:e=>u(`runs`,e),packet:n,primaryMetric:l}),e.view===`runs`&&(0,z.jsx)(dT,{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)(Zm,{"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 pT=J({goalId:W().optional().default(``),statusUrl:W().optional().default(``)}),mT=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(``)}),hT=mT.omit({mode:!0}),gT=J({dashboardUrl:W().optional().default(``),view:Y([`campaign`,`arms`,`cases`,`runs`]).optional().default(`campaign`),runId:W().optional().default(``)});function _T(){let e=`https://loopx-project.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 vT({goalId:e,statusUrl:t}){let n=t?dh(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 yT(){let e=CT.useSearch();return e.mode===`ops`?(0,z.jsx)(vT,{...e}):e.mode===`developer`?(0,z.jsx)(ii,{replace:!0,to:`/developers/projections`}):(0,z.jsx)(_T,{})}function bT(){return(0,z.jsx)(vT,{...wT.useSearch()})}var xT=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`})]})}),ST=xi({getParentRoute:()=>xT,path:`/`,validateSearch:e=>pT.parse(e),component:Tw}),CT=xi({getParentRoute:()=>xT,path:`/frontstage`,validateSearch:e=>mT.parse(e),component:yT}),wT=xi({getParentRoute:()=>xT,path:`/deprecated/frontstage/ops`,validateSearch:e=>hT.parse(e),component:bT}),TT=xi({getParentRoute:()=>xT,path:`/frontstage/developer`,component:()=>(0,z.jsx)(ii,{replace:!0,to:`/developers/projections`})}),ET=xi({getParentRoute:()=>xT,path:`/developers/projections`,component:zw}),DT=xi({getParentRoute:()=>xT,path:`/benchmarks/study`,validateSearch:e=>gT.parse(e),component:fT}),OT=xT.addChildren([ST,CT,wT,TT,ET,DT]);function kT(e){return!e||e===`/`||e===`./`?`/`:(e.startsWith(`/`)?e:`/${e}`).replace(/\/+$/,``)||`/`}var AT=Li({routeTree:OT,basepath:kT(`/chat/`),trailingSlash:`preserve`}),jT=document.getElementById(`root`);if(!jT)throw Error(`Root element not found`);var MT=new je({defaultOptions:{queries:{refetchOnWindowFocus:!1,retry:1,staleTime:1e4}}});(0,Vi.createRoot)(jT).render((0,z.jsx)(Fe,{client:MT,children:(0,z.jsx)(qi,{children:(0,z.jsx)(Bi,{router:AT})})})); \ No newline at end of file +`),summary:k.summary,title:k.title}}]:[]],ot=f.connectionState===`connected`,st=new Map(E.goals.map(e=>[e.goalId,e.title])),ct=e=>qd(e,f.activeSource.statusUrl,ot&&!l?.errors[e.goalId],st.get(e.goalId)),lt={...kb(E),userTodos:E.userTodos.map(ct),attentionHistory:(E.attentionHistory??E.userTodos).map(ct),periodicReports:{error:ee,loading:M},timeline:at};return(0,z.jsxs)(`div`,{className:p===`dark`?`dark`:``,"data-testid":`personal-goal-home`,children:[Ee?(0,z.jsx)(`p`,{role:`status`,className:`m-0 bg-amber-50 px-4 py-2 text-sm text-amber-900`,children:_(Ee===`partial`?`runs.discoveryPartial`:`runs.discoveryOffline`)}):null,(0,z.jsx)(lC,{agents:re.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=>it(e.goalId),onCorrectRun:async(e,t)=>{if(!e.sessionId)throw Error(`这个 Run 还没有可纠偏的执行 Session。`);let n=await Kh((await Uh({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){Pe.current.set(e.goalId,r);let t=new AbortController;Fe.current.set(e.goalId,t);let n=``,i=Je(e.goalId,{activity:[`正在把纠偏送入原执行 Session`],agentLabel:e.agentLabel,lines:[],pending:!0,sourceLabel:`${e.agentLabel} · 执行 Session`,text:``});try{let a=await gg(e.sessionId,r,{signal:t.signal,onDelta:t=>{n+=t,Ye(e.goalId,i,{text:n})}});Ye(e.goalId,i,{activity:[],pending:!1,text:XC(a.response.message||n.trim())||`${e.agentLabel} 已完成纠偏。`})}catch(t){let n=Ie.current.delete(e.goalId);Ye(e.goalId,i,{activity:[],pending:!1,text:n?`已中断。你可以在当前会话继续发送消息。`:t instanceof Error?t.message:`纠偏回合失败。`})}finally{Pe.current.delete(e.goalId),Fe.current.delete(e.goalId),V(e.goalId,{agentId:e.agentId,resumable:!0,sessionId:e.sessionId,status:`ready`})}}},onCloseRunSession:tt,onInterruptRun:async e=>Qe(e),onOpenGoal:it,onOpenRunSession:async e=>{if(!e.sessionId)return;let t=e.sessionId,n=await $h(t);ke(e=>({...e,[t]:n})),it(e.goalId),_e(t=>({...t,[e.goalId]:n.messages.map(t=>({agentLabel:t.role===`user`?void 0:e.agentLabel,attachments:GC(t.attachments),id:Ae.current++,lines:[],role:t.role===`user`?`user`:`assistant`,sourceLabel:t.role===`user`?void 0:`${e.agentLabel} · 执行 Session`,text:t.role===`user`?t.text:XC(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=>it(e.goalId),...b?{onPreviewGoalSubagentConfiguration:async e=>{let t=await xg(e);return{changed:t.changed,configuration:{allowedDomains:t.after.orchestration.allowed_domains,codexHostCapacity:{configuredChildren:t.codex_host_capacity.configured_children,newSessionRequired:t.codex_host_capacity.new_session_required,requiredChildren:t.codex_host_capacity.required_children,status:t.codex_host_capacity.status,writeRequired:t.codex_host_capacity.write_required,written:t.codex_host_capacity.written},enabled:t.feature_summary.multi_subagent===`enabled`,executionConfig:t.after.orchestration.execution_config,maxChildren:t.after.orchestration.max_children,modelConfig:t.after.orchestration.model_config},previewId:t.preview_id}},onApplyGoalSubagentConfiguration:async({previewId:e,...t})=>{let n=await Sg(t,e);return{allowedDomains:n.after.orchestration.allowed_domains,codexHostCapacity:{configuredChildren:n.codex_host_capacity.configured_children,newSessionRequired:n.codex_host_capacity.new_session_required,requiredChildren:n.codex_host_capacity.required_children,status:n.codex_host_capacity.status,writeRequired:n.codex_host_capacity.write_required,written:n.codex_host_capacity.written},enabled:n.feature_summary.multi_subagent===`enabled`,executionConfig:n.after.orchestration.execution_config,maxChildren:n.after.orchestration.max_children,modelConfig:n.after.orchestration.model_config}}}:{},...g?{onExecuteGoalLifecycle:async({goalId:e,operation:t,reason:n})=>{let r=await _x(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:$e,onSelectAgent:nt,onSelectGoal:e=>e?it(e):rt(),onSendMessage:async(e,t,n,r)=>Ze(e,{agentId:t,goalId:n,attachments:r}),onPrepareLoopX:(e,t)=>Xe(t,e),onStartLoopX:(e,t,n,r)=>{Ze(e===`start`?`开启 LoopX 模式,持续推进当前 Goal。`:`恢复 LoopX 模式。`,{agentId:t,goalId:n,loopxMode:{operation:e,settings:r}})},onStartNewRunSession:et},goalArchiveLoadState:e,managerChannelBinding:w,managerRuntime:S,conversationSessionId:Se[N]?.sessionId,model:lt,readOnly:h,selectedAgentId:L.agentId,selectedGoalId:D?.goalId??null,statusSourceControl:f})]})}function Dw({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)(Dy,{"aria-label":`切换主题`,onClick:a,size:`icon`,variant:`secondary`,children:i===`dark`?(0,z.jsx)(th,{className:`h-4 w-4`}):(0,z.jsx)(Im,{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)(Oy,{"data-testid":`initial-status-state`,children:(0,z.jsx)(ky,{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)(um,{className:`mx-auto h-6 w-6 text-rose-600 dark:text-rose-300`}):(0,z.jsx)(Um,{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)(Dy,{disabled:t,onClick:n,children:[(0,z.jsx)(Um,{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 Ow(){let e=TT.useSearch(),t=TT.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)(Mp),[u,d]=(0,R.useState)({kind:`example`,label:`bundled example`}),[f,p]=(0,R.useState)(()=>SC(window.localStorage,window.location.href)),m=(0,R.useRef)(f);m.current=f;let[h,g]=(0,R.useState)(e.statusUrl),[_,v]=(0,R.useState)(null),[y,b]=(0,R.useState)(!1),[x,S]=(0,R.useState)({error:null,phase:`idle`}),[C,w]=(0,R.useState)(e.statusUrl.trim()||null),[T,E]=(0,R.useState)(!1),D=(0,R.useRef)(null),O=(0,R.useRef)(b_(e.statusUrl.trim()||null)),k=!T&&u.kind===`example`?e.statusUrl.trim():``,A=C??k,ee=u.kind===`url`?u.label:MC,j=!!(_&&C),M=kC(f,C,ee,window.location.href),te=u.kind===`example`&&!T,ne=c.attention_queue,N=c.run_history,P=(0,R.useMemo)(()=>FC(N.goals,ne.items),[N.goals,ne.items]);function re(e,t,n=0){S({error:null,phase:`loading`}),NC(ph(e,`stopped`,window.location.href)).then(r=>{if(!w_(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=>q_(e,r)),a&&n<1){F(e,{background:!0,resyncAttempt:n+1});return}S(a?{error:`Goal 状态在加载历史时发生变化,请重试。`,phase:`error`}:{error:null,phase:`ready`})}).catch(e=>{w_(O.current,t)&&S({error:jp(e),phase:`error`})})}function ie(){let e=u.kind===`url`?u.label:h||MC,t=S_(O.current,e,{background:!0});if(i){F(e);return}t&&re(e,t)}async function ae(e,n,r){if(r.background)return l(e=>q_(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})}),C_(O.current,r)?(O.current.requestedUrl=null,w(null),!0):!1}async function F(e,t={}){let n=e.trim(),r=t.background===!0;if(!n){r||v(`状态地址不能为空`);return}let c=S_(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 Ip(n,window.location.href).catch(()=>null);if(!w_(O.current,c))return;if(e){let o=(t.retryOnly||t.reuseSnapshots)&&u.kind===`url`&&u.label===n?Pp(i,e,{invalidateGoalIds:t.invalidateGoalIds}):{};a({directory:e,snapshots:o,errors:{}});let f={...e,goals:e.goals.filter(e=>!o[e.id])},p=!1,m=Lp(e);if(r)l(m);else if(!await ae(n,m,c))return;if(S({error:null,phase:`loading`}),await zp(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})},()=>w_(O.current,c),()=>s.current,d.signal),p&&(t.resyncAttempt??0)<1&&w_(O.current,c)){await F(n,{resyncAttempt:1});return}w_(O.current,c)&&S({error:null,phase:`ready`});return}let o=await NC(ph(n,`active`,window.location.href));if(!w_(O.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){S({error:null,phase:`ready`});return}re(n,c,t.resyncAttempt??0)}catch(e){if(!C_(O.current,c))return;r||v(jp(e))}finally{!r&&C_(O.current,c)&&b(!1)}}function oe(e,t={}){o.current?.abort();let n=x_(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 gx(e.label,t)}catch{}}O.current.selectionRevision===n&&await F(e.statusUrl,{selectionRevision:n})})()}function I(e){m.current=e,p(e);try{CC(window.localStorage,e)}catch{}}let se={activeSource:M,connectionState:y?`loading`:j?`error`:`connected`,errorMessage:j?`未切换到 ${C??`所选来源`}:${_}`:null,onAdd:e=>{let t=TC(f,e,window.location.href);return`error`in t?{error:t.error}:(I(t.catalog),oe(t.source,{ensureTunnel:e.ensureTunnel}),{})},onConfiguredHostsLoaded:e=>{let t=m.current,n=wC(t,e);n!==t&&I(n)},onRemove:e=>{I(EC(f,e)),M.id===e&&oe(_C)},onSelect:e=>{let t=f.sources.find(t=>t.id===e);t&&oe(t,{ensureTunnel:t.kind===`ssh_tunnel`})},sources:M.id===`temporary`?[...f.sources,M]:f.sources};(0,R.useEffect)(()=>{let t=e.statusUrl.trim();if(t){if(D.current===t||C&&C!==t)return;(u.kind!==`url`||u.label!==t)&&F(t);return}D.current=null,!T&&(C||u.kind===`example`&&F(MC))},[T,C,e.statusUrl,u.kind,u.label]),(0,R.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,R.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]&&F(u.label,{retryOnly:!0})},[e.goalId,y,i,u]);function L(e){t({search:t=>({...t,goalId:e})})}return te?(0,z.jsx)(Dw,{error:_,isLoading:y,onRetry:()=>void F(A||MC),requestedUrl:A||MC,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)}):(0,z.jsx)(Ew,{goalArchiveLoadState:x,isLoading:y,onGoalActivationStateChange:(e,t)=>{O.current.projectionRevision+=1,l(n=>Op(n,e,t)),a(n=>n&&{...n,snapshots:Object.fromEntries(Object.entries(n.snapshots).map(([n,r])=>[n,Op(r,e,t)]))})},onGoalDeleted:e=>{O.current.projectionRevision+=1,l(t=>kp(t,e)),a(t=>t&&{...t,snapshots:Object.fromEntries(Object.entries(t.snapshots).filter(([t])=>t!==e))})},onSelectGoal:L,onReconcileStatus:e=>F(u.kind===`url`?u.label:h||MC,{background:!0,invalidateGoalIds:e?.invalidateGoalIds,reuseSnapshots:!0}),onRetryGoalArchive:ie,onRefresh:()=>F(u.kind===`url`?u.label:h||MC,{retryOnly:!!(i&&Object.keys(i.errors).length)}),payload:c,progress:i,rows:P,selectedGoalId:e.goalId,statusSourceControl:se,theme:n,toggleTheme:()=>r(n===`dark`?`light`:`dark`)})}var kw=Q_(`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 Aw({className:e,variant:t,...n}){return(0,z.jsx)(`span`,{className:Ty(kw({variant:t}),e),...n})}var jw=[{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`}],Mw=[{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`}],Nw=[{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.`}],Pw=[`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`],Fw=[{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 Iw({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 Lw(){return(0,z.jsx)(Iw,{icon:im,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:jw.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)(Aw,{variant:`info`,children:e.label}),(0,z.jsx)(Aw,{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 Rw(){return(0,z.jsx)(Iw,{icon:wm,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:Mw.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 zw(){return(0,z.jsx)(Iw,{icon:bm,title:`Fixture Generation`,children:(0,z.jsx)(`div`,{className:`grid gap-3 p-4 md:grid-cols-3`,"data-testid":`developer-fixture-generation`,children:Nw.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 Bw(){return(0,z.jsx)(Iw,{icon:fm,title:`Smoke Checklist`,children:(0,z.jsx)(`div`,{className:`space-y-2 p-4`,"data-testid":`developer-smoke-checklist`,children:Pw.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)(tm,{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 Vw(){return(0,z.jsx)(Iw,{icon:pm,title:`Component Examples`,children:(0,z.jsx)(`div`,{className:`grid gap-3 p-4 lg:grid-cols-3`,"data-testid":`developer-component-examples`,children:Fw.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)(Aw,{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 Hw(){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)(nh,{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://loopx-project.github.io/loopx/`,children:[(0,z.jsx)(Om,{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://loopx-project.github.io/loopx/docs/showcases/index.en.html`,children:[(0,z.jsx)(vm,{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)(pm,{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)(Aw,{variant:`success`,children:`read-only`}),(0,z.jsx)(Aw,{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)(Aw,{variant:`info`,children:`developers/projections`}),(0,z.jsx)(Aw,{variant:`success`,children:`public-safe`}),(0,z.jsx)(Aw,{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)(Lw,{}),(0,z.jsx)(Rw,{})]}),(0,z.jsxs)(`div`,{className:`grid gap-4 xl:grid-cols-[minmax(0,1fr)_420px]`,children:[(0,z.jsx)(zw,{}),(0,z.jsx)(Bw,{})]}),(0,z.jsx)(Vw,{}),(0,z.jsx)(Iw,{icon:Zm,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 Uw=J({value:G().finite(),total:G().finite().positive().optional(),unit:W().optional(),higher_is_better:K()}).passthrough(),Ww=yd(W(),G().finite()).default({}),Gw=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(),Kw=J({arm_id:W(),selected_run_id:W().nullable(),score_countable:K(),metrics:yd(W(),Uw),effort:Ww,insight:Gw.nullable().optional()}),qw=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:yd(W(),Uw),countability:J({integrity_qualified:K(),official_result_present:K(),score_countable:K()}).passthrough(),treatment_fidelity:W(),effort:Ww,redacted_insight:Gw.nullable().optional(),upload_provenance:J({producer_id:W(),producer_version:W(),observed_at:W(),source_revision:W()}).passthrough()}).passthrough(),Jw=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(),Yw=J({arm_id:W(),arm_role:W(),factor_assignments:yd(W(),W()),protocol_counts:yd(W(),G().int().nonnegative()).default({}),runner_revision_counts:yd(W(),G().int().nonnegative()).default({}),orchestrator_runtime_counts:yd(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:yd(W(),Jw),binary_outcomes:yd(W(),J({success_count:G().int().nonnegative(),case_denominator:G().int().nonnegative(),success_rate:G().finite().min(0).max(1).nullable()})),effort:yd(W(),J({denominator:G().int().nonnegative(),mean:G().finite().nullable(),median:G().finite().nullable()})),failure_class_counts:yd(W(),G().int().nonnegative())}).passthrough(),Xw=J({baseline_value:G().finite(),candidate_value:G().finite(),delta:G().finite(),direction:Y([`improved`,`flat`,`regressed`]).optional()}).passthrough(),Zw=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:yd(W(),Xw)}).passthrough(),Qw=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:yd(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:yd(W(),G().int().nonnegative())}),arms:q(Yw),contrasts:yd(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:yd(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(Kw),eligible_comparisons:q(Zw),largest_eligible_primary_contrast:Zw.nullable()})),runs:q(qw),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 $w(e){return Qw.parse(e)}function eT(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 tT=[{id:`campaign`,label:`Campaign`},{id:`arms`,label:`Arms`},{id:`cases`,label:`Cases`},{id:`runs`,label:`Runs`}];function nT(e){return e==null?`—`:`${(e*100).toFixed(e>=.995?0:1)}%`}function rT(e){return e==null?`—`:new Intl.NumberFormat(`en`,{maximumFractionDigits:2,notation:`compact`}).format(e)}function iT(e){if(e==null)return`—`;let t=e/6e4;return t>=120?`${(t/60).toFixed(1)} h`:`${rT(t)} min`}function aT(e){let t=Object.entries(e);return t.length?t.map(([e,t])=>`${e} (${t})`).join(`, `):`—`}function oT(e){if(!e)return`—`;let t=e.total==null?rT(e.value):`${rT(e.value)}/${rT(e.total)}`;return e.unit?`${t} ${e.unit}`:t}function sT(e,t){let n=e.metrics[t];return!n||n.case_denominator===0?`—`:n.suite_micro_rate==null?`${rT(n.value_mean)} mean`:`${nT(n.suite_micro_rate)} · ${rT(n.suite_micro_numerator)}/${rT(n.suite_micro_denominator)}`}function cT(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}${rT(r.delta)}`}}function lT({children:e,tone:t=`neutral`}){return(0,z.jsx)(`span`,{className:`benchmark-state benchmark-state-${t}`,children:e})}function uT({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)(lT,{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:sT(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 dT({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)(lT,{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:sT(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:iT(t.effort.duration_ms?.median)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Protocols`}),(0,z.jsx)(`dd`,{children:aT(t.protocol_counts)})]}),(0,z.jsxs)(`div`,{children:[(0,z.jsx)(`dt`,{children:`Runner revisions`}),(0,z.jsx)(`dd`,{children:aT(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:aT(t.failure_class_counts)})]})]})]},t.arm_id))})}function fT({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=cT(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)(lT,{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,`: `,oT(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,`: `,oT(r.metrics[e.metric_name])]},e.metric_name)),(0,z.jsxs)(`small`,{children:[`Countable · `,iT(r.effort.duration_ms),` `,(0,z.jsx)(Qp,{"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 pT({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)(lT,{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:[iT(e.effort.duration_ms),` · `,rT(e.effort.agent_steps),` steps · `,rT(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:oT(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 mT({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)(pT,{packet:e,run:r})]})}function hT(){let e=AT.useSearch(),t=AT.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:eT(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 $w(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)(um,{"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)(Um,{"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)(Yp,{"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)(Zm,{"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)(lT,{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)(hm,{"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:[nT(n.campaign.selected_score_countable_coverage_rate),` declared coverage`]})]}),(0,z.jsxs)(`article`,{children:[(0,z.jsx)(dm,{"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)(Qp,{"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)(Yp,{"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:[tT.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)(Um,{"aria-hidden":`true`,size:14}),` Refresh local readback`]})]}),(0,z.jsxs)(`div`,{className:`benchmark-content`,children:[e.view===`campaign`&&(0,z.jsx)(uT,{packet:n,primaryMetric:l}),e.view===`arms`&&(0,z.jsx)(dT,{packet:n}),e.view===`cases`&&(0,z.jsx)(fT,{onOpenRun:e=>u(`runs`,e),packet:n,primaryMetric:l}),e.view===`runs`&&(0,z.jsx)(mT,{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)(Zm,{"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 gT=J({goalId:W().optional().default(``),statusUrl:W().optional().default(``)}),_T=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(``)}),vT=_T.omit({mode:!0}),yT=J({dashboardUrl:W().optional().default(``),view:Y([`campaign`,`arms`,`cases`,`runs`]).optional().default(`campaign`),runId:W().optional().default(``)});function bT(){let e=`https://loopx-project.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 xT({goalId:e,statusUrl:t}){let n=t?dh(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 ST(){let e=ET.useSearch();return e.mode===`ops`?(0,z.jsx)(xT,{...e}):e.mode===`developer`?(0,z.jsx)(ii,{replace:!0,to:`/developers/projections`}):(0,z.jsx)(bT,{})}function CT(){return(0,z.jsx)(xT,{...DT.useSearch()})}var wT=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`})]})}),TT=xi({getParentRoute:()=>wT,path:`/`,validateSearch:e=>gT.parse(e),component:Ow}),ET=xi({getParentRoute:()=>wT,path:`/frontstage`,validateSearch:e=>_T.parse(e),component:ST}),DT=xi({getParentRoute:()=>wT,path:`/deprecated/frontstage/ops`,validateSearch:e=>vT.parse(e),component:CT}),OT=xi({getParentRoute:()=>wT,path:`/frontstage/developer`,component:()=>(0,z.jsx)(ii,{replace:!0,to:`/developers/projections`})}),kT=xi({getParentRoute:()=>wT,path:`/developers/projections`,component:Hw}),AT=xi({getParentRoute:()=>wT,path:`/benchmarks/study`,validateSearch:e=>yT.parse(e),component:hT}),jT=wT.addChildren([TT,ET,DT,OT,kT,AT]);function MT(e){return!e||e===`/`||e===`./`?`/`:(e.startsWith(`/`)?e:`/${e}`).replace(/\/+$/,``)||`/`}var NT=Li({routeTree:jT,basepath:MT(`/chat/`),trailingSlash:`preserve`}),PT=document.getElementById(`root`);if(!PT)throw Error(`Root element not found`);var FT=new je({defaultOptions:{queries:{refetchOnWindowFocus:!1,retry:1,staleTime:1e4}}});(0,Vi.createRoot)(PT).render((0,z.jsx)(Fe,{client:FT,children:(0,z.jsx)(qi,{children:(0,z.jsx)(Bi,{router:NT})})})); \ No newline at end of file diff --git a/loopx/web/chat/index.html b/loopx/web/chat/index.html index 82d5efe7a..3e1135970 100644 --- a/loopx/web/chat/index.html +++ b/loopx/web/chat/index.html @@ -18,8 +18,8 @@ content="LoopX 个人 Agent 工作区:在同一个频道里查看、纠偏并推进 Goal。" /> LoopX 个人 Agent 工作区 - - + +
From b242531a9228a529dbdc1ec152900ef5f656a179 Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Mon, 21 Sep 2026 02:27:14 +0800 Subject: [PATCH 2/3] docs: explain artifact comparison and refresh team-workspace checkpoint Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- .../rfcs/live-team-workspace-v0.md | 21 ++++++++++-------- .../rfcs/live-team-workspace-v0.zh-CN.md | 14 +++++++----- .../rfcs/loopx-overall-roadmap-v0.md | 17 +++++++------- .../rfcs/loopx-overall-roadmap-v0.zh-CN.md | 12 +++++----- .../team-comparison-desktop.png | Bin 0 -> 113235 bytes .../team-comparison-mobile.png | Bin 0 -> 48715 bytes .../team-comparison-unavailable.png | Bin 0 -> 109698 bytes docs/reference/local-delegation.md | 20 +++++++++++++++++ 8 files changed, 55 insertions(+), 29 deletions(-) create mode 100644 docs/assets/personal-workspace/team-comparison-desktop.png create mode 100644 docs/assets/personal-workspace/team-comparison-mobile.png create mode 100644 docs/assets/personal-workspace/team-comparison-unavailable.png diff --git a/docs/architecture/rfcs/live-team-workspace-v0.md b/docs/architecture/rfcs/live-team-workspace-v0.md index ea485dffd..530900289 100644 --- a/docs/architecture/rfcs/live-team-workspace-v0.md +++ b/docs/architecture/rfcs/live-team-workspace-v0.md @@ -309,16 +309,19 @@ Pausing the coordinator does not stop dispatched workers: name those workers and the remaining execution scope. If worker cancellation is unsupported, state it explicitly; a whole-team stop claim requires worker-owner termination readback. -Implementation checkpoint (2026-09-20): [#4762](https://github.com/loopx-project/loopx/pull/4762) -is open and proposes version-bound response/revision/use inputs, explicit -requester adoption into an accepted downstream artifact, evidence navigation, -contextual feedback and scoped coordinator pause. File/SQLite, CLI/MCP and -packaged-browser checks cover that local slice; the real GPT attempt stopped at -MCP tool approval before an accepted artifact. This is neither shipped acceptance -nor L1 qualification. Review and reuse that producer rather than rebuilding it. +Implementation checkpoint (2026-09-21): [#4762](https://github.com/loopx-project/loopx/pull/4762) +and [#4811](https://github.com/loopx-project/loopx/pull/4811) are merged. The latter +records native Codex MCP execution and a real-model correction/acceptance/adoption +qualification. This retires the earlier host-approval blocker; it does not prove +the released first-use journey, two continuing cycles or observer comprehension. +Reuse the existing version-bound readback, feedback and scoped pause owners. +The next presentation slice compares an explicitly selected dependency with the +accepted output, requiring the referenced artifact and hash to match. A newer, +missing or unverified source must not silently replace the requested version. +Text differences do not establish semantic correctness or requester adoption. +Keep readable output and comparison prominent; retain raw identifiers in details. `consume_return` alone still means consumption, not version-bound adoption. -Qualify the substantive independent objection, correction and useful synthesis -through the selected real-model episode before claiming L1. Motion is retained +Motion is retained only when it clarifies these transitions; remove effects that obscure absent execution, absent acceptance or source loss. Broader semantic zoom, extra actors and renderer experiments follow this exit. 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 57f30ebf9..7d28c2331 100644 --- a/docs/architecture/rfcs/live-team-workspace-v0.zh-CN.md +++ b/docs/architecture/rfcs/live-team-workspace-v0.zh-CN.md @@ -252,12 +252,14 @@ session、提高历史 receipt 的语义强度或重置 provider。默认概览 什么。暂停协调员不会停止已派发成员:须显示这些成员及仍在执行的范围。成员 不支持取消时明确说明;宣称整队停止需要成员执行 owner 的终止回读。 -实施检查点(2026-09-20):[#4762](https://github.com/loopx-project/loopx/pull/4762) -仍开放,提出版本绑定的响应/修订/使用输入、请求方对已验收下游产物的显式采用、 -证据导航、上下文反馈和范围限定的协调者暂停。File/SQLite、CLI/MCP 与打包浏览器 -检查覆盖本地切片;真实 GPT 尝试在产物被验收前被 MCP 工具审批拦截。这不代表 -已发布验收或 L1 资格。review 并复用该 producer,避免重做;`consume_return` 单独 -仍只代表消费。宣称 L1 前须以真实模型过程验收实质的独立异议、纠偏与有用综合。 +实施检查点(2026-09-21):[#4762](https://github.com/loopx-project/loopx/pull/4762) +和 [#4811](https://github.com/loopx-project/loopx/pull/4811) 已合并。后者记录了原生 +Codex MCP 执行与真实模型纠偏/验收/采用资格,原工具审批阻塞已经解除;这仍不能 +证明发布包首次使用、连续两轮协作或观察者理解度。复用现有版本回读、反馈与范围 +限定暂停的 owner。下一展示切片让用户选择一份依赖,与已验收产物并排阅读;指定 +文件和哈希必须匹配,更新、缺失或无法核验的来源不能替代当时引用的版本。文本 +差异不代表结论正确或请求方已采用。突出可读产物和对照,原始标识收进详情。 +`consume_return` 单独仍只代表消费,不能替代版本绑定的采用。 动态只有让上述变化更清楚才保留;掩盖未执行、未验收 或来源失联的效果应移除。更广的语义缩放、成员扩张和 renderer 探索在此后推进。 diff --git a/docs/architecture/rfcs/loopx-overall-roadmap-v0.md b/docs/architecture/rfcs/loopx-overall-roadmap-v0.md index 023aff177..c67ed06f3 100644 --- a/docs/architecture/rfcs/loopx-overall-roadmap-v0.md +++ b/docs/architecture/rfcs/loopx-overall-roadmap-v0.md @@ -161,7 +161,7 @@ support. A missing dependency moves the date, not the acceptance bar. | Stage / cumulative target | Complete work and existing owner | Exit / permitted claim | | --- | --- | --- | | Narrative and storyboard · 2–3 working days | S1/S5/S13: one audience, one task, first-screen design, 60–90s script, bilingual copy and public evidence plan | Reviewable polished draft; label concepts and replays. No runnable-product claim | -| Recorded product preview · 5–7 working days | R2/R3 + S5: review/integrate #4762, resolve supported host-tool authorization, run one real L1 correction; refine the actual result and evidence view | Packaged frontend plus CLI show exact-version objection/revision/acceptance/adoption, intervention and scoped stop. Record an actual run; no synthetic activity presented as live | +| Recorded product preview · 5–7 working days | R2/R3 + S5: reuse merged collaboration and host-tool authorization, run one reproducible L1 correction; refine the actual result and evidence view | Packaged frontend plus CLI show exact-version objection/revision/acceptance/adoption, intervention and scoped stop. Record an actual run; no synthetic activity presented as live | | Focused public alpha · 2–3 weeks | S1/S4/S12: release-package onboarding, intent-respecting steward/Chat selection, readiness repair, single-Agent fallback, restart/reconnect and useful result return; S5 supplies focused team view | Freeze five independent clean-install attempts before testing; at least four reach the first useful result without maintainer shell intervention, all failures retained. G1's two real cycles must pass before advertising continued team collaboration | | Repeatable beta / full launch kit · 4–6 weeks | S4/S5/S10/S12/S13: upgrade/rollback, revoke/unavailable/quota recovery, pilot-driven UX, measured cost and support; qualify optional Lark separately | At least three independent users repeat a task on another day; publish denominator, interruptions and limitations. Each advertised platform/transport has its own release-artifact evidence | @@ -173,13 +173,14 @@ onboarding time (including prerequisites/login) and the post-readiness interval; authentication or environment failures stay in the funnel. A small pilot is feedback, not statistical reliability or product-market fit. -The critical path is host/tool readiness → real L1 episode → packaged first-use -repair → independent reproduction. #4758 is merged design; #4762 is open at this -revision and does not establish a shipped or real-model-qualified journey. -Its GPT trial ended at MCP approval with no accepted artifact. Resolve the -supported authorization path with its owner; never turn off approval globally -to obtain a recording. Existing implementation successors remain authoritative; -inspect canonical Todos and related PRs before assigning a new slice. +The critical path is usable evidence presentation → a reproducible real episode → +packaged first-use repair → independent reproduction. As of 2026-09-21, #4762 and +#4811 are merged; #4811 records native Codex MCP execution and a real-model +correction lifecycle. The earlier MCP approval block is resolved. This evidence +does not establish a released first-use journey, two continuing cycles or a +polished launch film. Reuse those owners and canonical Todos; qualify the actual +release package and record the episode through its frontend before publishing. +Never disable approvals globally to obtain a recording. The first launch does not wait for hundred-Agent scale, a new state provider, full 3D, all hosts, mobile-native shells, a connector marketplace, payment/booking 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 6c4653337..f58218b3d 100644 --- a/docs/architecture/rfcs/loopx-overall-roadmap-v0.zh-CN.md +++ b/docs/architecture/rfcs/loopx-overall-roadmap-v0.zh-CN.md @@ -144,7 +144,7 @@ Muse 设计页在浏览器超时,其文章通过网页检索读取。本次调 | 阶段 / 累计目标 | 完整工作与既有 owner | 出口 / 可以宣称什么 | | --- | --- | --- | | 定位与分镜 · 2–3 个工作日 | S1/S5/S13:一个人群、一个任务、首屏设计、60–90 秒脚本、双语文案、公开证据计划 | 可审阅的精美草稿;概念与回放明确标注,不宣称产品已可用 | -| 产品实录预览 · 5–7 个工作日 | R2/R3 + S5:review/集成 #4762,解决受支持宿主工具授权,跑通一次真实 L1 纠偏,打磨真实结果与证据视图 | 打包前端 + CLI 展示精确版本的异议/修订/验收/采用、干预和范围准确的停止;实录运行,不把合成活动当 live | +| 产品实录预览 · 5–7 个工作日 | R2/R3 + S5:复用已合并协作与宿主工具授权,复现一次真实 L1 纠偏,打磨真实结果与证据视图 | 打包前端 + CLI 展示精确版本的异议/修订/验收/采用、干预和范围准确的停止;实录运行,不把合成活动当 live | | 聚焦公开 alpha · 2–3 周 | S1/S4/S12:发行包引导、遵守用户意图的管家/Chat 选路、就绪修复、单 Agent 降级、重启/重连和有用结果返回;S5 提供聚焦团队视图 | 测试前冻结五次独立干净安装,至少四次无需维护者 shell 救场拿到首个有用成果,保留全部失败。宣传持续团队协作前必须通过 G1 两轮真实协作 | | 可重复 beta / 完整发布包 · 4–6 周 | S4/S5/S10/S12/S13:升级/回滚、撤权/失联/额度恢复、试用反馈驱动 UX、实测成本与支持负担;可选 Lark 单独验收 | 至少三位独立用户隔天再次完成任务,公开样本分母、干预和限制;每个宣传平台/transport 都有发行包证据 | @@ -153,11 +153,11 @@ Muse 设计页在浏览器超时,其文章通过网页检索读取。本次调 性能数据。同时记录包含环境准备/登录的完整引导耗时与就绪后耗时,认证或环境 失败仍计入漏斗。小规模试用用于发现问题,不能据此宣称统计可靠性或 PMF。 -关键路径是:宿主/工具就绪 → 一次真实 L1 → 打包首次使用修复 → 独立复现。 -本修订时 #4758 已合并但属于设计,#4762 仍开放,不能证明已发布或真实模型验收。 -其中 GPT 尝试被 MCP 审批拦截,没有被验收的产物;通过所属 owner 解决受支持授权 -路径,不能为了录屏全局关闭审批。既有实施 successor 保持权威;分配新工作前核对 -canonical Todos 和相关 PR。 +关键路径是:证据可读的产品表现 → 可复现真实过程 → 打包首次使用修复 → 独立复现。 +截至 2026-09-21,#4762 与 #4811 已合并;#4811 记录了原生 Codex MCP 执行和真实 +模型纠偏闭环,原 MCP 审批阻塞已解除。这仍不能证明发布包首次使用、连续两轮协作 +或精美宣传片已经完成。复用现有 owner 和 canonical Todo;发布前验收实际安装包, +并通过它的前端录制真实过程;不能为了录屏全局关闭审批。 首次发布不等待百 Agent、新状态 provider、完整 3D、全宿主、原生移动壳、连接器 市场、支付/订票或示教自动化。这些保留既有 owner 与独立需求/验收,不挤占 R1 diff --git a/docs/assets/personal-workspace/team-comparison-desktop.png b/docs/assets/personal-workspace/team-comparison-desktop.png new file mode 100644 index 0000000000000000000000000000000000000000..5490871580d4561c273556cf9392b06fce456ef7 GIT binary patch literal 113235 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

$$aw$bNYte~z0J42W1`ai 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

2|+SJ>D2AVs=dx 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 MjjS-w4BTS=11K<>{r~^~ literal 0 HcmV?d00001 diff --git a/docs/assets/personal-workspace/team-comparison-unavailable.png b/docs/assets/personal-workspace/team-comparison-unavailable.png new file mode 100644 index 0000000000000000000000000000000000000000..216608d01c43603a7a513df49990b923ad8e10fd GIT binary patch literal 109698 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 literal 0 HcmV?d00001 diff --git a/docs/reference/local-delegation.md b/docs/reference/local-delegation.md index a287ab36d..d9ac18dcf 100644 --- a/docs/reference/local-delegation.md +++ b/docs/reference/local-delegation.md @@ -366,6 +366,26 @@ observations, not continuous liveness; accepted output does not prove requester adoption. Text is rendered inertly, and source/version identifiers remain inspectable. Returning preserves the execution list and keyboard focus. +For accepted work with version-bound dependencies, **See what changed** lets you +select a referenced source and read it beside the output. Multiple outputs have +an explicit selector. The source operation, artifact reference and SHA-256 must +match the dependency; an unavailable or changed source clears the previous +comparison instead of substituting newer bytes. Highlighting marks the range +containing text changes, not semantic correctness or requester adoption. The +panes stack on narrow screens, and verified version identifiers stay expandable. +This uses the existing read operation and introduces no execution authority. + +中文:在已验收且带版本依赖的执行中,选择“看清这次变化”下的一份依据, +与本次产物并排阅读;多个产物可显式切换。来源 operation、文件与哈希必须匹配, +来源失效会清除上次对照,不能用新文件替代。高亮只表示文本变化范围, +不代表正确或已采用;窄屏上下排列,版本标识仍可展开。这不增加执行权限。 + +Synthetic fixture views: [desktop comparison](../assets/personal-workspace/team-comparison-desktop.png), +[mobile comparison](../assets/personal-workspace/team-comparison-mobile.png), and +[unverified source](../assets/personal-workspace/team-comparison-unavailable.png). +The literal script text in the fixture demonstrates inert artifact rendering; +these are validation screenshots, not a real research result. + While the original coordinator is executing, feedback includes the selected operation and observed artifact hashes in its existing inbox. Pending and delivered receipts stay distinct from application; a retry after an uncertain response From cd02d064c4ee49e71b9f9efc5284c40a0adcf190 Mon Sep 17 00:00:00 2001 From: huangruiteng <14976749+huangruiteng@users.noreply.github.com> Date: Mon, 21 Sep 2026 12:03:38 +0800 Subject: [PATCH 3/3] feat(dashboard): return readable team reports to Goal chat Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com> --- apps/presentation/dashboard/package.json | 3 +- .../smoke/team-artifact-comparison-smoke.mjs | 8 ++- .../dashboard/smoke/team-report-smoke.mjs | 22 +++++++ .../completed-task-lane.tsx | 3 +- .../personal-workspace/goal-loopx-mode.css | 39 ++++++++++++ .../goal-team-comparison.tsx | 14 +++-- .../personal-workspace/goal-team-evidence.tsx | 10 +-- .../personal-workspace/goal-team-results.tsx | 62 +++++++++++++++++++ .../features/personal-workspace/markdown.tsx | 33 +++++++++- .../personal-workspace-model.ts | 6 ++ .../personal-workspace-page.tsx | 6 ++ .../team-artifact-comparison.ts | 9 +++ .../team-artifact-content.tsx | 25 ++++++++ .../dashboard/src/views/dashboard-page.tsx | 5 +- .../rfcs/live-team-workspace-v0.md | 14 ++++- .../rfcs/live-team-workspace-v0.zh-CN.md | 11 +++- .../rfcs/loopx-overall-roadmap-v0.md | 6 ++ .../rfcs/loopx-overall-roadmap-v0.zh-CN.md | 5 ++ docs/reference/local-delegation.md | 22 ++++++- .../personal-workspace-browser/fixture.mjs | 11 ++-- .../personal-workspace-browser/loopx-mode.mjs | 5 +- .../team-evidence.mjs | 48 +++++++++++++- loopx/web/chat/asset-retention.json | 4 +- loopx/web/chat/assets/index-B7W5tIse.css | 1 + loopx/web/chat/assets/index-HEW_sO3r.css | 1 - .../{index-D9FSR43B.js => index-wcIP1ewa.js} | 36 +++++------ loopx/web/chat/index.html | 4 +- 27 files changed, 354 insertions(+), 59 deletions(-) create mode 100644 apps/presentation/dashboard/smoke/team-report-smoke.mjs create mode 100644 apps/presentation/dashboard/src/features/personal-workspace/goal-team-results.tsx create mode 100644 apps/presentation/dashboard/src/features/personal-workspace/team-artifact-content.tsx create mode 100644 loopx/web/chat/assets/index-B7W5tIse.css delete mode 100644 loopx/web/chat/assets/index-HEW_sO3r.css rename loopx/web/chat/assets/{index-D9FSR43B.js => index-wcIP1ewa.js} (72%) diff --git a/apps/presentation/dashboard/package.json b/apps/presentation/dashboard/package.json index 37135d6ac..4fe86c367 100644 --- a/apps/presentation/dashboard/package.json +++ b/apps/presentation/dashboard/package.json @@ -50,7 +50,8 @@ "smoke:action-review-plan": "rm -rf .local/action-review-plan-smoke && tsc --ignoreConfig --target ES2022 --module ES2022 --moduleResolution Bundler --skipLibCheck --strict --rootDir ../../.. --outDir .local/action-review-plan-smoke smoke/action-review-plan-smoke.ts ../../../loopx/control_plane/presentation/action_review_plan.ts src/vite-env.d.ts && node .local/action-review-plan-smoke/apps/presentation/dashboard/smoke/action-review-plan-smoke.js", "smoke:attention-details": "tsc --ignoreConfig --target ES2022 --module CommonJS --moduleResolution Node --ignoreDeprecations 6.0 --resolveJsonModule --esModuleInterop --skipLibCheck --strict --outDir /tmp/loopx-attention-details-smoke smoke/attention-details-smoke.ts && NODE_PATH=\"$PWD/node_modules\" node /tmp/loopx-attention-details-smoke/apps/presentation/dashboard/smoke/attention-details-smoke.js", "smoke:delivery-review": "tsc --ignoreConfig --target ES2022 --module NodeNext --moduleResolution NodeNext --skipLibCheck --strict --rootDir src --outDir node_modules/.cache/delivery-review src/data/delivery-review.ts src/data/goal-acceptance-observation.ts src/features/personal-workspace/delivery-review-copy.ts && node smoke/delivery-review-smoke.mjs", - "smoke:team-artifact-comparison": "tsc --ignoreConfig --target ES2022 --module ES2022 --moduleResolution Bundler --skipLibCheck --strict --rootDir src --outDir node_modules/.cache/team-comparison src/features/personal-workspace/team-artifact-comparison.ts src/vite-env.d.ts && node smoke/team-artifact-comparison-smoke.mjs" + "smoke:team-artifact-comparison": "tsc --ignoreConfig --target ES2022 --module ES2022 --moduleResolution Bundler --skipLibCheck --strict --rootDir src --outDir node_modules/.cache/team-comparison src/features/personal-workspace/team-artifact-comparison.ts src/vite-env.d.ts && node smoke/team-artifact-comparison-smoke.mjs", + "smoke:team-report": "tsc --ignoreConfig --target ES2022 --module ES2022 --moduleResolution Bundler --jsx react-jsx --skipLibCheck --strict --rootDir src --outDir node_modules/.cache/team-report src/features/personal-workspace/team-artifact-content.tsx src/vite-env.d.ts && node smoke/team-report-smoke.mjs" }, "dependencies": { "@fontsource-variable/geist": "^5.3.0", diff --git a/apps/presentation/dashboard/smoke/team-artifact-comparison-smoke.mjs b/apps/presentation/dashboard/smoke/team-artifact-comparison-smoke.mjs index 089f191e5..5e177dce9 100644 --- a/apps/presentation/dashboard/smoke/team-artifact-comparison-smoke.mjs +++ b/apps/presentation/dashboard/smoke/team-artifact-comparison-smoke.mjs @@ -1,5 +1,5 @@ import assert from "node:assert/strict"; -import {comparisonSource, changedRange} from "../node_modules/.cache/team-comparison/features/personal-workspace/team-artifact-comparison.js"; +import {comparisonSource, changedRange, preferredComparisonIndex} from "../node_modules/.cache/team-comparison/features/personal-workspace/team-artifact-comparison.js"; const link = {operation_id: "original", ref: "report.txt", sha256: "a".repeat(64), input_ref: "input.txt", relation: "revises", state: "current"}; @@ -24,4 +24,10 @@ const inserted = changedRange("one\nend", "one\nadded\nend"); assert.equal(inserted.leftEnd, 1); assert.equal(inserted.rightEnd, 2); const removed = changedRange("one\nremoved\nend", "one\nend"); assert.equal(removed.leftEnd, 2); assert.equal(removed.rightEnd, 1); +const outputs = [{ref: "output.json"}, {ref: "review.md"}, {ref: "report.md"}]; +assert.equal(preferredComparisonIndex("report.md", outputs), 2); +assert.equal(preferredComparisonIndex("analysis.MD", outputs), 1); +assert.equal(preferredComparisonIndex("source.json", outputs), 0); +assert.equal(preferredComparisonIndex("no-extension", outputs), 0); +assert.equal(preferredComparisonIndex("source.txt", outputs), 0); console.log("team artifact comparison: exact-version rejection and changed-range cases passed"); diff --git a/apps/presentation/dashboard/smoke/team-report-smoke.mjs b/apps/presentation/dashboard/smoke/team-report-smoke.mjs new file mode 100644 index 000000000..ae3e9c236 --- /dev/null +++ b/apps/presentation/dashboard/smoke/team-report-smoke.mjs @@ -0,0 +1,22 @@ +import assert from "node:assert/strict"; +import {createElement} from "react"; +import {renderToStaticMarkup} from "react-dom/server"; +import {MarkdownText} from "../node_modules/.cache/team-report/features/personal-workspace/markdown.js"; +import {TeamArtifactContent} from "../node_modules/.cache/team-report/features/personal-workspace/team-artifact-content.js"; + +const text = '# Research\n\n| Measure | Value |\n|---|---:|\n| **Cash** | 75 |\n| Escaped \\| label | 25 |\n\n[Source](https://example.org/report)\n\n[Unsafe](javascript:alert(1))\n![Tracking](https://example.org/pixel)'; +const artifact = {ref: "report.md", sha256: "a".repeat(64), text}; +const html = renderToStaticMarkup(createElement(TeamArtifactContent, {artifact, label: "Report"})); +assert.match(html, //); assert.match(html, /scope="col"/); assert.match(html, /Cash<\/strong>/); +assert.match(html, /Escaped \| label/); assert.match(html, /href="https:\/\/example.org\/report"/); +assert.doesNotMatch(html, /|/, "Existing chat rendering stays unchanged"); +const malformed = renderToStaticMarkup(createElement(MarkdownText, {text: "| One | Two |\n|---|\n| kept | intact |", report: true})); +assert.doesNotMatch(malformed, /
/); assert.match(malformed, /kept/); +const json = renderToStaticMarkup(createElement(TeamArtifactContent, {artifact: {...artifact, ref: "report.json"}, label: "JSON"})); +assert.doesNotMatch(json, /
/, "File suffix does not turn JSON evidence into a report"); +console.log("report rendering: readable table, raw fidelity, safe links and inert HTML, chat parity passed"); diff --git a/apps/presentation/dashboard/src/features/personal-workspace/completed-task-lane.tsx b/apps/presentation/dashboard/src/features/personal-workspace/completed-task-lane.tsx index bcbc4e1cc..d6edf1e9c 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/completed-task-lane.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/completed-task-lane.tsx @@ -1,5 +1,6 @@ import { useEffect, useId, useRef, useState } from "react"; import { z } from "zod"; +import {compactWorkspaceText} from "./personal-workspace-model"; import type { WorkspaceAgentTodo, WorkspaceDrawerSelection, WorkspaceGoal } from "./personal-workspace-model"; import { useWorkspaceI18n } from "./i18n"; @@ -75,7 +76,7 @@ export function CompletedTaskLane({ goal, agentId, seed, enabled, listView = fal const todo = rows[index]!; return
; })} 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 7e2208f32..307bcb600 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 @@ -70,3 +70,42 @@ .goal-team-comparison-grid pre span[data-changed="true"] { background: color-mix(in srgb, var(--pw-text, #171717) 7%, transparent); text-decoration: underline; text-decoration-color: var(--pw-muted, #666); text-underline-offset: 4px; } .goal-team-comparison select { min-height: 44px; padding: 8px; background: var(--pw-surface, #fff); color: inherit; border: 1px solid var(--pw-line, #ebebeb); border-radius: 6px; } @media (max-width: 640px) { .goal-team-comparison-grid { grid-template-columns: 1fr; } } + +.goal-team-artifact > header { display: flex; justify-content: space-between; align-items: center; gap: 16px; margin-bottom: 16px; } +.goal-team-artifact > header h4 { font-size: 12px; color: var(--pw-muted); font-weight: 500; } +.goal-team-report { padding: 24px; background: var(--pw-surface, #fff); color: var(--pw-text, #171717); overflow-wrap: anywhere; } +.goal-team-report .personal-md { font-size: 15px; line-height: 1.8; gap: 20px; } +.goal-team-report .personal-md p { font-size: inherit; line-height: inherit; color: inherit; margin: 0; } +.goal-team-report .personal-md .is-h1 { font-size: 26px; line-height: 1.3; font-weight: 600; letter-spacing: -.03em; } +.goal-team-report .personal-md .is-h2 { font-size: 18px; font-weight: 600; margin-top: 8px; } +.goal-team-report .personal-md-list { list-style: revert; margin: 0; padding-left: 24px; } +.goal-team-report .personal-md-list li { border: 0; padding: 0; } +.personal-md-table-scroll { min-width: 0; max-width: 100%; overflow-x: auto; } +.personal-md-table-scroll table { width: 100%; border-collapse: collapse; font-size: 14px; line-height: 1.6; } +.personal-md-table-scroll th, .personal-md-table-scroll td { padding: 12px; border-bottom: 1px solid var(--pw-line, #ebebeb); text-align: left; vertical-align: top; } +.personal-md-table-scroll th { font-weight: 500; background: var(--pw-bg, #fafafa); } +.goal-team-comparison-grid .goal-team-report { max-height: 480px; overflow: auto; } +.goal-team-comparison-grid .goal-team-report .personal-md { font-size: 14px; } +.goal-team-results { width: min(960px, 100%); margin: 16px auto 24px; padding: 24px; border: 1px solid var(--pw-line, #ebebeb); border-radius: 12px; background: var(--pw-surface, #fff); color: var(--pw-text, #171717); } +.goal-team-results > header { display: flex; align-items: center; justify-content: space-between; gap: 16px; } +.goal-team-results h3 { font-size: 16px; font-weight: 600; margin: 0; } +.goal-team-results p { font-size: 12px; line-height: 1.7; color: var(--pw-muted); } +.goal-team-results [role="alert"] { color: var(--pw-red, #b42318); } +.goal-team-results button, .goal-team-results select { min-height: 44px; padding: 8px 12px; border: 1px solid var(--pw-line, #ebebeb); border-radius: 6px; background: var(--pw-surface, #fff); color: inherit; font: inherit; cursor: pointer; } +.goal-team-results button[aria-pressed="true"] { border-color: var(--pw-text); } +.goal-team-results button:disabled { opacity: .5; cursor: default; } +.goal-team-results summary { cursor: pointer; padding: 12px 0; font-size: 12px; min-height: 44px; } +.goal-team-results code { overflow-wrap: anywhere; } +.goal-team-report table code { white-space: pre; overflow-wrap: normal; word-break: normal; } +.goal-team-results pre { padding: 16px; max-height: 400px; overflow: auto; white-space: pre-wrap; overflow-wrap: anywhere; font: 13px/1.7 var(--font-mono, monospace); background: var(--pw-bg); } +.goal-team-result-list { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 16px; } +.goal-team-result-list button { max-width: 100%; overflow-wrap: anywhere; font-size: 13px; text-align: start; } +.goal-team-result-reader { border-top: 1px solid var(--pw-line); margin-top: 16px; padding-top: 16px; } +.goal-team-results .goal-team-artifact > header { margin-bottom: 0; } +.goal-team-results :focus-visible, .goal-team-report:focus-visible, .personal-md-table-scroll:focus-visible { outline: 2px solid var(--pw-blue-ink, #0070f3); outline-offset: 2px; } +@media (max-width: 640px) { + .goal-team-results { padding: 16px; } + .goal-team-report { padding: 16px 0; } + .goal-team-comparison-grid .goal-team-report { padding: 16px; } + .goal-team-report .personal-md .is-h1 { font-size: 22px; } +} diff --git a/apps/presentation/dashboard/src/features/personal-workspace/goal-team-comparison.tsx b/apps/presentation/dashboard/src/features/personal-workspace/goal-team-comparison.tsx index 6f5812f4a..fccfde697 100644 --- a/apps/presentation/dashboard/src/features/personal-workspace/goal-team-comparison.tsx +++ b/apps/presentation/dashboard/src/features/personal-workspace/goal-team-comparison.tsx @@ -1,6 +1,7 @@ import {useEffect, useRef, useState} from "react"; import {readLoopXTeamWork, type DelegationDependency, type DelegationReadback} from "../../data/chat"; -import {changedRange, comparisonSource} from "./team-artifact-comparison"; +import {changedRange, comparisonSource, preferredComparisonIndex} from "./team-artifact-comparison"; +import {TeamArtifactContent} from "./team-artifact-content"; export function GoalTeamComparison({sessionId, result, zh}: { sessionId: string; result: DelegationReadback; zh: boolean; @@ -9,6 +10,7 @@ export function GoalTeamComparison({sessionId, result, zh}: { const [outputIndex, setOutputIndex] = useState(0); const [busy, setBusy] = useState(false); const [error, setError] = useState(""); + const [raw, setRaw] = useState(false); const generation = useRef(0); useEffect(() => { generation.current++; setSelection(null); setError(""); setBusy(false); setOutputIndex(0); @@ -18,7 +20,7 @@ export function GoalTeamComparison({sessionId, result, zh}: { const links = result.dependencies ?? []; async function compare(link: DelegationDependency) { const current = ++generation.current; - setSelection(null); setError(""); setBusy(true); setOutputIndex(0); + setSelection(null); setError(""); setBusy(true); setOutputIndex(preferredComparisonIndex(link.ref, artifacts)); setRaw(false); try { const source = await readLoopXTeamWork(sessionId, link.operation_id); if (current !== generation.current) return; @@ -42,11 +44,13 @@ export function GoalTeamComparison({sessionId, result, zh}: { key={`${link.operation_id}:${link.input_ref}:${index}`} disabled={busy || link.state !== "current"} aria-pressed={selection?.link === link} onClick={() => void compare(link)}> {labels[link.relation]}{link.ref} + {links.filter(row => row.ref === link.ref).length > 1 ? {link.operation_id} : null} {link.state !== "current" ? {zh ? "无法核验" : "Unavailable"} : null} )} {busy ?

{zh ? "正在读取指定来源版本…" : "Reading the referenced source version…"}

: null} {error ?

{error}

: null} {before && after && range ? <> + {artifacts.length > 1 ? : null} @@ -54,12 +58,14 @@ export function GoalTeamComparison({sessionId, result, zh}: { {([{kind: "source", title: zh ? "指定来源" : "Referenced source", artifact: before, lines: range.left, end: range.leftEnd}, {kind: "result", title: zh ? "本次产物" : "This output", artifact: after, lines: range.right, end: range.rightEnd}]).map(pane =>
{pane.title}{pane.artifact.ref}
-
{pane.lines.map((line, i) => {pane.lines.map((line, i) => = range.start && i < pane.end}>{line}{i < pane.lines.length - 1 ? "\n" : ""})}
+ : }
)}

{before.text === after.text ? (zh ? "两个版本的文本相同。" : "Both versions contain the same text.") - : (zh ? "标记文本变化所在范围;不代表结论正确或已被采用。" : "Marks the range containing text changes; does not establish correctness or adoption.")}

+ : raw ? (zh ? "标记文本变化所在范围;不代表结论正确或已被采用。" : "Marks the range containing text changes; does not establish correctness or adoption.") + : (zh ? "正文对照;验收与采用见版本关系。" : "Read the reports; see lineage for acceptance and adoption.")}

{zh ? "核验的版本" : "Verified versions"} {before.ref} · sha256:{before.sha256}{after.ref} · sha256:{after.sha256}
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 226d1132a..6b7033aef 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,5 +1,6 @@ import {GoalTeamLineage} from "./goal-team-lineage"; import {GoalTeamComparison} from "./goal-team-comparison"; +import {TeamArtifactReport} from "./team-artifact-content"; import {useEffect, useRef, useState} from "react"; import {delegationStateLabel, readLoopXTeamWork, sendLoopXMessage, type DelegationReadback, type LoopXModeSnapshot} from "../../data/chat"; @@ -65,13 +66,12 @@ export function GoalTeamEvidence({sessionId, operationId, zh, canMessage, ingres {result.error ?

{result.error}

: null} - {result.status === "accepted" && result.artifacts?.length ? result.artifacts.map(artifact =>
-

{artifact.ref}

-
{artifact.text}
+ {result.status === "accepted" && !result.error && !result.recovery_required && result.artifacts?.length ? result.artifacts.map(artifact =>
+
{zh ? "版本与来源标识" : "Version and source identifiers"} - {operationId}sha256:{artifact.sha256}{result.request_id}{result.todo_id} + {operationId}{result.request_id}{result.todo_id}
-
) :

{zh ? "本次读取没有可展示的已验收产物。" : "No accepted artifact is available in this readback."}

} + ) :

{zh ? "本次读取没有可展示的已验收产物。" : "No accepted artifact is available in this readback."}

} {event.preventDefault(); void send();}}>